From 3b64afe4e1817c9a6cd7c900743d5a6e193efdd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B0=D1=82=D0=BE=D0=BB=D0=B8=D0=B9=20=D0=91?= =?UTF-8?q?=D0=B5=D0=BB=D1=8F=D0=BD=D1=81=D0=BA=D0=B8=D0=B9?= Date: Sat, 16 May 2026 20:05:55 +1000 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D1=85=D0=BE=D0=B4=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BE=D1=82=D0=BD=D0=BE=D1=81=D0=B8=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5=20URL=20=D0=BF=D0=BE=D0=B4=D0=BC?= =?UTF-8?q?=D0=BE=D0=B4=D1=83=D0=BB=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitmodules | 2 +- Shared_Includes | 2 +- {src/ZX_ROMS => ZX_ROMS}/new/SP_128.bin | Bin {src/ZX_ROMS => ZX_ROMS}/new/SP_TRDOS.bin | Bin {src/ZX_ROMS => ZX_ROMS}/new/SP__48.bin | Bin {src/ZX_ROMS => ZX_ROMS}/new/ZX_EXP.bin | Bin {src/ZX_ROMS => ZX_ROMS}/new/ZX_EXP2.bin | Bin {src/bin => bin}/hrust.exe | Bin {src/bin => bin}/mhmt | Bin {src/bios => bios}/BIOS.asm | 22 +- {src/bios => bios}/BUILD.a80 | 12 +- {src/bios => bios}/exp/BIOS_FUNC.asm | 1544 +++--- {src/bios => bios}/exp/DCP.ASM | 0 {src/bios => bios}/exp/EXP.asm | 3280 +++++------ .../bios => bios}/exp/EXTENDED/FDD_DRIVER.asm | 1708 +++--- .../exp/EXTENDED/IDE/ATAPI_DRV.ASM | 1892 +++---- .../exp/EXTENDED/IDE/ATA_DRV.ASM | 1340 ++--- .../exp/EXTENDED/RAM_DISK_DRIVER.asm | 0 {src/bios => bios}/exp/EXTENDED/shared.asm | 0 {src/bios => bios}/exp/FONT.ASM | 346 +- {src/bios => bios}/exp/FUNC_4x.ASM | 1762 +++--- {src/bios => bios}/exp/FUNC_5x.asm | 190 +- {src/bios => bios}/exp/FUNC_CMOS.ASM | 0 {src/bios => bios}/exp/FUNC_FOR_TRDOS.ASM | 0 {src/bios => bios}/exp/FUNC_LOW_PRINT.ASM | 4808 ++++++++--------- {src/bios => bios}/exp/FUNC_RAM_ROM_DRV.ASM | 2262 ++++---- {src/bios => bios}/exp/FUNC_SCREEN.ASM | 2290 ++++---- {src/bios => bios}/exp/FUNC_SERVICE.asm | 1272 ++--- {src/bios => bios}/exp/FUNC_SYS.ASM | 0 {src/bios => bios}/exp/ZX_MEM.TXT | 0 .../bios => bios}/loader/bitstream_header.inc | 8 +- {src/bios => bios}/loader/loader.asm | 338 +- bios/logo/Set_Pictures.asm | 54 + {src/bios => bios}/logo/peters.bmp | Bin {src/bios => bios}/logo/pfathers.bmp | Bin {src/bios => bios}/logo/psclean.bmp | Bin {src/bios => bios}/logo/psfathers.bmp | Bin {src/bios => bios}/mem_map.txt | 30 +- {src/bios => bios}/rom/BIOS.inc | 10 +- {src/bios => bios}/rom/MEM_MAP.inc | 144 +- {src/bios => bios}/rom/ROM.asm | 892 +-- {src/bios => bios}/rom/SETUP/AUTOIDE.asm | 0 {src/bios => bios}/rom/SETUP/IM2_INT.asm | 0 {src/bios => bios}/rom/SETUP/KEY.asm | 1578 +++--- {src/bios => bios}/rom/SETUP/MAIN.asm | 3940 +++++++------- {src/bios => bios}/rom/SETUP/SETTINGS.asm | 2182 ++++---- {src/bios => bios}/rom/SETUP/VIDEO_IO.asm | 1312 ++--- {src/bios => bios}/rom/SETUP/messages.z80 | 1856 +++---- .../bios => bios}/rom/SETUP/startup_sound.asm | 326 +- {src/bios => bios}/rom/ZX/ZX_FUNC.ASM | 0 {src/bios => bios}/rom/ZX/ZX_MENU.ASM | 1504 +++--- {src/bios => bios}/rom/_not_used/DEHRUST.asm | 0 {src/bios => bios}/rom/_not_used/LZ4_DEC.asm | 314 +- .../rom/_not_used/Logo_Depacker.asm | 176 +- {src/bios => bios}/rom/_not_used/ayfxplay.asm | 0 .../rom/_not_used/netherworld_8.afx | Bin {src/bios => bios}/shared/CompMacro.asm | 344 +- {src/bios => bios}/shared/DEFINES.INC | 2 +- {src/bios => bios}/shared/RECOVERY.IMG | Bin {src/bios => bios}/shared/VERSION.inc | 118 +- bios/shared/includes.inc | 17 + {src/doc => doc}/CDLOADER.TXT | 524 +- {src/doc => doc}/SETUP.REV | 58 +- {src/doc => doc}/_BIOS.REV | 242 +- {src/doc => doc}/changes.txt | 306 +- {src/doc => doc}/перехваты ресета.txt | 72 +- src/altera/acex/k30/ACCELER.ACF | 568 -- src/altera/acex/k30/ACCELER.INC | 26 - src/altera/acex/k30/ACCELER.TDF | 374 -- src/altera/acex/k30/AY.ACF | 578 -- src/altera/acex/k30/AY.INC | 26 - src/altera/acex/k30/AY.MIF | 154 - src/altera/acex/k30/AY.TDF | 368 -- src/altera/acex/k30/DCP.ACF | 568 -- src/altera/acex/k30/DCP.INC | 27 - src/altera/acex/k30/DCP.MIF | 119 - src/altera/acex/k30/DCP.TDF | 750 --- src/altera/acex/k30/KBD.ACF | 568 -- src/altera/acex/k30/KBD.INC | 26 - src/altera/acex/k30/KBD.TDF | 180 - src/altera/acex/k30/KBD_INI2.MIF | 167 - src/altera/acex/k30/MOUSE.ACF | 571 -- src/altera/acex/k30/MOUSE.INC | 26 - src/altera/acex/k30/MOUSE.MIF | 65 - src/altera/acex/k30/MOUSE.TDF | 76 - src/altera/acex/k30/SP2_ACEX.ACF | 1366 ----- src/altera/acex/k30/SP2_ACEX.TDF | 1227 ----- src/altera/acex/k30/VIDEO2.ACF | 588 -- src/altera/acex/k30/VIDEO2.INC | 27 - src/altera/acex/k30/VIDEO2.TDF | 783 --- src/altera/acex/k30/VIDEO2_T1.TDF | 708 --- src/altera/acex/k30/VIDEO2_T2.TDF | 773 --- src/altera/acex/k30/VIDEO2_T2_51mhz.TDF | 783 --- src/altera/acex/k30/VIDEO2_T2_dip_stable.TDF | 783 --- src/altera/acex/k30_make.bat | 5 - src/altera/make_altera.cmd | 10 - src/altera/max/7064/SP2_MAX.ACF | 653 --- src/altera/max/7064/sp2_max.tdf | 499 -- src/altera/max/7128/SP2_MAX.ACF | 699 --- src/altera/max/7128/sp2_max.tdf | 499 -- src/altera/max/7128_make.bat | 4 - src/altera/max/SP2_MAX.TDF | 499 -- src/altera/max/SP2_MAX_7128.pof | Bin 7980 -> 0 bytes src/altera/max/clean.bat | 28 - src/altera/max/compile.log | 214 - src/altera/max/make.cmd | 46 - src/altera/max/sp2_max.rpt | 1585 ------ src/altera/quartus/acex/ACCELER.ACF | 568 -- src/altera/quartus/acex/ACCELER.INC | 26 - src/altera/quartus/acex/ACCELER.TDF | 374 -- src/altera/quartus/acex/AY.ACF | 578 -- src/altera/quartus/acex/AY.INC | 26 - src/altera/quartus/acex/AY.MIF | 154 - src/altera/quartus/acex/AY.TDF | 368 -- src/altera/quartus/acex/DCP.ACF | 568 -- src/altera/quartus/acex/DCP.INC | 27 - src/altera/quartus/acex/DCP.MIF | 119 - src/altera/quartus/acex/DCP.TDF | 750 --- src/altera/quartus/acex/KBD.ACF | 568 -- src/altera/quartus/acex/KBD.INC | 26 - src/altera/quartus/acex/KBD.TDF | 180 - src/altera/quartus/acex/KBD_INI2.MIF | 167 - src/altera/quartus/acex/MOUSE.ACF | 571 -- src/altera/quartus/acex/MOUSE.INC | 26 - src/altera/quartus/acex/MOUSE.MIF | 65 - src/altera/quartus/acex/MOUSE.TDF | 76 - src/altera/quartus/acex/SP2_ACEX.ACF | 1366 ----- src/altera/quartus/acex/SP2_ACEX.TDF | 1227 ----- src/altera/quartus/acex/SP2_ACEX.flow.rpt | 103 - src/altera/quartus/acex/SP2_ACEX.map.rpt | 184 - src/altera/quartus/acex/SP2_ACEX.map.summary | 5 - src/altera/quartus/acex/SP2_ACEX.qpf | 30 - src/altera/quartus/acex/SP2_ACEX.qsf | 1918 ------- src/altera/quartus/acex/SP2_ACEX.qws | 18 - src/altera/quartus/acex/VIDEO2.ACF | 588 -- src/altera/quartus/acex/VIDEO2.INC | 27 - src/altera/quartus/acex/VIDEO2.TDF | 692 --- .../quartus/acex/db/SP2_ACEX.(0).cnf.cdb | Bin 49382 -> 0 bytes .../quartus/acex/db/SP2_ACEX.(0).cnf.hdb | Bin 5893 -> 0 bytes .../quartus/acex/db/SP2_ACEX.(1).cnf.cdb | Bin 4573 -> 0 bytes .../quartus/acex/db/SP2_ACEX.(1).cnf.hdb | Bin 931 -> 0 bytes .../quartus/acex/db/SP2_ACEX.(2).cnf.cdb | Bin 12322 -> 0 bytes .../quartus/acex/db/SP2_ACEX.(2).cnf.hdb | Bin 1789 -> 0 bytes .../quartus/acex/db/SP2_ACEX.(3).cnf.cdb | Bin 1089 -> 0 bytes .../quartus/acex/db/SP2_ACEX.(3).cnf.hdb | Bin 550 -> 0 bytes src/altera/quartus/acex/db/SP2_ACEX.cbx.xml | 5 - src/altera/quartus/acex/db/SP2_ACEX.cmp.rdb | Bin 3549 -> 0 bytes src/altera/quartus/acex/db/SP2_ACEX.db_info | 3 - src/altera/quartus/acex/db/SP2_ACEX.eco.cdb | Bin 175 -> 0 bytes src/altera/quartus/acex/db/SP2_ACEX.hif | 447 -- src/altera/quartus/acex/db/SP2_ACEX.map.hdb | Bin 24299 -> 0 bytes src/altera/quartus/acex/db/SP2_ACEX.map.qmsg | 30 - .../acex/db/SP2_ACEX.sld_design_entry.sci | Bin 168 -> 0 bytes .../quartus/acex/db/SP2_ACEX.tis_db_list.ddb | Bin 188 -> 0 bytes .../acex/db/prev_cmp_SP2_ACEX.map.qmsg | 30 - .../quartus/acex/db/prev_cmp_SP2_ACEX.qmsg | 31 - .../maxplusii_to_quartus_name_mapping.txt | 307 -- src/altera/quartus/max/db/add_sub_uch.tdf | 42 - .../quartus/max/db/prev_cmp_sp2_max.asm.qmsg | 5 - .../quartus/max/db/prev_cmp_sp2_max.eda.qmsg | 5 - .../quartus/max/db/prev_cmp_sp2_max.fit.qmsg | 6 - .../quartus/max/db/prev_cmp_sp2_max.map.qmsg | 56 - .../quartus/max/db/prev_cmp_sp2_max.qmsg | 5 - .../quartus/max/db/prev_cmp_sp2_max.tan.qmsg | 31 - src/altera/quartus/max/db/sp2_max.(0).cnf.cdb | Bin 16144 -> 0 bytes src/altera/quartus/max/db/sp2_max.(0).cnf.hdb | Bin 3057 -> 0 bytes src/altera/quartus/max/db/sp2_max.(1).cnf.cdb | Bin 2173 -> 0 bytes src/altera/quartus/max/db/sp2_max.(1).cnf.hdb | Bin 751 -> 0 bytes .../quartus/max/db/sp2_max.(10).cnf.cdb | Bin 987 -> 0 bytes .../quartus/max/db/sp2_max.(10).cnf.hdb | Bin 611 -> 0 bytes .../quartus/max/db/sp2_max.(11).cnf.cdb | Bin 582 -> 0 bytes .../quartus/max/db/sp2_max.(11).cnf.hdb | Bin 506 -> 0 bytes .../quartus/max/db/sp2_max.(12).cnf.cdb | Bin 508 -> 0 bytes .../quartus/max/db/sp2_max.(12).cnf.hdb | Bin 503 -> 0 bytes src/altera/quartus/max/db/sp2_max.(2).cnf.cdb | Bin 2929 -> 0 bytes src/altera/quartus/max/db/sp2_max.(2).cnf.hdb | Bin 768 -> 0 bytes src/altera/quartus/max/db/sp2_max.(3).cnf.cdb | Bin 2493 -> 0 bytes src/altera/quartus/max/db/sp2_max.(3).cnf.hdb | Bin 760 -> 0 bytes src/altera/quartus/max/db/sp2_max.(4).cnf.cdb | Bin 1547 -> 0 bytes src/altera/quartus/max/db/sp2_max.(4).cnf.hdb | Bin 728 -> 0 bytes src/altera/quartus/max/db/sp2_max.(5).cnf.cdb | Bin 1858 -> 0 bytes src/altera/quartus/max/db/sp2_max.(5).cnf.hdb | Bin 794 -> 0 bytes src/altera/quartus/max/db/sp2_max.(6).cnf.cdb | Bin 886 -> 0 bytes src/altera/quartus/max/db/sp2_max.(6).cnf.hdb | Bin 598 -> 0 bytes src/altera/quartus/max/db/sp2_max.(7).cnf.cdb | Bin 885 -> 0 bytes src/altera/quartus/max/db/sp2_max.(7).cnf.hdb | Bin 598 -> 0 bytes src/altera/quartus/max/db/sp2_max.(8).cnf.cdb | Bin 5548 -> 0 bytes src/altera/quartus/max/db/sp2_max.(8).cnf.hdb | Bin 1243 -> 0 bytes src/altera/quartus/max/db/sp2_max.(9).cnf.cdb | Bin 987 -> 0 bytes src/altera/quartus/max/db/sp2_max.(9).cnf.hdb | Bin 611 -> 0 bytes src/altera/quartus/max/db/sp2_max.asm.qmsg | 5 - src/altera/quartus/max/db/sp2_max.cbx.xml | 6 - src/altera/quartus/max/db/sp2_max.cmp.cdb | Bin 21365 -> 0 bytes src/altera/quartus/max/db/sp2_max.cmp.hdb | Bin 17241 -> 0 bytes src/altera/quartus/max/db/sp2_max.cmp.logdb | 1 - src/altera/quartus/max/db/sp2_max.cmp.rdb | Bin 23263 -> 0 bytes src/altera/quartus/max/db/sp2_max.cmp.tdb | Bin 15893 -> 0 bytes src/altera/quartus/max/db/sp2_max.cmp0.ddb | Bin 6713 -> 0 bytes src/altera/quartus/max/db/sp2_max.db_info | 3 - src/altera/quartus/max/db/sp2_max.eco.cdb | Bin 175 -> 0 bytes src/altera/quartus/max/db/sp2_max.eda.qmsg | 5 - src/altera/quartus/max/db/sp2_max.fit.qmsg | 6 - src/altera/quartus/max/db/sp2_max.hier_info | 76 - src/altera/quartus/max/db/sp2_max.hif | 1184 ---- src/altera/quartus/max/db/sp2_max.lpc.html | 18 - src/altera/quartus/max/db/sp2_max.lpc.rdb | Bin 399 -> 0 bytes src/altera/quartus/max/db/sp2_max.lpc.txt | 5 - src/altera/quartus/max/db/sp2_max.map.cdb | Bin 8131 -> 0 bytes src/altera/quartus/max/db/sp2_max.map.hdb | Bin 16646 -> 0 bytes src/altera/quartus/max/db/sp2_max.map.logdb | 1 - src/altera/quartus/max/db/sp2_max.map.qmsg | 56 - src/altera/quartus/max/db/sp2_max.pre_map.cdb | Bin 13509 -> 0 bytes src/altera/quartus/max/db/sp2_max.pre_map.hdb | Bin 13135 -> 0 bytes src/altera/quartus/max/db/sp2_max.rtlv.hdb | Bin 13111 -> 0 bytes src/altera/quartus/max/db/sp2_max.rtlv_sg.cdb | Bin 13447 -> 0 bytes .../quartus/max/db/sp2_max.rtlv_sg_swap.cdb | Bin 192 -> 0 bytes src/altera/quartus/max/db/sp2_max.sgdiff.cdb | Bin 10604 -> 0 bytes src/altera/quartus/max/db/sp2_max.sgdiff.hdb | Bin 30137 -> 0 bytes .../max/db/sp2_max.sld_design_entry.sci | Bin 168 -> 0 bytes .../max/db/sp2_max.sld_design_entry_dsc.sci | Bin 168 -> 0 bytes .../quartus/max/db/sp2_max.syn_hier_info | 0 src/altera/quartus/max/db/sp2_max.tan.qmsg | 31 - .../quartus/max/db/sp2_max.tis_db_list.ddb | Bin 188 -> 0 bytes src/altera/quartus/max/db/sp2_max.tmw_info | 6 - src/altera/quartus/max/incremental_db/README | 11 - .../sp2_max.root_partition.map.kpt | 246 - .../max/maxplusii_to_quartus_name_mapping.txt | 64 - src/altera/quartus/max/sp2_max.acf | 699 --- src/altera/quartus/max/sp2_max.asm.rpt | 109 - src/altera/quartus/max/sp2_max.done | 1 - src/altera/quartus/max/sp2_max.dpf | 12 - src/altera/quartus/max/sp2_max.eda.rpt | 59 - src/altera/quartus/max/sp2_max.fit.rpt | 710 --- src/altera/quartus/max/sp2_max.fit.summary | 9 - src/altera/quartus/max/sp2_max.flow.rpt | 117 - src/altera/quartus/max/sp2_max.map.rpt | 491 -- src/altera/quartus/max/sp2_max.map.summary | 7 - src/altera/quartus/max/sp2_max.pin | 167 - src/altera/quartus/max/sp2_max.pof | Bin 8013 -> 0 bytes src/altera/quartus/max/sp2_max.qpf | 30 - src/altera/quartus/max/sp2_max.qsf | 226 - src/altera/quartus/max/sp2_max.qws | 18 - src/altera/quartus/max/sp2_max.tan.rpt | 1328 ----- src/altera/quartus/max/sp2_max.tan.summary | 136 - src/altera/quartus/max/sp2_max.tdf | 499 -- src/bin/Altera0pak.c | 88 - src/bin/Altera0pak.exe | Bin 56832 -> 0 bytes src/bin/_SPRIN.BIN | Bin 262144 -> 0 bytes src/bin/bmp_extract.dpr | 233 - src/bin/bmp_extract.exe | Bin 154624 -> 0 bytes src/bin/disk3.dpr | 172 - src/bin/disk3.exe | Bin 1150464 -> 0 bytes src/bin/lz4ultra | Bin 153600 -> 0 bytes src/bin/make_num.c | 41 - src/bin/make_num.exe | Bin 57856 -> 0 bytes src/bin/transttf.dpr | 77 - src/bin/transttf.exe | Bin 1150976 -> 0 bytes src/bios/logo/Projects/LOGO.PAK | Bin 5947 -> 0 bytes src/bios/logo/Projects/LOGO.bmp | Bin 10296 -> 0 bytes src/bios/logo/Projects/MAIN.xcf | Bin 15873 -> 0 bytes src/bios/logo/Projects/NY_Kokoshnik.PAK | Bin 1933 -> 0 bytes src/bios/logo/Projects/NY_Kokoshnik.bmp | Bin 3096 -> 0 bytes src/bios/logo/Projects/NY_mustache.PAK | Bin 1084 -> 0 bytes src/bios/logo/Projects/NY_mustache.bmp | Bin 1320 -> 0 bytes src/bios/logo/Projects/test.png | Bin 9161 -> 0 bytes src/bios/logo/Set_Pictures.asm | 198 - src/bios/logo/clean.cmd | 4 - src/bios/logo/compile.log | 4 - src/bios/logo/make.cmd | 23 - src/bios/logo/use/LOGO.bmp | Bin 10296 -> 0 bytes src/bios/logo/use/NY_Kokoshnik.bmp | Bin 3096 -> 0 bytes src/bios/logo/use/NY_Kokoshnik_DAT.BIN | 1 - src/bios/logo/use/NY_mustache.bmp | Bin 1320 -> 0 bytes src/bios/logo/use/NY_mustache_DAT.BIN | 1 - src/bios/logo/use/New_Year.inc | 16 - src/bios/rom/_not_used/EasterSprites.asm | 41 - src/bios/shared/includes.inc | 17 - 277 files changed, 19574 insertions(+), 56177 deletions(-) rename {src/ZX_ROMS => ZX_ROMS}/new/SP_128.bin (100%) rename {src/ZX_ROMS => ZX_ROMS}/new/SP_TRDOS.bin (100%) rename {src/ZX_ROMS => ZX_ROMS}/new/SP__48.bin (100%) rename {src/ZX_ROMS => ZX_ROMS}/new/ZX_EXP.bin (100%) rename {src/ZX_ROMS => ZX_ROMS}/new/ZX_EXP2.bin (100%) rename {src/bin => bin}/hrust.exe (100%) rename {src/bin => bin}/mhmt (100%) rename {src/bios => bios}/BIOS.asm (86%) rename {src/bios => bios}/BUILD.a80 (88%) rename {src/bios => bios}/exp/BIOS_FUNC.asm (97%) rename {src/bios => bios}/exp/DCP.ASM (100%) rename {src/bios => bios}/exp/EXP.asm (95%) rename {src/bios => bios}/exp/EXTENDED/FDD_DRIVER.asm (95%) rename {src/bios => bios}/exp/EXTENDED/IDE/ATAPI_DRV.ASM (95%) rename {src/bios => bios}/exp/EXTENDED/IDE/ATA_DRV.ASM (95%) rename {src/bios => bios}/exp/EXTENDED/RAM_DISK_DRIVER.asm (100%) rename {src/bios => bios}/exp/EXTENDED/shared.asm (100%) rename {src/bios => bios}/exp/FONT.ASM (99%) rename {src/bios => bios}/exp/FUNC_4x.ASM (94%) rename {src/bios => bios}/exp/FUNC_5x.asm (95%) rename {src/bios => bios}/exp/FUNC_CMOS.ASM (100%) rename {src/bios => bios}/exp/FUNC_FOR_TRDOS.ASM (100%) rename {src/bios => bios}/exp/FUNC_LOW_PRINT.ASM (94%) rename {src/bios => bios}/exp/FUNC_RAM_ROM_DRV.ASM (94%) rename {src/bios => bios}/exp/FUNC_SCREEN.ASM (93%) rename {src/bios => bios}/exp/FUNC_SERVICE.asm (95%) rename {src/bios => bios}/exp/FUNC_SYS.ASM (100%) rename {src/bios => bios}/exp/ZX_MEM.TXT (100%) rename {src/bios => bios}/loader/bitstream_header.inc (96%) rename {src/bios => bios}/loader/loader.asm (93%) create mode 100644 bios/logo/Set_Pictures.asm rename {src/bios => bios}/logo/peters.bmp (100%) rename {src/bios => bios}/logo/pfathers.bmp (100%) rename {src/bios => bios}/logo/psclean.bmp (100%) rename {src/bios => bios}/logo/psfathers.bmp (100%) rename {src/bios => bios}/mem_map.txt (88%) rename {src/bios => bios}/rom/BIOS.inc (96%) rename {src/bios => bios}/rom/MEM_MAP.inc (97%) rename {src/bios => bios}/rom/ROM.asm (94%) rename {src/bios => bios}/rom/SETUP/AUTOIDE.asm (100%) rename {src/bios => bios}/rom/SETUP/IM2_INT.asm (100%) rename {src/bios => bios}/rom/SETUP/KEY.asm (96%) rename {src/bios => bios}/rom/SETUP/MAIN.asm (95%) rename {src/bios => bios}/rom/SETUP/SETTINGS.asm (95%) rename {src/bios => bios}/rom/SETUP/VIDEO_IO.asm (94%) rename {src/bios => bios}/rom/SETUP/messages.z80 (97%) rename {src/bios => bios}/rom/SETUP/startup_sound.asm (95%) rename {src/bios => bios}/rom/ZX/ZX_FUNC.ASM (100%) rename {src/bios => bios}/rom/ZX/ZX_MENU.ASM (95%) rename {src/bios => bios}/rom/_not_used/DEHRUST.asm (100%) rename {src/bios => bios}/rom/_not_used/LZ4_DEC.asm (95%) rename {src/bios => bios}/rom/_not_used/Logo_Depacker.asm (88%) rename {src/bios => bios}/rom/_not_used/ayfxplay.asm (100%) rename {src/bios => bios}/rom/_not_used/netherworld_8.afx (100%) rename {src/bios => bios}/shared/CompMacro.asm (96%) rename {src/bios => bios}/shared/DEFINES.INC (97%) rename {src/bios => bios}/shared/RECOVERY.IMG (100%) rename {src/bios => bios}/shared/VERSION.inc (95%) create mode 100644 bios/shared/includes.inc rename {src/doc => doc}/CDLOADER.TXT (92%) rename {src/doc => doc}/SETUP.REV (98%) rename {src/doc => doc}/_BIOS.REV (98%) rename {src/doc => doc}/changes.txt (97%) rename {src/doc => doc}/перехваты ресета.txt (96%) delete mode 100644 src/altera/acex/k30/ACCELER.ACF delete mode 100644 src/altera/acex/k30/ACCELER.INC delete mode 100644 src/altera/acex/k30/ACCELER.TDF delete mode 100644 src/altera/acex/k30/AY.ACF delete mode 100644 src/altera/acex/k30/AY.INC delete mode 100644 src/altera/acex/k30/AY.MIF delete mode 100644 src/altera/acex/k30/AY.TDF delete mode 100644 src/altera/acex/k30/DCP.ACF delete mode 100644 src/altera/acex/k30/DCP.INC delete mode 100644 src/altera/acex/k30/DCP.MIF delete mode 100644 src/altera/acex/k30/DCP.TDF delete mode 100644 src/altera/acex/k30/KBD.ACF delete mode 100644 src/altera/acex/k30/KBD.INC delete mode 100644 src/altera/acex/k30/KBD.TDF delete mode 100644 src/altera/acex/k30/KBD_INI2.MIF delete mode 100644 src/altera/acex/k30/MOUSE.ACF delete mode 100644 src/altera/acex/k30/MOUSE.INC delete mode 100644 src/altera/acex/k30/MOUSE.MIF delete mode 100644 src/altera/acex/k30/MOUSE.TDF delete mode 100644 src/altera/acex/k30/SP2_ACEX.ACF delete mode 100644 src/altera/acex/k30/SP2_ACEX.TDF delete mode 100644 src/altera/acex/k30/VIDEO2.ACF delete mode 100644 src/altera/acex/k30/VIDEO2.INC delete mode 100644 src/altera/acex/k30/VIDEO2.TDF delete mode 100644 src/altera/acex/k30/VIDEO2_T1.TDF delete mode 100644 src/altera/acex/k30/VIDEO2_T2.TDF delete mode 100644 src/altera/acex/k30/VIDEO2_T2_51mhz.TDF delete mode 100644 src/altera/acex/k30/VIDEO2_T2_dip_stable.TDF delete mode 100644 src/altera/acex/k30_make.bat delete mode 100644 src/altera/make_altera.cmd delete mode 100644 src/altera/max/7064/SP2_MAX.ACF delete mode 100644 src/altera/max/7064/sp2_max.tdf delete mode 100644 src/altera/max/7128/SP2_MAX.ACF delete mode 100644 src/altera/max/7128/sp2_max.tdf delete mode 100644 src/altera/max/7128_make.bat delete mode 100644 src/altera/max/SP2_MAX.TDF delete mode 100644 src/altera/max/SP2_MAX_7128.pof delete mode 100644 src/altera/max/clean.bat delete mode 100644 src/altera/max/compile.log delete mode 100644 src/altera/max/make.cmd delete mode 100644 src/altera/max/sp2_max.rpt delete mode 100644 src/altera/quartus/acex/ACCELER.ACF delete mode 100644 src/altera/quartus/acex/ACCELER.INC delete mode 100644 src/altera/quartus/acex/ACCELER.TDF delete mode 100644 src/altera/quartus/acex/AY.ACF delete mode 100644 src/altera/quartus/acex/AY.INC delete mode 100644 src/altera/quartus/acex/AY.MIF delete mode 100644 src/altera/quartus/acex/AY.TDF delete mode 100644 src/altera/quartus/acex/DCP.ACF delete mode 100644 src/altera/quartus/acex/DCP.INC delete mode 100644 src/altera/quartus/acex/DCP.MIF delete mode 100644 src/altera/quartus/acex/DCP.TDF delete mode 100644 src/altera/quartus/acex/KBD.ACF delete mode 100644 src/altera/quartus/acex/KBD.INC delete mode 100644 src/altera/quartus/acex/KBD.TDF delete mode 100644 src/altera/quartus/acex/KBD_INI2.MIF delete mode 100644 src/altera/quartus/acex/MOUSE.ACF delete mode 100644 src/altera/quartus/acex/MOUSE.INC delete mode 100644 src/altera/quartus/acex/MOUSE.MIF delete mode 100644 src/altera/quartus/acex/MOUSE.TDF delete mode 100644 src/altera/quartus/acex/SP2_ACEX.ACF delete mode 100644 src/altera/quartus/acex/SP2_ACEX.TDF delete mode 100644 src/altera/quartus/acex/SP2_ACEX.flow.rpt delete mode 100644 src/altera/quartus/acex/SP2_ACEX.map.rpt delete mode 100644 src/altera/quartus/acex/SP2_ACEX.map.summary delete mode 100644 src/altera/quartus/acex/SP2_ACEX.qpf delete mode 100644 src/altera/quartus/acex/SP2_ACEX.qsf delete mode 100644 src/altera/quartus/acex/SP2_ACEX.qws delete mode 100644 src/altera/quartus/acex/VIDEO2.ACF delete mode 100644 src/altera/quartus/acex/VIDEO2.INC delete mode 100644 src/altera/quartus/acex/VIDEO2.TDF delete mode 100644 src/altera/quartus/acex/db/SP2_ACEX.(0).cnf.cdb delete mode 100644 src/altera/quartus/acex/db/SP2_ACEX.(0).cnf.hdb delete mode 100644 src/altera/quartus/acex/db/SP2_ACEX.(1).cnf.cdb delete mode 100644 src/altera/quartus/acex/db/SP2_ACEX.(1).cnf.hdb delete mode 100644 src/altera/quartus/acex/db/SP2_ACEX.(2).cnf.cdb delete mode 100644 src/altera/quartus/acex/db/SP2_ACEX.(2).cnf.hdb delete mode 100644 src/altera/quartus/acex/db/SP2_ACEX.(3).cnf.cdb delete mode 100644 src/altera/quartus/acex/db/SP2_ACEX.(3).cnf.hdb delete mode 100644 src/altera/quartus/acex/db/SP2_ACEX.cbx.xml delete mode 100644 src/altera/quartus/acex/db/SP2_ACEX.cmp.rdb delete mode 100644 src/altera/quartus/acex/db/SP2_ACEX.db_info delete mode 100644 src/altera/quartus/acex/db/SP2_ACEX.eco.cdb delete mode 100644 src/altera/quartus/acex/db/SP2_ACEX.hif delete mode 100644 src/altera/quartus/acex/db/SP2_ACEX.map.hdb delete mode 100644 src/altera/quartus/acex/db/SP2_ACEX.map.qmsg delete mode 100644 src/altera/quartus/acex/db/SP2_ACEX.sld_design_entry.sci delete mode 100644 src/altera/quartus/acex/db/SP2_ACEX.tis_db_list.ddb delete mode 100644 src/altera/quartus/acex/db/prev_cmp_SP2_ACEX.map.qmsg delete mode 100644 src/altera/quartus/acex/db/prev_cmp_SP2_ACEX.qmsg delete mode 100644 src/altera/quartus/acex/maxplusii_to_quartus_name_mapping.txt delete mode 100644 src/altera/quartus/max/db/add_sub_uch.tdf delete mode 100644 src/altera/quartus/max/db/prev_cmp_sp2_max.asm.qmsg delete mode 100644 src/altera/quartus/max/db/prev_cmp_sp2_max.eda.qmsg delete mode 100644 src/altera/quartus/max/db/prev_cmp_sp2_max.fit.qmsg delete mode 100644 src/altera/quartus/max/db/prev_cmp_sp2_max.map.qmsg delete mode 100644 src/altera/quartus/max/db/prev_cmp_sp2_max.qmsg delete mode 100644 src/altera/quartus/max/db/prev_cmp_sp2_max.tan.qmsg delete mode 100644 src/altera/quartus/max/db/sp2_max.(0).cnf.cdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(0).cnf.hdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(1).cnf.cdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(1).cnf.hdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(10).cnf.cdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(10).cnf.hdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(11).cnf.cdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(11).cnf.hdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(12).cnf.cdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(12).cnf.hdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(2).cnf.cdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(2).cnf.hdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(3).cnf.cdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(3).cnf.hdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(4).cnf.cdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(4).cnf.hdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(5).cnf.cdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(5).cnf.hdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(6).cnf.cdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(6).cnf.hdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(7).cnf.cdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(7).cnf.hdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(8).cnf.cdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(8).cnf.hdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(9).cnf.cdb delete mode 100644 src/altera/quartus/max/db/sp2_max.(9).cnf.hdb delete mode 100644 src/altera/quartus/max/db/sp2_max.asm.qmsg delete mode 100644 src/altera/quartus/max/db/sp2_max.cbx.xml delete mode 100644 src/altera/quartus/max/db/sp2_max.cmp.cdb delete mode 100644 src/altera/quartus/max/db/sp2_max.cmp.hdb delete mode 100644 src/altera/quartus/max/db/sp2_max.cmp.logdb delete mode 100644 src/altera/quartus/max/db/sp2_max.cmp.rdb delete mode 100644 src/altera/quartus/max/db/sp2_max.cmp.tdb delete mode 100644 src/altera/quartus/max/db/sp2_max.cmp0.ddb delete mode 100644 src/altera/quartus/max/db/sp2_max.db_info delete mode 100644 src/altera/quartus/max/db/sp2_max.eco.cdb delete mode 100644 src/altera/quartus/max/db/sp2_max.eda.qmsg delete mode 100644 src/altera/quartus/max/db/sp2_max.fit.qmsg delete mode 100644 src/altera/quartus/max/db/sp2_max.hier_info delete mode 100644 src/altera/quartus/max/db/sp2_max.hif delete mode 100644 src/altera/quartus/max/db/sp2_max.lpc.html delete mode 100644 src/altera/quartus/max/db/sp2_max.lpc.rdb delete mode 100644 src/altera/quartus/max/db/sp2_max.lpc.txt delete mode 100644 src/altera/quartus/max/db/sp2_max.map.cdb delete mode 100644 src/altera/quartus/max/db/sp2_max.map.hdb delete mode 100644 src/altera/quartus/max/db/sp2_max.map.logdb delete mode 100644 src/altera/quartus/max/db/sp2_max.map.qmsg delete mode 100644 src/altera/quartus/max/db/sp2_max.pre_map.cdb delete mode 100644 src/altera/quartus/max/db/sp2_max.pre_map.hdb delete mode 100644 src/altera/quartus/max/db/sp2_max.rtlv.hdb delete mode 100644 src/altera/quartus/max/db/sp2_max.rtlv_sg.cdb delete mode 100644 src/altera/quartus/max/db/sp2_max.rtlv_sg_swap.cdb delete mode 100644 src/altera/quartus/max/db/sp2_max.sgdiff.cdb delete mode 100644 src/altera/quartus/max/db/sp2_max.sgdiff.hdb delete mode 100644 src/altera/quartus/max/db/sp2_max.sld_design_entry.sci delete mode 100644 src/altera/quartus/max/db/sp2_max.sld_design_entry_dsc.sci delete mode 100644 src/altera/quartus/max/db/sp2_max.syn_hier_info delete mode 100644 src/altera/quartus/max/db/sp2_max.tan.qmsg delete mode 100644 src/altera/quartus/max/db/sp2_max.tis_db_list.ddb delete mode 100644 src/altera/quartus/max/db/sp2_max.tmw_info delete mode 100644 src/altera/quartus/max/incremental_db/README delete mode 100644 src/altera/quartus/max/incremental_db/compiled_partitions/sp2_max.root_partition.map.kpt delete mode 100644 src/altera/quartus/max/maxplusii_to_quartus_name_mapping.txt delete mode 100644 src/altera/quartus/max/sp2_max.acf delete mode 100644 src/altera/quartus/max/sp2_max.asm.rpt delete mode 100644 src/altera/quartus/max/sp2_max.done delete mode 100644 src/altera/quartus/max/sp2_max.dpf delete mode 100644 src/altera/quartus/max/sp2_max.eda.rpt delete mode 100644 src/altera/quartus/max/sp2_max.fit.rpt delete mode 100644 src/altera/quartus/max/sp2_max.fit.summary delete mode 100644 src/altera/quartus/max/sp2_max.flow.rpt delete mode 100644 src/altera/quartus/max/sp2_max.map.rpt delete mode 100644 src/altera/quartus/max/sp2_max.map.summary delete mode 100644 src/altera/quartus/max/sp2_max.pin delete mode 100644 src/altera/quartus/max/sp2_max.pof delete mode 100644 src/altera/quartus/max/sp2_max.qpf delete mode 100644 src/altera/quartus/max/sp2_max.qsf delete mode 100644 src/altera/quartus/max/sp2_max.qws delete mode 100644 src/altera/quartus/max/sp2_max.tan.rpt delete mode 100644 src/altera/quartus/max/sp2_max.tan.summary delete mode 100644 src/altera/quartus/max/sp2_max.tdf delete mode 100644 src/bin/Altera0pak.c delete mode 100644 src/bin/Altera0pak.exe delete mode 100644 src/bin/_SPRIN.BIN delete mode 100644 src/bin/bmp_extract.dpr delete mode 100644 src/bin/bmp_extract.exe delete mode 100644 src/bin/disk3.dpr delete mode 100644 src/bin/disk3.exe delete mode 100644 src/bin/lz4ultra delete mode 100644 src/bin/make_num.c delete mode 100644 src/bin/make_num.exe delete mode 100644 src/bin/transttf.dpr delete mode 100644 src/bin/transttf.exe delete mode 100644 src/bios/logo/Projects/LOGO.PAK delete mode 100644 src/bios/logo/Projects/LOGO.bmp delete mode 100644 src/bios/logo/Projects/MAIN.xcf delete mode 100644 src/bios/logo/Projects/NY_Kokoshnik.PAK delete mode 100644 src/bios/logo/Projects/NY_Kokoshnik.bmp delete mode 100644 src/bios/logo/Projects/NY_mustache.PAK delete mode 100644 src/bios/logo/Projects/NY_mustache.bmp delete mode 100644 src/bios/logo/Projects/test.png delete mode 100644 src/bios/logo/Set_Pictures.asm delete mode 100644 src/bios/logo/clean.cmd delete mode 100644 src/bios/logo/compile.log delete mode 100644 src/bios/logo/make.cmd delete mode 100644 src/bios/logo/use/LOGO.bmp delete mode 100644 src/bios/logo/use/NY_Kokoshnik.bmp delete mode 100644 src/bios/logo/use/NY_Kokoshnik_DAT.BIN delete mode 100644 src/bios/logo/use/NY_mustache.bmp delete mode 100644 src/bios/logo/use/NY_mustache_DAT.BIN delete mode 100644 src/bios/logo/use/New_Year.inc delete mode 100644 src/bios/rom/_not_used/EasterSprites.asm delete mode 100644 src/bios/shared/includes.inc diff --git a/.gitmodules b/.gitmodules index 7355856..bc0897b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "Shared_Includes"] branch = main path = Shared_Includes - url = https://github.com/Tolik-Trek/Shared_Includes.git + url = ../Shared_Includes.git diff --git a/Shared_Includes b/Shared_Includes index 51198ce..591d321 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 51198ce44bd19f511b63e6fafaf91b3de5470f9d +Subproject commit 591d3212c9341f17d6dd034bf2b8da91bd2f6107 diff --git a/src/ZX_ROMS/new/SP_128.bin b/ZX_ROMS/new/SP_128.bin similarity index 100% rename from src/ZX_ROMS/new/SP_128.bin rename to ZX_ROMS/new/SP_128.bin diff --git a/src/ZX_ROMS/new/SP_TRDOS.bin b/ZX_ROMS/new/SP_TRDOS.bin similarity index 100% rename from src/ZX_ROMS/new/SP_TRDOS.bin rename to ZX_ROMS/new/SP_TRDOS.bin diff --git a/src/ZX_ROMS/new/SP__48.bin b/ZX_ROMS/new/SP__48.bin similarity index 100% rename from src/ZX_ROMS/new/SP__48.bin rename to ZX_ROMS/new/SP__48.bin diff --git a/src/ZX_ROMS/new/ZX_EXP.bin b/ZX_ROMS/new/ZX_EXP.bin similarity index 100% rename from src/ZX_ROMS/new/ZX_EXP.bin rename to ZX_ROMS/new/ZX_EXP.bin diff --git a/src/ZX_ROMS/new/ZX_EXP2.bin b/ZX_ROMS/new/ZX_EXP2.bin similarity index 100% rename from src/ZX_ROMS/new/ZX_EXP2.bin rename to ZX_ROMS/new/ZX_EXP2.bin diff --git a/src/bin/hrust.exe b/bin/hrust.exe similarity index 100% rename from src/bin/hrust.exe rename to bin/hrust.exe diff --git a/src/bin/mhmt b/bin/mhmt similarity index 100% rename from src/bin/mhmt rename to bin/mhmt diff --git a/src/bios/BIOS.asm b/bios/BIOS.asm similarity index 86% rename from src/bios/BIOS.asm rename to bios/BIOS.asm index f2b268f..9cfbbdf 100644 --- a/src/bios/BIOS.asm +++ b/bios/BIOS.asm @@ -16,7 +16,7 @@ ;---------------------------------------; ;-----------[Shared Includes]----------- - INCLUDE 'src/bios/shared/includes.inc' ; Includes + INCLUDE 'bios/shared/includes.inc' ; Includes ;--------------------------------------- @@ -41,16 +41,14 @@ print () if detected_os == "Windows" then - pack_prog = "src\\bin\\hrust.exe Build\\Bin\\temp\\MAIN.PAK Build\\Bin\\temp\\MAIN.BIN" - elseif detected_os == "MacOS" then - pack_prog = "src/bin/mhmt -hst -zxh Build/Bin/temp/MAIN.BIN Build/Bin/temp/MAIN.PAK" - elseif detected_os == "Linux" then - pack_prog = "src/bin/mhmt -hst -zxh Build/Bin/temp/MAIN.BIN Build/Bin/temp/MAIN.PAK" + pack_prog = "bin\\hrust.exe Build\\Bin\\temp\\MAIN.PAK Build\\Bin\\temp\\MAIN.BIN" + else + pack_prog = "bin/mhmt -hst -zxh Build/Bin/temp/MAIN.BIN Build/Bin/temp/MAIN.PAK" end -- 祭 ᦠ⮣ 䠩 MAIN 宫⮩ 室 Set_Pictures.asm - if (os.execute("sjasmplus -DPREBUILD=1 -Wall --msg=war --nologo --syntax=w --fullpath --lst=Build/Prebuilds.LST SRC/BIOS/ROM/SETUP/MAIN.ASM")) then + if (os.execute("sjasmplus -DPREBUILD=1 -Wall --msg=war --nologo --syntax=w --fullpath --lst=Build/Prebuilds.LST BIOS/ROM/SETUP/MAIN.ASM")) then print("--[ MAIN.ASM Prebuild DONE ]--") if (os.execute(pack_prog)) then print("--[ Hrusting MAIN.BIN DONE ]--") @@ -71,7 +69,7 @@ ;----------[MAIN's referenses]----------; 祭 ᮢ ⮪ 楤 MMU 2 e, 18 ; ࠭ 18 2 ஢ઠ ࠭. ORG COMPILE_ADDR.MAIN - INCLUDE 'src/bios/ROM/SETUP/MAIN.asm' + INCLUDE 'bios/ROM/SETUP/MAIN.asm' ;--------------------------------------- ENDIF @@ -83,8 +81,8 @@ DEFINE+ IsInBIOS 1 OUTPUT 'Build/Bin/EXP.BIN' ShowInfo 'EXP block Start', 0 ; !!!!! test - INCLUDE 'src/bios/EXP/EXP.asm' - ShowInfo 'EXP block End', 0 ; !!!!! test + INCLUDE 'bios/EXP/EXP.asm' + ShowInfo 'EXP block End', 0 ; !!!!! test OUTEND ;--------------------------------------- @@ -97,7 +95,7 @@ DEFINE+ IsInBIOS 0 OUTPUT 'Build/Bin/ROM.BIN' ShowInfo 'ROM block Start', 0 ; !!!!! test - INCLUDE 'src/bios/ROM/ROM.asm' + INCLUDE 'bios/ROM/ROM.asm' ShowInfo 'ROM block End', 0 ; !!!!! test OUTEND UNDEFINE IsInBIOS @@ -135,7 +133,7 @@ MMU 1 e, 1 ; ࠭ 1 1 ஢ઠ ࠭. ORG ROM_MAP.LOGO OUTPUT 'Build/Bin/LOGO.BIN' - INCLUDE 'src/bios/logo/Set_Pictures.asm' + INCLUDE 'bios/logo/Set_Pictures.asm' OUTEND ;--------------------------------------- ; diff --git a/src/bios/BUILD.a80 b/bios/BUILD.a80 similarity index 88% rename from src/bios/BUILD.a80 rename to bios/BUILD.a80 index 14c423a..14a7a6e 100644 --- a/src/bios/BUILD.a80 +++ b/bios/BUILD.a80 @@ -2,7 +2,7 @@ ;------------[LUA functions]------------; includelua 'Shared_Includes/LUA/Functions.lua' ;---------------------------------------; - DEFINE PICTURE_FILE './src/bios/logo/psfathers.bmp' + DEFINE PICTURE_FILE './bios/logo/psfathers.bmp' LUA PASS1 @@ -20,8 +20,8 @@ */ INCLUDE 'shared/defines.inc' - DEFINE IMG_RECOVERY 'src/bios/shared/recovery.img' - ;DEFINE IMG_RECOVERY 'src/bios/shared/recovery_tst.img' + DEFINE IMG_RECOVERY 'bios/shared/recovery.img' + ;DEFINE IMG_RECOVERY 'bios/shared/recovery_tst.img' ; ;[--------------------------------------------------------------------------] @@ -32,9 +32,9 @@ ENDM ;[--------------------------------------------------------------------------] - DEFINE SP_128_BIN INCBIN 'src/ZX_ROMS/NEW/SP_128.BIN' - DEFINE SP__48_BIN INCBIN 'src/ZX_ROMS/NEW/SP__48.BIN' - DEFINE SP_TRDOS_BIN INCBIN 'src/ZX_ROMS/NEW/SP_TRDOS.BIN' + DEFINE SP_128_BIN INCBIN 'ZX_ROMS/NEW/SP_128.BIN' + DEFINE SP__48_BIN INCBIN 'ZX_ROMS/NEW/SP__48.BIN' + DEFINE SP_TRDOS_BIN INCBIN 'ZX_ROMS/NEW/SP_TRDOS.BIN' ;[--------------------------------------------------------------------------] MACRO ROM_BUILD bitstream diff --git a/src/bios/exp/BIOS_FUNC.asm b/bios/exp/BIOS_FUNC.asm similarity index 97% rename from src/bios/exp/BIOS_FUNC.asm rename to bios/exp/BIOS_FUNC.asm index 8226bb2..8942205 100644 --- a/src/bios/exp/BIOS_FUNC.asm +++ b/bios/exp/BIOS_FUNC.asm @@ -1,773 +1,773 @@ -; - MACRO _mNoDrive_5xTable numberOFdrives, byteOFword - IF byteOFword - DUP numberOFdrives - DB high FN_RESERVED_5x ;#50 - 㡫. 㭪 룠 ᭮ ࠡ稪 - - DB high FN_ABSENT_5x ;#51 - DB high FN_ABSENT_5x ;#52 - DB high FN_ABSENT_5x ;#53 - DB high FN_ABSENT_5x ;#54 - DB high FN_ABSENT_5x ;#55 - DB high FN_ABSENT_5x ;#56 - DB high FN_ABSENT_5x ;#57 - DB high FN_ABSENT_5x ;#58 - DB high FN_ABSENT_5x ;#59 - - DB high DRV_VERSION ;#5A - 㡫. 㭪 룠 ᭮ ࠡ稪 - DB high FN_RESERVED_5x ;#5B - 㡫. 㭪 룠 ᭮ ࠡ稪 - DB high FN_RESERVED_5x ;#5C - 㡫. 㭪 룠 ᭮ ࠡ稪 - DB high FN_RESERVED_5x ;#5D - 㡫. 㭪 룠 ᭮ ࠡ稪 - DB high FN_ABSENT_5x ;#5E - DB high DRV_LIST ;#5F - 㡫. 㭪 룠 ᭮ ࠡ稪 - EDUP - ELSE - DUP numberOFdrives - DB low FN_RESERVED_5x ;#50 - 㡫. 㭪 룠 ᭮ ࠡ稪 - - DB low FN_ABSENT_5x ;#51 - DB low FN_ABSENT_5x ;#52 - DB low FN_ABSENT_5x ;#53 - DB low FN_ABSENT_5x ;#54 - DB low FN_ABSENT_5x ;#55 - DB low FN_ABSENT_5x ;#56 - DB low FN_ABSENT_5x ;#57 - DB low FN_ABSENT_5x ;#58 - DB low FN_ABSENT_5x ;#59 - - DB low DRV_VERSION ;#5A - 㡫. 㭪 룠 ᭮ ࠡ稪 - DB low FN_RESERVED_5x ;#5B - 㡫. 㭪 룠 ᭮ ࠡ稪 - DB low FN_RESERVED_5x ;#5C - 㡫. 㭪 룠 ᭮ ࠡ稪 - DB low FN_RESERVED_5x ;#5D - 㡫. 㭪 룠 ᭮ ࠡ稪 - DB low FN_RESERVED_5x ;#5E - 㡫. 㭪 룠 ᭮ ࠡ稪 - DB low DRV_LIST ;#5F - 㡫. 㭪 룠 ᭮ ࠡ稪 - EDUP - ENDIF - ENDM -; - - _mInfoALIGN 256,0 -;=========================================================[ MAIN TABLE ] -; !FIXIT ࠢ 㭪権, ᮢ -TAB_FNS: - -; 00 - #3F - DUP #40 - DB low FN_RESERVED - EDUP -; - -; #4x -;-------------- - DB low FN_HDD_INIT ; #40 樠 - DB low FN_HDD_RECAL ; #41 ஢ - DB low FN_HDD_TEST_IDE ; #42 䥩 IDE - DB low FN_HDD_PREPARE ; #43 ⮢ 樨 ⥭/ - DB low FN_HDD_READ_BPB ; #44 BPB ࢮ ࠧ - DB low FN_HDD_READ ; #45 ᥪ - DB low FN_HDD_WRITE ; #46 ᥪ - DB low FN_HDD_PART ; #47 set IDE number (ன 権 master/slave)??? - DB low FN_HDD_READ_NEXT ; #48 ᫥騩 ᥪ (ONLY FOR LBA!) - DB low FN_RESERVED ; #49 - DB low FN_RESERVED ; #4A - DB low FN_RESERVED ; #4B - DB low FN_RESERVED ; #4C - DB low FN_RESERVED ; #4D - DB low FN_RESERVED ; #4E - DB low FN_RESERVED ; #4F -;-------------- -; - -; 5x -;-------------- - DB low FN_5x_Parser_0 ;#50 - Get drive name - DB low FN_5x_Parser_1 ;#51 - Reset drive - DB low FN_5x_Parser_2 ;#52 - Long read - DB low FN_5x_Parser_3 ;#53 - Long write - DB low FN_5x_Parser_4 ;#54 - Verify sectors - DB low FN_5x_Parser_5 ;#55 - Read sectors - DB low FN_5x_Parser_6 ;#56 - Write sectors - DB low FN_5x_Parser_7 ;#57 - Detect - DB low FN_5x_Parser_8 ;#58 - Get Media parameters - DB low FN_5x_Parser_9 ;#59 - Set Media parameters - - DB low DRV_VERSION ;#5A - Version number - DB low FN_RESERVED_5x ;#5B - DB low FN_RESERVED_5x ;#5C - DB low FN_RESERVED_5x ;#5D - DB low FN_5x_Parser_E ;#5E - DB low DRV_LIST ;#5F -;-------------- - -; 60 - #7F - DUP #20 - DB low FN_RESERVED - EDUP - - -; 8x - DB low LP_OPEN_S ; #80 ⨥ - DB low LP_PRINT_ALL ; #81 ᨬ - DB low LP_PRINT_SYM ; #82 ᨬ - DB low LP_PRINT_ATR ; #83 ⮫쪮 ਡ - DB low LP_SET_PLACE ; #84 ⠭ 樨 - DB low LP_PRINT_LINE ; #85 ப B - DB low LP_PRINT_LINE2 ; #86 ப -//- ਡ⮢ - DB low LP_PRINT_LINE3 ; #87 ப B D - DB low LP_PRINT_LINE4 ; #88 ப -//- ਡ⮢ - DB low LP_CLS_WIN ; #89 - DB low LP_SCROLL_UD ; #8A - DB low LP_PRINT_LINE5 ; #8B - DB low LP_PRINT_LINE6 ; #8C - DB low LP_CLS_WIN2 ; #8D - DB low LP_GET_PLACE ; #8E - DB low FN_TURBO ; #8F -; 9x - DB low EMM.GetMemSize ; #90 ࠧ饥 । ꥬ . - DB low EMM.InitMem ; #91 樠 । - DB low EMM.GetMemRMD ; #92 ࠬ᪠ - DB low EMM.FreeMemRMD ; #93 ᢮ ࠬ᪠ - DB low EMM.GetMemPageRMD ; #94 a ࠭ RAM-Disk - DB low EMM.GetMemPageNext ; #95 ᫥ ࠭ - DB low EMM.GetBanksPorts ; #96 ⮢ - DB low EMM.CheckColdInit ; #97 ஢ઠ 宫 樠樨 ᫨ ;????? 㦭 API? - DB low RAMD_CALC_PAGE ; #98 ᫥ ࠭ RAM-Disk ᮫⭮ ᥪ - DB low SET_DISK_REDIR ; #99 ⠭ ⥪騩 ࠩ ७祭 ( 㭪 TR-DOS!) ;????? - DB low GET_DISK_REDIR ; #9A ⨯ 祭 ⥪騩 ࠩ ( 㭪 TR-DOS!) - DB low GET_RAMD_NUM ; #9B ram disk block id - DB low SWAP_RAM_DRIVES ; #9C ᬥ ࠬ᪮ ZX <-> Sp2000 - DB low EMM.DivMemBlocks ; #9D ࠧ . - DB low EMM.MergeMemBlocks ; #9E ᫨ﭨ - DB low EMM.FullInit ; #9F 樠 ᥩ , ⥬ ६ -; Ax - DB low PIC_FN0_OpenWin ; #A0 - DB low PIC_FN1 ; #A1 - DB low PIC_FN2 ; #A2 COPY - DB low PIC_FN3 ; #A3 FILL - DB low PIC_SET_PAL ; #A4 - DB low PIC_FN5 ; #A5 RGMOD - DB low SET_PAL_INIT ; #A6 A - page_pal, E - , B - ⨯ - DB low PIC_FN7 ; #A7 ᮢ 梥 - DB low PIC_FN8 ; #A8 ᮢ ࠧ梥⭮ - DB low PIC_FN9 ; #A9 - DB low PIC_FN10 ; #AA - DB low PIC_FN11 ; #AB - DB low PIC_FN12 ; #AC - DB low PIC_FN14 ; #AD - DB low PIC_FN14 ; #AE - DB low PIC_FN15 ; #AF -; Bx - DB low WIN_OPEN ; #B0 ⨥ ⥫ - DB low WIN_CLOSE ; #B1 ⨥ - DB low WIN_COPY ; #B2 ࠭ ⥪⮢ - DB low WIN_RESTORE ; #B3 ⠭ ⥪⮢ - DB low WIN_GET_SYM ; #B4 ᨬ - DB low WIN_PUT_SYM ; #B5 ᨬ - DB low WIN_SET_ZG ; #B6 㧪 - DB low WIN_MOVE ; #B7 ६ - DB low WIN_GET_ZG ; #B8 - DB low FN_RESERVED ; #B9 - DB low FN_RESERVED ; #BA - DB low FN_RESERVED ; #BB - DB low FN_RESERVED ; #BC - DB low FN_RESERVED ; #BD - DB low FN_RESERVED ; #BE - DB low FN_RESERVED ; #BF -; Cx - DB low EMM.GetMemSize ; #C0 ꥬ - ᢮. . - DB low EMM.InitMem ; #C1 樠 । - DB low EMM.GetMem ; #C2 - DB low EMM.FreeMem ; #C3 ᢮ - DB low EMM.GetMemPage ; #C4 ࠭ - DB low EMM.GetMemBlkPages ; #C5 ᯨ᮪ ࠭ - DB low EMM.GetBanksPorts ; #C6 ⮢ - DB low EMM.GetMemPageNext ; #C7 ᫥ ࠭ - DB low BLK_RD_WR ; #C8 㭪 ⥭/ - DB low BLK_TO_RAMD ; #C9 RAM-Disk- - DB low RAMD_CLEAR ; #CA ᢮ RAM-Disk - DB low RAMD_TO_DRV ; #CB RAM-Disk ᪮ - DB low FDD_TO_DRV ; #CC REAL_DRIVE ᪮ - DB low HDD_TO_DRV ; #CD HDD ᪮ - DB low GET_RAMD_ST ; #CE ⨯ 祭 RAM-Disk - DB low GET_DRV_ST ; #CF ⨯ 祭 ᪮ -; Dx - DB low FN_LIB ; #D0 - DB low FN_LIB ; #D1 - DB low FN_LIB ; #D2 - DB low FN_LIB ; #D3 - DB low FN_LIB ; #D4 - DB low FN_LIB ; #D5 - DB low FN_LIB ; #D6 - DB low FN_LIB ; #D7 - DB low FN_LIB ; #D8 - DB low FN_LIB ; #D9 - DB low FN_LIB ; #DA - DB low FN_LIB ; #DB - DB low FN_LIB ; #DC - DB low FN_LIB ; #DD - DB low FN_LIB ; #DE - DB low FN_LIB ; #DF -; Ex - DB low LP_PR_LINE_DIR.START ; #E0 - DB low FN_RESERVED ; #E1 - DB low FN_RESERVED ; #E2 - DB low FN_RESERVED ; #E3 - DB low FN_RESERVED ; #E4 - DB low FN_RESERVED ; #E5 - DB low FN_RESERVED ; #E6 - DB low FN_RESERVED ; #E7 - DB low FN_SEND_BYTE ; #E8 ᫠ १ PC_link - DB low FN_RESEIVE_B ; #E9 ਭ १ PC_link - DB low FN_KBD_OUT ; #EA ᫠ - DB low FN_RESERVED ; #EB - DB low FN_RESERVED ; #EC - DB low FN_CRIPT ; #ED - DB low RST_CONF.AY8910 ; #EE ᮢ⨬ ⮬ Sp97 - DB low FN_VERSION ; #EF -; Fx - DB low RST_CONF.SP97_1 ; #F0 ᮢ⨬ ⮬ Sp97 - DB low RST_CONF.SP97_2 ; #F1 ᮢ⨬ ⮬ Sp97 - DB low FN_SYNC ; #F2 ⠭ ᨭ஭樨 - DB low RST_CONF.CUSTOM ; #F3 ᮢ⨬ ⮬ Sp97 - DB low DCP_CONFIG ; #F4 㭪 । ⮢ ; [x] - DB low CMOS_TEST ; #F5 - DB low CMOS_RD ; #F6 - DB low CMOS_WR ; #F7 - DB low SET_PORTS ; #F8 - DB low READ_PORTS ; #F9 [x] 26/01/2024 - DB low FN_RESERVED ; #FA [x] 26/01/2024 ࠡ⠫ 㦭, 㡫 SET_PORTS - DB low GOTO_SPEC ; #FB Goto Spectrum! - DB low ZX_MEMORY_MANAGER ; #FC API ᪮ 뤥 ࠭ 㬠 - DB low REINIT ; #FD - DB low FN_RESERVED ; #FE SAVE_AUTOSTART. ZX_EXP.ASM - DB low FN_VERSION ; #FF - -;****************----------------------------************************----------------- - - -; 00 - #3F - DUP #40 - DB high FN_RESERVED - EDUP -; - -;-------------- - DB high FN_HDD_INIT - DB high FN_HDD_RECAL - DB high FN_HDD_TEST_IDE - DB high FN_HDD_PREPARE - DB high FN_HDD_READ_BPB - DB high FN_HDD_READ - DB high FN_HDD_WRITE - DB high FN_HDD_PART - DB high FN_HDD_READ_NEXT - DB high FN_RESERVED - DB high FN_RESERVED - DB high FN_RESERVED - DB high FN_RESERVED - DB high FN_RESERVED - DB high FN_RESERVED - DB high FN_RESERVED -;-------------- - -;-------------- - DB high FN_5x_Parser_0 - DB high FN_5x_Parser_1 - DB high FN_5x_Parser_2 - DB high FN_5x_Parser_3 - DB high FN_5x_Parser_4 - DB high FN_5x_Parser_5 - DB high FN_5x_Parser_6 - DB high FN_5x_Parser_7 - DB high FN_5x_Parser_8 - DB high FN_5x_Parser_9 - - DB high DRV_VERSION - DB high FN_RESERVED_5x - DB high FN_RESERVED_5x - DB high FN_RESERVED_5x - DB high FN_5x_Parser_E - DB high DRV_LIST -;-------------- - -; 60 - #7F - DUP #20 - DB high FN_RESERVED - EDUP - - -; 8x - DB high LP_OPEN_S - DB high LP_PRINT_ALL - DB high LP_PRINT_SYM - DB high LP_PRINT_ATR - DB high LP_SET_PLACE - DB high LP_PRINT_LINE - DB high LP_PRINT_LINE2 - DB high LP_PRINT_LINE3 - DB high LP_PRINT_LINE4 - DB high LP_CLS_WIN - DB high LP_SCROLL_UD - DB high LP_PRINT_LINE5 - DB high LP_PRINT_LINE6 - DB high LP_CLS_WIN2 - DB high LP_GET_PLACE - DB high FN_TURBO -; 9x - DB high EMM.GetMemSize - DB high EMM.InitMem - DB high EMM.GetMemRMD - DB high EMM.FreeMemRMD - DB high EMM.GetMemPageRMD - DB high EMM.GetMemPageNext - DB high EMM.GetBanksPorts - DB high EMM.CheckColdInit - DB high RAMD_CALC_PAGE - DB high SET_DISK_REDIR - DB high GET_DISK_REDIR - DB high GET_RAMD_NUM - DB high SWAP_RAM_DRIVES - DB high EMM.DivMemBlocks - DB high EMM.MergeMemBlocks - DB high EMM.FullInit -; Ax - DB high PIC_FN0_OpenWin - DB high PIC_FN1 - DB high PIC_FN2 - DB high PIC_FN3 - DB high PIC_SET_PAL - DB high PIC_FN5 - DB high SET_PAL_INIT - DB high PIC_FN7 - DB high PIC_FN8 - DB high PIC_FN9 - DB high PIC_FN10 - DB high PIC_FN11 - DB high PIC_FN12 - DB high PIC_FN14 - DB high PIC_FN14 - DB high PIC_FN15 -; Bx - DB high WIN_OPEN - DB high WIN_CLOSE - DB high WIN_COPY - DB high WIN_RESTORE - DB high WIN_GET_SYM - DB high WIN_PUT_SYM - DB high WIN_SET_ZG - DB high WIN_MOVE - DB high WIN_GET_ZG - DB high FN_RESERVED - DB high FN_RESERVED - DB high FN_RESERVED - DB high FN_RESERVED - DB high FN_RESERVED - DB high FN_RESERVED - DB high FN_RESERVED -; Cx - DB high EMM.GetMemSize - DB high EMM.InitMem - DB high EMM.GetMem - DB high EMM.FreeMem - DB high EMM.GetMemPage - DB high EMM.GetMemBlkPages - DB high EMM.GetBanksPorts - DB high EMM.GetMemPageNext - DB high BLK_RD_WR - DB high BLK_TO_RAMD - DB high RAMD_CLEAR - DB high RAMD_TO_DRV - DB high FDD_TO_DRV - DB high HDD_TO_DRV - DB high GET_RAMD_ST - DB high GET_DRV_ST -; Dx - DB high FN_LIB - DB high FN_LIB - DB high FN_LIB - DB high FN_LIB - DB high FN_LIB - DB high FN_LIB - DB high FN_LIB - DB high FN_LIB - DB high FN_LIB - DB high FN_LIB - DB high FN_LIB - DB high FN_LIB - DB high FN_LIB - DB high FN_LIB - DB high FN_LIB - DB high FN_LIB -; Ex - DB high LP_PR_LINE_DIR.START - DB high FN_RESERVED - DB high FN_RESERVED - DB high FN_RESERVED - DB high FN_RESERVED - DB high FN_RESERVED - DB high FN_RESERVED - DB high FN_RESERVED - DB high FN_SEND_BYTE - DB high FN_RESEIVE_B - DB high FN_KBD_OUT - DB high FN_RESERVED - DB high FN_RESERVED - DB high FN_CRIPT - DB high RST_CONF.AY8910 - DB high FN_VERSION -; Fx - DB high RST_CONF.SP97_1 - DB high RST_CONF.SP97_2 - DB high FN_SYNC - DB high RST_CONF.CUSTOM - DB high DCP_CONFIG - DB high CMOS_TEST - DB high CMOS_RD - DB high CMOS_WR - DB high SET_PORTS - DB high READ_PORTS - DB high FN_RESERVED - DB high GOTO_SPEC - DB high ZX_MEMORY_MANAGER - DB high REINIT - DB high FN_RESERVED - DB high FN_VERSION -//////////////////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////////////////// -; -; ,----, ,----,. -; ,/ .`| ,' ,' | -; ,` .' : ,--, ,' .' | -; ; ; / ,---, ,--.'| ,----.' .' -; .'___,/ ,' ,---.'| | | : | | .' -; | : | | | : : : ' : : |--, ,--, ,--, -; ; |.'; ; ,--.--. : : : | ' | ,---. : | ;.' \|'. \/ .`| -; `----' | | / \ : |,-.' | | / \ | | |' \/ / ; -; ' : ;.--. .-. || : ' || | : / / | `----'.'\ ; \ \.' / -; | | ' \__\/: . .| | / :' : |__ . ' / | __ \ . | \ ; ; -; ' : | ," .--.; |' : |: || | '.'|' ; /| / /\/ / : / \ \ \ -; ; |.' / / ,. || | '/ :; : ;' | / | / ,,/ ',- ./__; ; \ -; '---' ; : .' \ : || , / | : | \ ''\ ;| :/\ \ ; -; | , .-./ \ / ---`-' \ \ / \ \ .' `---' `--` -; `--`---' `-'----' `----' `--`-,-' -//////////////////////////////////////////////////////////////////////////////////////// - - - _mInfoALIGN 256,0 -;===========================================================[ 5x TABLE ] -; Drives Numbers: -; 0 FDD -; 1..5 reserved -; 6 RAM-DRV -; 7 reserved -; 8 HDD -; 9..B reserved -; C CDROM -; D..F reserved -TAB_5xFNS: -; --< LOW PART >-- -;-------------------------------------------------------------[ FDD #0 ] -; - DB low FN_RESERVED_5x ;#50 - 㡫. 㭪 룠 ᭮ ࠡ稪 - DB low FDD_5x_RESET ;#51 - DB low FDD_5x_LONG_READ ;#52 - DB low FDD_5x_LONG_WRITE ;#53 - DB low FN_ABSENT_5x ;#54 - DB low FDD_5x_READ ;#55 - DB low FDD_5x_WRITE ;#56 - DB low FDD_5x_DETECT ;#57 - DB low FDD_5x_GET_PAR ;#58 - DB low FDD_5x_SET_PAR ;#59 - - DB low DRV_VERSION ;#5A - 㡫. 㭪 룠 ᭮ ࠡ稪 - DB low FN_RESERVED_5x ;#5B - 㡫. 㭪 룠 ᭮ ࠡ稪 - DB low FN_RESERVED_5x ;#5C - 㡫. 㭪 룠 ᭮ ࠡ稪 - DB low FN_RESERVED_5x ;#5D - 㡫. 㭪 룠 ᭮ ࠡ稪 - DB low FN_ABSENT_5x ;#5E - 㡫. 㭪 룠 ᭮ ࠡ稪 - DB low DRV_LIST ;#5F - 㡫. 㭪 룠 ᭮ ࠡ稪 -; -;---------------------------------------------------------------------[] - -;-----------------------------[ #1..#5 ] - _mNoDrive_5xTable 5, 0 -;-------------------------------------[] - -;-------------------------------------------------------[ RAM DRIVE #6 ] -; - DB low FN_RESERVED_5x - DB low FN_ABSENT_5x - DB low RMD_5x_LONG_READ - DB low RMD_5x_LONG_WRITE - DB low FN_ABSENT_5x - DB low RMD_5x_READ - DB low RMD_5x_WRITE - DB low FN_ABSENT_5x - DB low RMD_5x_GET_PAR - DB low RMD_5x_SET_PAR - - DB low DRV_VERSION - DB low FN_RESERVED_5x - DB low FN_RESERVED_5x - DB low FN_RESERVED_5x - DB low FN_ABSENT_5x - DB low DRV_LIST -;---------------------------------------------------------------------[] - -;---------------------------------[ #7 ] - _mNoDrive_5xTable 1, 0 -;-------------------------------------[] - -;-------------------------------------------------------------[ ATA #8 ] -; - DB low ATA_5x_GET_DRIVE_NAME - DB low ATA_5x_RESET - DB low ATA_5x_LONG_READ - DB low ATA_5x_LONG_WRITE - DB low ATA_5x_VERIFY - DB low ATA_5x_READ - DB low ATA_5x_WRITE - DB low ATA_5x_DETECT - DB low ATA_5x_GET_PAR - DB low ATA_5x_SET_PAR - - DB low DRV_VERSION - DB low FN_RESERVED_5x - DB low FN_RESERVED_5x - DB low FN_RESERVED_5x - DB low FN_ABSENT_5x - DB low DRV_LIST -;---------------------------------------------------------------------[] - -;-----------------------------[ #9..#B ] - _mNoDrive_5xTable 3, 0 -;-------------------------------------[] - -;-----------------------------------------------------------[ ATAPI #C ] -; - DB low ATAPI_5x_GET_DRIVE_NAME - DB low ATAPI_5x_RESET - DB low ATAPI_5x_LONG_READ - DB low ATAPI_5x_LONG_WRITE ; [ ] new - DB low FN_ABSENT_5x ; VERIFY - DB low ATAPI_5x_READ - DB low ATAPI_5x_WRITE ; [ ] new - DB low ATAPI_5x_DETECT - DB low ATAPI_5x_GET_PAR ; [ ] new - DB low ATAPI_5x_SET_PAR ; SETMED - - DB low DRV_VERSION - DB low FN_RESERVED_5x - DB low FN_RESERVED_5x - DB low FN_RESERVED_5x - DB low ATAPI_5x_Extended ;[ ] media changed? ;!TODO - DB low DRV_LIST -;---------------------------------------------------------------------[] - -;-----------------------------[ #D..#F ] - _mNoDrive_5xTable 3, 0 -;-------------------------------------[] - -; -; --< HIGH PART >-- -;-------------------------------------------------------------[ FDD #0 ] -; - DB high FN_RESERVED_5x ;#50 - 㡫. 㭪 룠 ᭮ ࠡ稪 - DB high FDD_5x_RESET ;#51 - DB high FDD_5x_LONG_READ ;#52 - DB high FDD_5x_LONG_WRITE ;#53 - DB high FN_ABSENT_5x ;#54 - DB high FDD_5x_READ ;#55 - DB high FDD_5x_WRITE ;#56 - DB high FDD_5x_DETECT ;#57 - DB high FDD_5x_GET_PAR ;#58 - DB high FDD_5x_SET_PAR ;#59 - - DB high DRV_VERSION ;#5A - 㡫. 㭪 룠 ᭮ ࠡ稪 - DB high FN_RESERVED_5x ;#5B - 㡫. 㭪 룠 ᭮ ࠡ稪 - DB high FN_RESERVED_5x ;#5C - 㡫. 㭪 룠 ᭮ ࠡ稪 - DB high FN_RESERVED_5x ;#5D - 㡫. 㭪 룠 ᭮ ࠡ稪 - DB high FN_ABSENT_5x ;#5E - Extended functions - DB high DRV_LIST ;#5F - 㡫. 㭪 룠 ᭮ ࠡ稪 -; -;---------------------------------------------------------------------[] - -;-----------------------------[ #1..#5 ] - _mNoDrive_5xTable 5, 1 -;-------------------------------------[] - -;-------------------------------------------------------[ RAM DRIVE #6 ] -; - DB high FN_RESERVED_5x - DB high FN_ABSENT_5x - DB high RMD_5x_LONG_READ - DB high RMD_5x_LONG_WRITE - DB high FN_ABSENT_5x - DB high RMD_5x_READ - DB high RMD_5x_WRITE - DB high FN_ABSENT_5x - DB high RMD_5x_GET_PAR - DB high RMD_5x_SET_PAR - - DB high DRV_VERSION - DB high FN_RESERVED_5x - DB high FN_RESERVED_5x - DB high FN_RESERVED_5x - DB high FN_ABSENT_5x - DB high DRV_LIST -;---------------------------------------------------------------------[] - -;---------------------------------[ #7 ] - _mNoDrive_5xTable 1, 1 -;-------------------------------------[] - -;-------------------------------------------------------------[ ATA #8 ] -; - DB high ATA_5x_GET_DRIVE_NAME - DB high ATA_5x_RESET - DB high ATA_5x_LONG_READ - DB high ATA_5x_LONG_WRITE - DB high ATA_5x_VERIFY - DB high ATA_5x_READ - DB high ATA_5x_WRITE - DB high ATA_5x_DETECT - DB high ATA_5x_GET_PAR - DB high ATA_5x_SET_PAR - - DB high DRV_VERSION - DB high FN_RESERVED_5x - DB high FN_RESERVED_5x - DB high FN_RESERVED_5x - DB high FN_ABSENT_5x - DB high DRV_LIST -;---------------------------------------------------------------------[] - -;-----------------------------[ #9..#B ] - _mNoDrive_5xTable 3, 1 -;-------------------------------------[] - -;-----------------------------------------------------------[ ATAPI #C ] -; - DB high ATAPI_5x_GET_DRIVE_NAME - DB high ATAPI_5x_RESET - DB high ATAPI_5x_LONG_READ - DB high ATAPI_5x_LONG_WRITE ; LONG_WRITE ; [ ] new - DB high FN_ABSENT_5x - DB high ATAPI_5x_READ - DB high ATAPI_5x_WRITE ; WRITE ; [ ] new - DB high ATAPI_5x_DETECT - DB high ATAPI_5x_GET_PAR - DB high ATAPI_5x_SET_PAR ; SETMED - - DB high DRV_VERSION - DB high FN_RESERVED_5x - DB high FN_RESERVED_5x - DB high FN_RESERVED_5x - DB high ATAPI_5x_Extended - DB high DRV_LIST -;---------------------------------------------------------------------[] - -;-----------------------------[ #D..#F ] - _mNoDrive_5xTable 3, 1 -;-------------------------------------[] -;======================================================================; - -;************************************ -; 室 㭪 RST18 RST8 -EXP_FNS_RST18: PUSH HL - LD L,C - LD H,high TAB_FNS - LD C,(HL) - INC H - LD H,(HL) - LD L,C - EX (SP),HL - RET - - ; ATA_5x_RESET - ; ATA_5x_LONG_READ - ; ATA_5x_LONG_WRITE - ; ATA_5x_VERIFY - ; ATA_5x_READ - ; ATA_5x_WRITE - ; ATA_5x_DETECT - ; ATA_5x_GET_PAR - ; ATA_5x_SET_PAR - ; DRV_VERSION - ; FN_RESERVED_5x - ; FN_RESERVED_5x - ; FN_RESERVED_5x - ; FN_RESERVED_5x - ; DRV_LIST -FN_5x_Parser_0: LD C,#00 - JR FN_5x_Parser -FN_5x_Parser_1: LD C,#01 ; ATA_5x_RESET - JR FN_5x_Parser -FN_5x_Parser_2: LD C,#02 ; ATA_5x_LONG_READ - JR FN_5x_Parser -FN_5x_Parser_3: LD C,#03 ; ATA_5x_LONG_WRITE - JR FN_5x_Parser -FN_5x_Parser_4: LD C,#04 ; ATA_5x_VERIFY - JR FN_5x_Parser -FN_5x_Parser_6: LD C,#06 ; ATA_5x_WRITE - JR FN_5x_Parser -FN_5x_Parser_7: LD C,#07 ; ATA_5x_DETECT - JR FN_5x_Parser -FN_5x_Parser_8: LD C,#08 ; ATA_5x_GET_PAR - JR FN_5x_Parser -FN_5x_Parser_9: LD C,#09 ; ATA_5x_SET_PAR - JR FN_5x_Parser -FN_5x_Parser_E: LD C,#0E ; DRV_EXTENDED - JR FN_5x_Parser -FN_5x_Parser_5: LD C,5 ; ATA_5x_READ -FN_5x_Parser: PUSH HL - LD H,A - AND #F0 - OR C - ; A + - LD L,A - LD A,H - LD H,high TAB_5xFNS - LD C,(HL) - INC H - LD H,(HL) - LD L,C - EX (SP),HL - RET - -; 室 㭪樨 TR-DOS -EXP_FNS:; ⪫砥 ࠭ ᯥ㬠 - ;EX (SP),HL - ;IN A,(RGADR) - ;LD L,A - ;LD A,#C0 - ;OUT (PORT_Y),A - ;LD A,H - ;EX (SP),HL ; (SP) = port_y - POP AF - ; - CALL EXP_FNS_RST18 - CALL DOS_ON - ; 頥 ࠭ ᯥ㬠 - ;EX (SP),HL - ;PUSH AF - ;LD A,L - ;OUT (RGADR),A - ;POP AF - ;POP HL - ; - JP EXP_FNS_RET - -;! ! ! ! ! ! ! ! -FN_RESERVED_5x: - LD A,BIOS.Error.InvalidSubFunction -FN_RESERVED: - SCF - RET -FN_ABSENT_5x: - LD A,BIOS.Error.NotSupported - SCF - RET -;! ! ! ! ! ! ! ! +; + MACRO _mNoDrive_5xTable numberOFdrives, byteOFword + IF byteOFword + DUP numberOFdrives + DB high FN_RESERVED_5x ;#50 - 㡫. 㭪 룠 ᭮ ࠡ稪 + + DB high FN_ABSENT_5x ;#51 + DB high FN_ABSENT_5x ;#52 + DB high FN_ABSENT_5x ;#53 + DB high FN_ABSENT_5x ;#54 + DB high FN_ABSENT_5x ;#55 + DB high FN_ABSENT_5x ;#56 + DB high FN_ABSENT_5x ;#57 + DB high FN_ABSENT_5x ;#58 + DB high FN_ABSENT_5x ;#59 + + DB high DRV_VERSION ;#5A - 㡫. 㭪 룠 ᭮ ࠡ稪 + DB high FN_RESERVED_5x ;#5B - 㡫. 㭪 룠 ᭮ ࠡ稪 + DB high FN_RESERVED_5x ;#5C - 㡫. 㭪 룠 ᭮ ࠡ稪 + DB high FN_RESERVED_5x ;#5D - 㡫. 㭪 룠 ᭮ ࠡ稪 + DB high FN_ABSENT_5x ;#5E + DB high DRV_LIST ;#5F - 㡫. 㭪 룠 ᭮ ࠡ稪 + EDUP + ELSE + DUP numberOFdrives + DB low FN_RESERVED_5x ;#50 - 㡫. 㭪 룠 ᭮ ࠡ稪 + + DB low FN_ABSENT_5x ;#51 + DB low FN_ABSENT_5x ;#52 + DB low FN_ABSENT_5x ;#53 + DB low FN_ABSENT_5x ;#54 + DB low FN_ABSENT_5x ;#55 + DB low FN_ABSENT_5x ;#56 + DB low FN_ABSENT_5x ;#57 + DB low FN_ABSENT_5x ;#58 + DB low FN_ABSENT_5x ;#59 + + DB low DRV_VERSION ;#5A - 㡫. 㭪 룠 ᭮ ࠡ稪 + DB low FN_RESERVED_5x ;#5B - 㡫. 㭪 룠 ᭮ ࠡ稪 + DB low FN_RESERVED_5x ;#5C - 㡫. 㭪 룠 ᭮ ࠡ稪 + DB low FN_RESERVED_5x ;#5D - 㡫. 㭪 룠 ᭮ ࠡ稪 + DB low FN_RESERVED_5x ;#5E - 㡫. 㭪 룠 ᭮ ࠡ稪 + DB low DRV_LIST ;#5F - 㡫. 㭪 룠 ᭮ ࠡ稪 + EDUP + ENDIF + ENDM +; + + _mInfoALIGN 256,0 +;=========================================================[ MAIN TABLE ] +; !FIXIT ࠢ 㭪権, ᮢ +TAB_FNS: + +; 00 - #3F + DUP #40 + DB low FN_RESERVED + EDUP +; + +; #4x +;-------------- + DB low FN_HDD_INIT ; #40 樠 + DB low FN_HDD_RECAL ; #41 ஢ + DB low FN_HDD_TEST_IDE ; #42 䥩 IDE + DB low FN_HDD_PREPARE ; #43 ⮢ 樨 ⥭/ + DB low FN_HDD_READ_BPB ; #44 BPB ࢮ ࠧ + DB low FN_HDD_READ ; #45 ᥪ + DB low FN_HDD_WRITE ; #46 ᥪ + DB low FN_HDD_PART ; #47 set IDE number (ன 権 master/slave)??? + DB low FN_HDD_READ_NEXT ; #48 ᫥騩 ᥪ (ONLY FOR LBA!) + DB low FN_RESERVED ; #49 + DB low FN_RESERVED ; #4A + DB low FN_RESERVED ; #4B + DB low FN_RESERVED ; #4C + DB low FN_RESERVED ; #4D + DB low FN_RESERVED ; #4E + DB low FN_RESERVED ; #4F +;-------------- +; + +; 5x +;-------------- + DB low FN_5x_Parser_0 ;#50 - Get drive name + DB low FN_5x_Parser_1 ;#51 - Reset drive + DB low FN_5x_Parser_2 ;#52 - Long read + DB low FN_5x_Parser_3 ;#53 - Long write + DB low FN_5x_Parser_4 ;#54 - Verify sectors + DB low FN_5x_Parser_5 ;#55 - Read sectors + DB low FN_5x_Parser_6 ;#56 - Write sectors + DB low FN_5x_Parser_7 ;#57 - Detect + DB low FN_5x_Parser_8 ;#58 - Get Media parameters + DB low FN_5x_Parser_9 ;#59 - Set Media parameters + + DB low DRV_VERSION ;#5A - Version number + DB low FN_RESERVED_5x ;#5B + DB low FN_RESERVED_5x ;#5C + DB low FN_RESERVED_5x ;#5D + DB low FN_5x_Parser_E ;#5E + DB low DRV_LIST ;#5F +;-------------- + +; 60 - #7F + DUP #20 + DB low FN_RESERVED + EDUP + + +; 8x + DB low LP_OPEN_S ; #80 ⨥ + DB low LP_PRINT_ALL ; #81 ᨬ + DB low LP_PRINT_SYM ; #82 ᨬ + DB low LP_PRINT_ATR ; #83 ⮫쪮 ਡ + DB low LP_SET_PLACE ; #84 ⠭ 樨 + DB low LP_PRINT_LINE ; #85 ப B + DB low LP_PRINT_LINE2 ; #86 ப -//- ਡ⮢ + DB low LP_PRINT_LINE3 ; #87 ப B D + DB low LP_PRINT_LINE4 ; #88 ப -//- ਡ⮢ + DB low LP_CLS_WIN ; #89 + DB low LP_SCROLL_UD ; #8A + DB low LP_PRINT_LINE5 ; #8B + DB low LP_PRINT_LINE6 ; #8C + DB low LP_CLS_WIN2 ; #8D + DB low LP_GET_PLACE ; #8E + DB low FN_TURBO ; #8F +; 9x + DB low EMM.GetMemSize ; #90 ࠧ饥 । ꥬ . + DB low EMM.InitMem ; #91 樠 । + DB low EMM.GetMemRMD ; #92 ࠬ᪠ + DB low EMM.FreeMemRMD ; #93 ᢮ ࠬ᪠ + DB low EMM.GetMemPageRMD ; #94 a ࠭ RAM-Disk + DB low EMM.GetMemPageNext ; #95 ᫥ ࠭ + DB low EMM.GetBanksPorts ; #96 ⮢ + DB low EMM.CheckColdInit ; #97 ஢ઠ 宫 樠樨 ᫨ ;????? 㦭 API? + DB low RAMD_CALC_PAGE ; #98 ᫥ ࠭ RAM-Disk ᮫⭮ ᥪ + DB low SET_DISK_REDIR ; #99 ⠭ ⥪騩 ࠩ ७祭 ( 㭪 TR-DOS!) ;????? + DB low GET_DISK_REDIR ; #9A ⨯ 祭 ⥪騩 ࠩ ( 㭪 TR-DOS!) + DB low GET_RAMD_NUM ; #9B ram disk block id + DB low SWAP_RAM_DRIVES ; #9C ᬥ ࠬ᪮ ZX <-> Sp2000 + DB low EMM.DivMemBlocks ; #9D ࠧ . + DB low EMM.MergeMemBlocks ; #9E ᫨ﭨ + DB low EMM.FullInit ; #9F 樠 ᥩ , ⥬ ६ +; Ax + DB low PIC_FN0_OpenWin ; #A0 + DB low PIC_FN1 ; #A1 + DB low PIC_FN2 ; #A2 COPY + DB low PIC_FN3 ; #A3 FILL + DB low PIC_SET_PAL ; #A4 + DB low PIC_FN5 ; #A5 RGMOD + DB low SET_PAL_INIT ; #A6 A - page_pal, E - , B - ⨯ + DB low PIC_FN7 ; #A7 ᮢ 梥 + DB low PIC_FN8 ; #A8 ᮢ ࠧ梥⭮ + DB low PIC_FN9 ; #A9 + DB low PIC_FN10 ; #AA + DB low PIC_FN11 ; #AB + DB low PIC_FN12 ; #AC + DB low PIC_FN14 ; #AD + DB low PIC_FN14 ; #AE + DB low PIC_FN15 ; #AF +; Bx + DB low WIN_OPEN ; #B0 ⨥ ⥫ + DB low WIN_CLOSE ; #B1 ⨥ + DB low WIN_COPY ; #B2 ࠭ ⥪⮢ + DB low WIN_RESTORE ; #B3 ⠭ ⥪⮢ + DB low WIN_GET_SYM ; #B4 ᨬ + DB low WIN_PUT_SYM ; #B5 ᨬ + DB low WIN_SET_ZG ; #B6 㧪 + DB low WIN_MOVE ; #B7 ६ + DB low WIN_GET_ZG ; #B8 + DB low FN_RESERVED ; #B9 + DB low FN_RESERVED ; #BA + DB low FN_RESERVED ; #BB + DB low FN_RESERVED ; #BC + DB low FN_RESERVED ; #BD + DB low FN_RESERVED ; #BE + DB low FN_RESERVED ; #BF +; Cx + DB low EMM.GetMemSize ; #C0 ꥬ - ᢮. . + DB low EMM.InitMem ; #C1 樠 । + DB low EMM.GetMem ; #C2 + DB low EMM.FreeMem ; #C3 ᢮ + DB low EMM.GetMemPage ; #C4 ࠭ + DB low EMM.GetMemBlkPages ; #C5 ᯨ᮪ ࠭ + DB low EMM.GetBanksPorts ; #C6 ⮢ + DB low EMM.GetMemPageNext ; #C7 ᫥ ࠭ + DB low BLK_RD_WR ; #C8 㭪 ⥭/ + DB low BLK_TO_RAMD ; #C9 RAM-Disk- + DB low RAMD_CLEAR ; #CA ᢮ RAM-Disk + DB low RAMD_TO_DRV ; #CB RAM-Disk ᪮ + DB low FDD_TO_DRV ; #CC REAL_DRIVE ᪮ + DB low HDD_TO_DRV ; #CD HDD ᪮ + DB low GET_RAMD_ST ; #CE ⨯ 祭 RAM-Disk + DB low GET_DRV_ST ; #CF ⨯ 祭 ᪮ +; Dx + DB low FN_LIB ; #D0 + DB low FN_LIB ; #D1 + DB low FN_LIB ; #D2 + DB low FN_LIB ; #D3 + DB low FN_LIB ; #D4 + DB low FN_LIB ; #D5 + DB low FN_LIB ; #D6 + DB low FN_LIB ; #D7 + DB low FN_LIB ; #D8 + DB low FN_LIB ; #D9 + DB low FN_LIB ; #DA + DB low FN_LIB ; #DB + DB low FN_LIB ; #DC + DB low FN_LIB ; #DD + DB low FN_LIB ; #DE + DB low FN_LIB ; #DF +; Ex + DB low LP_PR_LINE_DIR.START ; #E0 + DB low FN_RESERVED ; #E1 + DB low FN_RESERVED ; #E2 + DB low FN_RESERVED ; #E3 + DB low FN_RESERVED ; #E4 + DB low FN_RESERVED ; #E5 + DB low FN_RESERVED ; #E6 + DB low FN_RESERVED ; #E7 + DB low FN_SEND_BYTE ; #E8 ᫠ १ PC_link + DB low FN_RESEIVE_B ; #E9 ਭ १ PC_link + DB low FN_KBD_OUT ; #EA ᫠ + DB low FN_RESERVED ; #EB + DB low FN_RESERVED ; #EC + DB low FN_CRIPT ; #ED + DB low RST_CONF.AY8910 ; #EE ᮢ⨬ ⮬ Sp97 + DB low FN_VERSION ; #EF +; Fx + DB low RST_CONF.SP97_1 ; #F0 ᮢ⨬ ⮬ Sp97 + DB low RST_CONF.SP97_2 ; #F1 ᮢ⨬ ⮬ Sp97 + DB low FN_SYNC ; #F2 ⠭ ᨭ஭樨 + DB low RST_CONF.CUSTOM ; #F3 ᮢ⨬ ⮬ Sp97 + DB low DCP_CONFIG ; #F4 㭪 । ⮢ ; [x] + DB low CMOS_TEST ; #F5 + DB low CMOS_RD ; #F6 + DB low CMOS_WR ; #F7 + DB low SET_PORTS ; #F8 + DB low READ_PORTS ; #F9 [x] 26/01/2024 + DB low FN_RESERVED ; #FA [x] 26/01/2024 ࠡ⠫ 㦭, 㡫 SET_PORTS + DB low GOTO_SPEC ; #FB Goto Spectrum! + DB low ZX_MEMORY_MANAGER ; #FC API ᪮ 뤥 ࠭ 㬠 + DB low REINIT ; #FD + DB low FN_RESERVED ; #FE SAVE_AUTOSTART. ZX_EXP.ASM + DB low FN_VERSION ; #FF + +;****************----------------------------************************----------------- + + +; 00 - #3F + DUP #40 + DB high FN_RESERVED + EDUP +; + +;-------------- + DB high FN_HDD_INIT + DB high FN_HDD_RECAL + DB high FN_HDD_TEST_IDE + DB high FN_HDD_PREPARE + DB high FN_HDD_READ_BPB + DB high FN_HDD_READ + DB high FN_HDD_WRITE + DB high FN_HDD_PART + DB high FN_HDD_READ_NEXT + DB high FN_RESERVED + DB high FN_RESERVED + DB high FN_RESERVED + DB high FN_RESERVED + DB high FN_RESERVED + DB high FN_RESERVED + DB high FN_RESERVED +;-------------- + +;-------------- + DB high FN_5x_Parser_0 + DB high FN_5x_Parser_1 + DB high FN_5x_Parser_2 + DB high FN_5x_Parser_3 + DB high FN_5x_Parser_4 + DB high FN_5x_Parser_5 + DB high FN_5x_Parser_6 + DB high FN_5x_Parser_7 + DB high FN_5x_Parser_8 + DB high FN_5x_Parser_9 + + DB high DRV_VERSION + DB high FN_RESERVED_5x + DB high FN_RESERVED_5x + DB high FN_RESERVED_5x + DB high FN_5x_Parser_E + DB high DRV_LIST +;-------------- + +; 60 - #7F + DUP #20 + DB high FN_RESERVED + EDUP + + +; 8x + DB high LP_OPEN_S + DB high LP_PRINT_ALL + DB high LP_PRINT_SYM + DB high LP_PRINT_ATR + DB high LP_SET_PLACE + DB high LP_PRINT_LINE + DB high LP_PRINT_LINE2 + DB high LP_PRINT_LINE3 + DB high LP_PRINT_LINE4 + DB high LP_CLS_WIN + DB high LP_SCROLL_UD + DB high LP_PRINT_LINE5 + DB high LP_PRINT_LINE6 + DB high LP_CLS_WIN2 + DB high LP_GET_PLACE + DB high FN_TURBO +; 9x + DB high EMM.GetMemSize + DB high EMM.InitMem + DB high EMM.GetMemRMD + DB high EMM.FreeMemRMD + DB high EMM.GetMemPageRMD + DB high EMM.GetMemPageNext + DB high EMM.GetBanksPorts + DB high EMM.CheckColdInit + DB high RAMD_CALC_PAGE + DB high SET_DISK_REDIR + DB high GET_DISK_REDIR + DB high GET_RAMD_NUM + DB high SWAP_RAM_DRIVES + DB high EMM.DivMemBlocks + DB high EMM.MergeMemBlocks + DB high EMM.FullInit +; Ax + DB high PIC_FN0_OpenWin + DB high PIC_FN1 + DB high PIC_FN2 + DB high PIC_FN3 + DB high PIC_SET_PAL + DB high PIC_FN5 + DB high SET_PAL_INIT + DB high PIC_FN7 + DB high PIC_FN8 + DB high PIC_FN9 + DB high PIC_FN10 + DB high PIC_FN11 + DB high PIC_FN12 + DB high PIC_FN14 + DB high PIC_FN14 + DB high PIC_FN15 +; Bx + DB high WIN_OPEN + DB high WIN_CLOSE + DB high WIN_COPY + DB high WIN_RESTORE + DB high WIN_GET_SYM + DB high WIN_PUT_SYM + DB high WIN_SET_ZG + DB high WIN_MOVE + DB high WIN_GET_ZG + DB high FN_RESERVED + DB high FN_RESERVED + DB high FN_RESERVED + DB high FN_RESERVED + DB high FN_RESERVED + DB high FN_RESERVED + DB high FN_RESERVED +; Cx + DB high EMM.GetMemSize + DB high EMM.InitMem + DB high EMM.GetMem + DB high EMM.FreeMem + DB high EMM.GetMemPage + DB high EMM.GetMemBlkPages + DB high EMM.GetBanksPorts + DB high EMM.GetMemPageNext + DB high BLK_RD_WR + DB high BLK_TO_RAMD + DB high RAMD_CLEAR + DB high RAMD_TO_DRV + DB high FDD_TO_DRV + DB high HDD_TO_DRV + DB high GET_RAMD_ST + DB high GET_DRV_ST +; Dx + DB high FN_LIB + DB high FN_LIB + DB high FN_LIB + DB high FN_LIB + DB high FN_LIB + DB high FN_LIB + DB high FN_LIB + DB high FN_LIB + DB high FN_LIB + DB high FN_LIB + DB high FN_LIB + DB high FN_LIB + DB high FN_LIB + DB high FN_LIB + DB high FN_LIB + DB high FN_LIB +; Ex + DB high LP_PR_LINE_DIR.START + DB high FN_RESERVED + DB high FN_RESERVED + DB high FN_RESERVED + DB high FN_RESERVED + DB high FN_RESERVED + DB high FN_RESERVED + DB high FN_RESERVED + DB high FN_SEND_BYTE + DB high FN_RESEIVE_B + DB high FN_KBD_OUT + DB high FN_RESERVED + DB high FN_RESERVED + DB high FN_CRIPT + DB high RST_CONF.AY8910 + DB high FN_VERSION +; Fx + DB high RST_CONF.SP97_1 + DB high RST_CONF.SP97_2 + DB high FN_SYNC + DB high RST_CONF.CUSTOM + DB high DCP_CONFIG + DB high CMOS_TEST + DB high CMOS_RD + DB high CMOS_WR + DB high SET_PORTS + DB high READ_PORTS + DB high FN_RESERVED + DB high GOTO_SPEC + DB high ZX_MEMORY_MANAGER + DB high REINIT + DB high FN_RESERVED + DB high FN_VERSION +//////////////////////////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////////////////////////// +; +; ,----, ,----,. +; ,/ .`| ,' ,' | +; ,` .' : ,--, ,' .' | +; ; ; / ,---, ,--.'| ,----.' .' +; .'___,/ ,' ,---.'| | | : | | .' +; | : | | | : : : ' : : |--, ,--, ,--, +; ; |.'; ; ,--.--. : : : | ' | ,---. : | ;.' \|'. \/ .`| +; `----' | | / \ : |,-.' | | / \ | | |' \/ / ; +; ' : ;.--. .-. || : ' || | : / / | `----'.'\ ; \ \.' / +; | | ' \__\/: . .| | / :' : |__ . ' / | __ \ . | \ ; ; +; ' : | ," .--.; |' : |: || | '.'|' ; /| / /\/ / : / \ \ \ +; ; |.' / / ,. || | '/ :; : ;' | / | / ,,/ ',- ./__; ; \ +; '---' ; : .' \ : || , / | : | \ ''\ ;| :/\ \ ; +; | , .-./ \ / ---`-' \ \ / \ \ .' `---' `--` +; `--`---' `-'----' `----' `--`-,-' +//////////////////////////////////////////////////////////////////////////////////////// + + + _mInfoALIGN 256,0 +;===========================================================[ 5x TABLE ] +; Drives Numbers: +; 0 FDD +; 1..5 reserved +; 6 RAM-DRV +; 7 reserved +; 8 HDD +; 9..B reserved +; C CDROM +; D..F reserved +TAB_5xFNS: +; --< LOW PART >-- +;-------------------------------------------------------------[ FDD #0 ] +; + DB low FN_RESERVED_5x ;#50 - 㡫. 㭪 룠 ᭮ ࠡ稪 + DB low FDD_5x_RESET ;#51 + DB low FDD_5x_LONG_READ ;#52 + DB low FDD_5x_LONG_WRITE ;#53 + DB low FN_ABSENT_5x ;#54 + DB low FDD_5x_READ ;#55 + DB low FDD_5x_WRITE ;#56 + DB low FDD_5x_DETECT ;#57 + DB low FDD_5x_GET_PAR ;#58 + DB low FDD_5x_SET_PAR ;#59 + + DB low DRV_VERSION ;#5A - 㡫. 㭪 룠 ᭮ ࠡ稪 + DB low FN_RESERVED_5x ;#5B - 㡫. 㭪 룠 ᭮ ࠡ稪 + DB low FN_RESERVED_5x ;#5C - 㡫. 㭪 룠 ᭮ ࠡ稪 + DB low FN_RESERVED_5x ;#5D - 㡫. 㭪 룠 ᭮ ࠡ稪 + DB low FN_ABSENT_5x ;#5E - 㡫. 㭪 룠 ᭮ ࠡ稪 + DB low DRV_LIST ;#5F - 㡫. 㭪 룠 ᭮ ࠡ稪 +; +;---------------------------------------------------------------------[] + +;-----------------------------[ #1..#5 ] + _mNoDrive_5xTable 5, 0 +;-------------------------------------[] + +;-------------------------------------------------------[ RAM DRIVE #6 ] +; + DB low FN_RESERVED_5x + DB low FN_ABSENT_5x + DB low RMD_5x_LONG_READ + DB low RMD_5x_LONG_WRITE + DB low FN_ABSENT_5x + DB low RMD_5x_READ + DB low RMD_5x_WRITE + DB low FN_ABSENT_5x + DB low RMD_5x_GET_PAR + DB low RMD_5x_SET_PAR + + DB low DRV_VERSION + DB low FN_RESERVED_5x + DB low FN_RESERVED_5x + DB low FN_RESERVED_5x + DB low FN_ABSENT_5x + DB low DRV_LIST +;---------------------------------------------------------------------[] + +;---------------------------------[ #7 ] + _mNoDrive_5xTable 1, 0 +;-------------------------------------[] + +;-------------------------------------------------------------[ ATA #8 ] +; + DB low ATA_5x_GET_DRIVE_NAME + DB low ATA_5x_RESET + DB low ATA_5x_LONG_READ + DB low ATA_5x_LONG_WRITE + DB low ATA_5x_VERIFY + DB low ATA_5x_READ + DB low ATA_5x_WRITE + DB low ATA_5x_DETECT + DB low ATA_5x_GET_PAR + DB low ATA_5x_SET_PAR + + DB low DRV_VERSION + DB low FN_RESERVED_5x + DB low FN_RESERVED_5x + DB low FN_RESERVED_5x + DB low FN_ABSENT_5x + DB low DRV_LIST +;---------------------------------------------------------------------[] + +;-----------------------------[ #9..#B ] + _mNoDrive_5xTable 3, 0 +;-------------------------------------[] + +;-----------------------------------------------------------[ ATAPI #C ] +; + DB low ATAPI_5x_GET_DRIVE_NAME + DB low ATAPI_5x_RESET + DB low ATAPI_5x_LONG_READ + DB low ATAPI_5x_LONG_WRITE ; [ ] new + DB low FN_ABSENT_5x ; VERIFY + DB low ATAPI_5x_READ + DB low ATAPI_5x_WRITE ; [ ] new + DB low ATAPI_5x_DETECT + DB low ATAPI_5x_GET_PAR ; [ ] new + DB low ATAPI_5x_SET_PAR ; SETMED + + DB low DRV_VERSION + DB low FN_RESERVED_5x + DB low FN_RESERVED_5x + DB low FN_RESERVED_5x + DB low ATAPI_5x_Extended ;[ ] media changed? ;!TODO + DB low DRV_LIST +;---------------------------------------------------------------------[] + +;-----------------------------[ #D..#F ] + _mNoDrive_5xTable 3, 0 +;-------------------------------------[] + +; +; --< HIGH PART >-- +;-------------------------------------------------------------[ FDD #0 ] +; + DB high FN_RESERVED_5x ;#50 - 㡫. 㭪 룠 ᭮ ࠡ稪 + DB high FDD_5x_RESET ;#51 + DB high FDD_5x_LONG_READ ;#52 + DB high FDD_5x_LONG_WRITE ;#53 + DB high FN_ABSENT_5x ;#54 + DB high FDD_5x_READ ;#55 + DB high FDD_5x_WRITE ;#56 + DB high FDD_5x_DETECT ;#57 + DB high FDD_5x_GET_PAR ;#58 + DB high FDD_5x_SET_PAR ;#59 + + DB high DRV_VERSION ;#5A - 㡫. 㭪 룠 ᭮ ࠡ稪 + DB high FN_RESERVED_5x ;#5B - 㡫. 㭪 룠 ᭮ ࠡ稪 + DB high FN_RESERVED_5x ;#5C - 㡫. 㭪 룠 ᭮ ࠡ稪 + DB high FN_RESERVED_5x ;#5D - 㡫. 㭪 룠 ᭮ ࠡ稪 + DB high FN_ABSENT_5x ;#5E - Extended functions + DB high DRV_LIST ;#5F - 㡫. 㭪 룠 ᭮ ࠡ稪 +; +;---------------------------------------------------------------------[] + +;-----------------------------[ #1..#5 ] + _mNoDrive_5xTable 5, 1 +;-------------------------------------[] + +;-------------------------------------------------------[ RAM DRIVE #6 ] +; + DB high FN_RESERVED_5x + DB high FN_ABSENT_5x + DB high RMD_5x_LONG_READ + DB high RMD_5x_LONG_WRITE + DB high FN_ABSENT_5x + DB high RMD_5x_READ + DB high RMD_5x_WRITE + DB high FN_ABSENT_5x + DB high RMD_5x_GET_PAR + DB high RMD_5x_SET_PAR + + DB high DRV_VERSION + DB high FN_RESERVED_5x + DB high FN_RESERVED_5x + DB high FN_RESERVED_5x + DB high FN_ABSENT_5x + DB high DRV_LIST +;---------------------------------------------------------------------[] + +;---------------------------------[ #7 ] + _mNoDrive_5xTable 1, 1 +;-------------------------------------[] + +;-------------------------------------------------------------[ ATA #8 ] +; + DB high ATA_5x_GET_DRIVE_NAME + DB high ATA_5x_RESET + DB high ATA_5x_LONG_READ + DB high ATA_5x_LONG_WRITE + DB high ATA_5x_VERIFY + DB high ATA_5x_READ + DB high ATA_5x_WRITE + DB high ATA_5x_DETECT + DB high ATA_5x_GET_PAR + DB high ATA_5x_SET_PAR + + DB high DRV_VERSION + DB high FN_RESERVED_5x + DB high FN_RESERVED_5x + DB high FN_RESERVED_5x + DB high FN_ABSENT_5x + DB high DRV_LIST +;---------------------------------------------------------------------[] + +;-----------------------------[ #9..#B ] + _mNoDrive_5xTable 3, 1 +;-------------------------------------[] + +;-----------------------------------------------------------[ ATAPI #C ] +; + DB high ATAPI_5x_GET_DRIVE_NAME + DB high ATAPI_5x_RESET + DB high ATAPI_5x_LONG_READ + DB high ATAPI_5x_LONG_WRITE ; LONG_WRITE ; [ ] new + DB high FN_ABSENT_5x + DB high ATAPI_5x_READ + DB high ATAPI_5x_WRITE ; WRITE ; [ ] new + DB high ATAPI_5x_DETECT + DB high ATAPI_5x_GET_PAR + DB high ATAPI_5x_SET_PAR ; SETMED + + DB high DRV_VERSION + DB high FN_RESERVED_5x + DB high FN_RESERVED_5x + DB high FN_RESERVED_5x + DB high ATAPI_5x_Extended + DB high DRV_LIST +;---------------------------------------------------------------------[] + +;-----------------------------[ #D..#F ] + _mNoDrive_5xTable 3, 1 +;-------------------------------------[] +;======================================================================; + +;************************************ +; 室 㭪 RST18 RST8 +EXP_FNS_RST18: PUSH HL + LD L,C + LD H,high TAB_FNS + LD C,(HL) + INC H + LD H,(HL) + LD L,C + EX (SP),HL + RET + + ; ATA_5x_RESET + ; ATA_5x_LONG_READ + ; ATA_5x_LONG_WRITE + ; ATA_5x_VERIFY + ; ATA_5x_READ + ; ATA_5x_WRITE + ; ATA_5x_DETECT + ; ATA_5x_GET_PAR + ; ATA_5x_SET_PAR + ; DRV_VERSION + ; FN_RESERVED_5x + ; FN_RESERVED_5x + ; FN_RESERVED_5x + ; FN_RESERVED_5x + ; DRV_LIST +FN_5x_Parser_0: LD C,#00 + JR FN_5x_Parser +FN_5x_Parser_1: LD C,#01 ; ATA_5x_RESET + JR FN_5x_Parser +FN_5x_Parser_2: LD C,#02 ; ATA_5x_LONG_READ + JR FN_5x_Parser +FN_5x_Parser_3: LD C,#03 ; ATA_5x_LONG_WRITE + JR FN_5x_Parser +FN_5x_Parser_4: LD C,#04 ; ATA_5x_VERIFY + JR FN_5x_Parser +FN_5x_Parser_6: LD C,#06 ; ATA_5x_WRITE + JR FN_5x_Parser +FN_5x_Parser_7: LD C,#07 ; ATA_5x_DETECT + JR FN_5x_Parser +FN_5x_Parser_8: LD C,#08 ; ATA_5x_GET_PAR + JR FN_5x_Parser +FN_5x_Parser_9: LD C,#09 ; ATA_5x_SET_PAR + JR FN_5x_Parser +FN_5x_Parser_E: LD C,#0E ; DRV_EXTENDED + JR FN_5x_Parser +FN_5x_Parser_5: LD C,5 ; ATA_5x_READ +FN_5x_Parser: PUSH HL + LD H,A + AND #F0 + OR C + ; A + + LD L,A + LD A,H + LD H,high TAB_5xFNS + LD C,(HL) + INC H + LD H,(HL) + LD L,C + EX (SP),HL + RET + +; 室 㭪樨 TR-DOS +EXP_FNS:; ⪫砥 ࠭ ᯥ㬠 + ;EX (SP),HL + ;IN A,(RGADR) + ;LD L,A + ;LD A,#C0 + ;OUT (PORT_Y),A + ;LD A,H + ;EX (SP),HL ; (SP) = port_y + POP AF + ; + CALL EXP_FNS_RST18 + CALL DOS_ON + ; 頥 ࠭ ᯥ㬠 + ;EX (SP),HL + ;PUSH AF + ;LD A,L + ;OUT (RGADR),A + ;POP AF + ;POP HL + ; + JP EXP_FNS_RET + +;! ! ! ! ! ! ! ! +FN_RESERVED_5x: + LD A,BIOS.Error.InvalidSubFunction +FN_RESERVED: + SCF + RET +FN_ABSENT_5x: + LD A,BIOS.Error.NotSupported + SCF + RET +;! ! ! ! ! ! ! ! ; \ No newline at end of file diff --git a/src/bios/exp/DCP.ASM b/bios/exp/DCP.ASM similarity index 100% rename from src/bios/exp/DCP.ASM rename to bios/exp/DCP.ASM diff --git a/src/bios/exp/EXP.asm b/bios/exp/EXP.asm similarity index 95% rename from src/bios/exp/EXP.asm rename to bios/exp/EXP.asm index 5ff6a7d..3ec1716 100644 --- a/src/bios/exp/EXP.asm +++ b/bios/exp/EXP.asm @@ -1,1641 +1,1641 @@ - -; -;************************************************************* -; -; EXPANSION VER 3.00 (C) Peters Plus Ltd. -; EXPANSION VER 3.1 (C) Sprinter Team -; -;************************************************************* - - DISPLAY "\r\n/=====================[EXP part]=====================\\" - -;*************************************** -;*********** BEGIN EXPANSION *********** -;*************************************** -; 室 RESET -EXP_START: - JP GLOBAL_RESET - -;--------------------------------------- -;ROM_NUMBER: -;.part1: DW MotherBoardID -;.part2: DB 0 -BOARD_INFO: -.number: DW MotherBoardID -.type: DB MotherBoardType -;--------------------------------------- - -;--------------------------------------- -; BoardID: -; .start: WORD BoardID_start ; BoardID_start -; .end: WORD BoardID_end ; BoardID_end -;--------------------------------------- - -;======================================= - BLOCK 8-$,0 ; first on/off EXPANSION -;ணࠬ 맮 BIOS १ RST8 RAM0 -EXP_FNS_2_RET: - PUSH AF - LD A,ROM.BIOS - OUT (SYS_PORT.RAM),A - POP AF - JR RST_18_1 -;======================================= - -;======================================= - BLOCK #10-$,0 ;shortblock-ok -RST_10: -; JR RST10 -;======================================= - -;======================================= - BLOCK #18-$,0 -; RST18h - MAIN BIOS functions - JP EXP_FNS_RST18 -RST_18_1: - CALL EXP_FNS_RST18 -.exit: JR EXP_FNS_2_RET - -;======================================= - -;======================================= - BLOCK #20-$,0 ;shortblock-ok -RST_20: -;======================================= - -;======================================= - BLOCK #28-$,0 -RST_28: -;======================================= - -;======================================= - BLOCK #30-$,0 -RST_30: -;======================================= - -;======================================= - BLOCK #38-$,0 -; INTERUPT Point -RST38: IF TEST_INT - ;INT: - PUSH BC - PUSH AF - - LD C,SLOT3 - IN B,(C) - LD A,SYS_PAGE - OUT (C),A - - LD A,(SYS_PAGE.INT_ID) - CP #AA - JR Z,YESINT - OUT (C),B - JP NOINT -YESINT: PUSH HL - LD HL,(SYS_PAGE.INT_ADRESS) - LD A,H - OR L - LD A,(SYS_PAGE.INT_PAGE) - OUT (C),B - PUSH DE - CALL NZ,EXTINT - POP DE - POP HL -NOINT: POP AF - POP BC - EI - RETI - ELSE - -; PUSH AF -; 1: DEC A -; JR NZ,1B -; POP AF - EI - RETI - ENDIF -;RST10: -; CALL_48 10h -; RET -;======================================= - - -;======================================= - IFN TEST_INT - _mInfoALIGN #10,0 -; any adress < #C0 with mask %xxxx0000 -; ⠡ Sprinter POST-Tester-a -TABLE_X: -.v0: DB %00101000 ; "0" a -.v1: DB %10111101 ; "1" ___ -.v2: DB %00110010 ; "2" f | g | b -.v3: DB %00110100 ; "3" |___| -.v4: DB %10100101 ; "4" e | | c -.v5: DB %01100100 ; "5" |___|. -.v6: DB %01100000 ; "6" d -.v7: DB %00111101 ; "7" -.v8: DB %00100000 ; "8" a - 7 -.v9: DB %00100100 ; "9" b - 6 -.vA: DB %00100001 ; "A" . - 5 -.vB: DB %11100000 ; "B" f - 4 -.vC: DB %01101010 ; "C" g - 3 -.vD: DB %10110000 ; "D" e - 2 -.vE: DB %01100010 ; "E" c - 1 -.vF: DB %01100011 ; "F" d - 0 - ENDIF -;======================================= -; - -; -;======================================= - IFN TEST_INT -RESTARTS EQU #FFE0 -GLOBAL_RESET: - DI - IM 1 - LD HL,RESTARTS - LD DE,RESTARTS_PROG - LD B,RESTARTS_PROG.Size -.compare: - LD A,(DE) - CP (HL) - JR NZ,NO_RESTART - INC HL - INC DE - DJNZ .compare - JP RESTARTS - ENDIF -;======================================= - _mInfoBLOCK #66-$,0 -NMI_Point: - ; १ 3 JP - ;NOP - ;NOP - ;NOP - RETN -;======================================= - -;SET_BIOS_TO_RAM: ; ணࠬ ࠡ⠥ 0C000h -; -; LD SP,#C0C0 -; LD A,#E0 -; LD C,PAGE3 -; IN B,(C) -; CALL SET_ROM_PAGES+#C000 -; JP NO_SUMX_EQ - -;********************************** - -;BEEP: -; PUSH HL -; PUSH DE -; PUSH BC -; PUSH AF -; PUSH IX -; -; LD HL,BEEP_RET -; PUSH HL -; LD HL,SW_ROM -; PUSH HL -; LD HL,03B5h -; PUSH HL -; LD HL,200 -; LD D,H -; LD E,5 -; JP SW_ROM -;BEEP_RET: -; -; POP IX -; POP AF -; POP BC -; POP DE -; POP HL -; RET -;======================================= -; BLOCK MEM_MAP.ID_Version-$,0 ;#C0-$,0 - -ID_Version: DW BIOS_ver_hex -ID_SPRINTER: DB 'Firmware v' -.BIOS_ver: DB BIOS_ver_string - IF BETA_BUILD > 0 - DB " ", BETA_str_ver - ELSE - IF RELEASEhotFIX > 0 - DB ReleaseHotFix - ENDIF - ENDIF - DB 0 -.Record1_Size EQU $-ID_SPRINTER - ; 2 - DB 'Sprinter',0 - ; 3 ; [x] 24/02/2024 -.bitstream_ver: DB bitstream_ver_string,0 - DB 0 - ; -.Size EQU $-ID_SPRINTER -.Records_Num EQU 3 - -; Check for max length of string - ASSERT ID_SPRINTER.Record1_Size < SYS_PAGE.ID_FLAG.Size, 'ERROR! ID String is to long!' -;======================================= - - -; BLOCK #FC-$,0 -BoardID: -.start: WORD BoardID_start ; BoardID_start -.end: WORD BoardID_end ; BoardID_end -;#######################################################################; - - -;#######################################################################; -;-----------------------------------------------------------------------; -; ROM-Disk pages ; [x] ⨢஢ ROM-DISK -ROM_DISK.Pages.Number: - BYTE ROM_DISK.Pages.Size ; ᫮ ࠭ -; ࠭ ⠢ bit4 ४⭮ ⠭ -;(஡ sp2000.inc - ࠢ ࠭栬 ) -ROM_DISK.Pages: ; ࠭ ROM-Disk - ABYTE #10 #05,#06,#07,#09,#0A,#0B ; 98304 bytes -.Size EQU $-ROM_DISK.Pages -;-----------------------------------------------------------------------; -;#######################################################################; - - - -;======================================= - IF TEST_INT - _mInfoALIGN #10,0 -; any adress < #C0 with mask %xxxx0000 -; ⠡ Sprinter POST-Tester-a -TABLE_X: -.v0: DB %00101000 ; "0" a -.v1: DB %10111101 ; "1" ___ -.v2: DB %00110010 ; "2" f | g | b -.v3: DB %00110100 ; "3" |___| -.v4: DB %10100101 ; "4" e | | c -.v5: DB %01100100 ; "5" |___|. -.v6: DB %01100000 ; "6" d -.v7: DB %00111101 ; "7" -.v8: DB %00100000 ; "8" a - 7 -.v9: DB %00100100 ; "9" b - 6 -.vA: DB %00100001 ; "A" . - 5 -.vB: DB %11100000 ; "B" f - 4 -.vC: DB %01101010 ; "C" g - 3 -.vD: DB %10110000 ; "D" e - 2 -.vE: DB %01100010 ; "E" c - 1 -.vF: DB %01100011 ; "F" d - 0 - ENDIF -;======================================= -; - -; -;======================================= - IF TEST_INT -RESTARTS EQU #FFE0 -; 墠 ࠧ ᫥ ஫ CAD. -; 뢠 ⮢, ⮬ ᯮ짮 . -GLOBAL_RESET: - DI - IM 1 - LD HL,RESTARTS - LD DE,RESTARTS_PROG - LD B,RESTARTS_PROG.Size -.compare: - LD A,(DE) - CP (HL) - JR NZ,NO_RESTART - INC HL - INC DE - DJNZ .compare - JP RESTARTS - ENDIF -;======================================= -; - -; -;-----[墠 RESET ]----- -NO_RESTART: -; ⥪ ᯮ㥬!!! - LD SP,IX ; ࠭ 祭 । 稪 (᫨ ᫥ ) - ; 樠 ७ ⮢ Z84C15 POST-Tester- - LD A,5 ; COM port for Printer OUT - OUT (Z84.SIO.Ch_A.Ctrl),A - LD A,#62 - OUT (Z84.SIO.Ch_A.Ctrl),A - ; - LD A,#CF ; BITS I/O - OUT (Z84.PIO.Port_A.Command),A - XOR A - OUT (Z84.PIO.Port_A.Command),A - ;LD A,%11101010 ; L - OUT (Z84.PIO.Port_A.Data),A ; PRINTER - PORT - all zeros - ; -樠 ⥬ ⮢ Z84C15- - LD BC,#FF*256 + Z84.SYS.Control - XOR A ; Z84.REG.WaitState_Ctrl - OUT (C),A ; Z84.SYS.Control - INC C ; Z84.REG.WaitState_MemBound - OUT (C),A ; Z84.SYS.Data ; set 0 Waits - ; - DEC C - LD A,3 ; Z84.REG.Misc_Ctrl - OUT (C),A ; Z84.SYS.Control - INC C - ; no boundary set! - ;XOR A ; disable CS0, disable CS1 - LD A,1 ; enable CS0, disable CS1 - OUT (C),A ; Z84.SYS.Data - JP POST_TEST.START -;--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--== - IF TEST_INT -;----------------[int]------------------ -EXTINT: OR A - RET Z - - BIT 7,H - JR Z,.L2 - LD C,SLOT2 - BIT 6,H - JR Z,.L1 - LD C,SLOT3 - -.L1: IN B,(C) - PUSH BC - OUT (C),A - CALL .JPHL - POP BC - OUT (C),B - RET - ; ஢ઠ 㫥 ᫮ -.L2: BIT 6,H - LD C,SLOT1 - JR NZ,.L1 ; த ᫨ 㫥 ᫮ - - PUSH HL - - LD HL,-.stackDepth - .switchProcedure.size + .patch-2 - ADD HL,SP - PUSH HL - - LD HL,-.stackDepth - .switchProcedure.size ; memory stack use! - ADD HL,SP ; stack - PUSH HL ; ணࠬ .readProcedure - - LD DE,.switchProcedure ; ७ ணࠬ ⥪ - EX DE,HL - LD BC,.switchProcedure.size - LDIR - RET - -; 楤, ७ᨬ ⥪ 맮 뢠 짮⥫ SLOT0 -; ஦ PUSH, ᫨ , 㢥稢 .stackDepth -.switchProcedure: - DEC DE - POP HL - LD (HL),E - INC HL - LD (HL),D - - LD C,SLOT0 - IN B,(C) - POP HL - PUSH BC - OUT (C),A - - XOR A - OUT (SYS_PORT.RAM),A - -.patch EQU $+1-.switchProcedure - CALL .JPHL - - DI - - XOR A - OUT (SYS_PORT.ROM),A - - POP BC - OUT (C),B - - RET -.JPHL: JP (HL) -.stackDepth EQU 64 ; ﭨ 楤 設 ⥪. -.switchProcedure.size EQU $-.switchProcedure - ENDIF -;--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--== - - -; ==== POST PROCs ================= -; LPT 0 - start -; post 1. TEST RAM BUS -; IF ERROR -> ERROR RAM BUS - CODE 'X'X'X'X... - ᢥ 訡筮 -; LPT 1 - post 1 OK -; post 2 TEST ADRESS BUS -; IF ERROR -> 訡 CODE 'XXXX - 뢥 訩 ⮩, 㧠, 뢥 訩 ⮩ -; LPT 2 - post 2 OK -; post 3 init DCP -; no errors -; LPT 3 - post 3 OK -; post 4 TEST RAM PAGES ࠭, ⥭ ᠭ -; IF ERROR -> 訡 ४祭 Port- CODE 'XX - 뢮 ᠭ -; LPT 4 - post 4 OK -; post 5 ஢ઠ 設 Z84C15 -; IF ERROR -> ERROR CODE '_'XX - 訡 ᠥ, 祬, 砩 吝 設 ᯥ㬠 -; LPT 5 - post 5 OK -; LPT 4 - post 5 error - -; LPT F - post 5 error - 05/04/2025))) -; - MODULE POST_TEST -START: -; ********************************* -; ===== Point 0 ======= -; ********************************* - - LD A,(TABLE_X.v0) ; ᢥ "0" ;rdlow-ok - OUT (Z84.PIO.Port_A.Data),A - -; ==== TEST RAM BUS ======== - -POST_1_RAM_BUS: - LD BC,0 - LD HL,#C000 - LD DE,#0055 -.loop: LD (HL),E - INC L - LD (HL),D - DEC L - LD A,(HL) - XOR E - OR C - LD C,A - INC L - LD A,(HL) - XOR D - OR B - LD B,A - DEC L - - DEC E - INC D - JR NZ,.loop - LD A,E - CPL - LD E,A - INC L - INC L - BIT 4,L - JR Z,.loop - - LD A,B - OR C - JR Z,POST_1_OK ; no errors - -; ERROR RAM BUS - CODE 'X'X'X'X... -.error: - LD HL,TABLE_X -.ERB_2: - BIT 0,C - JR Z,.ERB_1 - - ; ᢥ 訡筮 - LD A,(HL) - AND %1101'1111 ; 묨 - OUT (Z84.PIO.Port_A.Data),A - - ; 㧠 - LD DE,0 -.pause: - DEC DE - LD A,D - OR E - JR NZ,.pause - -; RRC BC -.ERB_1: - LD A,C - RRA - RR B - RR C - - ; ᪮ 横 - INC L - LD A,L - AND +(TABLE_X or #0F) ;%1010'1111 - LD L,A - JR .ERB_2 - -; ************************************************ -; ===== Point 1 ============== -; ************************************************ -POST_1_OK: - - LD A,(TABLE_X.v1) ; ᢥ "1" ;rdlow-ok - OUT (Z84.PIO.Port_A.Data),A - -; ===== TEST ADRESS BUS ====== -POST_2_ADRESS_BUS: - LD HL,#C000 - LD DE,#0000 -.fill_mem: ; ᠬ - LD (HL),E - INC L - LD (HL),D - INC HL - INC DE - INC DE - BIT 7,H - JR NZ,.fill_mem - - DEC HL - DEC DE - DEC DE -.check_mem: ; ஢ ᮢ - LD A,(HL) - CP D - JR NZ,.error - DEC HL - LD A,(HL) - CP E - JR NZ,.error - DEC HL - DEC DE - DEC DE - LD A,H - CP #BF - JR NZ,.check_mem - JR POST_2_OK - -; 訡 CODE: 'XXXX -.error: -.TSAB_4: - LD C,D - LD B,%1101'1111 - LD IX,.TSAB_3 - JR OUT_C_BYTE ; 뢥 訩 ⮩ -.TSAB_3: - LD C,E - LD B,%1111'1111 - LD IX,.TSAB_4 - JR OUT_C_BYTE ; 뢥 訩 ⮩ - -; ===== OUT BYTE PROGRAM ======= - -OUT_C_BYTE: - LD A,C - - RRCA - RRCA - RRCA - RRCA - - AND #0F - OR TABLE_X - LD L,A - LD H,0 - LD A,(HL) - AND B - OUT (Z84.PIO.Port_A.Data),A - - EXX - LD DE,0 -.LOOP_WTT2: - DEC DE - LD A,D - OR E - JR NZ,.LOOP_WTT2 - LD A,#FF - OUT (Z84.PIO.Port_A.Data),A -.LOOP_WTT21: - DEC DE - LD A,D - OR E - JR NZ,.LOOP_WTT21 - EXX - - LD A,C - AND #0F - OR TABLE_X - LD L,A - LD A,(HL) - OUT (Z84.PIO.Port_A.Data),A - - EXX - LD DE,0 -.LOOP_WTT3: - DEC DE - LD A,D - OR E - JR NZ,.LOOP_WTT3 - LD A,#FF - OUT (Z84.PIO.Port_A.Data),A -.LOOP_WTT31: - DEC DE - LD A,D - OR E - JR NZ,.LOOP_WTT31 - EXX - - JP (IX) - -; ************************************************ -; ===== Point 2 ========= -; ************************************************ - -POST_2_OK: - LD A,(TABLE_X.v2) ;rdlow-ok - OUT (Z84.PIO.Port_A.Data),A ; 뢥 "2" - -; ===== INIT DCP ======== -POST_3_INIT_DCP: - ;LD HL,POST_3_OK ; INIT PORTS - JP DCP_INIT ; 楤 樠樨 ⮬ POST_3_OK -; 訡 - -; *********************************** -; ===== Point 3 ========= -; *********************************** - -POST_3_OK: - LD A,(TABLE_X.v3) ; 뢥 "3" ;rdlow-ok - OUT (Z84.PIO.Port_A.Data),A - -; ===== TEST RAM PAGES == - IN A,(SLOT3) - EX AF,AF' ; -POST_4_PAGES: - LD B,0 -.loop: LD A,#FF - LD I,A - LD A,B - OUT (SLOT3),A - XOR A - LD I,A - IN A,(SLOT3) - CP B - JR NZ,.error ; ᫨ 訡 ४祭 Port- - DJNZ .loop - - EX AF,AF' - OUT (SLOT3),A ; ⠭ - JR POST_4_OK - -; *********************************** -; ERROR Port CODE 'XX -.error: LD C,B - LD IX,.error_out_ret -.error_out_ret: - LD B,%1101'1111 - JP OUT_C_BYTE - -; *********************************** -; ===== Point 4 ========= -; *********************************** - -POST_4_OK: - LD A,(TABLE_X.v4) ;rdlow-ok - OUT (Z84.PIO.Port_A.Data),A ; ᢥ "4" - -;= ஢ઠ 設 Z84C15 = -POST_5_DATA_BUS: - LD B,0 -.loop: IN A,(0) - CP #FF - IF ERROR_POST_5 - JR NZ,.error ;!!!!! ᬮ - ELSE - JR NZ,POST_5_ERROR - ENDIF - DJNZ .loop - LD A,(TABLE_X.v5) ;rdlow-ok - JR POST_5_OK - ; - ; - IF ERROR_POST_5 -; ERROR CODE '_'XX -.error: - LD C,A -.erb1: - LD IX,.erbr1 - LD B,%1101'1111 - JP OUT_C_BYTE -.erbr1: - LD A,%1101'1111 - OUT (Z84.PIO.Port_A.Data),A - - LD DE,0 -.LOOP_WTT4: - DEC DE - LD A,D - OR E - JR NZ,.LOOP_WTT4 - JR .erb1 - ENDIF - -; ********************************** -; ===== Point 5 ========= -; ********************************** - IFN ERROR_POST_5 -POST_5_ERROR: - LD A,(TABLE_X.vF) ;rdlow-ok - ENDIF - -POST_5_OK: - OUT (Z84.PIO.Port_A.Data),A ; 뢥 १ -; ********************************** -; POST 襭 - ENDMODULE -; ********************************** - -;-----------------------------------------------------------------------; -; ࢠ 樠 ࠭: - XOR A - OUT (RGADR),A - OUT (RGMOD),A - OUT (SLOT0),A - ;free zx pages! - ;LD A,ZX_PAGE.SLOT1 - ;OUT (SLOT1),A - ;LD A,ZX_PAGE.SLOT2 - ;OUT (SLOT2),A - OUT (SLOT2),A ; ZERO_PAGE - DEC A ; SHARED_PAGE - OUT (SLOT1),A - ; - LD A,SYS_PAGE - OUT (SLOT3),A -;-----------------------------------------------------------------------; - MODULE SET_CONFIG_ID -;-------------[Save IX:IY]-------------- -; Don't use IY before this point if it`s normal booting!!! - LD IX,0 - XOR A - ADD IX,SP ; ⠭ 祭 । 稪 (᫨ ᫥ ) -; ⮬ IX:IY Loader.asm -; 騫  - ;[x] 31/12/2023 客 窨 - ; IY - number from loader - LD D,YH - LD E,YL - EX DE,HL - LD DE,SP2000_Loader_Flag - SBC HL,DE - JR NZ,.no_conf_reload - ; IX - number from loader - LD D,XH - LD E,XL - EX DE,HL - LD DE,ACEX.Config_ID.Sp2000 - SBC HL,DE - ; A = 0 - JR NZ,.no_conf_reload - LD A,#80 -.no_conf_reload: - LD R,A ; reg R bit7 - ਧ ᪠ ࠡ⪮ - ; - ; 直 砩 - LD HL,ACEX.Config_ID.Sp2000 - LD (SYS_PAGE.CONFIG_BYTE),HL ; ࠭ 訢 - ; - LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON - LD (SYS_PAGE.CONFIG_DE),A - ; - ENDMODULE -;-----------------------------------------------------------------------; -; Don't use stack (SP) before this point if it`s normal booting!!! - LD SP,ROM_MAP.EXP.STACK ; 砫 ᯮ짮 ⥪!!! - PUSH HL ; ࠭ 訢 - - CALL PORTS_INIT ; 樠஢ - XOR A - OUT (BorderColor),A - CALL EMM.CheckColdInit ; 樠 - POP HL ; 䨣 -; JR Reset_Handler.start -;-----------------------------------------------------------------------; - MODULE Reset_Handler -start: DI -;----[墠 soft reset #EE port]----- -Check_EE_Port: LD A,ACEX.RET_PORT - LD B,0 - ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 - ;LD C,BIOS.SET_PORTS - ;CALL @ToBIOS_3D13 ; ⠭ . #EE - CALL SET_PORTS - ; - ; [x] 20/10/2024 墠稪 0 - LD A,high ZXKeys.Line_4 - IN A,(ZXKeys) - RRCA - JR NC,No_Reset_handlers - ; - LD A,B - AND A - JR Z,Check_Spec_Page - ; - OUT (SLOT3),A ; Set restart page -.After_Hard_Rst: - LD HL,(Spec_Page.RET_addr) ; prog address - LD A,(Spec_Page.page_0) ; PAGE0 - OUT (SLOT0),A - LD A,(Spec_Page.page_1) ; PAGE1 - OUT (SLOT1),A - LD A,(Spec_Page.page_2) ; PAGE2 - OUT (SLOT2),A - XOR A - LD (Spec_Page.flag_R),A - LD A,(Spec_Page.Reload_Version) - CP #FF - JR Z,.JPHL ; olg logic - ; new logic -.ver_2: LD SP,(Spec_Page.Stack_Point) - AND A - LD A,#FF - LD (Spec_Page.Reload_Version),A - LD A,(Spec_Page.page_3) ; PAGE3 - OUT (SLOT3),A - JR Z,.JPHL - PUSH HL - JP EXP_FNS_2_RET -.JPHL: JP (HL) -; -;--[墠 soft/hard reset #41 page]-- -Check_Spec_Page: - LD A,Spec_Page - OUT (SLOT3),A - ; Check for hardreset flag - LD A,(Spec_Page.flag_R) - CP 'R' - JR NZ,No_Reset_handlers - LD A,(Spec_Page.flag_S) - CP 'S' - JR NZ,No_Reset_handlers - LD A,(Spec_Page.flag_T) - CP 'T' - JR NZ,No_Reset_handlers - ; - XOR A - LD (Spec_Page.flag_R),A - JR Check_EE_Port.After_Hard_Rst - ; -;--------------------------------------- -No_Reset_handlers: - XOR A ;!HARDCODE zx page number - OUT (SLOT3),A - ENDMODULE -;-----------------------------------------------------------------------; - - MODULE Prepare_For_Setup -Set_ALL_Mode: LD A,Port_All_Mode.DEFAULT - LD BC,Port_All_Mode - OUT (C),A - -Set_Default_Screen: - CALL FN_SYNC.INT_DEF ; set default int - LD A,128+4 ; !HARDCODE - CALL FN_SYNC ; set default vsync -Setup_to_RAM: LD HL,Setup_Starter.Start - LD DE,COMPILE_ADDR.SETUP_STARTER - LD BC,Setup_Starter.Size - LDIR - ; ⥪ 直 ﬨ, ⮡ - CALL Setup_Starter.Exec ; #C000 - ;JP PrepareToZX - ENDMODULE - -;PrepareToZX: ; Setup HDD drives for ZX Spectrum mode -; DI -; LD D,CMOS_CELL.TRDOSmount -; CALL CMOS_RD -; AND %1010'1010 ; ᪠ 4- HDD -; JR Z,.start_zx -; ; find first good partition -; ; - -; ; ⪠ ६ ZX HDD -; IN A,(SLOT3) -; EX AF,AF -; LD A,SYS_PAGE -; OUT (SLOT3),A -; ; -; XOR A -; LD H,A -; LD L,A -; LD (SYS_PAGE.CURRENT_DIR_SEC_L),HL -; LD (SYS_PAGE.CURRENT_DIR_SEC_H),HL -; DEC A -; LD (SYS_PAGE.CURRENT_HDD),A -; LD (SYS_PAGE.CURRENT_DIR_DRIVE),A -; LD (SYS_PAGE.CURRENT_DIR_DRIVE_COPY),A -; ; -; EX AF,AF -; OUT (SLOT3),A -; EX AF,AF -; ; -; XOR A -; .loop: PUSH AF -; CALL FN_HDD_PART -; POP BC -; JR NC,.start_zx -; LD A,B -; INC A -; CP #10 -; JR C,.loop - ; 室 ० zx spectrum -.start_zx: - ; IF FREE_ZX_PAGES - ;  - LD B,high BIOS.REINIT.HARD_RESET - JP REINIT - ; ELSE ; [x] free zx pages! - ; XOR A - ; OUT (SLOT2),A ; ZERO_PAGE - ; DEC A - ; OUT (SLOT1),A ; SHARED_PAGE - ; ;LD A,5 - ; ;OUT (SLOT1),A - ; ;LD A,2 - ; ;OUT (SLOT2),A - ; ; - ; JP GOTO_SPEC.ZX_MODE - ; ENDIF -;*********************************** -; 樠 ⮢ -PORTS_INIT: - ; TURBO - LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON - OUT (SYS_PORT.ROM),A - ; ; RESET to ISA - ; LD BC,PORT_ISA - ; LD A,#FF - ; OUT (C),A - ; .isa_reset: - ; DEC A ;!FIXIT 横 㫨 0 ᫥ ? - ; JR NZ,.isa_reset - ; OUT (C),A - ; - ; 樠 ᫥⥫쭮 - ; reg 0 - XOR A ;LD A,0 - OUT (Z84.SIO.Ch_A.Ctrl),A - ; reg 4 - LD A,4 - OUT (Z84.SIO.Ch_A.Ctrl),A - ;INC A ;LD A,5 - OUT (Z84.SIO.Ch_A.Ctrl),A - ; reg 3 - LD A,3 - OUT (Z84.SIO.Ch_A.Ctrl),A - LD A,#C1 - OUT (Z84.SIO.Ch_A.Ctrl),A - ; reg 5 - LD A,5 - OUT (Z84.SIO.Ch_A.Ctrl),A - LD A,#62 ;60, 61 - OUT (Z84.SIO.Ch_A.Ctrl),A - ; reg 1 - LD A,1 - OUT (Z84.SIO.Ch_A.Ctrl),A - DEC A ;LD A,0 ; #18 祭 뢠 - OUT (Z84.SIO.Ch_A.Ctrl),A -.mouse: ; 樠 - ; 樠 ⠩ - LD A,#55 - OUT (Z84.CTC.Ch_0),A - LD A,#2D ; ᪮ - ன ⥫ - OUT (Z84.CTC.Ch_0),A - ; reg 0 - XOR A ;LD A,0 - OUT (Z84.SIO.Ch_B.Ctrl),A - ; reg 4 - LD A,4 - OUT (Z84.SIO.Ch_B.Ctrl),A - ;!TODO ᯮ - ;LD A,#45 - ;LD A,#44 - ; - LD A,#40 ; ᪮ - ⥫ = 16 - OUT (Z84.SIO.Ch_B.Ctrl),A - ; reg 3 - LD A,3 - OUT (Z84.SIO.Ch_B.Ctrl),A - LD A,#41 - OUT (Z84.SIO.Ch_B.Ctrl),A - ; reg 5 - LD A,5 - OUT (Z84.SIO.Ch_B.Ctrl),A - LD A,#E0 - OUT (Z84.SIO.Ch_B.Ctrl),A - ; reg 1 - LD A,1 - OUT (Z84.SIO.Ch_B.Ctrl),A - DEC A ;LD A,0 - OUT (Z84.SIO.Ch_B.Ctrl),A - ; 樠 ࠫ쭮 1 (ਭ) - ; !FIXIT ७ - ; POST-Tester- - ; LD A,#CF ; BITS I/O - ; OUT (Z84.PIO.Port_A.Command),A - ; XOR A - ; OUT (Z84.PIO.Port_A.Command),A ; ALL - out - ; OUT (Z84.PIO.Port_A.Data),A ; DATA - all zeros - ; ਭ - LD A,#0F ; Init printer port for Out - OUT (Z84.PIO.Port_A.Command),A - OUT (Z84.PIO.Port_A.Command),A - ; 樠 ࠫ쭮 2 (INT/DMA ISA) - LD BC,Z84.PIO.Port_B.Command ;⮫쪮 १ ॣ BC, 墠 - LD A,#CF ; BITS I/O - OUT (C),A - LD A,#3F - OUT (C),A - LD A,#C0 ; Bit 7 - Select (1), Bit 6 - Auto_Line_Feed (1) - OUT (Z84.PIO.Port_B.Data),A - ; "襭" ISA - ; ISA 1 - LD BC,PORT_ISA - LD A,#FF - OUT (C),A - ; 訬 - XOR A - OUT (SP_SND.CBL.SYS_PORT),A - LD BC,SP_SND.CBL.OUT - LD A,#80 -.CBL_MUTE: OUT (C),A - DJNZ .CBL_MUTE - ; ISA 2 ᫥ 让 - LD BC,PORT_ISA - XOR A - OUT (C),A - ; ஫ ᪮ - ; ஫ ᪠ ( ) - LD A,CNF_PORT.CNF_3+ROM.BIOS - OUT (SYS_PORT.ROM),A - OUT (FDC_93.DrvCTRL),A : ASSERT CNF_PORT.CNF_3+ROM.BIOS = #1C, "ERROR: A != #1C" - PUSH HL ; প - POP HL ; প - LD A,#3C ;!HARDCODE - OUT (FDC_93.DrvCTRL),A - PUSH HL ; প - POP HL ; প - XOR A ;!HARDCODE CMD 181893 - OUT (FDC_93.Command),A - ; 몫 ஫ ᪠ - LD A,CNF_PORT.CNF_0+ROM.BIOS - OUT (SYS_PORT.ROM),A - ; set HDD1/not-HDD2 - LD A,IDE.Chanel.Primary - OUT (IDE.Chanel.Set),A - LD BC,ZX_MEM_PORT.Pentagon - LD A,#10 - OUT (C),A ; BASIC_48 mode - LD B,high ZX_MEM_PORT.Scorpion - LD A,1 - OUT (C),A ; RAM-0 mode !!! - ; ⪠ ஢ SIO - CALL .clean_kbd_buf - JR .clean_mouse_buf -.clean_kbd_buf: ; Clearing the keyboard buffer - IN A,(Z84.SIO.Ch_A.Ctrl) - RRCA - RET NC - IN A,(Z84.SIO.Ch_A.Data) - JR .clean_kbd_buf -.clean_mouse_buf:; Clearing the mouse buffer - IN A,(Z84.SIO.Ch_B.Ctrl) - RRCA - RET NC - IN A,(Z84.SIO.Ch_B.Data) - JR .clean_mouse_buf -;--------------------------------------- - -;-----------------------------------------------------------------------; - - -;-----------------------------------------------------------------------; -; paths from project DIR - - INCLUDE 'BIOS_FUNC.ASM' - INCLUDE 'FUNC_4x.ASM' - INCLUDE 'FUNC_CMOS.ASM' - INCLUDE 'FUNC_SERVICE.asm' - ; INCLUDE 'EXP_SCR.ASZ' LP_SCR_MNU - INCLUDE 'FUNC_SCREEN.ASM' - INCLUDE 'FUNC_RAM_ROM_DRV.ASM' - INCLUDE 'FUNC_SYS.ASM' - INCLUDE 'FUNC_FOR_TRDOS.ASM' - INCLUDE 'FUNC_5x.asm' - INCLUDE 'FUNC_LOW_PRINT.ASM' -;-----------------------------------------------------------------------; - - -;-----------------------------------------------------------------------; -; #################################### -; #::::::::::::::::::::::::::::::::::#\ -; #::::: DCP :::::::#\ -; #::::::::::::::::::::::::::::::::::#\ -; ####################################\ -; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ -DCP_DATA: INCLUDE 'DCP.ASM' -;-----------------------------------------------------------------------; - -;-----------------------------------------------------------------------; -; -; #-2kb-############################## -; #::::::::::::::::::::::::::::::::::#\ -; #:::: IBM-ZG ::::::#\ -; #::::::::::::::::::::::::::::::::::#\ -; ####################################\ -; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ -ZG_ADDRESS: INCLUDE 'FONT.ASM' -ZG_SIZE EQU $-ZG_ADDRESS - ASSERT (ZG_SIZE <= #800), "The font size is too big!" -;-----------------------------------------------------------------------; - - -; -; !FIXIT ᤥ 䨪஢ ⤥ 䠩 IF/ELSE ⮬ 㤠 . -; -;????? ᬮ -;----------------------------------------------------------------------; -; BLOCK #3CC0-$,255 - ; no-magics! -;MAGIC_1: ; MAGIC -; PUSH AF -; LD A,ROM.EXT -; OUT (SYS_PORT.OFF),A -; POP AF -; JP MAGIC_1 -;MAGIC_3: -; PUSH AF -; LD A,ROM.EXT -; OUT (SYS_PORT.OFF),A -; POP AF -; RETN -;MAGIC_2: -;; CALL MG_BEGIN -; JR MAGIC_3 - -;************************* - _mInfoBLOCK #3CE0-$,0 -SW_ROM_1: - LD HL,#259F ;!HARDCODE BASIC_FN.x128.show_main_menu - PUSH HL - LD HL,#5B00 ;!HARDCODE BASIC_FN.x128.ROM_SWAP - LD A,(HL) - CP #F5 ; #F5 - 'PUSH AF'. ஢ #5B00 - JR Z,JP_HL_48 ; BASIC128 - POP HL - JR SW_ROM ; -;************************* - -; BLOCK #3CF0-$,0 -;JMP_48: -; LD HL,00h -; JR JP_HL_48 -; -; NOP -; NOP -; NOP - -;*************************************** - _mInfoBLOCK #3CF8-$,0 - ; no basic-48! -JP_HL_48: ;!FIXIT assert with ROM - PUSH HL -SW_ROM: ;!FIXIT assert with ROM - PUSH AF - LD A,ROM.BIOS ;!FIXIT ࠢ쭮 ⠭ - OUT (SYS_PORT.RAM),A - POP AF - RET -;*************************************** -;----------------------------------------------------------------------; -; - -;!TODO ᯥ㬮᪨ ⨫ -;----------------------------------------------------------------------; - ; _mInfoBLOCK #3CFA-$,#FF - ; LD A,0 ;!HARDCODE - ; OUT (SYS_PORT.OFF),A - ; POP AF -;----------------------------------------------------------------------; -; - - -; -;----------------------------------------------------------------------; - _mInfoBLOCK #3D00-$,#FF -DOS_ON: NOP ;!TODO ࠡ⠥ #7FFD[4] = 1. - 㧭 祭 7FFD ? - RET -;*************************************** - -;*************************************** -; BLOCK #3D02-$,FF -; !TODO 室 17 ⮢ -;*************************************** - -;*************************************** - _mInfoBLOCK #3D13-$,#FF - NOP - JP ToBIOS_18 -;*************************************** - -;*************************************** -; BLOCK #3D17-$,FF -;*************************************** -; - - - - - ; IF FREE_ZX_PAGES -;-----------------------------------------------------------------------; -GOTO_SPEC: PUSH HL - LD HL,RET_TO_BIOS - EX (SP),HL - PUSH HL - PUSH AF - CALL FN_TURBO.SET_FDD_720 - POP AF - LD HL,GOTO_SPECTRUM - EX (SP),HL - JP EXTENSION_FNs - -ZX_MEMORY_MANAGER: - PUSH HL - LD HL,RET_TO_BIOS - EX (SP),HL - PUSH HL - LD HL,MANAGE_ZX_PAGES.FN_ENTRANCE - EX (SP),HL - JP EXTENSION_FNs -;-----------------------------------------------------------------------; - - -;>$< >$< >$< >$< >$< >$< [ ] >$< >$< >$< >$< >$< >$< ; -; -;---------------------[ #41 ]----------------------; -;-------------[RST 08] -RAM_BIOS_PROG: ; for CALL BIOS in #41 page - DISP Spec_Page.to_bios - PUSH AF - LD A,ROM.BIOS - OUT (SYS_PORT.ROM),A - POP AF - RET - ENT -.Length EQU $-RAM_BIOS_PROG -;-------------------[] -; -;-------------[RST 38] -PROG_NO_ROM: - DISP Spec_Page.no_zx_rom - DI - ; - LD A,CNF_PORT.CNF_0 - OUT (SYS_PORT.RAM),A - ; - LD A,SHARED_PAGE - OUT (SLOT3),A - OUT (SLOT2),A - OUT (SLOT1),A - LD SP,#BF00 - ; - LD BC,BIOS.SET_PAL_INIT.CGA - RST ToBIOS - ; - LD E,0 - LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default - RST ToBIOS - ; - LD DE,0 - LD B,E - LD HL,#2050 - LD C,BIOS.LP_CLS_WIN - RST ToBIOS - ; - LD HL,MESSAGE_NR - LD DE,#A000 - PUSH DE - LD BC,MESSAGE_NR.size - LDIR - ; BC=0 - POP HL - SCF - EX AF,AF' - SCF - LD A,COLORS.CGA.FLASH + COLORS.CGA.INK.RED - PUSH BC - POP IY - LD DE,#0F00 - ; B=0 delimiter - LD C,BIOS.LP_PR_LINE_DIR - RST ToBIOS - ; - ; set scr-2 - LD A,1 - OUT (SCREEN_SWITCH),A -.loop: DI - HALT - JR .loop - ;Spectrum ROM configuration error - ; 10 20 30 40 50 60 70 80 - ; "123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|" -MESSAGE_NR: DZ "\t\t\tSpectrum ROM configuration error\r\n\t\t\t Press Ctrl+Alt+Del or RESET." -.size EQU $-MESSAGE_NR - ENT -PROG_NO_ROM.size EQU $-PROG_NO_ROM -;-------------------[] -;-----------------------------------------------------------------------; -;>$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$<; - -;-------------------------------[ #FFE0 ]-------------------------------; -; ணࠬ, ࠧ饭 #40 ࠭, -; RESTARTS, 墠뢠 RESET -RESTARTS_PROG: ; !TODO LDConf 墠  ᫥ hardreset - LD HL,RESTARTS - LD B,16 -.loop: LD (HL),0 - INC HL - DJNZ .loop - NOP - NOP -.Size EQU $-RESTARTS_PROG - ; LD A,1 - ; OUT (SLOT3),A -;-----------------------------------------------------------------------; - -;----------------------------[Setup Starter]----------------------------; - MODULE Setup_Starter -; ணࠬ, ࠧ頥 #C000 ᪠ Setup -Start: DISP COMPILE_ADDR.SETUP_STARTER -Exec: LD A,CNF_PORT.CNF_0 + ROM.EXTENSION - OUT (SYS_PORT.ROM),A - ; - LD HL,ROM_MAP.SETUP - LD DE,MEM_MAP.SETUP - LD BC,BLOCK_Setup.Length - LDIR - ; - LD A,CNF_PORT.CNF_0 + ROM.BIOS - OUT (SYS_PORT.ROM),A -;-----------[Check SPACE] - ; CF । SPACE. CF=0: - ; ⮬ ஢ main.asm [space_check] ᫨ , - ; ந室 ࠬ " " - ; ६ १㧪 [Check Quick Start ROM] - LD BC,Port_All_Mode - IN H,(C) ; LD H,#FF - LD A,Port_All_Mode.DEFAULT - Port_All_Mode.SPECTRUM_MODE_OFF - OUT (C),A ; keyboard int & acc off - LD A,high ZXKeys.Line_7 - IN A,(ZXKeys) - RRA ; CF=0 -;----------------------[] - OUT (C),H - DI - POP HL ; EXP SETUP - JP SETUP_MAIN - ENT -Size EQU $-Setup_Starter.Start - ENDMODULE -;-----------------------------------------------------------------------; -;-----------------------------------------------------------------------; -;>$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$<; -; - - - - - -;*************************************** - _mInfoBLOCK #3E00-$,#FF -DOS_OFF: - PUSH AF - LD A,R - DI - PUSH AF - PUSH BC - ; - LD BC,(#5BFF) ; !HARDCODE - LD A,#C9 ; Opcode RET - LD (#5BFF),A ; !HARDCODE - CALL #5BFF ; !HARDCODE - LD (#5BFF),BC ; !HARDCODE - ; - POP BC - POP AF - JP PO,.no_EI - EI -.no_EI: POP AF - RET -;*************************************** - - -;*************************************** -; BLOCK #3E16-$,FF -; !TODO 室 10 ⮢ -; -;*************************************** - - -//////////////////////////////////////////////////////////////////////// -;------[ ; !TODO - 易 ६묨 LIB_TABLE ; ]------ -; _mInfoBLOCK #3E20-$,#FF -; [x] -FN_LIB: SCF - RET -// -// IN A,(SLOT3) -// LD B,A -// LD A,SYS_PAGE -// OUT (SLOT3),A -// PUSH HL -// LD L,C ; API ⥯ C , . #A0..AF -// LD H,#C1 -// LD A,(HL) -// POP HL -// AND A -// SCF -// JR Z,FN_LIB_RET -// -// OUT (SLOT3),A -// LD (#C0FE),SP -// LD SP,#C0F0 -// PUSH BC -// CALL #C100 ; !HARDCODE -// POP BC -// LD SP,(#C0FE) -// ; LD A,B -// ; OUT (SLOT3),A -// ; RET -// -//FN_LIB_RET: -// LD A,B -// OUT (SLOT3),A -// ;SCF -// RET -//////////////////////////////////////////////////////////////////////// -;----------------------------------------------------------------------; -; - - - -;!TODO ᪮ -;----------------------------------------------------------------------; -; 室 A - byte -; B - speed_parameter -FN_KBD_OUT: - AND A - LD E,A - LD D,#FF - JP PE,kbd_parity ; ⠭ PE/PO ??? - LD D,#FE -kbd_parity: - AND A ; - start-bit - 0 - RL E - RL D ; DE - 11 । - LD C,11 - -kbd_loop: - LD A,5 - OUT (Z84.SIO.Ch_A.Ctrl),A - LD A,#60 - BIT 0,E - JR NZ,no_inv - XOR 2 ; -no_inv: - LD L,A - OUT (Z84.SIO.Ch_A.Ctrl),A ; ⠢ - - LD A,5 - OUT (Z84.SIO.Ch_A.Ctrl),A - LD A,L - OR #80 ; ᨭந - OUT (Z84.SIO.Ch_A.Ctrl),A ; ᨭ - LD A,B ; speed_par -kbd_loop1: - PUSH HL - POP HL - DEC A - JR NZ,kbd_loop1 - LD A,5 - OUT (Z84.SIO.Ch_A.Ctrl),A - LD A,L - OUT (Z84.SIO.Ch_A.Ctrl),A ; ᨭ - - LD A,B ; speed_par -kbd_loop2: - PUSH HL - POP HL - DEC A - JR NZ,kbd_loop2 - RR D - RR E - DEC C - JR NZ,kbd_loop - - LD A,5 - OUT (Z84.SIO.Ch_A.Ctrl),A - LD A,#60 - OUT (Z84.SIO.Ch_A.Ctrl),A ; । - AND A - RET -;----------------------------------------------------------------------; - - - -;----------------------------------------------------------------------; -; DE - -; HL - த⥫쭮 -BEEP: LD A,#10 - CALL .beep_loop - ; - ;XOR A - CALL .beep_loop - ; - DEC HL - LD A,H - OR L - JR NZ,BEEP - RET - ; -.beep_loop: OUT (SP_SND.Beeper),A - LD B,D - LD C,E - ; -.loop: DEC BC - LD A,B - OR C - JR NZ,.loop - RET -;----------------------------------------------------------------------; - - -;#######################################################################; - - - -;---------[Return to EXTENSION]--------- - _mInfoBLOCK #3FD0-$,#FF ; ToBIOS_FromEXT -; #3FD0 -; 맮 㭪権 ࠭ 0 (Extension) -RET_TO_EXTENSION: - PUSH AF - LD A,ROM.EXTENSION - OUT (SYS_PORT.ROM),A - POP AF - RST ToBIOS_18 - JP RET_TO_EXTENSION - -; !TODO Free 6 bytes -;--------------------------------------- -; - - -;---------------[ Free ]---------------- -; - _mInfoBLOCK #3FE0-$,#FF -; !TODO Free 8 bytes and entry point -;SOUND_TEST: -; LD A,ROM.EXPANSION -; OUT (SYS_PORT.ON),A -; JP SND_TEST_RET -;--------------------------------------- -; - -; [x] new portal -;------------[Portal to EXT]------------ -; 窠 室/室 㭪権 ROM.EXTENSION - _mInfoBLOCK #3FE8-$,#FF -EXTENSION_FNs: ;EXP_HDD: - PUSH AF - LD A,ROM.EXTENSION - OUT (SYS_PORT.ROM),A - POP AF - RET -;--------------------------------------- -; - - -; -;---------------[ Free ]---------------- - _mInfoBLOCK #3FF0-$,#FF -; !TODO Free 8 bytes and entry point -;--------------------------------------- -; - - -; -;----[ From TR-DOS to API #80..#FF ]----- - _mInfoBLOCK #3FF8-$,#FF -; 窠 室/室 TR-DOS -EXP_FNS_RET: - PUSH AF - LD A,ROM.BIOS - OUT (SYS_PORT.RAM),A ; 窠 室/室 / TR-DOS 맮 㭪権 BIOS #80..#FF - JP EXP_FNS -;--------------------------------------- -; - -; - _mInfoBLOCK #4000-$,#FF + +; +;************************************************************* +; +; EXPANSION VER 3.00 (C) Peters Plus Ltd. +; EXPANSION VER 3.1 (C) Sprinter Team +; +;************************************************************* + + DISPLAY "\r\n/=====================[EXP part]=====================\\" + +;*************************************** +;*********** BEGIN EXPANSION *********** +;*************************************** +; 室 RESET +EXP_START: + JP GLOBAL_RESET + +;--------------------------------------- +;ROM_NUMBER: +;.part1: DW MotherBoardID +;.part2: DB 0 +BOARD_INFO: +.number: DW MotherBoardID +.type: DB MotherBoardType +;--------------------------------------- + +;--------------------------------------- +; BoardID: +; .start: WORD BoardID_start ; BoardID_start +; .end: WORD BoardID_end ; BoardID_end +;--------------------------------------- + +;======================================= + BLOCK 8-$,0 ; first on/off EXPANSION +;ணࠬ 맮 BIOS १ RST8 RAM0 +EXP_FNS_2_RET: + PUSH AF + LD A,ROM.BIOS + OUT (SYS_PORT.RAM),A + POP AF + JR RST_18_1 +;======================================= + +;======================================= + BLOCK #10-$,0 ;shortblock-ok +RST_10: +; JR RST10 +;======================================= + +;======================================= + BLOCK #18-$,0 +; RST18h - MAIN BIOS functions + JP EXP_FNS_RST18 +RST_18_1: + CALL EXP_FNS_RST18 +.exit: JR EXP_FNS_2_RET + +;======================================= + +;======================================= + BLOCK #20-$,0 ;shortblock-ok +RST_20: +;======================================= + +;======================================= + BLOCK #28-$,0 +RST_28: +;======================================= + +;======================================= + BLOCK #30-$,0 +RST_30: +;======================================= + +;======================================= + BLOCK #38-$,0 +; INTERUPT Point +RST38: IF TEST_INT + ;INT: + PUSH BC + PUSH AF + + LD C,SLOT3 + IN B,(C) + LD A,SYS_PAGE + OUT (C),A + + LD A,(SYS_PAGE.INT_ID) + CP #AA + JR Z,YESINT + OUT (C),B + JP NOINT +YESINT: PUSH HL + LD HL,(SYS_PAGE.INT_ADRESS) + LD A,H + OR L + LD A,(SYS_PAGE.INT_PAGE) + OUT (C),B + PUSH DE + CALL NZ,EXTINT + POP DE + POP HL +NOINT: POP AF + POP BC + EI + RETI + ELSE + +; PUSH AF +; 1: DEC A +; JR NZ,1B +; POP AF + EI + RETI + ENDIF +;RST10: +; CALL_48 10h +; RET +;======================================= + + +;======================================= + IFN TEST_INT + _mInfoALIGN #10,0 +; any adress < #C0 with mask %xxxx0000 +; ⠡ Sprinter POST-Tester-a +TABLE_X: +.v0: DB %00101000 ; "0" a +.v1: DB %10111101 ; "1" ___ +.v2: DB %00110010 ; "2" f | g | b +.v3: DB %00110100 ; "3" |___| +.v4: DB %10100101 ; "4" e | | c +.v5: DB %01100100 ; "5" |___|. +.v6: DB %01100000 ; "6" d +.v7: DB %00111101 ; "7" +.v8: DB %00100000 ; "8" a - 7 +.v9: DB %00100100 ; "9" b - 6 +.vA: DB %00100001 ; "A" . - 5 +.vB: DB %11100000 ; "B" f - 4 +.vC: DB %01101010 ; "C" g - 3 +.vD: DB %10110000 ; "D" e - 2 +.vE: DB %01100010 ; "E" c - 1 +.vF: DB %01100011 ; "F" d - 0 + ENDIF +;======================================= +; + +; +;======================================= + IFN TEST_INT +RESTARTS EQU #FFE0 +GLOBAL_RESET: + DI + IM 1 + LD HL,RESTARTS + LD DE,RESTARTS_PROG + LD B,RESTARTS_PROG.Size +.compare: + LD A,(DE) + CP (HL) + JR NZ,NO_RESTART + INC HL + INC DE + DJNZ .compare + JP RESTARTS + ENDIF +;======================================= + _mInfoBLOCK #66-$,0 +NMI_Point: + ; १ 3 JP + ;NOP + ;NOP + ;NOP + RETN +;======================================= + +;SET_BIOS_TO_RAM: ; ணࠬ ࠡ⠥ 0C000h +; +; LD SP,#C0C0 +; LD A,#E0 +; LD C,PAGE3 +; IN B,(C) +; CALL SET_ROM_PAGES+#C000 +; JP NO_SUMX_EQ + +;********************************** + +;BEEP: +; PUSH HL +; PUSH DE +; PUSH BC +; PUSH AF +; PUSH IX +; +; LD HL,BEEP_RET +; PUSH HL +; LD HL,SW_ROM +; PUSH HL +; LD HL,03B5h +; PUSH HL +; LD HL,200 +; LD D,H +; LD E,5 +; JP SW_ROM +;BEEP_RET: +; +; POP IX +; POP AF +; POP BC +; POP DE +; POP HL +; RET +;======================================= +; BLOCK MEM_MAP.ID_Version-$,0 ;#C0-$,0 + +ID_Version: DW BIOS_ver_hex +ID_SPRINTER: DB 'Firmware v' +.BIOS_ver: DB BIOS_ver_string + IF BETA_BUILD > 0 + DB " ", BETA_str_ver + ELSE + IF RELEASEhotFIX > 0 + DB ReleaseHotFix + ENDIF + ENDIF + DB 0 +.Record1_Size EQU $-ID_SPRINTER + ; 2 + DB 'Sprinter',0 + ; 3 ; [x] 24/02/2024 +.bitstream_ver: DB bitstream_ver_string,0 + DB 0 + ; +.Size EQU $-ID_SPRINTER +.Records_Num EQU 3 + +; Check for max length of string + ASSERT ID_SPRINTER.Record1_Size < SYS_PAGE.ID_FLAG.Size, 'ERROR! ID String is to long!' +;======================================= + + +; BLOCK #FC-$,0 +BoardID: +.start: WORD BoardID_start ; BoardID_start +.end: WORD BoardID_end ; BoardID_end +;#######################################################################; + + +;#######################################################################; +;-----------------------------------------------------------------------; +; ROM-Disk pages ; [x] ⨢஢ ROM-DISK +ROM_DISK.Pages.Number: + BYTE ROM_DISK.Pages.Size ; ᫮ ࠭ +; ࠭ ⠢ bit4 ४⭮ ⠭ +;(஡ sp2000.inc - ࠢ ࠭栬 ) +ROM_DISK.Pages: ; ࠭ ROM-Disk + ABYTE #10 #05,#06,#07,#09,#0A,#0B ; 98304 bytes +.Size EQU $-ROM_DISK.Pages +;-----------------------------------------------------------------------; +;#######################################################################; + + + +;======================================= + IF TEST_INT + _mInfoALIGN #10,0 +; any adress < #C0 with mask %xxxx0000 +; ⠡ Sprinter POST-Tester-a +TABLE_X: +.v0: DB %00101000 ; "0" a +.v1: DB %10111101 ; "1" ___ +.v2: DB %00110010 ; "2" f | g | b +.v3: DB %00110100 ; "3" |___| +.v4: DB %10100101 ; "4" e | | c +.v5: DB %01100100 ; "5" |___|. +.v6: DB %01100000 ; "6" d +.v7: DB %00111101 ; "7" +.v8: DB %00100000 ; "8" a - 7 +.v9: DB %00100100 ; "9" b - 6 +.vA: DB %00100001 ; "A" . - 5 +.vB: DB %11100000 ; "B" f - 4 +.vC: DB %01101010 ; "C" g - 3 +.vD: DB %10110000 ; "D" e - 2 +.vE: DB %01100010 ; "E" c - 1 +.vF: DB %01100011 ; "F" d - 0 + ENDIF +;======================================= +; + +; +;======================================= + IF TEST_INT +RESTARTS EQU #FFE0 +; 墠 ࠧ ᫥ ஫ CAD. +; 뢠 ⮢, ⮬ ᯮ짮 . +GLOBAL_RESET: + DI + IM 1 + LD HL,RESTARTS + LD DE,RESTARTS_PROG + LD B,RESTARTS_PROG.Size +.compare: + LD A,(DE) + CP (HL) + JR NZ,NO_RESTART + INC HL + INC DE + DJNZ .compare + JP RESTARTS + ENDIF +;======================================= +; + +; +;-----[墠 RESET ]----- +NO_RESTART: +; ⥪ ᯮ㥬!!! + LD SP,IX ; ࠭ 祭 । 稪 (᫨ ᫥ ) + ; 樠 ७ ⮢ Z84C15 POST-Tester- + LD A,5 ; COM port for Printer OUT + OUT (Z84.SIO.Ch_A.Ctrl),A + LD A,#62 + OUT (Z84.SIO.Ch_A.Ctrl),A + ; + LD A,#CF ; BITS I/O + OUT (Z84.PIO.Port_A.Command),A + XOR A + OUT (Z84.PIO.Port_A.Command),A + ;LD A,%11101010 ; L + OUT (Z84.PIO.Port_A.Data),A ; PRINTER - PORT - all zeros + ; -樠 ⥬ ⮢ Z84C15- + LD BC,#FF*256 + Z84.SYS.Control + XOR A ; Z84.REG.WaitState_Ctrl + OUT (C),A ; Z84.SYS.Control + INC C ; Z84.REG.WaitState_MemBound + OUT (C),A ; Z84.SYS.Data ; set 0 Waits + ; + DEC C + LD A,3 ; Z84.REG.Misc_Ctrl + OUT (C),A ; Z84.SYS.Control + INC C + ; no boundary set! + ;XOR A ; disable CS0, disable CS1 + LD A,1 ; enable CS0, disable CS1 + OUT (C),A ; Z84.SYS.Data + JP POST_TEST.START +;--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--== + IF TEST_INT +;----------------[int]------------------ +EXTINT: OR A + RET Z + + BIT 7,H + JR Z,.L2 + LD C,SLOT2 + BIT 6,H + JR Z,.L1 + LD C,SLOT3 + +.L1: IN B,(C) + PUSH BC + OUT (C),A + CALL .JPHL + POP BC + OUT (C),B + RET + ; ஢ઠ 㫥 ᫮ +.L2: BIT 6,H + LD C,SLOT1 + JR NZ,.L1 ; த ᫨ 㫥 ᫮ + + PUSH HL + + LD HL,-.stackDepth - .switchProcedure.size + .patch-2 + ADD HL,SP + PUSH HL + + LD HL,-.stackDepth - .switchProcedure.size ; memory stack use! + ADD HL,SP ; stack + PUSH HL ; ணࠬ .readProcedure + + LD DE,.switchProcedure ; ७ ணࠬ ⥪ + EX DE,HL + LD BC,.switchProcedure.size + LDIR + RET + +; 楤, ७ᨬ ⥪ 맮 뢠 짮⥫ SLOT0 +; ஦ PUSH, ᫨ , 㢥稢 .stackDepth +.switchProcedure: + DEC DE + POP HL + LD (HL),E + INC HL + LD (HL),D + + LD C,SLOT0 + IN B,(C) + POP HL + PUSH BC + OUT (C),A + + XOR A + OUT (SYS_PORT.RAM),A + +.patch EQU $+1-.switchProcedure + CALL .JPHL + + DI + + XOR A + OUT (SYS_PORT.ROM),A + + POP BC + OUT (C),B + + RET +.JPHL: JP (HL) +.stackDepth EQU 64 ; ﭨ 楤 設 ⥪. +.switchProcedure.size EQU $-.switchProcedure + ENDIF +;--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--== + + +; ==== POST PROCs ================= +; LPT 0 - start +; post 1. TEST RAM BUS +; IF ERROR -> ERROR RAM BUS - CODE 'X'X'X'X... - ᢥ 訡筮 +; LPT 1 - post 1 OK +; post 2 TEST ADRESS BUS +; IF ERROR -> 訡 CODE 'XXXX - 뢥 訩 ⮩, 㧠, 뢥 訩 ⮩ +; LPT 2 - post 2 OK +; post 3 init DCP +; no errors +; LPT 3 - post 3 OK +; post 4 TEST RAM PAGES ࠭, ⥭ ᠭ +; IF ERROR -> 訡 ४祭 Port- CODE 'XX - 뢮 ᠭ +; LPT 4 - post 4 OK +; post 5 ஢ઠ 設 Z84C15 +; IF ERROR -> ERROR CODE '_'XX - 訡 ᠥ, 祬, 砩 吝 設 ᯥ㬠 +; LPT 5 - post 5 OK +; LPT 4 - post 5 error - +; LPT F - post 5 error - 05/04/2025))) +; + MODULE POST_TEST +START: +; ********************************* +; ===== Point 0 ======= +; ********************************* + + LD A,(TABLE_X.v0) ; ᢥ "0" ;rdlow-ok + OUT (Z84.PIO.Port_A.Data),A + +; ==== TEST RAM BUS ======== + +POST_1_RAM_BUS: + LD BC,0 + LD HL,#C000 + LD DE,#0055 +.loop: LD (HL),E + INC L + LD (HL),D + DEC L + LD A,(HL) + XOR E + OR C + LD C,A + INC L + LD A,(HL) + XOR D + OR B + LD B,A + DEC L + + DEC E + INC D + JR NZ,.loop + LD A,E + CPL + LD E,A + INC L + INC L + BIT 4,L + JR Z,.loop + + LD A,B + OR C + JR Z,POST_1_OK ; no errors + +; ERROR RAM BUS - CODE 'X'X'X'X... +.error: + LD HL,TABLE_X +.ERB_2: + BIT 0,C + JR Z,.ERB_1 + + ; ᢥ 訡筮 + LD A,(HL) + AND %1101'1111 ; 묨 + OUT (Z84.PIO.Port_A.Data),A + + ; 㧠 + LD DE,0 +.pause: + DEC DE + LD A,D + OR E + JR NZ,.pause + +; RRC BC +.ERB_1: + LD A,C + RRA + RR B + RR C + + ; ᪮ 横 + INC L + LD A,L + AND +(TABLE_X or #0F) ;%1010'1111 + LD L,A + JR .ERB_2 + +; ************************************************ +; ===== Point 1 ============== +; ************************************************ +POST_1_OK: + + LD A,(TABLE_X.v1) ; ᢥ "1" ;rdlow-ok + OUT (Z84.PIO.Port_A.Data),A + +; ===== TEST ADRESS BUS ====== +POST_2_ADRESS_BUS: + LD HL,#C000 + LD DE,#0000 +.fill_mem: ; ᠬ + LD (HL),E + INC L + LD (HL),D + INC HL + INC DE + INC DE + BIT 7,H + JR NZ,.fill_mem + + DEC HL + DEC DE + DEC DE +.check_mem: ; ஢ ᮢ + LD A,(HL) + CP D + JR NZ,.error + DEC HL + LD A,(HL) + CP E + JR NZ,.error + DEC HL + DEC DE + DEC DE + LD A,H + CP #BF + JR NZ,.check_mem + JR POST_2_OK + +; 訡 CODE: 'XXXX +.error: +.TSAB_4: + LD C,D + LD B,%1101'1111 + LD IX,.TSAB_3 + JR OUT_C_BYTE ; 뢥 訩 ⮩ +.TSAB_3: + LD C,E + LD B,%1111'1111 + LD IX,.TSAB_4 + JR OUT_C_BYTE ; 뢥 訩 ⮩ + +; ===== OUT BYTE PROGRAM ======= + +OUT_C_BYTE: + LD A,C + + RRCA + RRCA + RRCA + RRCA + + AND #0F + OR TABLE_X + LD L,A + LD H,0 + LD A,(HL) + AND B + OUT (Z84.PIO.Port_A.Data),A + + EXX + LD DE,0 +.LOOP_WTT2: + DEC DE + LD A,D + OR E + JR NZ,.LOOP_WTT2 + LD A,#FF + OUT (Z84.PIO.Port_A.Data),A +.LOOP_WTT21: + DEC DE + LD A,D + OR E + JR NZ,.LOOP_WTT21 + EXX + + LD A,C + AND #0F + OR TABLE_X + LD L,A + LD A,(HL) + OUT (Z84.PIO.Port_A.Data),A + + EXX + LD DE,0 +.LOOP_WTT3: + DEC DE + LD A,D + OR E + JR NZ,.LOOP_WTT3 + LD A,#FF + OUT (Z84.PIO.Port_A.Data),A +.LOOP_WTT31: + DEC DE + LD A,D + OR E + JR NZ,.LOOP_WTT31 + EXX + + JP (IX) + +; ************************************************ +; ===== Point 2 ========= +; ************************************************ + +POST_2_OK: + LD A,(TABLE_X.v2) ;rdlow-ok + OUT (Z84.PIO.Port_A.Data),A ; 뢥 "2" + +; ===== INIT DCP ======== +POST_3_INIT_DCP: + ;LD HL,POST_3_OK ; INIT PORTS + JP DCP_INIT ; 楤 樠樨 ⮬ POST_3_OK +; 訡 + +; *********************************** +; ===== Point 3 ========= +; *********************************** + +POST_3_OK: + LD A,(TABLE_X.v3) ; 뢥 "3" ;rdlow-ok + OUT (Z84.PIO.Port_A.Data),A + +; ===== TEST RAM PAGES == + IN A,(SLOT3) + EX AF,AF' ; +POST_4_PAGES: + LD B,0 +.loop: LD A,#FF + LD I,A + LD A,B + OUT (SLOT3),A + XOR A + LD I,A + IN A,(SLOT3) + CP B + JR NZ,.error ; ᫨ 訡 ४祭 Port- + DJNZ .loop + + EX AF,AF' + OUT (SLOT3),A ; ⠭ + JR POST_4_OK + +; *********************************** +; ERROR Port CODE 'XX +.error: LD C,B + LD IX,.error_out_ret +.error_out_ret: + LD B,%1101'1111 + JP OUT_C_BYTE + +; *********************************** +; ===== Point 4 ========= +; *********************************** + +POST_4_OK: + LD A,(TABLE_X.v4) ;rdlow-ok + OUT (Z84.PIO.Port_A.Data),A ; ᢥ "4" + +;= ஢ઠ 設 Z84C15 = +POST_5_DATA_BUS: + LD B,0 +.loop: IN A,(0) + CP #FF + IF ERROR_POST_5 + JR NZ,.error ;!!!!! ᬮ + ELSE + JR NZ,POST_5_ERROR + ENDIF + DJNZ .loop + LD A,(TABLE_X.v5) ;rdlow-ok + JR POST_5_OK + ; + ; + IF ERROR_POST_5 +; ERROR CODE '_'XX +.error: + LD C,A +.erb1: + LD IX,.erbr1 + LD B,%1101'1111 + JP OUT_C_BYTE +.erbr1: + LD A,%1101'1111 + OUT (Z84.PIO.Port_A.Data),A + + LD DE,0 +.LOOP_WTT4: + DEC DE + LD A,D + OR E + JR NZ,.LOOP_WTT4 + JR .erb1 + ENDIF + +; ********************************** +; ===== Point 5 ========= +; ********************************** + IFN ERROR_POST_5 +POST_5_ERROR: + LD A,(TABLE_X.vF) ;rdlow-ok + ENDIF + +POST_5_OK: + OUT (Z84.PIO.Port_A.Data),A ; 뢥 १ +; ********************************** +; POST 襭 + ENDMODULE +; ********************************** + +;-----------------------------------------------------------------------; +; ࢠ 樠 ࠭: + XOR A + OUT (RGADR),A + OUT (RGMOD),A + OUT (SLOT0),A + ;free zx pages! + ;LD A,ZX_PAGE.SLOT1 + ;OUT (SLOT1),A + ;LD A,ZX_PAGE.SLOT2 + ;OUT (SLOT2),A + OUT (SLOT2),A ; ZERO_PAGE + DEC A ; SHARED_PAGE + OUT (SLOT1),A + ; + LD A,SYS_PAGE + OUT (SLOT3),A +;-----------------------------------------------------------------------; + MODULE SET_CONFIG_ID +;-------------[Save IX:IY]-------------- +; Don't use IY before this point if it`s normal booting!!! + LD IX,0 + XOR A + ADD IX,SP ; ⠭ 祭 । 稪 (᫨ ᫥ ) +; ⮬ IX:IY Loader.asm +; 騫  + ;[x] 31/12/2023 客 窨 + ; IY - number from loader + LD D,YH + LD E,YL + EX DE,HL + LD DE,SP2000_Loader_Flag + SBC HL,DE + JR NZ,.no_conf_reload + ; IX - number from loader + LD D,XH + LD E,XL + EX DE,HL + LD DE,ACEX.Config_ID.Sp2000 + SBC HL,DE + ; A = 0 + JR NZ,.no_conf_reload + LD A,#80 +.no_conf_reload: + LD R,A ; reg R bit7 - ਧ ᪠ ࠡ⪮ + ; + ; 直 砩 + LD HL,ACEX.Config_ID.Sp2000 + LD (SYS_PAGE.CONFIG_BYTE),HL ; ࠭ 訢 + ; + LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON + LD (SYS_PAGE.CONFIG_DE),A + ; + ENDMODULE +;-----------------------------------------------------------------------; +; Don't use stack (SP) before this point if it`s normal booting!!! + LD SP,ROM_MAP.EXP.STACK ; 砫 ᯮ짮 ⥪!!! + PUSH HL ; ࠭ 訢 + + CALL PORTS_INIT ; 樠஢ + XOR A + OUT (BorderColor),A + CALL EMM.CheckColdInit ; 樠 + POP HL ; 䨣 +; JR Reset_Handler.start +;-----------------------------------------------------------------------; + MODULE Reset_Handler +start: DI +;----[墠 soft reset #EE port]----- +Check_EE_Port: LD A,ACEX.RET_PORT + LD B,0 + ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 + ;LD C,BIOS.SET_PORTS + ;CALL @ToBIOS_3D13 ; ⠭ . #EE + CALL SET_PORTS + ; + ; [x] 20/10/2024 墠稪 0 + LD A,high ZXKeys.Line_4 + IN A,(ZXKeys) + RRCA + JR NC,No_Reset_handlers + ; + LD A,B + AND A + JR Z,Check_Spec_Page + ; + OUT (SLOT3),A ; Set restart page +.After_Hard_Rst: + LD HL,(Spec_Page.RET_addr) ; prog address + LD A,(Spec_Page.page_0) ; PAGE0 + OUT (SLOT0),A + LD A,(Spec_Page.page_1) ; PAGE1 + OUT (SLOT1),A + LD A,(Spec_Page.page_2) ; PAGE2 + OUT (SLOT2),A + XOR A + LD (Spec_Page.flag_R),A + LD A,(Spec_Page.Reload_Version) + CP #FF + JR Z,.JPHL ; olg logic + ; new logic +.ver_2: LD SP,(Spec_Page.Stack_Point) + AND A + LD A,#FF + LD (Spec_Page.Reload_Version),A + LD A,(Spec_Page.page_3) ; PAGE3 + OUT (SLOT3),A + JR Z,.JPHL + PUSH HL + JP EXP_FNS_2_RET +.JPHL: JP (HL) +; +;--[墠 soft/hard reset #41 page]-- +Check_Spec_Page: + LD A,Spec_Page + OUT (SLOT3),A + ; Check for hardreset flag + LD A,(Spec_Page.flag_R) + CP 'R' + JR NZ,No_Reset_handlers + LD A,(Spec_Page.flag_S) + CP 'S' + JR NZ,No_Reset_handlers + LD A,(Spec_Page.flag_T) + CP 'T' + JR NZ,No_Reset_handlers + ; + XOR A + LD (Spec_Page.flag_R),A + JR Check_EE_Port.After_Hard_Rst + ; +;--------------------------------------- +No_Reset_handlers: + XOR A ;!HARDCODE zx page number + OUT (SLOT3),A + ENDMODULE +;-----------------------------------------------------------------------; + + MODULE Prepare_For_Setup +Set_ALL_Mode: LD A,Port_All_Mode.DEFAULT + LD BC,Port_All_Mode + OUT (C),A + +Set_Default_Screen: + CALL FN_SYNC.INT_DEF ; set default int + LD A,128+4 ; !HARDCODE + CALL FN_SYNC ; set default vsync +Setup_to_RAM: LD HL,Setup_Starter.Start + LD DE,COMPILE_ADDR.SETUP_STARTER + LD BC,Setup_Starter.Size + LDIR + ; ⥪ 直 ﬨ, ⮡ + CALL Setup_Starter.Exec ; #C000 + ;JP PrepareToZX + ENDMODULE + +;PrepareToZX: ; Setup HDD drives for ZX Spectrum mode +; DI +; LD D,CMOS_CELL.TRDOSmount +; CALL CMOS_RD +; AND %1010'1010 ; ᪠ 4- HDD +; JR Z,.start_zx +; ; find first good partition +; ; + +; ; ⪠ ६ ZX HDD +; IN A,(SLOT3) +; EX AF,AF +; LD A,SYS_PAGE +; OUT (SLOT3),A +; ; +; XOR A +; LD H,A +; LD L,A +; LD (SYS_PAGE.CURRENT_DIR_SEC_L),HL +; LD (SYS_PAGE.CURRENT_DIR_SEC_H),HL +; DEC A +; LD (SYS_PAGE.CURRENT_HDD),A +; LD (SYS_PAGE.CURRENT_DIR_DRIVE),A +; LD (SYS_PAGE.CURRENT_DIR_DRIVE_COPY),A +; ; +; EX AF,AF +; OUT (SLOT3),A +; EX AF,AF +; ; +; XOR A +; .loop: PUSH AF +; CALL FN_HDD_PART +; POP BC +; JR NC,.start_zx +; LD A,B +; INC A +; CP #10 +; JR C,.loop + ; 室 ० zx spectrum +.start_zx: + ; IF FREE_ZX_PAGES + ;  + LD B,high BIOS.REINIT.HARD_RESET + JP REINIT + ; ELSE ; [x] free zx pages! + ; XOR A + ; OUT (SLOT2),A ; ZERO_PAGE + ; DEC A + ; OUT (SLOT1),A ; SHARED_PAGE + ; ;LD A,5 + ; ;OUT (SLOT1),A + ; ;LD A,2 + ; ;OUT (SLOT2),A + ; ; + ; JP GOTO_SPEC.ZX_MODE + ; ENDIF +;*********************************** +; 樠 ⮢ +PORTS_INIT: + ; TURBO + LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON + OUT (SYS_PORT.ROM),A + ; ; RESET to ISA + ; LD BC,PORT_ISA + ; LD A,#FF + ; OUT (C),A + ; .isa_reset: + ; DEC A ;!FIXIT 横 㫨 0 ᫥ ? + ; JR NZ,.isa_reset + ; OUT (C),A + ; + ; 樠 ᫥⥫쭮 + ; reg 0 + XOR A ;LD A,0 + OUT (Z84.SIO.Ch_A.Ctrl),A + ; reg 4 + LD A,4 + OUT (Z84.SIO.Ch_A.Ctrl),A + ;INC A ;LD A,5 + OUT (Z84.SIO.Ch_A.Ctrl),A + ; reg 3 + LD A,3 + OUT (Z84.SIO.Ch_A.Ctrl),A + LD A,#C1 + OUT (Z84.SIO.Ch_A.Ctrl),A + ; reg 5 + LD A,5 + OUT (Z84.SIO.Ch_A.Ctrl),A + LD A,#62 ;60, 61 + OUT (Z84.SIO.Ch_A.Ctrl),A + ; reg 1 + LD A,1 + OUT (Z84.SIO.Ch_A.Ctrl),A + DEC A ;LD A,0 ; #18 祭 뢠 + OUT (Z84.SIO.Ch_A.Ctrl),A +.mouse: ; 樠 + ; 樠 ⠩ + LD A,#55 + OUT (Z84.CTC.Ch_0),A + LD A,#2D ; ᪮ - ன ⥫ + OUT (Z84.CTC.Ch_0),A + ; reg 0 + XOR A ;LD A,0 + OUT (Z84.SIO.Ch_B.Ctrl),A + ; reg 4 + LD A,4 + OUT (Z84.SIO.Ch_B.Ctrl),A + ;!TODO ᯮ + ;LD A,#45 + ;LD A,#44 + ; + LD A,#40 ; ᪮ - ⥫ = 16 + OUT (Z84.SIO.Ch_B.Ctrl),A + ; reg 3 + LD A,3 + OUT (Z84.SIO.Ch_B.Ctrl),A + LD A,#41 + OUT (Z84.SIO.Ch_B.Ctrl),A + ; reg 5 + LD A,5 + OUT (Z84.SIO.Ch_B.Ctrl),A + LD A,#E0 + OUT (Z84.SIO.Ch_B.Ctrl),A + ; reg 1 + LD A,1 + OUT (Z84.SIO.Ch_B.Ctrl),A + DEC A ;LD A,0 + OUT (Z84.SIO.Ch_B.Ctrl),A + ; 樠 ࠫ쭮 1 (ਭ) + ; !FIXIT ७ + ; POST-Tester- + ; LD A,#CF ; BITS I/O + ; OUT (Z84.PIO.Port_A.Command),A + ; XOR A + ; OUT (Z84.PIO.Port_A.Command),A ; ALL - out + ; OUT (Z84.PIO.Port_A.Data),A ; DATA - all zeros + ; ਭ + LD A,#0F ; Init printer port for Out + OUT (Z84.PIO.Port_A.Command),A + OUT (Z84.PIO.Port_A.Command),A + ; 樠 ࠫ쭮 2 (INT/DMA ISA) + LD BC,Z84.PIO.Port_B.Command ;⮫쪮 १ ॣ BC, 墠 + LD A,#CF ; BITS I/O + OUT (C),A + LD A,#3F + OUT (C),A + LD A,#C0 ; Bit 7 - Select (1), Bit 6 - Auto_Line_Feed (1) + OUT (Z84.PIO.Port_B.Data),A + ; "襭" ISA + ; ISA 1 + LD BC,PORT_ISA + LD A,#FF + OUT (C),A + ; 訬 + XOR A + OUT (SP_SND.CBL.SYS_PORT),A + LD BC,SP_SND.CBL.OUT + LD A,#80 +.CBL_MUTE: OUT (C),A + DJNZ .CBL_MUTE + ; ISA 2 ᫥ 让 + LD BC,PORT_ISA + XOR A + OUT (C),A + ; ஫ ᪮ + ; ஫ ᪠ ( ) + LD A,CNF_PORT.CNF_3+ROM.BIOS + OUT (SYS_PORT.ROM),A + OUT (FDC_93.DrvCTRL),A : ASSERT CNF_PORT.CNF_3+ROM.BIOS = #1C, "ERROR: A != #1C" + PUSH HL ; প + POP HL ; প + LD A,#3C ;!HARDCODE + OUT (FDC_93.DrvCTRL),A + PUSH HL ; প + POP HL ; প + XOR A ;!HARDCODE CMD 181893 + OUT (FDC_93.Command),A + ; 몫 ஫ ᪠ + LD A,CNF_PORT.CNF_0+ROM.BIOS + OUT (SYS_PORT.ROM),A + ; set HDD1/not-HDD2 + LD A,IDE.Chanel.Primary + OUT (IDE.Chanel.Set),A + LD BC,ZX_MEM_PORT.Pentagon + LD A,#10 + OUT (C),A ; BASIC_48 mode + LD B,high ZX_MEM_PORT.Scorpion + LD A,1 + OUT (C),A ; RAM-0 mode !!! + ; ⪠ ஢ SIO + CALL .clean_kbd_buf + JR .clean_mouse_buf +.clean_kbd_buf: ; Clearing the keyboard buffer + IN A,(Z84.SIO.Ch_A.Ctrl) + RRCA + RET NC + IN A,(Z84.SIO.Ch_A.Data) + JR .clean_kbd_buf +.clean_mouse_buf:; Clearing the mouse buffer + IN A,(Z84.SIO.Ch_B.Ctrl) + RRCA + RET NC + IN A,(Z84.SIO.Ch_B.Data) + JR .clean_mouse_buf +;--------------------------------------- + +;-----------------------------------------------------------------------; + + +;-----------------------------------------------------------------------; +; paths from project DIR + + INCLUDE 'BIOS_FUNC.ASM' + INCLUDE 'FUNC_4x.ASM' + INCLUDE 'FUNC_CMOS.ASM' + INCLUDE 'FUNC_SERVICE.asm' + ; INCLUDE 'EXP_SCR.ASZ' LP_SCR_MNU + INCLUDE 'FUNC_SCREEN.ASM' + INCLUDE 'FUNC_RAM_ROM_DRV.ASM' + INCLUDE 'FUNC_SYS.ASM' + INCLUDE 'FUNC_FOR_TRDOS.ASM' + INCLUDE 'FUNC_5x.asm' + INCLUDE 'FUNC_LOW_PRINT.ASM' +;-----------------------------------------------------------------------; + + +;-----------------------------------------------------------------------; +; #################################### +; #::::::::::::::::::::::::::::::::::#\ +; #::::: DCP :::::::#\ +; #::::::::::::::::::::::::::::::::::#\ +; ####################################\ +; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ +DCP_DATA: INCLUDE 'DCP.ASM' +;-----------------------------------------------------------------------; + +;-----------------------------------------------------------------------; +; +; #-2kb-############################## +; #::::::::::::::::::::::::::::::::::#\ +; #:::: IBM-ZG ::::::#\ +; #::::::::::::::::::::::::::::::::::#\ +; ####################################\ +; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ +ZG_ADDRESS: INCLUDE 'FONT.ASM' +ZG_SIZE EQU $-ZG_ADDRESS + ASSERT (ZG_SIZE <= #800), "The font size is too big!" +;-----------------------------------------------------------------------; + + +; +; !FIXIT ᤥ 䨪஢ ⤥ 䠩 IF/ELSE ⮬ 㤠 . +; +;????? ᬮ +;----------------------------------------------------------------------; +; BLOCK #3CC0-$,255 + ; no-magics! +;MAGIC_1: ; MAGIC +; PUSH AF +; LD A,ROM.EXT +; OUT (SYS_PORT.OFF),A +; POP AF +; JP MAGIC_1 +;MAGIC_3: +; PUSH AF +; LD A,ROM.EXT +; OUT (SYS_PORT.OFF),A +; POP AF +; RETN +;MAGIC_2: +;; CALL MG_BEGIN +; JR MAGIC_3 + +;************************* + _mInfoBLOCK #3CE0-$,0 +SW_ROM_1: + LD HL,#259F ;!HARDCODE BASIC_FN.x128.show_main_menu + PUSH HL + LD HL,#5B00 ;!HARDCODE BASIC_FN.x128.ROM_SWAP + LD A,(HL) + CP #F5 ; #F5 - 'PUSH AF'. ஢ #5B00 + JR Z,JP_HL_48 ; BASIC128 + POP HL + JR SW_ROM ; +;************************* + +; BLOCK #3CF0-$,0 +;JMP_48: +; LD HL,00h +; JR JP_HL_48 +; +; NOP +; NOP +; NOP + +;*************************************** + _mInfoBLOCK #3CF8-$,0 + ; no basic-48! +JP_HL_48: ;!FIXIT assert with ROM + PUSH HL +SW_ROM: ;!FIXIT assert with ROM + PUSH AF + LD A,ROM.BIOS ;!FIXIT ࠢ쭮 ⠭ + OUT (SYS_PORT.RAM),A + POP AF + RET +;*************************************** +;----------------------------------------------------------------------; +; + +;!TODO ᯥ㬮᪨ ⨫ +;----------------------------------------------------------------------; + ; _mInfoBLOCK #3CFA-$,#FF + ; LD A,0 ;!HARDCODE + ; OUT (SYS_PORT.OFF),A + ; POP AF +;----------------------------------------------------------------------; +; + + +; +;----------------------------------------------------------------------; + _mInfoBLOCK #3D00-$,#FF +DOS_ON: NOP ;!TODO ࠡ⠥ #7FFD[4] = 1. - 㧭 祭 7FFD ? + RET +;*************************************** + +;*************************************** +; BLOCK #3D02-$,FF +; !TODO 室 17 ⮢ +;*************************************** + +;*************************************** + _mInfoBLOCK #3D13-$,#FF + NOP + JP ToBIOS_18 +;*************************************** + +;*************************************** +; BLOCK #3D17-$,FF +;*************************************** +; + + + + + ; IF FREE_ZX_PAGES +;-----------------------------------------------------------------------; +GOTO_SPEC: PUSH HL + LD HL,RET_TO_BIOS + EX (SP),HL + PUSH HL + PUSH AF + CALL FN_TURBO.SET_FDD_720 + POP AF + LD HL,GOTO_SPECTRUM + EX (SP),HL + JP EXTENSION_FNs + +ZX_MEMORY_MANAGER: + PUSH HL + LD HL,RET_TO_BIOS + EX (SP),HL + PUSH HL + LD HL,MANAGE_ZX_PAGES.FN_ENTRANCE + EX (SP),HL + JP EXTENSION_FNs +;-----------------------------------------------------------------------; + + +;>$< >$< >$< >$< >$< >$< [ ] >$< >$< >$< >$< >$< >$< ; +; +;---------------------[ #41 ]----------------------; +;-------------[RST 08] +RAM_BIOS_PROG: ; for CALL BIOS in #41 page + DISP Spec_Page.to_bios + PUSH AF + LD A,ROM.BIOS + OUT (SYS_PORT.ROM),A + POP AF + RET + ENT +.Length EQU $-RAM_BIOS_PROG +;-------------------[] +; +;-------------[RST 38] +PROG_NO_ROM: + DISP Spec_Page.no_zx_rom + DI + ; + LD A,CNF_PORT.CNF_0 + OUT (SYS_PORT.RAM),A + ; + LD A,SHARED_PAGE + OUT (SLOT3),A + OUT (SLOT2),A + OUT (SLOT1),A + LD SP,#BF00 + ; + LD BC,BIOS.SET_PAL_INIT.CGA + RST ToBIOS + ; + LD E,0 + LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default + RST ToBIOS + ; + LD DE,0 + LD B,E + LD HL,#2050 + LD C,BIOS.LP_CLS_WIN + RST ToBIOS + ; + LD HL,MESSAGE_NR + LD DE,#A000 + PUSH DE + LD BC,MESSAGE_NR.size + LDIR + ; BC=0 + POP HL + SCF + EX AF,AF' + SCF + LD A,COLORS.CGA.FLASH + COLORS.CGA.INK.RED + PUSH BC + POP IY + LD DE,#0F00 + ; B=0 delimiter + LD C,BIOS.LP_PR_LINE_DIR + RST ToBIOS + ; + ; set scr-2 + LD A,1 + OUT (SCREEN_SWITCH),A +.loop: DI + HALT + JR .loop + ;Spectrum ROM configuration error + ; 10 20 30 40 50 60 70 80 + ; "123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|" +MESSAGE_NR: DZ "\t\t\tSpectrum ROM configuration error\r\n\t\t\t Press Ctrl+Alt+Del or RESET." +.size EQU $-MESSAGE_NR + ENT +PROG_NO_ROM.size EQU $-PROG_NO_ROM +;-------------------[] +;-----------------------------------------------------------------------; +;>$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$<; + +;-------------------------------[ #FFE0 ]-------------------------------; +; ணࠬ, ࠧ饭 #40 ࠭, +; RESTARTS, 墠뢠 RESET +RESTARTS_PROG: ; !TODO LDConf 墠  ᫥ hardreset + LD HL,RESTARTS + LD B,16 +.loop: LD (HL),0 + INC HL + DJNZ .loop + NOP + NOP +.Size EQU $-RESTARTS_PROG + ; LD A,1 + ; OUT (SLOT3),A +;-----------------------------------------------------------------------; + +;----------------------------[Setup Starter]----------------------------; + MODULE Setup_Starter +; ணࠬ, ࠧ頥 #C000 ᪠ Setup +Start: DISP COMPILE_ADDR.SETUP_STARTER +Exec: LD A,CNF_PORT.CNF_0 + ROM.EXTENSION + OUT (SYS_PORT.ROM),A + ; + LD HL,ROM_MAP.SETUP + LD DE,MEM_MAP.SETUP + LD BC,BLOCK_Setup.Length + LDIR + ; + LD A,CNF_PORT.CNF_0 + ROM.BIOS + OUT (SYS_PORT.ROM),A +;-----------[Check SPACE] + ; CF । SPACE. CF=0: + ; ⮬ ஢ main.asm [space_check] ᫨ , + ; ந室 ࠬ " " + ; ६ १㧪 [Check Quick Start ROM] + LD BC,Port_All_Mode + IN H,(C) ; LD H,#FF + LD A,Port_All_Mode.DEFAULT - Port_All_Mode.SPECTRUM_MODE_OFF + OUT (C),A ; keyboard int & acc off + LD A,high ZXKeys.Line_7 + IN A,(ZXKeys) + RRA ; CF=0 +;----------------------[] + OUT (C),H + DI + POP HL ; EXP SETUP + JP SETUP_MAIN + ENT +Size EQU $-Setup_Starter.Start + ENDMODULE +;-----------------------------------------------------------------------; +;-----------------------------------------------------------------------; +;>$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$<; +; + + + + + +;*************************************** + _mInfoBLOCK #3E00-$,#FF +DOS_OFF: + PUSH AF + LD A,R + DI + PUSH AF + PUSH BC + ; + LD BC,(#5BFF) ; !HARDCODE + LD A,#C9 ; Opcode RET + LD (#5BFF),A ; !HARDCODE + CALL #5BFF ; !HARDCODE + LD (#5BFF),BC ; !HARDCODE + ; + POP BC + POP AF + JP PO,.no_EI + EI +.no_EI: POP AF + RET +;*************************************** + + +;*************************************** +; BLOCK #3E16-$,FF +; !TODO 室 10 ⮢ +; +;*************************************** + + +//////////////////////////////////////////////////////////////////////// +;------[ ; !TODO - 易 ६묨 LIB_TABLE ; ]------ +; _mInfoBLOCK #3E20-$,#FF +; [x] +FN_LIB: SCF + RET +// +// IN A,(SLOT3) +// LD B,A +// LD A,SYS_PAGE +// OUT (SLOT3),A +// PUSH HL +// LD L,C ; API ⥯ C , . #A0..AF +// LD H,#C1 +// LD A,(HL) +// POP HL +// AND A +// SCF +// JR Z,FN_LIB_RET +// +// OUT (SLOT3),A +// LD (#C0FE),SP +// LD SP,#C0F0 +// PUSH BC +// CALL #C100 ; !HARDCODE +// POP BC +// LD SP,(#C0FE) +// ; LD A,B +// ; OUT (SLOT3),A +// ; RET +// +//FN_LIB_RET: +// LD A,B +// OUT (SLOT3),A +// ;SCF +// RET +//////////////////////////////////////////////////////////////////////// +;----------------------------------------------------------------------; +; + + + +;!TODO ᪮ +;----------------------------------------------------------------------; +; 室 A - byte +; B - speed_parameter +FN_KBD_OUT: + AND A + LD E,A + LD D,#FF + JP PE,kbd_parity ; ⠭ PE/PO ??? + LD D,#FE +kbd_parity: + AND A ; - start-bit - 0 + RL E + RL D ; DE - 11 । + LD C,11 + +kbd_loop: + LD A,5 + OUT (Z84.SIO.Ch_A.Ctrl),A + LD A,#60 + BIT 0,E + JR NZ,no_inv + XOR 2 ; +no_inv: + LD L,A + OUT (Z84.SIO.Ch_A.Ctrl),A ; ⠢ + + LD A,5 + OUT (Z84.SIO.Ch_A.Ctrl),A + LD A,L + OR #80 ; ᨭந + OUT (Z84.SIO.Ch_A.Ctrl),A ; ᨭ + LD A,B ; speed_par +kbd_loop1: + PUSH HL + POP HL + DEC A + JR NZ,kbd_loop1 + LD A,5 + OUT (Z84.SIO.Ch_A.Ctrl),A + LD A,L + OUT (Z84.SIO.Ch_A.Ctrl),A ; ᨭ + + LD A,B ; speed_par +kbd_loop2: + PUSH HL + POP HL + DEC A + JR NZ,kbd_loop2 + RR D + RR E + DEC C + JR NZ,kbd_loop + + LD A,5 + OUT (Z84.SIO.Ch_A.Ctrl),A + LD A,#60 + OUT (Z84.SIO.Ch_A.Ctrl),A ; । + AND A + RET +;----------------------------------------------------------------------; + + + +;----------------------------------------------------------------------; +; DE - +; HL - த⥫쭮 +BEEP: LD A,#10 + CALL .beep_loop + ; + ;XOR A + CALL .beep_loop + ; + DEC HL + LD A,H + OR L + JR NZ,BEEP + RET + ; +.beep_loop: OUT (SP_SND.Beeper),A + LD B,D + LD C,E + ; +.loop: DEC BC + LD A,B + OR C + JR NZ,.loop + RET +;----------------------------------------------------------------------; + + +;#######################################################################; + + + +;---------[Return to EXTENSION]--------- + _mInfoBLOCK #3FD0-$,#FF ; ToBIOS_FromEXT +; #3FD0 +; 맮 㭪権 ࠭ 0 (Extension) +RET_TO_EXTENSION: + PUSH AF + LD A,ROM.EXTENSION + OUT (SYS_PORT.ROM),A + POP AF + RST ToBIOS_18 + JP RET_TO_EXTENSION + +; !TODO Free 6 bytes +;--------------------------------------- +; + + +;---------------[ Free ]---------------- +; + _mInfoBLOCK #3FE0-$,#FF +; !TODO Free 8 bytes and entry point +;SOUND_TEST: +; LD A,ROM.EXPANSION +; OUT (SYS_PORT.ON),A +; JP SND_TEST_RET +;--------------------------------------- +; + +; [x] new portal +;------------[Portal to EXT]------------ +; 窠 室/室 㭪権 ROM.EXTENSION + _mInfoBLOCK #3FE8-$,#FF +EXTENSION_FNs: ;EXP_HDD: + PUSH AF + LD A,ROM.EXTENSION + OUT (SYS_PORT.ROM),A + POP AF + RET +;--------------------------------------- +; + + +; +;---------------[ Free ]---------------- + _mInfoBLOCK #3FF0-$,#FF +; !TODO Free 8 bytes and entry point +;--------------------------------------- +; + + +; +;----[ From TR-DOS to API #80..#FF ]----- + _mInfoBLOCK #3FF8-$,#FF +; 窠 室/室 TR-DOS +EXP_FNS_RET: + PUSH AF + LD A,ROM.BIOS + OUT (SYS_PORT.RAM),A ; 窠 室/室 / TR-DOS 맮 㭪権 BIOS #80..#FF + JP EXP_FNS +;--------------------------------------- +; + +; + _mInfoBLOCK #4000-$,#FF ;======================================================================= \ No newline at end of file diff --git a/src/bios/exp/EXTENDED/FDD_DRIVER.asm b/bios/exp/EXTENDED/FDD_DRIVER.asm similarity index 95% rename from src/bios/exp/EXTENDED/FDD_DRIVER.asm rename to bios/exp/EXTENDED/FDD_DRIVER.asm index f4a3cc1..9387340 100644 --- a/src/bios/exp/EXTENDED/FDD_DRIVER.asm +++ b/bios/exp/EXTENDED/FDD_DRIVER.asm @@ -1,855 +1,855 @@ -;[]===========================================================[] - - -; FDD.CHANGE: -; LD A,#01 -; AND A -; RET -FDD_COUNTERS: -.RW_Retries EQU 5 -.INTRQorDRQ EQU 4 - -;[]===========================================================[] -;Function: Get Current Media Parameters -; A - Disk -;Return: -; H - Heads -; L - Sectors -; DE - Cylinders -; IX - Capacity sector in bytes -; B - Flags -; D7 - "1": High Density, "0": Double Density -; D1-2 - FDD type %01 - 3.5"; %10 - 5.25"; -; D0 - FDD drv number -; A - D0 - "1" - Removable media -;[]===========================================================[] -;[x] ᥣ 諠 ࠡ 묨 ᪠ -;[x] 㫥 ஦? ਤ㬠 ਥ 䫮३ -FDD_5x_GET_PAR: CALL SELECT_FDD - RET C - ; - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD L,(IY + FDD_TABLE_s.SECTORS) - LD H,(IY + FDD_TABLE_s.HEADS) - LD E,(IY + FDD_TABLE_s.BytesPerSector) - LD D,(IY + FDD_TABLE_s.BytesPerSector + 1) - PUSH DE - POP IX - LD E,(IY + FDD_TABLE_s.CYLINDL) - LD D,(IY + FDD_TABLE_s.CYLINDH) - LD B,(IY + FDD_TABLE_s.DISK) - LD A,(IY + FDD_TABLE_s.ID) - SLA A - OR B - LD B,A - EX AF,AF' - OUT (SLOT3),A - XOR A - INC A ; removable media. CF=0, LD A,1 - RET - -;[]===========================================================[] -;Function: Set Current Media Parameters -; A - Disk -; H - Heads -; L - Sectors -; DE - Cylinders -; IX - Capacity sector in bytes -; B - Flags -; D7 - "1" - High Density, "0" - Double Density -;Return: None -;[]===========================================================[] -FDD_5x_SET_PAR: CALL SELECT_FDD - RET C - ; - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD (IY + FDD_TABLE_s.SECTORS),L - LD (IY + FDD_TABLE_s.HEADS),H - LD (IY + FDD_TABLE_s.CYLINDL),E - LD (IY + FDD_TABLE_s.CYLINDH),D - PUSH IX - POP DE - LD (IY + FDD_TABLE_s.BytesPerSector),E - LD (IY + FDD_TABLE_s.BytesPerSector + 1),D - LD A,B - AND %1000'0000 - RES 7,(IY + FDD_TABLE_s.DISK) - OR (IY + FDD_TABLE_s.DISK) - LD (IY + FDD_TABLE_s.DISK),A - EX AF,AF' - OUT (SLOT3),A - AND A - RET - -;[]===========================================================[] -;Function: Detect Disk Density -; A - Disk -;Return: -; A - Flag D7 - "1" - High Density, "0" - Double Density -; B - bit0=1 removable -;[]===========================================================[] -FDD_5x_DETECT: CALL SAVE_INTERRUPTS.switch_off - CALL SET_DOS_ON - CALL SELECT_FDD - CALL NC,DISK_ID - PUSH AF - CALL SET_DOS_OFF - POP AF - LD B,%0000'0001 ;bit0=1 removable, bit1=1 drive changed, bit7..2 reserved ; [ ] - JP SAVE_INTERRUPTS.restore - ;RET - -;[]===========================================================[] -;Function: Reset Disk -; A - Disk -;Return: None -;[]===========================================================[] -FDD_5x_RESET: CALL SAVE_INTERRUPTS.switch_off - CALL SET_DOS_ON - CALL SELECT_FDD - CALL NC,DISK_ID - JR C,.int - ; [ ] ࠧ ᥪ - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - XOR A - CP B - JR NZ,.SetSectorSize - ; - LD A,#80 -.SetSectorSize: LD (IY + FDD_TABLE_s.BytesPerSector),A - LD (IY + FDD_TABLE_s.BytesPerSector + 1),B - EX AF,AF' - OUT (SLOT3),A - ; -.int: CALL SAVE_INTERRUPTS.restore - JR C,.MOTOR_OFF - ; - CALL RESWG - XOR A ;!HARDCODE CMD 181893 - OUT (FDC_93.Track),A - IN A,(FDC_93.Command) - ;LD C,A - CALL SET_DOS_OFF - ;LD A,C - AND A - JP SAVE_INTERRUPTS.restore - ;RET -.MOTOR_OFF: ;PUSH AF - LD A,#D0 ;!HARDCODE CMD 181893 - OUT (FDC_93.Command),A ;STOP OPERATION - LD A,#00 - OUT (FDC_93.DrvCTRL),A - LD A,#3C - OUT (FDC_93.DrvCTRL),A - JP SET_DOS_OFF - ; CF=1 - ;LD A,BIOS.Error.NotReady - ;POP AF - ;JP SAVE_INTERRUPTS.restore - ;RET -;[]===========================================================[] -;Function: Read Sectors -; A - Disk -; HL:IX - Sector -; DE - Address -; B - Sector counter -;Return: -; HL:IX - Sector + Sector counter -; DE - Address + (Sector counter * Size sector) -;[]===========================================================[] -FDD_5x_READ: EX AF,AF' - IN A,(SLOT3) - EX AF,AF' -;[]===========================================================[] -;Function: Long Read Sectors -; A - Disk -; HL:IX - Sector -; DE - Address -; B - Sector counter -; A'- Memory Page Number -;Return: -; HL:IX - Sector + Sector counter -; DE - Address + (Sector counter * Size sector) -;[]===========================================================[] -FDD_5x_LONG_READ: - EXX - LD B,#80 ; COMMAND READ ;!HARDCODE CMD 181893 - EXX - ; -.RW_Shared: CALL SAVE_INTERRUPTS.switch_off - CALL .Start - JP SAVE_INTERRUPTS.restore - ; -.Start: ;PUSH IY - EX AF,AF' - LD C,A ; Memory Page Number - EX AF,AF' - CALL SET_DOS_ON - CALL SELECT_FDD - CALL C,SET_DOS_OFF - RET C - ; - PUSH BC - PUSH HL - PUSH IX - CALL SET_SPEED - PUSH BC - CALL NTRACK - POP BC - EX DE,HL - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD XH,C ; Memory Page Number - LD C,(IY + FDD_TABLE_s.SECTORS) - EX AF,AF' - OUT (SLOT3),A - ; -.DSK_LP: LD A,D - EXX - PUSH BC - CALL SEEK - ;!FIXIT ஫ 訡 - POP BC - EXX - PUSH DE - PUSH BC - PUSH HL - CALL FDD_RW_SECTOR - JR C,.ERRDOS - ; ࠧ ᥪ - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD E,(IY + FDD_TABLE_s.BytesPerSector) - LD D,(IY + FDD_TABLE_s.BytesPerSector + 1) - EX AF,AF' - OUT (SLOT3),A - POP HL - POP BC - ADD HL,DE - CALL C,CHANGE_MEM_BLK - ;.THISRD - POP DE - LD A,C - INC E - CP E - JR NZ,.NINC_T - ; - LD E,0 - INC D -.NINC_T: DJNZ .DSK_LP - ; - ;.RETDOS: - CALL SET_DOS_OFF - LD A,XH ; Memory Page Number - EX AF,AF' - EX DE,HL - POP IX - POP HL - POP BC - ;POP IY - LD A,B - LD C,B - INC B - DEC B - LD B,0 - JR NZ,.ADD8BIT - ; - INC B -.ADD8BIT: ADD IX,BC - ;!TEST - ;LD BC,0 - ;ADC HL,BC - ;LD B,A - ;XOR A - ;RET - ; - LD B,A - RET NC - INC HL - XOR A - RET - ; -.ERRDOS: POP HL - POP BC - POP DE - CALL SET_DOS_OFF - EX DE,HL - EX AF,AF' - EXX - LD C,XH ; Memory Page Number - EXX - LD A,B - POP IX - POP HL - POP BC - ;POP IY - PUSH AF - LD C,A - LD A,B - SUB C - LD C,A - LD B,0 - ADD IX,BC - LD C,B - ADC HL,BC - POP BC - EXX - LD A,C - EXX - EX AF,AF' - SCF - RET - -;[]===========================================================[] -;Function: Write Sectors -; A - Disk -; HL:IX - Sector -; DE - Address -; B - Sector counter -;Return: -; HL:IX - Sector + Sector counter -; DE - Address + (Sector counter * Size sector) -;[]===========================================================[] -FDD_5x_WRITE: EX AF,AF' - IN A,(SLOT3) - EX AF,AF' -;[]===========================================================[] -;Function: Long Write Sectors -; A - Disk -; HL:IX - Sector -; DE - Address -; B - Sector counter -; A'- Memory Page Number -;Return: -; HL:IX - Sector + Sector counter -; DE - Address + (Sector counter * Size sector) -;?? B - Sector counter -;[]===========================================================[] -FDD_5x_LONG_WRITE: - EXX - LD B,#A0 ;COMMAND WRITE ;!HARDCODE CMD 181893 - EXX - JP FDD_5x_LONG_READ.RW_Shared -; -;------------------------------- -;WRITE SECTOR -;------------------------------- -FDD_RW_SECTOR: LD D,FDD_COUNTERS.RW_Retries -.RETRY: PUSH HL - PUSH DE - IN A,(SLOT3) - PUSH AF ; ࠭塞 ⥪ ࠭ - LD A,E - INC A - OUT (FDC_93.Sector),A - LD A,SYS_PAGE - OUT (SLOT3),A - EXX - ; [ ] 15/04/25 ࠧ ᥪ , 祬 ⠭ SYS_PAGE.FDD_TABLE.BytesPerSector 맮 訡 - LD E,(IY + FDD_TABLE_s.BytesPerSector) - LD D,(IY + FDD_TABLE_s.BytesPerSector + 1) - INC DE - ; - BIT 5,B ; Set Z flag for read or NZ for write - EX AF,AF - LD A,B ; COMMAND read or write - EXX - LD C,A - LD A,XH - OUT (SLOT3),A - LD A,C ; COMMAND read or write - ; - OUT (FDC_93.Command),A - LD BC,FDD_COUNTERS.INTRQorDRQ*256 + FDC_93.Data ; প ।饩 ᫥饩 -.wait_loop: IN A,(FDC_93.DrvCTRL) ; 11 ; 11 ;WAIT INTRQ or DRQ - AND %0100'0000 ; 7 ; 7 ;b7: INTRQ (믮 = 0), b6: DRQ ( = 1). - JR Z,.wait_loop_next ; 7 ; 12 + 34 (.wait_loop_next) - ; ᨬ 64 ⠪ - EX AF,AF' - JR NZ,.write_loop ; 11 ; १ BIT 5,B' - ; - ;EX AF,AF' - ;READ BYTE. .wait_loop .read_loop (INI) 64+11=75 ⠪⮢ -.read_loop: EXX - DEC DE - LD A,D - OR E - EXX - JR Z,.SectorSizeError - ; .wait_loop  26+11+7+7+11+29=91, 뫮 75+29=104 ⠪⮢ - ; ਬ୮ 9,1 ᫮ । 10 - ; ਬ୮ 26 3,5 - ; 16 1.44 32 720 - INI - ; -.wait_data_r: IN A,(FDC_93.DrvCTRL) - AND %1100'0000 ;b7: INTRQ (믮 = 0). b6: DRQ ( = 1). - JR Z,.wait_data_r - JP P,.read_loop ; JUMP if "믮 = 0" - ; - ; -.after_rw: EX AF,AF' - POP AF ; 頥 ⥪ ࠭ - OUT (SLOT3),A - EX AF,AF' - ; - POP DE - POP HL - LD A,BIOS.Error.NotReady - JR C,.CMD_ERROR - ; - IN A,(FDC_93.Command) - LD C,A - AND #7F - RET Z ; NORMAL EXIT - ; - BIT 6,C - LD A,BIOS.Error.WriteProtect - JR NZ,.error_exit - ; - BIT 2,C - JR NZ,.data_lost ; Error Read - ; - LD A,BIOS.Error.Seek -.CMD_ERROR: DEC D ; FDD_COUNTERS.RW_Retries - JR Z,.error_exit - ; - PUSH DE - PUSH HL - CALL RESWG ; RESET_WG - ;!FIXIT ஫ 訡 - LD A,XL - CALL SEEK ; !!!!! ᬮ - ;!FIXIT ஫ 訡 - POP HL - POP DE - JR .RETRY - ; -.wait_loop_next: - INC DE - LD A,E - OR D - JR NZ,.wait_loop ; 26 - ; - DJNZ .wait_loop - SCF - JR .after_rw ; error - ; - ; -.data_lost: DEC D ; - JR NZ,.RETRY - ; - EXX - BIT 5,B - EXX - LD A,BIOS.Error.Read ; Error Read - JR Z,.error_exit - ; - LD A,BIOS.Error.Write ; Error Write -.error_exit: EX AF,AF' - LD A,#D0 ;!HARDCODE CMD 181893 - OUT (FDC_93.Command),A ;STOP OPERATION - EX AF,AF' - BIT 0,C - SCF - RET Z - LD A,BIOS.Error.SectorNotFound - RET - ; - ; - ;WRITE BYTE -;.go_write: EX AF,AF' -.write_loop: EXX - DEC DE - LD A,D - OR E - EXX - JR Z,.SectorSizeError - ; - OUTI - ; -.wait_data_w: IN A,(FDC_93.DrvCTRL) - AND %1100'0000 ;b6: DRQ ( = 1). b7: INTRQ (믮 = 0). - JR Z,.wait_data_w - JP P,.write_loop - JP .after_rw - ; -.SectorSizeError: - ; A = 0 - LD C,A - POP AF ; 頥 ⥪ ࠭ - OUT (SLOT3),A - POP DE - POP HL - LD A,BIOS.Error.UnknownDevice - JR .error_exit - - - -; -; 㡠 ⮢ -SET_DOS_ON: EX AF,AF' - LD A,CNF_PORT.CNF_3 + ROM.BIOS - OUT (SYS_PORT.ROM),A ; - OPEN - EX AF,AF' - RET -; 㡠 㫥 ⮢ -SET_DOS_OFF: EX AF,AF' - LD A,CNF_PORT.CNF_0 + ROM.BIOS - OUT (SYS_PORT.ROM),A ; - CLOSE - EX AF,AF' - RET - -//////////////////////////////////////////////////////////////////////// -; . FDD AUTO ஬ FDD_TABLE -; SET_FDD: PUSH BC -; AND 1 -; LD B,A -; OR #3C -; OUT (FDC_93.DrvCTRL),A -; IN A,(SLOT3) -; EX AF,AF' -; LD A,SYS_PAGE -; OUT (SLOT3),A -; LD A,(SYS_PAGE.FDD_TABLE.DISK) -; AND #FE -; OR B -; LD (SYS_PAGE.FDD_TABLE.DISK),A -; EX AF,AF' -; OUT (SLOT3),A -; POP BC -; RET -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -SELECT_FDD: PUSH BC - OR A - LD IY,SYS_PAGE.FDD_TABLE.A - JR Z,.IY_Selected - ; - LD IY,SYS_PAGE.FDD_TABLE.B -.IY_Selected: ;LD B,A - OR #3C - OUT (FDC_93.DrvCTRL),A - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD B,(IY + FDD_TABLE_s.ID) - EX AF,AF' - OUT (SLOT3),A - INC B - POP BC - RET NZ - ; no drive - LD A,BIOS.Error.BadNumber - SCF - RET -//////////////////////////////////////////////////////////////////////// - - -;----------------------------------------------------------------------; -; CHANGE_SPEED: IN A,(SLOT3) -; EX AF,AF' -; LD A,SYS_PAGE -; OUT (SLOT3),A -; LD A,(SYS_PAGE.FDD_TABLE.DISK) -; XOR #80 -; LD (SYS_PAGE.FDD_TABLE.DISK),A -; RLA -; EX AF,AF' -; OUT (SLOT3),A -; EX AF,AF' -; JR NC,FDD.SET720 -; FDD.SET1440: LD A,FDD_Density.SET_1440 -; OUT (FDD_Density),A -; RET -; ; -; ; -; SET_SPEED: IN A,(SLOT3) -; EX AF,AF' -; LD A,SYS_PAGE -; OUT (SLOT3),A -; LD A,(SYS_PAGE.FDD_TABLE.DISK) -; ;AND #80 -; RLA -; EX AF,AF' -; OUT (SLOT3),A -; EX AF,AF' -; JR C,FDD.SET1440 -; FDD.SET720: LD A,FDD_Density.SET_720 -; OUT (FDD_Density),A -; RET -; -; 室: IY - ⥫ ⠡ ࠭ FDD -CHANGE_SPEED: IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,(IY + FDD_TABLE_s.DISK) - XOR #80 - LD (IY + FDD_TABLE_s.DISK),A - JR SET_SPEED.set - ; -SET_SPEED: IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,(IY + FDD_TABLE_s.DISK) -.set: AND #80 - RRA - RRA - OR 1 - OUT (FDD_Density),A - EX AF,AF' - OUT (SLOT3),A - RET -;----------------------------------------------------------------------; - - - -//////////////////////////////////////////////////////////////////////// -; 室: BC - ७ 譨 稪 -; IY - ⥫ ⠡ ࠭ FDD -WAIT_FDD_FOR_SEARCH_TRACK: - LD A,#C0 ;!HARDCODE CMD 181893 - OUT (FDC_93.Command),A - PUSH BC - CALL .LOOP - POP BC - RET NC - ; - CALL CHANGE_SPEED - DEC C - JR NZ,WAIT_FDD_FOR_SEARCH_TRACK - ; - SCF - RET - ; -.LOOP: LD HL,#F000 -.loop_reg_HL: IN A,(FDC_93.DrvCTRL) - AND #C0 - RET NZ - ; -.ID_LP4: DEC HL - LD A,H - OR L - JR NZ,.loop_reg_HL - ; - DJNZ .LOOP - SCF - RET -//////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////// -; 뢠 ⪫祭 -; 室: IY - ⥫ ⠡ ࠭ FDD -; 室: A - bit7 - 720/1440, B - sector size high byte -DISK_ID: EXX - CALL SET_SPEED - IN A,(FDC_93.Track) - OUT (FDC_93.Data),A - LD A,#18 ;!TODO 믨 ;SEARCH ;!HARDCODE CMD 181893 - CALL EXECOM - ; ᮪ 䫮३ - LD BC,#0104 ; 稪 - CALL WAIT_FDD_FOR_SEARCH_TRACK - JR NC,.Read_Index - ; ᮪ ମ 䫮३ - LD BC,#0804 ; 稪 - CALL WAIT_FDD_FOR_SEARCH_TRACK - JR NC,.Read_Index - EXX - ;SCF - LD A,BIOS.Error.NotReady - RET - ; -.Read_Index: ; - ; FDC_93.Data: - ; 樫 BYTE - ; BYTE - ; ᥪ BYTE - ; ᥪ BYTE - ; ஫쭠 㬬 WORD - LD H,4 ; !HARDCODE 稪 ࠧ ᥪ -.ID_LP2: IN A,(FDC_93.Data) - DEC H - JR NZ,.ID_LP3 - LD L,A ; [ ] ࠧ ᥪ (訩 ) -.ID_LP3: IN A,(FDC_93.DrvCTRL) - AND %1100'0000 - JR Z,.ID_LP3 - JP P,.ID_LP2 - LD A,L - EXX - LD B,A ; [ ] ࠧ ᥪ (訩 ) - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,(IY + FDD_TABLE_s.DISK) - EX AF,AF' - OUT (SLOT3),A - EX AF,AF' - AND #80 - RET -//////////////////////////////////////////////////////////////////////// - -; in: A - track -SEEK: LD XL,A - LD C,A - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,(IY + FDD_TABLE_s.DISK) - AND 1 - EX AF,AF' - OUT (SLOT3),A - EX AF,AF' - SRL C - JR C,.GT001 - ; - OR #3C -.GT001: OR #2C - OUT (FDC_93.DrvCTRL),A - IN A,(FDC_93.Track) - CP C - CALL NZ,P50ms - LD A,C - OUT (FDC_93.Data),A - IN A,(FDC_93.Track) - CP C - EX AF,AF' ;R.TRACK==PHISICAL TRACK - LD A,#18 ;!HARDCODE CMD 181893 - CALL EXECOM - RET C - EX AF,AF' - LD A,C - OUT (FDC_93.Track),A - RET Z -.STOL: CALL P50ms - RET - ; -P50ms: PUSH BC - LD B,12 -.P1ms: LD C,255 -.PMS: DEC C - JR NZ,.PMS - DJNZ .P1ms - POP BC - RET -; -; -;P750ms LD B,3 -;PMS2 LD A,255 -; CALL P1ms -; DJNZ PMS2 -; RET - -//////////////////////////////////////////////////////////////////////// -;RESWG: LD A,8 -; ; -;EXECOM: OUT (FDC_93.Command),A -; LD HL,#0000 ; 稪 -;.WREST: DEC HL -; LD A,H -; OR L -; SCF -; RET Z -; ; -; IN A,(FDC_93.DrvCTRL) -; AND #80 -; JR Z,.WREST -; RET -; -RESWG: LD A,8 ;!HARDCODE CMD 181893 -EXECOM: OUT (FDC_93.Command),A - LD HL,#0000 ; 稪 - PUSH BC - LD BC,#0380 ; 稪 ᪠ -.WREST: DEC HL - LD A,H - OR L - JR NZ,.get_state - DJNZ .WREST - POP BC - SCF - RET - ; -.get_state: IN A,(FDC_93.DrvCTRL) - AND C - JR Z,.WREST - POP BC - RET -//////////////////////////////////////////////////////////////////////// - -; -;------------------------------- -; HL:IX - SECTOR -; H - TRACK, L - SECTOR -;HL:IX/SECTOR_PER_TRACK -NTRACK: PUSH HL - EX (SP),IX - POP HL - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD C,(IY + FDD_TABLE_s.SECTORS) - LD B,0 - EX AF,AF' - OUT (SLOT3),A - XOR A -.NTRK: INC A - SBC HL,BC - JR NC,.NTRK - ; - EX AF,AF' - LD A,XL - OR XH - JR Z,.NTRK3 - ; - EX AF,AF' - DEC IX - JR .NTRK - ; -.NTRK3: EX AF,AF' - ADD HL,BC - DEC A - LD H,A - RET -; -SAVE_INTERRUPTS: -.switch_off: PUSH AF - LD A,R - DI - LD A,#80 - JP PE,.set_R - XOR A -.set_R: LD R,A - POP AF - RET - ; ; -.restore: PUSH AF - LD A,R - DI - RLA - JR NC,.set_di - EI -.set_di: POP AF ; PE - RET +;[]===========================================================[] + + +; FDD.CHANGE: +; LD A,#01 +; AND A +; RET +FDD_COUNTERS: +.RW_Retries EQU 5 +.INTRQorDRQ EQU 4 + +;[]===========================================================[] +;Function: Get Current Media Parameters +; A - Disk +;Return: +; H - Heads +; L - Sectors +; DE - Cylinders +; IX - Capacity sector in bytes +; B - Flags +; D7 - "1": High Density, "0": Double Density +; D1-2 - FDD type %01 - 3.5"; %10 - 5.25"; +; D0 - FDD drv number +; A - D0 - "1" - Removable media +;[]===========================================================[] +;[x] ᥣ 諠 ࠡ 묨 ᪠ +;[x] 㫥 ஦? ਤ㬠 ਥ 䫮३ +FDD_5x_GET_PAR: CALL SELECT_FDD + RET C + ; + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD L,(IY + FDD_TABLE_s.SECTORS) + LD H,(IY + FDD_TABLE_s.HEADS) + LD E,(IY + FDD_TABLE_s.BytesPerSector) + LD D,(IY + FDD_TABLE_s.BytesPerSector + 1) + PUSH DE + POP IX + LD E,(IY + FDD_TABLE_s.CYLINDL) + LD D,(IY + FDD_TABLE_s.CYLINDH) + LD B,(IY + FDD_TABLE_s.DISK) + LD A,(IY + FDD_TABLE_s.ID) + SLA A + OR B + LD B,A + EX AF,AF' + OUT (SLOT3),A + XOR A + INC A ; removable media. CF=0, LD A,1 + RET + +;[]===========================================================[] +;Function: Set Current Media Parameters +; A - Disk +; H - Heads +; L - Sectors +; DE - Cylinders +; IX - Capacity sector in bytes +; B - Flags +; D7 - "1" - High Density, "0" - Double Density +;Return: None +;[]===========================================================[] +FDD_5x_SET_PAR: CALL SELECT_FDD + RET C + ; + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD (IY + FDD_TABLE_s.SECTORS),L + LD (IY + FDD_TABLE_s.HEADS),H + LD (IY + FDD_TABLE_s.CYLINDL),E + LD (IY + FDD_TABLE_s.CYLINDH),D + PUSH IX + POP DE + LD (IY + FDD_TABLE_s.BytesPerSector),E + LD (IY + FDD_TABLE_s.BytesPerSector + 1),D + LD A,B + AND %1000'0000 + RES 7,(IY + FDD_TABLE_s.DISK) + OR (IY + FDD_TABLE_s.DISK) + LD (IY + FDD_TABLE_s.DISK),A + EX AF,AF' + OUT (SLOT3),A + AND A + RET + +;[]===========================================================[] +;Function: Detect Disk Density +; A - Disk +;Return: +; A - Flag D7 - "1" - High Density, "0" - Double Density +; B - bit0=1 removable +;[]===========================================================[] +FDD_5x_DETECT: CALL SAVE_INTERRUPTS.switch_off + CALL SET_DOS_ON + CALL SELECT_FDD + CALL NC,DISK_ID + PUSH AF + CALL SET_DOS_OFF + POP AF + LD B,%0000'0001 ;bit0=1 removable, bit1=1 drive changed, bit7..2 reserved ; [ ] + JP SAVE_INTERRUPTS.restore + ;RET + +;[]===========================================================[] +;Function: Reset Disk +; A - Disk +;Return: None +;[]===========================================================[] +FDD_5x_RESET: CALL SAVE_INTERRUPTS.switch_off + CALL SET_DOS_ON + CALL SELECT_FDD + CALL NC,DISK_ID + JR C,.int + ; [ ] ࠧ ᥪ + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + XOR A + CP B + JR NZ,.SetSectorSize + ; + LD A,#80 +.SetSectorSize: LD (IY + FDD_TABLE_s.BytesPerSector),A + LD (IY + FDD_TABLE_s.BytesPerSector + 1),B + EX AF,AF' + OUT (SLOT3),A + ; +.int: CALL SAVE_INTERRUPTS.restore + JR C,.MOTOR_OFF + ; + CALL RESWG + XOR A ;!HARDCODE CMD 181893 + OUT (FDC_93.Track),A + IN A,(FDC_93.Command) + ;LD C,A + CALL SET_DOS_OFF + ;LD A,C + AND A + JP SAVE_INTERRUPTS.restore + ;RET +.MOTOR_OFF: ;PUSH AF + LD A,#D0 ;!HARDCODE CMD 181893 + OUT (FDC_93.Command),A ;STOP OPERATION + LD A,#00 + OUT (FDC_93.DrvCTRL),A + LD A,#3C + OUT (FDC_93.DrvCTRL),A + JP SET_DOS_OFF + ; CF=1 + ;LD A,BIOS.Error.NotReady + ;POP AF + ;JP SAVE_INTERRUPTS.restore + ;RET +;[]===========================================================[] +;Function: Read Sectors +; A - Disk +; HL:IX - Sector +; DE - Address +; B - Sector counter +;Return: +; HL:IX - Sector + Sector counter +; DE - Address + (Sector counter * Size sector) +;[]===========================================================[] +FDD_5x_READ: EX AF,AF' + IN A,(SLOT3) + EX AF,AF' +;[]===========================================================[] +;Function: Long Read Sectors +; A - Disk +; HL:IX - Sector +; DE - Address +; B - Sector counter +; A'- Memory Page Number +;Return: +; HL:IX - Sector + Sector counter +; DE - Address + (Sector counter * Size sector) +;[]===========================================================[] +FDD_5x_LONG_READ: + EXX + LD B,#80 ; COMMAND READ ;!HARDCODE CMD 181893 + EXX + ; +.RW_Shared: CALL SAVE_INTERRUPTS.switch_off + CALL .Start + JP SAVE_INTERRUPTS.restore + ; +.Start: ;PUSH IY + EX AF,AF' + LD C,A ; Memory Page Number + EX AF,AF' + CALL SET_DOS_ON + CALL SELECT_FDD + CALL C,SET_DOS_OFF + RET C + ; + PUSH BC + PUSH HL + PUSH IX + CALL SET_SPEED + PUSH BC + CALL NTRACK + POP BC + EX DE,HL + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD XH,C ; Memory Page Number + LD C,(IY + FDD_TABLE_s.SECTORS) + EX AF,AF' + OUT (SLOT3),A + ; +.DSK_LP: LD A,D + EXX + PUSH BC + CALL SEEK + ;!FIXIT ஫ 訡 + POP BC + EXX + PUSH DE + PUSH BC + PUSH HL + CALL FDD_RW_SECTOR + JR C,.ERRDOS + ; ࠧ ᥪ + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD E,(IY + FDD_TABLE_s.BytesPerSector) + LD D,(IY + FDD_TABLE_s.BytesPerSector + 1) + EX AF,AF' + OUT (SLOT3),A + POP HL + POP BC + ADD HL,DE + CALL C,CHANGE_MEM_BLK + ;.THISRD + POP DE + LD A,C + INC E + CP E + JR NZ,.NINC_T + ; + LD E,0 + INC D +.NINC_T: DJNZ .DSK_LP + ; + ;.RETDOS: + CALL SET_DOS_OFF + LD A,XH ; Memory Page Number + EX AF,AF' + EX DE,HL + POP IX + POP HL + POP BC + ;POP IY + LD A,B + LD C,B + INC B + DEC B + LD B,0 + JR NZ,.ADD8BIT + ; + INC B +.ADD8BIT: ADD IX,BC + ;!TEST + ;LD BC,0 + ;ADC HL,BC + ;LD B,A + ;XOR A + ;RET + ; + LD B,A + RET NC + INC HL + XOR A + RET + ; +.ERRDOS: POP HL + POP BC + POP DE + CALL SET_DOS_OFF + EX DE,HL + EX AF,AF' + EXX + LD C,XH ; Memory Page Number + EXX + LD A,B + POP IX + POP HL + POP BC + ;POP IY + PUSH AF + LD C,A + LD A,B + SUB C + LD C,A + LD B,0 + ADD IX,BC + LD C,B + ADC HL,BC + POP BC + EXX + LD A,C + EXX + EX AF,AF' + SCF + RET + +;[]===========================================================[] +;Function: Write Sectors +; A - Disk +; HL:IX - Sector +; DE - Address +; B - Sector counter +;Return: +; HL:IX - Sector + Sector counter +; DE - Address + (Sector counter * Size sector) +;[]===========================================================[] +FDD_5x_WRITE: EX AF,AF' + IN A,(SLOT3) + EX AF,AF' +;[]===========================================================[] +;Function: Long Write Sectors +; A - Disk +; HL:IX - Sector +; DE - Address +; B - Sector counter +; A'- Memory Page Number +;Return: +; HL:IX - Sector + Sector counter +; DE - Address + (Sector counter * Size sector) +;?? B - Sector counter +;[]===========================================================[] +FDD_5x_LONG_WRITE: + EXX + LD B,#A0 ;COMMAND WRITE ;!HARDCODE CMD 181893 + EXX + JP FDD_5x_LONG_READ.RW_Shared +; +;------------------------------- +;WRITE SECTOR +;------------------------------- +FDD_RW_SECTOR: LD D,FDD_COUNTERS.RW_Retries +.RETRY: PUSH HL + PUSH DE + IN A,(SLOT3) + PUSH AF ; ࠭塞 ⥪ ࠭ + LD A,E + INC A + OUT (FDC_93.Sector),A + LD A,SYS_PAGE + OUT (SLOT3),A + EXX + ; [ ] 15/04/25 ࠧ ᥪ , 祬 ⠭ SYS_PAGE.FDD_TABLE.BytesPerSector 맮 訡 + LD E,(IY + FDD_TABLE_s.BytesPerSector) + LD D,(IY + FDD_TABLE_s.BytesPerSector + 1) + INC DE + ; + BIT 5,B ; Set Z flag for read or NZ for write + EX AF,AF + LD A,B ; COMMAND read or write + EXX + LD C,A + LD A,XH + OUT (SLOT3),A + LD A,C ; COMMAND read or write + ; + OUT (FDC_93.Command),A + LD BC,FDD_COUNTERS.INTRQorDRQ*256 + FDC_93.Data ; প ।饩 ᫥饩 +.wait_loop: IN A,(FDC_93.DrvCTRL) ; 11 ; 11 ;WAIT INTRQ or DRQ + AND %0100'0000 ; 7 ; 7 ;b7: INTRQ (믮 = 0), b6: DRQ ( = 1). + JR Z,.wait_loop_next ; 7 ; 12 + 34 (.wait_loop_next) + ; ᨬ 64 ⠪ + EX AF,AF' + JR NZ,.write_loop ; 11 ; १ BIT 5,B' + ; + ;EX AF,AF' + ;READ BYTE. .wait_loop .read_loop (INI) 64+11=75 ⠪⮢ +.read_loop: EXX + DEC DE + LD A,D + OR E + EXX + JR Z,.SectorSizeError + ; .wait_loop  26+11+7+7+11+29=91, 뫮 75+29=104 ⠪⮢ + ; ਬ୮ 9,1 ᫮ । 10 + ; ਬ୮ 26 3,5 + ; 16 1.44 32 720 + INI + ; +.wait_data_r: IN A,(FDC_93.DrvCTRL) + AND %1100'0000 ;b7: INTRQ (믮 = 0). b6: DRQ ( = 1). + JR Z,.wait_data_r + JP P,.read_loop ; JUMP if "믮 = 0" + ; + ; +.after_rw: EX AF,AF' + POP AF ; 頥 ⥪ ࠭ + OUT (SLOT3),A + EX AF,AF' + ; + POP DE + POP HL + LD A,BIOS.Error.NotReady + JR C,.CMD_ERROR + ; + IN A,(FDC_93.Command) + LD C,A + AND #7F + RET Z ; NORMAL EXIT + ; + BIT 6,C + LD A,BIOS.Error.WriteProtect + JR NZ,.error_exit + ; + BIT 2,C + JR NZ,.data_lost ; Error Read + ; + LD A,BIOS.Error.Seek +.CMD_ERROR: DEC D ; FDD_COUNTERS.RW_Retries + JR Z,.error_exit + ; + PUSH DE + PUSH HL + CALL RESWG ; RESET_WG + ;!FIXIT ஫ 訡 + LD A,XL + CALL SEEK ; !!!!! ᬮ + ;!FIXIT ஫ 訡 + POP HL + POP DE + JR .RETRY + ; +.wait_loop_next: + INC DE + LD A,E + OR D + JR NZ,.wait_loop ; 26 + ; + DJNZ .wait_loop + SCF + JR .after_rw ; error + ; + ; +.data_lost: DEC D ; + JR NZ,.RETRY + ; + EXX + BIT 5,B + EXX + LD A,BIOS.Error.Read ; Error Read + JR Z,.error_exit + ; + LD A,BIOS.Error.Write ; Error Write +.error_exit: EX AF,AF' + LD A,#D0 ;!HARDCODE CMD 181893 + OUT (FDC_93.Command),A ;STOP OPERATION + EX AF,AF' + BIT 0,C + SCF + RET Z + LD A,BIOS.Error.SectorNotFound + RET + ; + ; + ;WRITE BYTE +;.go_write: EX AF,AF' +.write_loop: EXX + DEC DE + LD A,D + OR E + EXX + JR Z,.SectorSizeError + ; + OUTI + ; +.wait_data_w: IN A,(FDC_93.DrvCTRL) + AND %1100'0000 ;b6: DRQ ( = 1). b7: INTRQ (믮 = 0). + JR Z,.wait_data_w + JP P,.write_loop + JP .after_rw + ; +.SectorSizeError: + ; A = 0 + LD C,A + POP AF ; 頥 ⥪ ࠭ + OUT (SLOT3),A + POP DE + POP HL + LD A,BIOS.Error.UnknownDevice + JR .error_exit + + + +; +; 㡠 ⮢ +SET_DOS_ON: EX AF,AF' + LD A,CNF_PORT.CNF_3 + ROM.BIOS + OUT (SYS_PORT.ROM),A ; - OPEN + EX AF,AF' + RET +; 㡠 㫥 ⮢ +SET_DOS_OFF: EX AF,AF' + LD A,CNF_PORT.CNF_0 + ROM.BIOS + OUT (SYS_PORT.ROM),A ; - CLOSE + EX AF,AF' + RET + +//////////////////////////////////////////////////////////////////////// +; . FDD AUTO ஬ FDD_TABLE +; SET_FDD: PUSH BC +; AND 1 +; LD B,A +; OR #3C +; OUT (FDC_93.DrvCTRL),A +; IN A,(SLOT3) +; EX AF,AF' +; LD A,SYS_PAGE +; OUT (SLOT3),A +; LD A,(SYS_PAGE.FDD_TABLE.DISK) +; AND #FE +; OR B +; LD (SYS_PAGE.FDD_TABLE.DISK),A +; EX AF,AF' +; OUT (SLOT3),A +; POP BC +; RET +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// +SELECT_FDD: PUSH BC + OR A + LD IY,SYS_PAGE.FDD_TABLE.A + JR Z,.IY_Selected + ; + LD IY,SYS_PAGE.FDD_TABLE.B +.IY_Selected: ;LD B,A + OR #3C + OUT (FDC_93.DrvCTRL),A + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD B,(IY + FDD_TABLE_s.ID) + EX AF,AF' + OUT (SLOT3),A + INC B + POP BC + RET NZ + ; no drive + LD A,BIOS.Error.BadNumber + SCF + RET +//////////////////////////////////////////////////////////////////////// + + +;----------------------------------------------------------------------; +; CHANGE_SPEED: IN A,(SLOT3) +; EX AF,AF' +; LD A,SYS_PAGE +; OUT (SLOT3),A +; LD A,(SYS_PAGE.FDD_TABLE.DISK) +; XOR #80 +; LD (SYS_PAGE.FDD_TABLE.DISK),A +; RLA +; EX AF,AF' +; OUT (SLOT3),A +; EX AF,AF' +; JR NC,FDD.SET720 +; FDD.SET1440: LD A,FDD_Density.SET_1440 +; OUT (FDD_Density),A +; RET +; ; +; ; +; SET_SPEED: IN A,(SLOT3) +; EX AF,AF' +; LD A,SYS_PAGE +; OUT (SLOT3),A +; LD A,(SYS_PAGE.FDD_TABLE.DISK) +; ;AND #80 +; RLA +; EX AF,AF' +; OUT (SLOT3),A +; EX AF,AF' +; JR C,FDD.SET1440 +; FDD.SET720: LD A,FDD_Density.SET_720 +; OUT (FDD_Density),A +; RET +; +; 室: IY - ⥫ ⠡ ࠭ FDD +CHANGE_SPEED: IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,(IY + FDD_TABLE_s.DISK) + XOR #80 + LD (IY + FDD_TABLE_s.DISK),A + JR SET_SPEED.set + ; +SET_SPEED: IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,(IY + FDD_TABLE_s.DISK) +.set: AND #80 + RRA + RRA + OR 1 + OUT (FDD_Density),A + EX AF,AF' + OUT (SLOT3),A + RET +;----------------------------------------------------------------------; + + + +//////////////////////////////////////////////////////////////////////// +; 室: BC - ७ 譨 稪 +; IY - ⥫ ⠡ ࠭ FDD +WAIT_FDD_FOR_SEARCH_TRACK: + LD A,#C0 ;!HARDCODE CMD 181893 + OUT (FDC_93.Command),A + PUSH BC + CALL .LOOP + POP BC + RET NC + ; + CALL CHANGE_SPEED + DEC C + JR NZ,WAIT_FDD_FOR_SEARCH_TRACK + ; + SCF + RET + ; +.LOOP: LD HL,#F000 +.loop_reg_HL: IN A,(FDC_93.DrvCTRL) + AND #C0 + RET NZ + ; +.ID_LP4: DEC HL + LD A,H + OR L + JR NZ,.loop_reg_HL + ; + DJNZ .LOOP + SCF + RET +//////////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////////// +; 뢠 ⪫祭 +; 室: IY - ⥫ ⠡ ࠭ FDD +; 室: A - bit7 - 720/1440, B - sector size high byte +DISK_ID: EXX + CALL SET_SPEED + IN A,(FDC_93.Track) + OUT (FDC_93.Data),A + LD A,#18 ;!TODO 믨 ;SEARCH ;!HARDCODE CMD 181893 + CALL EXECOM + ; ᮪ 䫮३ + LD BC,#0104 ; 稪 + CALL WAIT_FDD_FOR_SEARCH_TRACK + JR NC,.Read_Index + ; ᮪ ମ 䫮३ + LD BC,#0804 ; 稪 + CALL WAIT_FDD_FOR_SEARCH_TRACK + JR NC,.Read_Index + EXX + ;SCF + LD A,BIOS.Error.NotReady + RET + ; +.Read_Index: ; + ; FDC_93.Data: + ; 樫 BYTE + ; BYTE + ; ᥪ BYTE + ; ᥪ BYTE + ; ஫쭠 㬬 WORD + LD H,4 ; !HARDCODE 稪 ࠧ ᥪ +.ID_LP2: IN A,(FDC_93.Data) + DEC H + JR NZ,.ID_LP3 + LD L,A ; [ ] ࠧ ᥪ (訩 ) +.ID_LP3: IN A,(FDC_93.DrvCTRL) + AND %1100'0000 + JR Z,.ID_LP3 + JP P,.ID_LP2 + LD A,L + EXX + LD B,A ; [ ] ࠧ ᥪ (訩 ) + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,(IY + FDD_TABLE_s.DISK) + EX AF,AF' + OUT (SLOT3),A + EX AF,AF' + AND #80 + RET +//////////////////////////////////////////////////////////////////////// + +; in: A - track +SEEK: LD XL,A + LD C,A + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,(IY + FDD_TABLE_s.DISK) + AND 1 + EX AF,AF' + OUT (SLOT3),A + EX AF,AF' + SRL C + JR C,.GT001 + ; + OR #3C +.GT001: OR #2C + OUT (FDC_93.DrvCTRL),A + IN A,(FDC_93.Track) + CP C + CALL NZ,P50ms + LD A,C + OUT (FDC_93.Data),A + IN A,(FDC_93.Track) + CP C + EX AF,AF' ;R.TRACK==PHISICAL TRACK + LD A,#18 ;!HARDCODE CMD 181893 + CALL EXECOM + RET C + EX AF,AF' + LD A,C + OUT (FDC_93.Track),A + RET Z +.STOL: CALL P50ms + RET + ; +P50ms: PUSH BC + LD B,12 +.P1ms: LD C,255 +.PMS: DEC C + JR NZ,.PMS + DJNZ .P1ms + POP BC + RET +; +; +;P750ms LD B,3 +;PMS2 LD A,255 +; CALL P1ms +; DJNZ PMS2 +; RET + +//////////////////////////////////////////////////////////////////////// +;RESWG: LD A,8 +; ; +;EXECOM: OUT (FDC_93.Command),A +; LD HL,#0000 ; 稪 +;.WREST: DEC HL +; LD A,H +; OR L +; SCF +; RET Z +; ; +; IN A,(FDC_93.DrvCTRL) +; AND #80 +; JR Z,.WREST +; RET +; +RESWG: LD A,8 ;!HARDCODE CMD 181893 +EXECOM: OUT (FDC_93.Command),A + LD HL,#0000 ; 稪 + PUSH BC + LD BC,#0380 ; 稪 ᪠ +.WREST: DEC HL + LD A,H + OR L + JR NZ,.get_state + DJNZ .WREST + POP BC + SCF + RET + ; +.get_state: IN A,(FDC_93.DrvCTRL) + AND C + JR Z,.WREST + POP BC + RET +//////////////////////////////////////////////////////////////////////// + +; +;------------------------------- +; HL:IX - SECTOR +; H - TRACK, L - SECTOR +;HL:IX/SECTOR_PER_TRACK +NTRACK: PUSH HL + EX (SP),IX + POP HL + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD C,(IY + FDD_TABLE_s.SECTORS) + LD B,0 + EX AF,AF' + OUT (SLOT3),A + XOR A +.NTRK: INC A + SBC HL,BC + JR NC,.NTRK + ; + EX AF,AF' + LD A,XL + OR XH + JR Z,.NTRK3 + ; + EX AF,AF' + DEC IX + JR .NTRK + ; +.NTRK3: EX AF,AF' + ADD HL,BC + DEC A + LD H,A + RET +; +SAVE_INTERRUPTS: +.switch_off: PUSH AF + LD A,R + DI + LD A,#80 + JP PE,.set_R + XOR A +.set_R: LD R,A + POP AF + RET + ; ; +.restore: PUSH AF + LD A,R + DI + RLA + JR NC,.set_di + EI +.set_di: POP AF ; PE + RET ;[]===========================================================[] \ No newline at end of file diff --git a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM b/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM similarity index 95% rename from src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM rename to bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM index a9049a6..a45126c 100644 --- a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM +++ b/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM @@ -1,946 +1,946 @@ -;[x] 18/12/2023. / API CD-ROM (ATAPI) -; -;CD ROM DRIVE DRIVER -;--------------------------------------------------------------- -;Rev Date Name Description -;--------------------------------------------------------------- -; 02-08-2001 DNS Initial this module -;--------------------------------------------------------------- -;======================================================== - -;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO -; -; [ ] ⠭ ࠬ ᨬ쭮 ࠧ ⥭ १ DRV_SET_PAR -; -;---------------------------------------------------------------------------------- -MAX_ATAPI_SEC_SIZE EQU 4096/2 -PACKET_SIZE EQU 12 ; !FIXIT IDENTIFY PACKET DEVICE -RAM_ATAPI_PK EQU SYS_PAGE.SHARED_BUFFER_32b -RAM_ATAPI_RW_CMD EQU SYS_PAGE.SHARED_BUFFER_32b+16 -MAX_DATA_PACKET_FOR_REQUEST_SENSE EQU 254 - - -_ZIP_WAITS_ EQU 128 - - ASSERT ((PACKET_SIZE % 4) = 0), "PACKET_SIZE must be an even number" - -;[]================================================================[#50] -; IN: A - 4..7 - ⨯ ன⢠, 0..3 - ன⢠ -; B - 㭪樨: -; 1 - 512 ⮢ Identify Device -; 2 - , ਩ 訢 ன⢠ -; HL - 71 ன⢠ -; OUT: NC - 訢 -; F - A 訡 -ATAPI_5x_GET_DRIVE_NAME: - LD C,IDE.Device.ATAPI - LD E,IDE.CMD.ATAPI.IdentifyPacketDevice - JP ATAxx_IdentifyDevice -;[]================================================================[#50] - - -;[]================================================================[#51] -ATAPI_5x_RESET: LD C,IDE.Device.ATAPI - CALL SELECT_DRIVE - RET C - LD B,50 -.loop: PUSH BC - CALL EXEC_TEST_CMD - ;!FIXIT ;[ ] sector size. ᤥ २ HDD_INIT_TABLE - POP BC - RET NC - LD C,A - ; - ;CALL ATAPI_CHECK_MEDIA_CHANGED.noWait - ;RET C - CP BIOS.Error.ATAPI.UnitAttention - SCF - RET Z - ; - CP BIOS.Error.ATAPI.MediumError - SCF - RET Z - ; ண 뢠 - ; EI - ; HALT - EXX - XOR A -.pause_loop: LD B,A - DJNZ $ - DEC A - JR NZ,.pause_loop - EXX - DJNZ .loop - LD A,C - AND A - ;RET Z - SCF - RET -;[]================================================================[#51] - - -;[]================================================================[#58] -;Function: Get Current Media Parameters -; A - Disk -;Return: -; H - Heads ; [ ] For ATAPI HL:DE - media size in sectors -; L - Sectors per cylinder ; -; DE - Cylinders ; -; IX - Capacity sector in bytes -; B - Flags: MASTER/SLAVE, LBA/CHS -; [ ] A - HDD_INIT_TABLE.MediaParameters -; IF media changed -; [ ] CF' = 1, A' = error number UnitAttention -ATAPI_5x_GET_PAR: - LD C,IDE.Device.ATAPI - CALL SELECT_DRIVE - RET C - ; -.DriveSelected: IN A,(SLOT3) - AND A - PUSH AF - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - ; - ; [ ] sector size. media changed - RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media - CALL ATAPI_CHECK_MEDIA_CHANGED - EX AF,AF' - POP AF - EX AF,AF' - JR NC,.get_data - ; - CP BIOS.Error.ATAPI.UnitAttention - JR Z,.UnitAttention - ; - CP BIOS.Error.ATAPI.MediumError - JR NZ,.unknown_error - ;!FIXIT - LD A,BIOS.Error.ATAPI.UnitAttention ;!FIXIT - RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media - ; -.unknown_error: LD HL,#FFFF - LD D,H - LD E,L - PUSH HL - POP IX - SCF - EX AF,AF' ; ᪨㥬 訡, 砫쭮 CF=1 ⮫쪮 ᫨ ன⢮ - OUT (SLOT3),A - RET - ; -.UnitAttention: RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media - EX AF,AF' - SCF - EX AF,AF' -.get_data: LD A,(IY+IDE.HDD_INIT_TABLE.MediaParameters) - AND %000'0100 - CALL NZ,.RereadCapacity - ; - LD A,(IY+IDE.HDD_INIT_TABLE.MediaParameters) - LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) - ; [ ] sector size - LD E,(IY+IDE.HDD_INIT_TABLE.SectorSize) - LD D,(IY+IDE.HDD_INIT_TABLE.SectorSize + 1) - LD XL,E - LD XH,D - ; [ ] media size - LD L,(IY+IDE.HDD_INIT_TABLE.MediaSizeHigh) - LD H,(IY+IDE.HDD_INIT_TABLE.MediaSizeHigh+1) - LD E,(IY+IDE.HDD_INIT_TABLE.MediaSizeLow) - LD D,(IY+IDE.HDD_INIT_TABLE.MediaSizeLow+1) - ; - EX AF,AF' - OUT (SLOT3),A - LD A,BIOS.Error.ATAPI.UnitAttention ; ᫨ CF, 訡 - EX AF,AF - RET -.RereadCapacity: - EX AF,AF' - PUSH AF - CALL GET_ATAPI_CAPACITY - POP AF - EX AF,AF' - RET -;[]================================================================[#58] - - -;[]================================================================[#59] -; [ ] media changed -ATAPI_5x_SET_PAR: - LD L,B - LD C,IDE.Device.ATAPI - CALL SELECT_DRIVE - RET C - ; - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - ; - LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),B - EX AF,AF - OUT (SLOT3),A - RET -;[]================================================================[#59] - - - -;!TODO -; atapi.pdf . 24 /⥭ ᨬ묨 ᪮쪮 室 -;[]================================================================[#55] -;Function: Read Sectors -; A - Disk -; HL:IX - Sector -; DE - Address -; B - Sector counter -;Return: -; HL:IX - Sector + Sector counter -; DE - Address + (Sector counter * Size sector) -;READ SECTOR(S) -ATAPI_5x_READ: ;PUSH IY ; !FIXIT 祬? - LD C,0 ; ਧ short - EX AF,AF' - IN A,(SLOT3) - EX AF,AF' - JR ATAPI_5x_LONG_READ.main -;[]================================================================[#52] -;Function: Long Read Sectors -; A - Disk -; HL:IX - Sector -; DE - Address -; B - Sector counter -; A'- Memory Page Number -;Return: -; HL:IX - Sector + Sector counter -; DE - Address + (Sector counter * Size sector) -;LONG READ SECTOR(S) -ATAPI_5x_LONG_READ: - ;AND A - ; - ;PUSH IY ; !FIXIT 祬? - LD C,1 ; ਧ long -.main: EX AF,AF' - AND A ;read - EX AF,AF' - JR ATAPI_BEGIN_RW - ; - ; SAFE_PORTY_2 - ; PUSH BC - ; PUSH IX - ; PUSH HL - ; ; - ; CALL RW_ATAPI_SECTORs - ; ; [ ] sector size. media changed - ; JP ATA_5x_LONG_READ.shared - ; JP NC,ATA_5x_LONG_READ.shared - ; CP BIOS.Error.UnitAttention - ; JR Z,ATAPI_MEDIA_ERROR - ; SCF -;[]================================================================[#52] -; INPUT: -; A - Disk -; HL:IX - Sector -; DE - Address -; B - Sector counter -; A'- Memory Page Number -; CF'=1 - write, CF'=0 - read -; -; OUTPUT: -; -RW_ATAPI_SECTORs: - PUSH BC - LD C,IDE.Device.ATAPI - CALL SELECT_DRIVE - POP BC - RET C - ; - EXX - LD C,SLOT3 - IN B,(C) - PUSH BC - LD A,SYS_PAGE - OUT (C),A - ; [ ] media change - LD A,(IY + IDE.HDD_INIT_TABLE.MediaParameters) - AND %0000'0010 - JR NZ,.error_media - ; - LD HL,ATAPI_CMD_PACKET.READ - EX AF,AF' - JR NC,.read_cmd - LD HL,ATAPI_CMD_PACKET.WRITE -.read_cmd: EX AF,AF' - LD DE,RAM_ATAPI_RW_CMD - LD BC,PACKET_SIZE - LDIR - EXX - ; - LD A,H - LD H,L - LD L,A - LD (RAM_ATAPI_RW_CMD + ATAPI_PACKET.SECTOR+0),HL - LD A,XH - LD (RAM_ATAPI_RW_CMD + ATAPI_PACKET.SECTOR+2),A ;R01 - LD A,XL - LD (RAM_ATAPI_RW_CMD + ATAPI_PACKET.SECTOR+3),A ;R01 - LD A,B - LD (RAM_ATAPI_RW_CMD + ATAPI_PACKET.COUNTER+1),A ;R01 - ; - LD YL,C ; ਧ short/long C YL - LD HL,RAM_ATAPI_RW_CMD - CALL EXEC_PACKET_COMMAND.start - ; -.exit: POP BC - OUT (C),B - RET - ; -.error_media: EXX - LD A,BIOS.Error.ATAPI.UnitAttention - SCF - JR .exit - -;[]===========================================================[#52, #55] - -ATAPI_BEGIN_RW: SAFE_PORTY_2 - PUSH BC - PUSH IX - PUSH HL - ; - CALL RW_ATAPI_SECTORs - ; - JP ATA_5x_LONG_READ.shared - -;[]================================================================[#56] -;Function: Write Sectors -; A - Disk -; HL:IX - Sector -; DE - Address -; B - Sector counter -;Return: -; HL:IX - Sector + Sector counter -; DE - Address + (Sector counter * Size sector) -;WRITE SECTOR(S) -ATAPI_5x_WRITE: ;PUSH IY ; !FIXIT 祬? - ; ஡ - LD C,0 ; ਧ short - ;LD C,1 ; ਧ long - ; - EX AF,AF' - IN A,(SLOT3) - EX AF,AF' - JR ATAPI_5x_LONG_WRITE.main -;[]================================================================[#53] -;Function: Long Write Sectors -; A - Disk -; HL:IX - Sector -; DE - Address -; B - Sector counter -; A'- Memory Page Number -;Return: -; HL:IX - Sector + Sector counter -; DE - Address + (Sector counter * Size sector) -;WRITE SECTOR(S) -ATAPI_5x_LONG_WRITE: - ;AND A - ; - ;PUSH IY ; !FIXIT 祬? - LD C,1 ; ਧ long -.main: EX AF,AF' - SCF ;write - EX AF,AF' - JR ATAPI_BEGIN_RW -;[]================================================================[#53] - -;[]================================================================[#57] -;Function: Detect Disk -; A - Disk -;Return: CF=0 - A=Drive type -; B=MediaParameters byte ; [ ] media change -; CF=1 - drive not present, A=#02 -ATAPI_5x_DETECT: - LD C,IDE.Device.ATAPI - JP ATA_5x_DETECT.shared -;[]================================================================[#57] - -;[]================================================================[#5E] -; [ ] -;Function: Extended -; A - Disk -; B - SubFunction -;Return: -; [ ] ᯨ -ATAPI_5x_Extended: - LD C,IDE.Device.ATAPI - CALL SELECT_DRIVE - RET C - ; - LD A,B - CP 2 - JR C,TRAY_FN ; B = 0 1 - ; - JR Z,ATAPI_REQUEST_SENSE ; B = 2 - ; - CP 3 - JR Z,ATAPI_CUSTOM_CMD - ; ... - LD A,BIOS.Error.InvalidSubFunction - SCF - RET -;[]================================================================[#5E] - -;----------------------------------------------------------------------;!TODO ᤥ 㯭 १ ७ 㭪 API -; 室: DE - -ATAPI_REQUEST_SENSE: - IN A,(SLOT3) - EX AF,AF' -.FN: LD HL,ATAPI_CMD_PACKET.REQUEST_SENSE - JR EXEC_PACKET_COMMAND.start -;----------------------------------------------------------------------; - -;[ ] media changed -;----------------------------------------------------------------------; -ATAPI_CHECK_MEDIA_CHANGED: - CALL EXEC_TEST_CMD ;!FIXIT - RET C - ; -.next_check: EXX - LD C,SLOT3 - IN B,(C) - LD A,SYS_PAGE - OUT (C),A - ; - LD A,(IY + IDE.HDD_INIT_TABLE.MediaParameters) - OUT (C),B - EXX - RRA - RRA - LD A,BIOS.Error.ATAPI.UnitAttention - RET -;----------------------------------------------------------------------; - - - -;----------------------------------------------------------------------; -; HL - 㪠⥫ ( ன ᫮) -; DE - 㪠⥫ -ATAPI_CUSTOM_CMD: - IN A,(SLOT3) - EX AF,AF' - LD A,1 ; ਧ, 訡 ᬥ ⥫ ࠡ뢠 EXEC_PACKET_COMMAND - JP EXEC_PACKET_COMMAND.start_custom -;----------------------------------------------------------------------; - - -;----------------------------------------------------------------------; -TRAY_FN: LD HL,ATAPI_CMD_PACKET.CLOSE - LD DE,0 ; થ ⮣, 㦭 ன⢠ - DEC A - JR Z,EXEC_PACKET_COMMAND.start - LD HL,ATAPI_CMD_PACKET.OPEN - JR EXEC_PACKET_COMMAND.start - -; INPUT: HL - AP packet (12bytes) -; DE - address for/with data if needed -; A' - 砫쭠 ࠭ R/W Long -; -; RETURN: CF - ERROR -; !FIXIT ࠢ -; !TODO CD ERRORS to INCLUDES -; #01 - RECOVERED ERROR -; #02 - NOT READY -; #03 - MEDIUM ERROR -; #04 - HARDWARE ERROR -; #05 - ILLEGAL REQUEST -; #06 - UNIT ATTETION -; #07 - DATA PROTECT -; #0B - ABORTED COMMAND -; #80 - TIME OUT -EXEC_PACKET_COMMAND: -.error_ex: EX DE,HL -.error: CP #FF -.error_fail: SCF - RET NZ - LD A,BIOS.Error.Failure - RET - ; -.error_TimeOut: CP #FF - EX DE,HL - JR Z,.error_fail - LD A,BIOS.Error.ATAPI.TimeOut - SCF - RET - ; - ; -; -.start: XOR A ; ਧ ⮣, 訡 ᬥ ⥫ ࠡ뢠 EXEC_PACKET_COMMAND -.start_custom: EXX - LD C,A ; ਧ ⮣, 訡 ᬥ ⥫ ࠡ뢠 EXEC_PACKET_COMMAND - CALL ATAPI_WAITPRT - EXX - JR NC,.READY - ; -.reset: LD BC,IDE.Write.Command - LD A,IDE.CMD.ATAPI.Reset - OUT (C),A - ; - LD B,#80 -.pause: DJNZ .pause - ; - EXX - CALL ATAPI_WAITPRT - EXX - JR C,.error_ex - ; -.READY: LD C,SLOT3 - IN B,(C) - PUSH DE - PUSH BC - ; - LD A,SYS_PAGE - OUT (C),A - LD DE,RAM_ATAPI_PK ;!FIXIT ⥪ 뤥 ? - LD BC,PACKET_SIZE - LDIR - ; - POP BC - POP DE - OUT (C),B - ; - XOR A - EXX - LD H,C ; ਧ ⮣, 訡 ᬥ ⥫ ࠡ뢠 EXEC_PACKET_COMMAND - LD BC,IDE.Write.Features - OUT (C),A - LD DE,MAX_ATAPI_SEC_SIZE ;SIZE BLOCK ;!HARDCODE ⠢ ६ - - LD BC,IDE.Write.ByteCountLow - OUT (C),E - LD BC,IDE.Write.ByteCountHigh - OUT (C),D - LD BC,IDE.Write.Command - LD A,IDE.CMD.ATAPI.Packet - OUT (C),A - LD C,H ; ਧ ⮣, 訡 ᬥ ⥫ ࠡ뢠 EXEC_PACKET_COMMAND - CALL ATAPI_WAITPRT - EXX - JR C,.error_ex - ; - EXX - LD DE,256*(IDE.CtrlByte.DataRequest+IDE.CtrlByte.Error)+IDE.CtrlByte.DataRequest - CALL ATAPI_WAITPRT.Custom - EXX - JR C,.error_TimeOut - ; - ; EXEC ATAPI PACKET COMMAND -.YEP_DRQ: LD C,SLOT3 - IN B,(C) - PUSH BC - LD A,SYS_PAGE - OUT (SLOT3),A - LD HL,RAM_ATAPI_PK - LD BC,IDE.Write.Data - LD A,PACKET_SIZE/4 ; !FIXIT IDENTIFY PACKET DEVICE -.OUTPKT: OUTI - OUTI - OUTI - OUTI - DEC A - JR NZ,.OUTPKT - ; - POP BC - OUT (C),B - ; pause - ; LD B,0 - ; DJNZ $ - ; DJNZ $ - ; - EX AF,AF' - LD XH,A ; ࠭ R/W_LONG - EX AF,AF' - ;A=0 - LD XL,A - EX DE,HL - ; -.AP_LOOP: ;CALL ATAPI_WAITPRT.wait_NZ - LD B,_ZIP_WAITS_ - DJNZ $ - CALL ATAPI_CHECK_DRV - JP C,.error;_APLOOP - RET Z - ;====== IF DATA REQUEST ===============================================; - IN A,(SLOT3) - EX AF,AF' ;>-----------> \ - ; - LD A,XH - OUT (SLOT3),A - CALL ATAPI_PREPARE_RW - RET NC - JR Z,.WRITE_DATA - ;READ -.read_loop: INI - INI - DEC DE - LD A,D - OR E - JR NZ,.read_loop - ; -.return_rw: EX AF,AF' ;<-----------< / - INC XL ;INC LOADED SECTORS - OUT (SLOT3),A - ; - LD A,H - OR L - JR NZ,.AP_LOOP - ; short/long - ; A = 0 - SUB YL - JR NC,.END_BUFFER - ; next page in mem block - CALL CHANGE_MEM_BLK - JR .AP_LOOP - ;WRITE -.WRITE_DATA: INC B ; LD BC,IDE.Write.Data -.write_loop: OUTI - OUTI - DEC DE - LD A,D - OR E - JR NZ,.write_loop - JR .return_rw - ; ; -.END_BUFFER: ;CALL ATAPI_WAITPRT.wait_NZ - LD B,_ZIP_WAITS_ - DJNZ $ - CALL ATAPI_CHECK_DRV - JP C,.error - JR NZ,ATAPI_IdlePasses.Enter - RET - ; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -ATAPI_IdlePasses: - LD B,_ZIP_WAITS_ - DJNZ $ - CALL ATAPI_CHECK_DRV - JP C,EXEC_PACKET_COMMAND.error - JP Z,EXEC_PACKET_COMMAND.error_fail - ; -.Enter: CALL ATAPI_PREPARE_RW - RET NC - JR Z,.write_data - ; -.read_loop: IN F,(C) ; ⠥ 1 ࠧ ⭮ , ⠥ WORD - DEC DE - LD A,D - OR E - JR NZ,.read_loop - JR ATAPI_IdlePasses - ; -.write_data: ; A = 0 - OUT (C),A ; 0 ॣ IDE - INC B -.write_loop: XOR A - OUT (C),A ; 襬 1 ࠧ , WORD - DEC DE - LD A,D - OR E - JR NZ,.write_loop - JR ATAPI_IdlePasses - ; -; 室: -; CF,ZF ATAPI_WAITPRT Error Check Condition 譥 ࠡ⪮ -; ZF No errors, no data request -; NZ,NC DATA REQUEST -; CF Error -ATAPI_CHECK_DRV: - ;EX DE,HL - EXX - ;CALL .zeroWait - CALL ATAPI_WAITPRT - EXX - ; ZF=1 - RET C - ; - ; [ ] media change. ? ;!FIXIT ஢ ⥫ - LD A,high IDE.Read.Status - IN A,(low IDE.Read.Status) - ; - AND IDE.CtrlByte.DataRequest + IDE.CtrlByte.Error - RET Z ;NO DATA REQUEST. A = 0: BIOS.Error.NoErrors - RRA ; Checking IDE.CtrlByte.CheckCondition - RET NC ; DataRequest CF=0, ZF=0 - ; - CALL ATAPI_GET_ERROR_REG - EXX - DEC C ; ਧ ⮣, 訡 ᬥ ⥫ ࠡ뢠 EXEC_PACKET_COMMAND - EXX - SCF - RET Z ; 室, ᫨ 訡 ࠡ뢠 EXEC_PACKET_COMMAND - ; - ; CP BIOS.Error.ATAPI.NoSence - ; JP Z,ATAPI_MEDIA_ERROR - CP BIOS.Error.ATAPI.NotReady - JP Z,ATAPI_MEDIA_ERROR - CP BIOS.Error.ATAPI.UnitAttention - JP Z,ATAPI_MEDIA_ERROR - ; - ;CP BIOS.Error.ATAPI.IllegalRequest - ;RET Z - ; - SCF - RET - ; - -ATAPI_PREPARE_RW: - LD BC,IDE.Read.ByteCountLow - IN E,(C) - INC C ;LD BC,IDE.Read.ByteCountHigh - IN D,(C) ;TRANSFER BLOCK SIZE - ; - LD A,D - OR E - RET Z ;BLOCK = 0 - ; - ; 㬥蠥 稪 㦠 ⮢ 2 ࠧ. ⠥ 2 - SRL D - RR E - ; - LD BC,IDE.Read.InterruptReason - IN A,(C) - AND IDE.InterruptReasonByte.IO - LD BC,IDE.Read.Data - SCF - RET -;----------------------------------------------------------------------; - - -;----------------------------------------------------------------------; -; ⨬ ⮫쪮 ॣ AF -ATAPI_GET_ERROR_REG: - XOR A ;LD BC,IDE.Read.Error - IN A,(IDE.Read.Error) ;IN A,(C) - RRCA - RRCA - RRCA - RRCA - AND #0F - OR BIOS.Error.ATAPI - RET -;----------------------------------------------------------------------; - - - -;----------------------------------------------------------------------; -; D - MASK, E - PATTERN -; !!! 㭪樨 , 室 ᥣ ZF -; ண ॣ. C -ATAPI_WAITPRT: LD DE,256*IDE.CtrlByte.Busy + 0 -.Custom: LD B,9 ; 3 = প ᥪ㭤 - LD HL,#0000 - ; 4128768 -.LOOP: LD A,high IDE.Read.Status - IN A,(low IDE.Read.Status) - CP #FF - SCF - RET Z - ; - AND D - CP E - RET Z - ; - DEC HL - LD A,H - OR L - JR NZ,.LOOP - DJNZ .LOOP - ; - LD A,BIOS.Error.Busy - SCF - RET -;----------------------------------------------------------------------; - - -;----------------------------------------------------------------------; -; DE - buffer -ATAPI_READ_CAPACITY_DATA: - LD BC,28 ;稪 - ; -.loop: PUSH BC - PUSH DE - LD A,SYS_PAGE - EX AF,AF' - LD A,1 - LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA - CALL EXEC_PACKET_COMMAND.start_custom - POP DE - POP BC - RET NC - ; - CALL ATAPI_GET_ERROR_REG - CP BIOS.Error.ATAPI.NotReady - SCF - RET NZ - ; - PUSH BC - CALL ATAPI_MEDIA_ERROR - CP BIOS.Error.ATAPI.NotReady - SCF - POP BC - RET NZ - ; - CPI - RET PO ;稪 - ; - LD HL,0 -.pause: DEC HL - LD A,H - OR L - JR NZ,.pause - ; - JP .loop - ;RET -;----------------------------------------------------------------------; - - -;----------------------------------------------------------------------; -ATAPI_MEDIA_ERROR: - PUSH IX - PUSH HL - ; - IN A,(SLOT3) - PUSH AF - LD A,SYS_PAGE - OUT (SLOT3),A - EX AF,AF' ; set page with buffer to SYS_PAGE - LD DE,SYS_PAGE.SHARED_BUFFER_256b - CALL ATAPI_REQUEST_SENSE.FN - ; - LD A,(SYS_PAGE.SHARED_BUFFER_256b + 2) ; SenceKey - CP 2 ; NOT READY - JR Z,.Not_Ready - CP 6 ; UNIT ATTENTION - JR NZ,.unkn_error - ; - LD A,(SYS_PAGE.SHARED_BUFFER_256b + 12) ; AdditionalSenceKey - CP #28 ; NOT READY TO READY TRANSITION - JR Z,.MedCh3 - CP #29 ; POWER ON, RESET OR BUS DEVICE RESET OCCURRED - JR Z,.MedChanged - JR .unkn_error - ; -.MedCh3: LD A,(SYS_PAGE.SHARED_BUFFER_256b + 13) ; AdditionalSenseCodeQualifier. 0 - AND A - JR NZ,.unkn_error - ; -.MedChanged: LD A,(IY + IDE.HDD_INIT_TABLE.MediaParameters) - OR %0000'0011 - LD (IY + IDE.HDD_INIT_TABLE.MediaParameters),A - ; - CALL GET_ATAPI_CAPACITY -.exit: POP AF - POP HL - POP IX - OUT (SLOT3),A - LD A,C - SCF - RET - ; -.Not_Ready: LD A,(SYS_PAGE.SHARED_BUFFER_256b + 12) ; AdditionalSenceKey - LD C,BIOS.Error.ATAPI.MediumError ; ⥫ - ;!TODO - ; 06,00 - NO REFERENCE POSITION FOUND (media may be upside down) - ; 3A - MEDIUM NOT PRESENT - ; - CP 4 - JR NZ,.exit - ; [ ] !(test for ZIP) - LD A,(SYS_PAGE.SHARED_BUFFER_256b + 13) ; AdditionalSenseCodeQualifier - CP 1 ; LOGICAL DRIVE NOT READY - IN PROGRESS OF BECOMING READY - JR NZ,.exit - ; - ; 樠 - LD C,BIOS.Error.ATAPI.NotReady - JR .exit - ; -.unkn_error: LD C,BIOS.Error.ATAPI.MediumError - JR .exit - - -;----------------------------------------------------------------------; -GET_ATAPI_CAPACITY: - ; - LD DE,SYS_PAGE.TMP_BUFFER - CALL ATAPI_READ_CAPACITY_DATA - ; - LD HL,#FFFF - LD C,BIOS.Error.ATAPI.MediumError - JR C,.No_Media - ; - LD HL,(SYS_PAGE.TMP_BUFFER) ; media size high - LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh),H - LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh+1),L - LD HL,(SYS_PAGE.TMP_BUFFER + 2) ; media size low - LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow),H - LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow+1),L - LD HL,(SYS_PAGE.TMP_BUFFER + 6) ; sector size - ; - LD C,BIOS.Error.ATAPI.UnitAttention -.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H ;[ ] sector size - LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L - RET NC - SET 2,(IY + IDE.HDD_INIT_TABLE.MediaParameters) - RET -;----------------------------------------------------------------------; - -;----------------------------------------------------------------------; - -; !!! SELECT_DRIVE ࠡ ࠭ -EXEC_TEST_CMD: LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY - LD DE,0 ; થ ⮣, 㦭 ன⢠ - JP EXEC_PACKET_COMMAND.start - -//////////////////////////////////////////////////////////////////////// -ATAPI_CMD_PACKET: -.TEST_UNIT_READY: DUP 12 - DB #00 - EDUP -; -.OPEN: DB #1B - DB #00,#00,#00 - DB #02 - DB #00,#00,#00,#00,#00,#00,#00 -; -.CLOSE: DB #1B - DB #00,#00,#00 - DB #03 - DB #00,#00,#00,#00,#00,#00,#00 -; -.READ: DB #28,#00 - DB #00,#00,#00,#00 ; sector dword - DB #00 - DB #00,#01,#00,#00 ; counter dword - DB #00 -; -.WRITE: DB #2E,#00 ; write and verify - DB #00,#00,#00,#00 ; sector dword - DB #00 - DB #00,#01,#00,#00 ; counter dword - DB #00 -; -.READ_CAPACITY_DATA: DB #25 - BLOCK 11,0 -; -.REQUEST_SENSE: DB #03 - DB #00,#00,#00 - DB MAX_DATA_PACKET_FOR_REQUEST_SENSE - DB #00,#00,#00,#00,#00,#00,#00 -; -ATAPI_PACKET: -.SECTOR EQU 2 -.COUNTER EQU 7 -//////////////////////////////////////////////////////////////////////// - - -; ᫨ 訡 media changed, ⠢ HDD_INIT_TABLE.MediaParameters = 3 -; FF SectorSize. -; ᫥ 祭 ⠪ 訡 뢠 BIOS.DRV_DETECT ᫨ , ReScanDRV +;[x] 18/12/2023. / API CD-ROM (ATAPI) +; +;CD ROM DRIVE DRIVER +;--------------------------------------------------------------- +;Rev Date Name Description +;--------------------------------------------------------------- +; 02-08-2001 DNS Initial this module +;--------------------------------------------------------------- +;======================================================== + +;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO +; +; [ ] ⠭ ࠬ ᨬ쭮 ࠧ ⥭ १ DRV_SET_PAR +; +;---------------------------------------------------------------------------------- +MAX_ATAPI_SEC_SIZE EQU 4096/2 +PACKET_SIZE EQU 12 ; !FIXIT IDENTIFY PACKET DEVICE +RAM_ATAPI_PK EQU SYS_PAGE.SHARED_BUFFER_32b +RAM_ATAPI_RW_CMD EQU SYS_PAGE.SHARED_BUFFER_32b+16 +MAX_DATA_PACKET_FOR_REQUEST_SENSE EQU 254 + + +_ZIP_WAITS_ EQU 128 + + ASSERT ((PACKET_SIZE % 4) = 0), "PACKET_SIZE must be an even number" + +;[]================================================================[#50] +; IN: A - 4..7 - ⨯ ன⢠, 0..3 - ன⢠ +; B - 㭪樨: +; 1 - 512 ⮢ Identify Device +; 2 - , ਩ 訢 ன⢠ +; HL - 71 ன⢠ +; OUT: NC - 訢 +; F - A 訡 +ATAPI_5x_GET_DRIVE_NAME: + LD C,IDE.Device.ATAPI + LD E,IDE.CMD.ATAPI.IdentifyPacketDevice + JP ATAxx_IdentifyDevice +;[]================================================================[#50] + + +;[]================================================================[#51] +ATAPI_5x_RESET: LD C,IDE.Device.ATAPI + CALL SELECT_DRIVE + RET C + LD B,50 +.loop: PUSH BC + CALL EXEC_TEST_CMD + ;!FIXIT ;[ ] sector size. ᤥ २ HDD_INIT_TABLE + POP BC + RET NC + LD C,A + ; + ;CALL ATAPI_CHECK_MEDIA_CHANGED.noWait + ;RET C + CP BIOS.Error.ATAPI.UnitAttention + SCF + RET Z + ; + CP BIOS.Error.ATAPI.MediumError + SCF + RET Z + ; ண 뢠 + ; EI + ; HALT + EXX + XOR A +.pause_loop: LD B,A + DJNZ $ + DEC A + JR NZ,.pause_loop + EXX + DJNZ .loop + LD A,C + AND A + ;RET Z + SCF + RET +;[]================================================================[#51] + + +;[]================================================================[#58] +;Function: Get Current Media Parameters +; A - Disk +;Return: +; H - Heads ; [ ] For ATAPI HL:DE - media size in sectors +; L - Sectors per cylinder ; +; DE - Cylinders ; +; IX - Capacity sector in bytes +; B - Flags: MASTER/SLAVE, LBA/CHS +; [ ] A - HDD_INIT_TABLE.MediaParameters +; IF media changed +; [ ] CF' = 1, A' = error number UnitAttention +ATAPI_5x_GET_PAR: + LD C,IDE.Device.ATAPI + CALL SELECT_DRIVE + RET C + ; +.DriveSelected: IN A,(SLOT3) + AND A + PUSH AF + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + ; + ; [ ] sector size. media changed + RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media + CALL ATAPI_CHECK_MEDIA_CHANGED + EX AF,AF' + POP AF + EX AF,AF' + JR NC,.get_data + ; + CP BIOS.Error.ATAPI.UnitAttention + JR Z,.UnitAttention + ; + CP BIOS.Error.ATAPI.MediumError + JR NZ,.unknown_error + ;!FIXIT + LD A,BIOS.Error.ATAPI.UnitAttention ;!FIXIT + RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media + ; +.unknown_error: LD HL,#FFFF + LD D,H + LD E,L + PUSH HL + POP IX + SCF + EX AF,AF' ; ᪨㥬 訡, 砫쭮 CF=1 ⮫쪮 ᫨ ன⢮ + OUT (SLOT3),A + RET + ; +.UnitAttention: RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media + EX AF,AF' + SCF + EX AF,AF' +.get_data: LD A,(IY+IDE.HDD_INIT_TABLE.MediaParameters) + AND %000'0100 + CALL NZ,.RereadCapacity + ; + LD A,(IY+IDE.HDD_INIT_TABLE.MediaParameters) + LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) + ; [ ] sector size + LD E,(IY+IDE.HDD_INIT_TABLE.SectorSize) + LD D,(IY+IDE.HDD_INIT_TABLE.SectorSize + 1) + LD XL,E + LD XH,D + ; [ ] media size + LD L,(IY+IDE.HDD_INIT_TABLE.MediaSizeHigh) + LD H,(IY+IDE.HDD_INIT_TABLE.MediaSizeHigh+1) + LD E,(IY+IDE.HDD_INIT_TABLE.MediaSizeLow) + LD D,(IY+IDE.HDD_INIT_TABLE.MediaSizeLow+1) + ; + EX AF,AF' + OUT (SLOT3),A + LD A,BIOS.Error.ATAPI.UnitAttention ; ᫨ CF, 訡 + EX AF,AF + RET +.RereadCapacity: + EX AF,AF' + PUSH AF + CALL GET_ATAPI_CAPACITY + POP AF + EX AF,AF' + RET +;[]================================================================[#58] + + +;[]================================================================[#59] +; [ ] media changed +ATAPI_5x_SET_PAR: + LD L,B + LD C,IDE.Device.ATAPI + CALL SELECT_DRIVE + RET C + ; + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + ; + LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),B + EX AF,AF + OUT (SLOT3),A + RET +;[]================================================================[#59] + + + +;!TODO +; atapi.pdf . 24 /⥭ ᨬ묨 ᪮쪮 室 +;[]================================================================[#55] +;Function: Read Sectors +; A - Disk +; HL:IX - Sector +; DE - Address +; B - Sector counter +;Return: +; HL:IX - Sector + Sector counter +; DE - Address + (Sector counter * Size sector) +;READ SECTOR(S) +ATAPI_5x_READ: ;PUSH IY ; !FIXIT 祬? + LD C,0 ; ਧ short + EX AF,AF' + IN A,(SLOT3) + EX AF,AF' + JR ATAPI_5x_LONG_READ.main +;[]================================================================[#52] +;Function: Long Read Sectors +; A - Disk +; HL:IX - Sector +; DE - Address +; B - Sector counter +; A'- Memory Page Number +;Return: +; HL:IX - Sector + Sector counter +; DE - Address + (Sector counter * Size sector) +;LONG READ SECTOR(S) +ATAPI_5x_LONG_READ: + ;AND A + ; + ;PUSH IY ; !FIXIT 祬? + LD C,1 ; ਧ long +.main: EX AF,AF' + AND A ;read + EX AF,AF' + JR ATAPI_BEGIN_RW + ; + ; SAFE_PORTY_2 + ; PUSH BC + ; PUSH IX + ; PUSH HL + ; ; + ; CALL RW_ATAPI_SECTORs + ; ; [ ] sector size. media changed + ; JP ATA_5x_LONG_READ.shared + ; JP NC,ATA_5x_LONG_READ.shared + ; CP BIOS.Error.UnitAttention + ; JR Z,ATAPI_MEDIA_ERROR + ; SCF +;[]================================================================[#52] +; INPUT: +; A - Disk +; HL:IX - Sector +; DE - Address +; B - Sector counter +; A'- Memory Page Number +; CF'=1 - write, CF'=0 - read +; +; OUTPUT: +; +RW_ATAPI_SECTORs: + PUSH BC + LD C,IDE.Device.ATAPI + CALL SELECT_DRIVE + POP BC + RET C + ; + EXX + LD C,SLOT3 + IN B,(C) + PUSH BC + LD A,SYS_PAGE + OUT (C),A + ; [ ] media change + LD A,(IY + IDE.HDD_INIT_TABLE.MediaParameters) + AND %0000'0010 + JR NZ,.error_media + ; + LD HL,ATAPI_CMD_PACKET.READ + EX AF,AF' + JR NC,.read_cmd + LD HL,ATAPI_CMD_PACKET.WRITE +.read_cmd: EX AF,AF' + LD DE,RAM_ATAPI_RW_CMD + LD BC,PACKET_SIZE + LDIR + EXX + ; + LD A,H + LD H,L + LD L,A + LD (RAM_ATAPI_RW_CMD + ATAPI_PACKET.SECTOR+0),HL + LD A,XH + LD (RAM_ATAPI_RW_CMD + ATAPI_PACKET.SECTOR+2),A ;R01 + LD A,XL + LD (RAM_ATAPI_RW_CMD + ATAPI_PACKET.SECTOR+3),A ;R01 + LD A,B + LD (RAM_ATAPI_RW_CMD + ATAPI_PACKET.COUNTER+1),A ;R01 + ; + LD YL,C ; ਧ short/long C YL + LD HL,RAM_ATAPI_RW_CMD + CALL EXEC_PACKET_COMMAND.start + ; +.exit: POP BC + OUT (C),B + RET + ; +.error_media: EXX + LD A,BIOS.Error.ATAPI.UnitAttention + SCF + JR .exit + +;[]===========================================================[#52, #55] + +ATAPI_BEGIN_RW: SAFE_PORTY_2 + PUSH BC + PUSH IX + PUSH HL + ; + CALL RW_ATAPI_SECTORs + ; + JP ATA_5x_LONG_READ.shared + +;[]================================================================[#56] +;Function: Write Sectors +; A - Disk +; HL:IX - Sector +; DE - Address +; B - Sector counter +;Return: +; HL:IX - Sector + Sector counter +; DE - Address + (Sector counter * Size sector) +;WRITE SECTOR(S) +ATAPI_5x_WRITE: ;PUSH IY ; !FIXIT 祬? + ; ஡ + LD C,0 ; ਧ short + ;LD C,1 ; ਧ long + ; + EX AF,AF' + IN A,(SLOT3) + EX AF,AF' + JR ATAPI_5x_LONG_WRITE.main +;[]================================================================[#53] +;Function: Long Write Sectors +; A - Disk +; HL:IX - Sector +; DE - Address +; B - Sector counter +; A'- Memory Page Number +;Return: +; HL:IX - Sector + Sector counter +; DE - Address + (Sector counter * Size sector) +;WRITE SECTOR(S) +ATAPI_5x_LONG_WRITE: + ;AND A + ; + ;PUSH IY ; !FIXIT 祬? + LD C,1 ; ਧ long +.main: EX AF,AF' + SCF ;write + EX AF,AF' + JR ATAPI_BEGIN_RW +;[]================================================================[#53] + +;[]================================================================[#57] +;Function: Detect Disk +; A - Disk +;Return: CF=0 - A=Drive type +; B=MediaParameters byte ; [ ] media change +; CF=1 - drive not present, A=#02 +ATAPI_5x_DETECT: + LD C,IDE.Device.ATAPI + JP ATA_5x_DETECT.shared +;[]================================================================[#57] + +;[]================================================================[#5E] +; [ ] +;Function: Extended +; A - Disk +; B - SubFunction +;Return: +; [ ] ᯨ +ATAPI_5x_Extended: + LD C,IDE.Device.ATAPI + CALL SELECT_DRIVE + RET C + ; + LD A,B + CP 2 + JR C,TRAY_FN ; B = 0 1 + ; + JR Z,ATAPI_REQUEST_SENSE ; B = 2 + ; + CP 3 + JR Z,ATAPI_CUSTOM_CMD + ; ... + LD A,BIOS.Error.InvalidSubFunction + SCF + RET +;[]================================================================[#5E] + +;----------------------------------------------------------------------;!TODO ᤥ 㯭 १ ७ 㭪 API +; 室: DE - +ATAPI_REQUEST_SENSE: + IN A,(SLOT3) + EX AF,AF' +.FN: LD HL,ATAPI_CMD_PACKET.REQUEST_SENSE + JR EXEC_PACKET_COMMAND.start +;----------------------------------------------------------------------; + +;[ ] media changed +;----------------------------------------------------------------------; +ATAPI_CHECK_MEDIA_CHANGED: + CALL EXEC_TEST_CMD ;!FIXIT + RET C + ; +.next_check: EXX + LD C,SLOT3 + IN B,(C) + LD A,SYS_PAGE + OUT (C),A + ; + LD A,(IY + IDE.HDD_INIT_TABLE.MediaParameters) + OUT (C),B + EXX + RRA + RRA + LD A,BIOS.Error.ATAPI.UnitAttention + RET +;----------------------------------------------------------------------; + + + +;----------------------------------------------------------------------; +; HL - 㪠⥫ ( ன ᫮) +; DE - 㪠⥫ +ATAPI_CUSTOM_CMD: + IN A,(SLOT3) + EX AF,AF' + LD A,1 ; ਧ, 訡 ᬥ ⥫ ࠡ뢠 EXEC_PACKET_COMMAND + JP EXEC_PACKET_COMMAND.start_custom +;----------------------------------------------------------------------; + + +;----------------------------------------------------------------------; +TRAY_FN: LD HL,ATAPI_CMD_PACKET.CLOSE + LD DE,0 ; થ ⮣, 㦭 ன⢠ + DEC A + JR Z,EXEC_PACKET_COMMAND.start + LD HL,ATAPI_CMD_PACKET.OPEN + JR EXEC_PACKET_COMMAND.start + +; INPUT: HL - AP packet (12bytes) +; DE - address for/with data if needed +; A' - 砫쭠 ࠭ R/W Long +; +; RETURN: CF - ERROR +; !FIXIT ࠢ +; !TODO CD ERRORS to INCLUDES +; #01 - RECOVERED ERROR +; #02 - NOT READY +; #03 - MEDIUM ERROR +; #04 - HARDWARE ERROR +; #05 - ILLEGAL REQUEST +; #06 - UNIT ATTETION +; #07 - DATA PROTECT +; #0B - ABORTED COMMAND +; #80 - TIME OUT +EXEC_PACKET_COMMAND: +.error_ex: EX DE,HL +.error: CP #FF +.error_fail: SCF + RET NZ + LD A,BIOS.Error.Failure + RET + ; +.error_TimeOut: CP #FF + EX DE,HL + JR Z,.error_fail + LD A,BIOS.Error.ATAPI.TimeOut + SCF + RET + ; + ; +; +.start: XOR A ; ਧ ⮣, 訡 ᬥ ⥫ ࠡ뢠 EXEC_PACKET_COMMAND +.start_custom: EXX + LD C,A ; ਧ ⮣, 訡 ᬥ ⥫ ࠡ뢠 EXEC_PACKET_COMMAND + CALL ATAPI_WAITPRT + EXX + JR NC,.READY + ; +.reset: LD BC,IDE.Write.Command + LD A,IDE.CMD.ATAPI.Reset + OUT (C),A + ; + LD B,#80 +.pause: DJNZ .pause + ; + EXX + CALL ATAPI_WAITPRT + EXX + JR C,.error_ex + ; +.READY: LD C,SLOT3 + IN B,(C) + PUSH DE + PUSH BC + ; + LD A,SYS_PAGE + OUT (C),A + LD DE,RAM_ATAPI_PK ;!FIXIT ⥪ 뤥 ? + LD BC,PACKET_SIZE + LDIR + ; + POP BC + POP DE + OUT (C),B + ; + XOR A + EXX + LD H,C ; ਧ ⮣, 訡 ᬥ ⥫ ࠡ뢠 EXEC_PACKET_COMMAND + LD BC,IDE.Write.Features + OUT (C),A + LD DE,MAX_ATAPI_SEC_SIZE ;SIZE BLOCK ;!HARDCODE ⠢ ६ - + LD BC,IDE.Write.ByteCountLow + OUT (C),E + LD BC,IDE.Write.ByteCountHigh + OUT (C),D + LD BC,IDE.Write.Command + LD A,IDE.CMD.ATAPI.Packet + OUT (C),A + LD C,H ; ਧ ⮣, 訡 ᬥ ⥫ ࠡ뢠 EXEC_PACKET_COMMAND + CALL ATAPI_WAITPRT + EXX + JR C,.error_ex + ; + EXX + LD DE,256*(IDE.CtrlByte.DataRequest+IDE.CtrlByte.Error)+IDE.CtrlByte.DataRequest + CALL ATAPI_WAITPRT.Custom + EXX + JR C,.error_TimeOut + ; + ; EXEC ATAPI PACKET COMMAND +.YEP_DRQ: LD C,SLOT3 + IN B,(C) + PUSH BC + LD A,SYS_PAGE + OUT (SLOT3),A + LD HL,RAM_ATAPI_PK + LD BC,IDE.Write.Data + LD A,PACKET_SIZE/4 ; !FIXIT IDENTIFY PACKET DEVICE +.OUTPKT: OUTI + OUTI + OUTI + OUTI + DEC A + JR NZ,.OUTPKT + ; + POP BC + OUT (C),B + ; pause + ; LD B,0 + ; DJNZ $ + ; DJNZ $ + ; + EX AF,AF' + LD XH,A ; ࠭ R/W_LONG + EX AF,AF' + ;A=0 + LD XL,A + EX DE,HL + ; +.AP_LOOP: ;CALL ATAPI_WAITPRT.wait_NZ + LD B,_ZIP_WAITS_ + DJNZ $ + CALL ATAPI_CHECK_DRV + JP C,.error;_APLOOP + RET Z + ;====== IF DATA REQUEST ===============================================; + IN A,(SLOT3) + EX AF,AF' ;>-----------> \ + ; + LD A,XH + OUT (SLOT3),A + CALL ATAPI_PREPARE_RW + RET NC + JR Z,.WRITE_DATA + ;READ +.read_loop: INI + INI + DEC DE + LD A,D + OR E + JR NZ,.read_loop + ; +.return_rw: EX AF,AF' ;<-----------< / + INC XL ;INC LOADED SECTORS + OUT (SLOT3),A + ; + LD A,H + OR L + JR NZ,.AP_LOOP + ; short/long + ; A = 0 + SUB YL + JR NC,.END_BUFFER + ; next page in mem block + CALL CHANGE_MEM_BLK + JR .AP_LOOP + ;WRITE +.WRITE_DATA: INC B ; LD BC,IDE.Write.Data +.write_loop: OUTI + OUTI + DEC DE + LD A,D + OR E + JR NZ,.write_loop + JR .return_rw + ; ; +.END_BUFFER: ;CALL ATAPI_WAITPRT.wait_NZ + LD B,_ZIP_WAITS_ + DJNZ $ + CALL ATAPI_CHECK_DRV + JP C,.error + JR NZ,ATAPI_IdlePasses.Enter + RET + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ATAPI_IdlePasses: + LD B,_ZIP_WAITS_ + DJNZ $ + CALL ATAPI_CHECK_DRV + JP C,EXEC_PACKET_COMMAND.error + JP Z,EXEC_PACKET_COMMAND.error_fail + ; +.Enter: CALL ATAPI_PREPARE_RW + RET NC + JR Z,.write_data + ; +.read_loop: IN F,(C) ; ⠥ 1 ࠧ ⭮ , ⠥ WORD + DEC DE + LD A,D + OR E + JR NZ,.read_loop + JR ATAPI_IdlePasses + ; +.write_data: ; A = 0 + OUT (C),A ; 0 ॣ IDE + INC B +.write_loop: XOR A + OUT (C),A ; 襬 1 ࠧ , WORD + DEC DE + LD A,D + OR E + JR NZ,.write_loop + JR ATAPI_IdlePasses + ; +; 室: +; CF,ZF ATAPI_WAITPRT Error Check Condition 譥 ࠡ⪮ +; ZF No errors, no data request +; NZ,NC DATA REQUEST +; CF Error +ATAPI_CHECK_DRV: + ;EX DE,HL + EXX + ;CALL .zeroWait + CALL ATAPI_WAITPRT + EXX + ; ZF=1 + RET C + ; + ; [ ] media change. ? ;!FIXIT ஢ ⥫ + LD A,high IDE.Read.Status + IN A,(low IDE.Read.Status) + ; + AND IDE.CtrlByte.DataRequest + IDE.CtrlByte.Error + RET Z ;NO DATA REQUEST. A = 0: BIOS.Error.NoErrors + RRA ; Checking IDE.CtrlByte.CheckCondition + RET NC ; DataRequest CF=0, ZF=0 + ; + CALL ATAPI_GET_ERROR_REG + EXX + DEC C ; ਧ ⮣, 訡 ᬥ ⥫ ࠡ뢠 EXEC_PACKET_COMMAND + EXX + SCF + RET Z ; 室, ᫨ 訡 ࠡ뢠 EXEC_PACKET_COMMAND + ; + ; CP BIOS.Error.ATAPI.NoSence + ; JP Z,ATAPI_MEDIA_ERROR + CP BIOS.Error.ATAPI.NotReady + JP Z,ATAPI_MEDIA_ERROR + CP BIOS.Error.ATAPI.UnitAttention + JP Z,ATAPI_MEDIA_ERROR + ; + ;CP BIOS.Error.ATAPI.IllegalRequest + ;RET Z + ; + SCF + RET + ; + +ATAPI_PREPARE_RW: + LD BC,IDE.Read.ByteCountLow + IN E,(C) + INC C ;LD BC,IDE.Read.ByteCountHigh + IN D,(C) ;TRANSFER BLOCK SIZE + ; + LD A,D + OR E + RET Z ;BLOCK = 0 + ; + ; 㬥蠥 稪 㦠 ⮢ 2 ࠧ. ⠥ 2 + SRL D + RR E + ; + LD BC,IDE.Read.InterruptReason + IN A,(C) + AND IDE.InterruptReasonByte.IO + LD BC,IDE.Read.Data + SCF + RET +;----------------------------------------------------------------------; + + +;----------------------------------------------------------------------; +; ⨬ ⮫쪮 ॣ AF +ATAPI_GET_ERROR_REG: + XOR A ;LD BC,IDE.Read.Error + IN A,(IDE.Read.Error) ;IN A,(C) + RRCA + RRCA + RRCA + RRCA + AND #0F + OR BIOS.Error.ATAPI + RET +;----------------------------------------------------------------------; + + + +;----------------------------------------------------------------------; +; D - MASK, E - PATTERN +; !!! 㭪樨 , 室 ᥣ ZF +; ண ॣ. C +ATAPI_WAITPRT: LD DE,256*IDE.CtrlByte.Busy + 0 +.Custom: LD B,9 ; 3 = প ᥪ㭤 + LD HL,#0000 + ; 4128768 +.LOOP: LD A,high IDE.Read.Status + IN A,(low IDE.Read.Status) + CP #FF + SCF + RET Z + ; + AND D + CP E + RET Z + ; + DEC HL + LD A,H + OR L + JR NZ,.LOOP + DJNZ .LOOP + ; + LD A,BIOS.Error.Busy + SCF + RET +;----------------------------------------------------------------------; + + +;----------------------------------------------------------------------; +; DE - buffer +ATAPI_READ_CAPACITY_DATA: + LD BC,28 ;稪 + ; +.loop: PUSH BC + PUSH DE + LD A,SYS_PAGE + EX AF,AF' + LD A,1 + LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA + CALL EXEC_PACKET_COMMAND.start_custom + POP DE + POP BC + RET NC + ; + CALL ATAPI_GET_ERROR_REG + CP BIOS.Error.ATAPI.NotReady + SCF + RET NZ + ; + PUSH BC + CALL ATAPI_MEDIA_ERROR + CP BIOS.Error.ATAPI.NotReady + SCF + POP BC + RET NZ + ; + CPI + RET PO ;稪 + ; + LD HL,0 +.pause: DEC HL + LD A,H + OR L + JR NZ,.pause + ; + JP .loop + ;RET +;----------------------------------------------------------------------; + + +;----------------------------------------------------------------------; +ATAPI_MEDIA_ERROR: + PUSH IX + PUSH HL + ; + IN A,(SLOT3) + PUSH AF + LD A,SYS_PAGE + OUT (SLOT3),A + EX AF,AF' ; set page with buffer to SYS_PAGE + LD DE,SYS_PAGE.SHARED_BUFFER_256b + CALL ATAPI_REQUEST_SENSE.FN + ; + LD A,(SYS_PAGE.SHARED_BUFFER_256b + 2) ; SenceKey + CP 2 ; NOT READY + JR Z,.Not_Ready + CP 6 ; UNIT ATTENTION + JR NZ,.unkn_error + ; + LD A,(SYS_PAGE.SHARED_BUFFER_256b + 12) ; AdditionalSenceKey + CP #28 ; NOT READY TO READY TRANSITION + JR Z,.MedCh3 + CP #29 ; POWER ON, RESET OR BUS DEVICE RESET OCCURRED + JR Z,.MedChanged + JR .unkn_error + ; +.MedCh3: LD A,(SYS_PAGE.SHARED_BUFFER_256b + 13) ; AdditionalSenseCodeQualifier. 0 + AND A + JR NZ,.unkn_error + ; +.MedChanged: LD A,(IY + IDE.HDD_INIT_TABLE.MediaParameters) + OR %0000'0011 + LD (IY + IDE.HDD_INIT_TABLE.MediaParameters),A + ; + CALL GET_ATAPI_CAPACITY +.exit: POP AF + POP HL + POP IX + OUT (SLOT3),A + LD A,C + SCF + RET + ; +.Not_Ready: LD A,(SYS_PAGE.SHARED_BUFFER_256b + 12) ; AdditionalSenceKey + LD C,BIOS.Error.ATAPI.MediumError ; ⥫ + ;!TODO + ; 06,00 - NO REFERENCE POSITION FOUND (media may be upside down) + ; 3A - MEDIUM NOT PRESENT + ; + CP 4 + JR NZ,.exit + ; [ ] !(test for ZIP) + LD A,(SYS_PAGE.SHARED_BUFFER_256b + 13) ; AdditionalSenseCodeQualifier + CP 1 ; LOGICAL DRIVE NOT READY - IN PROGRESS OF BECOMING READY + JR NZ,.exit + ; + ; 樠 + LD C,BIOS.Error.ATAPI.NotReady + JR .exit + ; +.unkn_error: LD C,BIOS.Error.ATAPI.MediumError + JR .exit + + +;----------------------------------------------------------------------; +GET_ATAPI_CAPACITY: + ; + LD DE,SYS_PAGE.TMP_BUFFER + CALL ATAPI_READ_CAPACITY_DATA + ; + LD HL,#FFFF + LD C,BIOS.Error.ATAPI.MediumError + JR C,.No_Media + ; + LD HL,(SYS_PAGE.TMP_BUFFER) ; media size high + LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh),H + LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh+1),L + LD HL,(SYS_PAGE.TMP_BUFFER + 2) ; media size low + LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow),H + LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow+1),L + LD HL,(SYS_PAGE.TMP_BUFFER + 6) ; sector size + ; + LD C,BIOS.Error.ATAPI.UnitAttention +.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H ;[ ] sector size + LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L + RET NC + SET 2,(IY + IDE.HDD_INIT_TABLE.MediaParameters) + RET +;----------------------------------------------------------------------; + +;----------------------------------------------------------------------; + +; !!! SELECT_DRIVE ࠡ ࠭ +EXEC_TEST_CMD: LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY + LD DE,0 ; થ ⮣, 㦭 ன⢠ + JP EXEC_PACKET_COMMAND.start + +//////////////////////////////////////////////////////////////////////// +ATAPI_CMD_PACKET: +.TEST_UNIT_READY: DUP 12 + DB #00 + EDUP +; +.OPEN: DB #1B + DB #00,#00,#00 + DB #02 + DB #00,#00,#00,#00,#00,#00,#00 +; +.CLOSE: DB #1B + DB #00,#00,#00 + DB #03 + DB #00,#00,#00,#00,#00,#00,#00 +; +.READ: DB #28,#00 + DB #00,#00,#00,#00 ; sector dword + DB #00 + DB #00,#01,#00,#00 ; counter dword + DB #00 +; +.WRITE: DB #2E,#00 ; write and verify + DB #00,#00,#00,#00 ; sector dword + DB #00 + DB #00,#01,#00,#00 ; counter dword + DB #00 +; +.READ_CAPACITY_DATA: DB #25 + BLOCK 11,0 +; +.REQUEST_SENSE: DB #03 + DB #00,#00,#00 + DB MAX_DATA_PACKET_FOR_REQUEST_SENSE + DB #00,#00,#00,#00,#00,#00,#00 +; +ATAPI_PACKET: +.SECTOR EQU 2 +.COUNTER EQU 7 +//////////////////////////////////////////////////////////////////////// + + +; ᫨ 訡 media changed, ⠢ HDD_INIT_TABLE.MediaParameters = 3 +; FF SectorSize. +; ᫥ 祭 ⠪ 訡 뢠 BIOS.DRV_DETECT ᫨ , ReScanDRV diff --git a/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM b/bios/exp/EXTENDED/IDE/ATA_DRV.ASM similarity index 95% rename from src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM rename to bios/exp/EXTENDED/IDE/ATA_DRV.ASM index c9e0afa..d78e5bf 100644 --- a/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM +++ b/bios/exp/EXTENDED/IDE/ATA_DRV.ASM @@ -1,671 +1,671 @@ - -;======================================================== -;R03 !25.07.2001! BUG FIX WITH RETURN ERROR CODE -;R02 !24.07.2001! ADD SECONDARY CHANEL -;R01 !16.08.2000! REMOVED "DI" - -/* -;Write -IDE.Write.Command EQU #4153 ; #1F7 Command -IDE.Write.DeviceHead EQU #4152 ; #1F6 Drive Control - -HDW_CLH EQU #0155 ; #1F5 Cylinder High -HDW_CLL EQU #0154 ; #1F4 Cylinder Low -HDW_SEC EQU #0153 ; #1F3 Sector -HDW_CNT EQU #0152 ; #1F2 Counter -HDW_ERR EQU #0151 ; #1F1 Error -HDW_DAT EQU #0150 ; #1F0 Data - -;Read -IDE.Read.Status EQU #4053 ; #1F7 Status (Control) -HDR_DRV EQU #4052 ; #1F6 Drive Control - -HDR_CLH EQU #0055 ; #1F5 Cylinder High -HDR_CLL EQU #0054 ; #1F4 Cylinder Low -HDR_SEC EQU #0053 ; #1F3 Sector -HDR_CNT EQU #0052 ; #1F2 Counter -HDR_ERR EQU #0051 ; #1F1 Error -HDR_DAT EQU #0050 ; #1F0 Data - -;Bits for IDE.Read.Status -;---[] -BSY EQU 7 -RDY EQU 6 -DRQ EQU 3 -ERR EQU 0 -;---[] - -HDD EQU 1 -CDROM EQU 2 - - -;EQU FOR IY+ -IDE.HDD_INIT_TABLE.DRV_Flags EQU 0 -IDE.HDD_INIT_TABLE.SectorsPerTrack EQU 1 -IDE.HDD_INIT_TABLE.HeadsNumber EQU 2 -IDE.HDD_INIT_TABLE.CylinderNumberLow EQU 3 -IDE.HDD_INIT_TABLE.CylinderNumberHigh EQU 4 -IDE.HDD_INIT_TABLE.SectorsPerCylinderLow EQU 5 -IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh EQU 6 -DTYPE_H EQU 7 - -IDE0 EQU #C1C0 -IDE1 EQU #C1C8 -IDE2 EQU #C1D0 -IDE3 EQU #C1D8 -*/ - -;IDE0 DB #FF ;DRIVE/HEAD REGISTER ;00 -; DB #FF ;SECTORS PER TRACK ;01 -; DB #FF ;HEADS ;02 -; DB #FF ;CYLINDERS LOW ;03 -; DB #FF ;CYLINDERS HIGH ;04 -; DB #FF ;SECTOR PER CYLINDER LOW ;05 -; DB #FF ;SECTOR PER CYLINDER HIGH ;06 -; DB #FF ;RESERVED ;07 - -;IDE1 DB #FF ;DRIVE/HEAD REGISTER ;00 -; DB #FF ;SECTORS PER TRACK ;01 -; DB #FF ;HEADS ;02 -; DB #FF ;CYLINDERS LOW ;03 -; DB #FF ;CYLINDERS HIGH ;04 -; DB #FF ;SECTOR PER CYLINDER LOW ;05 -; DB #FF ;SECTOR PER CYLINDER HIGH ;06 -; DB #FF ;RESERVED ;07 - -WRITE_OUTI_DUPs EQU 32 ; bytes - - - -;[]================================================================[#50] -; IN: A - 4..7 - ⨯ ன⢠, 0..3 - ன⢠ -; B - 㭪樨: -; 1 - 512 ⮢ Identify Device -; 2 - , ਩ 訢 ன⢠ -; HL - 71 ன⢠ -; OUT: NC - 訢 -; F - A 訡 -ATA_5x_GET_DRIVE_NAME: - LD C,IDE.Device.HDD - LD E,IDE.CMD.ATA.IdentifyDevice - JP ATAxx_IdentifyDevice -;[]================================================================[#50] - - -;[]================================================================[#51] -;Function: Reset drive -ATA_5x_RESET: ; !FIXIT ? -;For non-ATAPI drives, the only method a driver has of resetting a drive -; after a major error is to do a "software reset" on the bus. -; Set bit 2 (SRST, value = 4) in the proper Control Register for the -; bus. This will reset both ATA devices on the bus. Then, you have to -; clear that bit again, yourself. The master drive on the bus is -; automatically selected. - XOR A - RET -;[]================================================================[#51] - - -;[]================================================================[#58] -;Function: Get Current Media Parameters -; A - Disk -;Return: -; H - Heads -; L - Sectors per cylinder -; DE - Cylinders -; IX - Capacity sector in bytes -; B - Flags: MASTER/SLAVE, LBA/CHS -ATA_5x_GET_PAR: - LD C,IDE.Device.HDD - CALL SELECT_DRIVE - RET C - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,(IY+IDE.HDD_INIT_TABLE.MediaParameters) - LD L,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack) - LD H,(IY+IDE.HDD_INIT_TABLE.HeadsNumber) - LD E,(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow) - LD D,(IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh) - LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) - LD IX,512 ;!HARDCODE ; [ ] sector size - EX AF,AF' - OUT (SLOT3),A - EX AF,AF' - AND A - RET -;[]================================================================[#58] - -;[]================================================================[#59] -;Function: Set Current Media Parameters -; A - Disk -; H - Heads -; L - Sectors -; DE - Cylinders -; IX - Capacity sector in bytes -; B - Flags -;Return: None -ATA_5x_SET_PAR: - LD C,IDE.Device.HDD - CALL SELECT_DRIVE - RET C - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),L - LD (IY+IDE.HDD_INIT_TABLE.HeadsNumber),H - LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberLow),E - LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),D - LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),B - ;!TODO ; [ ] sector size - ;!TODO ; [ ] UnitAttention - EX AF,AF' - OUT (SLOT3),A - ;EX AF,AF' - ;AND A - RET -;[]================================================================[#59] - -;[]================================================================[#55] -;Function: Read Sectors -; A - Disk -; HL:IX - Sector -; DE - Address -; B - Sector counter -;Return: -; HL:IX - Sector + Sector counter -; DE - Address + (Sector counter * Size sector) -;READ SECTOR(S) -ATA_5x_READ: ;PUSH IY ; !FIXIT 祬? - LD C,0 ; ਧ short - EX AF,AF' - IN A,(SLOT3) - EX AF,AF' - JP ATA_5x_LONG_READ.main -;[]================================================================[#52] -;Function: Long Read Sectors -; A - Disk -; HL:IX - Sector -; DE - Address -; B - Sector counter, 0 = 256 -; A'- Memory Page Number -;Return: -; HL:IX - Sector + Sector counter -; DE - Address + (Sector counter * Size sector) -; A' - Last mem page in RAM Block used for readed data -;LONG READ SECTOR(S) -ATA_5x_LONG_READ: - ;PUSH IY ; !FIXIT 祬? - LD C,1 ; ਧ long -.main: SAFE_PORTY_2 - PUSH BC - PUSH IX - PUSH HL - ; - EX AF,AF' - AND A ;read - EX AF,AF' - CALL RW_ATA_SECTORs - ; -.shared: EX DE,HL - JR C,.error - LD A,XH ; current page in mem block for SLOT3 - EX AF,AF' - ; - POP HL - POP IX - POP BC - ; HL:IX + B. ᫨ B=0, B=256 - XOR A - CP B - LD C,B - CCF - RLA - LD B,A - ADD IX,BC - JR NC,.exit - INC HL - CCF - ; -.exit: RESTORE_PORTY - ;POP IY - RET - ; -.error: LD B,A ; A - 訡 - LD C,XL - LD A,XH ; current page in mem block for SLOT3 - EX AF,AF' - POP HL - POP IX - PUSH BC - LD B,0 - ADD IX,BC - ; - ;LD C,B - ;ADC HL,BC - JR NC,.no_inc_hl - INC HL -.no_inc_hl: ; - POP BC - POP AF - SUB C - LD C,A - LD A,B - LD B,C - SCF ;R03 - JR .exit -;[]===========================================================[#52, #55] - - -;[]================================================================[#56] -;Function: Write Sectors -; A - Disk -; HL:IX - Sector -; DE - Address -; B - Sector counter -;Return: -; HL:IX - Sector + Sector counter -; DE - Address + (Sector counter * Size sector) -;WRITE SECTOR(S) -ATA_5x_WRITE: ;PUSH IY ; !FIXIT 祬? - LD C,0 ; ਧ short - EX AF,AF' - IN A,(SLOT3) - EX AF,AF' - JP ATA_5x_LONG_WRITE.main -;[]================================================================[#53] -;Function: Long Write Sectors -; A - Disk -; HL:IX - Sector -; DE - Address -; B - Sector counter -; A'- Memory Page Number -;Return: -; HL:IX - Sector + Sector counter -; DE - Address + (Sector counter * Size sector) -;WRITE SECTOR(S) -ATA_5x_LONG_WRITE: - ;PUSH IY ; !FIXIT 祬? - LD C,1 ; ਧ long -.main: SAFE_PORTY_2 - PUSH BC - PUSH IX - PUSH HL - ; - EX AF,AF' - SCF ;write - EX AF,AF' - CALL RW_ATA_SECTORs - ; - JP ATA_5x_LONG_READ.shared - -;; -; !TODO প 8-bit data transfer mode ॢ ⮢ -; A - Disk -; HL:IX - Sector -; DE - Address -; B - Sector counter -; C - short/long -; A'- Memory Page Number -; CF'=1 - write, CF'=0 - read -RW_ATA_SECTORs: PUSH BC ; ਧ short/long C - LD C,IDE.Device.HDD - CALL SELECT_DRIVE - POP BC ; ਧ short/long C - RET C - ; - EXX - LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready) + IDE.CtrlByte.Ready - CALL WAITPRT.custom_DE - EXX - RET C - ; - EX AF,AF' - PUSH AF ; memory page number - PUSH BC ; ਧ short/long C - PUSH DE ; Address - CALL PRESET - ; IY SELECT_DRIVE 㦥 - ; - POP HL ; Address - POP IY ; ਧ short/long YL - POP AF ; memory page number - LD XL,0 - LD XH,A ; memory page number - LD BC,IDE.Write.Command - LD A,IDE.CMD.ATA.WriteSectorsWithRetry - JR C,.set_command ; CF = r/w - ; - LD A,IDE.CMD.ATA.ReadSectorsWithRetry -.set_command: OUT (C),A - EX AF,AF' - EXX - LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.DataRequest+IDE.CtrlByte.Error)+IDE.CtrlByte.DataRequest - CALL WAITPRT.custom_DE - EXX - RET C - ;DI ;R01 REMOVED "DI" -.big_loop: IN A,(SLOT3) - EX AF,AF' ;>-----------> \ - LD A,XH - OUT (SLOT3),A - LD BC,IDE.Read.Data - JR C,.write_sector - ; - ; READ SECTOR 512 bytes ;!HARDCODE sector size -.loop_256_1: DUP 16 - INI - EDUP - JP NZ,.loop_256_1 -.loop_256_2: DUP 16 - INI - EDUP - JP NZ,.loop_256_2 - AND A - ;EX AF,AF' - ; ; ; ; ; - ; CF=0 -.return_rw: EX AF,AF' ;<-----------< / - INC XL ;INC LOADED SECTORS - OUT (SLOT3),A - ; - LD A,H - OR L - JR NZ,.end_pass - ; short/long - ; A = 0 - SUB YL - JR NC,.END_BUFFER - ; next page in mem block - CALL CHANGE_MEM_BLK - ; LD HL,#C000 - ; IN A,(SLOT3) - ; EX AF,AF' ;>-----------> \ - ; LD A,SYS_PAGE - ; OUT (SLOT3),A - ; LD D,high SYS_PAGE.RAM_TABLE - ; LD E,XH - ; LD A,(DE) - ; LD XH,A - ; EX AF,AF' ;<-----------< / - ; OUT (SLOT3),A - ; -.end_pass: ;INC XL ;INC LOADED SECTORS - EXX - CALL WAITPRT - EXX - RET C - ; - ;INC XL ;INC LOADED SECTORS - LD BC,IDE.Read.Status - IN A,(C) - BIT IDE.CtrlBit.DataRequest,A - RET Z - ; - JP .big_loop - ; -.write_sector: ; WRITE SECTOR 512 bytes ;!HARDCODE sector size - INC B ; LD BC,IDE.Write.Data - LD D,512/WRITE_OUTI_DUPs ;!HARDCODE sector size -.loop: DUP WRITE_OUTI_DUPs - OUTI - EDUP - DEC D - JR NZ,.loop - SCF - JP .return_rw - ; ; -.END_BUFFER: CALL ATA_IdlePasses.CHECK_DRV - JR NZ,ATA_IdlePasses.Enter - RET -;;;;;;;;;;;;;;;;; -ATA_IdlePasses: CALL .CHECK_DRV - JR NZ,.Enter - ; - RET C - LD A,BIOS.Error.Failure - SCF - RET - ; -.Enter: XOR A ; 稪 READ_ZEROS, .WrZeros - EX AF,AF' - LD BC,IDE.Read.Data - JR C,.WrZeros - ; READ > /dev/null - EX AF,AF' -.RdLoop: IN F,(C) ; ⠥ 1 ࠧ ⭮ , ⠥ WORD - DEC A - JR NZ,.RdLoop - JR ATA_IdlePasses - ; WRITE ZEROS -.WrZeros: EX AF,AF' - ; -.WrLoop: OUT (C),A - DJNZ .WrLoop - ; -.WrLoop2: OUT (C),A - DJNZ .WrLoop2 - JR ATA_IdlePasses - ; -.CHECK_DRV: EXX - CALL WAITPRT - EXX - RET C - ; - LD BC,IDE.Read.Status - IN A,(C) - BIT IDE.CtrlBit.DataRequest,A - RET -;!TODO 㣨 ன -;; - - -;[]================================================================[#54] -;Function: Verify Sectors -; A - Disk -; HL:IX - Sector -; B - Sector counter -;Return: CF - error -;VERIFY SECTOR(S) -ATA_5x_VERIFY: ;PUSH IY ; !FIXIT 祬? - SAFE_PORTY_2 - PUSH IX - PUSH HL - CALL .VERIFY - POP HL - POP IX - RESTORE_PORTY - ;POP IY - RET -;VERIFY SECTOR(S) -.VERIFY: LD C,IDE.Device.HDD - CALL SELECT_DRIVE - RET C - EXX - LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready) + IDE.CtrlByte.Ready - CALL WAITPRT.custom_DE - EXX - RET C - ;PUSH DE - ; IN A,(SLOT3) - ; PUSH AF - CALL PRESET - ; POP AF - ; OUT (SLOT3),A - ;POP HL - LD BC,IDE.Write.Command - LD A,IDE.CMD.ATA.ReadVerifySectorsWithRetry - OUT (C),A - LD BC,IDE.Read.Status - IN A,(C) - RRA ;BIT IDE.CtrlBit.Error,A : SCF : RET NZ - RET C - ; - JP WAITPRT - ;RET C - ;XOR A - ;RET -;[]================================================================[#54] - - -; HL:IX - LBA SECTOR -; B - SECTOR COUNTER -; 室: SLOT3 = SYS_PAGE -PRESET: LD A,B - LD BC,IDE.Write.Counter - OUT (C),A - ; - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) - LD BC,IDE.Write.DeviceHead - OUT (C),A - ; CHS/LBA ;!FIXIT ᤥ ⪠ - AND %0100'0000 - LD E,XL - LD D,XH - CALL Z,LBA_CHS - LD BC,IDE.Write.Sector - OUT (C),E ;LBA 0..7 - ; - INC C ; LD BC,IDE.Write.CylinderLow - OUT (C),D ;LBA 8..15 - INC C ; LD BC,IDE.Write.CylinderHigh - OUT (C),L ;LBA 16..23 - LD BC,IDE.Read.Control - IN A,(C) - AND #F0 ;!HARDCODE DRIVE/HEAD REGISTER PHISICAL DISK bitmask - OR H ;LBA 24..27 - INC B ; LD BC,IDE.Write.DeviceHead - ; - OUT (C),A - EX AF,AF' - OUT (SLOT3),A - ;AND A - RET -;PRESET ; - - -; HL:DE - SECTOR OFFSET -LBA_CHS: LD C,(IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderLow) - LD B,(IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh) - ; -DIV32X: ;HL:DE / BC => DE:IX HL-OSTATOK - LD XH,D - LD XL,E - EX DE,HL - LD HL,0 - LD A,#20 - ; -.loop: ADD IX,IX - EX DE,HL - ADC HL,HL - EX DE,HL - ADC HL,HL - SBC HL,BC - JR NC,.DIV012 - ; - ADD HL,BC - DEC A - JR NZ,.loop - ; - JR .DIV014 - ; -.DIV012: INC IX - DEC A - JR NZ,.loop - ; -.DIV014: LD E,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack) - LD D,0 - XOR A - ; -.loop2: INC A - SBC HL,DE - JR NC,.loop2 - ; - ADD HL,DE - DEC A - LD H,A - LD E,L - INC E - LD D,XL - LD A,XH - LD L,A - RET - -;----------------------------------------------------------------------; -; D - MASK -; E - PATTERN -; !!! 㭪樨 , 室 ᥣ ZF -WAITPRT: LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error) + IDE.CtrlByte.Ready -.custom_DE: LD HL,#0000 ; প ;!HARDCODE -.custom: LD BC,IDE.Read.Status - ; -.loop: PUSH HL ; 11 -; ;;;;;;;;; -.loop2: IN A,(C) ; 12 - AND D ; 4 - CP E ; 4 - JR Z,.ok ; 7 - ; - DEC HL ; 6 - LD A,L ; 4 - OR H ; 4 - JP NZ,.loop2 ; 10 - ; ;;;;;;;;; 51 - POP HL ; 10 - DEC L ; 4 - JR NZ,.loop ; 12 - ; error ;;;;;;;;; 37 - LD A,BIOS.Error.NotReady - SCF - RET - ; -.ok: POP HL - RET -;----------------------------------------------------------------------; - - -;[]================================================================[#57] -;[x] 18/12/2023. / API CD-ROM (ATAPI) -; [ ] media change -;Function: Detect Disk -; A - Disk -;Return: CF=0 - A=Drive type -; CF=1 - error -ATA_5x_DETECT: LD C,IDE.Device.HDD -.shared: CALL SELECT_DRIVE - RET C - ; - LD B,A - AND %0000'0011 ;[ ] media change । ? ; !FIXIT - JR NZ,.notZero - LD A,C - RET - ; -.notZero: AND %0000'0010 - JR NZ,.UnitAttention - ; C = DriveType - LD A,C - CP IDE.Device.ATAPI - JR Z,.AtapiCheckMedia - ;!FIXIT AtaCheckMedia - ᤥ ; [ ] media change - AND A - RET - ; -.AtapiCheckMedia: - PUSH BC ; B - MediaParameters, C - DriveType - CALL ATAPI_CHECK_MEDIA_CHANGED - POP BC ; B - MediaParameters, C - DriveType - RET C - LD A,C - RET - ; -.UnitAttention: LD A,BIOS.Error.ATAPI.UnitAttention - SCF - RET + +;======================================================== +;R03 !25.07.2001! BUG FIX WITH RETURN ERROR CODE +;R02 !24.07.2001! ADD SECONDARY CHANEL +;R01 !16.08.2000! REMOVED "DI" + +/* +;Write +IDE.Write.Command EQU #4153 ; #1F7 Command +IDE.Write.DeviceHead EQU #4152 ; #1F6 Drive Control + +HDW_CLH EQU #0155 ; #1F5 Cylinder High +HDW_CLL EQU #0154 ; #1F4 Cylinder Low +HDW_SEC EQU #0153 ; #1F3 Sector +HDW_CNT EQU #0152 ; #1F2 Counter +HDW_ERR EQU #0151 ; #1F1 Error +HDW_DAT EQU #0150 ; #1F0 Data + +;Read +IDE.Read.Status EQU #4053 ; #1F7 Status (Control) +HDR_DRV EQU #4052 ; #1F6 Drive Control + +HDR_CLH EQU #0055 ; #1F5 Cylinder High +HDR_CLL EQU #0054 ; #1F4 Cylinder Low +HDR_SEC EQU #0053 ; #1F3 Sector +HDR_CNT EQU #0052 ; #1F2 Counter +HDR_ERR EQU #0051 ; #1F1 Error +HDR_DAT EQU #0050 ; #1F0 Data + +;Bits for IDE.Read.Status +;---[] +BSY EQU 7 +RDY EQU 6 +DRQ EQU 3 +ERR EQU 0 +;---[] + +HDD EQU 1 +CDROM EQU 2 + + +;EQU FOR IY+ +IDE.HDD_INIT_TABLE.DRV_Flags EQU 0 +IDE.HDD_INIT_TABLE.SectorsPerTrack EQU 1 +IDE.HDD_INIT_TABLE.HeadsNumber EQU 2 +IDE.HDD_INIT_TABLE.CylinderNumberLow EQU 3 +IDE.HDD_INIT_TABLE.CylinderNumberHigh EQU 4 +IDE.HDD_INIT_TABLE.SectorsPerCylinderLow EQU 5 +IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh EQU 6 +DTYPE_H EQU 7 + +IDE0 EQU #C1C0 +IDE1 EQU #C1C8 +IDE2 EQU #C1D0 +IDE3 EQU #C1D8 +*/ + +;IDE0 DB #FF ;DRIVE/HEAD REGISTER ;00 +; DB #FF ;SECTORS PER TRACK ;01 +; DB #FF ;HEADS ;02 +; DB #FF ;CYLINDERS LOW ;03 +; DB #FF ;CYLINDERS HIGH ;04 +; DB #FF ;SECTOR PER CYLINDER LOW ;05 +; DB #FF ;SECTOR PER CYLINDER HIGH ;06 +; DB #FF ;RESERVED ;07 + +;IDE1 DB #FF ;DRIVE/HEAD REGISTER ;00 +; DB #FF ;SECTORS PER TRACK ;01 +; DB #FF ;HEADS ;02 +; DB #FF ;CYLINDERS LOW ;03 +; DB #FF ;CYLINDERS HIGH ;04 +; DB #FF ;SECTOR PER CYLINDER LOW ;05 +; DB #FF ;SECTOR PER CYLINDER HIGH ;06 +; DB #FF ;RESERVED ;07 + +WRITE_OUTI_DUPs EQU 32 ; bytes + + + +;[]================================================================[#50] +; IN: A - 4..7 - ⨯ ன⢠, 0..3 - ன⢠ +; B - 㭪樨: +; 1 - 512 ⮢ Identify Device +; 2 - , ਩ 訢 ன⢠ +; HL - 71 ன⢠ +; OUT: NC - 訢 +; F - A 訡 +ATA_5x_GET_DRIVE_NAME: + LD C,IDE.Device.HDD + LD E,IDE.CMD.ATA.IdentifyDevice + JP ATAxx_IdentifyDevice +;[]================================================================[#50] + + +;[]================================================================[#51] +;Function: Reset drive +ATA_5x_RESET: ; !FIXIT ? +;For non-ATAPI drives, the only method a driver has of resetting a drive +; after a major error is to do a "software reset" on the bus. +; Set bit 2 (SRST, value = 4) in the proper Control Register for the +; bus. This will reset both ATA devices on the bus. Then, you have to +; clear that bit again, yourself. The master drive on the bus is +; automatically selected. + XOR A + RET +;[]================================================================[#51] + + +;[]================================================================[#58] +;Function: Get Current Media Parameters +; A - Disk +;Return: +; H - Heads +; L - Sectors per cylinder +; DE - Cylinders +; IX - Capacity sector in bytes +; B - Flags: MASTER/SLAVE, LBA/CHS +ATA_5x_GET_PAR: + LD C,IDE.Device.HDD + CALL SELECT_DRIVE + RET C + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,(IY+IDE.HDD_INIT_TABLE.MediaParameters) + LD L,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack) + LD H,(IY+IDE.HDD_INIT_TABLE.HeadsNumber) + LD E,(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow) + LD D,(IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh) + LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) + LD IX,512 ;!HARDCODE ; [ ] sector size + EX AF,AF' + OUT (SLOT3),A + EX AF,AF' + AND A + RET +;[]================================================================[#58] + +;[]================================================================[#59] +;Function: Set Current Media Parameters +; A - Disk +; H - Heads +; L - Sectors +; DE - Cylinders +; IX - Capacity sector in bytes +; B - Flags +;Return: None +ATA_5x_SET_PAR: + LD C,IDE.Device.HDD + CALL SELECT_DRIVE + RET C + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),L + LD (IY+IDE.HDD_INIT_TABLE.HeadsNumber),H + LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberLow),E + LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),D + LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),B + ;!TODO ; [ ] sector size + ;!TODO ; [ ] UnitAttention + EX AF,AF' + OUT (SLOT3),A + ;EX AF,AF' + ;AND A + RET +;[]================================================================[#59] + +;[]================================================================[#55] +;Function: Read Sectors +; A - Disk +; HL:IX - Sector +; DE - Address +; B - Sector counter +;Return: +; HL:IX - Sector + Sector counter +; DE - Address + (Sector counter * Size sector) +;READ SECTOR(S) +ATA_5x_READ: ;PUSH IY ; !FIXIT 祬? + LD C,0 ; ਧ short + EX AF,AF' + IN A,(SLOT3) + EX AF,AF' + JP ATA_5x_LONG_READ.main +;[]================================================================[#52] +;Function: Long Read Sectors +; A - Disk +; HL:IX - Sector +; DE - Address +; B - Sector counter, 0 = 256 +; A'- Memory Page Number +;Return: +; HL:IX - Sector + Sector counter +; DE - Address + (Sector counter * Size sector) +; A' - Last mem page in RAM Block used for readed data +;LONG READ SECTOR(S) +ATA_5x_LONG_READ: + ;PUSH IY ; !FIXIT 祬? + LD C,1 ; ਧ long +.main: SAFE_PORTY_2 + PUSH BC + PUSH IX + PUSH HL + ; + EX AF,AF' + AND A ;read + EX AF,AF' + CALL RW_ATA_SECTORs + ; +.shared: EX DE,HL + JR C,.error + LD A,XH ; current page in mem block for SLOT3 + EX AF,AF' + ; + POP HL + POP IX + POP BC + ; HL:IX + B. ᫨ B=0, B=256 + XOR A + CP B + LD C,B + CCF + RLA + LD B,A + ADD IX,BC + JR NC,.exit + INC HL + CCF + ; +.exit: RESTORE_PORTY + ;POP IY + RET + ; +.error: LD B,A ; A - 訡 + LD C,XL + LD A,XH ; current page in mem block for SLOT3 + EX AF,AF' + POP HL + POP IX + PUSH BC + LD B,0 + ADD IX,BC + ; + ;LD C,B + ;ADC HL,BC + JR NC,.no_inc_hl + INC HL +.no_inc_hl: ; + POP BC + POP AF + SUB C + LD C,A + LD A,B + LD B,C + SCF ;R03 + JR .exit +;[]===========================================================[#52, #55] + + +;[]================================================================[#56] +;Function: Write Sectors +; A - Disk +; HL:IX - Sector +; DE - Address +; B - Sector counter +;Return: +; HL:IX - Sector + Sector counter +; DE - Address + (Sector counter * Size sector) +;WRITE SECTOR(S) +ATA_5x_WRITE: ;PUSH IY ; !FIXIT 祬? + LD C,0 ; ਧ short + EX AF,AF' + IN A,(SLOT3) + EX AF,AF' + JP ATA_5x_LONG_WRITE.main +;[]================================================================[#53] +;Function: Long Write Sectors +; A - Disk +; HL:IX - Sector +; DE - Address +; B - Sector counter +; A'- Memory Page Number +;Return: +; HL:IX - Sector + Sector counter +; DE - Address + (Sector counter * Size sector) +;WRITE SECTOR(S) +ATA_5x_LONG_WRITE: + ;PUSH IY ; !FIXIT 祬? + LD C,1 ; ਧ long +.main: SAFE_PORTY_2 + PUSH BC + PUSH IX + PUSH HL + ; + EX AF,AF' + SCF ;write + EX AF,AF' + CALL RW_ATA_SECTORs + ; + JP ATA_5x_LONG_READ.shared + +;; +; !TODO প 8-bit data transfer mode ॢ ⮢ +; A - Disk +; HL:IX - Sector +; DE - Address +; B - Sector counter +; C - short/long +; A'- Memory Page Number +; CF'=1 - write, CF'=0 - read +RW_ATA_SECTORs: PUSH BC ; ਧ short/long C + LD C,IDE.Device.HDD + CALL SELECT_DRIVE + POP BC ; ਧ short/long C + RET C + ; + EXX + LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready) + IDE.CtrlByte.Ready + CALL WAITPRT.custom_DE + EXX + RET C + ; + EX AF,AF' + PUSH AF ; memory page number + PUSH BC ; ਧ short/long C + PUSH DE ; Address + CALL PRESET + ; IY SELECT_DRIVE 㦥 + ; + POP HL ; Address + POP IY ; ਧ short/long YL + POP AF ; memory page number + LD XL,0 + LD XH,A ; memory page number + LD BC,IDE.Write.Command + LD A,IDE.CMD.ATA.WriteSectorsWithRetry + JR C,.set_command ; CF = r/w + ; + LD A,IDE.CMD.ATA.ReadSectorsWithRetry +.set_command: OUT (C),A + EX AF,AF' + EXX + LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.DataRequest+IDE.CtrlByte.Error)+IDE.CtrlByte.DataRequest + CALL WAITPRT.custom_DE + EXX + RET C + ;DI ;R01 REMOVED "DI" +.big_loop: IN A,(SLOT3) + EX AF,AF' ;>-----------> \ + LD A,XH + OUT (SLOT3),A + LD BC,IDE.Read.Data + JR C,.write_sector + ; + ; READ SECTOR 512 bytes ;!HARDCODE sector size +.loop_256_1: DUP 16 + INI + EDUP + JP NZ,.loop_256_1 +.loop_256_2: DUP 16 + INI + EDUP + JP NZ,.loop_256_2 + AND A + ;EX AF,AF' + ; ; ; ; ; + ; CF=0 +.return_rw: EX AF,AF' ;<-----------< / + INC XL ;INC LOADED SECTORS + OUT (SLOT3),A + ; + LD A,H + OR L + JR NZ,.end_pass + ; short/long + ; A = 0 + SUB YL + JR NC,.END_BUFFER + ; next page in mem block + CALL CHANGE_MEM_BLK + ; LD HL,#C000 + ; IN A,(SLOT3) + ; EX AF,AF' ;>-----------> \ + ; LD A,SYS_PAGE + ; OUT (SLOT3),A + ; LD D,high SYS_PAGE.RAM_TABLE + ; LD E,XH + ; LD A,(DE) + ; LD XH,A + ; EX AF,AF' ;<-----------< / + ; OUT (SLOT3),A + ; +.end_pass: ;INC XL ;INC LOADED SECTORS + EXX + CALL WAITPRT + EXX + RET C + ; + ;INC XL ;INC LOADED SECTORS + LD BC,IDE.Read.Status + IN A,(C) + BIT IDE.CtrlBit.DataRequest,A + RET Z + ; + JP .big_loop + ; +.write_sector: ; WRITE SECTOR 512 bytes ;!HARDCODE sector size + INC B ; LD BC,IDE.Write.Data + LD D,512/WRITE_OUTI_DUPs ;!HARDCODE sector size +.loop: DUP WRITE_OUTI_DUPs + OUTI + EDUP + DEC D + JR NZ,.loop + SCF + JP .return_rw + ; ; +.END_BUFFER: CALL ATA_IdlePasses.CHECK_DRV + JR NZ,ATA_IdlePasses.Enter + RET +;;;;;;;;;;;;;;;;; +ATA_IdlePasses: CALL .CHECK_DRV + JR NZ,.Enter + ; + RET C + LD A,BIOS.Error.Failure + SCF + RET + ; +.Enter: XOR A ; 稪 READ_ZEROS, .WrZeros + EX AF,AF' + LD BC,IDE.Read.Data + JR C,.WrZeros + ; READ > /dev/null + EX AF,AF' +.RdLoop: IN F,(C) ; ⠥ 1 ࠧ ⭮ , ⠥ WORD + DEC A + JR NZ,.RdLoop + JR ATA_IdlePasses + ; WRITE ZEROS +.WrZeros: EX AF,AF' + ; +.WrLoop: OUT (C),A + DJNZ .WrLoop + ; +.WrLoop2: OUT (C),A + DJNZ .WrLoop2 + JR ATA_IdlePasses + ; +.CHECK_DRV: EXX + CALL WAITPRT + EXX + RET C + ; + LD BC,IDE.Read.Status + IN A,(C) + BIT IDE.CtrlBit.DataRequest,A + RET +;!TODO 㣨 ன +;; + + +;[]================================================================[#54] +;Function: Verify Sectors +; A - Disk +; HL:IX - Sector +; B - Sector counter +;Return: CF - error +;VERIFY SECTOR(S) +ATA_5x_VERIFY: ;PUSH IY ; !FIXIT 祬? + SAFE_PORTY_2 + PUSH IX + PUSH HL + CALL .VERIFY + POP HL + POP IX + RESTORE_PORTY + ;POP IY + RET +;VERIFY SECTOR(S) +.VERIFY: LD C,IDE.Device.HDD + CALL SELECT_DRIVE + RET C + EXX + LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready) + IDE.CtrlByte.Ready + CALL WAITPRT.custom_DE + EXX + RET C + ;PUSH DE + ; IN A,(SLOT3) + ; PUSH AF + CALL PRESET + ; POP AF + ; OUT (SLOT3),A + ;POP HL + LD BC,IDE.Write.Command + LD A,IDE.CMD.ATA.ReadVerifySectorsWithRetry + OUT (C),A + LD BC,IDE.Read.Status + IN A,(C) + RRA ;BIT IDE.CtrlBit.Error,A : SCF : RET NZ + RET C + ; + JP WAITPRT + ;RET C + ;XOR A + ;RET +;[]================================================================[#54] + + +; HL:IX - LBA SECTOR +; B - SECTOR COUNTER +; 室: SLOT3 = SYS_PAGE +PRESET: LD A,B + LD BC,IDE.Write.Counter + OUT (C),A + ; + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) + LD BC,IDE.Write.DeviceHead + OUT (C),A + ; CHS/LBA ;!FIXIT ᤥ ⪠ + AND %0100'0000 + LD E,XL + LD D,XH + CALL Z,LBA_CHS + LD BC,IDE.Write.Sector + OUT (C),E ;LBA 0..7 + ; + INC C ; LD BC,IDE.Write.CylinderLow + OUT (C),D ;LBA 8..15 + INC C ; LD BC,IDE.Write.CylinderHigh + OUT (C),L ;LBA 16..23 + LD BC,IDE.Read.Control + IN A,(C) + AND #F0 ;!HARDCODE DRIVE/HEAD REGISTER PHISICAL DISK bitmask + OR H ;LBA 24..27 + INC B ; LD BC,IDE.Write.DeviceHead + ; + OUT (C),A + EX AF,AF' + OUT (SLOT3),A + ;AND A + RET +;PRESET ; + + +; HL:DE - SECTOR OFFSET +LBA_CHS: LD C,(IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderLow) + LD B,(IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh) + ; +DIV32X: ;HL:DE / BC => DE:IX HL-OSTATOK + LD XH,D + LD XL,E + EX DE,HL + LD HL,0 + LD A,#20 + ; +.loop: ADD IX,IX + EX DE,HL + ADC HL,HL + EX DE,HL + ADC HL,HL + SBC HL,BC + JR NC,.DIV012 + ; + ADD HL,BC + DEC A + JR NZ,.loop + ; + JR .DIV014 + ; +.DIV012: INC IX + DEC A + JR NZ,.loop + ; +.DIV014: LD E,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack) + LD D,0 + XOR A + ; +.loop2: INC A + SBC HL,DE + JR NC,.loop2 + ; + ADD HL,DE + DEC A + LD H,A + LD E,L + INC E + LD D,XL + LD A,XH + LD L,A + RET + +;----------------------------------------------------------------------; +; D - MASK +; E - PATTERN +; !!! 㭪樨 , 室 ᥣ ZF +WAITPRT: LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error) + IDE.CtrlByte.Ready +.custom_DE: LD HL,#0000 ; প ;!HARDCODE +.custom: LD BC,IDE.Read.Status + ; +.loop: PUSH HL ; 11 +; ;;;;;;;;; +.loop2: IN A,(C) ; 12 + AND D ; 4 + CP E ; 4 + JR Z,.ok ; 7 + ; + DEC HL ; 6 + LD A,L ; 4 + OR H ; 4 + JP NZ,.loop2 ; 10 + ; ;;;;;;;;; 51 + POP HL ; 10 + DEC L ; 4 + JR NZ,.loop ; 12 + ; error ;;;;;;;;; 37 + LD A,BIOS.Error.NotReady + SCF + RET + ; +.ok: POP HL + RET +;----------------------------------------------------------------------; + + +;[]================================================================[#57] +;[x] 18/12/2023. / API CD-ROM (ATAPI) +; [ ] media change +;Function: Detect Disk +; A - Disk +;Return: CF=0 - A=Drive type +; CF=1 - error +ATA_5x_DETECT: LD C,IDE.Device.HDD +.shared: CALL SELECT_DRIVE + RET C + ; + LD B,A + AND %0000'0011 ;[ ] media change । ? ; !FIXIT + JR NZ,.notZero + LD A,C + RET + ; +.notZero: AND %0000'0010 + JR NZ,.UnitAttention + ; C = DriveType + LD A,C + CP IDE.Device.ATAPI + JR Z,.AtapiCheckMedia + ;!FIXIT AtaCheckMedia - ᤥ ; [ ] media change + AND A + RET + ; +.AtapiCheckMedia: + PUSH BC ; B - MediaParameters, C - DriveType + CALL ATAPI_CHECK_MEDIA_CHANGED + POP BC ; B - MediaParameters, C - DriveType + RET C + LD A,C + RET + ; +.UnitAttention: LD A,BIOS.Error.ATAPI.UnitAttention + SCF + RET ;[]================================================================[#57] \ No newline at end of file diff --git a/src/bios/exp/EXTENDED/RAM_DISK_DRIVER.asm b/bios/exp/EXTENDED/RAM_DISK_DRIVER.asm similarity index 100% rename from src/bios/exp/EXTENDED/RAM_DISK_DRIVER.asm rename to bios/exp/EXTENDED/RAM_DISK_DRIVER.asm diff --git a/src/bios/exp/EXTENDED/shared.asm b/bios/exp/EXTENDED/shared.asm similarity index 100% rename from src/bios/exp/EXTENDED/shared.asm rename to bios/exp/EXTENDED/shared.asm diff --git a/src/bios/exp/FONT.ASM b/bios/exp/FONT.ASM similarity index 99% rename from src/bios/exp/FONT.ASM rename to bios/exp/FONT.ASM index 3ea3f24..c485541 100644 --- a/src/bios/exp/FONT.ASM +++ b/bios/exp/FONT.ASM @@ -1,174 +1,174 @@ -; - LUA PASS1 - fL = {} - for i = 1,16 do - fL[i]={} - end - -- 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F - fL[1][1] = " -------- -######- -######- -##-##-- ---#---- --###--- ---#---- -------- ######## -------- ######## ----#### --####-- --###### -####### ---##--- " - fL[2][1] = " -------- #------# ######## #######- --###--- -#####-- ---#---- -------- ######## --####-- ##----## -----### -##--##- --##--## -##---## ##-##-## " - fL[3][1] = " -------- #-#--#-# ##-##-## #######- -#####-- --###--- --###--- ---##--- ###--### -##--##- #--##--# ----#### -##--##- --###### -####### --####-- " - fL[4][1] = " -------- #------# ######## #######- #######- #######- -#####-- --####-- ##----## -#----#- #-####-# -#####-# -##--##- --##---- -##---## ###--### " - fL[5][1] = " -------- #-####-# ##----## -#####-- -#####-- #######- #######- --####-- ##----## -#----#- #-####-# ##--##-- --####-- --##---- -##---## ###--### " - fL[6][1] = " -------- #--##--# ###--### --###--- --###--- ##-#-##- -#####-- ---##--- ###--### -##--##- #--##--# ##--##-- ---##--- -###---- -##--### --####-- " - fL[7][1] = " -------- #------# ######## ---#---- ---#---- ---#---- ---#---- -------- ######## --####-- ##----## ##--##-- -######- ####---- ###--##- ##-##-## " - fL[8][1] = " -------- -######- -######- -------- -------- --###--- --###--- -------- ######## -------- ######## -####--- ---##--- ###----- ##------ ---##--- " - -- 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F - fL[1][2] = " #------- ------#- ---##--- -##--##- -####### --#####- -------- ---##--- ---##--- ---##--- -------- -------- -------- -------- -------- -------- " - fL[2][2] = " ###----- ----###- --####-- -##--##- ##-##-## -##---## -------- --####-- --####-- ---##--- ---##--- --##---- -------- --#--#-- ---##--- ######## " - fL[3][2] = " #####--- --#####- -######- -##--##- ##-##-## --###--- -------- -######- -######- ---##--- ----##-- -##----- ##------ -##--##- --####-- ######## " - fL[4][2] = " #######- #######- ---##--- -##--##- -####-## -##-##-- -------- ---##--- ---##--- ---##--- #######- #######- ##------ ######## -######- -######- " - fL[5][2] = " #####--- --#####- ---##--- -##--##- ---##-## -##-##-- -######- -######- ---##--- -######- ----##-- -##----- ##------ -##--##- ######## --####-- " - fL[6][2] = " ###----- ----###- -######- -------- ---##-## --###--- -######- --####-- ---##--- --####-- ---##--- --##---- #######- --#--#-- ######## ---##--- " - fL[7][2] = " #------- ------#- --####-- -##--##- ---##-## ##--##-- -######- ---##--- ---##--- ---##--- -------- -------- -------- -------- -------- -------- " - fL[8][2] = " -------- -------- ---##--- -------- -------- -####--- -------- ######## -------- -------- -------- -------- -------- -------- -------- -------- " - -- 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F - fL[1][3] = " -------- --##---- -##-##-- -##-##-- --##---- -------- --###--- -##----- ---##--- -##----- -------- -------- -------- -------- -------- -----##- " - fL[2][3] = " -------- -####--- -##-##-- -##-##-- -#####-- ##---##- -##-##-- -##----- --##---- --##---- -##--##- --##---- -------- -------- -------- ----##-- " - fL[3][3] = " -------- -####--- -##-##-- #######- ##------ ##--##-- --###--- ##------ -##----- ---##--- --####-- --##---- -------- -------- -------- ---##--- " - fL[4][3] = " -------- --##---- -------- -##-##-- -####--- ---##--- -###-##- -------- -##----- ---##--- ######## ######-- -------- ######-- -------- --##---- " - fL[5][3] = " -------- --##---- -------- #######- ----##-- --##---- ##-###-- -------- -##----- ---##--- --####-- --##---- -------- -------- -------- -##----- " - fL[6][3] = " -------- -------- -------- -##-##-- #####--- -##--##- ##--##-- -------- --##---- --##---- -##--##- --##---- --##---- -------- --##---- ##------ " - fL[7][3] = " -------- --##---- -------- -##-##-- --##---- ##---##- -###-##- -------- ---##--- -##----- -------- -------- --##---- -------- --##---- #------- " - fL[8][3] = " -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -##----- -------- -------- -------- " - -- 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F - fL[1][4] = " -#####-- --##---- -####--- -####--- ---###-- ######-- --###--- ######-- -####--- -####--- -------- -------- ---##--- -------- -##----- -####--- " - fL[2][4] = " ##---##- -###---- ##--##-- ##--##-- --####-- ##------ -##----- ##--##-- ##--##-- ##--##-- --##---- --##---- --##---- -------- --##---- ##--##-- " - fL[3][4] = " ##--###- --##---- ----##-- ----##-- -##-##-- #####--- ##------ ----##-- ##--##-- ##--##-- --##---- --##---- -##----- ######-- ---##--- ----##-- " - fL[4][4] = " ##-####- --##---- --###--- --###--- ##--##-- ----##-- #####--- ---##--- -####--- -#####-- -------- -------- ##------ -------- ----##-- ---##--- " - fL[5][4] = " ####-##- --##---- -##----- ----##-- #######- ----##-- ##--##-- --##---- ##--##-- ----##-- -------- -------- -##----- -------- ---##--- --##---- " - fL[6][4] = " ###--##- --##---- ##--##-- ##--##-- ----##-- ##--##-- ##--##-- --##---- ##--##-- ---##--- --##---- --##---- --##---- ######-- --##---- -------- " - fL[7][4] = " -#####-- ######-- ######-- -####--- ---####- -####--- -####--- --##---- -####--- -###---- --##---- --##---- ---##--- -------- -##----- --##---- " - fL[8][4] = " -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -##----- -------- -------- -------- -------- " - -- 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F - fL[1][5] = " -#####-- --##---- ######-- --####-- #####--- #######- #######- --####-- ##--##-- -####--- ---####- ###--##- ####---- ##---##- ##---##- --###--- " - fL[2][5] = " ##---##- -####--- -##--##- -##--##- -##-##-- -##---#- -##---#- -##--##- ##--##-- --##---- ----##-- -##--##- -##----- ###-###- ###--##- -##-##-- " - fL[3][5] = " ##-####- ##--##-- -##--##- ##------ -##--##- -##-#--- -##-#--- ##------ ##--##-- --##---- ----##-- -##-##-- -##----- #######- ####-##- ##---##- " - fL[4][5] = " ##-####- ##--##-- -#####-- ##------ -##--##- -####--- -####--- ##------ ######-- --##---- ----##-- -####--- -##----- #######- ##-####- ##---##- " - fL[5][5] = " ##-####- ######-- -##--##- ##------ -##--##- -##-#--- -##-#--- ##--###- ##--##-- --##---- ##--##-- -##-##-- -##---#- ##-#-##- ##--###- ##---##- " - fL[6][5] = " ##------ ##--##-- -##--##- -##--##- -##-##-- -##---#- -##----- -##--##- ##--##-- --##---- ##--##-- -##--##- -##--##- ##---##- ##---##- -##-##-- " - fL[7][5] = " -####--- ##--##-- ######-- --####-- #####--- #######- ####---- --#####- ##--##-- -####--- -####--- ###--##- #######- ##---##- ##---##- --###--- " - fL[8][5] = " -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- " - -- 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F - fL[1][6] = " ######-- -####--- ######-- -####--- ######-- ##--##-- ##--##-- ##---##- ##---##- ##--##-- #######- -####--- ##------ -####--- ---#---- -------- " - fL[2][6] = " -##--##- ##--##-- -##--##- ##--##-- #-##-#-- ##--##-- ##--##-- ##---##- ##---##- ##--##-- ##---##- -##----- -##----- ---##--- --###--- -------- " - fL[3][6] = " -##--##- ##--##-- -##--##- -##----- --##---- ##--##-- ##--##-- ##---##- -##-##-- ##--##-- #---##-- -##----- --##---- ---##--- -##-##-- -------- " - fL[4][6] = " -#####-- ##--##-- -#####-- --##---- --##---- ##--##-- ##--##-- ##-#-##- --###--- -####--- ---##--- -##----- ---##--- ---##--- ##---##- -------- " - fL[5][6] = " -##----- ##-###-- -##-##-- ---##--- --##---- ##--##-- ##--##-- #######- --###--- --##---- --##--#- -##----- ----##-- ---##--- -------- -------- " - fL[6][6] = " -##----- -####--- -##--##- ##--##-- --##---- ##--##-- -####--- ###-###- -##-##-- --##---- -##--##- -##----- -----##- ---##--- -------- -------- " - fL[7][6] = " ####---- ---###-- ###--##- -####--- -####--- ######-- --##---- ##---##- ##---##- -####--- #######- -####--- ------#- -####--- -------- -------- " - fL[8][6] = " -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- ######## " - - -- 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F - fL[1][7] = " --##---- -------- ###----- -------- ---###-- -------- --###--- -------- ###----- --##---- ----##-- ###----- -###---- -------- -------- -------- " - fL[2][7] = " --##---- -------- -##----- -------- ----##-- -------- -##-##-- -------- -##----- -------- -------- -##----- --##---- -------- -------- -------- " - fL[3][7] = " ---##--- -####--- -##----- -####--- ----##-- -####--- -##----- -###-##- -##-##-- -###---- ----##-- -##--##- --##---- ##--##-- #####--- -####--- " - fL[4][7] = " -------- ----##-- -#####-- ##--##-- -#####-- ##--##-- ####---- ##--##-- -###-##- --##---- ----##-- -##-##-- --##---- #######- ##--##-- ##--##-- " - fL[5][7] = " -------- -#####-- -##--##- ##------ ##--##-- ######-- -##----- ##--##-- -##--##- --##---- ----##-- -####--- --##---- #######- ##--##-- ##--##-- " - fL[6][7] = " -------- ##--##-- -##--##- ##--##-- ##--##-- ##------ -##----- -#####-- -##--##- --##---- ##--##-- -##-##-- --##---- ##-#-##- ##--##-- ##--##-- " - fL[7][7] = " -------- -###-##- ##-###-- -####--- -###-##- -####--- ####---- ----##-- ###--##- -####--- ##--##-- ###--##- -####--- ##---##- ##--##-- -####--- " - fL[8][7] = " -------- -------- -------- -------- -------- -------- -------- #####--- -------- -------- -####--- -------- -------- -------- -------- -------- " - - -- 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F - fL[1][8] = " -------- -------- -------- -------- ---#---- -------- -------- -------- -------- -------- -------- ---###-- ---##--- ###----- -###-##- -------- " - fL[2][8] = " -------- -------- -------- -------- --##---- -------- -------- -------- -------- -------- -------- --##---- ---##--- --##---- ##-###-- ---#---- " - fL[3][8] = " ##-###-- -###-##- ##-###-- -#####-- -#####-- ##--##-- ##--##-- ##---##- ##---##- ##--##-- ######-- --##---- ---##--- --##---- -------- --###--- " - fL[4][8] = " -##--##- ##--##-- -###-##- ##------ --##---- ##--##-- ##--##-- ##-#-##- -##-##-- ##--##-- #--##--- ###----- -------- ---###-- -------- -##-##-- " - fL[5][8] = " -##--##- ##--##-- -##--##- -####--- --##---- ##--##-- ##--##-- #######- --###--- ##--##-- --##---- --##---- ---##--- --##---- -------- ##---##- " - fL[6][8] = " -#####-- -#####-- -##----- ----##-- --##-#-- ##--##-- -####--- #######- -##-##-- -#####-- -##--#-- --##---- ---##--- --##---- -------- ##---##- " - fL[7][8] = " -##----- ----##-- ####---- #####--- ---##--- -###-##- --##---- -##-##-- ##---##- ----##-- ######-- ---###-- ---##--- ###----- -------- #######- " - fL[8][8] = " ####---- ---####- -------- -------- -------- -------- -------- -------- -------- #####--- -------- -------- -------- -------- -------- -------- " - - -- 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F - fL[1][9] = " ----###- ######-- #####--- ######-- -######- ######-- ##-##-## --####-- ##---##- ##-#-##- ##---##- -----##- ##---##- ##---##- -#####-- #######- " - fL[2][9] = " ---####- ##------ ##--##-- ##------ -##--##- ##------ ##-##-## -##--##- ##---##- ##---##- ##--##-- ----###- ###-###- ##---##- ##---##- ##---##- " - fL[3][9] = " --##-##- ##------ ##--##-- ##------ -##--##- ##------ -######- -----##- ##--###- ##--###- ##-##--- ---####- #######- ##---##- ##---##- ##---##- " - fL[4][9] = " -##--##- ######-- ######-- ##------ -##--##- #####--- ---##--- --####-- ##-####- ##-####- #####--- --##-##- ##-#-##- #######- ##---##- ##---##- " - fL[5][9] = " #######- ##---##- ##---##- ##------ -##--##- ##------ -######- -----##- ####-##- ####-##- ##--##-- -##--##- ##---##- ##---##- ##---##- ##---##- " - fL[6][9] = " ##---##- ##---##- ##---##- ##------ -##--##- ##------ ##-##-## ##---##- ###--##- ###--##- ##---##- ##---##- ##---##- ##---##- ##---##- ##---##- " - fL[7][9] = " ##---##- ######-- ######-- ##------ ######## #######- ##-##-## -#####-- ##---##- ##---##- ##---##- ##---##- ##---##- ##---##- -#####-- ##---##- " - fL[8][9] = " -------- -------- -------- -------- ##----## -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- " - - -- 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F - fL[1][10] = " ######-- -#####-- ######-- ##---##- ---##--- ##----## ##--##-- ##---##- ##-#-##- ##-#-##- ####---- ##----#- ##------ -#####-- ##--###- -######- " - fL[2][10] = " ##---##- ##---##- --##---- ##---##- -######- -##--##- ##--##-- ##---##- ##-#-##- ##-#-##- --##---- ##----#- ##------ ##---##- ##-##-## ##---##- " - fL[3][10] = " ##---##- ##------ --##---- ##---##- ##-##-## --####-- ##--##-- ##---##- ##-#-##- ##-#-##- --##---- ##----#- ##------ -----##- ##-##-## ##---##- " - fL[4][10] = " ######-- ##------ --##---- -######- ##-##-## ---##--- ##--##-- -######- ##-#-##- ##-#-##- --#####- ####--#- ######-- ---####- #####-## -######- " - fL[5][10] = " ##------ ##------ --##---- -----##- ##-##-## --####-- ##--##-- -----##- ##-#-##- ##-#-##- --##--## ##-##-#- ##---##- -----##- ##-##-## --##-##- " - fL[6][10] = " ##------ ##---##- --##---- ##---##- -######- -##--##- ##--##-- -----##- ##-#-##- ##-#-##- --##--## ##-##-#- ##---##- ##---##- ##-##-## -##--##- " - fL[7][10] = " ##------ -#####-- --##---- -#####-- ---##--- ##----## #######- -----##- #######- ######## --#####- ####--#- ######-- -#####-- ##--###- ##---##- " - fL[8][10] = " -------- -------- -------- -------- -------- -------- -----##- -------- -------- ------## -------- -------- -------- -------- -------- -------- " - - -- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF - fL[1][11] = " -------- -----#-- -------- -------- -------- -------- -------- -------- -------- --##---- -------- -------- -------- -------- -------- -------- " - fL[2][11] = " -------- -####--- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- " - fL[3][11] = " -####--- ##------ #####--- ######-- -######- -####--- ##-##-## -####--- ##--##-- ##--##-- ##--##-- ----###- ##---##- ##--##-- -####--- ######-- " - fL[4][11] = " ----##-- #####--- ##--##-- ##------ -##--##- ##--##-- -######- ##--##-- ##--##-- ##--##-- ##-##--- ---####- ###-###- ##--##-- ##--##-- ##--##-- " - fL[5][11] = " -#####-- ##--##-- #####--- ##------ -##--##- ######-- ---##--- ---##--- ##-###-- ##-###-- ####---- --##-##- ##-#-##- ######-- ##--##-- ##--##-- " - fL[6][11] = " ##--##-- ##--##-- ##---##- ##------ -##--##- ##------ -######- ##--##-- ###-##-- ###-##-- ##--##-- -##--##- ##---##- ##--##-- ##--##-- ##--##-- " - fL[7][11] = " -######- -####--- ######-- ##------ ######## -#####-- ##-##-## -####--- ##--##-- ##--##-- ##--##-- ##---##- ##---##- ##--##-- -####--- ##--##-- " - fL[8][11] = " -------- -------- -------- -------- ##----## -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- " - - -- B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF - fL[1][12] = " --#---#- -#-#-#-# ##-##-## ---#---- ---#---- ---#---- ---#-#-- -------- -------- ---#-#-- ---#-#-- -------- ---#-#-- ---#-#-- ---#---- -------- " - fL[2][12] = " #---#--- #-#-#-#- -###-### ---#---- ---#---- ---#---- ---#-#-- -------- -------- ---#-#-- ---#-#-- -------- ---#-#-- ---#-#-- ---#---- -------- " - fL[3][12] = " --#---#- -#-#-#-# ##-##-## ---#---- ---#---- ####---- ---#-#-- -------- ####---- ####-#-- ---#-#-- ######-- ####-#-- ---#-#-- ####---- -------- " - fL[4][12] = " #---#--- #-#-#-#- ###-###- ---#---- ---#---- ---#---- ---#-#-- -------- ---#---- -----#-- ---#-#-- -----#-- -----#-- ---#-#-- ---#---- -------- " - fL[5][12] = " --#---#- -#-#-#-# ##-##-## ---#---- ####---- ####---- ####-#-- ######-- ####---- ####-#-- ---#-#-- ####-#-- ######-- ######-- ####---- ####---- " - fL[6][12] = " #---#--- #-#-#-#- -###-### ---#---- ---#---- ---#---- ---#-#-- ---#-#-- ---#---- ---#-#-- ---#-#-- ---#-#-- -------- -------- -------- ---#---- " - fL[7][12] = " --#---#- -#-#-#-# ##-##-## ---#---- ---#---- ---#---- ---#-#-- ---#-#-- ---#---- ---#-#-- ---#-#-- ---#-#-- -------- -------- -------- ---#---- " - fL[8][12] = " #---#--- #-#-#-#- ###-###- ---#---- ---#---- ---#---- ---#-#-- ---#-#-- ---#---- ---#-#-- ---#-#-- ---#-#-- -------- -------- -------- ---#---- " - - -- C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF - fL[1][13] = " ---#---- ---#---- -------- ---#---- -------- ---#---- ---#---- ---#-#-- ---#-#-- -------- ---#-#-- -------- ---#-#-- -------- ---#-#-- ---#---- " - fL[2][13] = " ---#---- ---#---- -------- ---#---- -------- ---#---- ---#---- ---#-#-- ---#-#-- -------- ---#-#-- -------- ---#-#-- -------- ---#-#-- ---#---- " - fL[3][13] = " ---#---- ---#---- -------- ---#---- -------- ---#---- ---##### ---#-#-- ---#-### ---##### ####-### ######## ---#-### ######## ####-### ######## " - fL[4][13] = " ---#---- ---#---- -------- ---#---- -------- ---#---- ---#---- ---#-#-- ---#---- ---#---- -------- -------- ---#---- -------- -------- -------- " - fL[5][13] = " ---##### ######## ######## ---##### ######## ######## ---##### ---#-### ---##### ---#-### ######## ####-### ---#-### ######## ####-### ######## " - fL[6][13] = " -------- -------- ---#---- ---#---- -------- ---#---- ---#---- ---#-#-- -------- ---#-#-- -------- ---#-#-- ---#-#-- -------- ---#-#-- -------- " - fL[7][13] = " -------- -------- ---#---- ---#---- -------- ---#---- ---#---- ---#-#-- -------- ---#-#-- -------- ---#-#-- ---#-#-- -------- ---#-#-- -------- " - fL[8][13] = " -------- -------- ---#---- ---#---- -------- ---#---- ---#---- ---#-#-- -------- ---#-#-- -------- ---#-#-- ---#-#-- -------- ---#-#-- -------- " - - -- D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF - fL[1][14] = " ---#-#-- -------- -------- ---#-#-- ---#---- -------- -------- ---#-#-- ---#---- ---#---- -------- ######## -------- ####---- ----#### ######## " - fL[2][14] = " ---#-#-- -------- -------- ---#-#-- ---#---- -------- -------- ---#-#-- ---#---- ---#---- -------- ######## -------- ####---- ----#### ######## " - fL[3][14] = " ---#-#-- ######## -------- ---#-#-- ---##### ---##### -------- ---#-#-- ######## ---#---- -------- ######## -------- ####---- ----#### ######## " - fL[4][14] = " ---#-#-- -------- -------- ---#-#-- ---#---- ---#---- -------- ---#-#-- ---#---- ---#---- -------- ######## -------- ####---- ----#### ######## " - fL[5][14] = " ######## ######## ######## ---##### ---##### ---##### ---##### ######## ######## ####---- ---##### ######## ######## ####---- ----#### -------- " - fL[6][14] = " -------- ---#---- ---#-#-- -------- -------- ---#---- ---#-#-- ---#-#-- ---#---- -------- ---#---- ######## ######## ####---- ----#### -------- " - fL[7][14] = " -------- ---#---- ---#-#-- -------- -------- ---#---- ---#-#-- ---#-#-- ---#---- -------- ---#---- ######## ######## ####---- ----#### -------- " - fL[8][14] = " -------- ---#---- ---#-#-- -------- -------- ---#---- ---#-#-- ---#-#-- ---#---- -------- ---#---- ######## ######## ####---- ----#### -------- " - - -- F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF - fL[1][15] = " -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- " - fL[2][15] = " -------- -------- -------- -------- ---##--- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- " - fL[3][15] = " #####--- -####--- ######-- ##--##-- -######- ##---##- ##--##-- ##--##-- ##-#-##- ##-#-##- ####---- ##----#- ##------ -#####-- ##--###- -#####-- " - fL[4][15] = " ##--##-- ##--##-- --##---- ##--##-- ##-##-## -##-##-- ##--##-- ##--##-- ##-#-##- ##-#-##- --##---- ##----#- ##------ ##---##- ##-##-## ##--##-- " - fL[5][15] = " ##--##-- ##------ --##---- -#####-- ##-##-## --###--- ##--##-- -#####-- ##-#-##- ##-#-##- --#####- ####--#- #####--- ---####- #####-## -#####-- " - fL[6][15] = " #####--- ##--##-- --##---- ----##-- -######- -##-##-- ##--##-- ----##-- ##-#-##- ##-#-##- --##--## ##-##-#- ##--##-- ##---##- ##-##-## -##-##-- " - fL[7][15] = " ##------ -####--- --##---- ##--##-- ---##--- ##---##- #######- ----##-- #######- ######## --#####- ####--#- #####--- -#####-- ##--###- ##--##-- " - fL[8][15] = " ##------ -------- -------- -####--- ---##--- -------- -----##- -------- -------- ------## -------- -------- -------- -------- -------- -------- " - - -- E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF - fL[1][16] = " -#--#--- -#--#--- -##----- ---##--- ----#--- ---#---- --##---- -------- -##----- -------- -------- ---##### #-#----- -##----- -------- -------- " - fL[2][16] = " ######-- -------- --##---- --##---- ---#-#-- ---#---- --##---- -------- #--#---- -------- -------- ---#---- ##-#---- #--#---- -------- -------- " - fL[3][16] = " ##------ -####--- ---##--- -##----- ---#---- ---#---- -------- -##--#-- #--#---- -------- -------- ---#---- #--#---- --#----- --####-- -------- " - fL[4][16] = " #####--- ##--##-- --##---- --##---- ---#---- ---#---- ######-- #--##--- -##----- --##---- -------- #--#---- #--#---- -#------ --####-- -------- " - fL[5][16] = " ##------ ######-- -##----- ---##--- ---#---- ---#---- -------- -------- -------- --##---- --##---- -#-#---- #--#---- ####---- --####-- -------- " - fL[6][16] = " ##------ ##------ -------- -------- ---#---- -#-#---- --##---- -##--#-- -------- -------- -------- --##---- -------- -------- --####-- -------- " - fL[7][16] = " #######- -#####-- -####--- -####--- ---#---- --#----- --##---- #--##--- -------- -------- -------- ---#---- -------- -------- -------- -------- " - fL[8][16] = " -------- -------- -------- -------- ---#---- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- " - - ENDLUA - LUA ALLPASS - for i = 1, 8 do - for j = 1, 16, 1 do - _pc(" DG " .. fL[i][j]) - end - end - ENDLUA -; -/* - 256 ⮢ ⠭ ⮫ . - ࠢ 室 ᢥ . ࢠ - ⮫. +; + LUA PASS1 + fL = {} + for i = 1,16 do + fL[i]={} + end + -- 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F + fL[1][1] = " -------- -######- -######- -##-##-- ---#---- --###--- ---#---- -------- ######## -------- ######## ----#### --####-- --###### -####### ---##--- " + fL[2][1] = " -------- #------# ######## #######- --###--- -#####-- ---#---- -------- ######## --####-- ##----## -----### -##--##- --##--## -##---## ##-##-## " + fL[3][1] = " -------- #-#--#-# ##-##-## #######- -#####-- --###--- --###--- ---##--- ###--### -##--##- #--##--# ----#### -##--##- --###### -####### --####-- " + fL[4][1] = " -------- #------# ######## #######- #######- #######- -#####-- --####-- ##----## -#----#- #-####-# -#####-# -##--##- --##---- -##---## ###--### " + fL[5][1] = " -------- #-####-# ##----## -#####-- -#####-- #######- #######- --####-- ##----## -#----#- #-####-# ##--##-- --####-- --##---- -##---## ###--### " + fL[6][1] = " -------- #--##--# ###--### --###--- --###--- ##-#-##- -#####-- ---##--- ###--### -##--##- #--##--# ##--##-- ---##--- -###---- -##--### --####-- " + fL[7][1] = " -------- #------# ######## ---#---- ---#---- ---#---- ---#---- -------- ######## --####-- ##----## ##--##-- -######- ####---- ###--##- ##-##-## " + fL[8][1] = " -------- -######- -######- -------- -------- --###--- --###--- -------- ######## -------- ######## -####--- ---##--- ###----- ##------ ---##--- " + -- 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F + fL[1][2] = " #------- ------#- ---##--- -##--##- -####### --#####- -------- ---##--- ---##--- ---##--- -------- -------- -------- -------- -------- -------- " + fL[2][2] = " ###----- ----###- --####-- -##--##- ##-##-## -##---## -------- --####-- --####-- ---##--- ---##--- --##---- -------- --#--#-- ---##--- ######## " + fL[3][2] = " #####--- --#####- -######- -##--##- ##-##-## --###--- -------- -######- -######- ---##--- ----##-- -##----- ##------ -##--##- --####-- ######## " + fL[4][2] = " #######- #######- ---##--- -##--##- -####-## -##-##-- -------- ---##--- ---##--- ---##--- #######- #######- ##------ ######## -######- -######- " + fL[5][2] = " #####--- --#####- ---##--- -##--##- ---##-## -##-##-- -######- -######- ---##--- -######- ----##-- -##----- ##------ -##--##- ######## --####-- " + fL[6][2] = " ###----- ----###- -######- -------- ---##-## --###--- -######- --####-- ---##--- --####-- ---##--- --##---- #######- --#--#-- ######## ---##--- " + fL[7][2] = " #------- ------#- --####-- -##--##- ---##-## ##--##-- -######- ---##--- ---##--- ---##--- -------- -------- -------- -------- -------- -------- " + fL[8][2] = " -------- -------- ---##--- -------- -------- -####--- -------- ######## -------- -------- -------- -------- -------- -------- -------- -------- " + -- 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F + fL[1][3] = " -------- --##---- -##-##-- -##-##-- --##---- -------- --###--- -##----- ---##--- -##----- -------- -------- -------- -------- -------- -----##- " + fL[2][3] = " -------- -####--- -##-##-- -##-##-- -#####-- ##---##- -##-##-- -##----- --##---- --##---- -##--##- --##---- -------- -------- -------- ----##-- " + fL[3][3] = " -------- -####--- -##-##-- #######- ##------ ##--##-- --###--- ##------ -##----- ---##--- --####-- --##---- -------- -------- -------- ---##--- " + fL[4][3] = " -------- --##---- -------- -##-##-- -####--- ---##--- -###-##- -------- -##----- ---##--- ######## ######-- -------- ######-- -------- --##---- " + fL[5][3] = " -------- --##---- -------- #######- ----##-- --##---- ##-###-- -------- -##----- ---##--- --####-- --##---- -------- -------- -------- -##----- " + fL[6][3] = " -------- -------- -------- -##-##-- #####--- -##--##- ##--##-- -------- --##---- --##---- -##--##- --##---- --##---- -------- --##---- ##------ " + fL[7][3] = " -------- --##---- -------- -##-##-- --##---- ##---##- -###-##- -------- ---##--- -##----- -------- -------- --##---- -------- --##---- #------- " + fL[8][3] = " -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -##----- -------- -------- -------- " + -- 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F + fL[1][4] = " -#####-- --##---- -####--- -####--- ---###-- ######-- --###--- ######-- -####--- -####--- -------- -------- ---##--- -------- -##----- -####--- " + fL[2][4] = " ##---##- -###---- ##--##-- ##--##-- --####-- ##------ -##----- ##--##-- ##--##-- ##--##-- --##---- --##---- --##---- -------- --##---- ##--##-- " + fL[3][4] = " ##--###- --##---- ----##-- ----##-- -##-##-- #####--- ##------ ----##-- ##--##-- ##--##-- --##---- --##---- -##----- ######-- ---##--- ----##-- " + fL[4][4] = " ##-####- --##---- --###--- --###--- ##--##-- ----##-- #####--- ---##--- -####--- -#####-- -------- -------- ##------ -------- ----##-- ---##--- " + fL[5][4] = " ####-##- --##---- -##----- ----##-- #######- ----##-- ##--##-- --##---- ##--##-- ----##-- -------- -------- -##----- -------- ---##--- --##---- " + fL[6][4] = " ###--##- --##---- ##--##-- ##--##-- ----##-- ##--##-- ##--##-- --##---- ##--##-- ---##--- --##---- --##---- --##---- ######-- --##---- -------- " + fL[7][4] = " -#####-- ######-- ######-- -####--- ---####- -####--- -####--- --##---- -####--- -###---- --##---- --##---- ---##--- -------- -##----- --##---- " + fL[8][4] = " -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -##----- -------- -------- -------- -------- " + -- 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F + fL[1][5] = " -#####-- --##---- ######-- --####-- #####--- #######- #######- --####-- ##--##-- -####--- ---####- ###--##- ####---- ##---##- ##---##- --###--- " + fL[2][5] = " ##---##- -####--- -##--##- -##--##- -##-##-- -##---#- -##---#- -##--##- ##--##-- --##---- ----##-- -##--##- -##----- ###-###- ###--##- -##-##-- " + fL[3][5] = " ##-####- ##--##-- -##--##- ##------ -##--##- -##-#--- -##-#--- ##------ ##--##-- --##---- ----##-- -##-##-- -##----- #######- ####-##- ##---##- " + fL[4][5] = " ##-####- ##--##-- -#####-- ##------ -##--##- -####--- -####--- ##------ ######-- --##---- ----##-- -####--- -##----- #######- ##-####- ##---##- " + fL[5][5] = " ##-####- ######-- -##--##- ##------ -##--##- -##-#--- -##-#--- ##--###- ##--##-- --##---- ##--##-- -##-##-- -##---#- ##-#-##- ##--###- ##---##- " + fL[6][5] = " ##------ ##--##-- -##--##- -##--##- -##-##-- -##---#- -##----- -##--##- ##--##-- --##---- ##--##-- -##--##- -##--##- ##---##- ##---##- -##-##-- " + fL[7][5] = " -####--- ##--##-- ######-- --####-- #####--- #######- ####---- --#####- ##--##-- -####--- -####--- ###--##- #######- ##---##- ##---##- --###--- " + fL[8][5] = " -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- " + -- 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F + fL[1][6] = " ######-- -####--- ######-- -####--- ######-- ##--##-- ##--##-- ##---##- ##---##- ##--##-- #######- -####--- ##------ -####--- ---#---- -------- " + fL[2][6] = " -##--##- ##--##-- -##--##- ##--##-- #-##-#-- ##--##-- ##--##-- ##---##- ##---##- ##--##-- ##---##- -##----- -##----- ---##--- --###--- -------- " + fL[3][6] = " -##--##- ##--##-- -##--##- -##----- --##---- ##--##-- ##--##-- ##---##- -##-##-- ##--##-- #---##-- -##----- --##---- ---##--- -##-##-- -------- " + fL[4][6] = " -#####-- ##--##-- -#####-- --##---- --##---- ##--##-- ##--##-- ##-#-##- --###--- -####--- ---##--- -##----- ---##--- ---##--- ##---##- -------- " + fL[5][6] = " -##----- ##-###-- -##-##-- ---##--- --##---- ##--##-- ##--##-- #######- --###--- --##---- --##--#- -##----- ----##-- ---##--- -------- -------- " + fL[6][6] = " -##----- -####--- -##--##- ##--##-- --##---- ##--##-- -####--- ###-###- -##-##-- --##---- -##--##- -##----- -----##- ---##--- -------- -------- " + fL[7][6] = " ####---- ---###-- ###--##- -####--- -####--- ######-- --##---- ##---##- ##---##- -####--- #######- -####--- ------#- -####--- -------- -------- " + fL[8][6] = " -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- ######## " + + -- 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F + fL[1][7] = " --##---- -------- ###----- -------- ---###-- -------- --###--- -------- ###----- --##---- ----##-- ###----- -###---- -------- -------- -------- " + fL[2][7] = " --##---- -------- -##----- -------- ----##-- -------- -##-##-- -------- -##----- -------- -------- -##----- --##---- -------- -------- -------- " + fL[3][7] = " ---##--- -####--- -##----- -####--- ----##-- -####--- -##----- -###-##- -##-##-- -###---- ----##-- -##--##- --##---- ##--##-- #####--- -####--- " + fL[4][7] = " -------- ----##-- -#####-- ##--##-- -#####-- ##--##-- ####---- ##--##-- -###-##- --##---- ----##-- -##-##-- --##---- #######- ##--##-- ##--##-- " + fL[5][7] = " -------- -#####-- -##--##- ##------ ##--##-- ######-- -##----- ##--##-- -##--##- --##---- ----##-- -####--- --##---- #######- ##--##-- ##--##-- " + fL[6][7] = " -------- ##--##-- -##--##- ##--##-- ##--##-- ##------ -##----- -#####-- -##--##- --##---- ##--##-- -##-##-- --##---- ##-#-##- ##--##-- ##--##-- " + fL[7][7] = " -------- -###-##- ##-###-- -####--- -###-##- -####--- ####---- ----##-- ###--##- -####--- ##--##-- ###--##- -####--- ##---##- ##--##-- -####--- " + fL[8][7] = " -------- -------- -------- -------- -------- -------- -------- #####--- -------- -------- -####--- -------- -------- -------- -------- -------- " + + -- 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F + fL[1][8] = " -------- -------- -------- -------- ---#---- -------- -------- -------- -------- -------- -------- ---###-- ---##--- ###----- -###-##- -------- " + fL[2][8] = " -------- -------- -------- -------- --##---- -------- -------- -------- -------- -------- -------- --##---- ---##--- --##---- ##-###-- ---#---- " + fL[3][8] = " ##-###-- -###-##- ##-###-- -#####-- -#####-- ##--##-- ##--##-- ##---##- ##---##- ##--##-- ######-- --##---- ---##--- --##---- -------- --###--- " + fL[4][8] = " -##--##- ##--##-- -###-##- ##------ --##---- ##--##-- ##--##-- ##-#-##- -##-##-- ##--##-- #--##--- ###----- -------- ---###-- -------- -##-##-- " + fL[5][8] = " -##--##- ##--##-- -##--##- -####--- --##---- ##--##-- ##--##-- #######- --###--- ##--##-- --##---- --##---- ---##--- --##---- -------- ##---##- " + fL[6][8] = " -#####-- -#####-- -##----- ----##-- --##-#-- ##--##-- -####--- #######- -##-##-- -#####-- -##--#-- --##---- ---##--- --##---- -------- ##---##- " + fL[7][8] = " -##----- ----##-- ####---- #####--- ---##--- -###-##- --##---- -##-##-- ##---##- ----##-- ######-- ---###-- ---##--- ###----- -------- #######- " + fL[8][8] = " ####---- ---####- -------- -------- -------- -------- -------- -------- -------- #####--- -------- -------- -------- -------- -------- -------- " + + -- 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F + fL[1][9] = " ----###- ######-- #####--- ######-- -######- ######-- ##-##-## --####-- ##---##- ##-#-##- ##---##- -----##- ##---##- ##---##- -#####-- #######- " + fL[2][9] = " ---####- ##------ ##--##-- ##------ -##--##- ##------ ##-##-## -##--##- ##---##- ##---##- ##--##-- ----###- ###-###- ##---##- ##---##- ##---##- " + fL[3][9] = " --##-##- ##------ ##--##-- ##------ -##--##- ##------ -######- -----##- ##--###- ##--###- ##-##--- ---####- #######- ##---##- ##---##- ##---##- " + fL[4][9] = " -##--##- ######-- ######-- ##------ -##--##- #####--- ---##--- --####-- ##-####- ##-####- #####--- --##-##- ##-#-##- #######- ##---##- ##---##- " + fL[5][9] = " #######- ##---##- ##---##- ##------ -##--##- ##------ -######- -----##- ####-##- ####-##- ##--##-- -##--##- ##---##- ##---##- ##---##- ##---##- " + fL[6][9] = " ##---##- ##---##- ##---##- ##------ -##--##- ##------ ##-##-## ##---##- ###--##- ###--##- ##---##- ##---##- ##---##- ##---##- ##---##- ##---##- " + fL[7][9] = " ##---##- ######-- ######-- ##------ ######## #######- ##-##-## -#####-- ##---##- ##---##- ##---##- ##---##- ##---##- ##---##- -#####-- ##---##- " + fL[8][9] = " -------- -------- -------- -------- ##----## -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- " + + -- 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F + fL[1][10] = " ######-- -#####-- ######-- ##---##- ---##--- ##----## ##--##-- ##---##- ##-#-##- ##-#-##- ####---- ##----#- ##------ -#####-- ##--###- -######- " + fL[2][10] = " ##---##- ##---##- --##---- ##---##- -######- -##--##- ##--##-- ##---##- ##-#-##- ##-#-##- --##---- ##----#- ##------ ##---##- ##-##-## ##---##- " + fL[3][10] = " ##---##- ##------ --##---- ##---##- ##-##-## --####-- ##--##-- ##---##- ##-#-##- ##-#-##- --##---- ##----#- ##------ -----##- ##-##-## ##---##- " + fL[4][10] = " ######-- ##------ --##---- -######- ##-##-## ---##--- ##--##-- -######- ##-#-##- ##-#-##- --#####- ####--#- ######-- ---####- #####-## -######- " + fL[5][10] = " ##------ ##------ --##---- -----##- ##-##-## --####-- ##--##-- -----##- ##-#-##- ##-#-##- --##--## ##-##-#- ##---##- -----##- ##-##-## --##-##- " + fL[6][10] = " ##------ ##---##- --##---- ##---##- -######- -##--##- ##--##-- -----##- ##-#-##- ##-#-##- --##--## ##-##-#- ##---##- ##---##- ##-##-## -##--##- " + fL[7][10] = " ##------ -#####-- --##---- -#####-- ---##--- ##----## #######- -----##- #######- ######## --#####- ####--#- ######-- -#####-- ##--###- ##---##- " + fL[8][10] = " -------- -------- -------- -------- -------- -------- -----##- -------- -------- ------## -------- -------- -------- -------- -------- -------- " + + -- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF + fL[1][11] = " -------- -----#-- -------- -------- -------- -------- -------- -------- -------- --##---- -------- -------- -------- -------- -------- -------- " + fL[2][11] = " -------- -####--- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- " + fL[3][11] = " -####--- ##------ #####--- ######-- -######- -####--- ##-##-## -####--- ##--##-- ##--##-- ##--##-- ----###- ##---##- ##--##-- -####--- ######-- " + fL[4][11] = " ----##-- #####--- ##--##-- ##------ -##--##- ##--##-- -######- ##--##-- ##--##-- ##--##-- ##-##--- ---####- ###-###- ##--##-- ##--##-- ##--##-- " + fL[5][11] = " -#####-- ##--##-- #####--- ##------ -##--##- ######-- ---##--- ---##--- ##-###-- ##-###-- ####---- --##-##- ##-#-##- ######-- ##--##-- ##--##-- " + fL[6][11] = " ##--##-- ##--##-- ##---##- ##------ -##--##- ##------ -######- ##--##-- ###-##-- ###-##-- ##--##-- -##--##- ##---##- ##--##-- ##--##-- ##--##-- " + fL[7][11] = " -######- -####--- ######-- ##------ ######## -#####-- ##-##-## -####--- ##--##-- ##--##-- ##--##-- ##---##- ##---##- ##--##-- -####--- ##--##-- " + fL[8][11] = " -------- -------- -------- -------- ##----## -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- " + + -- B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF + fL[1][12] = " --#---#- -#-#-#-# ##-##-## ---#---- ---#---- ---#---- ---#-#-- -------- -------- ---#-#-- ---#-#-- -------- ---#-#-- ---#-#-- ---#---- -------- " + fL[2][12] = " #---#--- #-#-#-#- -###-### ---#---- ---#---- ---#---- ---#-#-- -------- -------- ---#-#-- ---#-#-- -------- ---#-#-- ---#-#-- ---#---- -------- " + fL[3][12] = " --#---#- -#-#-#-# ##-##-## ---#---- ---#---- ####---- ---#-#-- -------- ####---- ####-#-- ---#-#-- ######-- ####-#-- ---#-#-- ####---- -------- " + fL[4][12] = " #---#--- #-#-#-#- ###-###- ---#---- ---#---- ---#---- ---#-#-- -------- ---#---- -----#-- ---#-#-- -----#-- -----#-- ---#-#-- ---#---- -------- " + fL[5][12] = " --#---#- -#-#-#-# ##-##-## ---#---- ####---- ####---- ####-#-- ######-- ####---- ####-#-- ---#-#-- ####-#-- ######-- ######-- ####---- ####---- " + fL[6][12] = " #---#--- #-#-#-#- -###-### ---#---- ---#---- ---#---- ---#-#-- ---#-#-- ---#---- ---#-#-- ---#-#-- ---#-#-- -------- -------- -------- ---#---- " + fL[7][12] = " --#---#- -#-#-#-# ##-##-## ---#---- ---#---- ---#---- ---#-#-- ---#-#-- ---#---- ---#-#-- ---#-#-- ---#-#-- -------- -------- -------- ---#---- " + fL[8][12] = " #---#--- #-#-#-#- ###-###- ---#---- ---#---- ---#---- ---#-#-- ---#-#-- ---#---- ---#-#-- ---#-#-- ---#-#-- -------- -------- -------- ---#---- " + + -- C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF + fL[1][13] = " ---#---- ---#---- -------- ---#---- -------- ---#---- ---#---- ---#-#-- ---#-#-- -------- ---#-#-- -------- ---#-#-- -------- ---#-#-- ---#---- " + fL[2][13] = " ---#---- ---#---- -------- ---#---- -------- ---#---- ---#---- ---#-#-- ---#-#-- -------- ---#-#-- -------- ---#-#-- -------- ---#-#-- ---#---- " + fL[3][13] = " ---#---- ---#---- -------- ---#---- -------- ---#---- ---##### ---#-#-- ---#-### ---##### ####-### ######## ---#-### ######## ####-### ######## " + fL[4][13] = " ---#---- ---#---- -------- ---#---- -------- ---#---- ---#---- ---#-#-- ---#---- ---#---- -------- -------- ---#---- -------- -------- -------- " + fL[5][13] = " ---##### ######## ######## ---##### ######## ######## ---##### ---#-### ---##### ---#-### ######## ####-### ---#-### ######## ####-### ######## " + fL[6][13] = " -------- -------- ---#---- ---#---- -------- ---#---- ---#---- ---#-#-- -------- ---#-#-- -------- ---#-#-- ---#-#-- -------- ---#-#-- -------- " + fL[7][13] = " -------- -------- ---#---- ---#---- -------- ---#---- ---#---- ---#-#-- -------- ---#-#-- -------- ---#-#-- ---#-#-- -------- ---#-#-- -------- " + fL[8][13] = " -------- -------- ---#---- ---#---- -------- ---#---- ---#---- ---#-#-- -------- ---#-#-- -------- ---#-#-- ---#-#-- -------- ---#-#-- -------- " + + -- D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF + fL[1][14] = " ---#-#-- -------- -------- ---#-#-- ---#---- -------- -------- ---#-#-- ---#---- ---#---- -------- ######## -------- ####---- ----#### ######## " + fL[2][14] = " ---#-#-- -------- -------- ---#-#-- ---#---- -------- -------- ---#-#-- ---#---- ---#---- -------- ######## -------- ####---- ----#### ######## " + fL[3][14] = " ---#-#-- ######## -------- ---#-#-- ---##### ---##### -------- ---#-#-- ######## ---#---- -------- ######## -------- ####---- ----#### ######## " + fL[4][14] = " ---#-#-- -------- -------- ---#-#-- ---#---- ---#---- -------- ---#-#-- ---#---- ---#---- -------- ######## -------- ####---- ----#### ######## " + fL[5][14] = " ######## ######## ######## ---##### ---##### ---##### ---##### ######## ######## ####---- ---##### ######## ######## ####---- ----#### -------- " + fL[6][14] = " -------- ---#---- ---#-#-- -------- -------- ---#---- ---#-#-- ---#-#-- ---#---- -------- ---#---- ######## ######## ####---- ----#### -------- " + fL[7][14] = " -------- ---#---- ---#-#-- -------- -------- ---#---- ---#-#-- ---#-#-- ---#---- -------- ---#---- ######## ######## ####---- ----#### -------- " + fL[8][14] = " -------- ---#---- ---#-#-- -------- -------- ---#---- ---#-#-- ---#-#-- ---#---- -------- ---#---- ######## ######## ####---- ----#### -------- " + + -- F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF + fL[1][15] = " -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- " + fL[2][15] = " -------- -------- -------- -------- ---##--- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- " + fL[3][15] = " #####--- -####--- ######-- ##--##-- -######- ##---##- ##--##-- ##--##-- ##-#-##- ##-#-##- ####---- ##----#- ##------ -#####-- ##--###- -#####-- " + fL[4][15] = " ##--##-- ##--##-- --##---- ##--##-- ##-##-## -##-##-- ##--##-- ##--##-- ##-#-##- ##-#-##- --##---- ##----#- ##------ ##---##- ##-##-## ##--##-- " + fL[5][15] = " ##--##-- ##------ --##---- -#####-- ##-##-## --###--- ##--##-- -#####-- ##-#-##- ##-#-##- --#####- ####--#- #####--- ---####- #####-## -#####-- " + fL[6][15] = " #####--- ##--##-- --##---- ----##-- -######- -##-##-- ##--##-- ----##-- ##-#-##- ##-#-##- --##--## ##-##-#- ##--##-- ##---##- ##-##-## -##-##-- " + fL[7][15] = " ##------ -####--- --##---- ##--##-- ---##--- ##---##- #######- ----##-- #######- ######## --#####- ####--#- #####--- -#####-- ##--###- ##--##-- " + fL[8][15] = " ##------ -------- -------- -####--- ---##--- -------- -----##- -------- -------- ------## -------- -------- -------- -------- -------- -------- " + + -- E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF + fL[1][16] = " -#--#--- -#--#--- -##----- ---##--- ----#--- ---#---- --##---- -------- -##----- -------- -------- ---##### #-#----- -##----- -------- -------- " + fL[2][16] = " ######-- -------- --##---- --##---- ---#-#-- ---#---- --##---- -------- #--#---- -------- -------- ---#---- ##-#---- #--#---- -------- -------- " + fL[3][16] = " ##------ -####--- ---##--- -##----- ---#---- ---#---- -------- -##--#-- #--#---- -------- -------- ---#---- #--#---- --#----- --####-- -------- " + fL[4][16] = " #####--- ##--##-- --##---- --##---- ---#---- ---#---- ######-- #--##--- -##----- --##---- -------- #--#---- #--#---- -#------ --####-- -------- " + fL[5][16] = " ##------ ######-- -##----- ---##--- ---#---- ---#---- -------- -------- -------- --##---- --##---- -#-#---- #--#---- ####---- --####-- -------- " + fL[6][16] = " ##------ ##------ -------- -------- ---#---- -#-#---- --##---- -##--#-- -------- -------- -------- --##---- -------- -------- --####-- -------- " + fL[7][16] = " #######- -#####-- -####--- -####--- ---#---- --#----- --##---- #--##--- -------- -------- -------- ---#---- -------- -------- -------- -------- " + fL[8][16] = " -------- -------- -------- -------- ---#---- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- " + + ENDLUA + LUA ALLPASS + for i = 1, 8 do + for j = 1, 16, 1 do + _pc(" DG " .. fL[i][j]) + end + end + ENDLUA +; +/* + 256 ⮢ ⠭ ⮫ . + ࠢ 室 ᢥ . ࢠ - ⮫. */ \ No newline at end of file diff --git a/src/bios/exp/FUNC_4x.ASM b/bios/exp/FUNC_4x.ASM similarity index 94% rename from src/bios/exp/FUNC_4x.ASM rename to bios/exp/FUNC_4x.ASM index 052f141..517d40f 100644 --- a/src/bios/exp/FUNC_4x.ASM +++ b/bios/exp/FUNC_4x.ASM @@ -1,882 +1,882 @@ -; -; MACRO WAIT_HDD -; LD BC,IDE.Read.Status -; .loop: IN A,(C) -; BIT IDE.CtrlBit.Busy,A -; JR NZ,.loop -; ENDM -;______________________________________________________________________: -; -F4x_WAIT_HDD: LD BC,IDE.Read.Status -.loop: IN A,(C) - BIT IDE.CtrlBit.Busy,A - RET Z - JR .loop - - -; GET_BPB_OFFSET: -; ;LD A,SYS_PAGE -; ;LD HL,MS_BPB -; PUSH AF -; PUSH HL -; LD B,1 -; LD IX,#0000 -; LD DE,#0000 -; CALL FN_HDD_READ -; POP IX -; POP AF -; PUSH AF -; PUSH IX -; LD DE,#01BE ;!HARDCODE ᬥ饭 砫 ᥪ ⠡ ࠧ -; ADD IX,DE -; ; -; EX AF,AF' -; IN A,(SLOT3) -; EX AF,AF' -; OUT (SLOT3),A -; ; -; LD E,(IX+8) ; ᥪ (LBA) 砫 ࠧ (DWORD) -; LD D,(IX+9) -; LD L,(IX+10) -; LD H,(IX+11) -; ; -; EX AF,AF' -; OUT (SLOT3),A -; EX AF,AF' -; ; -; PUSH HL -; POP IX -; POP HL -; POP AF -; RET -HD_BPB_PREP: - ; [x] 27/01/2024 ⥯ ० ᯥ㬠 ࠡ⠥ ࠧ HDD - ;LD D,A - ;IN A,(SLOT3) - ;EX AF,AF' - ; LD A,SYS_PAGE - ; OUT (SLOT3),A - ; LD A,(SYS_PAGE.HD_IDF_ADR.sectors) - ; LD E,A - ;EX AF,AF' - ;OUT (SLOT3),A - ;LD A,D - ;LD D,#00 - ;LD IX,#0000 - ;LD B,#01 - - LD B,A - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,(SYS_PAGE.CURRENT_HDD) - INC A - JR NZ,.configured - ; - LD A,(SYS_PAGE.HD_IDF_ADR.sectors) - LD E,A - LD D,#00 - LD IX,#0000 - JR .done - ; -.configured: - LD IX,(SYS_PAGE.HDD_PARTITION_OFFSET+2) - LD DE,(SYS_PAGE.HDD_PARTITION_OFFSET) -.done: EX AF,AF' - OUT (SLOT3),A - LD A,B - LD B,#01 - ; -HD_PREPARE: - PUSH AF - PUSH HL - CALL HD_CALC_SECS - JR C,.error - ; - LD A,B - LD BC,IDE.Write.Counter ; ⠭ ᫮ ᥪ஢ - OUT (C),A - ; - INC C - OUT (C),L ; - INC C - OUT (C),E ; ஦ low - INC C - OUT (C),D ; ஦ high - ; - LD BC,IDE.Read.Control - IN A,(C) - AND #F0 ; !!!!! ᬮ - OR H - INC B ; IDE.Write.DeviceHead - OUT (C),A - POP HL ; BUFER & PAGE - POP AF - AND A - RET - ; -.error: POP HL - POP AF - SCF - RET - - -NEXT_ADD_SEC: - PUSH AF - - LD A,B - LD BC,IDE.Write.Counter ; ⠭ ᫮ ᥪ஢ - OUT (C),A - - DEC B - INC C - IN A,(C) ; IDE.Read.Sector - ADC A,E - INC B - OUT (C),A ; IDE.Write.Sector - - DEC B - INC C - IN A,(C) ; IDE.Read.CylinderLow - ADC A,D - INC B - OUT (C),A ; IDE.Write.CylinderLow - - DEC B - INC C - IN A,(C) ; IDE.Read.CylinderHigh - ADC A,0 - INC B - OUT (C),A ; IDE.Write.CylinderHigh - - LD BC,IDE.Read.Control - IN A,(C) - ; - LD D,A - ADC A,0 - AND #0F - LD E,A - LD A,D - AND #F0 - OR E - INC B - OUT (C),A ; IDE.Write.DeviceHead - - POP AF - RET - -; ᯮ ந ⮢ -; ⥭/ ᫥ -; 樫஢//ᥪ஢ ᥭ ॣ -; ணࠬ ᠬ ⮫쪮 / -; ᠬ⥫쭮 ந 뢠/ . -; 㤮 ࠡ ணࠬ ॠ쭮 ६, 室 -; ஬ ⥭/ ந ⢨. -FN_HDD_PREPARE: ; R/W - AND A ; ⮡ CF ᫨ ⮨ B=0 - INC B - DEC B - RET Z - - CALL HD_WAIT - RET C - - CALL HD_PREPARE - RET C - ; [x] - EX AF,AF' - LD A,#BF ; check buffer address in SLOT3 - SUB H - JR C,.SetCommand - EX AF,AF' - - SAFE_PORTY - - EXX - LD C,SLOT3 - IN B,(C) - EXX - OUT (SLOT3),A - EX AF,AF' - -.SetCommand: - LD BC,IDE.Write.Command - LD A,IDE.CMD.ATA.ReadSectorsWithRetry - ; OUT (C),A - AND A - RET - - - -FN_HDD_READ_BPB: - CALL HD_WAIT - RET C - CALL HD_BPB_PREP - JR NC,FN_HDD_READ.L1 - RET - - -; FOR LBA ONLY - NEXT_READ -; HL - bufer, A - page -; B - numer of sectors -; DE - add_par (next+DE) (d.b. 1 for NEXT) -FN_HDD_READ_NEXT: - AND A - INC B - DEC B - RET Z ; ret if 0 sectors - CALL HD_WAIT - RET C - CALL NEXT_ADD_SEC - JR FN_HDD_READ.L1 - ; -; HL - BUFER, A - PAGE -FN_HDD_READ: - AND A - INC B - DEC B - RET Z - CALL HD_WAIT - CALL NC,HD_PREPARE - RET C -.L1: EXX - LD C,SLOT3 - IN B,(C) - EXX - OUT (SLOT3),A - EX AF,AF' - ; - SAFE_PORTY - ; - LD BC,IDE.Write.Command - LD A,IDE.CMD.ATA.ReadSectorsWithRetry - OUT (C),A -.L2: CALL F4x_WAIT_HDD - ;BIT IDE.CtrlBit.DataRequest,A - AND IDE.CtrlByte.DataRequest - JR Z,.RET_PortY - ; - ;HD_READ_CONT - LD BC,IDE.Read.Data -.loop_read1: - DUP 16 - INI ; ᥣ 16 ࠧ INI - ⨬쭮. - EDUP - JR NZ,.loop_read1 -.loop_read2: - DUP 16 - INI ; ᥣ 16 ࠧ INI - ⨬쭮. - EDUP - JR NZ,.loop_read2 - ; - LD A,H - OR L - JR NZ,.L2 - ; - LD A,SYS_PAGE - OUT (SLOT3),A - EX AF,AF' - LD H,high SYS_PAGE.RAM_TABLE - LD L,A - LD A,(HL) - OUT (SLOT3),A - EX AF,AF' - LD HL,#C000 - JR .L2 - ; -.RET_PortY: - ZERO_PORTY - ; -HD_RET: EXX - OUT (C),B - EXX - LD BC,IDE.Read.Error - IN A,(C) - AND A - SCF - RET NZ - ; - EX AF,AF' - AND A - RET - - -; HL - BUFER, A - PAGE -FN_HDD_WRITE: - AND A - INC B - DEC B - RET Z - - CALL HD_WAIT - RET C - CALL HD_PREPARE - RET C - - EXX - LD C,SLOT3 - IN B,(C) - EXX - OUT (SLOT3),A - EX AF,AF' - - LD BC,IDE.Write.Command - LD A,IDE.CMD.ATA.WriteSectorsWithRetry - OUT (C),A - -HD_WR_L2: - CALL F4x_WAIT_HDD - - BIT IDE.CtrlBit.DataRequest,A - JR Z,HD_RET - - LD BC,IDE.Write.Data - LD D,32 ;!HARDCODE 稪 DUP HD_WR_LOOP -HD_WR_LOOP: - DUP 16 - OUTI ; ᥣ 16 ࠧ OUTI - ⨬쭮. - EDUP - - DEC D - JR NZ,HD_WR_LOOP - - LD A,H - OR L - JR NZ,HD_WR_L2 - - LD A,SYS_PAGE - OUT (SLOT3),A - EX AF,AF' - LD H,high SYS_PAGE.RAM_TABLE - LD L,A - LD A,(HL) - OUT (SLOT3),A - EX AF,AF' - LD HL,#C000 ; !HARDCODE - JR HD_WR_L2 - -;-----------------------------------------------------------------------; -FN_HDD_RECAL: - ; !TEST ;[ ] ࠡ ।⥫쭮 ࠭ HDD - LD BC,IDE.Read.Control - IN A,(C) - PUSH AF - ; - LD A,IDE.Drive.Master - LD BC,IDE.Write.DeviceHead - OUT (C),A - LD A,IDE.CMD.ATA.ExecuteDeviceDiagnostic - CALL HD_CMD_EXE - ; !TEST ࠡ ।⥫쭮 ࠭ HDD - POP DE - ; - RET C - LD BC,IDE.Read.Error - IN A,(C) - ; !TEST ࠡ ।⥫쭮 ࠭ HDD - LD BC,IDE.Write.DeviceHead - OUT (C),D - ; - AND #7F - DEC A - RET Z - SCF - RET - -; Diagnostic Codes -; -; Code Description -; #01 Device 0 passed, Device 1 passed or not present -; #00 Device 0 failed, Device 1 passed or not present -; #81 Device 1 failed, Device 0 passed -; #80 Device 1 failed, Device 0 failed -; -; The meaning of values other than #01 and #81 are vendor specific and -; should be considered a diagnostic failed condition. -;-----------------------------------------------------------------------; - - -;????? -; RET C -; LD A,#1F ; RECALIBRATE -; CALL HD_CMD_EXE -; RET - - - -; [x] 28/01/2024 ࠡ⠥ ᥬ -FN_HDD_TEST_IDE: - LD E,#00 - ; TEST Secondary Chanel - LD A,IDE.Chanel.Secondary - OUT (IDE.Chanel.Set),A - CALL .TEST_CHANEL - SLA E - SLA E - ; TEST Primary Chanel - LD A,IDE.Chanel.Primary - OUT (IDE.Chanel.Set),A - CALL .TEST_CHANEL -; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; LD BC,IDE.Write.DeviceHead -; LD A,IDE.Drive.Master -; OUT (C),A -; ; -; CALL TEST_HDD_DRV -; ; -; JR NZ,.NO_HDD1 -; SET 0,E -; .NO_HDD1: -; LD BC,IDE.Write.DeviceHead -; LD A,IDE.Drive.Slave -; OUT (C),A -; ; -; CALL TEST_HDD_DRV -; ; -; JR NZ,.NO_HDD2 -; SET 1,E -; .NO_HDD2: -; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; -; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - LD C,SLOT3 - IN B,(C) - LD A,SYS_PAGE - OUT (SLOT3),A - ; - LD A,(SYS_PAGE.CURRENT_HDD) - OUT (C),B - CP #FF - JR Z,.exit - AND 1 - JR Z,.exit - LD A,IDE.Chanel.Secondary - OUT (IDE.Chanel.Set),A -; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -.exit: LD A,E - AND A - SCF - RET Z ; HDD absent ! - AND A - RET - -.TEST_CHANEL: - LD BC,IDE.Write.DeviceHead - LD A,IDE.Drive.Master - OUT (C),A - ; - CALL TEST_HDD_DRV - ; - JR NZ,.NO_HDD1 - SET 0,E -.NO_HDD1: - LD BC,IDE.Write.DeviceHead - LD A,IDE.Drive.Slave - OUT (C),A - ; - CALL TEST_HDD_DRV - ; - RET NZ - SET 1,E - RET - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;-----------------------------------[DIFFERENT] -; ॣ E!!! -TEST_HDD_DRV: - LD HL,#01FE - LD BC,IDE.Write.Counter - OUT (C),L - INC C - OUT (C),H ; IDE.Write.Sector - ; - DEC C - DEC B - IN A,(C) ; IDE.Read.Counter - CP L - RET NZ - INC C - IN A,(C) ; IDE.Read.Sector - CP H - RET - -; TEST_HDD_DRV: -; ; EXTENDED.ASM variant -; LD HL,#00FF -; LD BC,IDE.Write.CylinderLow -; OUT (C),L -; INC C -; OUT (C),H ; IDE.Write.CylinderHigh - -; INC B -; DEC C -; IN A,(C) ; ॣ BC = #0254 - .CylinderLow -; CP L -; RET NZ -; INC C - -; IN A,(C) ; ॣ BC = #0255 - .CylinderHigh -; CP H -; RET - - -; [x] 07/01/2024 bit0 - master/slave, bit1: Primary/Secondary, bit2..3: ᯮ騩 ࠧ MBR -; !TODO ᤥ ࠡ ६묨 SYS_PAGE.IDE_0..3 -FN_HDD_PART: - DI - PUSH BC - PUSH HL - ; - EX AF,AF' - IN A,(SLOT3) - EX AF,AF' - ; - LD C,A - AND 2 - LD A,IDE.Chanel.Primary - JR Z,.SET_CH - LD A,IDE.Chanel.Secondary -.SET_CH: - OUT (IDE.Chanel.Set),A - ; - LD A,C - PUSH AF - AND 1 - ; - LD A,IDE.Drive.Slave - JR NZ,.SET_Master_Slave - ; - LD A,IDE.Drive.Master -.SET_Master_Slave: - LD BC,IDE.Write.DeviceHead - OUT (C),A - CALL TEST_HDD_DRV - JR NZ,.Error - ; - CALL FN_HDD_INIT.L3 - JR C,.Error - ; - POP BC - LD A,SYS_PAGE - OUT (SLOT3),A - ; - LD A,B - LD (SYS_PAGE.CURRENT_HDD),A - ; - EX AF,AF' - OUT (SLOT3),A - ; - CALL SET_BPB_OFFSET -.exit: POP HL - POP BC - EI - RET - ; -.Error: POP AF - SCF - JR .exit - -; [x] 27/01/2024 ஢ ४⭮ ࠡ FN_HDD_PART -FN_HDD_INIT: - LD C,SLOT3 - IN B,(C) - LD A,SYS_PAGE - OUT (SLOT3),A - ; - LD A,(SYS_PAGE.CURRENT_HDD) - OUT (C),B - INC A - JR Z,FN_HDD_PART - - ; !FIXIT ᤥ 롮 ࢮ 襣 SYS.IDE_0-3 - CALL TEST_HDD_DRV - SCF - RET NZ - ; LD BC,IDE.Write.DeviceHead - ; LD A,IDE.Drive.Master - ; OUT (C),A - ; CALL TEST_HDD_DRV - ; JR NZ,.ABSENT - ; -.L3: CALL F4x_WAIT_HDD - LD BC,IDE.Write.Command - LD A,IDE.CMD.ATA.IdentifyDevice ;!FIXIT । - OUT (C),A - CALL F4x_WAIT_HDD - AND IDE.CtrlByte.DataRequest - ;JR NZ,.L2 - SCF - RET Z - ;JR NZ,.L2 - ;SCF - ;RET -; .ABSENT: -; LD BC,IDE.Write.DeviceHead -; LD A,IDE.Drive.Slave -; OUT (C),A -; CALL TEST_HDD_DRV -; JR Z,.L3 -; SCF -; RET - ; -;.L2: - LD BC,IDE.Read.Data - LD HL,SYS_PAGE.HD_IDF_ADR - IN A,(SLOT3) - LD D,A - LD A,SYS_PAGE - OUT (SLOT3),A - INIR - INIR - ; B = 0 - LD H,B - LD L,B - LD A,(SYS_PAGE.HD_IDF_ADR.sectors) ; ᫮ ᥪ஢ - LD C,A - ;LD HL,0 - ;LD B,H - LD A,(SYS_PAGE.HD_IDF_ADR.heads) ; ᫮ -.loop: ADD HL,BC - DEC A - JR NZ,.loop - LD (SYS_PAGE.HD_IDF_ADR.sec_cyl),HL - CALL F4x_WAIT_HDD - LD BC,IDE.Read.Control - IN A,(C) - AND #10 - LD B,A - LD A,(SYS_PAGE.HD_IDF_ADR.heads) ; ᫮ - DEC A - AND #0F - OR IDE.Drive.Master - OR B - - LD H,A - LD A,(SYS_PAGE.HD_IDF_ADR.LBA_CHS) - ;BIT 1,A - AND %0000'0010 - JR Z,.NO_LBA - SET 6,H -.NO_LBA: - LD BC,IDE.Write.DeviceHead - OUT (C),H - LD A,(SYS_PAGE.HD_IDF_ADR.sectors) ; ᫮ ᥪ஢ -.HDD_CONFIGURED: - LD BC,IDE.Write.Counter - OUT (C),A - LD A,D - OUT (SLOT3),A - LD A,IDE.CMD.ATA.InitializeDeviceParameters ; SET HDD PARAMETERS - ;CALL HD_CMD_EXE - ;RET -HD_CMD_EXE: - CALL HD_WAIT - RET C - LD BC,IDE.Write.Command - OUT (C),A -HD_WAIT: - PUSH DE - PUSH BC - PUSH AF - LD DE,0 - LD BC,IDE.Read.Status -.loop: IN A,(C) - AND IDE.CtrlByte.Busy - JR Z,.EXIT - DEC DE - LD A,D - OR E - JR NZ,.loop - POP AF - POP BC - POP DE - SCF - RET - ; -.EXIT: POP AF - POP BC - POP DE - AND A - RET - - -; ;EXTENDED.ASM Version -; HDD_LBA: ;???!!!! -; POP BC -; LD L,E -; LD E,D -; LD D,XL -; XOR A -; LD H,A -; RET -; HD_CALC_SECS: -; LD A,XH -; AND A -; SCF -; RET NZ ; 訡, ᫨誮 让 HDD - -; PUSH BC -; LD BC,IDE.Write.DeviceHead -; DEC B -; IN A,(C) -; BIT 6,A -; JR NZ,HDD_LBA -; ; POP BC - - -;EXP_HDD.ASM Version -HD_CALC_SECS: - PUSH BC - LD BC,IDE.Read.Control - IN A,(C) - AND %0100'0000 - POP BC - JR Z,.CHS - ; LBA - LD L,E - LD E,D - LD D,XL - LD A,XH - AND #0F ; LBA 28 - LD H,A - RET - ; CHS -.CHS: LD A,XH - AND A - SCF - RET NZ ; 訡, ᫨誮 让 HDD - ; IX,DE - ᮫ ᥪ - PUSH IX - POP HL - ; - IN A,(SLOT3) - LD C,A - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,C - LD (SYS_PAGE.COPY_SLOT3),A - ; HL,DE - ᥪ - ; BC - ᫮ ᥪ஢ 樫 - LD BC,(SYS_PAGE.HD_IDF_ADR.sec_cyl) ; ᫮ ᥪ஢ 樫 - LD A,16 ; HL,DE ࠧ BC - SCF -.DIV_LOOP: - EX DE,HL - ADD HL,HL - EX DE,HL - ADC HL,HL - ; - SBC HL,BC ; ࠢ HL BC - JR NC,.NO_ADD ; ७ 뫮 - +1! - ADD HL,BC - DEC A - JR NZ,.DIV_LOOP - JR .DIV_END -.NO_ADD: - INC DE - DEC A - JR NZ,.DIV_LOOP -.DIV_END: - ; DE - १, HL - ⮪ - ; DE - 樫 - LD A,(SYS_PAGE.HD_IDF_ADR.sectors) - ; A - ᫮ ᥪ஢ ஦ - ; HL - ᥪ 樫 - LD C,A - ;LD BC,(MS_BPB+S_P_T) ; - XOR A - LD B,A -.LOOP: SBC HL,BC - INC A - JR NC,.LOOP - ; - DEC A ; A - - ADD HL,BC ; L - ᥪ - INC L - LD H,A ; HL - HEAD,SEC - ; - LD A,(SYS_PAGE.COPY_SLOT3) - OUT (SLOT3),A - AND A - RET - -; [x] 27/01/2024 ⥯ ० ᯥ㬠 ࠡ⠥ ࠧ HDD -SET_BPB_OFFSET: - LD A,SYS_PAGE - LD HL,SYS_PAGE.MS_BPB - LD IX,#0000 - LD DE,#0000 - LD B,1 - CALL FN_HDD_READ - ; - EX AF,AF' - IN A,(SLOT3) - EX AF,AF' - OUT (SLOT3),A - ; - LD A,(SYS_PAGE.CURRENT_HDD) - RRCA - RRCA - AND 3 - INC A - LD B,A - ; - ; ; ᬥ饭 砫 ᥪ ⠡ ࠧ c ᥪ஬ LBA ࢮ ࠧ - LD HL,SYS_PAGE.MS_BPB - _sMBR_PARTITION_RECORD + _sBOOT_SECTOR.PARTITION_TABLE - LD DE,_sMBR_PARTITION_RECORD -.loop: ADD HL,DE - DJNZ .loop - ; - LD A,_sMBR_PARTITION_RECORD.Start_LBA - ADD L - LD L,A - LD DE,SYS_PAGE.HDD_PARTITION_OFFSET - LD C,_sMBR_PARTITION_RECORD.Size_LBA - _sMBR_PARTITION_RECORD.Start_LBA - LDIR - ; [x] 07/07/2024 fix bug with select empty partition record - EX DE,HL - XOR A - LD B,_sMBR_PARTITION_RECORD.Size_LBA - _sMBR_PARTITION_RECORD.Start_LBA -.loop2: DEC HL - OR (HL) - DJNZ .loop2 - SUB 1 - ; - EX AF,AF' - OUT (SLOT3),A - EX AF,AF' - RET - -; ENDMODULE -;************************************************ - -; ????? -; DB 'HDD_DRV_END' -; 室: -; C - -; 0 - INIT - 室 => A - ᫮ ন ᪮. -; 1 - RESET - 롮 ᪠ A - ᪠ 0 => -; 2 - (STATUS) !!!!! TEST? -; 3 - MEDIA CHECK - A - ᪠ => A = 0 - old. #FF - new (ᥣ #FF) !!!!! PREPARE??? -; 4 - READ BPB - A - HL - ⥪饩 ࠭. -; 5 - READ - A - , IX:DE ᥪ, HL - , B - ᫮ ᥪ஢ -; 6 - WRITE - '' - -; 7 - PART -; 8 - READ_NEXT -; -; 訡 - CF - A - 訡 -; -; 0 - 訡 -; 1 - ୠ -; 2 - ᪠ -; 3 - ଠ ( MS-DOS) -; 4 - ⮢ -; 5 - 訡 樮஢ -; 6 - ᥪ -; 7 - 訡 CRC -; 8 - -; 9 - 訡 ⥭ -; 10 - 訡 -; 11 - +; +; MACRO WAIT_HDD +; LD BC,IDE.Read.Status +; .loop: IN A,(C) +; BIT IDE.CtrlBit.Busy,A +; JR NZ,.loop +; ENDM +;______________________________________________________________________: +; +F4x_WAIT_HDD: LD BC,IDE.Read.Status +.loop: IN A,(C) + BIT IDE.CtrlBit.Busy,A + RET Z + JR .loop + + +; GET_BPB_OFFSET: +; ;LD A,SYS_PAGE +; ;LD HL,MS_BPB +; PUSH AF +; PUSH HL +; LD B,1 +; LD IX,#0000 +; LD DE,#0000 +; CALL FN_HDD_READ +; POP IX +; POP AF +; PUSH AF +; PUSH IX +; LD DE,#01BE ;!HARDCODE ᬥ饭 砫 ᥪ ⠡ ࠧ +; ADD IX,DE +; ; +; EX AF,AF' +; IN A,(SLOT3) +; EX AF,AF' +; OUT (SLOT3),A +; ; +; LD E,(IX+8) ; ᥪ (LBA) 砫 ࠧ (DWORD) +; LD D,(IX+9) +; LD L,(IX+10) +; LD H,(IX+11) +; ; +; EX AF,AF' +; OUT (SLOT3),A +; EX AF,AF' +; ; +; PUSH HL +; POP IX +; POP HL +; POP AF +; RET +HD_BPB_PREP: + ; [x] 27/01/2024 ⥯ ० ᯥ㬠 ࠡ⠥ ࠧ HDD + ;LD D,A + ;IN A,(SLOT3) + ;EX AF,AF' + ; LD A,SYS_PAGE + ; OUT (SLOT3),A + ; LD A,(SYS_PAGE.HD_IDF_ADR.sectors) + ; LD E,A + ;EX AF,AF' + ;OUT (SLOT3),A + ;LD A,D + ;LD D,#00 + ;LD IX,#0000 + ;LD B,#01 + + LD B,A + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,(SYS_PAGE.CURRENT_HDD) + INC A + JR NZ,.configured + ; + LD A,(SYS_PAGE.HD_IDF_ADR.sectors) + LD E,A + LD D,#00 + LD IX,#0000 + JR .done + ; +.configured: + LD IX,(SYS_PAGE.HDD_PARTITION_OFFSET+2) + LD DE,(SYS_PAGE.HDD_PARTITION_OFFSET) +.done: EX AF,AF' + OUT (SLOT3),A + LD A,B + LD B,#01 + ; +HD_PREPARE: + PUSH AF + PUSH HL + CALL HD_CALC_SECS + JR C,.error + ; + LD A,B + LD BC,IDE.Write.Counter ; ⠭ ᫮ ᥪ஢ + OUT (C),A + ; + INC C + OUT (C),L ; + INC C + OUT (C),E ; ஦ low + INC C + OUT (C),D ; ஦ high + ; + LD BC,IDE.Read.Control + IN A,(C) + AND #F0 ; !!!!! ᬮ + OR H + INC B ; IDE.Write.DeviceHead + OUT (C),A + POP HL ; BUFER & PAGE + POP AF + AND A + RET + ; +.error: POP HL + POP AF + SCF + RET + + +NEXT_ADD_SEC: + PUSH AF + + LD A,B + LD BC,IDE.Write.Counter ; ⠭ ᫮ ᥪ஢ + OUT (C),A + + DEC B + INC C + IN A,(C) ; IDE.Read.Sector + ADC A,E + INC B + OUT (C),A ; IDE.Write.Sector + + DEC B + INC C + IN A,(C) ; IDE.Read.CylinderLow + ADC A,D + INC B + OUT (C),A ; IDE.Write.CylinderLow + + DEC B + INC C + IN A,(C) ; IDE.Read.CylinderHigh + ADC A,0 + INC B + OUT (C),A ; IDE.Write.CylinderHigh + + LD BC,IDE.Read.Control + IN A,(C) + ; + LD D,A + ADC A,0 + AND #0F + LD E,A + LD A,D + AND #F0 + OR E + INC B + OUT (C),A ; IDE.Write.DeviceHead + + POP AF + RET + +; ᯮ ந ⮢ +; ⥭/ ᫥ +; 樫஢//ᥪ஢ ᥭ ॣ +; ணࠬ ᠬ ⮫쪮 / +; ᠬ⥫쭮 ந 뢠/ . +; 㤮 ࠡ ணࠬ ॠ쭮 ६, 室 +; ஬ ⥭/ ந ⢨. +FN_HDD_PREPARE: ; R/W + AND A ; ⮡ CF ᫨ ⮨ B=0 + INC B + DEC B + RET Z + + CALL HD_WAIT + RET C + + CALL HD_PREPARE + RET C + ; [x] + EX AF,AF' + LD A,#BF ; check buffer address in SLOT3 + SUB H + JR C,.SetCommand + EX AF,AF' + + SAFE_PORTY + + EXX + LD C,SLOT3 + IN B,(C) + EXX + OUT (SLOT3),A + EX AF,AF' + +.SetCommand: + LD BC,IDE.Write.Command + LD A,IDE.CMD.ATA.ReadSectorsWithRetry + ; OUT (C),A + AND A + RET + + + +FN_HDD_READ_BPB: + CALL HD_WAIT + RET C + CALL HD_BPB_PREP + JR NC,FN_HDD_READ.L1 + RET + + +; FOR LBA ONLY - NEXT_READ +; HL - bufer, A - page +; B - numer of sectors +; DE - add_par (next+DE) (d.b. 1 for NEXT) +FN_HDD_READ_NEXT: + AND A + INC B + DEC B + RET Z ; ret if 0 sectors + CALL HD_WAIT + RET C + CALL NEXT_ADD_SEC + JR FN_HDD_READ.L1 + ; +; HL - BUFER, A - PAGE +FN_HDD_READ: + AND A + INC B + DEC B + RET Z + CALL HD_WAIT + CALL NC,HD_PREPARE + RET C +.L1: EXX + LD C,SLOT3 + IN B,(C) + EXX + OUT (SLOT3),A + EX AF,AF' + ; + SAFE_PORTY + ; + LD BC,IDE.Write.Command + LD A,IDE.CMD.ATA.ReadSectorsWithRetry + OUT (C),A +.L2: CALL F4x_WAIT_HDD + ;BIT IDE.CtrlBit.DataRequest,A + AND IDE.CtrlByte.DataRequest + JR Z,.RET_PortY + ; + ;HD_READ_CONT + LD BC,IDE.Read.Data +.loop_read1: + DUP 16 + INI ; ᥣ 16 ࠧ INI - ⨬쭮. + EDUP + JR NZ,.loop_read1 +.loop_read2: + DUP 16 + INI ; ᥣ 16 ࠧ INI - ⨬쭮. + EDUP + JR NZ,.loop_read2 + ; + LD A,H + OR L + JR NZ,.L2 + ; + LD A,SYS_PAGE + OUT (SLOT3),A + EX AF,AF' + LD H,high SYS_PAGE.RAM_TABLE + LD L,A + LD A,(HL) + OUT (SLOT3),A + EX AF,AF' + LD HL,#C000 + JR .L2 + ; +.RET_PortY: + ZERO_PORTY + ; +HD_RET: EXX + OUT (C),B + EXX + LD BC,IDE.Read.Error + IN A,(C) + AND A + SCF + RET NZ + ; + EX AF,AF' + AND A + RET + + +; HL - BUFER, A - PAGE +FN_HDD_WRITE: + AND A + INC B + DEC B + RET Z + + CALL HD_WAIT + RET C + CALL HD_PREPARE + RET C + + EXX + LD C,SLOT3 + IN B,(C) + EXX + OUT (SLOT3),A + EX AF,AF' + + LD BC,IDE.Write.Command + LD A,IDE.CMD.ATA.WriteSectorsWithRetry + OUT (C),A + +HD_WR_L2: + CALL F4x_WAIT_HDD + + BIT IDE.CtrlBit.DataRequest,A + JR Z,HD_RET + + LD BC,IDE.Write.Data + LD D,32 ;!HARDCODE 稪 DUP HD_WR_LOOP +HD_WR_LOOP: + DUP 16 + OUTI ; ᥣ 16 ࠧ OUTI - ⨬쭮. + EDUP + + DEC D + JR NZ,HD_WR_LOOP + + LD A,H + OR L + JR NZ,HD_WR_L2 + + LD A,SYS_PAGE + OUT (SLOT3),A + EX AF,AF' + LD H,high SYS_PAGE.RAM_TABLE + LD L,A + LD A,(HL) + OUT (SLOT3),A + EX AF,AF' + LD HL,#C000 ; !HARDCODE + JR HD_WR_L2 + +;-----------------------------------------------------------------------; +FN_HDD_RECAL: + ; !TEST ;[ ] ࠡ ।⥫쭮 ࠭ HDD + LD BC,IDE.Read.Control + IN A,(C) + PUSH AF + ; + LD A,IDE.Drive.Master + LD BC,IDE.Write.DeviceHead + OUT (C),A + LD A,IDE.CMD.ATA.ExecuteDeviceDiagnostic + CALL HD_CMD_EXE + ; !TEST ࠡ ।⥫쭮 ࠭ HDD + POP DE + ; + RET C + LD BC,IDE.Read.Error + IN A,(C) + ; !TEST ࠡ ।⥫쭮 ࠭ HDD + LD BC,IDE.Write.DeviceHead + OUT (C),D + ; + AND #7F + DEC A + RET Z + SCF + RET + +; Diagnostic Codes +; +; Code Description +; #01 Device 0 passed, Device 1 passed or not present +; #00 Device 0 failed, Device 1 passed or not present +; #81 Device 1 failed, Device 0 passed +; #80 Device 1 failed, Device 0 failed +; +; The meaning of values other than #01 and #81 are vendor specific and +; should be considered a diagnostic failed condition. +;-----------------------------------------------------------------------; + + +;????? +; RET C +; LD A,#1F ; RECALIBRATE +; CALL HD_CMD_EXE +; RET + + + +; [x] 28/01/2024 ࠡ⠥ ᥬ +FN_HDD_TEST_IDE: + LD E,#00 + ; TEST Secondary Chanel + LD A,IDE.Chanel.Secondary + OUT (IDE.Chanel.Set),A + CALL .TEST_CHANEL + SLA E + SLA E + ; TEST Primary Chanel + LD A,IDE.Chanel.Primary + OUT (IDE.Chanel.Set),A + CALL .TEST_CHANEL +; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; LD BC,IDE.Write.DeviceHead +; LD A,IDE.Drive.Master +; OUT (C),A +; ; +; CALL TEST_HDD_DRV +; ; +; JR NZ,.NO_HDD1 +; SET 0,E +; .NO_HDD1: +; LD BC,IDE.Write.DeviceHead +; LD A,IDE.Drive.Slave +; OUT (C),A +; ; +; CALL TEST_HDD_DRV +; ; +; JR NZ,.NO_HDD2 +; SET 1,E +; .NO_HDD2: +; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + LD C,SLOT3 + IN B,(C) + LD A,SYS_PAGE + OUT (SLOT3),A + ; + LD A,(SYS_PAGE.CURRENT_HDD) + OUT (C),B + CP #FF + JR Z,.exit + AND 1 + JR Z,.exit + LD A,IDE.Chanel.Secondary + OUT (IDE.Chanel.Set),A +; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.exit: LD A,E + AND A + SCF + RET Z ; HDD absent ! + AND A + RET + +.TEST_CHANEL: + LD BC,IDE.Write.DeviceHead + LD A,IDE.Drive.Master + OUT (C),A + ; + CALL TEST_HDD_DRV + ; + JR NZ,.NO_HDD1 + SET 0,E +.NO_HDD1: + LD BC,IDE.Write.DeviceHead + LD A,IDE.Drive.Slave + OUT (C),A + ; + CALL TEST_HDD_DRV + ; + RET NZ + SET 1,E + RET + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;-----------------------------------[DIFFERENT] +; ॣ E!!! +TEST_HDD_DRV: + LD HL,#01FE + LD BC,IDE.Write.Counter + OUT (C),L + INC C + OUT (C),H ; IDE.Write.Sector + ; + DEC C + DEC B + IN A,(C) ; IDE.Read.Counter + CP L + RET NZ + INC C + IN A,(C) ; IDE.Read.Sector + CP H + RET + +; TEST_HDD_DRV: +; ; EXTENDED.ASM variant +; LD HL,#00FF +; LD BC,IDE.Write.CylinderLow +; OUT (C),L +; INC C +; OUT (C),H ; IDE.Write.CylinderHigh + +; INC B +; DEC C +; IN A,(C) ; ॣ BC = #0254 - .CylinderLow +; CP L +; RET NZ +; INC C + +; IN A,(C) ; ॣ BC = #0255 - .CylinderHigh +; CP H +; RET + + +; [x] 07/01/2024 bit0 - master/slave, bit1: Primary/Secondary, bit2..3: ᯮ騩 ࠧ MBR +; !TODO ᤥ ࠡ ६묨 SYS_PAGE.IDE_0..3 +FN_HDD_PART: + DI + PUSH BC + PUSH HL + ; + EX AF,AF' + IN A,(SLOT3) + EX AF,AF' + ; + LD C,A + AND 2 + LD A,IDE.Chanel.Primary + JR Z,.SET_CH + LD A,IDE.Chanel.Secondary +.SET_CH: + OUT (IDE.Chanel.Set),A + ; + LD A,C + PUSH AF + AND 1 + ; + LD A,IDE.Drive.Slave + JR NZ,.SET_Master_Slave + ; + LD A,IDE.Drive.Master +.SET_Master_Slave: + LD BC,IDE.Write.DeviceHead + OUT (C),A + CALL TEST_HDD_DRV + JR NZ,.Error + ; + CALL FN_HDD_INIT.L3 + JR C,.Error + ; + POP BC + LD A,SYS_PAGE + OUT (SLOT3),A + ; + LD A,B + LD (SYS_PAGE.CURRENT_HDD),A + ; + EX AF,AF' + OUT (SLOT3),A + ; + CALL SET_BPB_OFFSET +.exit: POP HL + POP BC + EI + RET + ; +.Error: POP AF + SCF + JR .exit + +; [x] 27/01/2024 ஢ ४⭮ ࠡ FN_HDD_PART +FN_HDD_INIT: + LD C,SLOT3 + IN B,(C) + LD A,SYS_PAGE + OUT (SLOT3),A + ; + LD A,(SYS_PAGE.CURRENT_HDD) + OUT (C),B + INC A + JR Z,FN_HDD_PART + + ; !FIXIT ᤥ 롮 ࢮ 襣 SYS.IDE_0-3 + CALL TEST_HDD_DRV + SCF + RET NZ + ; LD BC,IDE.Write.DeviceHead + ; LD A,IDE.Drive.Master + ; OUT (C),A + ; CALL TEST_HDD_DRV + ; JR NZ,.ABSENT + ; +.L3: CALL F4x_WAIT_HDD + LD BC,IDE.Write.Command + LD A,IDE.CMD.ATA.IdentifyDevice ;!FIXIT । + OUT (C),A + CALL F4x_WAIT_HDD + AND IDE.CtrlByte.DataRequest + ;JR NZ,.L2 + SCF + RET Z + ;JR NZ,.L2 + ;SCF + ;RET +; .ABSENT: +; LD BC,IDE.Write.DeviceHead +; LD A,IDE.Drive.Slave +; OUT (C),A +; CALL TEST_HDD_DRV +; JR Z,.L3 +; SCF +; RET + ; +;.L2: + LD BC,IDE.Read.Data + LD HL,SYS_PAGE.HD_IDF_ADR + IN A,(SLOT3) + LD D,A + LD A,SYS_PAGE + OUT (SLOT3),A + INIR + INIR + ; B = 0 + LD H,B + LD L,B + LD A,(SYS_PAGE.HD_IDF_ADR.sectors) ; ᫮ ᥪ஢ + LD C,A + ;LD HL,0 + ;LD B,H + LD A,(SYS_PAGE.HD_IDF_ADR.heads) ; ᫮ +.loop: ADD HL,BC + DEC A + JR NZ,.loop + LD (SYS_PAGE.HD_IDF_ADR.sec_cyl),HL + CALL F4x_WAIT_HDD + LD BC,IDE.Read.Control + IN A,(C) + AND #10 + LD B,A + LD A,(SYS_PAGE.HD_IDF_ADR.heads) ; ᫮ + DEC A + AND #0F + OR IDE.Drive.Master + OR B + + LD H,A + LD A,(SYS_PAGE.HD_IDF_ADR.LBA_CHS) + ;BIT 1,A + AND %0000'0010 + JR Z,.NO_LBA + SET 6,H +.NO_LBA: + LD BC,IDE.Write.DeviceHead + OUT (C),H + LD A,(SYS_PAGE.HD_IDF_ADR.sectors) ; ᫮ ᥪ஢ +.HDD_CONFIGURED: + LD BC,IDE.Write.Counter + OUT (C),A + LD A,D + OUT (SLOT3),A + LD A,IDE.CMD.ATA.InitializeDeviceParameters ; SET HDD PARAMETERS + ;CALL HD_CMD_EXE + ;RET +HD_CMD_EXE: + CALL HD_WAIT + RET C + LD BC,IDE.Write.Command + OUT (C),A +HD_WAIT: + PUSH DE + PUSH BC + PUSH AF + LD DE,0 + LD BC,IDE.Read.Status +.loop: IN A,(C) + AND IDE.CtrlByte.Busy + JR Z,.EXIT + DEC DE + LD A,D + OR E + JR NZ,.loop + POP AF + POP BC + POP DE + SCF + RET + ; +.EXIT: POP AF + POP BC + POP DE + AND A + RET + + +; ;EXTENDED.ASM Version +; HDD_LBA: ;???!!!! +; POP BC +; LD L,E +; LD E,D +; LD D,XL +; XOR A +; LD H,A +; RET +; HD_CALC_SECS: +; LD A,XH +; AND A +; SCF +; RET NZ ; 訡, ᫨誮 让 HDD + +; PUSH BC +; LD BC,IDE.Write.DeviceHead +; DEC B +; IN A,(C) +; BIT 6,A +; JR NZ,HDD_LBA +; ; POP BC + + +;EXP_HDD.ASM Version +HD_CALC_SECS: + PUSH BC + LD BC,IDE.Read.Control + IN A,(C) + AND %0100'0000 + POP BC + JR Z,.CHS + ; LBA + LD L,E + LD E,D + LD D,XL + LD A,XH + AND #0F ; LBA 28 + LD H,A + RET + ; CHS +.CHS: LD A,XH + AND A + SCF + RET NZ ; 訡, ᫨誮 让 HDD + ; IX,DE - ᮫ ᥪ + PUSH IX + POP HL + ; + IN A,(SLOT3) + LD C,A + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,C + LD (SYS_PAGE.COPY_SLOT3),A + ; HL,DE - ᥪ + ; BC - ᫮ ᥪ஢ 樫 + LD BC,(SYS_PAGE.HD_IDF_ADR.sec_cyl) ; ᫮ ᥪ஢ 樫 + LD A,16 ; HL,DE ࠧ BC + SCF +.DIV_LOOP: + EX DE,HL + ADD HL,HL + EX DE,HL + ADC HL,HL + ; + SBC HL,BC ; ࠢ HL BC + JR NC,.NO_ADD ; ७ 뫮 - +1! + ADD HL,BC + DEC A + JR NZ,.DIV_LOOP + JR .DIV_END +.NO_ADD: + INC DE + DEC A + JR NZ,.DIV_LOOP +.DIV_END: + ; DE - १, HL - ⮪ + ; DE - 樫 + LD A,(SYS_PAGE.HD_IDF_ADR.sectors) + ; A - ᫮ ᥪ஢ ஦ + ; HL - ᥪ 樫 + LD C,A + ;LD BC,(MS_BPB+S_P_T) ; + XOR A + LD B,A +.LOOP: SBC HL,BC + INC A + JR NC,.LOOP + ; + DEC A ; A - + ADD HL,BC ; L - ᥪ + INC L + LD H,A ; HL - HEAD,SEC + ; + LD A,(SYS_PAGE.COPY_SLOT3) + OUT (SLOT3),A + AND A + RET + +; [x] 27/01/2024 ⥯ ० ᯥ㬠 ࠡ⠥ ࠧ HDD +SET_BPB_OFFSET: + LD A,SYS_PAGE + LD HL,SYS_PAGE.MS_BPB + LD IX,#0000 + LD DE,#0000 + LD B,1 + CALL FN_HDD_READ + ; + EX AF,AF' + IN A,(SLOT3) + EX AF,AF' + OUT (SLOT3),A + ; + LD A,(SYS_PAGE.CURRENT_HDD) + RRCA + RRCA + AND 3 + INC A + LD B,A + ; + ; ; ᬥ饭 砫 ᥪ ⠡ ࠧ c ᥪ஬ LBA ࢮ ࠧ + LD HL,SYS_PAGE.MS_BPB - _sMBR_PARTITION_RECORD + _sBOOT_SECTOR.PARTITION_TABLE + LD DE,_sMBR_PARTITION_RECORD +.loop: ADD HL,DE + DJNZ .loop + ; + LD A,_sMBR_PARTITION_RECORD.Start_LBA + ADD L + LD L,A + LD DE,SYS_PAGE.HDD_PARTITION_OFFSET + LD C,_sMBR_PARTITION_RECORD.Size_LBA - _sMBR_PARTITION_RECORD.Start_LBA + LDIR + ; [x] 07/07/2024 fix bug with select empty partition record + EX DE,HL + XOR A + LD B,_sMBR_PARTITION_RECORD.Size_LBA - _sMBR_PARTITION_RECORD.Start_LBA +.loop2: DEC HL + OR (HL) + DJNZ .loop2 + SUB 1 + ; + EX AF,AF' + OUT (SLOT3),A + EX AF,AF' + RET + +; ENDMODULE +;************************************************ + +; ????? +; DB 'HDD_DRV_END' +; 室: +; C - +; 0 - INIT - 室 => A - ᫮ ন ᪮. +; 1 - RESET - 롮 ᪠ A - ᪠ 0 => +; 2 - (STATUS) !!!!! TEST? +; 3 - MEDIA CHECK - A - ᪠ => A = 0 - old. #FF - new (ᥣ #FF) !!!!! PREPARE??? +; 4 - READ BPB - A - HL - ⥪饩 ࠭. +; 5 - READ - A - , IX:DE ᥪ, HL - , B - ᫮ ᥪ஢ +; 6 - WRITE - '' - +; 7 - PART +; 8 - READ_NEXT +; +; 訡 - CF - A - 訡 +; +; 0 - 訡 +; 1 - ୠ +; 2 - ᪠ +; 3 - ଠ ( MS-DOS) +; 4 - ⮢ +; 5 - 訡 樮஢ +; 6 - ᥪ +; 7 - 訡 CRC +; 8 - +; 9 - 訡 ⥭ +; 10 - 訡 +; 11 - ; \ No newline at end of file diff --git a/src/bios/exp/FUNC_5x.asm b/bios/exp/FUNC_5x.asm similarity index 95% rename from src/bios/exp/FUNC_5x.asm rename to bios/exp/FUNC_5x.asm index 5c54402..b9c58bc 100644 --- a/src/bios/exp/FUNC_5x.asm +++ b/bios/exp/FUNC_5x.asm @@ -1,96 +1,96 @@ - -; -; It's disk drive BIOS extender for functions 5xh. -;--------------------------------------------------------------- -;Version! Description -;--------------------------------------------------------------- -; 2.32 ! Removed `DI' Disabled Interupt instruction in HDRIVER6 -; ! function load sectors. -; ! Fixed bug waiting slave device in AUTOIDE. - -; -;INT_ADRESS EQU #C124 -;INT_PAGE EQU #C126 -;INT_ID EQU #C127 -;BIOS EQU #3FD0 -; DS #3FD0,#FF - - -DRV_VERSION: - LD HL,0 - LD BC,0 - LD DE,Disk_subsystem_ver_hex - AND A - RET - ; - -; -DRV_LIST: - IN A,(SLOT3) - PUSH AF - PUSH IY - LD A,SYS_PAGE - OUT (SLOT3),A ; !TODO ᤥ ன - XOR A - LD (IX+0),#04 ; DB 0 ;LEN ;!HARDCODE - LD (IX+1),#02 ; DB 0 ;FDD COUNT - LD (IX+2),A ; DB 0 ;HDD COUNT - LD (IX+3),A ; DB 0 ;CDROM COUNT - ; ; BLOCK 13,0 ;RESERVED ;!TODO ᤥ RAMDRIVE ? - LD (IX+4),A ; END FLAG - DEC A - -;Calculating FDD devices - ; A=#FF - ; LD HL,SYS_PAGE.FDD_TABLE - ; CALL .CHECK_FDD - ; LD HL,SYS_PAGE.FDD_1_TABLE - ; CALL .CHECK_FDD - ; A=#FF -;Calculating IDE devices IDE TYPE 1-HDD, 2-CD-ROM - LD IY,IDE.INIT_TBL_IDE0 - LD DE,IDE.HDD_INIT_TABLE - LD B,4 ; !HARDCODE - IDE ன -.CHECK_IDE: - LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM - CP #FF - JR Z,.NEXT_IDE - CP IDE.Device.HDD - JR NZ,.NOT_HDD - INC (IX+2) -.NOT_HDD: - CP IDE.Device.ATAPI - JR NZ,.NEXT_IDE - INC (IX+3) -.NEXT_IDE: - ADD IY,DE - DJNZ .CHECK_IDE - ; -.check_exit: - POP IY - POP AF - OUT (SLOT3),A - XOR A - RET - ; -; A=#FF -; .CHECK_FDD: -; INC (IX+1) -; LD B,8 -; .TFD0: CP (HL) -; INC HL -; RET NZ -; DJNZ .TFD0 -; DEC (IX+1) -; RET -; ; - - INCLUDE 'EXTENDED/FDD_DRIVER.asm' - INCLUDE 'EXTENDED/RAM_DISK_DRIVER.asm' - INCLUDE 'EXTENDED/IDE/ATA_DRV.asm' - INCLUDE 'EXTENDED/IDE/ATAPI_DRV.asm' - INCLUDE 'EXTENDED/SHARED.asm' - - - ;DISPLAY " EXTENDED end addr: ", /A, $ + +; +; It's disk drive BIOS extender for functions 5xh. +;--------------------------------------------------------------- +;Version! Description +;--------------------------------------------------------------- +; 2.32 ! Removed `DI' Disabled Interupt instruction in HDRIVER6 +; ! function load sectors. +; ! Fixed bug waiting slave device in AUTOIDE. + +; +;INT_ADRESS EQU #C124 +;INT_PAGE EQU #C126 +;INT_ID EQU #C127 +;BIOS EQU #3FD0 +; DS #3FD0,#FF + + +DRV_VERSION: + LD HL,0 + LD BC,0 + LD DE,Disk_subsystem_ver_hex + AND A + RET + ; + +; +DRV_LIST: + IN A,(SLOT3) + PUSH AF + PUSH IY + LD A,SYS_PAGE + OUT (SLOT3),A ; !TODO ᤥ ன + XOR A + LD (IX+0),#04 ; DB 0 ;LEN ;!HARDCODE + LD (IX+1),#02 ; DB 0 ;FDD COUNT + LD (IX+2),A ; DB 0 ;HDD COUNT + LD (IX+3),A ; DB 0 ;CDROM COUNT + ; ; BLOCK 13,0 ;RESERVED ;!TODO ᤥ RAMDRIVE ? + LD (IX+4),A ; END FLAG + DEC A + +;Calculating FDD devices + ; A=#FF + ; LD HL,SYS_PAGE.FDD_TABLE + ; CALL .CHECK_FDD + ; LD HL,SYS_PAGE.FDD_1_TABLE + ; CALL .CHECK_FDD + ; A=#FF +;Calculating IDE devices IDE TYPE 1-HDD, 2-CD-ROM + LD IY,IDE.INIT_TBL_IDE0 + LD DE,IDE.HDD_INIT_TABLE + LD B,4 ; !HARDCODE - IDE ன +.CHECK_IDE: + LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM + CP #FF + JR Z,.NEXT_IDE + CP IDE.Device.HDD + JR NZ,.NOT_HDD + INC (IX+2) +.NOT_HDD: + CP IDE.Device.ATAPI + JR NZ,.NEXT_IDE + INC (IX+3) +.NEXT_IDE: + ADD IY,DE + DJNZ .CHECK_IDE + ; +.check_exit: + POP IY + POP AF + OUT (SLOT3),A + XOR A + RET + ; +; A=#FF +; .CHECK_FDD: +; INC (IX+1) +; LD B,8 +; .TFD0: CP (HL) +; INC HL +; RET NZ +; DJNZ .TFD0 +; DEC (IX+1) +; RET +; ; + + INCLUDE 'EXTENDED/FDD_DRIVER.asm' + INCLUDE 'EXTENDED/RAM_DISK_DRIVER.asm' + INCLUDE 'EXTENDED/IDE/ATA_DRV.asm' + INCLUDE 'EXTENDED/IDE/ATAPI_DRV.asm' + INCLUDE 'EXTENDED/SHARED.asm' + + + ;DISPLAY " EXTENDED end addr: ", /A, $ ; \ No newline at end of file diff --git a/src/bios/exp/FUNC_CMOS.ASM b/bios/exp/FUNC_CMOS.ASM similarity index 100% rename from src/bios/exp/FUNC_CMOS.ASM rename to bios/exp/FUNC_CMOS.ASM diff --git a/src/bios/exp/FUNC_FOR_TRDOS.ASM b/bios/exp/FUNC_FOR_TRDOS.ASM similarity index 100% rename from src/bios/exp/FUNC_FOR_TRDOS.ASM rename to bios/exp/FUNC_FOR_TRDOS.ASM diff --git a/src/bios/exp/FUNC_LOW_PRINT.ASM b/bios/exp/FUNC_LOW_PRINT.ASM similarity index 94% rename from src/bios/exp/FUNC_LOW_PRINT.ASM rename to bios/exp/FUNC_LOW_PRINT.ASM index bbc5b90..724e29a 100644 --- a/src/bios/exp/FUNC_LOW_PRINT.ASM +++ b/bios/exp/FUNC_LOW_PRINT.ASM @@ -1,2405 +1,2405 @@ -; DISPLAY "Low-print-2." -;============================================================== -; -; ணࠬ LOW PRINT for Sprinter-97. -; -;============================================================== - -;============================================================= -; 㭪樨 Bios Sprinter-97. -; 29.05.97 -;============================================================= -; LP_OPEN_WIN ⨥ -; point 3D13h C=80h 室: B - . -; B=0 - Spectrum 32x24 B=1 - Spectrum 64x24 -; B=2 - Spectrum 40x24 B=3 - Spectrum 80x24 -; 室: DE - ࠧ -;============================================================= -; LP_PRINT_ALL 뢮 ᨬ ࠭ ⥪饣 -; point 3D13h C=81h 室: A - ᨬ, -; B - ᫮ 뢮 ᨬ, -; - ਡ ᨬ -;============================================================= -; LP_PRINT_SYM 뢮 ᨬ ࠭ ⥪饣 -; ਡ -; point 3D13h C=82h 室: A - ᨬ, -; B - ᫮ 뢮 ᨬ, -;============================================================= -; LP_PRINT_ATR 뢮 ਡ⮢ ࠭ ⥪饣 -; point 3D13h C=83h 室: B - ᫮ 뢮 ᨬ, -; - ਡ ᨬ -;============================================================= -; LP_SET_PLACE ⠭ ⥪饣 -; point 3D13h C=84h 室: E - ਧ⠫ -; D - ⨪ -;============================================================= -; LP_PRINT_LN 뢮 ப ᨬ ࠭ ⥪饣 -; -; point 3D13h C=85h 室: HL - ப -; B - ᫮ 뢮 ᨬ, -; - ਡ ᨬ -;============================================================= -; LP_PRINT_LN2 뢮 ப ᨬ ࠭ ⥪饣 -; ਡ⮢ -; point 3D13h C=86h 室: HL - ப -; B - ᫮ 뢮 ᨬ, -;============================================================= -; LP_PRINT_LN3 뢮 ப ᨬ ࠭ ⥪饣 -; -; point 3D13h C=87h 室: HL - ப -; B - ᫮ 뢮 ᨬ, -; D - ࠧ⥫ -; - ਡ ᨬ -;============================================================= -; LP_PRINT_LN4 뢮 ப ᨬ ࠭ ⥪饣 -; ਡ⮢ -; point 3D13h C=88h 室: HL - ப -; B - ᫮ 뢮 ᨬ, -; D - ࠧ⥫ -;============================================================= -; LP_CLS_WIN ⪠ ࠭ -; point 3D13h C=89h 室: DE - -; B - ਡ ⪨ -; H - , L - ਭ -;============================================================= - - MACRO CORRECT_SCR_40_FORWARD ;[x] 稫 31/10/23, 㨨 - EX AF,AF' - JR C,.LLL - INC D ; ० 40 -.LLL: EX AF,AF' - ENDM ; - - - MACRO CORRECT_SCR_40_BACKWARD - EX AF,AF' - JR C,.LLL - DEC D ; ० 40 -.LLL: EX AF,AF' - ENDM ; - - - MACRO DJNZ_NEXT_HL - DJNZ .LLL - CALL LP_NEXT_HL -.LLL: ; - ENDM - - -;********************************* -;* LOW LEVEL PRINTER * -;* DE' - ZG * -;* HL' - PLACE ON SCR * -;* C' - ATTRIBUTES * -;* B' - COUNT SYMBS * -;* ZF - inverse * -;* AF' - ࠭ mode * -;********************************* -; MACRO LP_BEG_PM -; EX AF,AF' -; EXX -; IN A,(SLOT3) -; LD C,A -; IN A,(PORT_Y) -; LD B,A -; LD A,SYS_PAGE -; OUT (SLOT3),A -; LD (SYS_SP),SP -; LD SP,SYS_SP -; PUSH BC -; ; -; LD HL,(WIN_ID_0.HL) -; LD DE,(WIN_ID_0.DE) -; LD BC,(WIN_ID_0.BC) -; LD A,E -; AND A -; RRA -; OUT (PORT_Y),A -; EXX -; EX AF,AF' -; ENDM ; - -; MACRO LP_END_PM -; EX AF,AF' -; EXX -; RLA -; LD E,A -; LD (WIN_ID_0.HL),HL ; -; LD (WIN_ID_0.DE),DE -; LD (WIN_ID_0.BC),BC -; ; -; POP BC -; LD A,B -; OUT (PORT_Y),A -; LD A,C -; OUT (SLOT3),A -; LD SP,SYS_SP -; EXX -; EX AF,AF' -; RET -; ENDM ; - -; -;------------------------------------------------------------------[#81] -LP_PRINT_ALL: CALL LP_BEG_P - EXX - LD C,A - EXX - LD A,#50 - OUT (SLOT3),A - ; -.loop: EXX - LD A,D - OUT (PORT_Y),A - INC D -.cont: LD (HL),C - EXX - LD A,E - EXX - INC L - LD (HL),A - DEC L - CORRECT_SCR_40_FORWARD - DJNZ_NEXT_HL - EXX - DJNZ .loop - JP LP_END_P -;------------------------------------------------------------------[#81] -; - -; -;------------------------------------------------------------------[#82] -; -LP_PRINT_SYM: CALL LP_BEG_P - EXX - LD C,A - EXX - LD A,#50 - OUT (SLOT3),A - ; -.loop: EXX - LD A,D - OUT (PORT_Y),A -.cont: LD (HL),C - INC D - CORRECT_SCR_40_FORWARD - DJNZ_NEXT_HL - EXX - DJNZ .loop - JP LP_END_P -;------------------------------------------------------------------[#82] -; - -; -;------------------------------------------------------------------[#83] -LP_PRINT_ATR: CALL LP_BEG_P - LD A,E - EXX - LD C,A - EXX - LD A,#50 - OUT (SLOT3),A - ; -.loop: EXX - LD A,D - OUT (PORT_Y),A - INC D - INC L - LD (HL),C - DEC L - CORRECT_SCR_40_FORWARD - DJNZ_NEXT_HL - EXX - DJNZ .loop - JP LP_END_P -;------------------------------------------------------------------[#83] -; - -; -;------------------------------------------------------------------[#85] -LP_PRINT_LINE: CALL LP_BEG_P - EXX - LD C,PORT_Y - EXX - LD A,#50 - OUT (SLOT3),A - ; -.loop: EXX - OUT (C),D - INC D - EXX - LD A,(HL) - INC HL - EXX - LD (HL),A - EXX - LD A,E - EXX - INC L - LD (HL),A - DEC L - CORRECT_SCR_40_FORWARD - DJNZ_NEXT_HL - EXX - DJNZ .loop - JP LP_END_P -;------------------------------------------------------------------[#85] -; - -; -;------------------------------------------------------------------[#86] -LP_PRINT_LINE2: CALL LP_BEG_P - EXX - LD C,PORT_Y - EXX - LD A,#50 - OUT (SLOT3),A - ; -.loop: LD A,(HL) - INC HL - EXX - OUT (C),D - INC D - LD (HL),A - CORRECT_SCR_40_FORWARD - DJNZ_NEXT_HL - EXX - DJNZ .loop - ;LD A,SYS_PAGE - ;OUT (SLOT3),A - JP LP_END_P -;------------------------------------------------------------------[#86] -; - -; -;------------------------------------------------------------------[#87] -LP_PRINT_LINE3: CALL LP_BEG_P - LD A,#50 - OUT (SLOT3),A - ; -.loop: EXX - LD A,D - OUT (PORT_Y),A - INC D - EXX - LD A,(HL) - INC HL - CP D - JR NZ,.NoEnd - ; - DEC HL - EXX - LD C,' ' - JP LP_PRINT_ALL.cont - ; -.NoEnd: EXX - LD (HL),A - EXX - LD A,E - EXX - INC L - LD (HL),A - DEC L - CORRECT_SCR_40_FORWARD - DJNZ_NEXT_HL - EXX - DJNZ .loop - JP LP_END_P -;------------------------------------------------------------------[#87] -; - -; -;------------------------------------------------------------------[#88] -LP_PRINT_LINE4: CALL LP_BEG_P - LD A,#50 - OUT (SLOT3),A - ; -.loop: EXX - LD A,D - OUT (PORT_Y),A - EXX - LD A,(HL) - INC HL - CP D - JR NZ,.NoEndSymbol - ; - DEC HL - EXX - LD C,' ' - JP LP_PRINT_SYM.cont - ; -.NoEndSymbol: EXX - LD (HL),A - INC D - CORRECT_SCR_40_FORWARD - DJNZ_NEXT_HL - EXX - DJNZ .loop - JP LP_END_P -;------------------------------------------------------------------[#88] -; - -; -;------------------------------------------------------------------[#8B] -LP_PRINT_LINE5: CALL LP_BEG_P - LD A,#50 - OUT (SLOT3),A - EXX - LD C,PORT_Y - EXX - ; -.loop: EXX - OUT (C),D - EXX - LD A,(HL) - INC HL - CP D - JR Z,LP_END_P - ; - EXX - LD (HL),A - EXX - LD A,E - EXX - INC L - LD (HL),A - DEC L - INC D - CORRECT_SCR_40_FORWARD - DJNZ_NEXT_HL - EXX - DJNZ .loop - ;JP LP_END_P -;----------------- ------------------------------------[#8B] -; , ⮫쪮 ୠ⨢ ॣ , ࠬ 室 -LP_END_P: LD A,SYS_PAGE - OUT (SLOT3),A - ; -.SYS_PAGE: EX AF,AF' - EXX - RLA - LD E,A - LD (WIN_ID_0.LineAddr),HL ; - LD (WIN_ID_0.ColumnRGADR_TXTMode),DE - LD (WIN_ID_0.reg_BC),BC - CALL LP_CLOSE_PG - EXX - EX AF,AF' - AND A - RET - ; -.short: EX AF,AF' - EXX - CALL LP_CLOSE_PG - EXX - EX AF,AF' - AND A - RET -;------------------------------------------------------------------[#8C] -LP_PRINT_LINE6: CALL LP_BEG_P - LD A,#50 - OUT (SLOT3),A - EXX - LD C,PORT_Y - EXX - ; -.loop: EXX - OUT (C),D - EXX - LD A,(HL) - INC HL - CP D - JR Z,LP_END_P - ; - EXX - LD (HL),A - INC D - CORRECT_SCR_40_FORWARD - DJNZ_NEXT_HL - EXX - DJNZ .loop - JP LP_END_P -;------------------------------------------------------------------[#8C] -; - - - - -; -;------------------------------------------------------------------[#84] -; ⮫쪮 ୠ⨢ ॣ , ࠬ 室 -LP_SET_PLACE: CALL LP_BEG_P - CALL LP_SET_CUR - JP LP_END_P.SYS_PAGE -;------------------------------------------------------------------[#84] -; - -; -;------------------------------------------------------------------[#8E] -LP_GET_PLACE: CALL LP_BEG_P - LD A,(WIN_ID_0.H_BEG) - NEG - EXX - ADD A,D - EXX - LD E,A - LD A,(WIN_ID_0.V_BEG) - NEG - EXX - ADD A,L - DEC A - EXX - RRCA - RRCA - AND %0011'1111 - LD D,A - ; ० txt 40 - EX AF,AF' - JR C,.no_txt40 - SRL E - AND A -.no_txt40: EX AF,AF' - JP LP_END_P.short -;------------------------------------------------------------------[#8E] -; - -; -;-------------------------------------------------------------[#89, #8D] -;--------------------------------------------------------[#8D] -LP_CLS_WIN2: LD C,A - JR LP_CLS_WIN.START -;--------------------------------------------------------[#8D] -;--------------------------------------------------------[#89] -LP_CLS_WIN: LD C,' ' -;---------------- -----------------------------[#89] -.START: CALL LP_BEG_P - CALL .CLS - JP LP_END_P.SYS_PAGE - ; -.CLS: LD (SYS_PAGE.SYS_WORK1),BC ; ࠭ 梥 ; !TODO ᯮ짮 ६ - PUSH DE - ; !TODO ஢ઠ ॢ襭 ࠧ - ᥩ 楤 ࠭ - ; EXX - ; LD A,B - ; EXX - ; CP L - ; JR NC,.loop1 - ; LD L,A - ; -.loop1: CALL LP_SET_CUR - PUSH DE - EXX - LD BC,(SYS_PAGE.SYS_WORK1) ; !TODO ᯮ짮 ६ - EXX - LD B,L - LD A,#50 - OUT (SLOT3),A - ; -.loop2: EXX - LD A,D - OUT (PORT_Y),A - LD (HL),C - INC L - LD (HL),B - DEC L - INC D - CORRECT_SCR_40_FORWARD - EXX - DJNZ .loop2 - ; - LD A,SYS_PAGE - OUT (SLOT3),A - POP DE - INC D - DEC H - JR NZ,.loop1 - ; - POP DE - JP LP_SET_CUR -;-------------------------------------------------------------[#89, #8D] -; - -; -;------------------------------------------------------------------[#B8] -; DE - 㤠 ᫠ 䮭 -WIN_GET_ZG: LD HL,ZG_ADDRESS - LD BC,ZG_SIZE - LDIR - AND A - RET -;------------------------------------------------------------------[#B8] -; - -; -;------------------------------------------------------------------[#B6] -WIN_SET_ZG: EX AF,AF' ; LP_SET_ZG: - EXX - CALL LP_OPEN_PG - CALL .SET - CALL LP_CLOSE_PG - EXX - EX AF,AF' - AND A - RET - ; -.SET: IN A,(SLOT1) ;LP_SET_ZG1 - LD (SYS_PAGE.COPY_SLOT1),A - LD A,SHARED_PAGE - OUT (SLOT1),A - EXX - LD BC,Port_All_Mode - IN A,(C) - LD (SYS_PAGE.SYS_WORK1),A - AND #FE ; Spectrum Screen on, accelerator and keyboard interrupt off - OUT (C),A - EX AF,AF' - LD B,A - AND #0F - ADD A,A - OUT (PORT_Y),A - LD A,B ; %xx00'0000 - RRCA ; %0xx0'0000 - RRCA ; %00xx'0000 - RRCA ; %000x'x000 - AND %0001'1000 - OR %0100'0000 - LD H,A - LD L,0 - LD BC,ZG_SIZE - EX DE,HL - ;[ ] 11/02/2024 ⠭ ⮢ - LD A,H - SUB #C0 - JR NC,.change - ; - LDIR -.cont: EX DE,HL - LD A,H - RRCA - RRCA - RRCA - DEC A - AND 3 - ADD A,#58 - LD H,A - ; -.loop: LD (HL),L - INC L - JR NZ,.loop - ; - LD A,(SYS_PAGE.SYS_WORK1) - LD BC,Port_All_Mode - OUT (C),A - EXX - EX AF,AF' - LD A,(SYS_PAGE.COPY_SLOT1) - OUT (SLOT1),A - RET - ; - ;[ ] 11/02/2024 ⠭ ⮢ -.change: LD A,(SYS_PAGE.COPY_SLOT3) - OUT (SLOT3),A - LDIR - LD A,SYS_PAGE - OUT (SLOT3),A - JR .cont -;------------------------------------------------------------------[#B6] -; - -;******************************************************* -; -; WIN_MAP_SC - ࠭ -; 0 - hor size -; 1 - ver size -; 2 - hor place -; 3 - ver place -; । size -LP_SIZE: CALL LP_OPEN_PG - LD DE,(WIN_ID_0.USER.SIZE_H) - LD A,(WIN_ID_0.USER.MODE) - AND %0010'0000 - CALL LP_CLOSE_PG - RET NZ - ; txt 40 - SLA E - RET -; - -; , ⮫쪮 ୠ⨢ ॣ , ࠬ 室 -; ⠭ : -; D - ᨬ ⨪ -; E - ᨬ ਧ⠫ -LP_SET_CUR: ; LP_AT_D: - LD A,(WIN_ID_0.USER.SIZE_V) - EXX - LD L,A - EXX - LD A,D - EXX -.loop_x: SUB L - JR NC,.loop_x - ; - ADD A,L - ADD A,A - ADD A,A - LD L,A - ; - LD A,(WIN_ID_0.V_BEG) - ADD A,L - LD L,A - INC L - LD H,#C3 ;!HARDCODE 砫 ⥫ SLOT3 - EXX - ;RET - ; - ;LP_TAB_E: - LD A,(WIN_ID_0.SIZE_REL) - EXX - LD D,A - EXX - LD A,E - EXX -.loop_y: SUB D - JR NC,.loop_y - JR Z,.loop_y - ; - NEG - LD B,A ; ࠭ ᪮쪮 ⠫ ᨬ ப - NEG - ADD A,D - LD D,A - ; - EX AF,AF' - JR C,.LLL - SLA D ; ० txt 40. ⠢ CF -.LLL: EX AF,AF' -.skip_Dx2: LD A,(WIN_ID_0.H_BEG) - ADD A,D - LD D,A - EXX - RET -;************************************************************* - -; ᫥ -LP_NEXT_HL: LD A,SYS_PAGE - OUT (SLOT3),A - LD A,4 ;!HARDCODE ⥫ ⨪ - ADD L - LD L,A - LD A,(WIN_ID_0.V_END) - CP L - JR C,.end_line - ; -.no_end_line: LD A,(WIN_ID_0.H_BEG) - LD D,A - LD A,(WIN_ID_0.SIZE_REL) - LD B,A - LD A,#50 - OUT (SLOT3),A - RET - ; -.end_line: LD HL,(WIN_ID_0.V_BEG) - INC L - LD H,#C3 ;!HARDCODE 砫 ⥫ SLOT3 - JP .no_end_line - -; !, ⮫쪮 ୠ⨢ ॣ , ࠬ 室 -LP_BEG_P: EX AF,AF' - EXX - CALL LP_OPEN_PG - LD HL,(WIN_ID_0.LineAddr) - LD DE,(WIN_ID_0.ColumnRGADR_TXTMode) - LD BC,(WIN_ID_0.reg_BC) - LD A,E - AND A - RRA - ;OUT (PORT_Y),A - EXX - EX AF,AF' - RET -; -LP_INI_P: EX AF,AF' - EXX - CALL LP_OPEN_PG - LD A,(WIN_ID_0.USER.MODE) - CP #C0 - JR NC,.NO_ZG ; ⨥ थ... - LD A,(WIN_ID_0.USER.MODE_S) - AND %0000'0001 - JR NZ,.NO_ZG ; ⨥ Spectrum-Screen - ; - LD A,(WIN_ID_0.USER.MODE) - BIT 4,A - JR Z,.NO_ZG ; ⨥ ᪮ ࠭ - ;LD DE,(SYS_PAGE.WIN_ZG) ; - LD DE,ZG_ADDRESS ; - EXX - EX AF,AF' - CALL WIN_SET_ZG.SET ;LP_SET_ZG1 ;!TODO ⮨ ࠧ 뢠 ? - EX AF,AF' - EXX -.NO_ZG: LD A,(WIN_ID_0.H_BEG) - LD D,A - LD A,(WIN_ID_0.V_BEG) - LD L,A - INC L - LD H,#C3 - AND A - LD A,(WIN_ID_0.USER.MODE) - BIT 5,A - LD A,(WIN_ID_0.USER.SIZE_H) - JR NZ,.TXT_40 - ; TXT_80 - ADD A,A - SCF -.TXT_40: LD B,A - LD (WIN_ID_0.SIZE_REL),A - EX AF,AF' - EXX - JP LP_END_P -;******************************************************** - - -; -;------------------------------------------------------------------[#80] -LP_OPEN_S: LD A,B - ADD A,A - CP LP_SC_TAB.SIZE - CCF - RET C - PUSH HL - LD HL,LP_SC_TAB - ADD A,L - LD L,A - JR NC,.no_inc - INC H -.no_inc: LD A,(HL) - INC HL - LD H,(HL) - LD L,A - EX (SP),HL - RET - ; -LP_SC_TAB: DW LP_SET_32 ; 0 - ᯥ㬮᪮ 32x24 - DW LP_SET_64 ; 1 - ⥪⮢ 64x24 - DW LP_SET_40 ; 2 - ⥪⮢ 40x32 - DW LP_SET_80 ; 3 - ⥪⮢ 80x32 - DW LP_SET_32.X ; 4 - ᯥ㬮᪮ , HL - - DW LP_SET_64.X ; 5 - ⥪⮢ 64x24, HL - - DW LP_SET_40.X ; 6 - ⥪⮢ 40x32, HL - - DW LP_SET_80.X ; 7 - ⥪⮢ 80x32, HL - - DW PIC_SET_S1 ; 8 - ᪮ 0, HL - - DW PIC_SET_S2 ; 9 - ᪮ 1, HL - - ;DW LP_SET_MNU ; 10 - ;!TODO -.SIZE: EQU $-LP_SC_TAB - -; !TODO -; LP_SET_MNU: -; LD IX,LP_SCR_MNU -; JP PIC_FN0_OpenWin - -LP_SET_32: LD HL,#4104 -.X: LD IX,LP_SCR_32 - JP PIC_FN0_OpenWin - -LP_SET_64: LD HL,#4104 -.X: LD IX,LP_SCR_64 - JP PIC_FN0_OpenWin - -LP_SET_40: LD HL,#4000 -.X: LD IX,LP_SCR_40 - JP PIC_FN0_OpenWin - -LP_SET_80: LD HL,#4000 -.X: LD IX,LP_SCR_80 - JP PIC_FN0_OpenWin - -PIC_SET_S1: LD IX,PIC_320X256_1 - JP PIC_FN0_OpenWin - -PIC_SET_S2: LD IX,PIC_320X256_2 - JP PIC_FN0_OpenWin -;------------------------------------------------------------------[#80] -; - -;------------------------------------------------------------------[#B1] -; !TODO -WIN_CLOSE: SCF - RET -;------------------------------------------------------------------[#B1] -; - -; -;------------------------------------------------------------------[#B0] -; IX - ⥫ -WIN_OPEN.SCR1: LD E,1 -; E - bit0 - ࠭ -WIN_OPEN: CALL .Prepare - LD L,(IX + Window_Variables.USER.PLACE_H) - LD H,(IX + Window_Variables.USER.PLACE_V) - JP WIN_OPEN_W1 - ; -.Prepare: CALL LP_OPEN_PG - PUSH HL - PUSH DE - ;LD (SYS_PAGE.WIN_MAP_SC),IX ; - ;LD HL,(SYS_PAGE.WIN_MAP_SC) - PUSH IX - POP HL - LD DE,WIN_ID_0 - LD BC,Window_UserVars - LDIR - LD IX,WIN_ID_0 - POP DE - POP HL - LD (IX + Window_Variables.MODE_E),E - RET -;------------------------------------------------------------------[#B0] -; - -; -;------------------------------------------------------------------[#A0] -; HL = X + Y*64 + #4000 + #1000*RGMOD. ࠭ ⠬ -; IX - ⥫ -; E - bit0: ࠭ -;LP_SET_MODE: -PIC_FN0_OpenWin: - ; 䨭 ᮢ⨬ 묨 ண, । 㣨 ࠬ - LD A,H - AND %00001'0000 ; ६ 4 ॣ E - XOR E - LD E,A - ; - LD A,L - AND #3F - ADD HL,HL - ADD HL,HL - LD L,A - ; - LD A,H - AND #3F - LD H,A - CALL WIN_OPEN.Prepare - LD (IX + Window_Variables.USER.PLACE_H),L - LD (IX + Window_Variables.USER.PLACE_V),H - ; -WIN_OPEN_W1: LD A,L - ADD A,A - INC A ; ᫥ PORT_Y - BIT 4,E - JR NZ,.NO_OR - OR #80 ; ᫨ 뢮 ன ࠭ -.NO_OR: LD (IX+Window_Variables.H_BEG),A - LD D,A - LD A,(IX+Window_Variables.USER.SIZE_H) - ADD A,A - ADD A,D - LD (IX+Window_Variables.H_END),A - ;LD (SYS_PAGE.WIN_MODE_SC),DE ; ਧ⠫ ࠭ - LD A,H - AND #3F - ADD A,A - ADD A,A - LD L,A - LD H,A - ;LD (SYS_PAGE.WIN_MODE_SH),HL ; ⨪ ᮬ - LD (IX+Window_Variables.V_BEG),A - LD A,(IX+Window_Variables.USER.SIZE_V) - ADD A,A - ADD A,A - ADD A,L - LD (IX+Window_Variables.V_END),A - ; - ;LD L,(IX+Window_Variables.V_BEG) - LD L,H - LD H,#C3 - LD B,(IX+Window_Variables.USER.SIZE_V) ; ࠧ ⨪ - LD (IX+Window_Variables.WORK_1),0 - LD A,(IX+Window_Variables.USER.MODE) ; ० - LD (IX+Window_Variables.WORK_2),A - BIT 4,A - JR NZ,.LOOP ; 室, ᫨ ⥪⮢ ० - ; - AND #F0 - LD C,A - LD A,(IX+Window_Variables.USER.GR_X) - RRCA - RRCA - RRCA - LD D,A - AND #0F - OR C - LD (IX+Window_Variables.WORK_2),A - ; - LD A,D - AND #E0 - LD C,A - LD A,(IX+Window_Variables.USER.GR_Y) - AND #1F - OR C - RLCA - RLCA - RLCA - LD (IX+Window_Variables.WORK_1),A -.LOOP: LD D,(IX+Window_Variables.H_BEG) ; D - 砫 ப (PORT_Y) - LD C,(IX+Window_Variables.USER.SIZE_H) ; ࠧ ਧ⠫ - LD A,(IX+Window_Variables.USER.MODE) ; ० - PUSH BC - CALL LP_MODE_LINE - POP BC - INC L - INC L - INC L - INC L - DJNZ .LOOP - ; - LD A,(IX+Window_Variables.MODE_E) - AND 1 - OUT (SCREEN_SWITCH),A - ;LD A,(IX+Window_Variables.MODE) - ;BIT 4,A - CALL LP_CLOSE_PG - ;RET Z - CALL LP_INI_P - ;LD A,(SYS_PAGE.WIN_MODE_SC) - ;OUT (RGMOD),A - ; 뫮 ᠭ - CALL LP_SIZE - ; DE - ࠧ - ; - XOR A ;!TODO - RET -; - -; ⠭ ० -LP_MODE_LINE: BIT 0,(IX+Window_Variables.USER.MODE_S) - JP NZ,.Spectrum ; ᯥ - BIT 4,A - JP Z,.Graphic ; 䨪! - DEC D - ; ⥪⮢ ०. - EX AF,AF' - LD A,#50 - OUT (SLOT3),A - LD A,L ; ⨪쭮 - CP #80 - JR NC,.Exit_txt - ; - CALL .RECURSE - JR NC,.Exit_txt - ; - CALL .CALC_C - ; -.loop_txt_scr: EX AF,AF' - LD A,D - OUT (PORT_Y),A - EX AF,AF' - LD (HL),A ; ० - INC D - EX AF,AF' - LD A,D - OUT (PORT_Y),A - EX AF,AF' - LD (HL),A ; ० - INC D - DEC C - JR NZ,.loop_txt_scr - ; - EX AF,AF' -.Exit_txt: LD A,SYS_PAGE - OUT (SLOT3),A - EX AF,AF' - RET - ; - ; Spectrum mode -.Spectrum: LD A,(IX+Window_Variables.WORK_2) - LD B,(IX+Window_Variables.WORK_1) - DEC D - EX AF,AF' - LD A,#50 - OUT (SLOT3),A - LD A,L ; ⨪쭮 - CP #80 - JR NC,.Exit_zx_scr - ; - CALL .RECURSE - JR NC,.Exit_zx_scr - ; - CALL .CALC_C - ; -.loop_zx_scr: EX AF,AF' - LD A,D - OUT (PORT_Y),A - EX AF,AF' - LD (HL),A ; ० - ; - INC L - LD (HL),B - INC L - LD (HL),B - DEC L - DEC L - ; - INC D - BIT 4,A - JR NZ,.no_inc_B_zx - ; - INC B -.no_inc_B_zx: EX AF,AF' - LD A,D - OUT (PORT_Y),A - EX AF,AF' - ; - LD (HL),A ; ० - INC L - LD (HL),B - INC L - LD (HL),B - DEC L - DEC L - ; - INC D - INC B - JR NZ,.NO_ADD_40 - ; - ADD A,#40 -.NO_ADD_40: DEC C - JR NZ,.loop_zx_scr - EX AF,AF' - ; -.Exit_zx_scr: LD A,SYS_PAGE - OUT (SLOT3),A - EX AF,AF' - LD (IX+Window_Variables.WORK_1),B - LD (IX+Window_Variables.WORK_2),A - RET - ; - ; Graphic Mode -.Graphic: LD A,(IX+Window_Variables.WORK_1) - LD B,(IX+Window_Variables.WORK_2) - DEC D - EX AF,AF' - LD A,#50 - OUT (SLOT3),A - LD A,L ; ⨪쭮 - CP #80 - JR NC,.Exit2_GFX_scr - ; - CALL .RECURSE - JR NC,.Exit2_GFX_scr - ; - CALL .CALC_C - ; - BIT 5,B - JR Z,.GFX_640_Loop - ; - ; GFX 320 -.loop_GFX_scr: EX AF,AF' - LD A,D - OUT (PORT_Y),A - EX AF,AF' - LD (HL),B ; mode 0 - INC L - LD (HL),A ; mode 1 - INC L - LD (HL),0 ; mode 2 - DEC L - DEC L - INC D - ; - ;EX AF,AF' - ;LD A,D - ;OUT (PORT_Y),A - ;EX AF,AF' - ;LD (HL),B ; ० - ;INC L - ;LD (HL),A ; ० 2 - ;DEC L - ; - INC D - INC A - LD E,A - AND 7 - JR NZ,.NO_INC_B_320 - ; - LD A,E - SUB 8 - LD E,A - INC B -.NO_INC_B_320: LD A,E - DEC C - JR NZ,.loop_GFX_scr - ; -.Exit_GFX_scr: EX AF,AF' -.Exit2_GFX_scr: LD A,SYS_PAGE - OUT (SLOT3),A - EX AF,AF' - LD A,(IX+Window_Variables.WORK_1) - ADD A,8 - LD (IX+Window_Variables.WORK_1),A - RET - ; - ; GFX 640 -.GFX_640_Loop: EX AF,AF' - LD A,D - OUT (PORT_Y),A - EX AF,AF' - LD (HL),B ; mode 0 - INC L - LD (HL),A ; mode 1 - INC L - LD (HL),0 ; mode 2 - ; - INC D - EX AF,AF' - LD A,D - OUT (PORT_Y),A - EX AF,AF' - LD (HL),0 ; mode 2 - DEC L - LD (HL),A ; mode 1 - DEC L - LD (HL),B ; mode 0 - ; - INC D - INC A - LD E,A - AND 7 - JR NZ,.NO_INC_B_640 - ; - LD A,E - SUB 8 - LD E,A - INC B -.NO_INC_B_640: LD A,E - DEC C - JR NZ,.GFX_640_Loop - JP .Exit_GFX_scr -; -.RECURSE: LD A,D ; ਧ⠫쭮 - AND #7F - SUB 80 - RET C - SUB 48 - NEG - LD E,A ; - ADD A,D - LD D,A ; - LD A,E ; ⠭ - RRA - AND #3F - SUB C - RET NC - NEG - LD C,A ; 祭 C - JR .RECURSE -; -.CALC_C: NEG - RRA - AND #3F - CP C - JR NC,.NoChangeC - LD C,A -.NoChangeC: EX AF,AF' - INC D - RET -;***************************************************************** - - -LP_SCROLL_UD: DEC B - JR Z,LP_SCROLL_UP - DEC B - JR Z,LP_SCROLL_DN - SCF - RET - -; 室: -; D - ப ( 0 ) -; E - ᫮ ஫㥬 ப -LP_SCROLL_UP: DEC E - RET Z - CALL LP_OPEN_PG - ; - LD B,E - LD E,0 ; ப ஫ - CALL .RUN - JP LP_CLOSE_PG - ; - ; -.RUN: CALL LP_SET_CUR ; ᫨ ६ ப - PUSH IX - LD IX,(WIN_ID_0.USER.SIZE_H) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!TODO - ; ⫨稥 LP_SCROLL_DN - LD A,(WIN_ID_0.V_END) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - LD C,A - LD A,#50 - OUT (SLOT3),A ; ࠭ ७ - ; -.loop2: EXX - PUSH HL - EXX - POP HL - ; - LD E,L - LD D,H - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!TODO - ; ⫨稥 LP_SCROLL_DN - LD A,4 - ADD L - LD L,A - ; - LD A,C ; LD A,(WIN_ID_0.V_END) - CP L - JR C,.exit ; ᫨ , 室 - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - PUSH BC - LD A,L - EXX - LD L,A - EXX - ;XH - LD A,XL ; WIN_ID_0.USER.SIZE_H - ; LD A,SYS_PAGE - ; OUT (SLOT3),A - ; LD A,(WIN_ID_0.USER.SIZE_H) - ADD A,A ; ᫮ ப ७ - ADD A,A - LD C,A - LD B,0 - ; LD A,#50 - ; OUT (SLOT3),A ; ࠭ ७ - ; - EXX - LD A,D ; 砫 ப - EXX -.loop1: OUT (PORT_Y),A - INC A ; ᫥饥 祭 - LDI - LDD - ; - OUT (PORT_Y),A - INC A ; ᫥饥 祭 - LDI - LDD - JP PE,.loop1 - ; - POP BC - DJNZ .loop2 -.exit: POP IX - RET - - - -; 室 : -; D - ப ( 0 ) -; E - ᫮ ஫㥬 ப -LP_SCROLL_DN: DEC E - RET Z - CALL LP_OPEN_PG - ; - LD B,E - LD E,0 - LD A,D - ADD A,B - LD D,A - CALL .RUN -.EXIT: JP LP_CLOSE_PG - ; - ; -.RUN: CALL LP_SET_CUR - PUSH IX - LD IX,(WIN_ID_0.USER.SIZE_H) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!TODO - ; ⫨稥 LP_SCROLL_UD - LD A,(WIN_ID_0.V_BEG) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - LD C,A - LD A,#50 - OUT (SLOT3),A ; ࠭ ७ - ; -.loop2: EXX - PUSH HL - EXX - POP HL - ; - LD E,L - LD D,H - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!TODO - ; ⫨稥 LP_SCROLL_UD - LD A,L - SUB 4 - LD L,A - ; - LD A,C - CP L ; .CONT: L >= A - JR Z,.CONT - JR NC,.exit ; ᫨ , 室 - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -.CONT: PUSH BC - LD A,L - EXX - LD L,A - EXX - ; - LD A,XL ; WIN_ID_0.USER.SIZE_H - ; LD A,SYS_PAGE - ; OUT (SLOT3),A - ; LD A,(WIN_ID_0.USER.SIZE_H) - ADD A,A ; ᫮ ப ७ - ADD A,A - LD C,A - LD B,0 - ; LD A,#50 - ; OUT (SLOT3),A ; ࠭ ७ - ; - EXX - LD A,D ; 砫 ப - EXX -.loop1: OUT (PORT_Y),A - INC A ; ᫥饥 祭 - LDI - LDD - ; - OUT (PORT_Y),A - INC A ; ᫥饥 祭 - LDI - LDD - JP PE,.loop1 - ; - POP BC - DJNZ .loop2 -.exit: POP IX - RET - - -; DE - ᨬ -; - -; 室: HL - ᨬ/ਡ B - -WIN_GET_SYM: AND A - SCF - RET NZ - ; - CALL LP_BEG_P - CALL LP_SET_CUR - LD A,#50 - OUT (SLOT3),A - ; - EXX - LD A,D - OUT (PORT_Y),A - LD A,(HL) - EXX - LD L,A - EXX - INC L - LD A,(HL) - EXX - LD H,A - EXX - DEC L - DEC L - LD A,(HL) - INC L - EXX - LD B,A - JP LP_END_P - ;RET - -; DE - ᨬ -; - -; HL - ᨬ/ਡ -; B - -WIN_PUT_SYM: AND A - SCF - RET NZ - ; - CALL LP_BEG_P - CALL LP_SET_CUR - LD A,#50 - OUT (SLOT3),A - ; - EXX - LD A,D - OUT (PORT_Y),A - EXX - ; [ ] 31/03/2025 ᫨ B=0, ⮫쪮 ᨬ - ; ᫨ B=1, ᨬ ਡ⮬ - ; ᨬ - ; LD A,L - ; EXX - ; LD (HL),A - ; INC L - ; EXX - ; ; ਡ - ; LD A,H - ; EXX - ; LD (HL),A - ; DEC L - ; DEC L - ; EXX - ; ; - ; LD A,B - ; EXX - ; LD (HL),A - ; INC L - ; EXX - ; JP LP_END_P - ; - ; - LD A,B - OR A - JR Z,.onlySymbol - DEC B - JR Z,.noChangeZG - ; - EXX - DEC L - LD (HL),A - INC L - EXX - ; ਡ -.noChangeZG: LD A,H - EXX - INC L - LD (HL),A - DEC L - EXX - ; ᨬ -.onlySymbol: LD A,L - EXX - LD (HL),A - EXX - JP LP_END_P - - - -; HL - ࠧ -; DE - -; A - -; IX - -WIN_MOVE: AND A - SCF - RET NZ - PUSH IX - PUSH HL - LD B,SHARED_PAGE - LD IX,SLOT3.MEM_ADDR - CALL WIN_COPY_WIN1 - POP HL - POP DE - LD B,SHARED_PAGE - LD IX,SLOT3.MEM_ADDR - CALL WIN_RESTORE.Start - AND A - RET - - -; HL - ࠧ ࠭塞 -; DE - ࠭塞 -; IX - ࠭塞 , ࠭ 4000h -; - , B - ࠭ -WIN_COPY: AND A - SCF - RET NZ -WIN_COPY_WIN1: CALL LP_BEG_P - IN A,(SLOT1) - PUSH AF - ; - CALL LP_SET_CUR - LD (SYS_PAGE.SYS_WORK1),SP - LD A,B - OUT (SLOT3),A - LD A,#50 - OUT (SLOT1),A - ; - EXX - RES 7,H - LD C,D - EXX - ; -.COPY_loop2: LD A,L - EXX - LD B,A - ADD A,A - ADD A,XL - LD XL,A - JR NC,.NO_INC_XH - ; - INC XH -.NO_INC_XH: LD SP,IX - LD A,C - ADD A,B -.COPY_loop: DEC A - OUT (PORT_Y),A - LD E,(HL) - INC L - LD D,(HL) - DEC L - PUSH DE - DJNZ .COPY_loop - ; - INC HL - INC HL - INC HL - INC HL - EXX - DEC H - JR NZ,.COPY_loop2 - ; - LD A,SYS_PAGE - OUT (SLOT3),A - LD SP,(SYS_PAGE.SYS_WORK1) - ; - POP AF - OUT (SLOT1),A - JP LP_END_P.short -; - -; HL - ࠧ ࠭塞 -; DE - ࠭塞 -; IX - ⠭ -WIN_RESTORE: AND A - SCF - RET NZ -.Start: - CALL LP_BEG_P - ; - IN A,(SLOT1) - PUSH AF - ; - CALL LP_SET_CUR - ; - LD (SYS_PAGE.SYS_WORK1),SP - LD SP,IX - ; - LD A,B - OUT (SLOT3),A - LD A,#50 - OUT (SLOT1),A - ; - EXX - RES 7,H - LD C,D - EXX -.L2: LD A,L - EXX - LD B,A - LD A,C -.L1: OUT (PORT_Y),A - INC A - POP DE - LD (HL),E - INC L - LD (HL),D - DEC L - DJNZ .L1 - ; - INC HL - INC HL - INC HL - INC HL - EXX - DEC H - JR NZ,.L2 - - LD A,SYS_PAGE - OUT (SLOT3),A - - LD SP,(SYS_PAGE.SYS_WORK1) - - POP AF - OUT (SLOT1),A - JP LP_END_P.short -;======================================================================; - - - - -; ࠢ騬 ᨬ ᮫ -;------------------------------------------------------------------[#E0] -LP_PR_LINE_DIR: - ;>------------------------------------------------[BELL] -.BELL: EXX - PUSH HL - PUSH BC - ; - LD DE,1200 - LD HL,4 - CALL BEEP - ; - POP BC - POP HL - EXX - JR .loop - ;-------------------------------------------------[BELL] - - ;>------------------------------------------------[Backspace] -.BACK: LD A,(WIN_ID_0.H_BEG) - CP D - JR Z,.loop - INC B - DEC D - CORRECT_SCR_40_BACKWARD - JP .loop - ;>------------------------------------------------[Backspace] - ; -.EXIT_SpecSymbol: - DEC HL - CALL LP_END_P - POP IX - SCF - RET -; -.EXIT: POP IX - JP LP_END_P -;;;;;;;;;;;;;;;;; -; A - ਡ 뢮 ᨬ ᫨ CF' -; A' - ᫨ !=0 ஫ -; CF - XY-mode -; DE - ᨬ , ᫨ CF=1 -; HL - 뢮 ப -; B - 梥 ᮫ (ᯮ ஫ ⪥ ) -; IY - ᯥ.ᨬ 室 CF=1. ࠢ 0, ᫨ 㦭 -; CF' - 뢮 ᨬ ਡ⠬ -;;;;;;;;;;;;;;;;; -.START: PUSH IX - LD XL,A ; ਡ 뢮 ᨬ - ; - EX AF,AF' - PUSH AF ; attr-mode - EX AF,AF' - ; - IN A,(SLOT3) - LD C,A - CALL LP_BEG_P - CALL C,LP_SET_CUR ; mode for DE - LD A,B - ; ॣ B ᢮, ⢮ - LD (SYS_PAGE.SYS_WORK2),A ; 梥 ᮫ - POP AF ; attr-mode, scroll on/off - LD B,A ; scroll on/off - EXX - RL C ; C' - attr-mode. 뢮 ਡ -.loop: LD A,D - OUT (PORT_Y),A - EXX - LD A,C - OUT (SLOT3),A - ; - LD A,(HL) - LD XH,A - INC HL - AND A - JR Z,.EXIT - CP YH - JR Z,.EXIT_SpecSymbol - CP YL - JR Z,.EXIT_SpecSymbol - ; - EXX - ; ⠥ ᨬ - CP 14 - JR NC,.print - CP 7 - JR C,.print - ; ࠢ騥 ᨬ - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,XH - ; - SUB 7 - JR Z,.BELL ; A = 07 "BELL" - DEC A - JR Z,.BACK ; A = 08 "Backspace" - DEC A - JR Z,.TAB ; A = 09 "TAB" - DEC A - JR Z,.LineFeed ; = 10 "Line Feed" - DEC A - JR Z,.VertTab ; = 11 "Vertical Tabulation" - DEC A - JR Z,.CLS ; = 12 "Form feed" - ࠧ ࠭, 砫 , ࠡ VT - ;DEC A - ;JR Z,.CR ; = 13 "Carriage Return" - ;>------------------------------------------------[CR] -.CR: LD A,(WIN_ID_0.H_BEG) - LD D,A - LD A,(WIN_ID_0.SIZE_REL) - LD B,A - JP .loop - ;-------------------------------------------------[CR] - - ;>------------------------------------------------[PRINT] -.print: LD A,#50 - OUT (SLOT3),A - LD A,XH - LD (HL),A - ; 뢮 ਡ - RR C ; C' - attr flag - JR NC,.NoPutAttr - ; - INC L - LD A,XL - LD (HL),A - DEC L -.NoPutAttr: RL C ; C' - attr flag - INC D -.next_full: CORRECT_SCR_40_FORWARD -.next: DJNZ .loop - CALL LP_NEXT_HL_DIR - JP .loop - ;-------------------------------------------------[PRINT] - - ;>------------------------------------------------[TAB] -.TAB: LD A,(WIN_ID_0.H_BEG) - SUB D - NEG - AND %0000'0111 - NEG - ADD A,8 - CP B - JR C,.keep_A - ; - LD A,B - DEC A -.keep_A: ;NEG - PUSH BC ; save C' - attr flag - LD C,A - EX AF,AF' - JR C,.LLL - ; - EX AF,AF' - ADD A,A ; ० 40 - EX AF,AF' -.LLL: EX AF,AF' - ; -.tabNxt: ADD A,D - LD D,A - LD A,B - SUB C ; set XL - POP BC ; restore C' - attr flag - LD B,A - JP .loop - ; - ;-------------------------------------------------[TAB] - - ;>------------------------------------------------[Line Feed] -.VertTab: ; -.LineFeed: LD A,4 ;!HARDCODE ⥫ ⨪ - ADD L - LD L,A - ; - LD A,(WIN_ID_0.V_END) - CP L - CALL C,LP_NEXT_HL_DIR.end_line - JP .loop - ;-------------------------------------------------[Line Feed] - - ;>------------------------------------------------[Form feed] -.CLS: PUSH BC ; C' - attr flag - EXX - PUSH BC - PUSH HL - PUSH DE - ; - LD A,(SYS_PAGE.SYS_WORK2) ; 梥 ᮫ - LD B,A - LD DE,0 - LD HL,(WIN_ID_0.USER.SIZE_H) ; get WIN XY - LD A,(WIN_ID_0.SIZE_REL) - LD L,A - LD C," " - CALL LP_CLS_WIN.CLS - ; - POP DE - POP HL - POP BC - EXX - LD A,B - POP BC ; C' - attr flag - LD B,A - JP .loop - ;-------------------------------------------------[Form feed] -;------------------------------------------------------------------[#E0] -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -LP_NEXT_HL_DIR: LD A,SYS_PAGE - OUT (SLOT3),A - LD A,4 ;!HARDCODE ⥫ ⨪ - ADD L - LD L,A - LD A,(WIN_ID_0.V_END) - CP L - CALL C,.end_line - ; -.no_end_line: LD A,(WIN_ID_0.H_BEG) - LD D,A - LD A,(WIN_ID_0.SIZE_REL) - LD B,A - RET - ; -.end_line: LD A,L - SUB 4 ;!HARDCODE ⥫ ⨪ - LD L,A - ; ਬ ஫ ? - EXX - LD A,B - EXX - AND A - RET NZ ; ZF=0 ஫ - ; - PUSH HL - DEC L - PUSH BC - PUSH DE - EXX - PUSH BC - PUSH HL - PUSH DE - LD A,(WIN_ID_0.V_BEG) - LD D,A - LD A,(WIN_ID_0.USER.SIZE_V) - LD B,A - LD E,0 ; ப ஫ - CALL LP_SCROLL_UP.RUN - ; - LD A,SYS_PAGE - OUT (SLOT3),A - LD C," " - LD A,(SYS_PAGE.SYS_WORK2) ; 梥 ᮫ - LD B,A - LD A,(WIN_ID_0.USER.SIZE_V) - DEC A - LD D,A - LD E,0 - LD HL,(WIN_ID_0.SIZE_REL) - LD H,1 - LD C," " - CALL LP_CLS_WIN.CLS - ; - POP DE - POP HL - POP BC - EXX - POP DE - POP BC - POP HL - RET -; -; LD HL,(WIN_ID_0.V_END) -; DEC L -; DEC L -; DEC L -; LD H,#C3 -; ; -; LD A,(WIN_ID_0.H_BEG) -; LD D,A -; ; -; LD A,#50 -; OUT (SLOT3),A -; ; -; EXX -; LD A,(WIN_ID_0.SIZE_REL) -; LD B,A -; .loop_cl_line: EXX -; LD A,D -; OUT (PORT_Y),A -; LD (HL),C -; INC D -; CORRECT_SCR_40_FORWARD -; EXX -; DJNZ .loop_cl_line -; LD A,SYS_PAGE -; OUT (SLOT3),A -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - - - -LP_OPEN_PG: IN A,(SLOT3) - LD C,A - LD A,SYS_PAGE - OUT (SLOT3),A - ; - LD A,C - LD (SYS_PAGE.COPY_SLOT3),A - IN A,(PORT_Y) - LD (SYS_PAGE.COPY_RGADR),A - RET -; - -; 䫠 ண ॣ ஬ A -LP_CLOSE_PG: LD A,(SYS_PAGE.COPY_RGADR) - OUT (PORT_Y),A - LD A,(SYS_PAGE.COPY_SLOT3) - OUT (SLOT3),A - RET - -/* - -;!TODO LP_SET_MODE - ᪮ LP_SCR_MNU - - MODULE EXPERIMENT - -; byte 1 -; 0..4 - VIDEO_PAGE -; 5 - mode 42/84 ; 0 - 42,1 - 84 -; 6 - next line -; 7 - end table -; byte 2 - number of places -; byte 3..4 - adress places/ -; 4000-5FFF - Spectrum modes/ C000-FFFF - Graf mode -; - MACRO LP_S PG,XX,ADR - DB PG,XX - DW ADR - ENDM - - MACRO LP_OPEN_PG - IN A,(SLOT3) - LD C,A - LD A,SYS_PAGE - OUT (SLOT3),A - ; - LD A,C - LD (SYS_PAGE.COPY_SLOT3),A - IN A,(PORT_Y) - LD (SYS_PAGE.COPY_RGADR),A - ENDM ; - - MACRO LP_CLOSE_PG - LD A,(SYS_PAGE.COPY_RGADR) - OUT (PORT_Y),A - LD A,(SYS_PAGE.COPY_SLOT3) - OUT (SLOT3),A - ENDM ; -;--------------------------------------- -GR_BIT_END: EQU 7 - -S_BIT_END: EQU 7 -S_BIT_LIN: EQU 6 -S_BIT_MOD: EQU 5 - -BIT_1440: EQU 1 -BIT_MASK_1440: EQU %00000010 - -MODE_PAGE: EQU #FC -;--------------------------------------- - ;DS (($/4)*4+4-$) - ALIGN 4 - - -LP_SCR_MNU: - LP_S #40,14,#40E7 - LP_S #40,14,#4807 - LP_S #40,14,#4827 - LP_S #40,14,#4847 - LP_S #40,14,#4867 - LP_S #40,14,#4887 - LP_S #40,14,#48A7 - LP_S #40,14,#48C7 - LP_S #40,14,#48E7 - DB #FF,0,0,0 - -; LP_SCR_80: -; DB 40,32,0,0,#1B,0,0,0 -; DB 0,0,0,0,0,0,0,0 - -; LP_S %0110'0010,40,#4000 -; LP_S %0110'0010,40,#4028 -; LP_S %0110'0010,40,#4050 -; LP_S %0110'0010,40,#4078 -; LP_S %0110'0010,40,#40A0 -; LP_S %0110'0010,40,#40C8 -; -; LP_S %0110'0010,40,#4800 -; LP_S %0110'0010,40,#4828 -; LP_S %0110'0010,40,#4850 -; LP_S %0110'0010,40,#4878 -; LP_S %0110'0010,40,#48A0 -; LP_S %0110'0010,40,#48C8 -; -; LP_S %0110'0010,40,#5000 -; LP_S %0110'0010,40,#5028 -; LP_S %0110'0010,40,#5050 -; LP_S %0110'0010,40,#5078 -; LP_S %0110'0010,40,#50A0 -; LP_S %0110'0010,40,#50C8 -; -; LP_S %0110'0100,40,#4000 -; LP_S %0110'0100,40,#4028 -; LP_S %0110'0100,40,#4050 -; LP_S %0110'0100,40,#4078 -; LP_S %0110'0100,40,#40A0 -; LP_S %0110'0100,40,#40C8 -; -; LP_S %0110'0100,40,#4800 -; LP_S %0110'0100,40,#4828 -; LP_S %0110'0100,40,#4850 -; LP_S %0110'0100,40,#4878 -; LP_S %0110'0100,40,#48A0 -; LP_S %0110'0100,40,#48C8 -; -; LP_S %0110'0100,40,#5000 -; LP_S %0110'0100,40,#5028 -; -; DEFB #FF,0,0,0 -; -; LP_SCR_40: -; DB 40,32,0,0,7BH,0,0,0 -; DB 0,0,0,0,0,0,0,0 -; -; LP_S 01000100B,40,5050H -; LP_S 01000100B,40,5078H -; LP_S 01000100B,40,50A0H -; LP_S 01000100B,40,50C8H -; -; LP_S 01000110B,40,4000H -; LP_S 01000110B,40,4028H -; LP_S 01000110B,40,4050H -; LP_S 01000110B,40,4078H -; LP_S 01000110B,40,40A0H -; LP_S 01000110B,40,40C8H -; -; LP_S 01000110B,40,4800H -; LP_S 01000110B,40,4828H -; LP_S 01000110B,40,4850H -; LP_S 01000110B,40,4878H -; LP_S 01000110B,40,48A0H -; LP_S 01000110B,40,48C8H -; -; LP_S 01000110B,40,5000H -; LP_S 01000110B,40,5028H -; LP_S 01000110B,40,5050H -; LP_S 01000110B,40,5078H -; LP_S 01000110B,40,50A0H -; LP_S 01000110B,40,50C8H -; -; LP_S 01001000B,40,4000H -; LP_S 01001000B,40,4028H -; LP_S 01001000B,40,4050H -; LP_S 01001000B,40,4078H -; LP_S 01001000B,40,40A0H -; LP_S 01001000B,40,40C8H -; -; LP_S 01001000B,40,4800H -; LP_S 01001000B,40,4828H -; LP_S 01001000B,40,4850H -; LP_S 01001000B,40,4878H -; -; DEFB 0FFh,0,0,0 -; -; LP_SCR_32: -; DB 32,24,4,4,30H,1,0,0 -; DB 0,0,0,0,0,0,0,0 -; -; LP_S 040h,32,04000H -; LP_S 040h,32,04020H -; LP_S 040h,32,04040H -; LP_S 040h,32,04060H -; LP_S 040h,32,04080H -; LP_S 040h,32,040A0H -; LP_S 040h,32,040C0H -; LP_S 040h,32,040E0H -; -; LP_S 040h,32,04800H -; LP_S 040h,32,04820H -; LP_S 040h,32,04840H -; LP_S 040h,32,04860H -; LP_S 040h,32,04880H -; LP_S 040h,32,048A0H -; LP_S 040h,32,048C0H -; LP_S 040h,32,048E0H -; -; LP_S 040h,32,05000H -; LP_S 040h,32,05020H -; LP_S 040h,32,05040H -; LP_S 040h,32,05060H -; LP_S 040h,32,05080H -; LP_S 040h,32,050A0H -; LP_S 040h,32,050C0H -; LP_S 040h,32,050E0H -; -; LP_S 0FFh,0,0 -; -; LP_SCR_64: -; DB 32,24,4,4,9BH,0,0,0 -; DB 0,0,0,0,0,0,0,0 -; -; LP_S 06Ah,32,04000H -; LP_S 06Ah,32,04020H -; LP_S 06Ah,32,04040H -; LP_S 06Ah,32,04060H -; LP_S 06Ah,32,04080H -; LP_S 06Ah,32,040A0H -; LP_S 06Ah,32,040C0H -; LP_S 06Ah,32,040E0H -; -; LP_S 06Ah,32,04800H -; LP_S 06Ah,32,04820H -; LP_S 06Ah,32,04840H -; LP_S 06Ah,32,04860H -; LP_S 06Ah,32,04880H -; LP_S 06Ah,32,048A0H -; LP_S 06Ah,32,048C0H -; LP_S 06Ah,32,048E0H -; -; LP_S 06Ah,32,05000H -; LP_S 06Ah,32,05020H -; LP_S 06Ah,32,05040H -; LP_S 06Ah,32,05060H -; LP_S 06Ah,32,05080H -; LP_S 06Ah,32,050A0H -; LP_S 06Ah,32,050C0H -; LP_S 06Ah,32,050E0H -; -; LP_S 0FFh,0,0 - - -@LP_SET_MNU: LD IX,LP_SCR_MNU - ;JR LP_SET_MODE -; HL - ᬥ饭 砫 ࠭ -; = hor_sh + vert_sh * 64 + 4000H -; IX - ࠭ ⠡ -LP_SET_MODE: LP_OPEN_PG - LD (SYS_PAGE.WIN_MAP_SC),IX - LD (SYS_PAGE.WIN_MODE_SH),HL - LD (SYS_PAGE.WIN_MODE_SC),DE - LD HL,(SYS_PAGE.WIN_MAP_SC) - LD DE,SYS_PAGE.WIN_MAP_IX -.LP_SET_COPY: LD BC,4 - LDIR - BIT S_BIT_END,(HL) - JR Z,.LP_SET_COPY - LD BC,4 - LDIR - LD HL,SYS_PAGE.WIN_MAP_IX - LD (SYS_PAGE.WIN_MAP_SC),HL -.LP_SET_MODE_INT: - LD IX,(SYS_PAGE.WIN_MAP_SC) - LD HL,(SYS_PAGE.WIN_MODE_SH) - CALL LP_SET_MODE1 - LD DE,(SYS_PAGE.WIN_MODE_SC) - LP_CLOSE_PG - PUSH DE - CALL LP_INI_P - POP DE - LD A,E - OUT (RGMOD),A - CALL LP_SIZE - RET - -LP_SET_MODE1: AND A - BIT S_BIT_END,(IX) ; ஢ઠ - RET NZ - - PUSH HL - - IN A,(RGADR) - PUSH AF - - LD A,H - CP #48 - CCF - LD A,#16 - ADC A,0 - OUT (RGADR),A - -.LP_SET_LOOP: CALL LP_MODE_LINE - - INC IX - INC IX - INC IX - INC IX - BIT S_BIT_LIN,(IX) - JR Z,.LP_SET_LOOP - - POP AF - OUT (RGADR),A - - POP HL - - LD BC,#40 - ADD HL,BC - JR LP_SET_MODE1 - -;******************************************************** -; ᫥ 祭 MODE ࠭ ⠡. -; IX - ⥪饥 ⠡. -LP_MODE_LINE: BIT 3,H - RET NZ - - IN A,(SLOT1) - LD (SYS_PAGE.SYS_WORK1),A - - IN A,(RGADR) - AND 1 - OR MODE_PAGE - OUT (SLOT1),A - - LD A,(IX) - LD B,A - RRCA - AND #0F - LD C,A - LD A,B - AND #20 - XOR #30 - OR C - LD C,A - LD A,(IX+3) - RLC A - RLC A - RLC A - AND #C0 - OR C - LD D,A ; MODE - LD E,(IX+2) ; ன .. - - LD B,(IX+1) ; ᫮ - - LD A,L - AND #3F - SUB 40 - JR NC,.LP_NO_SET_MD - NEG - CP B - JR NC,.LP_MD_NO_B - LD B,A -.LP_MD_NO_B: - -.LP_MD_LOOP: SET 4,H - LD (HL),E - RES 4,H - LD (HL),D - - INC E - INC L - DJNZ .LP_MD_LOOP - -.LP_MD_END: LD A,(SYS_PAGE.SYS_WORK1) - OUT (SLOT1),A - RET - -.LP_NO_SET_MD: LD A,C - -.LP_MD_LOOP2: INC E - INC L - BIT 5,H - JR Z,.LP_MD_LOOP - DJNZ .LP_MD_LOOP2 - JR .LP_MD_END - - -; ᫥ -LP_TAB_HL: LD HL,(SYS_PAGE.WIN_TAB_SC) ; 㧨 ⥪饥 ⠡ SCR - LD A,(HL) ; 㧨 䫠 ⠡ - BIT S_BIT_END,A ; 䫠 - JR Z,LP_TAB_H1 ; ᫨ 0 - -LP_TAB_H2: LD HL,(SYS_PAGE.WIN_MAP_SC) ; 㧨 砫쭮 ⠡ SCR -LP_TAB_H3: LD A,(HL) ; 䫠 -LP_TAB_H1: CALL .LP_PG1 ; ४ ࠭ - INC HL ; (HL) - ᫮ ᨬ - BIT S_BIT_MOD,A ; 42/84 - LD A,(HL) ; 㧨 ᫮ ᨬ - JR Z,.LP_NO_MUL ; ᫨ 84, 㦭 㬭 2 - ADD A,A ; A=A*2 -.LP_NO_MUL: LD B,A ; ᫮ ᨬ B - INC HL ; 㧪 HL - LD A,(HL) - INC HL - INC HL - LD (SYS_PAGE.WIN_TAB_SC),HL ; ࠭ ᫥饣 ⠡ SCR - DEC HL - LD H,(HL) ; ࠭ - LD L,A - - LD A,H - RRCA ; ᫨ - RRCA ; ਡ - RRCA - AND 3 - OR H - OR #18 - LD C,A - RET - -.LP_PG1: AND #1F ; ४ ⮫쪮 ࠭ Spectrum mode - OUT (RGADR),A - LD E,(HL) ; 祭 ⮢ 䫠 - - BIT S_BIT_MOD,E ; 42/84 - JR Z,.LP_N_84 ; ᫨ 42 ⠭ CF - SCF ; 84 mode -.LP_N_84: EX AF,AF' ; 䫠 祭 뢮 - LD A,E ; A 䫠 - RET - -; program init registers -; for low printer & save -LP_INI_P: EXX - LP_OPEN_PG - LD DE,(SYS_PAGE.WIN_ZG) - LD B,0 - CALL LP_TAB_H2 - EXX -; program save registers -; for low printer -LP_END_P: EX AF,AF' - EXX - RLA - LD E,A - LD (SYS_PAGE.WIN_SAV_HL),HL - LD (SYS_PAGE.WIN_SAV_DE),DE - LD (SYS_PAGE.WIN_SAV_BC),BC - LP_CLOSE_PG - EXX - EX AF,AF' - RET - - -; । size -LP_SIZE: LP_OPEN_PG - EXX - XOR A - LD HL,(SYS_PAGE.WIN_MAP_SC) ; 砫 scr - CALL .LP_LN2 ; ᪠஢ - EXX ; - NEG ; ᫮ - LD D,A ; ப D - LD E,0 - EXX - ;LD A,3 ; ᫮ ᨬ - LD HL,(SYS_PAGE.WIN_MAP_SC) ; 3- ப - ;CALL LP_LN2 ; ன -.LOOP: CALL LP_TAB_H3 ; - LD A,B - EXX - ADD A,E - LD E,A - EXX - LD HL,(SYS_PAGE.WIN_TAB_SC) ; ࠭ - BIT S_BIT_LIN,(HL) - JR Z,.LOOP - ;BIT S_BIT_MOD,(HL) - EXX - ;XOR A - ;OUT (RGADR),A - LP_CLOSE_PG - RET - ; -.LP_LN0: DEC A - RET Z -.LP_LN1: INC HL - INC HL - INC HL - INC HL -.LP_LN2: BIT S_BIT_LIN,(HL) - JR Z,.LP_LN1 - BIT S_BIT_END,(HL) - JR Z,.LP_LN0 - RET - - ENDMODULE - +; DISPLAY "Low-print-2." +;============================================================== +; +; ணࠬ LOW PRINT for Sprinter-97. +; +;============================================================== + +;============================================================= +; 㭪樨 Bios Sprinter-97. +; 29.05.97 +;============================================================= +; LP_OPEN_WIN ⨥ +; point 3D13h C=80h 室: B - . +; B=0 - Spectrum 32x24 B=1 - Spectrum 64x24 +; B=2 - Spectrum 40x24 B=3 - Spectrum 80x24 +; 室: DE - ࠧ +;============================================================= +; LP_PRINT_ALL 뢮 ᨬ ࠭ ⥪饣 +; point 3D13h C=81h 室: A - ᨬ, +; B - ᫮ 뢮 ᨬ, +; - ਡ ᨬ +;============================================================= +; LP_PRINT_SYM 뢮 ᨬ ࠭ ⥪饣 +; ਡ +; point 3D13h C=82h 室: A - ᨬ, +; B - ᫮ 뢮 ᨬ, +;============================================================= +; LP_PRINT_ATR 뢮 ਡ⮢ ࠭ ⥪饣 +; point 3D13h C=83h 室: B - ᫮ 뢮 ᨬ, +; - ਡ ᨬ +;============================================================= +; LP_SET_PLACE ⠭ ⥪饣 +; point 3D13h C=84h 室: E - ਧ⠫ +; D - ⨪ +;============================================================= +; LP_PRINT_LN 뢮 ப ᨬ ࠭ ⥪饣 +; +; point 3D13h C=85h 室: HL - ப +; B - ᫮ 뢮 ᨬ, +; - ਡ ᨬ +;============================================================= +; LP_PRINT_LN2 뢮 ப ᨬ ࠭ ⥪饣 +; ਡ⮢ +; point 3D13h C=86h 室: HL - ப +; B - ᫮ 뢮 ᨬ, +;============================================================= +; LP_PRINT_LN3 뢮 ப ᨬ ࠭ ⥪饣 +; +; point 3D13h C=87h 室: HL - ப +; B - ᫮ 뢮 ᨬ, +; D - ࠧ⥫ +; - ਡ ᨬ +;============================================================= +; LP_PRINT_LN4 뢮 ப ᨬ ࠭ ⥪饣 +; ਡ⮢ +; point 3D13h C=88h 室: HL - ப +; B - ᫮ 뢮 ᨬ, +; D - ࠧ⥫ +;============================================================= +; LP_CLS_WIN ⪠ ࠭ +; point 3D13h C=89h 室: DE - +; B - ਡ ⪨ +; H - , L - ਭ +;============================================================= + + MACRO CORRECT_SCR_40_FORWARD ;[x] 稫 31/10/23, 㨨 + EX AF,AF' + JR C,.LLL + INC D ; ० 40 +.LLL: EX AF,AF' + ENDM ; + + + MACRO CORRECT_SCR_40_BACKWARD + EX AF,AF' + JR C,.LLL + DEC D ; ० 40 +.LLL: EX AF,AF' + ENDM ; + + + MACRO DJNZ_NEXT_HL + DJNZ .LLL + CALL LP_NEXT_HL +.LLL: ; + ENDM + + +;********************************* +;* LOW LEVEL PRINTER * +;* DE' - ZG * +;* HL' - PLACE ON SCR * +;* C' - ATTRIBUTES * +;* B' - COUNT SYMBS * +;* ZF - inverse * +;* AF' - ࠭ mode * +;********************************* +; MACRO LP_BEG_PM +; EX AF,AF' +; EXX +; IN A,(SLOT3) +; LD C,A +; IN A,(PORT_Y) +; LD B,A +; LD A,SYS_PAGE +; OUT (SLOT3),A +; LD (SYS_SP),SP +; LD SP,SYS_SP +; PUSH BC +; ; +; LD HL,(WIN_ID_0.HL) +; LD DE,(WIN_ID_0.DE) +; LD BC,(WIN_ID_0.BC) +; LD A,E +; AND A +; RRA +; OUT (PORT_Y),A +; EXX +; EX AF,AF' +; ENDM ; + +; MACRO LP_END_PM +; EX AF,AF' +; EXX +; RLA +; LD E,A +; LD (WIN_ID_0.HL),HL ; +; LD (WIN_ID_0.DE),DE +; LD (WIN_ID_0.BC),BC +; ; +; POP BC +; LD A,B +; OUT (PORT_Y),A +; LD A,C +; OUT (SLOT3),A +; LD SP,SYS_SP +; EXX +; EX AF,AF' +; RET +; ENDM ; + +; +;------------------------------------------------------------------[#81] +LP_PRINT_ALL: CALL LP_BEG_P + EXX + LD C,A + EXX + LD A,#50 + OUT (SLOT3),A + ; +.loop: EXX + LD A,D + OUT (PORT_Y),A + INC D +.cont: LD (HL),C + EXX + LD A,E + EXX + INC L + LD (HL),A + DEC L + CORRECT_SCR_40_FORWARD + DJNZ_NEXT_HL + EXX + DJNZ .loop + JP LP_END_P +;------------------------------------------------------------------[#81] +; + +; +;------------------------------------------------------------------[#82] +; +LP_PRINT_SYM: CALL LP_BEG_P + EXX + LD C,A + EXX + LD A,#50 + OUT (SLOT3),A + ; +.loop: EXX + LD A,D + OUT (PORT_Y),A +.cont: LD (HL),C + INC D + CORRECT_SCR_40_FORWARD + DJNZ_NEXT_HL + EXX + DJNZ .loop + JP LP_END_P +;------------------------------------------------------------------[#82] +; + +; +;------------------------------------------------------------------[#83] +LP_PRINT_ATR: CALL LP_BEG_P + LD A,E + EXX + LD C,A + EXX + LD A,#50 + OUT (SLOT3),A + ; +.loop: EXX + LD A,D + OUT (PORT_Y),A + INC D + INC L + LD (HL),C + DEC L + CORRECT_SCR_40_FORWARD + DJNZ_NEXT_HL + EXX + DJNZ .loop + JP LP_END_P +;------------------------------------------------------------------[#83] +; + +; +;------------------------------------------------------------------[#85] +LP_PRINT_LINE: CALL LP_BEG_P + EXX + LD C,PORT_Y + EXX + LD A,#50 + OUT (SLOT3),A + ; +.loop: EXX + OUT (C),D + INC D + EXX + LD A,(HL) + INC HL + EXX + LD (HL),A + EXX + LD A,E + EXX + INC L + LD (HL),A + DEC L + CORRECT_SCR_40_FORWARD + DJNZ_NEXT_HL + EXX + DJNZ .loop + JP LP_END_P +;------------------------------------------------------------------[#85] +; + +; +;------------------------------------------------------------------[#86] +LP_PRINT_LINE2: CALL LP_BEG_P + EXX + LD C,PORT_Y + EXX + LD A,#50 + OUT (SLOT3),A + ; +.loop: LD A,(HL) + INC HL + EXX + OUT (C),D + INC D + LD (HL),A + CORRECT_SCR_40_FORWARD + DJNZ_NEXT_HL + EXX + DJNZ .loop + ;LD A,SYS_PAGE + ;OUT (SLOT3),A + JP LP_END_P +;------------------------------------------------------------------[#86] +; + +; +;------------------------------------------------------------------[#87] +LP_PRINT_LINE3: CALL LP_BEG_P + LD A,#50 + OUT (SLOT3),A + ; +.loop: EXX + LD A,D + OUT (PORT_Y),A + INC D + EXX + LD A,(HL) + INC HL + CP D + JR NZ,.NoEnd + ; + DEC HL + EXX + LD C,' ' + JP LP_PRINT_ALL.cont + ; +.NoEnd: EXX + LD (HL),A + EXX + LD A,E + EXX + INC L + LD (HL),A + DEC L + CORRECT_SCR_40_FORWARD + DJNZ_NEXT_HL + EXX + DJNZ .loop + JP LP_END_P +;------------------------------------------------------------------[#87] +; + +; +;------------------------------------------------------------------[#88] +LP_PRINT_LINE4: CALL LP_BEG_P + LD A,#50 + OUT (SLOT3),A + ; +.loop: EXX + LD A,D + OUT (PORT_Y),A + EXX + LD A,(HL) + INC HL + CP D + JR NZ,.NoEndSymbol + ; + DEC HL + EXX + LD C,' ' + JP LP_PRINT_SYM.cont + ; +.NoEndSymbol: EXX + LD (HL),A + INC D + CORRECT_SCR_40_FORWARD + DJNZ_NEXT_HL + EXX + DJNZ .loop + JP LP_END_P +;------------------------------------------------------------------[#88] +; + +; +;------------------------------------------------------------------[#8B] +LP_PRINT_LINE5: CALL LP_BEG_P + LD A,#50 + OUT (SLOT3),A + EXX + LD C,PORT_Y + EXX + ; +.loop: EXX + OUT (C),D + EXX + LD A,(HL) + INC HL + CP D + JR Z,LP_END_P + ; + EXX + LD (HL),A + EXX + LD A,E + EXX + INC L + LD (HL),A + DEC L + INC D + CORRECT_SCR_40_FORWARD + DJNZ_NEXT_HL + EXX + DJNZ .loop + ;JP LP_END_P +;----------------- ------------------------------------[#8B] +; , ⮫쪮 ୠ⨢ ॣ , ࠬ 室 +LP_END_P: LD A,SYS_PAGE + OUT (SLOT3),A + ; +.SYS_PAGE: EX AF,AF' + EXX + RLA + LD E,A + LD (WIN_ID_0.LineAddr),HL ; + LD (WIN_ID_0.ColumnRGADR_TXTMode),DE + LD (WIN_ID_0.reg_BC),BC + CALL LP_CLOSE_PG + EXX + EX AF,AF' + AND A + RET + ; +.short: EX AF,AF' + EXX + CALL LP_CLOSE_PG + EXX + EX AF,AF' + AND A + RET +;------------------------------------------------------------------[#8C] +LP_PRINT_LINE6: CALL LP_BEG_P + LD A,#50 + OUT (SLOT3),A + EXX + LD C,PORT_Y + EXX + ; +.loop: EXX + OUT (C),D + EXX + LD A,(HL) + INC HL + CP D + JR Z,LP_END_P + ; + EXX + LD (HL),A + INC D + CORRECT_SCR_40_FORWARD + DJNZ_NEXT_HL + EXX + DJNZ .loop + JP LP_END_P +;------------------------------------------------------------------[#8C] +; + + + + +; +;------------------------------------------------------------------[#84] +; ⮫쪮 ୠ⨢ ॣ , ࠬ 室 +LP_SET_PLACE: CALL LP_BEG_P + CALL LP_SET_CUR + JP LP_END_P.SYS_PAGE +;------------------------------------------------------------------[#84] +; + +; +;------------------------------------------------------------------[#8E] +LP_GET_PLACE: CALL LP_BEG_P + LD A,(WIN_ID_0.H_BEG) + NEG + EXX + ADD A,D + EXX + LD E,A + LD A,(WIN_ID_0.V_BEG) + NEG + EXX + ADD A,L + DEC A + EXX + RRCA + RRCA + AND %0011'1111 + LD D,A + ; ० txt 40 + EX AF,AF' + JR C,.no_txt40 + SRL E + AND A +.no_txt40: EX AF,AF' + JP LP_END_P.short +;------------------------------------------------------------------[#8E] +; + +; +;-------------------------------------------------------------[#89, #8D] +;--------------------------------------------------------[#8D] +LP_CLS_WIN2: LD C,A + JR LP_CLS_WIN.START +;--------------------------------------------------------[#8D] +;--------------------------------------------------------[#89] +LP_CLS_WIN: LD C,' ' +;---------------- -----------------------------[#89] +.START: CALL LP_BEG_P + CALL .CLS + JP LP_END_P.SYS_PAGE + ; +.CLS: LD (SYS_PAGE.SYS_WORK1),BC ; ࠭ 梥 ; !TODO ᯮ짮 ६ + PUSH DE + ; !TODO ஢ઠ ॢ襭 ࠧ - ᥩ 楤 ࠭ + ; EXX + ; LD A,B + ; EXX + ; CP L + ; JR NC,.loop1 + ; LD L,A + ; +.loop1: CALL LP_SET_CUR + PUSH DE + EXX + LD BC,(SYS_PAGE.SYS_WORK1) ; !TODO ᯮ짮 ६ + EXX + LD B,L + LD A,#50 + OUT (SLOT3),A + ; +.loop2: EXX + LD A,D + OUT (PORT_Y),A + LD (HL),C + INC L + LD (HL),B + DEC L + INC D + CORRECT_SCR_40_FORWARD + EXX + DJNZ .loop2 + ; + LD A,SYS_PAGE + OUT (SLOT3),A + POP DE + INC D + DEC H + JR NZ,.loop1 + ; + POP DE + JP LP_SET_CUR +;-------------------------------------------------------------[#89, #8D] +; + +; +;------------------------------------------------------------------[#B8] +; DE - 㤠 ᫠ 䮭 +WIN_GET_ZG: LD HL,ZG_ADDRESS + LD BC,ZG_SIZE + LDIR + AND A + RET +;------------------------------------------------------------------[#B8] +; + +; +;------------------------------------------------------------------[#B6] +WIN_SET_ZG: EX AF,AF' ; LP_SET_ZG: + EXX + CALL LP_OPEN_PG + CALL .SET + CALL LP_CLOSE_PG + EXX + EX AF,AF' + AND A + RET + ; +.SET: IN A,(SLOT1) ;LP_SET_ZG1 + LD (SYS_PAGE.COPY_SLOT1),A + LD A,SHARED_PAGE + OUT (SLOT1),A + EXX + LD BC,Port_All_Mode + IN A,(C) + LD (SYS_PAGE.SYS_WORK1),A + AND #FE ; Spectrum Screen on, accelerator and keyboard interrupt off + OUT (C),A + EX AF,AF' + LD B,A + AND #0F + ADD A,A + OUT (PORT_Y),A + LD A,B ; %xx00'0000 + RRCA ; %0xx0'0000 + RRCA ; %00xx'0000 + RRCA ; %000x'x000 + AND %0001'1000 + OR %0100'0000 + LD H,A + LD L,0 + LD BC,ZG_SIZE + EX DE,HL + ;[ ] 11/02/2024 ⠭ ⮢ + LD A,H + SUB #C0 + JR NC,.change + ; + LDIR +.cont: EX DE,HL + LD A,H + RRCA + RRCA + RRCA + DEC A + AND 3 + ADD A,#58 + LD H,A + ; +.loop: LD (HL),L + INC L + JR NZ,.loop + ; + LD A,(SYS_PAGE.SYS_WORK1) + LD BC,Port_All_Mode + OUT (C),A + EXX + EX AF,AF' + LD A,(SYS_PAGE.COPY_SLOT1) + OUT (SLOT1),A + RET + ; + ;[ ] 11/02/2024 ⠭ ⮢ +.change: LD A,(SYS_PAGE.COPY_SLOT3) + OUT (SLOT3),A + LDIR + LD A,SYS_PAGE + OUT (SLOT3),A + JR .cont +;------------------------------------------------------------------[#B6] +; + +;******************************************************* +; +; WIN_MAP_SC - ࠭ +; 0 - hor size +; 1 - ver size +; 2 - hor place +; 3 - ver place +; । size +LP_SIZE: CALL LP_OPEN_PG + LD DE,(WIN_ID_0.USER.SIZE_H) + LD A,(WIN_ID_0.USER.MODE) + AND %0010'0000 + CALL LP_CLOSE_PG + RET NZ + ; txt 40 + SLA E + RET +; + +; , ⮫쪮 ୠ⨢ ॣ , ࠬ 室 +; ⠭ : +; D - ᨬ ⨪ +; E - ᨬ ਧ⠫ +LP_SET_CUR: ; LP_AT_D: + LD A,(WIN_ID_0.USER.SIZE_V) + EXX + LD L,A + EXX + LD A,D + EXX +.loop_x: SUB L + JR NC,.loop_x + ; + ADD A,L + ADD A,A + ADD A,A + LD L,A + ; + LD A,(WIN_ID_0.V_BEG) + ADD A,L + LD L,A + INC L + LD H,#C3 ;!HARDCODE 砫 ⥫ SLOT3 + EXX + ;RET + ; + ;LP_TAB_E: + LD A,(WIN_ID_0.SIZE_REL) + EXX + LD D,A + EXX + LD A,E + EXX +.loop_y: SUB D + JR NC,.loop_y + JR Z,.loop_y + ; + NEG + LD B,A ; ࠭ ᪮쪮 ⠫ ᨬ ப + NEG + ADD A,D + LD D,A + ; + EX AF,AF' + JR C,.LLL + SLA D ; ० txt 40. ⠢ CF +.LLL: EX AF,AF' +.skip_Dx2: LD A,(WIN_ID_0.H_BEG) + ADD A,D + LD D,A + EXX + RET +;************************************************************* + +; ᫥ +LP_NEXT_HL: LD A,SYS_PAGE + OUT (SLOT3),A + LD A,4 ;!HARDCODE ⥫ ⨪ + ADD L + LD L,A + LD A,(WIN_ID_0.V_END) + CP L + JR C,.end_line + ; +.no_end_line: LD A,(WIN_ID_0.H_BEG) + LD D,A + LD A,(WIN_ID_0.SIZE_REL) + LD B,A + LD A,#50 + OUT (SLOT3),A + RET + ; +.end_line: LD HL,(WIN_ID_0.V_BEG) + INC L + LD H,#C3 ;!HARDCODE 砫 ⥫ SLOT3 + JP .no_end_line + +; !, ⮫쪮 ୠ⨢ ॣ , ࠬ 室 +LP_BEG_P: EX AF,AF' + EXX + CALL LP_OPEN_PG + LD HL,(WIN_ID_0.LineAddr) + LD DE,(WIN_ID_0.ColumnRGADR_TXTMode) + LD BC,(WIN_ID_0.reg_BC) + LD A,E + AND A + RRA + ;OUT (PORT_Y),A + EXX + EX AF,AF' + RET +; +LP_INI_P: EX AF,AF' + EXX + CALL LP_OPEN_PG + LD A,(WIN_ID_0.USER.MODE) + CP #C0 + JR NC,.NO_ZG ; ⨥ थ... + LD A,(WIN_ID_0.USER.MODE_S) + AND %0000'0001 + JR NZ,.NO_ZG ; ⨥ Spectrum-Screen + ; + LD A,(WIN_ID_0.USER.MODE) + BIT 4,A + JR Z,.NO_ZG ; ⨥ ᪮ ࠭ + ;LD DE,(SYS_PAGE.WIN_ZG) ; + LD DE,ZG_ADDRESS ; + EXX + EX AF,AF' + CALL WIN_SET_ZG.SET ;LP_SET_ZG1 ;!TODO ⮨ ࠧ 뢠 ? + EX AF,AF' + EXX +.NO_ZG: LD A,(WIN_ID_0.H_BEG) + LD D,A + LD A,(WIN_ID_0.V_BEG) + LD L,A + INC L + LD H,#C3 + AND A + LD A,(WIN_ID_0.USER.MODE) + BIT 5,A + LD A,(WIN_ID_0.USER.SIZE_H) + JR NZ,.TXT_40 + ; TXT_80 + ADD A,A + SCF +.TXT_40: LD B,A + LD (WIN_ID_0.SIZE_REL),A + EX AF,AF' + EXX + JP LP_END_P +;******************************************************** + + +; +;------------------------------------------------------------------[#80] +LP_OPEN_S: LD A,B + ADD A,A + CP LP_SC_TAB.SIZE + CCF + RET C + PUSH HL + LD HL,LP_SC_TAB + ADD A,L + LD L,A + JR NC,.no_inc + INC H +.no_inc: LD A,(HL) + INC HL + LD H,(HL) + LD L,A + EX (SP),HL + RET + ; +LP_SC_TAB: DW LP_SET_32 ; 0 - ᯥ㬮᪮ 32x24 + DW LP_SET_64 ; 1 - ⥪⮢ 64x24 + DW LP_SET_40 ; 2 - ⥪⮢ 40x32 + DW LP_SET_80 ; 3 - ⥪⮢ 80x32 + DW LP_SET_32.X ; 4 - ᯥ㬮᪮ , HL - + DW LP_SET_64.X ; 5 - ⥪⮢ 64x24, HL - + DW LP_SET_40.X ; 6 - ⥪⮢ 40x32, HL - + DW LP_SET_80.X ; 7 - ⥪⮢ 80x32, HL - + DW PIC_SET_S1 ; 8 - ᪮ 0, HL - + DW PIC_SET_S2 ; 9 - ᪮ 1, HL - + ;DW LP_SET_MNU ; 10 - ;!TODO +.SIZE: EQU $-LP_SC_TAB + +; !TODO +; LP_SET_MNU: +; LD IX,LP_SCR_MNU +; JP PIC_FN0_OpenWin + +LP_SET_32: LD HL,#4104 +.X: LD IX,LP_SCR_32 + JP PIC_FN0_OpenWin + +LP_SET_64: LD HL,#4104 +.X: LD IX,LP_SCR_64 + JP PIC_FN0_OpenWin + +LP_SET_40: LD HL,#4000 +.X: LD IX,LP_SCR_40 + JP PIC_FN0_OpenWin + +LP_SET_80: LD HL,#4000 +.X: LD IX,LP_SCR_80 + JP PIC_FN0_OpenWin + +PIC_SET_S1: LD IX,PIC_320X256_1 + JP PIC_FN0_OpenWin + +PIC_SET_S2: LD IX,PIC_320X256_2 + JP PIC_FN0_OpenWin +;------------------------------------------------------------------[#80] +; + +;------------------------------------------------------------------[#B1] +; !TODO +WIN_CLOSE: SCF + RET +;------------------------------------------------------------------[#B1] +; + +; +;------------------------------------------------------------------[#B0] +; IX - ⥫ +WIN_OPEN.SCR1: LD E,1 +; E - bit0 - ࠭ +WIN_OPEN: CALL .Prepare + LD L,(IX + Window_Variables.USER.PLACE_H) + LD H,(IX + Window_Variables.USER.PLACE_V) + JP WIN_OPEN_W1 + ; +.Prepare: CALL LP_OPEN_PG + PUSH HL + PUSH DE + ;LD (SYS_PAGE.WIN_MAP_SC),IX ; + ;LD HL,(SYS_PAGE.WIN_MAP_SC) + PUSH IX + POP HL + LD DE,WIN_ID_0 + LD BC,Window_UserVars + LDIR + LD IX,WIN_ID_0 + POP DE + POP HL + LD (IX + Window_Variables.MODE_E),E + RET +;------------------------------------------------------------------[#B0] +; + +; +;------------------------------------------------------------------[#A0] +; HL = X + Y*64 + #4000 + #1000*RGMOD. ࠭ ⠬ +; IX - ⥫ +; E - bit0: ࠭ +;LP_SET_MODE: +PIC_FN0_OpenWin: + ; 䨭 ᮢ⨬ 묨 ண, । 㣨 ࠬ + LD A,H + AND %00001'0000 ; ६ 4 ॣ E + XOR E + LD E,A + ; + LD A,L + AND #3F + ADD HL,HL + ADD HL,HL + LD L,A + ; + LD A,H + AND #3F + LD H,A + CALL WIN_OPEN.Prepare + LD (IX + Window_Variables.USER.PLACE_H),L + LD (IX + Window_Variables.USER.PLACE_V),H + ; +WIN_OPEN_W1: LD A,L + ADD A,A + INC A ; ᫥ PORT_Y + BIT 4,E + JR NZ,.NO_OR + OR #80 ; ᫨ 뢮 ன ࠭ +.NO_OR: LD (IX+Window_Variables.H_BEG),A + LD D,A + LD A,(IX+Window_Variables.USER.SIZE_H) + ADD A,A + ADD A,D + LD (IX+Window_Variables.H_END),A + ;LD (SYS_PAGE.WIN_MODE_SC),DE ; ਧ⠫ ࠭ + LD A,H + AND #3F + ADD A,A + ADD A,A + LD L,A + LD H,A + ;LD (SYS_PAGE.WIN_MODE_SH),HL ; ⨪ ᮬ + LD (IX+Window_Variables.V_BEG),A + LD A,(IX+Window_Variables.USER.SIZE_V) + ADD A,A + ADD A,A + ADD A,L + LD (IX+Window_Variables.V_END),A + ; + ;LD L,(IX+Window_Variables.V_BEG) + LD L,H + LD H,#C3 + LD B,(IX+Window_Variables.USER.SIZE_V) ; ࠧ ⨪ + LD (IX+Window_Variables.WORK_1),0 + LD A,(IX+Window_Variables.USER.MODE) ; ० + LD (IX+Window_Variables.WORK_2),A + BIT 4,A + JR NZ,.LOOP ; 室, ᫨ ⥪⮢ ० + ; + AND #F0 + LD C,A + LD A,(IX+Window_Variables.USER.GR_X) + RRCA + RRCA + RRCA + LD D,A + AND #0F + OR C + LD (IX+Window_Variables.WORK_2),A + ; + LD A,D + AND #E0 + LD C,A + LD A,(IX+Window_Variables.USER.GR_Y) + AND #1F + OR C + RLCA + RLCA + RLCA + LD (IX+Window_Variables.WORK_1),A +.LOOP: LD D,(IX+Window_Variables.H_BEG) ; D - 砫 ப (PORT_Y) + LD C,(IX+Window_Variables.USER.SIZE_H) ; ࠧ ਧ⠫ + LD A,(IX+Window_Variables.USER.MODE) ; ० + PUSH BC + CALL LP_MODE_LINE + POP BC + INC L + INC L + INC L + INC L + DJNZ .LOOP + ; + LD A,(IX+Window_Variables.MODE_E) + AND 1 + OUT (SCREEN_SWITCH),A + ;LD A,(IX+Window_Variables.MODE) + ;BIT 4,A + CALL LP_CLOSE_PG + ;RET Z + CALL LP_INI_P + ;LD A,(SYS_PAGE.WIN_MODE_SC) + ;OUT (RGMOD),A + ; 뫮 ᠭ + CALL LP_SIZE + ; DE - ࠧ + ; + XOR A ;!TODO + RET +; + +; ⠭ ० +LP_MODE_LINE: BIT 0,(IX+Window_Variables.USER.MODE_S) + JP NZ,.Spectrum ; ᯥ + BIT 4,A + JP Z,.Graphic ; 䨪! + DEC D + ; ⥪⮢ ०. + EX AF,AF' + LD A,#50 + OUT (SLOT3),A + LD A,L ; ⨪쭮 + CP #80 + JR NC,.Exit_txt + ; + CALL .RECURSE + JR NC,.Exit_txt + ; + CALL .CALC_C + ; +.loop_txt_scr: EX AF,AF' + LD A,D + OUT (PORT_Y),A + EX AF,AF' + LD (HL),A ; ० + INC D + EX AF,AF' + LD A,D + OUT (PORT_Y),A + EX AF,AF' + LD (HL),A ; ० + INC D + DEC C + JR NZ,.loop_txt_scr + ; + EX AF,AF' +.Exit_txt: LD A,SYS_PAGE + OUT (SLOT3),A + EX AF,AF' + RET + ; + ; Spectrum mode +.Spectrum: LD A,(IX+Window_Variables.WORK_2) + LD B,(IX+Window_Variables.WORK_1) + DEC D + EX AF,AF' + LD A,#50 + OUT (SLOT3),A + LD A,L ; ⨪쭮 + CP #80 + JR NC,.Exit_zx_scr + ; + CALL .RECURSE + JR NC,.Exit_zx_scr + ; + CALL .CALC_C + ; +.loop_zx_scr: EX AF,AF' + LD A,D + OUT (PORT_Y),A + EX AF,AF' + LD (HL),A ; ० + ; + INC L + LD (HL),B + INC L + LD (HL),B + DEC L + DEC L + ; + INC D + BIT 4,A + JR NZ,.no_inc_B_zx + ; + INC B +.no_inc_B_zx: EX AF,AF' + LD A,D + OUT (PORT_Y),A + EX AF,AF' + ; + LD (HL),A ; ० + INC L + LD (HL),B + INC L + LD (HL),B + DEC L + DEC L + ; + INC D + INC B + JR NZ,.NO_ADD_40 + ; + ADD A,#40 +.NO_ADD_40: DEC C + JR NZ,.loop_zx_scr + EX AF,AF' + ; +.Exit_zx_scr: LD A,SYS_PAGE + OUT (SLOT3),A + EX AF,AF' + LD (IX+Window_Variables.WORK_1),B + LD (IX+Window_Variables.WORK_2),A + RET + ; + ; Graphic Mode +.Graphic: LD A,(IX+Window_Variables.WORK_1) + LD B,(IX+Window_Variables.WORK_2) + DEC D + EX AF,AF' + LD A,#50 + OUT (SLOT3),A + LD A,L ; ⨪쭮 + CP #80 + JR NC,.Exit2_GFX_scr + ; + CALL .RECURSE + JR NC,.Exit2_GFX_scr + ; + CALL .CALC_C + ; + BIT 5,B + JR Z,.GFX_640_Loop + ; + ; GFX 320 +.loop_GFX_scr: EX AF,AF' + LD A,D + OUT (PORT_Y),A + EX AF,AF' + LD (HL),B ; mode 0 + INC L + LD (HL),A ; mode 1 + INC L + LD (HL),0 ; mode 2 + DEC L + DEC L + INC D + ; + ;EX AF,AF' + ;LD A,D + ;OUT (PORT_Y),A + ;EX AF,AF' + ;LD (HL),B ; ० + ;INC L + ;LD (HL),A ; ० 2 + ;DEC L + ; + INC D + INC A + LD E,A + AND 7 + JR NZ,.NO_INC_B_320 + ; + LD A,E + SUB 8 + LD E,A + INC B +.NO_INC_B_320: LD A,E + DEC C + JR NZ,.loop_GFX_scr + ; +.Exit_GFX_scr: EX AF,AF' +.Exit2_GFX_scr: LD A,SYS_PAGE + OUT (SLOT3),A + EX AF,AF' + LD A,(IX+Window_Variables.WORK_1) + ADD A,8 + LD (IX+Window_Variables.WORK_1),A + RET + ; + ; GFX 640 +.GFX_640_Loop: EX AF,AF' + LD A,D + OUT (PORT_Y),A + EX AF,AF' + LD (HL),B ; mode 0 + INC L + LD (HL),A ; mode 1 + INC L + LD (HL),0 ; mode 2 + ; + INC D + EX AF,AF' + LD A,D + OUT (PORT_Y),A + EX AF,AF' + LD (HL),0 ; mode 2 + DEC L + LD (HL),A ; mode 1 + DEC L + LD (HL),B ; mode 0 + ; + INC D + INC A + LD E,A + AND 7 + JR NZ,.NO_INC_B_640 + ; + LD A,E + SUB 8 + LD E,A + INC B +.NO_INC_B_640: LD A,E + DEC C + JR NZ,.GFX_640_Loop + JP .Exit_GFX_scr +; +.RECURSE: LD A,D ; ਧ⠫쭮 + AND #7F + SUB 80 + RET C + SUB 48 + NEG + LD E,A ; + ADD A,D + LD D,A ; + LD A,E ; ⠭ + RRA + AND #3F + SUB C + RET NC + NEG + LD C,A ; 祭 C + JR .RECURSE +; +.CALC_C: NEG + RRA + AND #3F + CP C + JR NC,.NoChangeC + LD C,A +.NoChangeC: EX AF,AF' + INC D + RET +;***************************************************************** + + +LP_SCROLL_UD: DEC B + JR Z,LP_SCROLL_UP + DEC B + JR Z,LP_SCROLL_DN + SCF + RET + +; 室: +; D - ப ( 0 ) +; E - ᫮ ஫㥬 ப +LP_SCROLL_UP: DEC E + RET Z + CALL LP_OPEN_PG + ; + LD B,E + LD E,0 ; ப ஫ + CALL .RUN + JP LP_CLOSE_PG + ; + ; +.RUN: CALL LP_SET_CUR ; ᫨ ६ ப + PUSH IX + LD IX,(WIN_ID_0.USER.SIZE_H) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!TODO + ; ⫨稥 LP_SCROLL_DN + LD A,(WIN_ID_0.V_END) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + LD C,A + LD A,#50 + OUT (SLOT3),A ; ࠭ ७ + ; +.loop2: EXX + PUSH HL + EXX + POP HL + ; + LD E,L + LD D,H + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!TODO + ; ⫨稥 LP_SCROLL_DN + LD A,4 + ADD L + LD L,A + ; + LD A,C ; LD A,(WIN_ID_0.V_END) + CP L + JR C,.exit ; ᫨ , 室 + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + PUSH BC + LD A,L + EXX + LD L,A + EXX + ;XH + LD A,XL ; WIN_ID_0.USER.SIZE_H + ; LD A,SYS_PAGE + ; OUT (SLOT3),A + ; LD A,(WIN_ID_0.USER.SIZE_H) + ADD A,A ; ᫮ ப ७ + ADD A,A + LD C,A + LD B,0 + ; LD A,#50 + ; OUT (SLOT3),A ; ࠭ ७ + ; + EXX + LD A,D ; 砫 ப + EXX +.loop1: OUT (PORT_Y),A + INC A ; ᫥饥 祭 + LDI + LDD + ; + OUT (PORT_Y),A + INC A ; ᫥饥 祭 + LDI + LDD + JP PE,.loop1 + ; + POP BC + DJNZ .loop2 +.exit: POP IX + RET + + + +; 室 : +; D - ப ( 0 ) +; E - ᫮ ஫㥬 ப +LP_SCROLL_DN: DEC E + RET Z + CALL LP_OPEN_PG + ; + LD B,E + LD E,0 + LD A,D + ADD A,B + LD D,A + CALL .RUN +.EXIT: JP LP_CLOSE_PG + ; + ; +.RUN: CALL LP_SET_CUR + PUSH IX + LD IX,(WIN_ID_0.USER.SIZE_H) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!TODO + ; ⫨稥 LP_SCROLL_UD + LD A,(WIN_ID_0.V_BEG) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + LD C,A + LD A,#50 + OUT (SLOT3),A ; ࠭ ७ + ; +.loop2: EXX + PUSH HL + EXX + POP HL + ; + LD E,L + LD D,H + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!TODO + ; ⫨稥 LP_SCROLL_UD + LD A,L + SUB 4 + LD L,A + ; + LD A,C + CP L ; .CONT: L >= A + JR Z,.CONT + JR NC,.exit ; ᫨ , 室 + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.CONT: PUSH BC + LD A,L + EXX + LD L,A + EXX + ; + LD A,XL ; WIN_ID_0.USER.SIZE_H + ; LD A,SYS_PAGE + ; OUT (SLOT3),A + ; LD A,(WIN_ID_0.USER.SIZE_H) + ADD A,A ; ᫮ ப ७ + ADD A,A + LD C,A + LD B,0 + ; LD A,#50 + ; OUT (SLOT3),A ; ࠭ ७ + ; + EXX + LD A,D ; 砫 ப + EXX +.loop1: OUT (PORT_Y),A + INC A ; ᫥饥 祭 + LDI + LDD + ; + OUT (PORT_Y),A + INC A ; ᫥饥 祭 + LDI + LDD + JP PE,.loop1 + ; + POP BC + DJNZ .loop2 +.exit: POP IX + RET + + +; DE - ᨬ +; - +; 室: HL - ᨬ/ਡ B - +WIN_GET_SYM: AND A + SCF + RET NZ + ; + CALL LP_BEG_P + CALL LP_SET_CUR + LD A,#50 + OUT (SLOT3),A + ; + EXX + LD A,D + OUT (PORT_Y),A + LD A,(HL) + EXX + LD L,A + EXX + INC L + LD A,(HL) + EXX + LD H,A + EXX + DEC L + DEC L + LD A,(HL) + INC L + EXX + LD B,A + JP LP_END_P + ;RET + +; DE - ᨬ +; - +; HL - ᨬ/ਡ +; B - +WIN_PUT_SYM: AND A + SCF + RET NZ + ; + CALL LP_BEG_P + CALL LP_SET_CUR + LD A,#50 + OUT (SLOT3),A + ; + EXX + LD A,D + OUT (PORT_Y),A + EXX + ; [ ] 31/03/2025 ᫨ B=0, ⮫쪮 ᨬ + ; ᫨ B=1, ᨬ ਡ⮬ + ; ᨬ + ; LD A,L + ; EXX + ; LD (HL),A + ; INC L + ; EXX + ; ; ਡ + ; LD A,H + ; EXX + ; LD (HL),A + ; DEC L + ; DEC L + ; EXX + ; ; + ; LD A,B + ; EXX + ; LD (HL),A + ; INC L + ; EXX + ; JP LP_END_P + ; + ; + LD A,B + OR A + JR Z,.onlySymbol + DEC B + JR Z,.noChangeZG + ; + EXX + DEC L + LD (HL),A + INC L + EXX + ; ਡ +.noChangeZG: LD A,H + EXX + INC L + LD (HL),A + DEC L + EXX + ; ᨬ +.onlySymbol: LD A,L + EXX + LD (HL),A + EXX + JP LP_END_P + + + +; HL - ࠧ +; DE - +; A - +; IX - +WIN_MOVE: AND A + SCF + RET NZ + PUSH IX + PUSH HL + LD B,SHARED_PAGE + LD IX,SLOT3.MEM_ADDR + CALL WIN_COPY_WIN1 + POP HL + POP DE + LD B,SHARED_PAGE + LD IX,SLOT3.MEM_ADDR + CALL WIN_RESTORE.Start + AND A + RET + + +; HL - ࠧ ࠭塞 +; DE - ࠭塞 +; IX - ࠭塞 , ࠭ 4000h +; - , B - ࠭ +WIN_COPY: AND A + SCF + RET NZ +WIN_COPY_WIN1: CALL LP_BEG_P + IN A,(SLOT1) + PUSH AF + ; + CALL LP_SET_CUR + LD (SYS_PAGE.SYS_WORK1),SP + LD A,B + OUT (SLOT3),A + LD A,#50 + OUT (SLOT1),A + ; + EXX + RES 7,H + LD C,D + EXX + ; +.COPY_loop2: LD A,L + EXX + LD B,A + ADD A,A + ADD A,XL + LD XL,A + JR NC,.NO_INC_XH + ; + INC XH +.NO_INC_XH: LD SP,IX + LD A,C + ADD A,B +.COPY_loop: DEC A + OUT (PORT_Y),A + LD E,(HL) + INC L + LD D,(HL) + DEC L + PUSH DE + DJNZ .COPY_loop + ; + INC HL + INC HL + INC HL + INC HL + EXX + DEC H + JR NZ,.COPY_loop2 + ; + LD A,SYS_PAGE + OUT (SLOT3),A + LD SP,(SYS_PAGE.SYS_WORK1) + ; + POP AF + OUT (SLOT1),A + JP LP_END_P.short +; + +; HL - ࠧ ࠭塞 +; DE - ࠭塞 +; IX - ⠭ +WIN_RESTORE: AND A + SCF + RET NZ +.Start: + CALL LP_BEG_P + ; + IN A,(SLOT1) + PUSH AF + ; + CALL LP_SET_CUR + ; + LD (SYS_PAGE.SYS_WORK1),SP + LD SP,IX + ; + LD A,B + OUT (SLOT3),A + LD A,#50 + OUT (SLOT1),A + ; + EXX + RES 7,H + LD C,D + EXX +.L2: LD A,L + EXX + LD B,A + LD A,C +.L1: OUT (PORT_Y),A + INC A + POP DE + LD (HL),E + INC L + LD (HL),D + DEC L + DJNZ .L1 + ; + INC HL + INC HL + INC HL + INC HL + EXX + DEC H + JR NZ,.L2 + + LD A,SYS_PAGE + OUT (SLOT3),A + + LD SP,(SYS_PAGE.SYS_WORK1) + + POP AF + OUT (SLOT1),A + JP LP_END_P.short +;======================================================================; + + + + +; ࠢ騬 ᨬ ᮫ +;------------------------------------------------------------------[#E0] +LP_PR_LINE_DIR: + ;>------------------------------------------------[BELL] +.BELL: EXX + PUSH HL + PUSH BC + ; + LD DE,1200 + LD HL,4 + CALL BEEP + ; + POP BC + POP HL + EXX + JR .loop + ;-------------------------------------------------[BELL] + + ;>------------------------------------------------[Backspace] +.BACK: LD A,(WIN_ID_0.H_BEG) + CP D + JR Z,.loop + INC B + DEC D + CORRECT_SCR_40_BACKWARD + JP .loop + ;>------------------------------------------------[Backspace] + ; +.EXIT_SpecSymbol: + DEC HL + CALL LP_END_P + POP IX + SCF + RET +; +.EXIT: POP IX + JP LP_END_P +;;;;;;;;;;;;;;;;; +; A - ਡ 뢮 ᨬ ᫨ CF' +; A' - ᫨ !=0 ஫ +; CF - XY-mode +; DE - ᨬ , ᫨ CF=1 +; HL - 뢮 ப +; B - 梥 ᮫ (ᯮ ஫ ⪥ ) +; IY - ᯥ.ᨬ 室 CF=1. ࠢ 0, ᫨ 㦭 +; CF' - 뢮 ᨬ ਡ⠬ +;;;;;;;;;;;;;;;;; +.START: PUSH IX + LD XL,A ; ਡ 뢮 ᨬ + ; + EX AF,AF' + PUSH AF ; attr-mode + EX AF,AF' + ; + IN A,(SLOT3) + LD C,A + CALL LP_BEG_P + CALL C,LP_SET_CUR ; mode for DE + LD A,B + ; ॣ B ᢮, ⢮ + LD (SYS_PAGE.SYS_WORK2),A ; 梥 ᮫ + POP AF ; attr-mode, scroll on/off + LD B,A ; scroll on/off + EXX + RL C ; C' - attr-mode. 뢮 ਡ +.loop: LD A,D + OUT (PORT_Y),A + EXX + LD A,C + OUT (SLOT3),A + ; + LD A,(HL) + LD XH,A + INC HL + AND A + JR Z,.EXIT + CP YH + JR Z,.EXIT_SpecSymbol + CP YL + JR Z,.EXIT_SpecSymbol + ; + EXX + ; ⠥ ᨬ + CP 14 + JR NC,.print + CP 7 + JR C,.print + ; ࠢ騥 ᨬ + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,XH + ; + SUB 7 + JR Z,.BELL ; A = 07 "BELL" + DEC A + JR Z,.BACK ; A = 08 "Backspace" + DEC A + JR Z,.TAB ; A = 09 "TAB" + DEC A + JR Z,.LineFeed ; = 10 "Line Feed" + DEC A + JR Z,.VertTab ; = 11 "Vertical Tabulation" + DEC A + JR Z,.CLS ; = 12 "Form feed" - ࠧ ࠭, 砫 , ࠡ VT + ;DEC A + ;JR Z,.CR ; = 13 "Carriage Return" + ;>------------------------------------------------[CR] +.CR: LD A,(WIN_ID_0.H_BEG) + LD D,A + LD A,(WIN_ID_0.SIZE_REL) + LD B,A + JP .loop + ;-------------------------------------------------[CR] + + ;>------------------------------------------------[PRINT] +.print: LD A,#50 + OUT (SLOT3),A + LD A,XH + LD (HL),A + ; 뢮 ਡ + RR C ; C' - attr flag + JR NC,.NoPutAttr + ; + INC L + LD A,XL + LD (HL),A + DEC L +.NoPutAttr: RL C ; C' - attr flag + INC D +.next_full: CORRECT_SCR_40_FORWARD +.next: DJNZ .loop + CALL LP_NEXT_HL_DIR + JP .loop + ;-------------------------------------------------[PRINT] + + ;>------------------------------------------------[TAB] +.TAB: LD A,(WIN_ID_0.H_BEG) + SUB D + NEG + AND %0000'0111 + NEG + ADD A,8 + CP B + JR C,.keep_A + ; + LD A,B + DEC A +.keep_A: ;NEG + PUSH BC ; save C' - attr flag + LD C,A + EX AF,AF' + JR C,.LLL + ; + EX AF,AF' + ADD A,A ; ० 40 + EX AF,AF' +.LLL: EX AF,AF' + ; +.tabNxt: ADD A,D + LD D,A + LD A,B + SUB C ; set XL + POP BC ; restore C' - attr flag + LD B,A + JP .loop + ; + ;-------------------------------------------------[TAB] + + ;>------------------------------------------------[Line Feed] +.VertTab: ; +.LineFeed: LD A,4 ;!HARDCODE ⥫ ⨪ + ADD L + LD L,A + ; + LD A,(WIN_ID_0.V_END) + CP L + CALL C,LP_NEXT_HL_DIR.end_line + JP .loop + ;-------------------------------------------------[Line Feed] + + ;>------------------------------------------------[Form feed] +.CLS: PUSH BC ; C' - attr flag + EXX + PUSH BC + PUSH HL + PUSH DE + ; + LD A,(SYS_PAGE.SYS_WORK2) ; 梥 ᮫ + LD B,A + LD DE,0 + LD HL,(WIN_ID_0.USER.SIZE_H) ; get WIN XY + LD A,(WIN_ID_0.SIZE_REL) + LD L,A + LD C," " + CALL LP_CLS_WIN.CLS + ; + POP DE + POP HL + POP BC + EXX + LD A,B + POP BC ; C' - attr flag + LD B,A + JP .loop + ;-------------------------------------------------[Form feed] +;------------------------------------------------------------------[#E0] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +LP_NEXT_HL_DIR: LD A,SYS_PAGE + OUT (SLOT3),A + LD A,4 ;!HARDCODE ⥫ ⨪ + ADD L + LD L,A + LD A,(WIN_ID_0.V_END) + CP L + CALL C,.end_line + ; +.no_end_line: LD A,(WIN_ID_0.H_BEG) + LD D,A + LD A,(WIN_ID_0.SIZE_REL) + LD B,A + RET + ; +.end_line: LD A,L + SUB 4 ;!HARDCODE ⥫ ⨪ + LD L,A + ; ਬ ஫ ? + EXX + LD A,B + EXX + AND A + RET NZ ; ZF=0 ஫ + ; + PUSH HL + DEC L + PUSH BC + PUSH DE + EXX + PUSH BC + PUSH HL + PUSH DE + LD A,(WIN_ID_0.V_BEG) + LD D,A + LD A,(WIN_ID_0.USER.SIZE_V) + LD B,A + LD E,0 ; ப ஫ + CALL LP_SCROLL_UP.RUN + ; + LD A,SYS_PAGE + OUT (SLOT3),A + LD C," " + LD A,(SYS_PAGE.SYS_WORK2) ; 梥 ᮫ + LD B,A + LD A,(WIN_ID_0.USER.SIZE_V) + DEC A + LD D,A + LD E,0 + LD HL,(WIN_ID_0.SIZE_REL) + LD H,1 + LD C," " + CALL LP_CLS_WIN.CLS + ; + POP DE + POP HL + POP BC + EXX + POP DE + POP BC + POP HL + RET +; +; LD HL,(WIN_ID_0.V_END) +; DEC L +; DEC L +; DEC L +; LD H,#C3 +; ; +; LD A,(WIN_ID_0.H_BEG) +; LD D,A +; ; +; LD A,#50 +; OUT (SLOT3),A +; ; +; EXX +; LD A,(WIN_ID_0.SIZE_REL) +; LD B,A +; .loop_cl_line: EXX +; LD A,D +; OUT (PORT_Y),A +; LD (HL),C +; INC D +; CORRECT_SCR_40_FORWARD +; EXX +; DJNZ .loop_cl_line +; LD A,SYS_PAGE +; OUT (SLOT3),A +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + + +LP_OPEN_PG: IN A,(SLOT3) + LD C,A + LD A,SYS_PAGE + OUT (SLOT3),A + ; + LD A,C + LD (SYS_PAGE.COPY_SLOT3),A + IN A,(PORT_Y) + LD (SYS_PAGE.COPY_RGADR),A + RET +; + +; 䫠 ண ॣ ஬ A +LP_CLOSE_PG: LD A,(SYS_PAGE.COPY_RGADR) + OUT (PORT_Y),A + LD A,(SYS_PAGE.COPY_SLOT3) + OUT (SLOT3),A + RET + +/* + +;!TODO LP_SET_MODE - ᪮ LP_SCR_MNU + + MODULE EXPERIMENT + +; byte 1 +; 0..4 - VIDEO_PAGE +; 5 - mode 42/84 ; 0 - 42,1 - 84 +; 6 - next line +; 7 - end table +; byte 2 - number of places +; byte 3..4 - adress places/ +; 4000-5FFF - Spectrum modes/ C000-FFFF - Graf mode +; + MACRO LP_S PG,XX,ADR + DB PG,XX + DW ADR + ENDM + + MACRO LP_OPEN_PG + IN A,(SLOT3) + LD C,A + LD A,SYS_PAGE + OUT (SLOT3),A + ; + LD A,C + LD (SYS_PAGE.COPY_SLOT3),A + IN A,(PORT_Y) + LD (SYS_PAGE.COPY_RGADR),A + ENDM ; + + MACRO LP_CLOSE_PG + LD A,(SYS_PAGE.COPY_RGADR) + OUT (PORT_Y),A + LD A,(SYS_PAGE.COPY_SLOT3) + OUT (SLOT3),A + ENDM ; +;--------------------------------------- +GR_BIT_END: EQU 7 + +S_BIT_END: EQU 7 +S_BIT_LIN: EQU 6 +S_BIT_MOD: EQU 5 + +BIT_1440: EQU 1 +BIT_MASK_1440: EQU %00000010 + +MODE_PAGE: EQU #FC +;--------------------------------------- + ;DS (($/4)*4+4-$) + ALIGN 4 + + +LP_SCR_MNU: + LP_S #40,14,#40E7 + LP_S #40,14,#4807 + LP_S #40,14,#4827 + LP_S #40,14,#4847 + LP_S #40,14,#4867 + LP_S #40,14,#4887 + LP_S #40,14,#48A7 + LP_S #40,14,#48C7 + LP_S #40,14,#48E7 + DB #FF,0,0,0 + +; LP_SCR_80: +; DB 40,32,0,0,#1B,0,0,0 +; DB 0,0,0,0,0,0,0,0 + +; LP_S %0110'0010,40,#4000 +; LP_S %0110'0010,40,#4028 +; LP_S %0110'0010,40,#4050 +; LP_S %0110'0010,40,#4078 +; LP_S %0110'0010,40,#40A0 +; LP_S %0110'0010,40,#40C8 +; +; LP_S %0110'0010,40,#4800 +; LP_S %0110'0010,40,#4828 +; LP_S %0110'0010,40,#4850 +; LP_S %0110'0010,40,#4878 +; LP_S %0110'0010,40,#48A0 +; LP_S %0110'0010,40,#48C8 +; +; LP_S %0110'0010,40,#5000 +; LP_S %0110'0010,40,#5028 +; LP_S %0110'0010,40,#5050 +; LP_S %0110'0010,40,#5078 +; LP_S %0110'0010,40,#50A0 +; LP_S %0110'0010,40,#50C8 +; +; LP_S %0110'0100,40,#4000 +; LP_S %0110'0100,40,#4028 +; LP_S %0110'0100,40,#4050 +; LP_S %0110'0100,40,#4078 +; LP_S %0110'0100,40,#40A0 +; LP_S %0110'0100,40,#40C8 +; +; LP_S %0110'0100,40,#4800 +; LP_S %0110'0100,40,#4828 +; LP_S %0110'0100,40,#4850 +; LP_S %0110'0100,40,#4878 +; LP_S %0110'0100,40,#48A0 +; LP_S %0110'0100,40,#48C8 +; +; LP_S %0110'0100,40,#5000 +; LP_S %0110'0100,40,#5028 +; +; DEFB #FF,0,0,0 +; +; LP_SCR_40: +; DB 40,32,0,0,7BH,0,0,0 +; DB 0,0,0,0,0,0,0,0 +; +; LP_S 01000100B,40,5050H +; LP_S 01000100B,40,5078H +; LP_S 01000100B,40,50A0H +; LP_S 01000100B,40,50C8H +; +; LP_S 01000110B,40,4000H +; LP_S 01000110B,40,4028H +; LP_S 01000110B,40,4050H +; LP_S 01000110B,40,4078H +; LP_S 01000110B,40,40A0H +; LP_S 01000110B,40,40C8H +; +; LP_S 01000110B,40,4800H +; LP_S 01000110B,40,4828H +; LP_S 01000110B,40,4850H +; LP_S 01000110B,40,4878H +; LP_S 01000110B,40,48A0H +; LP_S 01000110B,40,48C8H +; +; LP_S 01000110B,40,5000H +; LP_S 01000110B,40,5028H +; LP_S 01000110B,40,5050H +; LP_S 01000110B,40,5078H +; LP_S 01000110B,40,50A0H +; LP_S 01000110B,40,50C8H +; +; LP_S 01001000B,40,4000H +; LP_S 01001000B,40,4028H +; LP_S 01001000B,40,4050H +; LP_S 01001000B,40,4078H +; LP_S 01001000B,40,40A0H +; LP_S 01001000B,40,40C8H +; +; LP_S 01001000B,40,4800H +; LP_S 01001000B,40,4828H +; LP_S 01001000B,40,4850H +; LP_S 01001000B,40,4878H +; +; DEFB 0FFh,0,0,0 +; +; LP_SCR_32: +; DB 32,24,4,4,30H,1,0,0 +; DB 0,0,0,0,0,0,0,0 +; +; LP_S 040h,32,04000H +; LP_S 040h,32,04020H +; LP_S 040h,32,04040H +; LP_S 040h,32,04060H +; LP_S 040h,32,04080H +; LP_S 040h,32,040A0H +; LP_S 040h,32,040C0H +; LP_S 040h,32,040E0H +; +; LP_S 040h,32,04800H +; LP_S 040h,32,04820H +; LP_S 040h,32,04840H +; LP_S 040h,32,04860H +; LP_S 040h,32,04880H +; LP_S 040h,32,048A0H +; LP_S 040h,32,048C0H +; LP_S 040h,32,048E0H +; +; LP_S 040h,32,05000H +; LP_S 040h,32,05020H +; LP_S 040h,32,05040H +; LP_S 040h,32,05060H +; LP_S 040h,32,05080H +; LP_S 040h,32,050A0H +; LP_S 040h,32,050C0H +; LP_S 040h,32,050E0H +; +; LP_S 0FFh,0,0 +; +; LP_SCR_64: +; DB 32,24,4,4,9BH,0,0,0 +; DB 0,0,0,0,0,0,0,0 +; +; LP_S 06Ah,32,04000H +; LP_S 06Ah,32,04020H +; LP_S 06Ah,32,04040H +; LP_S 06Ah,32,04060H +; LP_S 06Ah,32,04080H +; LP_S 06Ah,32,040A0H +; LP_S 06Ah,32,040C0H +; LP_S 06Ah,32,040E0H +; +; LP_S 06Ah,32,04800H +; LP_S 06Ah,32,04820H +; LP_S 06Ah,32,04840H +; LP_S 06Ah,32,04860H +; LP_S 06Ah,32,04880H +; LP_S 06Ah,32,048A0H +; LP_S 06Ah,32,048C0H +; LP_S 06Ah,32,048E0H +; +; LP_S 06Ah,32,05000H +; LP_S 06Ah,32,05020H +; LP_S 06Ah,32,05040H +; LP_S 06Ah,32,05060H +; LP_S 06Ah,32,05080H +; LP_S 06Ah,32,050A0H +; LP_S 06Ah,32,050C0H +; LP_S 06Ah,32,050E0H +; +; LP_S 0FFh,0,0 + + +@LP_SET_MNU: LD IX,LP_SCR_MNU + ;JR LP_SET_MODE +; HL - ᬥ饭 砫 ࠭ +; = hor_sh + vert_sh * 64 + 4000H +; IX - ࠭ ⠡ +LP_SET_MODE: LP_OPEN_PG + LD (SYS_PAGE.WIN_MAP_SC),IX + LD (SYS_PAGE.WIN_MODE_SH),HL + LD (SYS_PAGE.WIN_MODE_SC),DE + LD HL,(SYS_PAGE.WIN_MAP_SC) + LD DE,SYS_PAGE.WIN_MAP_IX +.LP_SET_COPY: LD BC,4 + LDIR + BIT S_BIT_END,(HL) + JR Z,.LP_SET_COPY + LD BC,4 + LDIR + LD HL,SYS_PAGE.WIN_MAP_IX + LD (SYS_PAGE.WIN_MAP_SC),HL +.LP_SET_MODE_INT: + LD IX,(SYS_PAGE.WIN_MAP_SC) + LD HL,(SYS_PAGE.WIN_MODE_SH) + CALL LP_SET_MODE1 + LD DE,(SYS_PAGE.WIN_MODE_SC) + LP_CLOSE_PG + PUSH DE + CALL LP_INI_P + POP DE + LD A,E + OUT (RGMOD),A + CALL LP_SIZE + RET + +LP_SET_MODE1: AND A + BIT S_BIT_END,(IX) ; ஢ઠ + RET NZ + + PUSH HL + + IN A,(RGADR) + PUSH AF + + LD A,H + CP #48 + CCF + LD A,#16 + ADC A,0 + OUT (RGADR),A + +.LP_SET_LOOP: CALL LP_MODE_LINE + + INC IX + INC IX + INC IX + INC IX + BIT S_BIT_LIN,(IX) + JR Z,.LP_SET_LOOP + + POP AF + OUT (RGADR),A + + POP HL + + LD BC,#40 + ADD HL,BC + JR LP_SET_MODE1 + +;******************************************************** +; ᫥ 祭 MODE ࠭ ⠡. +; IX - ⥪饥 ⠡. +LP_MODE_LINE: BIT 3,H + RET NZ + + IN A,(SLOT1) + LD (SYS_PAGE.SYS_WORK1),A + + IN A,(RGADR) + AND 1 + OR MODE_PAGE + OUT (SLOT1),A + + LD A,(IX) + LD B,A + RRCA + AND #0F + LD C,A + LD A,B + AND #20 + XOR #30 + OR C + LD C,A + LD A,(IX+3) + RLC A + RLC A + RLC A + AND #C0 + OR C + LD D,A ; MODE + LD E,(IX+2) ; ன .. + + LD B,(IX+1) ; ᫮ + + LD A,L + AND #3F + SUB 40 + JR NC,.LP_NO_SET_MD + NEG + CP B + JR NC,.LP_MD_NO_B + LD B,A +.LP_MD_NO_B: + +.LP_MD_LOOP: SET 4,H + LD (HL),E + RES 4,H + LD (HL),D + + INC E + INC L + DJNZ .LP_MD_LOOP + +.LP_MD_END: LD A,(SYS_PAGE.SYS_WORK1) + OUT (SLOT1),A + RET + +.LP_NO_SET_MD: LD A,C + +.LP_MD_LOOP2: INC E + INC L + BIT 5,H + JR Z,.LP_MD_LOOP + DJNZ .LP_MD_LOOP2 + JR .LP_MD_END + + +; ᫥ +LP_TAB_HL: LD HL,(SYS_PAGE.WIN_TAB_SC) ; 㧨 ⥪饥 ⠡ SCR + LD A,(HL) ; 㧨 䫠 ⠡ + BIT S_BIT_END,A ; 䫠 + JR Z,LP_TAB_H1 ; ᫨ 0 - +LP_TAB_H2: LD HL,(SYS_PAGE.WIN_MAP_SC) ; 㧨 砫쭮 ⠡ SCR +LP_TAB_H3: LD A,(HL) ; 䫠 +LP_TAB_H1: CALL .LP_PG1 ; ४ ࠭ + INC HL ; (HL) - ᫮ ᨬ + BIT S_BIT_MOD,A ; 42/84 + LD A,(HL) ; 㧨 ᫮ ᨬ + JR Z,.LP_NO_MUL ; ᫨ 84, 㦭 㬭 2 + ADD A,A ; A=A*2 +.LP_NO_MUL: LD B,A ; ᫮ ᨬ B + INC HL ; 㧪 HL + LD A,(HL) + INC HL + INC HL + LD (SYS_PAGE.WIN_TAB_SC),HL ; ࠭ ᫥饣 ⠡ SCR + DEC HL + LD H,(HL) ; ࠭ + LD L,A + + LD A,H + RRCA ; ᫨ + RRCA ; ਡ + RRCA + AND 3 + OR H + OR #18 + LD C,A + RET + +.LP_PG1: AND #1F ; ४ ⮫쪮 ࠭ Spectrum mode + OUT (RGADR),A + LD E,(HL) ; 祭 ⮢ 䫠 + + BIT S_BIT_MOD,E ; 42/84 + JR Z,.LP_N_84 ; ᫨ 42 ⠭ CF + SCF ; 84 mode +.LP_N_84: EX AF,AF' ; 䫠 祭 뢮 + LD A,E ; A 䫠 + RET + +; program init registers +; for low printer & save +LP_INI_P: EXX + LP_OPEN_PG + LD DE,(SYS_PAGE.WIN_ZG) + LD B,0 + CALL LP_TAB_H2 + EXX +; program save registers +; for low printer +LP_END_P: EX AF,AF' + EXX + RLA + LD E,A + LD (SYS_PAGE.WIN_SAV_HL),HL + LD (SYS_PAGE.WIN_SAV_DE),DE + LD (SYS_PAGE.WIN_SAV_BC),BC + LP_CLOSE_PG + EXX + EX AF,AF' + RET + + +; । size +LP_SIZE: LP_OPEN_PG + EXX + XOR A + LD HL,(SYS_PAGE.WIN_MAP_SC) ; 砫 scr + CALL .LP_LN2 ; ᪠஢ + EXX ; + NEG ; ᫮ + LD D,A ; ப D + LD E,0 + EXX + ;LD A,3 ; ᫮ ᨬ + LD HL,(SYS_PAGE.WIN_MAP_SC) ; 3- ப + ;CALL LP_LN2 ; ன +.LOOP: CALL LP_TAB_H3 ; + LD A,B + EXX + ADD A,E + LD E,A + EXX + LD HL,(SYS_PAGE.WIN_TAB_SC) ; ࠭ + BIT S_BIT_LIN,(HL) + JR Z,.LOOP + ;BIT S_BIT_MOD,(HL) + EXX + ;XOR A + ;OUT (RGADR),A + LP_CLOSE_PG + RET + ; +.LP_LN0: DEC A + RET Z +.LP_LN1: INC HL + INC HL + INC HL + INC HL +.LP_LN2: BIT S_BIT_LIN,(HL) + JR Z,.LP_LN1 + BIT S_BIT_END,(HL) + JR Z,.LP_LN0 + RET + + ENDMODULE + */ \ No newline at end of file diff --git a/src/bios/exp/FUNC_RAM_ROM_DRV.ASM b/bios/exp/FUNC_RAM_ROM_DRV.ASM similarity index 94% rename from src/bios/exp/FUNC_RAM_ROM_DRV.ASM rename to bios/exp/FUNC_RAM_ROM_DRV.ASM index 304df85..5ad24d9 100644 --- a/src/bios/exp/FUNC_RAM_ROM_DRV.ASM +++ b/bios/exp/FUNC_RAM_ROM_DRV.ASM @@ -1,1132 +1,1132 @@ -;===================[ 㭪樨 । ]===================; -; 室: BC - FREE MEM 16k, HL - FULL MEM -;!TEST SLOT2 SLOT1 -; -;----------------------------------------------------------------------; -; । ꥬ . -; 室: BC - FREE MEM 16k, HL - FULL MEM -EMM.GetMemSize: IN A,(SLOT1) - LD B,A - LD A,SYS_PAGE - OUT (SLOT1),A - XOR A - LD C,A - LD HL,SYS_PAGE.RAM_TABLE-#4000-#4000 - ; -.loop: DEC L - JR Z,.exit - CP (HL) - JR NZ,.loop - INC C - JP .loop - ; -.exit: LD HL,#100 ;!HARDCODE max mem pages - LD A,B - ; L=0 - LD B,L - OUT (SLOT1),A - RET - - /* -.loop: LD A,(HL) - INC L - JR Z,.exit - AND A - JR NZ,.loop - INC C - JR .loop -.exit: LD HL,#100 ;!HARDCODE max mem pages - LD A,B - LD B,0 - OUT (SLOT1),A - RET - */ -;----------------------------------------------------------------------; -; - -;!!!!! ᫨ ᯮ SLOT3 ᢮ ࠭栬, 짮 -; ⥪, ⠬ SP ० ᯥ㬠 - -; -;----------------------------------------------------------------------; -; 樠 । . -EMM.InitMem: PUSH BC - PUSH HL - PUSH DE - - IN A,(SLOT3) - LD C,A - LD A,SYS_PAGE - OUT (SLOT3),A - LD HL,SYS_PAGE.RAM_TABLE ; RAM FAT . - ; 塞 ⠡ - XOR A -.loopFree: LD (HL),A - INC L - JR NZ,.loopFree - ; १ࢨ㥬 ᯥ.࠭ ࠭ ZX - ;LD B,RESERVED_PAGES.Blocks - LD DE,RESERVED_PAGES ; ⠡ ⥬ ࠭ -.loop: LD A,(DE) - CP #FF - JR Z,.exitLoop - ; -.loopBlk: INC DE - LD L,A - LD A,(DE) - LD (HL),A - CP #FF - JR NZ,.loopBlk - ; -.exitLoop: ;INC DE - ;DJNZ .loop - LD L,A - LD (HL),A - ; 樠 祩 RAM-Disks - XOR A - LD HL,SYS_PAGE.RAMD_KEYS - LD B,SYS_PAGE.RAMD_KEYS.NUM -.loop2: LD (HL),A - INC L - DJNZ .loop2 - ; [x] 04/11/2023 - LD HL,SYS_PAGE.Sp_RAMD_KEYS - LD B,SYS_PAGE.Sp_RAMD_KEYS.NUM -.loop3: LD (HL),A - INC L - DJNZ .loop3 - ; - LD A,C - OUT (SLOT3),A - POP DE - POP HL - POP BC - RET -;---------------------------------------------------------------------[] -RESERVED_PAGES: ;[x] free zx pages! - ; Block #1 - ᢮ ID 1 - ;DB 1,3,4,6,7,8,9,10,11,12,13,14,15 ; for Spectrum - ; - ;DB #42,#43,#44,#45,#46,#47;,#48,#49,#4A,#4B ; For (BASIC128, BASIC48, TRDOS, SCORP_ROM)*2, vBIOS, vEXTENSION - ;DB #FF ; End of the block - ; - ; Block #2 - ᢮ - DB ZX_PAGE.SLOT0,ZX_PAGE.SLOT2,ZX_PAGE.SLOT1 ; for Spectrum and BIOS starting - DB DCP_PAGE ; Ports map - DB Spec_Page ; Page for Spectrum mode - ; Screen pages - DB #50,#51,#52,#53,#54,#55,#56,#57 - DB #58,#59,#5A,#5B,#5C,#5D,#5E,#5F - ; - ;DB MODE_PAGE ; ????? - DB SP_SND.CBL.BUFFER_PAGE ; Page for CBL audio - DB SYS_PAGE ; Page for system (BIOS) variables - DB #FF ; End of the block - ; -;----------------------------------------------------------------------; -; - - - -; -;----------------------------------------------------------------------; -; N bytes, -; 室: B - ᫮ 室 -; 室: L,A - RAM-Disk/ 訡 -; CF - ਧ 訡 -;EMM_FN2M: -EMM.GetMem: PUSH BC - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - ; - LD HL,SYS_PAGE.RAM_TABLE - XOR A - LD C,#FF ; ⪠ ࠬ - ; RAM_TABLE -.loop2: DEC L - JR Z,.error_no_mem - CP (HL) - JR NZ,.loop2 - LD (HL),C - LD C,L - DJNZ .loop2 - ; L = 㪠⥫ 楯窨. - EX AF,AF' - OUT (SLOT3),A - LD A,L - AND A - POP BC - RET - ; -.error_no_mem: EX AF,AF' - OUT (SLOT3),A - LD A,C - CALL EMM.FreeMem - LD L,BIOS.Error.EMM.NoMemory - LD A,L - SCF - POP BC - RET - - - - /* -EMM.GetMem: PUSH BC - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD C,B ; ࠭ ᫮ 㦭 - LD HL,SYS_PAGE.RAM_TABLE - ; ஢ન 㦭 . - XOR A -.loop: DEC L - JR Z,.noRAM - ; LD A,(HL) - ; AND A - CP (HL) - JR NZ,.loop - DJNZ .loop - ; ! - LD B,C ; ⠭ 㦭 ꥬ ᪠ - LD C,#FF ; RAM-Disk - LD L,A ;low SYS_PAGE.RAM_TABLE - ; RAM_TABLE - ; A = 0 -.loop2: DEC L - ; LD A,(HL) - ; AND A - CP (HL) - JR NZ,.loop2 - LD (HL),C - LD C,L - DJNZ .loop2 - ; L = 㪠⥫ 楯窨. - EX AF,AF' - OUT (SLOT3),A - LD A,L - AND A - POP BC - RET - ; -.noRAM: LD L,BIOS.Error.EMM.NoMemory - EX AF,AF' - OUT (SLOT3),A - LD A,L - SCF - POP BC - RET - */ -;----------------------------------------------------------------------; -; - - - -; -;----------------------------------------------------------------------; -; N bytes, RAM-Disk A -; 室: B - ᫮ 室 , A - RAM-Disk -; 室: L,A - RAM-Disk/ 訡 -; CF - ਧ 訡 -;EMM.GetMem: -EMM.GetMemRMD: PUSH AF - CALL EMM.GetMem - JR C,.error1 - ; - LD B,A - POP AF - CALL BLK_TO_RAMD - RET NC - ; -.error2: LD L,BIOS.Error.BadNumber ; RAM-Disk - LD A,L - RET - ; -.error1: POP HL ; ⨬ ⥪ - LD L,A - RET -;----------------------------------------------------------------------; -; - - - -;----------------------------------------------------------------------; -; ᢮ K -; 室: A - RAM-Disk -EMM.FreeMemRMD: CALL GET_RAMD_ST - RET C - SCF - RET Z - LD C,A - IN A,(SLOT3) - LD B,A - LD A,SYS_PAGE - OUT (SLOT3),A - LD H,high SYS_PAGE.RAMD_KEYS - LD (HL),0 - LD A,B - OUT (SLOT3),A - LD A,C - ;JR EMM.FreeMem -;------[ -; ᢮ -; 室: A - -; DE!!! -;EMM_FN3M: -EMM.FreeMem: ; [x] ⥯ ᢮ ࠭ #FF - SCF - INC A - RET Z - DEC A - ; - RET Z - ; - LD C,A - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - - LD H,high SYS_PAGE.RAM_TABLE - LD A,C -.loop: LD L,A - LD A,(HL) ; ᫥騩 - AND A - JR Z,.error - LD (HL),0 ; ᢮ - CP #FF ; ᫨ - JR NZ,.loop ; த - - ; [x] 23/08/2024 ⠭ 楯窨 ᫨ ᢮ 砫 - LD A,C - LD L,0 - LD BC,256 - CPIR - JR NZ,.exit - DEC HL - LD (HL),#FF - ; -.exit: EX AF,AF' - OUT (SLOT3),A - XOR A ; no error code - RET - -.error: EX AF,AF' - OUT (SLOT3),A - LD A,BIOS.Error.BadNumber - SCF - RET -;----------------------------------------------------------------------; -; - - - -; WARNING!!! ண DE -;----------------------------------------------------------------------; -; ࠭ N K -; 室: A - RAM-Disk, B - ࠭ -; 室: A - ࠭ -EMM.GetMemPageRMD: - CALL GET_RAMD_ST - RET C - SCF - RET Z - ;JR EMM.GetMemPage -;------[ -; ࠭ N K -; 室: A - , B - ࠭ -; 室: A - ࠭, IF CF - A=0 - , A=FF - END -;EMM_FN4M: -EMM.GetMemPage: - LD L,A - IN A,(SLOT1) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT1),A - - INC B - LD H,high (SYS_PAGE.RAM_TABLE-#4000-#4000) -EMM_F4M_L1: - LD A,(HL) - AND A - JR Z,EMM_F4M_ERR - DEC B - JR Z,EMM_F4M_END - LD L,A - CP #FF - JR NZ,EMM_F4M_L1 -EMM_F4M_ERR: - LD L,A - EX AF,AF' - OUT (SLOT1),A - LD A,L - SCF - RET - -EMM_F4M_END: - EX AF,AF' - OUT (SLOT1),A - LD A,L - AND A - RET -;----------------------------------------------------------------------; -; - - - -; -;----------------------------------------------------------------------; -; ᫥ ࠭ FAT -; 室: A - ࠭ -; 室: A - ᫥ ࠭ -;EMM_FN5: -EMM.GetMemPageNext: - LD L,A - AND A - SCF - RET Z - - IN A,(SLOT1) - LD H,A - LD A,SYS_PAGE - OUT (SLOT1),A - - LD A,H - LD H,high (SYS_PAGE.RAM_TABLE-#4000-#4000) - LD L,(HL) - OUT (SLOT1),A - LD A,L - AND A - SCF - RET Z - - AND A - RET -;----------------------------------------------------------------------; -; - - - -; -;----------------------------------------------------------------------; -; ᯨ᮪ ࠭ HL -; 室: A - , HL - - 256 . -; 室: HL - , B - ࠭ -;EMM_FN5M: -EMM.GetMemBlkPages: - PUSH DE - PUSH HL - EX DE,HL - LD B,0 - LD L,A - -.loop: LD A,L - LD (DE),A - INC DE - AND A - JR Z,.error - CP #FF - JR Z,.end - ; - IN A,(SLOT1) - LD C,A - LD A,SYS_PAGE - OUT (SLOT1),A - LD H,high (SYS_PAGE.RAM_TABLE-#4000-#4000) - LD L,(HL) - LD A,C - OUT (SLOT1),A - ; - INC B - JR NZ,.loop - -.error: SCF -.end: POP HL - POP DE - RET - -; RAMDRV.EXE 뢠 㭪 ᮬ SLOT1, ⮬ ⠪ ⨬஢ -; EMM.GetMemBlkPages: -; PUSH DE -; PUSH HL -; EX DE,HL -; LD B,0 -; LD L,A - -; IN A,(SLOT1) -; LD C,A -; LD A,SYS_PAGE -; OUT (SLOT1),A - -; .loop: LD A,L -; LD (DE),A -; INC DE -; AND A -; JR Z,.error -; CP #FF -; JR Z,.end -; ; -; LD H,high +(SYS_PAGE.RAM_TABLE - #4000 - #4000) -; LD L,(HL) -; INC B -; JR NZ,.loop - -; .error: SCF -; .end: LD A,C -; OUT (SLOT1),A -; POP HL -; POP DE -; RET -;----------------------------------------------------------------------; -; - - - -; -;----------------------------------------------------------------------; -; ࠧ -; A - , B - ࢮ ᫥ ࠧ -; 室: A - 1, B - 2 -EMM.DivMemBlocks: - INC B - DEC B - SCF - RET Z - DEC B - LD E,A - CALL EMM.GetMemPage ; ࠭ - RET C - LD D,A - - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - - LD H,high +(SYS_PAGE.RAM_TABLE); - #4000 - #4000) - LD L,D - LD A,(HL) - LD (HL),#FF - LD B,A - - EX AF,AF' - OUT (SLOT3),A - - LD A,E - AND A - RET -;----------------------------------------------------------------------; -; - - - -; -;----------------------------------------------------------------------; -; ᫨ -; - 1, B - 2 -; 室: - -EMM.MergeMemBlocks: - LD E,A - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD H,high SYS_PAGE.RAM_TABLE - LD L,E - LD C,B - LD B,0 -.ADD_L: LD A,(HL) - AND A - JR Z,.ADD_ERR - CP #FF - JR Z,.ADD_NEXT - LD L,A - DJNZ .ADD_L - -.ADD_ERR: - EX AF,AF' - OUT (SLOT3),A - SCF - RET - -.ADD_NEXT: LD A,C - AND A - JR Z,.ADD_ERR - LD (HL),A - EX AF,AF' - OUT (SLOT3),A - AND A - LD A,E - RET -;----------------------------------------------------------------------; -; - - - -; -;----------------------------------------------------------------------; -; 室: DE - ram_disk trk_sec, A - RAM-Disk -; 室: HL - , A - page -RAMD_CALC_PAGE: - CP 16 - CCF - RET C ; RAM-Disk - - PUSH AF - LD H,D - LD L,E - ADD HL,HL - ADD HL,HL - LD B,H - LD A,E - OR #C0 - LD C,A ; C - , B - ࠭ - POP AF - - CALL EMM.GetMemPageRMD ; - LD L,0 - LD H,C - RET -;----------------------------------------------------------------------; -; - - - -; -;----------------------------------------------------------------------; -; 室: -; A - RAM Disk ID -; 室: -; A - Number (0..15) -GET_RAMD_NUM: - EX AF,AF' - IN A,(SLOT1) - EX AF,AF' - LD BC,SYS_PAGE*256+SLOT1 - OUT (C),B - - LD HL,SYS_PAGE.RAMD_KEYS-#4000-#4000 - LD BC,SYS_PAGE.RAMD_KEYS.NUM - CPIR - - EX AF,AF' - OUT (SLOT1),A - EX AF,AF' - - SCF - RET PE - - DEC L - LD A,L - SUB low SYS_PAGE.RAMD_KEYS - RET -;----------------------------------------------------------------------; -; - - - -; -;----------------------------------------------------------------------; -; [x] 04/11/2023 -; 室: -; B = 0: swap to Sp -; B = #FF: swap to ZX -; B = #FE: no swap, only get info -; 室: -; A - current RAM Drives set -SWAP_RAM_DRIVES: - IN A,(SLOT3) - EX AF,AF' - PUSH AF ; 直 砩 - LD A,SYS_PAGE - OUT (SLOT3),A - ; - LD A,(SYS_PAGE.CURRENT_RAM_DRV) - LD C,A - CP B - JR Z,.exit ; 㦥 ⠭ 訢 - ; - LD A,#FE - CP B - JR Z,.exit ; 祣 , 뤠 ⥪騩 - ; -.swap: LD HL,SYS_PAGE.RAMD_KEYS - LD DE,SYS_PAGE.Sp_RAMD_KEYS - LD B,SYS_PAGE.RAMD_KEYS.NUM -.loop: LD A,(DE) - LD C,A - LD A,(HL) - LD (DE),A - LD A,C - LD (HL),A - INC HL - INC DE - DJNZ .loop - ; - LD A,(SYS_PAGE.CURRENT_RAM_DRV) - XOR #FF - LD (SYS_PAGE.CURRENT_RAM_DRV),A - LD C,A - ; -.exit: EX AF,AF' - OUT (SLOT3),A - POP AF - EX AF,AF' - LD A,C - RET -;----------------------------------------------------------------------; -; - - -; -;----------------------------------------------------------------------; -; 室 = 0 ⠭ 䫠 Z -; 㡨 DE BC -GET_RAMD_ST: - CP SYS_PAGE.RAMD_KEYS.NUM - CCF - RET C - - PUSH BC - - LD HL,SYS_PAGE.RAMD_KEYS-#4000-#4000 - ADD A,L - LD L,A - - IN A,(SLOT1) - LD B,A - LD A,SYS_PAGE - OUT (SLOT1),A - LD C,(HL) - LD A,B - OUT (SLOT1),A - LD A,C - POP BC - AND A - RET -;----------------------------------------------------------------------; -; - - - -; -;----------------------------------------------------------------------; -; RAM-Disk A, BLK - B -BLK_TO_RAMD: - CP SYS_PAGE.RAMD_KEYS.NUM - CCF - RET C - - PUSH HL - LD L,A - - IN A,(SLOT3) - LD C,A - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,L - LD HL,SYS_PAGE.RAMD_KEYS; - #4000 - #4000 - ADD A,L - LD L,A - LD A,(HL) ; - AND A - JR NZ,BLK_BUSY ; RAM-Disk - 訡 - LD (HL),B - - LD A,C - OUT (SLOT3),A - - LD A,B - AND A - POP HL - RET - ; -BLK_BUSY: - LD A,C - OUT (SLOT3),A - SCF - POP HL - LD A,L - RET -;----------------------------------------------------------------------; -; - - - -; -;----------------------------------------------------------------------; -; RAM-Disk A -RAMD_CLEAR: - CP SYS_PAGE.RAMD_KEYS.NUM - CCF - RET C - - PUSH HL - LD L,A - - IN A,(SLOT3) - LD C,A - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,L - LD HL,SYS_PAGE.RAMD_KEYS; - #4000 - #4000 ; RAM-Disk ᢮ - ADD A,L - LD L,A - LD B,A ; 㤠塞 ࠬ - LD A,(HL) - AND A - JR Z,BLK_BUSY ; 訡 - LD (HL),0 - LD A,C - OUT (SLOT3),A - - AND A - POP HL - RET -;----------------------------------------------------------------------; -; - - - -; -;----------------------------------------------------------------------; !FIXIT SAFE_RGADR -;RAMD_R_W: -; ͻ -; RD/WR SECTOR \ -; HL - BUFER \ -; DE - ABS sector 256b \ -; B - ᫮ 256b \ -; A - block RAM \ -; A' - ⥭//⥭ ROM Disk \ -; 0 - read, 255 - write, 70 - read ROM DISK\ -; ** NOT USED TR-DOS VARS ** \ -; ͼ\ -; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ -BLK_RD_WR: AND A - SCF - RET Z - ; - AND A - INC B - DEC B - RET Z - ; ࠭塞 ﭨ 뢠 - LD C,A - LD A,R - PUSH AF - ; ࠭塞 PORT_Y - IN A,(PORT_Y) - PUSH AF - LD A,#C0 - OUT (PORT_Y),A - ; - LD A,C - DI - CALL .start - EX AF,AF' - ; ⠭ PORT_Y - POP AF - OUT (PORT_Y),A - ; ⠭ ﭨ 뢠 - POP AF - JP PO,.noInterrupts - EI -.noInterrupts: EX AF,AF' - RET -; ; -.start: EX AF,AF' - AND A ; 0 - read - JR Z,.reset_Z - CP #FF ; write - JR Z,.keep_Z - ; - CP 5 ; old read - JR Z,.reset_Z - CP 6 ; old write - JR Z,.keep_Z - ; - CP #46 - JP Z,ROM_DISK - ; - EX AF,AF' - SCF - RET - ; -.reset_Z: INC A ; set Z for WRITE -.keep_Z: EX AF,AF' - ; - PUSH HL - PUSH BC - LD C,SLOT1 - IN B,(C) - LD H,A - LD A,SYS_PAGE - OUT (SLOT1),A - LD A,H - ; - LD H,high +(SYS_PAGE.RAM_TABLE-#4000-#4000) - LD L,A - INC D -.RAMD_LOOP_D: DEC D - JR Z,.NOT_FOUR_BLK - LD L,(HL) - LD L,(HL) - LD L,(HL) - LD L,(HL) - JP .RAMD_LOOP_D - ; -.NOT_FOUR_BLK: LD A,E -.loop: SUB #40 - JR C,.NOT_ONE_BLK - LD L,(HL) - JP .loop - ; -.NOT_ONE_BLK: AND #3F - LD D,A ; DE - ADRESS in RAM-Disk - LD E,0 - LD A,L ; L - ⥪騩 RAM-Disk - OUT (C),B ; ⠭ ࠭ - POP BC ; - POP HL ; - BIT 7,H - JR NZ,.BLK_PAGE1 - ; - LD C,SLOT3 - IN C,(C) - OUT (SLOT3),A - SET 7,D - SET 6,D - JP .BLK_CONT1 - ; -.BLK_PAGE1: LD C,SLOT1 - IN C,(C) - OUT (SLOT1),A - RES 7,D - SET 6,D - ; DE - RamDisk, HL - data -.BLK_CONT1: EX AF,AF' - JR Z,.NO_EX_RW1 ; WRITE - EX DE,HL ; for READ -.NO_EX_RW1: EX AF,AF' - LD A,16 - ; -.BLK_LL1: DUP 16 - LDI - EDUP - DEC A - JR NZ,.BLK_LL1 - ; - EX AF,AF' - JR Z,.NO_EX_RW2 ; WRITE - EX DE,HL ; for READ -.NO_EX_RW2: EX AF,AF' ; DEC C ப⨫ 256 ࠧ - ; A = 0 - CP B - JP Z,.BLK_EXIT_1 - ; - BIT 6,D - JP NZ,.BLK_CONT1 - ; - BIT 7,D - JR Z,.BLK_PAGE3_X - ; - IN A,(SLOT1) - LD E,A - LD D,high +(SYS_PAGE.RAM_TABLE-#4000-#4000) - LD A,SYS_PAGE - OUT (SLOT1),A - LD A,(DE) - OUT (SLOT1),A - LD DE,#4000 - JP .BLK_CONT1 - ; -.BLK_PAGE3_X: IN A,(SLOT3) - LD E,A - LD D,high SYS_PAGE.RAM_TABLE - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,(DE) - OUT (SLOT3),A - LD DE,#C000 - ; - BIT 7,H - JP Z,.BLK_CONT1 - ; - LD E,A - LD A,C - OUT (SLOT3),A - IN A,(SLOT1) - LD C,A - LD A,E - OUT (SLOT1),A - LD DE,#4000 - JP .BLK_CONT1 - ; -.BLK_EXIT_1: LD A,D - DEC A - RLCA - LD A,C - JR C,.BLK_EXIT_2 - OUT (SLOT1),A - RET - ; -.BLK_EXIT_2: OUT (SLOT3),A - AND A - RET -;----------------------------------------------------------------------; -; - - - -; -;----------------------------------------------------------------------; - ;**************************************** - ;!!!!! READ_ROM_PAGE_X ⥭ ᫥ - ; 256 ⮢ 㦥 ࠭ 祬- - ; READ_ROM_PAGE_X: - ; LD DE,0 - ; LD BC,#100 ; ᥪ - ; PUSH DE - ; PUSH BC - ; LD HL,#3F00 - ; LD DE,#FF00 - ; LD A,#1F ; last page ROM - ; JR ROM_DISK.loopRead - ;**************************************** - -; ⥭ ROM-Disk -; HL - , 㤠 -; DE - ᥪ ( 256b ᥪ) -; B - ᫮ ᥪ஢ -; A' - ࠧ ᥪ (1 - 256b, 2 - 512 b) -ROM_DISK: EX AF,AF' - LD C,0 ; 稪 - DEC A - JR Z,.loop - ; - DEC A - SCF - RET NZ - ; - EX DE,HL - ADD HL,HL - EX DE,HL - LD A,B - ADD A,A - LD B,A - RET C - ; - DI - CALL .loop - RET C - ; - AND A - RR D - RR E - XOR A - RET - ; -.loop: PUSH DE ; ᥪ - PUSH BC - ; - LD A,E - AND #3F ; ADRESS in ROM-Page - PUSH AF ; ࠭ - ; - EX DE,HL ; DE - - ADD HL,HL - ADD HL,HL ; H - - ; [ ] ਢ離 ஬-᪠ align 256 - ;LD A,(ROM_DISK.Pages.Number) - ;INC H - ;CP H - ; - LD C,H - LD B,0 - LD HL,ROM_DISK.Pages - ADD HL,BC - ; - LD A,(ROM_DISK.Pages.Number) ; rdlow-ok - INC C - CP C - ; - ;LD L,H - ;LD H,high ROM_DISK.Pages.Number ; ROM-Disk pages! - ; - LD A,(HL) ; PAGE-ROM - POP HL ; ⠭ ROM-Page - LD L,0 ; ᫨ ⥫ - 室 訡 - JR C,.errorExit ; ROM-Disk-end - ; DE - - ; HL - ROM - ; B - ᫮ ᥪ஢ - ; A - ROM-Page -.loopRead: PUSH HL ; 㤠 - PUSH DE ; 㤠 - - LD HL,-.stackDepth-.readProcedure.size ; memory stack use! - ADD HL,SP ; stack - - PUSH HL ; ணࠬ .readProcedure - - LD DE,.readProcedure ; ७ ணࠬ ⥪ - EX DE,HL - LD BC,.readProcedure.size - LDIR ; ணࠬ ⥪ - LD BC,#100 ; ᥪ - RET ; ᯮ ணࠬ .readProcedure, ⥪ ROM - ; DE - next address - ; HL - ROM address -.readNext: POP BC ; ᫮ ᥪ஢ - - INC C ; 稪 ⠭ ᥪ஢ - DEC B ; ᥪ 稫? - - JR Z,.normExit - BIT 6,H ; ⥭ 祭 - - PUSH BC ; ࠭ 稪 - JR Z,.loopRead ; - POP BC - - POP HL ; ᥪ - - LD A,B - LD B,0 - ADD HL,BC - LD B,A ; ᫨ ᫥.ᥪ - - EX DE,HL ; ⥯ HL - , DE ᥪ, B - ᪮쪮 - - JP .loop ; ᭮! -; ⥭ 祭 -.normExit: POP HL ; ᥪ, 㤠 ⥭ - ADD HL,BC ; : HL - ᫥. - EX DE,HL ; DE - ᫥.ᥪ - AND A - RET -; 訡 -.errorExit: ; !TODO ᤥ, ⮡ 室 뢠 ⢮ ⠭ ᥪ஢ - POP BC - POP DE - SCF - RET -; 楤, ७ᨬ ⥪ ⥭ ROM-Disk -; ஦ PUSH, ᫨ , 㢥 .stackDepth -.readProcedure: - POP DE ; 㤠 - POP HL ; 㤠 - OUT (ROM.SLOT0),A ; ROM_PAGE - LDIR ; ⠥ ROM-Disk - LD B,A - XOR A - OUT (ROM.SLOT0),A - OUT (SYS_PORT.ROM),A - LD A,B - JP .readNext -.stackDepth EQU 8 ; ﭨ 楤 設 ⥪. -.readProcedure.size EQU $-.readProcedure -;----------------------------------------------------------------------; +;===================[ 㭪樨 । ]===================; +; 室: BC - FREE MEM 16k, HL - FULL MEM +;!TEST SLOT2 SLOT1 +; +;----------------------------------------------------------------------; +; । ꥬ . +; 室: BC - FREE MEM 16k, HL - FULL MEM +EMM.GetMemSize: IN A,(SLOT1) + LD B,A + LD A,SYS_PAGE + OUT (SLOT1),A + XOR A + LD C,A + LD HL,SYS_PAGE.RAM_TABLE-#4000-#4000 + ; +.loop: DEC L + JR Z,.exit + CP (HL) + JR NZ,.loop + INC C + JP .loop + ; +.exit: LD HL,#100 ;!HARDCODE max mem pages + LD A,B + ; L=0 + LD B,L + OUT (SLOT1),A + RET + + /* +.loop: LD A,(HL) + INC L + JR Z,.exit + AND A + JR NZ,.loop + INC C + JR .loop +.exit: LD HL,#100 ;!HARDCODE max mem pages + LD A,B + LD B,0 + OUT (SLOT1),A + RET + */ +;----------------------------------------------------------------------; +; + +;!!!!! ᫨ ᯮ SLOT3 ᢮ ࠭栬, 짮 +; ⥪, ⠬ SP ० ᯥ㬠 + +; +;----------------------------------------------------------------------; +; 樠 । . +EMM.InitMem: PUSH BC + PUSH HL + PUSH DE + + IN A,(SLOT3) + LD C,A + LD A,SYS_PAGE + OUT (SLOT3),A + LD HL,SYS_PAGE.RAM_TABLE ; RAM FAT . + ; 塞 ⠡ + XOR A +.loopFree: LD (HL),A + INC L + JR NZ,.loopFree + ; १ࢨ㥬 ᯥ.࠭ ࠭ ZX + ;LD B,RESERVED_PAGES.Blocks + LD DE,RESERVED_PAGES ; ⠡ ⥬ ࠭ +.loop: LD A,(DE) + CP #FF + JR Z,.exitLoop + ; +.loopBlk: INC DE + LD L,A + LD A,(DE) + LD (HL),A + CP #FF + JR NZ,.loopBlk + ; +.exitLoop: ;INC DE + ;DJNZ .loop + LD L,A + LD (HL),A + ; 樠 祩 RAM-Disks + XOR A + LD HL,SYS_PAGE.RAMD_KEYS + LD B,SYS_PAGE.RAMD_KEYS.NUM +.loop2: LD (HL),A + INC L + DJNZ .loop2 + ; [x] 04/11/2023 + LD HL,SYS_PAGE.Sp_RAMD_KEYS + LD B,SYS_PAGE.Sp_RAMD_KEYS.NUM +.loop3: LD (HL),A + INC L + DJNZ .loop3 + ; + LD A,C + OUT (SLOT3),A + POP DE + POP HL + POP BC + RET +;---------------------------------------------------------------------[] +RESERVED_PAGES: ;[x] free zx pages! + ; Block #1 - ᢮ ID 1 + ;DB 1,3,4,6,7,8,9,10,11,12,13,14,15 ; for Spectrum + ; + ;DB #42,#43,#44,#45,#46,#47;,#48,#49,#4A,#4B ; For (BASIC128, BASIC48, TRDOS, SCORP_ROM)*2, vBIOS, vEXTENSION + ;DB #FF ; End of the block + ; + ; Block #2 - ᢮ + DB ZX_PAGE.SLOT0,ZX_PAGE.SLOT2,ZX_PAGE.SLOT1 ; for Spectrum and BIOS starting + DB DCP_PAGE ; Ports map + DB Spec_Page ; Page for Spectrum mode + ; Screen pages + DB #50,#51,#52,#53,#54,#55,#56,#57 + DB #58,#59,#5A,#5B,#5C,#5D,#5E,#5F + ; + ;DB MODE_PAGE ; ????? + DB SP_SND.CBL.BUFFER_PAGE ; Page for CBL audio + DB SYS_PAGE ; Page for system (BIOS) variables + DB #FF ; End of the block + ; +;----------------------------------------------------------------------; +; + + + +; +;----------------------------------------------------------------------; +; N bytes, +; 室: B - ᫮ 室 +; 室: L,A - RAM-Disk/ 訡 +; CF - ਧ 訡 +;EMM_FN2M: +EMM.GetMem: PUSH BC + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + ; + LD HL,SYS_PAGE.RAM_TABLE + XOR A + LD C,#FF ; ⪠ ࠬ + ; RAM_TABLE +.loop2: DEC L + JR Z,.error_no_mem + CP (HL) + JR NZ,.loop2 + LD (HL),C + LD C,L + DJNZ .loop2 + ; L = 㪠⥫ 楯窨. + EX AF,AF' + OUT (SLOT3),A + LD A,L + AND A + POP BC + RET + ; +.error_no_mem: EX AF,AF' + OUT (SLOT3),A + LD A,C + CALL EMM.FreeMem + LD L,BIOS.Error.EMM.NoMemory + LD A,L + SCF + POP BC + RET + + + + /* +EMM.GetMem: PUSH BC + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD C,B ; ࠭ ᫮ 㦭 + LD HL,SYS_PAGE.RAM_TABLE + ; ஢ન 㦭 . + XOR A +.loop: DEC L + JR Z,.noRAM + ; LD A,(HL) + ; AND A + CP (HL) + JR NZ,.loop + DJNZ .loop + ; ! + LD B,C ; ⠭ 㦭 ꥬ ᪠ + LD C,#FF ; RAM-Disk + LD L,A ;low SYS_PAGE.RAM_TABLE + ; RAM_TABLE + ; A = 0 +.loop2: DEC L + ; LD A,(HL) + ; AND A + CP (HL) + JR NZ,.loop2 + LD (HL),C + LD C,L + DJNZ .loop2 + ; L = 㪠⥫ 楯窨. + EX AF,AF' + OUT (SLOT3),A + LD A,L + AND A + POP BC + RET + ; +.noRAM: LD L,BIOS.Error.EMM.NoMemory + EX AF,AF' + OUT (SLOT3),A + LD A,L + SCF + POP BC + RET + */ +;----------------------------------------------------------------------; +; + + + +; +;----------------------------------------------------------------------; +; N bytes, RAM-Disk A +; 室: B - ᫮ 室 , A - RAM-Disk +; 室: L,A - RAM-Disk/ 訡 +; CF - ਧ 訡 +;EMM.GetMem: +EMM.GetMemRMD: PUSH AF + CALL EMM.GetMem + JR C,.error1 + ; + LD B,A + POP AF + CALL BLK_TO_RAMD + RET NC + ; +.error2: LD L,BIOS.Error.BadNumber ; RAM-Disk + LD A,L + RET + ; +.error1: POP HL ; ⨬ ⥪ + LD L,A + RET +;----------------------------------------------------------------------; +; + + + +;----------------------------------------------------------------------; +; ᢮ K +; 室: A - RAM-Disk +EMM.FreeMemRMD: CALL GET_RAMD_ST + RET C + SCF + RET Z + LD C,A + IN A,(SLOT3) + LD B,A + LD A,SYS_PAGE + OUT (SLOT3),A + LD H,high SYS_PAGE.RAMD_KEYS + LD (HL),0 + LD A,B + OUT (SLOT3),A + LD A,C + ;JR EMM.FreeMem +;------[ +; ᢮ +; 室: A - +; DE!!! +;EMM_FN3M: +EMM.FreeMem: ; [x] ⥯ ᢮ ࠭ #FF + SCF + INC A + RET Z + DEC A + ; + RET Z + ; + LD C,A + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + + LD H,high SYS_PAGE.RAM_TABLE + LD A,C +.loop: LD L,A + LD A,(HL) ; ᫥騩 + AND A + JR Z,.error + LD (HL),0 ; ᢮ + CP #FF ; ᫨ + JR NZ,.loop ; த + + ; [x] 23/08/2024 ⠭ 楯窨 ᫨ ᢮ 砫 + LD A,C + LD L,0 + LD BC,256 + CPIR + JR NZ,.exit + DEC HL + LD (HL),#FF + ; +.exit: EX AF,AF' + OUT (SLOT3),A + XOR A ; no error code + RET + +.error: EX AF,AF' + OUT (SLOT3),A + LD A,BIOS.Error.BadNumber + SCF + RET +;----------------------------------------------------------------------; +; + + + +; WARNING!!! ண DE +;----------------------------------------------------------------------; +; ࠭ N K +; 室: A - RAM-Disk, B - ࠭ +; 室: A - ࠭ +EMM.GetMemPageRMD: + CALL GET_RAMD_ST + RET C + SCF + RET Z + ;JR EMM.GetMemPage +;------[ +; ࠭ N K +; 室: A - , B - ࠭ +; 室: A - ࠭, IF CF - A=0 - , A=FF - END +;EMM_FN4M: +EMM.GetMemPage: + LD L,A + IN A,(SLOT1) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT1),A + + INC B + LD H,high (SYS_PAGE.RAM_TABLE-#4000-#4000) +EMM_F4M_L1: + LD A,(HL) + AND A + JR Z,EMM_F4M_ERR + DEC B + JR Z,EMM_F4M_END + LD L,A + CP #FF + JR NZ,EMM_F4M_L1 +EMM_F4M_ERR: + LD L,A + EX AF,AF' + OUT (SLOT1),A + LD A,L + SCF + RET + +EMM_F4M_END: + EX AF,AF' + OUT (SLOT1),A + LD A,L + AND A + RET +;----------------------------------------------------------------------; +; + + + +; +;----------------------------------------------------------------------; +; ᫥ ࠭ FAT +; 室: A - ࠭ +; 室: A - ᫥ ࠭ +;EMM_FN5: +EMM.GetMemPageNext: + LD L,A + AND A + SCF + RET Z + + IN A,(SLOT1) + LD H,A + LD A,SYS_PAGE + OUT (SLOT1),A + + LD A,H + LD H,high (SYS_PAGE.RAM_TABLE-#4000-#4000) + LD L,(HL) + OUT (SLOT1),A + LD A,L + AND A + SCF + RET Z + + AND A + RET +;----------------------------------------------------------------------; +; + + + +; +;----------------------------------------------------------------------; +; ᯨ᮪ ࠭ HL +; 室: A - , HL - - 256 . +; 室: HL - , B - ࠭ +;EMM_FN5M: +EMM.GetMemBlkPages: + PUSH DE + PUSH HL + EX DE,HL + LD B,0 + LD L,A + +.loop: LD A,L + LD (DE),A + INC DE + AND A + JR Z,.error + CP #FF + JR Z,.end + ; + IN A,(SLOT1) + LD C,A + LD A,SYS_PAGE + OUT (SLOT1),A + LD H,high (SYS_PAGE.RAM_TABLE-#4000-#4000) + LD L,(HL) + LD A,C + OUT (SLOT1),A + ; + INC B + JR NZ,.loop + +.error: SCF +.end: POP HL + POP DE + RET + +; RAMDRV.EXE 뢠 㭪 ᮬ SLOT1, ⮬ ⠪ ⨬஢ +; EMM.GetMemBlkPages: +; PUSH DE +; PUSH HL +; EX DE,HL +; LD B,0 +; LD L,A + +; IN A,(SLOT1) +; LD C,A +; LD A,SYS_PAGE +; OUT (SLOT1),A + +; .loop: LD A,L +; LD (DE),A +; INC DE +; AND A +; JR Z,.error +; CP #FF +; JR Z,.end +; ; +; LD H,high +(SYS_PAGE.RAM_TABLE - #4000 - #4000) +; LD L,(HL) +; INC B +; JR NZ,.loop + +; .error: SCF +; .end: LD A,C +; OUT (SLOT1),A +; POP HL +; POP DE +; RET +;----------------------------------------------------------------------; +; + + + +; +;----------------------------------------------------------------------; +; ࠧ +; A - , B - ࢮ ᫥ ࠧ +; 室: A - 1, B - 2 +EMM.DivMemBlocks: + INC B + DEC B + SCF + RET Z + DEC B + LD E,A + CALL EMM.GetMemPage ; ࠭ + RET C + LD D,A + + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + + LD H,high +(SYS_PAGE.RAM_TABLE); - #4000 - #4000) + LD L,D + LD A,(HL) + LD (HL),#FF + LD B,A + + EX AF,AF' + OUT (SLOT3),A + + LD A,E + AND A + RET +;----------------------------------------------------------------------; +; + + + +; +;----------------------------------------------------------------------; +; ᫨ +; - 1, B - 2 +; 室: - +EMM.MergeMemBlocks: + LD E,A + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD H,high SYS_PAGE.RAM_TABLE + LD L,E + LD C,B + LD B,0 +.ADD_L: LD A,(HL) + AND A + JR Z,.ADD_ERR + CP #FF + JR Z,.ADD_NEXT + LD L,A + DJNZ .ADD_L + +.ADD_ERR: + EX AF,AF' + OUT (SLOT3),A + SCF + RET + +.ADD_NEXT: LD A,C + AND A + JR Z,.ADD_ERR + LD (HL),A + EX AF,AF' + OUT (SLOT3),A + AND A + LD A,E + RET +;----------------------------------------------------------------------; +; + + + +; +;----------------------------------------------------------------------; +; 室: DE - ram_disk trk_sec, A - RAM-Disk +; 室: HL - , A - page +RAMD_CALC_PAGE: + CP 16 + CCF + RET C ; RAM-Disk + + PUSH AF + LD H,D + LD L,E + ADD HL,HL + ADD HL,HL + LD B,H + LD A,E + OR #C0 + LD C,A ; C - , B - ࠭ + POP AF + + CALL EMM.GetMemPageRMD ; + LD L,0 + LD H,C + RET +;----------------------------------------------------------------------; +; + + + +; +;----------------------------------------------------------------------; +; 室: +; A - RAM Disk ID +; 室: +; A - Number (0..15) +GET_RAMD_NUM: + EX AF,AF' + IN A,(SLOT1) + EX AF,AF' + LD BC,SYS_PAGE*256+SLOT1 + OUT (C),B + + LD HL,SYS_PAGE.RAMD_KEYS-#4000-#4000 + LD BC,SYS_PAGE.RAMD_KEYS.NUM + CPIR + + EX AF,AF' + OUT (SLOT1),A + EX AF,AF' + + SCF + RET PE + + DEC L + LD A,L + SUB low SYS_PAGE.RAMD_KEYS + RET +;----------------------------------------------------------------------; +; + + + +; +;----------------------------------------------------------------------; +; [x] 04/11/2023 +; 室: +; B = 0: swap to Sp +; B = #FF: swap to ZX +; B = #FE: no swap, only get info +; 室: +; A - current RAM Drives set +SWAP_RAM_DRIVES: + IN A,(SLOT3) + EX AF,AF' + PUSH AF ; 直 砩 + LD A,SYS_PAGE + OUT (SLOT3),A + ; + LD A,(SYS_PAGE.CURRENT_RAM_DRV) + LD C,A + CP B + JR Z,.exit ; 㦥 ⠭ 訢 + ; + LD A,#FE + CP B + JR Z,.exit ; 祣 , 뤠 ⥪騩 + ; +.swap: LD HL,SYS_PAGE.RAMD_KEYS + LD DE,SYS_PAGE.Sp_RAMD_KEYS + LD B,SYS_PAGE.RAMD_KEYS.NUM +.loop: LD A,(DE) + LD C,A + LD A,(HL) + LD (DE),A + LD A,C + LD (HL),A + INC HL + INC DE + DJNZ .loop + ; + LD A,(SYS_PAGE.CURRENT_RAM_DRV) + XOR #FF + LD (SYS_PAGE.CURRENT_RAM_DRV),A + LD C,A + ; +.exit: EX AF,AF' + OUT (SLOT3),A + POP AF + EX AF,AF' + LD A,C + RET +;----------------------------------------------------------------------; +; + + +; +;----------------------------------------------------------------------; +; 室 = 0 ⠭ 䫠 Z +; 㡨 DE BC +GET_RAMD_ST: + CP SYS_PAGE.RAMD_KEYS.NUM + CCF + RET C + + PUSH BC + + LD HL,SYS_PAGE.RAMD_KEYS-#4000-#4000 + ADD A,L + LD L,A + + IN A,(SLOT1) + LD B,A + LD A,SYS_PAGE + OUT (SLOT1),A + LD C,(HL) + LD A,B + OUT (SLOT1),A + LD A,C + POP BC + AND A + RET +;----------------------------------------------------------------------; +; + + + +; +;----------------------------------------------------------------------; +; RAM-Disk A, BLK - B +BLK_TO_RAMD: + CP SYS_PAGE.RAMD_KEYS.NUM + CCF + RET C + + PUSH HL + LD L,A + + IN A,(SLOT3) + LD C,A + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,L + LD HL,SYS_PAGE.RAMD_KEYS; - #4000 - #4000 + ADD A,L + LD L,A + LD A,(HL) ; + AND A + JR NZ,BLK_BUSY ; RAM-Disk - 訡 + LD (HL),B + + LD A,C + OUT (SLOT3),A + + LD A,B + AND A + POP HL + RET + ; +BLK_BUSY: + LD A,C + OUT (SLOT3),A + SCF + POP HL + LD A,L + RET +;----------------------------------------------------------------------; +; + + + +; +;----------------------------------------------------------------------; +; RAM-Disk A +RAMD_CLEAR: + CP SYS_PAGE.RAMD_KEYS.NUM + CCF + RET C + + PUSH HL + LD L,A + + IN A,(SLOT3) + LD C,A + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,L + LD HL,SYS_PAGE.RAMD_KEYS; - #4000 - #4000 ; RAM-Disk ᢮ + ADD A,L + LD L,A + LD B,A ; 㤠塞 ࠬ + LD A,(HL) + AND A + JR Z,BLK_BUSY ; 訡 + LD (HL),0 + LD A,C + OUT (SLOT3),A + + AND A + POP HL + RET +;----------------------------------------------------------------------; +; + + + +; +;----------------------------------------------------------------------; !FIXIT SAFE_RGADR +;RAMD_R_W: +; ͻ +; RD/WR SECTOR \ +; HL - BUFER \ +; DE - ABS sector 256b \ +; B - ᫮ 256b \ +; A - block RAM \ +; A' - ⥭//⥭ ROM Disk \ +; 0 - read, 255 - write, 70 - read ROM DISK\ +; ** NOT USED TR-DOS VARS ** \ +; ͼ\ +; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ +BLK_RD_WR: AND A + SCF + RET Z + ; + AND A + INC B + DEC B + RET Z + ; ࠭塞 ﭨ 뢠 + LD C,A + LD A,R + PUSH AF + ; ࠭塞 PORT_Y + IN A,(PORT_Y) + PUSH AF + LD A,#C0 + OUT (PORT_Y),A + ; + LD A,C + DI + CALL .start + EX AF,AF' + ; ⠭ PORT_Y + POP AF + OUT (PORT_Y),A + ; ⠭ ﭨ 뢠 + POP AF + JP PO,.noInterrupts + EI +.noInterrupts: EX AF,AF' + RET +; ; +.start: EX AF,AF' + AND A ; 0 - read + JR Z,.reset_Z + CP #FF ; write + JR Z,.keep_Z + ; + CP 5 ; old read + JR Z,.reset_Z + CP 6 ; old write + JR Z,.keep_Z + ; + CP #46 + JP Z,ROM_DISK + ; + EX AF,AF' + SCF + RET + ; +.reset_Z: INC A ; set Z for WRITE +.keep_Z: EX AF,AF' + ; + PUSH HL + PUSH BC + LD C,SLOT1 + IN B,(C) + LD H,A + LD A,SYS_PAGE + OUT (SLOT1),A + LD A,H + ; + LD H,high +(SYS_PAGE.RAM_TABLE-#4000-#4000) + LD L,A + INC D +.RAMD_LOOP_D: DEC D + JR Z,.NOT_FOUR_BLK + LD L,(HL) + LD L,(HL) + LD L,(HL) + LD L,(HL) + JP .RAMD_LOOP_D + ; +.NOT_FOUR_BLK: LD A,E +.loop: SUB #40 + JR C,.NOT_ONE_BLK + LD L,(HL) + JP .loop + ; +.NOT_ONE_BLK: AND #3F + LD D,A ; DE - ADRESS in RAM-Disk + LD E,0 + LD A,L ; L - ⥪騩 RAM-Disk + OUT (C),B ; ⠭ ࠭ + POP BC ; + POP HL ; + BIT 7,H + JR NZ,.BLK_PAGE1 + ; + LD C,SLOT3 + IN C,(C) + OUT (SLOT3),A + SET 7,D + SET 6,D + JP .BLK_CONT1 + ; +.BLK_PAGE1: LD C,SLOT1 + IN C,(C) + OUT (SLOT1),A + RES 7,D + SET 6,D + ; DE - RamDisk, HL - data +.BLK_CONT1: EX AF,AF' + JR Z,.NO_EX_RW1 ; WRITE + EX DE,HL ; for READ +.NO_EX_RW1: EX AF,AF' + LD A,16 + ; +.BLK_LL1: DUP 16 + LDI + EDUP + DEC A + JR NZ,.BLK_LL1 + ; + EX AF,AF' + JR Z,.NO_EX_RW2 ; WRITE + EX DE,HL ; for READ +.NO_EX_RW2: EX AF,AF' ; DEC C ப⨫ 256 ࠧ + ; A = 0 + CP B + JP Z,.BLK_EXIT_1 + ; + BIT 6,D + JP NZ,.BLK_CONT1 + ; + BIT 7,D + JR Z,.BLK_PAGE3_X + ; + IN A,(SLOT1) + LD E,A + LD D,high +(SYS_PAGE.RAM_TABLE-#4000-#4000) + LD A,SYS_PAGE + OUT (SLOT1),A + LD A,(DE) + OUT (SLOT1),A + LD DE,#4000 + JP .BLK_CONT1 + ; +.BLK_PAGE3_X: IN A,(SLOT3) + LD E,A + LD D,high SYS_PAGE.RAM_TABLE + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,(DE) + OUT (SLOT3),A + LD DE,#C000 + ; + BIT 7,H + JP Z,.BLK_CONT1 + ; + LD E,A + LD A,C + OUT (SLOT3),A + IN A,(SLOT1) + LD C,A + LD A,E + OUT (SLOT1),A + LD DE,#4000 + JP .BLK_CONT1 + ; +.BLK_EXIT_1: LD A,D + DEC A + RLCA + LD A,C + JR C,.BLK_EXIT_2 + OUT (SLOT1),A + RET + ; +.BLK_EXIT_2: OUT (SLOT3),A + AND A + RET +;----------------------------------------------------------------------; +; + + + +; +;----------------------------------------------------------------------; + ;**************************************** + ;!!!!! READ_ROM_PAGE_X ⥭ ᫥ + ; 256 ⮢ 㦥 ࠭ 祬- + ; READ_ROM_PAGE_X: + ; LD DE,0 + ; LD BC,#100 ; ᥪ + ; PUSH DE + ; PUSH BC + ; LD HL,#3F00 + ; LD DE,#FF00 + ; LD A,#1F ; last page ROM + ; JR ROM_DISK.loopRead + ;**************************************** + +; ⥭ ROM-Disk +; HL - , 㤠 +; DE - ᥪ ( 256b ᥪ) +; B - ᫮ ᥪ஢ +; A' - ࠧ ᥪ (1 - 256b, 2 - 512 b) +ROM_DISK: EX AF,AF' + LD C,0 ; 稪 + DEC A + JR Z,.loop + ; + DEC A + SCF + RET NZ + ; + EX DE,HL + ADD HL,HL + EX DE,HL + LD A,B + ADD A,A + LD B,A + RET C + ; + DI + CALL .loop + RET C + ; + AND A + RR D + RR E + XOR A + RET + ; +.loop: PUSH DE ; ᥪ + PUSH BC + ; + LD A,E + AND #3F ; ADRESS in ROM-Page + PUSH AF ; ࠭ + ; + EX DE,HL ; DE - + ADD HL,HL + ADD HL,HL ; H - + ; [ ] ਢ離 ஬-᪠ align 256 + ;LD A,(ROM_DISK.Pages.Number) + ;INC H + ;CP H + ; + LD C,H + LD B,0 + LD HL,ROM_DISK.Pages + ADD HL,BC + ; + LD A,(ROM_DISK.Pages.Number) ; rdlow-ok + INC C + CP C + ; + ;LD L,H + ;LD H,high ROM_DISK.Pages.Number ; ROM-Disk pages! + ; + LD A,(HL) ; PAGE-ROM + POP HL ; ⠭ ROM-Page + LD L,0 ; ᫨ ⥫ - 室 訡 + JR C,.errorExit ; ROM-Disk-end + ; DE - + ; HL - ROM + ; B - ᫮ ᥪ஢ + ; A - ROM-Page +.loopRead: PUSH HL ; 㤠 + PUSH DE ; 㤠 + + LD HL,-.stackDepth-.readProcedure.size ; memory stack use! + ADD HL,SP ; stack + + PUSH HL ; ணࠬ .readProcedure + + LD DE,.readProcedure ; ७ ணࠬ ⥪ + EX DE,HL + LD BC,.readProcedure.size + LDIR ; ணࠬ ⥪ + LD BC,#100 ; ᥪ + RET ; ᯮ ணࠬ .readProcedure, ⥪ ROM + ; DE - next address + ; HL - ROM address +.readNext: POP BC ; ᫮ ᥪ஢ + + INC C ; 稪 ⠭ ᥪ஢ + DEC B ; ᥪ 稫? + + JR Z,.normExit + BIT 6,H ; ⥭ 祭 + + PUSH BC ; ࠭ 稪 + JR Z,.loopRead ; + POP BC + + POP HL ; ᥪ + + LD A,B + LD B,0 + ADD HL,BC + LD B,A ; ᫨ ᫥.ᥪ + + EX DE,HL ; ⥯ HL - , DE ᥪ, B - ᪮쪮 + + JP .loop ; ᭮! +; ⥭ 祭 +.normExit: POP HL ; ᥪ, 㤠 ⥭ + ADD HL,BC ; : HL - ᫥. + EX DE,HL ; DE - ᫥.ᥪ + AND A + RET +; 訡 +.errorExit: ; !TODO ᤥ, ⮡ 室 뢠 ⢮ ⠭ ᥪ஢ + POP BC + POP DE + SCF + RET +; 楤, ७ᨬ ⥪ ⥭ ROM-Disk +; ஦ PUSH, ᫨ , 㢥 .stackDepth +.readProcedure: + POP DE ; 㤠 + POP HL ; 㤠 + OUT (ROM.SLOT0),A ; ROM_PAGE + LDIR ; ⠥ ROM-Disk + LD B,A + XOR A + OUT (ROM.SLOT0),A + OUT (SYS_PORT.ROM),A + LD A,B + JP .readNext +.stackDepth EQU 8 ; ﭨ 楤 設 ⥪. +.readProcedure.size EQU $-.readProcedure +;----------------------------------------------------------------------; ; \ No newline at end of file diff --git a/src/bios/exp/FUNC_SCREEN.ASM b/bios/exp/FUNC_SCREEN.ASM similarity index 93% rename from src/bios/exp/FUNC_SCREEN.ASM rename to bios/exp/FUNC_SCREEN.ASM index 9da51e1..1af0f13 100644 --- a/src/bios/exp/FUNC_SCREEN.ASM +++ b/bios/exp/FUNC_SCREEN.ASM @@ -1,1145 +1,1145 @@ - -;****************************************************************** -; 室: DE - ⨪, HL - ਧ⠫, -; B - 梥 窨, A - ࠭ -PIC_FN1: - AND A - SCF - RET NZ - CCF - - IN A,(PORT_Y) - PUSH AF - - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - - LD A,(WIN_ID_0.GRAF_Y) - ADD A,E - OUT (PORT_Y),A - LD A,B - LD BC,(WIN_ID_0.GRAF_X) - ADD HL,BC - LD B,A - LD A,#50 - OUT (SLOT3),A - LD (HL),A - EX AF,AF' - OUT (SLOT3),A - - POP AF - OUT (PORT_Y),A - RET - -; 室: DE - ⨪, HL - ਧ⠫. -; IX - 窠 0 !!! -; FILL - by A -; ????? -PIC_FN2: - LD D,A - IN A,(SLOT1) - EX AF,AF' - - LD A,B - ADD A,#50 - OUT (SLOT1),A - - BIT 0,B - LD BC,#40+#4000 - JR Z,PIC_FN2_NO_2ND - LD BC,#40+320+#4000 -PIC_FN2_NO_2ND: - ADD HL,BC - - LD A,E - OUT (PORT_Y),A - - LD A,XH - AND A - JR Z,PIC_FN2_NO256 -PIC_FN2_256L: - LD B,64 -PIC_FN2_256: - LD (HL),D - INC HL - LD (HL),D - INC HL - LD (HL),D - INC HL - LD (HL),D - INC HL - DJNZ PIC_FN2_256 - DEC A - JR NZ,PIC_FN2_256L - -PIC_FN2_NO256: - LD B,XL - AND A - RR B - JR NC,PIC_FN2_NO1 - LD (HL),D - INC HL - AND A -PIC_FN2_NO1: - RR B - JR NC,PIC_FN2_NO2 - LD (HL),D - INC HL - LD (HL),D - INC HL - AND A -PIC_FN2_NO2: - XOR A - CP B - JR Z,PIC_FN2_NO4 -PIC_FN2_4: - LD (HL),D - INC HL - LD (HL),D - INC HL - LD (HL),D - INC HL - LD (HL),D - INC HL - DJNZ PIC_FN2_4 -PIC_FN2_NO4: - - EX AF,AF' - OUT (SLOT1),A - XOR A - OUT (PORT_Y),A - RET - -;************************************************************************ -; 室: dE - ⨪, HL - ਧ⠫. -; A',HL' - ன ࠭ ! -; BC' - -; -PIC_FN3: - IN A,(SLOT3) - LD C,A - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,C - LD (SYS_PAGE.COPY_SLOT3),A - IN A,(SLOT2) - LD (SYS_PAGE.COPY_SLOT2),A - IN A,(SLOT1) - LD (SYS_PAGE.COPY_SLOT1),A - - LD A,B - ADD A,#50 - OUT (SLOT1),A - - BIT 0,B - LD BC,#40 + #4000 - JR Z,PIC_FN3_NO_2ND - LD BC,#40 + 320 + #4000 -PIC_FN3_NO_2ND: - ADD HL,BC - - LD A,E - OUT (PORT_Y),A - - LD A,H - EXX - LD D,A - EXX - LD A,L - EXX - LD E,A - EXX - - EX AF,AF' - OUT (SLOT2),A - EX AF,AF' - LD HL,SYS_PAGE.RAM_TABLE - LD L,A - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,(HL) - OUT (SLOT3),A - EXX - LDIR - BIT 6,H - JR Z,PIC_FN3_NO - RES 6,H - EX AF,AF' -PIC_FN3_NO: - EXX - - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,(SYS_PAGE.COPY_SLOT1) - OUT (SLOT1),A - LD A,(SYS_PAGE.COPY_SLOT2) - OUT (SLOT2),A - LD A,(SYS_PAGE.COPY_SLOT3) - OUT (SLOT3),A - - XOR A - OUT (PORT_Y),A - RET - -;************************************************************************** -;PIC_FN4: -; 室: HL - RGB, E - 砫 梥 -; D - ᫮ 梥⮢, B - PAL-mask, A - page PAL -PIC_SET_PAL: - PUSH IX - - EX AF,AF' - IN A,(PORT_Y) - PUSH AF ; ࠭ PORT_Y - LD A,E - OUT (PORT_Y),A ; 砫 梥 - LD A,D ; ࠭ ᫮ 梥⮢ - EX AF,AF' ; ࠭ PAL - - BIT 7,H ; ஢ - LD C,SLOT3 ; ᫨ 8000h - LD D,#C3 ; .࠭ ࠭ 3 - JR Z,.NO_PAGE1 - LD D,#43 ; - LD C,SLOT1 ; ࠭ 1 -.NO_PAGE1: - ADD A,A - PUSH AF - - ADD A,A - AND #1C - XOR #E0 ; 訩 PAL - LD E,A ; DE - - - PUSH DE - POP IX ; - - LD D,B ; ᪠ PAL - EX AF,AF' ; ᫮ 梥⮢ - LD B,A ; ᫮ 梥⮢ - - IN E,(C) ; ࠭ ࠭ 3 - LD A,#50 ; ࠭ ᪮ RAM - OUT (C),A - - POP AF - JR C,PIC_GET_PAL - ; 横 ⠭ 梥⮢ -.loopPal: - LD A,(HL) ; B - AND D - LD (IX+2),A - INC HL - - LD A,(HL) ; G - AND D - LD (IX+1),A - INC HL - - LD A,(HL) ; R - AND D - LD (IX+0),A - INC HL - - LD A,(HL) ; Y - AND D - LD (IX+3),A - INC HL - - IN A,(PORT_Y) - INC A - OUT (PORT_Y),A - DJNZ .loopPal ; 믮, 0 - -.exit: OUT (C),E ; ⠭ ࠭ 3 - POP AF - OUT (PORT_Y),A ; ⠭ Y_PORT - POP IX - AND A - RET - -PIC_GET_PAL: - ; 横 ⥭ 梥⮢ -.loopPal: - LD A,(IX+2) - LD (HL),A ; B - INC HL - - LD A,(IX+1) - LD (HL),A ; G - INC HL - - LD A,(IX+0) - LD (HL),A ; R - INC HL - - LD A,(IX+3) - LD (HL),A ; Y - INC HL - - IN A,(PORT_Y) - INC A - OUT (PORT_Y),A - DJNZ .loopPal ; 믮, 0 - - JR PIC_SET_PAL.exit - -;******************************************************************** -PIC_FN5: ; MODE - LD A,E - AND 1 - OUT (RGMOD),A - RET -;******************************************************************* -; ⠭ ७ -; A - page_pal, E - , B - ⨯ -SET_PAL_INIT: - LD D,A - DEC B - JP Z,SET_GRAPH_PALETTE - DEC B - JP Z,SET_TXT_PALETTE.ZX - DEC B - JP Z,SET_TXT_PALETTE.IBM - -; LD IX,PAL_DAT1 -; JR Z,PIC_FN6_L1 -; DEC B -; LD IX,PAL_DAT -; JR Z,PIC_FN6_L1 - - SCF - RET - -;PIC_FN6_L1: -; AND 3 -; ADD A,A -; ADD A,A -; ADD A,#E0 -; LD L,A -; LD H,#43 -; IN A,(SLOT1) -; PUSH AF -; -; LD A,#50 -; OUT (SLOT1),A -; XOR A -; OUT (PORT_Y),A -; EX AF,AF' -; call PAL_LOOP_M -; -; POP AF -; OUT (SLOT1),A -; XOR A -; OUT (PORT_Y),A -; -; RET - -;****************************************************************** -; ᮢ . -; d - ⨪, HL - ਧ⠫ -; H' - , C'/DE',B' - add_parameters -; A - color ;!FIXIT ࠧ D? -PIC_FN7: - LD D,A - IN A,(SLOT1) - PUSH AF - - LD A,B - ADD A,#50 - OUT (SLOT1),A - - BIT 0,B - LD BC,#40+#4000 ;!HARDCODE screen - JR Z,.no_2nd - LD BC,#40+320+#4000 ;!HARDCODE screen -.no_2nd: - ADD HL,BC - LD A,E - -.loop: OUT (PORT_Y),A ; ࠭ - - LD (HL),D - - EXX - EX AF,AF' - - DEC H - JR Z,.exit - - LD A,C ; NEXT HORIZONTAL - ADD A,B - LD C,A - LD A,E - EXX - - ADC A,L - LD L,A - - EXX - LD A,D - EXX - - ADC A,H - LD H,A - INC E ; NEXT VERTICAL - EX AF,AF' - INC A - JR .loop - -.exit: EXX - POP AF - OUT (SLOT1),A - XOR A - OUT (PORT_Y),A - RET - -;****************************************************************** -; ᮢ . -; d - ⨪, HL - ਧ⠫ -; H' - , C'/DE',B' - add_parameters -; (IX) - colors -PIC_FN8: - IN A,(SLOT1) - PUSH AF - - LD A,B - ADD A,#50 - OUT (SLOT1),A - - BIT 0,B - LD BC,#40+#4000 ;!HARDCODE screen - JR Z,.no_2nd - LD BC,#40+320+#4000 ;!HARDCODE screen -.no_2nd: - ADD HL,BC - LD A,E - -.loop: OUT (PORT_Y),A ; ࠭ - - LD D,(IX) - INC IX - LD (HL),D - - EXX - EX AF,AF' - - DEC H - JR Z,.exit - - LD A,C ; NEXT HORIZONTAL - ADD A,B - LD C,A - LD A,E - EXX - - ADC A,L - LD L,A - - EXX - LD A,D - EXX - - ADC A,H - LD H,A - - INC E ; NEXT VERTICAL - - EX AF,AF' - INC A - JR .loop - -.exit: EXX - POP AF - OUT (SLOT1),A - XOR A - OUT (PORT_Y),A - RET - -;************************************************** -; 뢮 ࠩ ࠭ -; HL - ਧ⠫, dE - ⨪ -; A',HL' - -PIC_FN9: - -;********************************* -; HL,E - न D - color -; B - Magnify -PIC_FN10: -PIC_FN11: -PIC_FN12: -PIC_FN13: -PIC_FN14: -PIC_FN15: - SCF - RET -;************************************ - - -;************************************ -; SYCLES EQU 0 -; ;START EQU 1 -; ST1 EQU 2 -; DPAL1 EQU 3 -; ST2 EQU 4 -; DPAL2 EQU 5 - -; MACRO NEXT_LIN_H -; EX AF,AF' -; INC A -; OUT (PORT_Y),A -; EX AF,AF' -; ENDM - -; MACRO NEXT_LIN_HP -; EX AF,AF' -; INC A -; OUT (PORT_Y),A -; JR NZ,.MD_NO_INC_H -; INC L -; .MD_NO_INC_H: -; EX AF,AF' -; ENDM - -;**************************************** -; 㧪 ० ࠭. -;**************************************** - -; CALL SINC_DEF -; CALL SET_TXT_PALETTE.ZX -; RET - -;**************************************** - -;!TODO 㭪 -CL0 EQU 200 -CL1 EQU 240 - - -SET_TXT_PALETTE: -.IBM: LD DE,#8000 - JR .TXT - ; -.ZX: LD DE,0 -.TXT: PUSH IX - IN A,(PORT_Y) - PUSH AF - IN A,(SLOT3) - EX AF,AF' - LD A,#50 - OUT (SLOT3),A - ; - LD IX,#C3F0 ; !HARDCODE ? -.generate_loop: - CALL GENERATE_PAL1 - LD A,E - OUT (PORT_Y),A - LD (IX),L ; R - LD (IX+1),B ; G - LD (IX+2),C ; B - LD (IX+3),H ; i ? - INC E - JR NZ,.generate_loop - ; - LD BC,4 - ADD IX,BC - INC D - LD A,D - AND 3 - JR NZ,.generate_loop - ; - EX AF,AF' - OUT (SLOT3),A - POP AF - OUT (PORT_Y),A - POP IX - RET - -; ᯥ㬮᪮ . -; 室: E - ਡ, D - -; : L - red, B - green, C - blue, H - intensity -GENERATE_PAL1: XOR A - LD C,A - LD B,A - LD L,A - BIT 7,D - JR NZ,GENERATE_IBM - BIT 1,D - JR NZ,.FLH -.NOF: BIT 0,D - JR Z,.PAPER -.INK: LD A,CL0 - BIT 6,E - JR Z,.NOI1 - LD A,CL1 -.NOI1: BIT 0,E ; BLUE - JR Z,.NO1 - LD C,A -.NO1: BIT 1,E ; RED - JR Z,.PP_NO2 - LD L,A -.PP_NO2: BIT 2,E ; GREEN - JR Z,.PP_NO6 - LD B,A -.PP_NO3: JR .PP_NO6 -; -.FLH: BIT 7,E - JR Z,.NOF - BIT 0,D - JR Z,.INK -.PAPER: LD A,CL0 - BIT 6,E - JR Z,.NOI2 - LD A,CL1 -.NOI2: BIT 3,E ; BLUE - JR Z,.PP_NO4 - LD C,A -.PP_NO4: BIT 4,E ; RED - JR Z,.PP_NO5 - LD L,A -.PP_NO5: BIT 5,E ; GREEN - JR Z,.PP_NO6 - LD B,A -.PP_NO6: LD A,C - AND A - RRA - ADD A,L - RRA - ADD A,B - RRA - LD H,A ; B/W mode - RET -;**************************************** - -GENERATE_IBM: - BIT 7,E - JR Z,.NO_FLH - BIT 1,D - JR Z,.PAPER -.NO_FLH: - BIT 0,D - JR Z,.PAPER -.INK: -.NO_INTENS: - LD A,#A8 -.INTENS: - BIT 0,E ; BLUE - JR Z,.PPI_NO4 - LD C,A -.PPI_NO4: - BIT 2,E ; RED - JR Z,.PPI_NO5 - LD L,A -.PPI_NO5: - BIT 1,E ; GREEN - JR Z,.PPI_NO6 - LD B,A -.PPI_NO6: - LD A,E - AND #0F - CP 6 - JR NZ,.no_correct - LD B,#54 -.no_correct: - BIT 3,E - JR Z,GENERATE_PAL1.PP_NO6 - - LD A,#54 - ADD A,C - LD C,A - LD A,#54 - ADD A,B - LD B,A - LD A,#54 - ADD A,L - LD L,A - JR GENERATE_PAL1.PP_NO6 -.PAPER: - LD A,#A8 - BIT 4,E ; BLUE - JR Z,.PPI_NO4X - LD C,A -.PPI_NO4X: - BIT 6,E ; RED - JR Z,.PPI_NO5X - LD L,A -.PPI_NO5X: - BIT 5,E ; GREEN - JR Z,.PPI_NO6X - LD B,A -.PPI_NO6X: - LD A,E - AND #70 - CP #60 - JR NZ,GENERATE_PAL1.PP_NO6 - LD B,#54 - JR GENERATE_PAL1.PP_NO6 -;**************************************** - -;**************************************** -;**************************************** - -; D - ᪮ -SET_GRAPH_PALETTE: - PUSH IX - IN A,(PORT_Y) - PUSH AF - - IN A,(SLOT3) - EX AF,AF' - LD A,#50 - OUT (SLOT3),A - - - LD IX,#C3E0 - LD A,D - AND 3 - ADD A,A - ADD A,A - LD E,A - LD D,0 - ADD IX,DE - - LD E,0 - - XOR A - LD B,A - LD C,A - LD L,A - LD H,A - -SET_PAL_GR1: - LD A,E - OUT (PORT_Y),A - - LD (IX),L - LD (IX+1),B - LD (IX+2),C - LD (IX+3),H - - CALL GENERATE_PAL3 - - INC E - LD A,E - CP 40 - JR NZ,SET_PAL_GR1 - - XOR A - LD B,A - LD C,A - LD L,A - LD H,A - -SET_PAL_GR2: - LD A,E - OUT (PORT_Y),A - - LD (IX),L - LD (IX+1),B - LD (IX+2),C - LD (IX+3),H - - CALL GENERATE_PAL2 - - INC E - JR NZ,SET_PAL_GR2 - - EX AF,AF' - OUT (SLOT3),A - POP AF - OUT (PORT_Y),A - POP IX - RET -; -;;********************************* -; - -GENERATE_PAL3: ; gray-scale - LD A,B - ADD A,6 - LD B,A - LD C,A - LD L,A - - LD A,C - AND A - RRA - ADD A,L - RRA - ADD A,B - RRA - LD H,A - - RET - -GENERATE_PAL2: ; C - BLUE; L - RED; B - GREEN; H - INTENSITY - LD A,C - ADD A,50 - LD C,A - JR NC,GEN_PAL2_L1 - LD C,0 - LD A,L - ADD A,50 - LD L,A - JR NC,GEN_PAL2_L1 - LD L,0 - LD A,B - ADD A,50 - LD B,A - JR NC,GEN_PAL2_L1 - LD B,0 - -GEN_PAL2_L1: - LD A,C - AND A - RR A - ADD A,L - RR A - ADD A,B - RR A - LD H,A - - RET -; -;************************************ - -FN_SYNC: BIT 7,A - JR Z,.old_mode - ; - LD H,A - AND #60 ; check reserved bits - JR NZ,.error - ; - BIT 2,H ; Set V-Sinc? - JR NZ,.set_v_sinc - ; - BIT 4,H ; Set Waits? - JR Z,.error ; Error - no parameters - ; -.set_waits: LD A,H - AND 8 ; check waits. Z - no waits, NZ - waits - LD H,Port_All_Mode.DEFAULT - JR Z,.no_change - LD H,Port_All_Mode.DEFAULT-Port_All_Mode.MEM_WAITS_OFF -.no_change: LD BC,(Port_All_Mode) - IN A,(C) - AND H - OUT (C),A - RET - ; -.set_v_sinc: LD A,H - AND 3 - JR Z,.SetDefLines - DEC A - JR Z,.SetCmosLines - DEC A - JR Z,.Set320Lines - ;JR .Set312Lines -.set312lines: LD A,Port_VSYNC.SET_312L - OUT (Port_VSYNC),A - ; - LD C,SLOT3 - IN B,(C) - LD A,SYS_PAGE - OUT (C),A - LD A,(SYS_PAGE.VSyncAndWaits) - AND 2 - LD (SYS_PAGE.VSyncAndWaits),A - OUT (C),B - ; -.end_set_v_sinc: - BIT 4,H - RET Z - JR .set_waits - ; -.Set320Lines: LD A,Port_VSYNC.SET_320L - OUT (Port_VSYNC),A - ; - LD C,SLOT3 - IN B,(C) - LD A,SYS_PAGE - OUT (C),A - LD A,(SYS_PAGE.VSyncAndWaits) - OR 1 - LD (SYS_PAGE.VSyncAndWaits),A - OUT (C),B - JR .end_set_v_sinc - ; -.SetCmosLines: LD D,CMOS_CELL.ScreenSET - CALL CMOS_RD - ; - AND high CMOS_CELL.ScreenSET.Mask.Sinc ; ॣ A 祭 ScreenSET - JR Z,.SetDefLines - ; - BIT 6,A - JR Z,.set312lines - JR .Set320Lines - ; -.old_mode: AND A - JR Z,.INT_DEF - DEC A - JR Z,.INT_SCORP - DEC A - JR Z,.INT_PENT - DEC A - JR Z,.INT_ORIG - DEC A - JR Z,.INT_CMOS_SINC - ; [x] ⮬ ࠭ ⠡ 짮⥫ - DEC A - JR Z,.PROG_SCR - ; -.error: SCF - RET - ; -.SetDefLines: LD C,SLOT3 - IN B,(C) - LD A,SYS_PAGE - OUT (C),A - LD A,(SYS_PAGE.VSyncAndWaits) - OUT (C),B - AND 1 - JR Z,.set312lines - JR .Set320Lines - ; -.INT_DEF: LD C,SLOT3 - IN B,(C) - LD A,SYS_PAGE - OUT (C),A - LD DE,(SYS_PAGE.SCREEN_TABLE) - OUT (C),B - ; - CALL Test_SCREEN_TABLE - JR NZ,.INT_CMOS_SINC - JP (IX) - ; -.INT_CMOS_SINC: LD C,SLOT3 - IN B,(C) - LD A,SYS_PAGE - OUT (C),A - LD DE,(SYS_PAGE.SCREEN_TABLE) - OUT (C),B - ; - LD D,CMOS_CELL.ScreenSET - CALL CMOS_RD - ; - AND high CMOS_CELL.ScreenSET.Mask.Int ; ॣ A 祭 ScreenSET - JR NZ,.skiptest - ; - CALL Test_SCREEN_TABLE - JP (IX) ; default int (non CMOS) - ; -.skiptest: CP #10 - JR Z,.INT_SCORP ; scorpion int - ; - CP #20 - JR Z,.INT_PENT ; pentagon int - ; - ;JR .INT_ORIG ; original int -.INT_ORIG: LD IX,SCREEN_TABLES.ORIGINAL - JR .PROG_SCR - ; -.INT_SCORP: LD IX,SCREEN_TABLES.SCORPION - JR .PROG_SCR - ; -.INT_PENT: LD IX,SCREEN_TABLES.PENTAGON - ;JR .PROG_SCR -.PROG_SCR: IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - EX AF,AF' - LD (SYS_PAGE.COPY_SLOT3),A - IN A,(PORT_Y) - LD (SYS_PAGE.COPY_RGADR),A - ; - LD (SYS_PAGE.SCREEN_TABLE),IX - XOR A -;----[START]-----------------------[? 1] -.loop_1: OUT (PORT_Y),A - EX AF,AF' - LD A,#50 - OUT (SLOT3),A - LD HL,#C300 -;----[START]------------------[v 2]----- -.loop_2: LD C,(IX) -;----[START]-------------[v 3]---------- -.loop_3: ; 㦥 ࠭ - LD E,(IX+1) ; take adress of line X - LD D,(IX+2) -;----[START]--------[v 4]--------------- -.loop_4: LD A,(DE) ; take counter in table 1, line X, column Y - INC DE - AND A - JR Z,.loop_4_exit ; exit if zero-counter - LD B,A - LD A,(DE) - INC DE -;----[START]---[v 5]-------------------- -.loop_5: LD (HL),A - INC L - LD (HL),0 - INC L - LD (HL),0 - ; - EX AF,AF' - INC A - OUT (PORT_Y),A - EX AF,AF' - ; - LD (HL),0 - DEC L - LD (HL),0 - DEC L - LD (HL),A - ; - EX AF,AF' - INC A - OUT (PORT_Y),A - EX AF,AF' - ; - DJNZ .loop_5 -;--------------[^ 5]-------------------- - JR .loop_4 -;-------------------[^ 4]--------------- -.loop_4_exit: INC HL ; next line - INC HL - INC HL - INC HL - IN A,(PORT_Y) - AND #80 - OUT (PORT_Y),A - DEC C - JR NZ,.loop_3 -;------------------------[^ 3]---------- - INC IX ; next counter - INC IX - INC IX - LD A,(IX) - AND A - JR NZ,.loop_2 -;-----------------------------[^ 2]----- - LD A,SYS_PAGE - OUT (SLOT3),A - LD IX,(SYS_PAGE.SCREEN_TABLE) - ; - EX AF,AF' - ADD A,#80 - JR NC,.loop_1 -;----------------------------------[^ 1] - ; Exit - LD A,(SYS_PAGE.COPY_RGADR) - OUT (PORT_Y),A - LD A,(SYS_PAGE.COPY_SLOT3) - OUT (SLOT3),A -.exit: OR A - RET - ; - ;DE - ᮤন SYS_PAGE.SCREEN_TABLE -Test_SCREEN_TABLE: - LD HL,SCREEN_TABLES.SCORPION - AND A - SBC HL,DE - LD IX,FN_SYNC.INT_SCORP - RET Z - ; - LD HL,SCREEN_TABLES.ORIGINAL - AND A - SBC HL,DE - LD IX,FN_SYNC.INT_ORIG - RET Z - ; - LD HL,SCREEN_TABLES.PENTAGON - AND A - SBC HL,DE - LD IX,FN_SYNC.INT_PENT - RET Z - AND A - RET -;--- Screen data table 1: counter1, data1 .. counterX, dataX -SCREEN_TABLES: -; | ᫮ | 祭 | -; | ப | | -; | /2 | ப | -.SCR: DB 41 , #F8 - DB 3 , #FC - DB 4 , #FC - DB 7 , #FC - DB 9 , #F8 - DB 0 - -;.SCR: DB 41,#F8, 3,#FC, 4,#FC, 7,#FC, 9,#F8, 0 -.INT: DB 40,#FC, 2,#FD, 6,#FC, 7,#FC, 9,#FC, 0 -.INT_SC: DB 41,#F8, 1,#FD, 6,#FC, 7,#FC, 9,#F8, 0 -.BLN: DB 41,#FC, 3,#FC, 4,#FC, 7,#FC, 9,#FC, 0 -.SNC: DB 41,#FC, 3,#FC, 4,#FC, 7,#FC, 9,#FC, 0 -.RES: DB 41,#F8, 3,#FE, 4,#FE, 7,#FE, 9,#F8, 0 -;--------------------------------------- - -;--- Screen data tables 2: counter1, data address1 .. counterX, data addressX -; -; | - | 祭 | -; | ப | | -; | | ப | -.PENTAGON: DB 33 : DW .SCR - DB 1 : DW .INT ; DW .BLN - DB 3 : DW .SNC - DB 1 : DW .BLN - DB 1 : DW .SCR - DB 1 : DW .RES - DB 0 ; end -.SCORPION: DB 31 : DW .SCR - DB 1 : DW .INT_SC - DB 1 : DW .SCR - DB 1 : DW .SNC - DB 3 : DW .SNC - DB 1 : DW .BLN - DB 2 : DW .RES - DB 0 ; end -.ORIGINAL: DB 33 : DW .SCR - DB 1 : DW .SNC - DB 1 : DW .INT - DB 2 : DW .SNC - DB 1 : DW .BLN - DB 1 : DW .SCR - DB 1 : DW .RES - DB 0 ; end -;--------------------------------------- - -;************************************ -; -; ࠭ ⠡ -; -;⥪⮢ 80x32 -LP_SCR_80: - DB 40,32,0,0,%0001'1011,0,0,0 - BLOCK 8,0 - -;⥪⮢ 40x32 -LP_SCR_40: - DB 40,32,0,0,%0111'1011,0,0,0 - BLOCK 8,0 - -;ᯥ㬮᪮ 32x24 -LP_SCR_32: - DB 32,24,4,4,%0011'0000,1,0,0 - BLOCK 8,0 - -;⥪⮢ 64x24 -LP_SCR_64: - DB 32,24,4,4,%1001'1011,0,0,0 - BLOCK 8,0 - -;᪮ 0 -PIC_320X256_1: - DB 40,32,0,0,%0010'0000,0,8,0 - BLOCK 8,0 - -;᪮ 1 -PIC_320X256_2: - DB 40,32,0,0,%0110'0000,0,48,0 - BLOCK 8,0 - -;************************************ -; - - + +;****************************************************************** +; 室: DE - ⨪, HL - ਧ⠫, +; B - 梥 窨, A - ࠭ +PIC_FN1: + AND A + SCF + RET NZ + CCF + + IN A,(PORT_Y) + PUSH AF + + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + + LD A,(WIN_ID_0.GRAF_Y) + ADD A,E + OUT (PORT_Y),A + LD A,B + LD BC,(WIN_ID_0.GRAF_X) + ADD HL,BC + LD B,A + LD A,#50 + OUT (SLOT3),A + LD (HL),A + EX AF,AF' + OUT (SLOT3),A + + POP AF + OUT (PORT_Y),A + RET + +; 室: DE - ⨪, HL - ਧ⠫. +; IX - 窠 0 !!! +; FILL - by A +; ????? +PIC_FN2: + LD D,A + IN A,(SLOT1) + EX AF,AF' + + LD A,B + ADD A,#50 + OUT (SLOT1),A + + BIT 0,B + LD BC,#40+#4000 + JR Z,PIC_FN2_NO_2ND + LD BC,#40+320+#4000 +PIC_FN2_NO_2ND: + ADD HL,BC + + LD A,E + OUT (PORT_Y),A + + LD A,XH + AND A + JR Z,PIC_FN2_NO256 +PIC_FN2_256L: + LD B,64 +PIC_FN2_256: + LD (HL),D + INC HL + LD (HL),D + INC HL + LD (HL),D + INC HL + LD (HL),D + INC HL + DJNZ PIC_FN2_256 + DEC A + JR NZ,PIC_FN2_256L + +PIC_FN2_NO256: + LD B,XL + AND A + RR B + JR NC,PIC_FN2_NO1 + LD (HL),D + INC HL + AND A +PIC_FN2_NO1: + RR B + JR NC,PIC_FN2_NO2 + LD (HL),D + INC HL + LD (HL),D + INC HL + AND A +PIC_FN2_NO2: + XOR A + CP B + JR Z,PIC_FN2_NO4 +PIC_FN2_4: + LD (HL),D + INC HL + LD (HL),D + INC HL + LD (HL),D + INC HL + LD (HL),D + INC HL + DJNZ PIC_FN2_4 +PIC_FN2_NO4: + + EX AF,AF' + OUT (SLOT1),A + XOR A + OUT (PORT_Y),A + RET + +;************************************************************************ +; 室: dE - ⨪, HL - ਧ⠫. +; A',HL' - ன ࠭ ! +; BC' - +; +PIC_FN3: + IN A,(SLOT3) + LD C,A + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,C + LD (SYS_PAGE.COPY_SLOT3),A + IN A,(SLOT2) + LD (SYS_PAGE.COPY_SLOT2),A + IN A,(SLOT1) + LD (SYS_PAGE.COPY_SLOT1),A + + LD A,B + ADD A,#50 + OUT (SLOT1),A + + BIT 0,B + LD BC,#40 + #4000 + JR Z,PIC_FN3_NO_2ND + LD BC,#40 + 320 + #4000 +PIC_FN3_NO_2ND: + ADD HL,BC + + LD A,E + OUT (PORT_Y),A + + LD A,H + EXX + LD D,A + EXX + LD A,L + EXX + LD E,A + EXX + + EX AF,AF' + OUT (SLOT2),A + EX AF,AF' + LD HL,SYS_PAGE.RAM_TABLE + LD L,A + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,(HL) + OUT (SLOT3),A + EXX + LDIR + BIT 6,H + JR Z,PIC_FN3_NO + RES 6,H + EX AF,AF' +PIC_FN3_NO: + EXX + + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,(SYS_PAGE.COPY_SLOT1) + OUT (SLOT1),A + LD A,(SYS_PAGE.COPY_SLOT2) + OUT (SLOT2),A + LD A,(SYS_PAGE.COPY_SLOT3) + OUT (SLOT3),A + + XOR A + OUT (PORT_Y),A + RET + +;************************************************************************** +;PIC_FN4: +; 室: HL - RGB, E - 砫 梥 +; D - ᫮ 梥⮢, B - PAL-mask, A - page PAL +PIC_SET_PAL: + PUSH IX + + EX AF,AF' + IN A,(PORT_Y) + PUSH AF ; ࠭ PORT_Y + LD A,E + OUT (PORT_Y),A ; 砫 梥 + LD A,D ; ࠭ ᫮ 梥⮢ + EX AF,AF' ; ࠭ PAL + + BIT 7,H ; ஢ + LD C,SLOT3 ; ᫨ 8000h + LD D,#C3 ; .࠭ ࠭ 3 + JR Z,.NO_PAGE1 + LD D,#43 ; + LD C,SLOT1 ; ࠭ 1 +.NO_PAGE1: + ADD A,A + PUSH AF + + ADD A,A + AND #1C + XOR #E0 ; 訩 PAL + LD E,A ; DE - - + PUSH DE + POP IX ; + + LD D,B ; ᪠ PAL + EX AF,AF' ; ᫮ 梥⮢ + LD B,A ; ᫮ 梥⮢ + + IN E,(C) ; ࠭ ࠭ 3 + LD A,#50 ; ࠭ ᪮ RAM + OUT (C),A + + POP AF + JR C,PIC_GET_PAL + ; 横 ⠭ 梥⮢ +.loopPal: + LD A,(HL) ; B + AND D + LD (IX+2),A + INC HL + + LD A,(HL) ; G + AND D + LD (IX+1),A + INC HL + + LD A,(HL) ; R + AND D + LD (IX+0),A + INC HL + + LD A,(HL) ; Y + AND D + LD (IX+3),A + INC HL + + IN A,(PORT_Y) + INC A + OUT (PORT_Y),A + DJNZ .loopPal ; 믮, 0 + +.exit: OUT (C),E ; ⠭ ࠭ 3 + POP AF + OUT (PORT_Y),A ; ⠭ Y_PORT + POP IX + AND A + RET + +PIC_GET_PAL: + ; 横 ⥭ 梥⮢ +.loopPal: + LD A,(IX+2) + LD (HL),A ; B + INC HL + + LD A,(IX+1) + LD (HL),A ; G + INC HL + + LD A,(IX+0) + LD (HL),A ; R + INC HL + + LD A,(IX+3) + LD (HL),A ; Y + INC HL + + IN A,(PORT_Y) + INC A + OUT (PORT_Y),A + DJNZ .loopPal ; 믮, 0 + + JR PIC_SET_PAL.exit + +;******************************************************************** +PIC_FN5: ; MODE + LD A,E + AND 1 + OUT (RGMOD),A + RET +;******************************************************************* +; ⠭ ७ +; A - page_pal, E - , B - ⨯ +SET_PAL_INIT: + LD D,A + DEC B + JP Z,SET_GRAPH_PALETTE + DEC B + JP Z,SET_TXT_PALETTE.ZX + DEC B + JP Z,SET_TXT_PALETTE.IBM + +; LD IX,PAL_DAT1 +; JR Z,PIC_FN6_L1 +; DEC B +; LD IX,PAL_DAT +; JR Z,PIC_FN6_L1 + + SCF + RET + +;PIC_FN6_L1: +; AND 3 +; ADD A,A +; ADD A,A +; ADD A,#E0 +; LD L,A +; LD H,#43 +; IN A,(SLOT1) +; PUSH AF +; +; LD A,#50 +; OUT (SLOT1),A +; XOR A +; OUT (PORT_Y),A +; EX AF,AF' +; call PAL_LOOP_M +; +; POP AF +; OUT (SLOT1),A +; XOR A +; OUT (PORT_Y),A +; +; RET + +;****************************************************************** +; ᮢ . +; d - ⨪, HL - ਧ⠫ +; H' - , C'/DE',B' - add_parameters +; A - color ;!FIXIT ࠧ D? +PIC_FN7: + LD D,A + IN A,(SLOT1) + PUSH AF + + LD A,B + ADD A,#50 + OUT (SLOT1),A + + BIT 0,B + LD BC,#40+#4000 ;!HARDCODE screen + JR Z,.no_2nd + LD BC,#40+320+#4000 ;!HARDCODE screen +.no_2nd: + ADD HL,BC + LD A,E + +.loop: OUT (PORT_Y),A ; ࠭ - + LD (HL),D + + EXX + EX AF,AF' + + DEC H + JR Z,.exit + + LD A,C ; NEXT HORIZONTAL + ADD A,B + LD C,A + LD A,E + EXX + + ADC A,L + LD L,A + + EXX + LD A,D + EXX + + ADC A,H + LD H,A + INC E ; NEXT VERTICAL + EX AF,AF' + INC A + JR .loop + +.exit: EXX + POP AF + OUT (SLOT1),A + XOR A + OUT (PORT_Y),A + RET + +;****************************************************************** +; ᮢ . +; d - ⨪, HL - ਧ⠫ +; H' - , C'/DE',B' - add_parameters +; (IX) - colors +PIC_FN8: + IN A,(SLOT1) + PUSH AF + + LD A,B + ADD A,#50 + OUT (SLOT1),A + + BIT 0,B + LD BC,#40+#4000 ;!HARDCODE screen + JR Z,.no_2nd + LD BC,#40+320+#4000 ;!HARDCODE screen +.no_2nd: + ADD HL,BC + LD A,E + +.loop: OUT (PORT_Y),A ; ࠭ - + LD D,(IX) + INC IX + LD (HL),D + + EXX + EX AF,AF' + + DEC H + JR Z,.exit + + LD A,C ; NEXT HORIZONTAL + ADD A,B + LD C,A + LD A,E + EXX + + ADC A,L + LD L,A + + EXX + LD A,D + EXX + + ADC A,H + LD H,A + + INC E ; NEXT VERTICAL + + EX AF,AF' + INC A + JR .loop + +.exit: EXX + POP AF + OUT (SLOT1),A + XOR A + OUT (PORT_Y),A + RET + +;************************************************** +; 뢮 ࠩ ࠭ +; HL - ਧ⠫, dE - ⨪ +; A',HL' - +PIC_FN9: + +;********************************* +; HL,E - न D - color +; B - Magnify +PIC_FN10: +PIC_FN11: +PIC_FN12: +PIC_FN13: +PIC_FN14: +PIC_FN15: + SCF + RET +;************************************ + + +;************************************ +; SYCLES EQU 0 +; ;START EQU 1 +; ST1 EQU 2 +; DPAL1 EQU 3 +; ST2 EQU 4 +; DPAL2 EQU 5 + +; MACRO NEXT_LIN_H +; EX AF,AF' +; INC A +; OUT (PORT_Y),A +; EX AF,AF' +; ENDM + +; MACRO NEXT_LIN_HP +; EX AF,AF' +; INC A +; OUT (PORT_Y),A +; JR NZ,.MD_NO_INC_H +; INC L +; .MD_NO_INC_H: +; EX AF,AF' +; ENDM + +;**************************************** +; 㧪 ० ࠭. +;**************************************** + +; CALL SINC_DEF +; CALL SET_TXT_PALETTE.ZX +; RET + +;**************************************** + +;!TODO 㭪 +CL0 EQU 200 +CL1 EQU 240 + + +SET_TXT_PALETTE: +.IBM: LD DE,#8000 + JR .TXT + ; +.ZX: LD DE,0 +.TXT: PUSH IX + IN A,(PORT_Y) + PUSH AF + IN A,(SLOT3) + EX AF,AF' + LD A,#50 + OUT (SLOT3),A + ; + LD IX,#C3F0 ; !HARDCODE ? +.generate_loop: + CALL GENERATE_PAL1 + LD A,E + OUT (PORT_Y),A + LD (IX),L ; R + LD (IX+1),B ; G + LD (IX+2),C ; B + LD (IX+3),H ; i ? + INC E + JR NZ,.generate_loop + ; + LD BC,4 + ADD IX,BC + INC D + LD A,D + AND 3 + JR NZ,.generate_loop + ; + EX AF,AF' + OUT (SLOT3),A + POP AF + OUT (PORT_Y),A + POP IX + RET + +; ᯥ㬮᪮ . +; 室: E - ਡ, D - +; : L - red, B - green, C - blue, H - intensity +GENERATE_PAL1: XOR A + LD C,A + LD B,A + LD L,A + BIT 7,D + JR NZ,GENERATE_IBM + BIT 1,D + JR NZ,.FLH +.NOF: BIT 0,D + JR Z,.PAPER +.INK: LD A,CL0 + BIT 6,E + JR Z,.NOI1 + LD A,CL1 +.NOI1: BIT 0,E ; BLUE + JR Z,.NO1 + LD C,A +.NO1: BIT 1,E ; RED + JR Z,.PP_NO2 + LD L,A +.PP_NO2: BIT 2,E ; GREEN + JR Z,.PP_NO6 + LD B,A +.PP_NO3: JR .PP_NO6 +; +.FLH: BIT 7,E + JR Z,.NOF + BIT 0,D + JR Z,.INK +.PAPER: LD A,CL0 + BIT 6,E + JR Z,.NOI2 + LD A,CL1 +.NOI2: BIT 3,E ; BLUE + JR Z,.PP_NO4 + LD C,A +.PP_NO4: BIT 4,E ; RED + JR Z,.PP_NO5 + LD L,A +.PP_NO5: BIT 5,E ; GREEN + JR Z,.PP_NO6 + LD B,A +.PP_NO6: LD A,C + AND A + RRA + ADD A,L + RRA + ADD A,B + RRA + LD H,A ; B/W mode + RET +;**************************************** + +GENERATE_IBM: + BIT 7,E + JR Z,.NO_FLH + BIT 1,D + JR Z,.PAPER +.NO_FLH: + BIT 0,D + JR Z,.PAPER +.INK: +.NO_INTENS: + LD A,#A8 +.INTENS: + BIT 0,E ; BLUE + JR Z,.PPI_NO4 + LD C,A +.PPI_NO4: + BIT 2,E ; RED + JR Z,.PPI_NO5 + LD L,A +.PPI_NO5: + BIT 1,E ; GREEN + JR Z,.PPI_NO6 + LD B,A +.PPI_NO6: + LD A,E + AND #0F + CP 6 + JR NZ,.no_correct + LD B,#54 +.no_correct: + BIT 3,E + JR Z,GENERATE_PAL1.PP_NO6 + + LD A,#54 + ADD A,C + LD C,A + LD A,#54 + ADD A,B + LD B,A + LD A,#54 + ADD A,L + LD L,A + JR GENERATE_PAL1.PP_NO6 +.PAPER: + LD A,#A8 + BIT 4,E ; BLUE + JR Z,.PPI_NO4X + LD C,A +.PPI_NO4X: + BIT 6,E ; RED + JR Z,.PPI_NO5X + LD L,A +.PPI_NO5X: + BIT 5,E ; GREEN + JR Z,.PPI_NO6X + LD B,A +.PPI_NO6X: + LD A,E + AND #70 + CP #60 + JR NZ,GENERATE_PAL1.PP_NO6 + LD B,#54 + JR GENERATE_PAL1.PP_NO6 +;**************************************** + +;**************************************** +;**************************************** + +; D - ᪮ +SET_GRAPH_PALETTE: + PUSH IX + IN A,(PORT_Y) + PUSH AF + + IN A,(SLOT3) + EX AF,AF' + LD A,#50 + OUT (SLOT3),A + + + LD IX,#C3E0 + LD A,D + AND 3 + ADD A,A + ADD A,A + LD E,A + LD D,0 + ADD IX,DE + + LD E,0 + + XOR A + LD B,A + LD C,A + LD L,A + LD H,A + +SET_PAL_GR1: + LD A,E + OUT (PORT_Y),A + + LD (IX),L + LD (IX+1),B + LD (IX+2),C + LD (IX+3),H + + CALL GENERATE_PAL3 + + INC E + LD A,E + CP 40 + JR NZ,SET_PAL_GR1 + + XOR A + LD B,A + LD C,A + LD L,A + LD H,A + +SET_PAL_GR2: + LD A,E + OUT (PORT_Y),A + + LD (IX),L + LD (IX+1),B + LD (IX+2),C + LD (IX+3),H + + CALL GENERATE_PAL2 + + INC E + JR NZ,SET_PAL_GR2 + + EX AF,AF' + OUT (SLOT3),A + POP AF + OUT (PORT_Y),A + POP IX + RET +; +;;********************************* +; + +GENERATE_PAL3: ; gray-scale + LD A,B + ADD A,6 + LD B,A + LD C,A + LD L,A + + LD A,C + AND A + RRA + ADD A,L + RRA + ADD A,B + RRA + LD H,A + + RET + +GENERATE_PAL2: ; C - BLUE; L - RED; B - GREEN; H - INTENSITY + LD A,C + ADD A,50 + LD C,A + JR NC,GEN_PAL2_L1 + LD C,0 + LD A,L + ADD A,50 + LD L,A + JR NC,GEN_PAL2_L1 + LD L,0 + LD A,B + ADD A,50 + LD B,A + JR NC,GEN_PAL2_L1 + LD B,0 + +GEN_PAL2_L1: + LD A,C + AND A + RR A + ADD A,L + RR A + ADD A,B + RR A + LD H,A + + RET +; +;************************************ + +FN_SYNC: BIT 7,A + JR Z,.old_mode + ; + LD H,A + AND #60 ; check reserved bits + JR NZ,.error + ; + BIT 2,H ; Set V-Sinc? + JR NZ,.set_v_sinc + ; + BIT 4,H ; Set Waits? + JR Z,.error ; Error - no parameters + ; +.set_waits: LD A,H + AND 8 ; check waits. Z - no waits, NZ - waits + LD H,Port_All_Mode.DEFAULT + JR Z,.no_change + LD H,Port_All_Mode.DEFAULT-Port_All_Mode.MEM_WAITS_OFF +.no_change: LD BC,(Port_All_Mode) + IN A,(C) + AND H + OUT (C),A + RET + ; +.set_v_sinc: LD A,H + AND 3 + JR Z,.SetDefLines + DEC A + JR Z,.SetCmosLines + DEC A + JR Z,.Set320Lines + ;JR .Set312Lines +.set312lines: LD A,Port_VSYNC.SET_312L + OUT (Port_VSYNC),A + ; + LD C,SLOT3 + IN B,(C) + LD A,SYS_PAGE + OUT (C),A + LD A,(SYS_PAGE.VSyncAndWaits) + AND 2 + LD (SYS_PAGE.VSyncAndWaits),A + OUT (C),B + ; +.end_set_v_sinc: + BIT 4,H + RET Z + JR .set_waits + ; +.Set320Lines: LD A,Port_VSYNC.SET_320L + OUT (Port_VSYNC),A + ; + LD C,SLOT3 + IN B,(C) + LD A,SYS_PAGE + OUT (C),A + LD A,(SYS_PAGE.VSyncAndWaits) + OR 1 + LD (SYS_PAGE.VSyncAndWaits),A + OUT (C),B + JR .end_set_v_sinc + ; +.SetCmosLines: LD D,CMOS_CELL.ScreenSET + CALL CMOS_RD + ; + AND high CMOS_CELL.ScreenSET.Mask.Sinc ; ॣ A 祭 ScreenSET + JR Z,.SetDefLines + ; + BIT 6,A + JR Z,.set312lines + JR .Set320Lines + ; +.old_mode: AND A + JR Z,.INT_DEF + DEC A + JR Z,.INT_SCORP + DEC A + JR Z,.INT_PENT + DEC A + JR Z,.INT_ORIG + DEC A + JR Z,.INT_CMOS_SINC + ; [x] ⮬ ࠭ ⠡ 짮⥫ + DEC A + JR Z,.PROG_SCR + ; +.error: SCF + RET + ; +.SetDefLines: LD C,SLOT3 + IN B,(C) + LD A,SYS_PAGE + OUT (C),A + LD A,(SYS_PAGE.VSyncAndWaits) + OUT (C),B + AND 1 + JR Z,.set312lines + JR .Set320Lines + ; +.INT_DEF: LD C,SLOT3 + IN B,(C) + LD A,SYS_PAGE + OUT (C),A + LD DE,(SYS_PAGE.SCREEN_TABLE) + OUT (C),B + ; + CALL Test_SCREEN_TABLE + JR NZ,.INT_CMOS_SINC + JP (IX) + ; +.INT_CMOS_SINC: LD C,SLOT3 + IN B,(C) + LD A,SYS_PAGE + OUT (C),A + LD DE,(SYS_PAGE.SCREEN_TABLE) + OUT (C),B + ; + LD D,CMOS_CELL.ScreenSET + CALL CMOS_RD + ; + AND high CMOS_CELL.ScreenSET.Mask.Int ; ॣ A 祭 ScreenSET + JR NZ,.skiptest + ; + CALL Test_SCREEN_TABLE + JP (IX) ; default int (non CMOS) + ; +.skiptest: CP #10 + JR Z,.INT_SCORP ; scorpion int + ; + CP #20 + JR Z,.INT_PENT ; pentagon int + ; + ;JR .INT_ORIG ; original int +.INT_ORIG: LD IX,SCREEN_TABLES.ORIGINAL + JR .PROG_SCR + ; +.INT_SCORP: LD IX,SCREEN_TABLES.SCORPION + JR .PROG_SCR + ; +.INT_PENT: LD IX,SCREEN_TABLES.PENTAGON + ;JR .PROG_SCR +.PROG_SCR: IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + EX AF,AF' + LD (SYS_PAGE.COPY_SLOT3),A + IN A,(PORT_Y) + LD (SYS_PAGE.COPY_RGADR),A + ; + LD (SYS_PAGE.SCREEN_TABLE),IX + XOR A +;----[START]-----------------------[? 1] +.loop_1: OUT (PORT_Y),A + EX AF,AF' + LD A,#50 + OUT (SLOT3),A + LD HL,#C300 +;----[START]------------------[v 2]----- +.loop_2: LD C,(IX) +;----[START]-------------[v 3]---------- +.loop_3: ; 㦥 ࠭ + LD E,(IX+1) ; take adress of line X + LD D,(IX+2) +;----[START]--------[v 4]--------------- +.loop_4: LD A,(DE) ; take counter in table 1, line X, column Y + INC DE + AND A + JR Z,.loop_4_exit ; exit if zero-counter + LD B,A + LD A,(DE) + INC DE +;----[START]---[v 5]-------------------- +.loop_5: LD (HL),A + INC L + LD (HL),0 + INC L + LD (HL),0 + ; + EX AF,AF' + INC A + OUT (PORT_Y),A + EX AF,AF' + ; + LD (HL),0 + DEC L + LD (HL),0 + DEC L + LD (HL),A + ; + EX AF,AF' + INC A + OUT (PORT_Y),A + EX AF,AF' + ; + DJNZ .loop_5 +;--------------[^ 5]-------------------- + JR .loop_4 +;-------------------[^ 4]--------------- +.loop_4_exit: INC HL ; next line + INC HL + INC HL + INC HL + IN A,(PORT_Y) + AND #80 + OUT (PORT_Y),A + DEC C + JR NZ,.loop_3 +;------------------------[^ 3]---------- + INC IX ; next counter + INC IX + INC IX + LD A,(IX) + AND A + JR NZ,.loop_2 +;-----------------------------[^ 2]----- + LD A,SYS_PAGE + OUT (SLOT3),A + LD IX,(SYS_PAGE.SCREEN_TABLE) + ; + EX AF,AF' + ADD A,#80 + JR NC,.loop_1 +;----------------------------------[^ 1] + ; Exit + LD A,(SYS_PAGE.COPY_RGADR) + OUT (PORT_Y),A + LD A,(SYS_PAGE.COPY_SLOT3) + OUT (SLOT3),A +.exit: OR A + RET + ; + ;DE - ᮤন SYS_PAGE.SCREEN_TABLE +Test_SCREEN_TABLE: + LD HL,SCREEN_TABLES.SCORPION + AND A + SBC HL,DE + LD IX,FN_SYNC.INT_SCORP + RET Z + ; + LD HL,SCREEN_TABLES.ORIGINAL + AND A + SBC HL,DE + LD IX,FN_SYNC.INT_ORIG + RET Z + ; + LD HL,SCREEN_TABLES.PENTAGON + AND A + SBC HL,DE + LD IX,FN_SYNC.INT_PENT + RET Z + AND A + RET +;--- Screen data table 1: counter1, data1 .. counterX, dataX +SCREEN_TABLES: +; | ᫮ | 祭 | +; | ப | | +; | /2 | ப | +.SCR: DB 41 , #F8 + DB 3 , #FC + DB 4 , #FC + DB 7 , #FC + DB 9 , #F8 + DB 0 + +;.SCR: DB 41,#F8, 3,#FC, 4,#FC, 7,#FC, 9,#F8, 0 +.INT: DB 40,#FC, 2,#FD, 6,#FC, 7,#FC, 9,#FC, 0 +.INT_SC: DB 41,#F8, 1,#FD, 6,#FC, 7,#FC, 9,#F8, 0 +.BLN: DB 41,#FC, 3,#FC, 4,#FC, 7,#FC, 9,#FC, 0 +.SNC: DB 41,#FC, 3,#FC, 4,#FC, 7,#FC, 9,#FC, 0 +.RES: DB 41,#F8, 3,#FE, 4,#FE, 7,#FE, 9,#F8, 0 +;--------------------------------------- + +;--- Screen data tables 2: counter1, data address1 .. counterX, data addressX +; +; | - | 祭 | +; | ப | | +; | | ப | +.PENTAGON: DB 33 : DW .SCR + DB 1 : DW .INT ; DW .BLN + DB 3 : DW .SNC + DB 1 : DW .BLN + DB 1 : DW .SCR + DB 1 : DW .RES + DB 0 ; end +.SCORPION: DB 31 : DW .SCR + DB 1 : DW .INT_SC + DB 1 : DW .SCR + DB 1 : DW .SNC + DB 3 : DW .SNC + DB 1 : DW .BLN + DB 2 : DW .RES + DB 0 ; end +.ORIGINAL: DB 33 : DW .SCR + DB 1 : DW .SNC + DB 1 : DW .INT + DB 2 : DW .SNC + DB 1 : DW .BLN + DB 1 : DW .SCR + DB 1 : DW .RES + DB 0 ; end +;--------------------------------------- + +;************************************ +; +; ࠭ ⠡ +; +;⥪⮢ 80x32 +LP_SCR_80: + DB 40,32,0,0,%0001'1011,0,0,0 + BLOCK 8,0 + +;⥪⮢ 40x32 +LP_SCR_40: + DB 40,32,0,0,%0111'1011,0,0,0 + BLOCK 8,0 + +;ᯥ㬮᪮ 32x24 +LP_SCR_32: + DB 32,24,4,4,%0011'0000,1,0,0 + BLOCK 8,0 + +;⥪⮢ 64x24 +LP_SCR_64: + DB 32,24,4,4,%1001'1011,0,0,0 + BLOCK 8,0 + +;᪮ 0 +PIC_320X256_1: + DB 40,32,0,0,%0010'0000,0,8,0 + BLOCK 8,0 + +;᪮ 1 +PIC_320X256_2: + DB 40,32,0,0,%0110'0000,0,48,0 + BLOCK 8,0 + +;************************************ +; + + diff --git a/src/bios/exp/FUNC_SERVICE.asm b/bios/exp/FUNC_SERVICE.asm similarity index 95% rename from src/bios/exp/FUNC_SERVICE.asm rename to bios/exp/FUNC_SERVICE.asm index b513056..8f7dd8e 100644 --- a/src/bios/exp/FUNC_SERVICE.asm +++ b/bios/exp/FUNC_SERVICE.asm @@ -1,637 +1,637 @@ -; DISPLAY "Service" -; !FIXIT , 室, ७ - -; ; ࠭ 䮩 Sp97, ᮢ⨬ ॢ ண -; PG_SP1 equ #EC -; PG_SP2 equ #EE -; PG_AY equ #EA -; ; - -; ;!TODO , , 墠 ᨫ BIOS -; PG_Sp2000 EQU #FE -; PG_Sp2000_REINIT EQU #FD -; - -RST_CONF: -;--[] ZX Spectrum -.AY8910: CALL .ACC_OFF - LD DE,ACEX.Config_ID.Sp97_AY - JR .INT_PLD - ;LD A,CNF_PORT.CNF_1 - ;OUT (SYS_PORT.ON),A - ;RET -;--[] - -;--[] Sprinter ZX -.SP97_1: CALL .ACC_OFF - LD DE,ACEX.Config_ID.Sp97_1 - JR .INT_PLD -;--[] - -;--[] -.SP97_2: CALL .ACC_ON - LD DE,ACEX.Config_ID.Sp97_2 - JR .INT_PLD -;--[] - - -;--[] -;[x] -.SP2000: CALL .ACC_ON - LD DE,ACEX.Config_ID.Sp2000 - JR .INT_PLD -;--[] - - -;--[] -.CUSTOM: LD C,A - ; ⠭ 㫥 ⮢ - LD A,CNF_PORT.CNF_0 - OUT (SYS_PORT.ON),A - LD A,C - ; - CP #80 ; ⥯  ᫮ ண - JR NC,.CHOOSE_CNF - ; only for old FLEX10K soft compatible -.crutch: LD C,SLOT3 - IN B,(C) - OUT (C),A ; PAGE 訢 - LD DE,(#C090) ; PLD-ID - OUT (C),B ; RET page -;--[] ;JR INT_PLD -.INT_PLD: ; only for old FLEX10K soft compatible - LD C,SLOT3 - IN B,(C) - LD A,SYS_PAGE - OUT (C),A - LD (SYS_PAGE.CONFIG_BYTE),DE - OUT (C),B - ; - LD A,E ; config-byte - CP #FF - LD A,#80 - JR Z,.YES_CBL - XOR A -.YES_CBL: LD BC,SP_SND.CBL.SYS_PORT - OUT (C),A - ; - LD A,E ; config-byte - OR #FE ;!HARDCODE - LD BC,Port_All_Mode ; SYSTEM Spectrum/Sprinter - OUT (C),A - ; - LD A,#3C - OUT (FDC_93.DrvCTRL),A - ; ⠭ ⮢ - 室, 㦭 - ;LD C,SLOT3 - ;IN B,(C) - ; LD A,SYS_PAGE - ; OUT (C),A - ; LD A,(SYS_PAGE.CONFIG_DE.CNF_PORT) - ;OUT (C),B - ;OUT (SYS_PORT.ON),A - XOR A - RET - ; - ;[x] -.CHOOSE_CNF: ; [x] bug with "free zx pages" - LD A,high ZX_MEM_PORT.Scorpion - IN A,(ZX_MEM_PORT) - RRCA - LD A,C - JR C,.not_vRAM_page - ; - IN A,(SLOT3) - CP C - LD A,C - JR Z,.crutch - ; [x] -.not_vRAM_page: CP ACEX.Config_PG.Sp2000_SoftRestartNow - JP Z,.ReturnSoftReset - ; - CP ACEX.Config_PG.Sp2000_AcexSetUpNow - JR Z,.INIT_ACEX - ; - CP ACEX.Config_PG.Sp2000_SetUp - JR Z,.SP2000 - ; - CP ACEX.Config_PG.Sp2000_SoftRestartSet - JR Z,.SetUpSoftReset - ; - CP ACEX.Config_PG.Sp2000_AcexSetUpSet - JR Z,.SetUpHardReset - ; - ; only for old FLEX10K soft compatible - CP ACEX.Config_PG.Sp97_1 - LD DE,ACEX.Config_ID.Sp97_1 - JR Z,.INT_PLD - ; - CP ACEX.Config_PG.Sp97_2 - LD DE,ACEX.Config_ID.Sp97_2 - JR Z,.INT_PLD - ; - CP ACEX.Config_PG.Sp97_AY - LD DE,ACEX.Config_ID.Sp97_AY - JR Z,.INT_PLD - SCF - RET - ; -; B - ID ࠬ bitstream - ;[x] -.INIT_ACEX: LD C,B - LD B,high BIOS.REINIT.HARD_RESET - CALL .PrepareResetSetUp - LD B,C - CALL .PrepareHardReset - JR C,.INIT_ACEX.ERROR - LD B,high BIOS.REINIT.HARD_RESET - JR .set_ret_addr - -; DI -; IN A,(SLOT3) ; ࠭塞 ⪭⮩ ࠭ -; PUSH AF -; LD A,Spec_Page -; OUT (SLOT3),A -; ; ஢塞 ࠧ 䮩 砥 ࠭ -; LD HL,Spec_Page.bitstream_pages -; LD A,B -; AND A -; JR Z,.INIT_ACEX.ReloadConfFromROM -; ; -; CALL EMM.GetMemBlkPages -; LD A,B -; JR C,.INIT_ACEX.ERROR -; CP BitStream_SizeInPages+1 ; ⢮ ࠭ ਬ -; JR NC,.INIT_ACEX.ERROR -; LD A,(Spec_Page.bitstream_pages) -; INC A -; JR Z,.INIT_ACEX.ERROR -; ; -; .INIT_ACEX.ReloadConfFromROM: -; ; 뢠 Spec_Page ண -; LD HL,.INIT_ACEX.PROGRAM -; LD DE,Spec_Page.init_acex -; LD BC,.INIT_ACEX.PROGRAM.Size -; LDIR -; ; ᫨ ZF=0, 楤 ᤥ १ BIOS, -; CALL Spec_Page.init_acex -; LD B,high BIOS.REINIT.HARD_RESET -; POP HL -; ; -; ;室: B - ࠬ 㭪樨 BIOS REINIT -; ; H - Spec_Page.page_3 -; .INIT_ACEX.ifSoftreset: -; ; ࠭塞 ⪭ ࠭ Spec_Page -; IN A,(SLOT0) -; LD E,A -; IN A,(SLOT1) -; LD D,A -; IN A,(SLOT2) -; ;POP HL ; ⠭ ⪭⮩ ࠭ -; LD L,A -; LD (Spec_Page.page_0),DE -; LD (Spec_Page.page_2),HL -; ; -; ; 뢠 㭪 ࠭塞 Spec_Page -; POP DE -; LD HL,RST_18_1.exit -; XOR A -; SBC HL,DE -; JR NZ,.set_ret ; NZ - ᫨ 맮 RST #18 -; POP DE ; ᫨ 맮 RST 8 -; INC A -; .set_ret: LD (Spec_Page.RET_addr),DE -; ; A=0 - SYS_PORT.ON -; ; A=1 - SYS_PORT.OFF -; LD (Spec_Page.Reload_Version),A -; LD (Spec_Page.Stack_Point),SP -; ; -; LD A,high BIOS.REINIT.HARD_RESET -; CP B -; JR NZ,.reinit -; ; ⠭ HARD reset -; LD HL,Spec_Page.flag_R -; LD (HL),"R" -; INC HL -; LD (HL),"S" -; INC HL -; LD (HL),"T" -; ; -; ; .. ... ... .. -; ;LD BC,BIOS.REINIT.HARD_RESET -; .reinit: JP REINIT - ; -.SetUpHardReset: - LD C,B - LD B,high BIOS.REINIT.HARD_RESET - CALL .PrepareResetSetUp - LD (Spec_Page.RET_addr),DE - LD A,#FF - LD (Spec_Page.Reload_Version),A - LD B,C - CALL .PrepareHardReset - JR .INIT_ACEX.ERROR ; ଠ 室 砥 - ; -.ReturnSoftReset: - CALL .PrepareSoftReset - CALL .PrepareResetSetUp - ; 뢠 㭪 ࠭塞 Spec_Page -.set_ret_addr: POP DE - LD HL,RST_18_1.exit - XOR A - SBC HL,DE - JR NZ,.set_ret ; NZ - ᫨ 맮 RST #18 - POP DE ; ᫨ 맮 RST 8 - INC A -.set_ret: LD (Spec_Page.RET_addr),DE - ; A=0 - SYS_PORT.ON - ; A=1 - SYS_PORT.OFF - LD (Spec_Page.Reload_Version),A - LD (Spec_Page.Stack_Point),SP - JP REINIT - ; -.SetUpSoftReset: - PUSH DE - CALL .PrepareSoftReset - CALL .PrepareResetSetUp - POP DE - LD (Spec_Page.RET_addr),DE - LD A,#FF - LD (Spec_Page.Reload_Version),A - LD A,(Spec_Page.page_3) - OUT (SLOT3),A - RET - - ; DI - ; LD A,ACEX.RET_PORT - ; LD B,Spec_Page - ; CALL SET_PORTS - ; ; - ; ; ⠪ ⭮ - ; IN A,(SLOT3) ; ࠭塞 ⪭⮩ ࠭ - ; LD H,A - ; LD A,Spec_Page - ; OUT (SLOT3),A - ; ; - ; LD B,high BIOS.REINIT.SOFT_RESET - ; JR .INIT_ACEX.ifSoftreset - ; - ;;; -.INIT_ACEX.ERROR: - LD A,(Spec_Page.page_3) - OUT (SLOT3),A - ;SCF - RET -; -;--[] -.ACC_OFF: LD BC,Port_All_Mode - IN A,(C) - AND Port_All_Mode.DEFAULT - Port_All_Mode.SPECTRUM_MODE_OFF - OUT (C),A - RET - ; -.ACC_ON: LD BC,Port_All_Mode - IN A,(C) - OR 1 ; ACC_ON - OUT (C),A - RET -;--[] -; -.INIT_ACEX.PROGRAM: - DISP Spec_Page.init_acex - ; - SAFE_PORTY - IN A,(FastRAM.ON) - ; IN A,(SLOT1) - ; LD (.slot1_page),A - ; - LD A,#FE ; ⮡ ஢, 뢠 ᫥ CALL NZ,.INIT_ACEX.PROGRAM.LOAD - ; ZF 뢠饩 楤 - CALL NZ,.INIT_ACEX.PROGRAM.LOAD ; ᫨ RAM_BLOCK ID ࠢ 0, 믮 - INC A ; 䫠 ZF=0 㧨 ROM - ; -.INIT_ACEX.PROGRAM.SET_KEYS: - LD A,3 - OUT (FastRAM.SLOT0),A ; ࠭ = 3 - ; - LD HL,.INIT_ACEX.Reload_String ; 䫠 १㧪 - - JR Z,.skip ; ⠭ 䫠 १㧪 - - INC L ; ࠥ 䫠 १㧪 - -.skip: LD DE,ACEX.LOADER.String_Address-#C000 - LD BC,#10 - LDIR - - LD HL,#FFFF ; ⮫쪮 ࢮ १㧪 - ;LD HL,ACEX.LOADER.Reload_Flag ; १㧪 - LD (ACEX.LOADER.Reload_Flag_Address-#C000),HL - ; -.INIT_ACEX.PROGRAM.END: - XOR A - OUT (FastRAM.SLOT0),A - IN A,(FastRAM.OFF) -; .slot1_page+1: LD A,0 - LD A,(Spec_Page.page_1) - OUT (SLOT1),A - RET - ; - ; -.INIT_ACEX.PROGRAM.LOAD: - XOR A ; ࠭ - LD HL,Spec_Page.bitstream_pages - OUT (FastRAM.SLOT0),A ; ࠭ = 0 - INC A -.INIT_ACEX.PROGRAM.load_loop: - EX AF,AF' - LD A,(HL) - INC HL - CP #FF - RET Z - OUT (SLOT1),A ; ࠭ 묨 䠩 - EX AF,AF' - ; - ; ४뢠 #3000 ⮢ (0) = #1000 - EXX - LD HL,#4000 - LD DE,#1000 - LD BC,#3000 - LDIR - ; 뢠 #1000 ⮢ (1) = #0000 - ; HL = #7000 - OUT (FastRAM.SLOT0),A ; ࠭ = 1 - INC A - ; - LD D,C ; LD DE,0 - LD B,#10 ; LD BC,#1000 - LDIR - EXX - JR .INIT_ACEX.PROGRAM.load_loop - - -.INIT_ACEX.Reload_String: - DB ACEX.RELOAD_STRING - ; - ENT -.INIT_ACEX.PROGRAM.Size EQU $-.INIT_ACEX.PROGRAM -;--[] -.PrepareSoftReset: - LD A,ACEX.RET_PORT - LD B,Spec_Page - CALL SET_PORTS - LD B,high BIOS.REINIT.SOFT_RESET - RET - -.PrepareResetSetUp: - DI - ; ࠭塞 ⪭ ࠭ Spec_Page - IN A,(SLOT3) - LD H,A - LD A,Spec_Page - OUT (SLOT3),A - ; - IN A,(SLOT2) - LD L,A - LD (Spec_Page.page_2),HL - IN A,(SLOT0) - LD (Spec_Page.page_0),A - IN A,(SLOT1) - LD (Spec_Page.page_1),A - ; - LD A,high BIOS.REINIT.HARD_RESET - CP B - LD HL,Spec_Page.flag_R - JR NZ,.kill_flag - ; ⠭ HARD reset - LD (HL),"R" - INC HL -.kill_flag: LD (HL),"S" - INC HL - LD (HL),"T" - RET - ; - -; B - ramblock bitstream -.PrepareHardReset: - ; ஢塞 ࠧ 䮩 砥 ࠭ - LD HL,Spec_Page.bitstream_pages - LD A,B - AND A - JR Z,.INIT_ACEX.ReloadConfFromROM - ; - CALL EMM.GetMemBlkPages - RET C ; ERROR - LD A,BitStream_SizeInPages ; ⢮ ࠭ ਬ - CP B - RET C ; ERROR - LD A,(Spec_Page.bitstream_pages) - INC A - SCF - RET Z ; ERROR - ; -.INIT_ACEX.ReloadConfFromROM: - ; 뢠 Spec_Page ண - LD HL,.INIT_ACEX.PROGRAM - LD DE,Spec_Page.init_acex - LD BC,.INIT_ACEX.PROGRAM.Size - LDIR - ; ᫨ ZF=0, 楤 ᤥ १ BIOS, - JP Spec_Page.init_acex -;--[] -;*************************************** - - -;[x] -;--------------------------[;!TODO ]--------------------------; -; B - ࠬ -; B = 1 - RESTART. -; B = 2 - Soft reset -; B = 3 - Hard reset -; B = 4 - Free memory except ZX pages -REINIT: DEC B - JR Z,.Restart ; 1 - DEC B - JR Z,.SoftReset ; 2 - DEC B - JR Z,.HardReset ; 3 - DEC B - SCF - RET NZ - ; ; 4 -.FreeNoZxMem: DI - LD C,SLOT3 - IN B,(C) - LD A,SYS_PAGE - OUT (C),A - LD (SYS_PAGE.SP_SAVE),SP - LD SP,SYS_PAGE.SYS_SP - PUSH BC - ; ⨬ - LD HL,SYS_PAGE.SHARED_BUFFER_256b - LD DE,SYS_PAGE.SHARED_BUFFER_256b + 1 - LD BC,255 - LD (HL),0 - LDIR - ; - LD IX,SYS_PAGE.Block_IDs - LD H,high SYS_PAGE.RAM_TABLE - LD D,high SYS_PAGE.SHARED_BUFFER_256b - LD BC,2*256 + #FF ; 2 = vRAM VROM ID's - CALL SAVE_CHAINS - ; - CALL EMM.InitMem - ; - LD HL,SYS_PAGE.SHARED_BUFFER_256b - LD DE,SYS_PAGE.RAM_TABLE - CALL RESTORE_CHAINS - ; CF=0 - POP BC - LD SP,(SYS_PAGE.SP_SAVE) - OUT (C),B - RET - -;[x] -.Restart: DI - XOR A - LD BC,ZX_MEM_PORT.Scorpion - OUT (C),A - LD B,high ZX_MEM_PORT.Pentagon - OUT (C),A - OUT (RGADR),A - OUT (RGMOD),A - OUT (SLOT0),A - ; [ ] 16/09/24 free zx pages! - ;LD A,5 - ;OUT (SLOT1),A - ;LD A,2 - ;OUT (SLOT2),A - OUT (SLOT2),A - DEC A - OUT (SLOT1),A - ; - LD A,DCP_PAGE - OUT (SLOT3),A - JP 0 ;Restart -; - -; -.SoftReset: DI - LD A,#10 - LD BC,ZX_MEM_PORT.Scorpion - OUT (C),A ; 8- ࠭ !! - ; - LD A,RESET_PAGE - OUT (SLOT3),A - LD A,CNF_PORT.TURBO.OFF - OUT (SYS_PORT.ROM),A -.loop2: LD (#C000),A ; Soft RESET !!! - JR .loop2 -; - -;[x] -.HardReset: - DI - LD A,SYS_PORT.CNF_0 - OUT (SYS_PORT.ROM),A - ; - LD A,Z84.REG.Misc_Ctrl - OUT (Z84.SYS.Control),A - LD A,%0000'0011 ; CS1/CS0 enabled - OUT (Z84.SYS.Data),A - ; - LD A,DCP_PAGE - OUT (SLOT1),A ; set DCP page - LD A,ACEX.RESET - LD (#4400),A ; open for WR -.loop: LD BC,#0100 ; 横 - OUT (C),C - LD B,C - OUT (C),C - JR .loop ; 横! -; -;----------------------------------------------------------------------; -; 室: H - RAM_TABLE -; D - Buffer for RAM_TABLE -; IX - 㪠⥫ ᫥⥫쭮 RAM BLOCK ID -; B - - RAM BLOCK ID ᫥⥫쭮 -; C - #FF (⮡ LDI DJNZ 稪) -SAVE_CHAINS: LD A,(IX) - INC IX - OR A - LD L,A - CALL NZ,COPY_CHAIN - DJNZ SAVE_CHAINS - RET -; 室: H - RAM_TABLE -; L - RAM BLOCK ID -; D - Buffer for RAM_TABLE -COPY_CHAIN: LD E,L - LDI - DEC L - LD L,(HL) - INC L - RET Z - DEC L - JR COPY_CHAIN -;--------------; -; 室: HL - RAM_TABLE 㤠 ஢ -; DE - RAM_TABLE -RESTORE_CHAINS: XOR A -.loop: CP (HL) - JR Z,.NoCopy - LD E,L - LDI - DEC L -.NoCopy: INC L - JR NZ,.loop - RET -;----------------------------------------------------------------------; - - -;----------------------------------------------------------------------; -; ਠ ᢮ ࠭ ᯥ㬠 १ RAM BLK ID 1 -;----------------------------------------------------------------------; -; JR Z,.HardReset ;3 -; DEC B -; .ReinitZXpages: ;4 -; LD DE,RESERVED_PAGES ; ⠡ ⥬ ࠭ -; LD HL,SYS_PAGE.RAM_TABLE ; FAT . - -; LD C,SLOT3 -; IN B,(C) -; LD A,SYS_PAGE -; OUT (SLOT3),A - -; LD A,(DE) -; .zxloop: -; CP #FF -; JR Z,.endzxloop -; INC DE -; LD L,A - -; LD A,(HL) -; AND A -; JR NZ,.errorzxloop - -; LD A,(DE) -; LD (HL),A -; JR .zxloop - -; .errorzxloop: -; DEC DE -; LD HL,-RESERVED_PAGES-1 -; ADD HL,DE -; JR NC,.errorzxloop_noChanges - -; DEC DE -; LD H,high SYS_PAGE.RAM_TABLE -; LD A,(DE) -; LD L,A -; LD A,#FF -; LD (HL),A -; .errorzxloop_noChanges: -; SCF -; .endzxloop: -; OUT (C),B -; RET - -;----------------------------------------------------------------------; +; DISPLAY "Service" +; !FIXIT , 室, ७ + +; ; ࠭ 䮩 Sp97, ᮢ⨬ ॢ ண +; PG_SP1 equ #EC +; PG_SP2 equ #EE +; PG_AY equ #EA +; ; + +; ;!TODO , , 墠 ᨫ BIOS +; PG_Sp2000 EQU #FE +; PG_Sp2000_REINIT EQU #FD +; + +RST_CONF: +;--[] ZX Spectrum +.AY8910: CALL .ACC_OFF + LD DE,ACEX.Config_ID.Sp97_AY + JR .INT_PLD + ;LD A,CNF_PORT.CNF_1 + ;OUT (SYS_PORT.ON),A + ;RET +;--[] + +;--[] Sprinter ZX +.SP97_1: CALL .ACC_OFF + LD DE,ACEX.Config_ID.Sp97_1 + JR .INT_PLD +;--[] + +;--[] +.SP97_2: CALL .ACC_ON + LD DE,ACEX.Config_ID.Sp97_2 + JR .INT_PLD +;--[] + + +;--[] +;[x] +.SP2000: CALL .ACC_ON + LD DE,ACEX.Config_ID.Sp2000 + JR .INT_PLD +;--[] + + +;--[] +.CUSTOM: LD C,A + ; ⠭ 㫥 ⮢ + LD A,CNF_PORT.CNF_0 + OUT (SYS_PORT.ON),A + LD A,C + ; + CP #80 ; ⥯  ᫮ ண + JR NC,.CHOOSE_CNF + ; only for old FLEX10K soft compatible +.crutch: LD C,SLOT3 + IN B,(C) + OUT (C),A ; PAGE 訢 + LD DE,(#C090) ; PLD-ID + OUT (C),B ; RET page +;--[] ;JR INT_PLD +.INT_PLD: ; only for old FLEX10K soft compatible + LD C,SLOT3 + IN B,(C) + LD A,SYS_PAGE + OUT (C),A + LD (SYS_PAGE.CONFIG_BYTE),DE + OUT (C),B + ; + LD A,E ; config-byte + CP #FF + LD A,#80 + JR Z,.YES_CBL + XOR A +.YES_CBL: LD BC,SP_SND.CBL.SYS_PORT + OUT (C),A + ; + LD A,E ; config-byte + OR #FE ;!HARDCODE + LD BC,Port_All_Mode ; SYSTEM Spectrum/Sprinter + OUT (C),A + ; + LD A,#3C + OUT (FDC_93.DrvCTRL),A + ; ⠭ ⮢ - 室, 㦭 + ;LD C,SLOT3 + ;IN B,(C) + ; LD A,SYS_PAGE + ; OUT (C),A + ; LD A,(SYS_PAGE.CONFIG_DE.CNF_PORT) + ;OUT (C),B + ;OUT (SYS_PORT.ON),A + XOR A + RET + ; + ;[x] +.CHOOSE_CNF: ; [x] bug with "free zx pages" + LD A,high ZX_MEM_PORT.Scorpion + IN A,(ZX_MEM_PORT) + RRCA + LD A,C + JR C,.not_vRAM_page + ; + IN A,(SLOT3) + CP C + LD A,C + JR Z,.crutch + ; [x] +.not_vRAM_page: CP ACEX.Config_PG.Sp2000_SoftRestartNow + JP Z,.ReturnSoftReset + ; + CP ACEX.Config_PG.Sp2000_AcexSetUpNow + JR Z,.INIT_ACEX + ; + CP ACEX.Config_PG.Sp2000_SetUp + JR Z,.SP2000 + ; + CP ACEX.Config_PG.Sp2000_SoftRestartSet + JR Z,.SetUpSoftReset + ; + CP ACEX.Config_PG.Sp2000_AcexSetUpSet + JR Z,.SetUpHardReset + ; + ; only for old FLEX10K soft compatible + CP ACEX.Config_PG.Sp97_1 + LD DE,ACEX.Config_ID.Sp97_1 + JR Z,.INT_PLD + ; + CP ACEX.Config_PG.Sp97_2 + LD DE,ACEX.Config_ID.Sp97_2 + JR Z,.INT_PLD + ; + CP ACEX.Config_PG.Sp97_AY + LD DE,ACEX.Config_ID.Sp97_AY + JR Z,.INT_PLD + SCF + RET + ; +; B - ID ࠬ bitstream + ;[x] +.INIT_ACEX: LD C,B + LD B,high BIOS.REINIT.HARD_RESET + CALL .PrepareResetSetUp + LD B,C + CALL .PrepareHardReset + JR C,.INIT_ACEX.ERROR + LD B,high BIOS.REINIT.HARD_RESET + JR .set_ret_addr + +; DI +; IN A,(SLOT3) ; ࠭塞 ⪭⮩ ࠭ +; PUSH AF +; LD A,Spec_Page +; OUT (SLOT3),A +; ; ஢塞 ࠧ 䮩 砥 ࠭ +; LD HL,Spec_Page.bitstream_pages +; LD A,B +; AND A +; JR Z,.INIT_ACEX.ReloadConfFromROM +; ; +; CALL EMM.GetMemBlkPages +; LD A,B +; JR C,.INIT_ACEX.ERROR +; CP BitStream_SizeInPages+1 ; ⢮ ࠭ ਬ +; JR NC,.INIT_ACEX.ERROR +; LD A,(Spec_Page.bitstream_pages) +; INC A +; JR Z,.INIT_ACEX.ERROR +; ; +; .INIT_ACEX.ReloadConfFromROM: +; ; 뢠 Spec_Page ண +; LD HL,.INIT_ACEX.PROGRAM +; LD DE,Spec_Page.init_acex +; LD BC,.INIT_ACEX.PROGRAM.Size +; LDIR +; ; ᫨ ZF=0, 楤 ᤥ १ BIOS, +; CALL Spec_Page.init_acex +; LD B,high BIOS.REINIT.HARD_RESET +; POP HL +; ; +; ;室: B - ࠬ 㭪樨 BIOS REINIT +; ; H - Spec_Page.page_3 +; .INIT_ACEX.ifSoftreset: +; ; ࠭塞 ⪭ ࠭ Spec_Page +; IN A,(SLOT0) +; LD E,A +; IN A,(SLOT1) +; LD D,A +; IN A,(SLOT2) +; ;POP HL ; ⠭ ⪭⮩ ࠭ +; LD L,A +; LD (Spec_Page.page_0),DE +; LD (Spec_Page.page_2),HL +; ; +; ; 뢠 㭪 ࠭塞 Spec_Page +; POP DE +; LD HL,RST_18_1.exit +; XOR A +; SBC HL,DE +; JR NZ,.set_ret ; NZ - ᫨ 맮 RST #18 +; POP DE ; ᫨ 맮 RST 8 +; INC A +; .set_ret: LD (Spec_Page.RET_addr),DE +; ; A=0 - SYS_PORT.ON +; ; A=1 - SYS_PORT.OFF +; LD (Spec_Page.Reload_Version),A +; LD (Spec_Page.Stack_Point),SP +; ; +; LD A,high BIOS.REINIT.HARD_RESET +; CP B +; JR NZ,.reinit +; ; ⠭ HARD reset +; LD HL,Spec_Page.flag_R +; LD (HL),"R" +; INC HL +; LD (HL),"S" +; INC HL +; LD (HL),"T" +; ; +; ; .. ... ... .. +; ;LD BC,BIOS.REINIT.HARD_RESET +; .reinit: JP REINIT + ; +.SetUpHardReset: + LD C,B + LD B,high BIOS.REINIT.HARD_RESET + CALL .PrepareResetSetUp + LD (Spec_Page.RET_addr),DE + LD A,#FF + LD (Spec_Page.Reload_Version),A + LD B,C + CALL .PrepareHardReset + JR .INIT_ACEX.ERROR ; ଠ 室 砥 + ; +.ReturnSoftReset: + CALL .PrepareSoftReset + CALL .PrepareResetSetUp + ; 뢠 㭪 ࠭塞 Spec_Page +.set_ret_addr: POP DE + LD HL,RST_18_1.exit + XOR A + SBC HL,DE + JR NZ,.set_ret ; NZ - ᫨ 맮 RST #18 + POP DE ; ᫨ 맮 RST 8 + INC A +.set_ret: LD (Spec_Page.RET_addr),DE + ; A=0 - SYS_PORT.ON + ; A=1 - SYS_PORT.OFF + LD (Spec_Page.Reload_Version),A + LD (Spec_Page.Stack_Point),SP + JP REINIT + ; +.SetUpSoftReset: + PUSH DE + CALL .PrepareSoftReset + CALL .PrepareResetSetUp + POP DE + LD (Spec_Page.RET_addr),DE + LD A,#FF + LD (Spec_Page.Reload_Version),A + LD A,(Spec_Page.page_3) + OUT (SLOT3),A + RET + + ; DI + ; LD A,ACEX.RET_PORT + ; LD B,Spec_Page + ; CALL SET_PORTS + ; ; + ; ; ⠪ ⭮ + ; IN A,(SLOT3) ; ࠭塞 ⪭⮩ ࠭ + ; LD H,A + ; LD A,Spec_Page + ; OUT (SLOT3),A + ; ; + ; LD B,high BIOS.REINIT.SOFT_RESET + ; JR .INIT_ACEX.ifSoftreset + ; + ;;; +.INIT_ACEX.ERROR: + LD A,(Spec_Page.page_3) + OUT (SLOT3),A + ;SCF + RET +; +;--[] +.ACC_OFF: LD BC,Port_All_Mode + IN A,(C) + AND Port_All_Mode.DEFAULT - Port_All_Mode.SPECTRUM_MODE_OFF + OUT (C),A + RET + ; +.ACC_ON: LD BC,Port_All_Mode + IN A,(C) + OR 1 ; ACC_ON + OUT (C),A + RET +;--[] +; +.INIT_ACEX.PROGRAM: + DISP Spec_Page.init_acex + ; + SAFE_PORTY + IN A,(FastRAM.ON) + ; IN A,(SLOT1) + ; LD (.slot1_page),A + ; + LD A,#FE ; ⮡ ஢, 뢠 ᫥ CALL NZ,.INIT_ACEX.PROGRAM.LOAD + ; ZF 뢠饩 楤 + CALL NZ,.INIT_ACEX.PROGRAM.LOAD ; ᫨ RAM_BLOCK ID ࠢ 0, 믮 + INC A ; 䫠 ZF=0 㧨 ROM + ; +.INIT_ACEX.PROGRAM.SET_KEYS: + LD A,3 + OUT (FastRAM.SLOT0),A ; ࠭ = 3 + ; + LD HL,.INIT_ACEX.Reload_String ; 䫠 १㧪 - + JR Z,.skip ; ⠭ 䫠 १㧪 - + INC L ; ࠥ 䫠 १㧪 - +.skip: LD DE,ACEX.LOADER.String_Address-#C000 + LD BC,#10 + LDIR + + LD HL,#FFFF ; ⮫쪮 ࢮ १㧪 + ;LD HL,ACEX.LOADER.Reload_Flag ; १㧪 + LD (ACEX.LOADER.Reload_Flag_Address-#C000),HL + ; +.INIT_ACEX.PROGRAM.END: + XOR A + OUT (FastRAM.SLOT0),A + IN A,(FastRAM.OFF) +; .slot1_page+1: LD A,0 + LD A,(Spec_Page.page_1) + OUT (SLOT1),A + RET + ; + ; +.INIT_ACEX.PROGRAM.LOAD: + XOR A ; ࠭ + LD HL,Spec_Page.bitstream_pages + OUT (FastRAM.SLOT0),A ; ࠭ = 0 + INC A +.INIT_ACEX.PROGRAM.load_loop: + EX AF,AF' + LD A,(HL) + INC HL + CP #FF + RET Z + OUT (SLOT1),A ; ࠭ 묨 䠩 + EX AF,AF' + ; + ; ४뢠 #3000 ⮢ (0) = #1000 + EXX + LD HL,#4000 + LD DE,#1000 + LD BC,#3000 + LDIR + ; 뢠 #1000 ⮢ (1) = #0000 + ; HL = #7000 + OUT (FastRAM.SLOT0),A ; ࠭ = 1 + INC A + ; + LD D,C ; LD DE,0 + LD B,#10 ; LD BC,#1000 + LDIR + EXX + JR .INIT_ACEX.PROGRAM.load_loop + + +.INIT_ACEX.Reload_String: + DB ACEX.RELOAD_STRING + ; + ENT +.INIT_ACEX.PROGRAM.Size EQU $-.INIT_ACEX.PROGRAM +;--[] +.PrepareSoftReset: + LD A,ACEX.RET_PORT + LD B,Spec_Page + CALL SET_PORTS + LD B,high BIOS.REINIT.SOFT_RESET + RET + +.PrepareResetSetUp: + DI + ; ࠭塞 ⪭ ࠭ Spec_Page + IN A,(SLOT3) + LD H,A + LD A,Spec_Page + OUT (SLOT3),A + ; + IN A,(SLOT2) + LD L,A + LD (Spec_Page.page_2),HL + IN A,(SLOT0) + LD (Spec_Page.page_0),A + IN A,(SLOT1) + LD (Spec_Page.page_1),A + ; + LD A,high BIOS.REINIT.HARD_RESET + CP B + LD HL,Spec_Page.flag_R + JR NZ,.kill_flag + ; ⠭ HARD reset + LD (HL),"R" + INC HL +.kill_flag: LD (HL),"S" + INC HL + LD (HL),"T" + RET + ; + +; B - ramblock bitstream +.PrepareHardReset: + ; ஢塞 ࠧ 䮩 砥 ࠭ + LD HL,Spec_Page.bitstream_pages + LD A,B + AND A + JR Z,.INIT_ACEX.ReloadConfFromROM + ; + CALL EMM.GetMemBlkPages + RET C ; ERROR + LD A,BitStream_SizeInPages ; ⢮ ࠭ ਬ + CP B + RET C ; ERROR + LD A,(Spec_Page.bitstream_pages) + INC A + SCF + RET Z ; ERROR + ; +.INIT_ACEX.ReloadConfFromROM: + ; 뢠 Spec_Page ண + LD HL,.INIT_ACEX.PROGRAM + LD DE,Spec_Page.init_acex + LD BC,.INIT_ACEX.PROGRAM.Size + LDIR + ; ᫨ ZF=0, 楤 ᤥ १ BIOS, + JP Spec_Page.init_acex +;--[] +;*************************************** + + +;[x] +;--------------------------[;!TODO ]--------------------------; +; B - ࠬ +; B = 1 - RESTART. +; B = 2 - Soft reset +; B = 3 - Hard reset +; B = 4 - Free memory except ZX pages +REINIT: DEC B + JR Z,.Restart ; 1 + DEC B + JR Z,.SoftReset ; 2 + DEC B + JR Z,.HardReset ; 3 + DEC B + SCF + RET NZ + ; ; 4 +.FreeNoZxMem: DI + LD C,SLOT3 + IN B,(C) + LD A,SYS_PAGE + OUT (C),A + LD (SYS_PAGE.SP_SAVE),SP + LD SP,SYS_PAGE.SYS_SP + PUSH BC + ; ⨬ + LD HL,SYS_PAGE.SHARED_BUFFER_256b + LD DE,SYS_PAGE.SHARED_BUFFER_256b + 1 + LD BC,255 + LD (HL),0 + LDIR + ; + LD IX,SYS_PAGE.Block_IDs + LD H,high SYS_PAGE.RAM_TABLE + LD D,high SYS_PAGE.SHARED_BUFFER_256b + LD BC,2*256 + #FF ; 2 = vRAM VROM ID's + CALL SAVE_CHAINS + ; + CALL EMM.InitMem + ; + LD HL,SYS_PAGE.SHARED_BUFFER_256b + LD DE,SYS_PAGE.RAM_TABLE + CALL RESTORE_CHAINS + ; CF=0 + POP BC + LD SP,(SYS_PAGE.SP_SAVE) + OUT (C),B + RET + +;[x] +.Restart: DI + XOR A + LD BC,ZX_MEM_PORT.Scorpion + OUT (C),A + LD B,high ZX_MEM_PORT.Pentagon + OUT (C),A + OUT (RGADR),A + OUT (RGMOD),A + OUT (SLOT0),A + ; [ ] 16/09/24 free zx pages! + ;LD A,5 + ;OUT (SLOT1),A + ;LD A,2 + ;OUT (SLOT2),A + OUT (SLOT2),A + DEC A + OUT (SLOT1),A + ; + LD A,DCP_PAGE + OUT (SLOT3),A + JP 0 ;Restart +; + +; +.SoftReset: DI + LD A,#10 + LD BC,ZX_MEM_PORT.Scorpion + OUT (C),A ; 8- ࠭ !! + ; + LD A,RESET_PAGE + OUT (SLOT3),A + LD A,CNF_PORT.TURBO.OFF + OUT (SYS_PORT.ROM),A +.loop2: LD (#C000),A ; Soft RESET !!! + JR .loop2 +; + +;[x] +.HardReset: + DI + LD A,SYS_PORT.CNF_0 + OUT (SYS_PORT.ROM),A + ; + LD A,Z84.REG.Misc_Ctrl + OUT (Z84.SYS.Control),A + LD A,%0000'0011 ; CS1/CS0 enabled + OUT (Z84.SYS.Data),A + ; + LD A,DCP_PAGE + OUT (SLOT1),A ; set DCP page + LD A,ACEX.RESET + LD (#4400),A ; open for WR +.loop: LD BC,#0100 ; 横 + OUT (C),C + LD B,C + OUT (C),C + JR .loop ; 横! +; +;----------------------------------------------------------------------; +; 室: H - RAM_TABLE +; D - Buffer for RAM_TABLE +; IX - 㪠⥫ ᫥⥫쭮 RAM BLOCK ID +; B - - RAM BLOCK ID ᫥⥫쭮 +; C - #FF (⮡ LDI DJNZ 稪) +SAVE_CHAINS: LD A,(IX) + INC IX + OR A + LD L,A + CALL NZ,COPY_CHAIN + DJNZ SAVE_CHAINS + RET +; 室: H - RAM_TABLE +; L - RAM BLOCK ID +; D - Buffer for RAM_TABLE +COPY_CHAIN: LD E,L + LDI + DEC L + LD L,(HL) + INC L + RET Z + DEC L + JR COPY_CHAIN +;--------------; +; 室: HL - RAM_TABLE 㤠 ஢ +; DE - RAM_TABLE +RESTORE_CHAINS: XOR A +.loop: CP (HL) + JR Z,.NoCopy + LD E,L + LDI + DEC L +.NoCopy: INC L + JR NZ,.loop + RET +;----------------------------------------------------------------------; + + +;----------------------------------------------------------------------; +; ਠ ᢮ ࠭ ᯥ㬠 १ RAM BLK ID 1 +;----------------------------------------------------------------------; +; JR Z,.HardReset ;3 +; DEC B +; .ReinitZXpages: ;4 +; LD DE,RESERVED_PAGES ; ⠡ ⥬ ࠭ +; LD HL,SYS_PAGE.RAM_TABLE ; FAT . + +; LD C,SLOT3 +; IN B,(C) +; LD A,SYS_PAGE +; OUT (SLOT3),A + +; LD A,(DE) +; .zxloop: +; CP #FF +; JR Z,.endzxloop +; INC DE +; LD L,A + +; LD A,(HL) +; AND A +; JR NZ,.errorzxloop + +; LD A,(DE) +; LD (HL),A +; JR .zxloop + +; .errorzxloop: +; DEC DE +; LD HL,-RESERVED_PAGES-1 +; ADD HL,DE +; JR NC,.errorzxloop_noChanges + +; DEC DE +; LD H,high SYS_PAGE.RAM_TABLE +; LD A,(DE) +; LD L,A +; LD A,#FF +; LD (HL),A +; .errorzxloop_noChanges: +; SCF +; .endzxloop: +; OUT (C),B +; RET + +;----------------------------------------------------------------------; ; \ No newline at end of file diff --git a/src/bios/exp/FUNC_SYS.ASM b/bios/exp/FUNC_SYS.ASM similarity index 100% rename from src/bios/exp/FUNC_SYS.ASM rename to bios/exp/FUNC_SYS.ASM diff --git a/src/bios/exp/ZX_MEM.TXT b/bios/exp/ZX_MEM.TXT similarity index 100% rename from src/bios/exp/ZX_MEM.TXT rename to bios/exp/ZX_MEM.TXT diff --git a/src/bios/loader/bitstream_header.inc b/bios/loader/bitstream_header.inc similarity index 96% rename from src/bios/loader/bitstream_header.inc rename to bios/loader/bitstream_header.inc index 6093006..d8ec35e 100644 --- a/src/bios/loader/bitstream_header.inc +++ b/bios/loader/bitstream_header.inc @@ -1,5 +1,5 @@ -; Header of bitstream which non packed - DB #FF,#FF,#62,#7B,#39,#00;,#FF,#FF ; 1k30 -; Packed: - ;DB #FF,#FF,#62,#7B,#3C,#00;,#01,#FF ; 1k50 +; Header of bitstream which non packed + DB #FF,#FF,#62,#7B,#39,#00;,#FF,#FF ; 1k30 +; Packed: + ;DB #FF,#FF,#62,#7B,#3C,#00;,#01,#FF ; 1k50 ; \ No newline at end of file diff --git a/src/bios/loader/loader.asm b/bios/loader/loader.asm similarity index 93% rename from src/bios/loader/loader.asm rename to bios/loader/loader.asm index 21158c3..2ecd580 100644 --- a/src/bios/loader/loader.asm +++ b/bios/loader/loader.asm @@ -1,169 +1,169 @@ -; -;**********************************; -; ACEX Loading program ; -;**********************************; - MACRO Conf_loader altera_chip -.START: DI - LD BC,#FF*256 + Z84.SYS.Control - XOR A ; Z84.REG.WaitState_Ctrl - register - waits - OUT (C),A ; Z84.SYS.Control - INC C ; LD BC,#FFEF - LD A,4 ; Memory waits set to 1 - OUT (C),A ; Z84.SYS.Data - - DEC C ; Z84.SYS.Control - DEC A ; LD A,3 - 3-nd register - boundaries - OUT (C),A ; Z84.REG.Misc_Ctrl - INC C ; cs0 enable, cs1 enable, 32-Bit CRC disable, reset output enable, Clock Divide-by-two - OUT (C),A ; Z84.SYS.Data - - DEC C ; Z84.SYS.Control - DEC A ; LD A,2 - Z84.REG..CS_Boundary 2-nd register - boundaries - OUT (C),A ; Z84.SYS.Data - INC C - LD A,#FE ; boundaries FFFF..F000 - CS1 - OUT (C),A ; EFFF..0000 - CS0 - - JR .LOOP_S1 -;************************************** - BLOCK #38-$,#FF - JP 0 -;************************************** - -.LOOP_S1: - LD HL,#FEF0 ; !HARDCODE - LD DE,.STRING -.LOOP_S: - LD A,(DE) - CP (HL) - JR NZ,.NO_CNF_RAM - INC E - INC L - JR NZ,.LOOP_S ; !!!!! ਢ離 HL - -; !TODO ? - LD BC,#FF*256 + Z84.SYS.Control - LD A,Z84.REG.CS_Boundary - OUT (C),A ; 0 register - waits - INC C - LD A,#F0 - OUT (C),A ; boundaries FFFF..1000 - CS1 -; ; 0FFF..0000 - CS0 - LD HL,#1000 ; !!!!! Load bitstream from Fast-RAM - - JR .NEW_SHM - -;************************************** - BLOCK #66-$,#FF - JP 0 -;************************************** - -.NO_CNF_RAM: - LD HL,#0100 ; !!!!! Load bitstream from ROM -.NEW_SHM: -;--------------[conf check]------------- - LD A,H ; ࠭塞 訩 砫 , -; 砫 訬 ᮬ = 0 - EXX - LD L,0 - LD H,A - EX AF,AF' - - ; HL ࢮ - LD DE,.Conf_header - LD B,.Conf_header.length -.conf_header_loop: - LD A,(DE) - CP (HL) - JR NZ,.Conf_Packed - INC DE - INC L - DJNZ .conf_header_loop - - ;XOR A - JR .exit_conf_check -.Conf_Packed: - SCF -.exit_conf_check: - EX AF,AF' - EXX -;--------------------------------------- - - LD DE,#FE00 ;!HARDCODE ; !!!!! Check flag "don't erase fast-ram bitstream" - "IM" - LD A,(#FEE0) - CP "I" - JR NZ,.ONES_CONFIG - LD A,(#FEE1) - CP "M" - JR NZ,.ONES_CONFIG - - DEC D ; multiple config! - -.ONES_CONFIG: - LD IY,SP2000_Loader_Flag - ;LD IX,#FFFD - LD IX,ACEX.Config_ID.Sp2000 - -.LOOP1: - LD A,(HL) - - ex af,AF' - ld b,1 - jr nc,.no_packed_loop - ex af,AF' - - LD B,A ; save byte to B to check later if we worked with zero - OR A - JR NZ,.LOOP1A - INC HL - LD C,(HL) ; set counter - jr .LOOP1A -.no_packed_loop: - ex af,AF' -.LOOP1A: -;---[Sending bits to Altera]---[v] - DUP 7 - LD (DE),A - RRCA - EDUP - LD (DE),A -;------------------------------[^] - INC E - - LD A,B ; was it zero? - OR A - JR NZ,.LOOP1E -; it was zero so we need to decrement counter - DEC C - JR NZ,.LOOP1A -; end of the counter reached -.LOOP1E: - INC HL - JR .LOOP1 - -.STRING: DB ACEX.RELOAD_STRING - -.Conf_header: include 'src/bios/Loader/bitstream_header.inc' -.Conf_header.length EQU $-.Conf_header - -;----------------------; - BLOCK #FE-$,#FF -; , ᪮॥ ᥣ, 㤨, ᠬ ⥫ , -; 稪 Sp97 ஬ #C090. -; ⪭ 稪, ⮬ ਣ. -.DEF_SYM: DW ACEX.Config_ID.Sp2000 -;------------------------------[Loader end] - - DEFINE Altera_Chip altera_chip - LUA - local file_path = 'Build/ACEX/' - local file_ext = '.BIN' - local altera_ver = sj.get_define("Altera_Chip") - sj.insert_define("Altera_File", '"' .. file_path .. altera_ver .. file_ext .. '"') - ENDLUA - UNDEFINE Altera_Chip - - INCBIN Altera_File - UNDEFINE Altera_File - ENDM -; +; +;**********************************; +; ACEX Loading program ; +;**********************************; + MACRO Conf_loader altera_chip +.START: DI + LD BC,#FF*256 + Z84.SYS.Control + XOR A ; Z84.REG.WaitState_Ctrl - register - waits + OUT (C),A ; Z84.SYS.Control + INC C ; LD BC,#FFEF + LD A,4 ; Memory waits set to 1 + OUT (C),A ; Z84.SYS.Data + + DEC C ; Z84.SYS.Control + DEC A ; LD A,3 - 3-nd register - boundaries + OUT (C),A ; Z84.REG.Misc_Ctrl + INC C ; cs0 enable, cs1 enable, 32-Bit CRC disable, reset output enable, Clock Divide-by-two + OUT (C),A ; Z84.SYS.Data + + DEC C ; Z84.SYS.Control + DEC A ; LD A,2 - Z84.REG..CS_Boundary 2-nd register - boundaries + OUT (C),A ; Z84.SYS.Data + INC C + LD A,#FE ; boundaries FFFF..F000 - CS1 + OUT (C),A ; EFFF..0000 - CS0 + + JR .LOOP_S1 +;************************************** + BLOCK #38-$,#FF + JP 0 +;************************************** + +.LOOP_S1: + LD HL,#FEF0 ; !HARDCODE + LD DE,.STRING +.LOOP_S: + LD A,(DE) + CP (HL) + JR NZ,.NO_CNF_RAM + INC E + INC L + JR NZ,.LOOP_S ; !!!!! ਢ離 HL + +; !TODO ? + LD BC,#FF*256 + Z84.SYS.Control + LD A,Z84.REG.CS_Boundary + OUT (C),A ; 0 register - waits + INC C + LD A,#F0 + OUT (C),A ; boundaries FFFF..1000 - CS1 +; ; 0FFF..0000 - CS0 + LD HL,#1000 ; !!!!! Load bitstream from Fast-RAM + + JR .NEW_SHM + +;************************************** + BLOCK #66-$,#FF + JP 0 +;************************************** + +.NO_CNF_RAM: + LD HL,#0100 ; !!!!! Load bitstream from ROM +.NEW_SHM: +;--------------[conf check]------------- + LD A,H ; ࠭塞 訩 砫 , +; 砫 訬 ᮬ = 0 + EXX + LD L,0 + LD H,A + EX AF,AF' + + ; HL ࢮ + LD DE,.Conf_header + LD B,.Conf_header.length +.conf_header_loop: + LD A,(DE) + CP (HL) + JR NZ,.Conf_Packed + INC DE + INC L + DJNZ .conf_header_loop + + ;XOR A + JR .exit_conf_check +.Conf_Packed: + SCF +.exit_conf_check: + EX AF,AF' + EXX +;--------------------------------------- + + LD DE,#FE00 ;!HARDCODE ; !!!!! Check flag "don't erase fast-ram bitstream" - "IM" + LD A,(#FEE0) + CP "I" + JR NZ,.ONES_CONFIG + LD A,(#FEE1) + CP "M" + JR NZ,.ONES_CONFIG + + DEC D ; multiple config! + +.ONES_CONFIG: + LD IY,SP2000_Loader_Flag + ;LD IX,#FFFD + LD IX,ACEX.Config_ID.Sp2000 + +.LOOP1: + LD A,(HL) + + ex af,AF' + ld b,1 + jr nc,.no_packed_loop + ex af,AF' + + LD B,A ; save byte to B to check later if we worked with zero + OR A + JR NZ,.LOOP1A + INC HL + LD C,(HL) ; set counter + jr .LOOP1A +.no_packed_loop: + ex af,AF' +.LOOP1A: +;---[Sending bits to Altera]---[v] + DUP 7 + LD (DE),A + RRCA + EDUP + LD (DE),A +;------------------------------[^] + INC E + + LD A,B ; was it zero? + OR A + JR NZ,.LOOP1E +; it was zero so we need to decrement counter + DEC C + JR NZ,.LOOP1A +; end of the counter reached +.LOOP1E: + INC HL + JR .LOOP1 + +.STRING: DB ACEX.RELOAD_STRING + +.Conf_header: include 'bios/Loader/bitstream_header.inc' +.Conf_header.length EQU $-.Conf_header + +;----------------------; + BLOCK #FE-$,#FF +; , ᪮॥ ᥣ, 㤨, ᠬ ⥫ , +; 稪 Sp97 ஬ #C090. +; ⪭ 稪, ⮬ ਣ. +.DEF_SYM: DW ACEX.Config_ID.Sp2000 +;------------------------------[Loader end] + + DEFINE Altera_Chip altera_chip + LUA + local file_path = 'Build/ACEX/' + local file_ext = '.BIN' + local altera_ver = sj.get_define("Altera_Chip") + sj.insert_define("Altera_File", '"' .. file_path .. altera_ver .. file_ext .. '"') + ENDLUA + UNDEFINE Altera_Chip + + INCBIN Altera_File + UNDEFINE Altera_File + ENDM +; diff --git a/bios/logo/Set_Pictures.asm b/bios/logo/Set_Pictures.asm new file mode 100644 index 0000000..7407f73 --- /dev/null +++ b/bios/logo/Set_Pictures.asm @@ -0,0 +1,54 @@ +; +;------------[LUA functions]------------; + includelua 'Shared_Includes/LUA/Functions.lua' +;---------------------------------------; + + LUA PASS1 + -- ஢塞 BMP, ࠬ, ० ᪨ + bmp_width, bmp_height, bmp_image_size, bmp_image_offset, bmp_colors = Get_bmp8bit_values (sj.get_define("PICTURE_FILE")) + + if bmp_width ~= 128 then sj.error("Invalid BMP width", bmp_width) end + if bmp_height ~= 72 then sj.error("Invalid BMP height", bmp_height) end + if bmp_colors ~= 256 then sj.error("Invalid BMP number of colors", bmp_colors) end + + if not File_save(sj.get_define("PICTURE_FILE"), "./Build/Bin/LOGO_PAL.BIN", bmp_image_offset-1024, 1024) then sj.error("Palete save error!") end + if not File_save(sj.get_define("PICTURE_FILE"), "./Build/Bin/LOGO_DAT.BIN", bmp_image_offset, bmp_image_size) then sj.error("Image data save error!") end + ENDLUA + + LUA ALLPASS + function make_pic_files (fileName, needPal, needPic) + local fileNameBMP = "'" .. fileName .. ".bmp" .. "'" + local fileNamePAL = fileName .. "_PAL.BIN" + local fileNameDAT = fileName .. "_DAT.BIN" + + local bmp_width, bmp_height, bmp_image_size, bmp_image_offset, bmp_colors = Get_bmp8bit_values (fileNameBMP) + + if needPal == 1 then + if bmp_width ~= 128 then sj.error(fileNameBMP .. "Invalid BMP width", bmp_width) end + if bmp_height ~= 72 then sj.error(fileNameBMP .. "Invalid BMP height", bmp_height) end + if bmp_colors ~= 256 then sj.error(fileNameBMP .. "Invalid BMP number of colors", bmp_colors) end + if not File_save(fileNameBMP, fileNamePAL, bmp_image_offset-1024, 1024) then + sj.error(fileNameBMP .. "Palete save error!") + end + end + if needPic == 1 then + local correctWidth = ((bmp_width*3)%4)+bmp_width + if correctWidth > bmp_width then + File_save(fileNameBMP, fileNameDAT, bmp_image_offset, bmp_image_size, bmp_width, correctWidth-bmp_width) + else + File_save(fileNameBMP, fileNameDAT, bmp_image_offset, bmp_image_size) + end + end + + print("Resolution: " .. bmp_width .. "x" .. bmp_height, fileNameDAT) + end + ENDLUA + + MODULE MAIN_LOGO +Pallete: + INCBIN 'Build/Bin/LOGO_PAL.BIN' +.length EQU $-Pallete +Raster: + INCBIN 'Build/Bin/LOGO_DAT.BIN' +.length EQU $-Raster + ENDMODULE diff --git a/src/bios/logo/peters.bmp b/bios/logo/peters.bmp similarity index 100% rename from src/bios/logo/peters.bmp rename to bios/logo/peters.bmp diff --git a/src/bios/logo/pfathers.bmp b/bios/logo/pfathers.bmp similarity index 100% rename from src/bios/logo/pfathers.bmp rename to bios/logo/pfathers.bmp diff --git a/src/bios/logo/psclean.bmp b/bios/logo/psclean.bmp similarity index 100% rename from src/bios/logo/psclean.bmp rename to bios/logo/psclean.bmp diff --git a/src/bios/logo/psfathers.bmp b/bios/logo/psfathers.bmp similarity index 100% rename from src/bios/logo/psfathers.bmp rename to bios/logo/psfathers.bmp diff --git a/src/bios/mem_map.txt b/bios/mem_map.txt similarity index 88% rename from src/bios/mem_map.txt rename to bios/mem_map.txt index 7ac2697..3a67672 100644 --- a/src/bios/mem_map.txt +++ b/bios/mem_map.txt @@ -1,16 +1,16 @@ -#10 - EXTENSION -#11 - LOGO #2800 bytes -#12 - sp_128 -#13 - sp_48 -#14 - sp_trd -#15 - ROM Disk Recovery -#16 - ROM Disk Recovery -#17 - ROM Disk Recovery -#18 - BIOS -#19 - ROM Disk Recovery -#1A - ROM Disk Recovery -#1B - ROM Disk Recovery -#1C - Loader #100 bytes, bitstream #3F00 bytes -#1D - Bitstream #4000 bytes -#1E - Bitstream #4000 bytes +#10 - EXTENSION +#11 - LOGO #2800 bytes +#12 - sp_128 +#13 - sp_48 +#14 - sp_trd +#15 - ROM Disk Recovery +#16 - ROM Disk Recovery +#17 - ROM Disk Recovery +#18 - BIOS +#19 - ROM Disk Recovery +#1A - ROM Disk Recovery +#1B - ROM Disk Recovery +#1C - Loader #100 bytes, bitstream #3F00 bytes +#1D - Bitstream #4000 bytes +#1E - Bitstream #4000 bytes #1F - Bitstream #4000 bytes \ No newline at end of file diff --git a/src/bios/rom/BIOS.inc b/bios/rom/BIOS.inc similarity index 96% rename from src/bios/rom/BIOS.inc rename to bios/rom/BIOS.inc index 8db15b7..529dcc6 100644 --- a/src/bios/rom/BIOS.inc +++ b/bios/rom/BIOS.inc @@ -1,5 +1,5 @@ -;WITH_BUILD EQU 1 ;BIOS NUMBER INCLUDED BUILD NUMBER -TEST_Build EQU 0 -Logo_X_size EQU 128 -Logo_Y_size EQU 72 -;WITH_2IDE EQU 1 ;SECONDARY IDE +;WITH_BUILD EQU 1 ;BIOS NUMBER INCLUDED BUILD NUMBER +TEST_Build EQU 0 +Logo_X_size EQU 128 +Logo_Y_size EQU 72 +;WITH_2IDE EQU 1 ;SECONDARY IDE diff --git a/src/bios/rom/MEM_MAP.inc b/bios/rom/MEM_MAP.inc similarity index 97% rename from src/bios/rom/MEM_MAP.inc rename to bios/rom/MEM_MAP.inc index 2f86374..1c50f25 100644 --- a/src/bios/rom/MEM_MAP.inc +++ b/bios/rom/MEM_MAP.inc @@ -1,72 +1,72 @@ -; -; ۻ ۻ ۻ ۻ ۻ ۻ ۻ ۻ -; ۻۻۻ ۺ ۻ ۺۻۻ -; ɼۺ ۺۺ ۺۺɼ -; ۻۺ ۺۺɼۺ ۺɼۺۺͼ -; ۺ ۺɼۺ ͼ ۺ ۺ ͼ ۺۺ ۺۺ -; ͼ ͼ ͼ ͼ ͼ ͼ ͼͼ ͼͼ -; -ROM_MAP: -.EXP EQU 0 -.EXP.STACK EQU #C000 -.ROM EQU 0 -.LOADER EQU 0 -.LOGO EQU 0 - IF PACKED_MAIN -.SETUP EQU #1000 - ELSE -.SETUP EQU BLOCK_Setup - ENDIF -; - -; -; ۻ ۻۻۻ ۻ ۻ ۻ ۻ ۻ -; ۻ ۺͼۻ ۺ ۻ ۺۻۻ -; ۺۻ ۺ ۺۺɼ -; ۺɼۺͼ ۺɼۺ ۺɼۺۺͼ -; ۺ ͼ ۺۻۺ ͼ ۺ ۺ ͼ ۺۺ ۺۺ -; ͼ ͼͼͼ ͼ ͼ ͼͼ ͼͼ -; -MEM_MAP: -.SETUP EQU COMPILE_ADDR.SETUP -;.ID_Version EQU COMPILE_ADDR.EXP + #C0 -; -; ۻ ۻ ۻ ۻ -; ۻۻͼ ͼ -; ۺ ۺɼۺ ۻۻ -; ۺ ۺۻۺ ۺۺ -; ɼۺ ۺɼۺ -; ͼ ͼ ͼ ͼ ͼ -; -COMPILE_ADDR: -.EXP EQU 0 -.ROM EQU 0 -.LOADER EQU 0 -.MAIN EQU #8000 -.SETUP EQU #8000 -.DEPACK EQU #D000 -.SETUP_STARTER EQU .SETUP + SETUP_MAIN.Size ;#C000 -; -; ۻ ۻۻ ۻ ۻۻ ۻۻۻ -; ۻͼۻۻͼۺ ɼͼۻ -; ۺ ۺۻ ɼۺۺ ɼ ۻ ɼ -; ۺ ۺͼ ͼ ۺۺ ۻ ͼ ۻ -; ɼۻۺ ۺ ۺۻۺ ۻۻۺ ۺ -; ͼ ͼͼ ͼ ͼ ͼͼ ͼͼͼ ͼ -; - IF PACKED_MAIN - - IFNDEF PREBUILD ; ⪨ ४樨 MAIN.BIN -DEPACKER: -.Addr EQU SETUP_MAIN.Depacker -.WorkAddr EQU COMPILE_ADDR.DEPACK -.PackedMAIN EQU UnPacker.PackedMAIN -.UnpackAddr EQU COMPILE_ADDR.MAIN -.CodeLength EQU UnPacker.Length -.UnpackedEXECaddr EQU MAIN_START -.Length EQU DEPACK_DATA.length -;Depacker_start EQU #D000 -;Depacked_logo_start EQU #D900 - ENDIF - - ENDIF +; +; ۻ ۻ ۻ ۻ ۻ ۻ ۻ ۻ +; ۻۻۻ ۺ ۻ ۺۻۻ +; ɼۺ ۺۺ ۺۺɼ +; ۻۺ ۺۺɼۺ ۺɼۺۺͼ +; ۺ ۺɼۺ ͼ ۺ ۺ ͼ ۺۺ ۺۺ +; ͼ ͼ ͼ ͼ ͼ ͼ ͼͼ ͼͼ +; +ROM_MAP: +.EXP EQU 0 +.EXP.STACK EQU #C000 +.ROM EQU 0 +.LOADER EQU 0 +.LOGO EQU 0 + IF PACKED_MAIN +.SETUP EQU #1000 + ELSE +.SETUP EQU BLOCK_Setup + ENDIF +; + +; +; ۻ ۻۻۻ ۻ ۻ ۻ ۻ ۻ +; ۻ ۺͼۻ ۺ ۻ ۺۻۻ +; ۺۻ ۺ ۺۺɼ +; ۺɼۺͼ ۺɼۺ ۺɼۺۺͼ +; ۺ ͼ ۺۻۺ ͼ ۺ ۺ ͼ ۺۺ ۺۺ +; ͼ ͼͼͼ ͼ ͼ ͼͼ ͼͼ +; +MEM_MAP: +.SETUP EQU COMPILE_ADDR.SETUP +;.ID_Version EQU COMPILE_ADDR.EXP + #C0 +; +; ۻ ۻ ۻ ۻ +; ۻۻͼ ͼ +; ۺ ۺɼۺ ۻۻ +; ۺ ۺۻۺ ۺۺ +; ɼۺ ۺɼۺ +; ͼ ͼ ͼ ͼ ͼ +; +COMPILE_ADDR: +.EXP EQU 0 +.ROM EQU 0 +.LOADER EQU 0 +.MAIN EQU #8000 +.SETUP EQU #8000 +.DEPACK EQU #D000 +.SETUP_STARTER EQU .SETUP + SETUP_MAIN.Size ;#C000 +; +; ۻ ۻۻ ۻ ۻۻ ۻۻۻ +; ۻͼۻۻͼۺ ɼͼۻ +; ۺ ۺۻ ɼۺۺ ɼ ۻ ɼ +; ۺ ۺͼ ͼ ۺۺ ۻ ͼ ۻ +; ɼۻۺ ۺ ۺۻۺ ۻۻۺ ۺ +; ͼ ͼͼ ͼ ͼ ͼͼ ͼͼͼ ͼ +; + IF PACKED_MAIN + + IFNDEF PREBUILD ; ⪨ ४樨 MAIN.BIN +DEPACKER: +.Addr EQU SETUP_MAIN.Depacker +.WorkAddr EQU COMPILE_ADDR.DEPACK +.PackedMAIN EQU UnPacker.PackedMAIN +.UnpackAddr EQU COMPILE_ADDR.MAIN +.CodeLength EQU UnPacker.Length +.UnpackedEXECaddr EQU MAIN_START +.Length EQU DEPACK_DATA.length +;Depacker_start EQU #D000 +;Depacked_logo_start EQU #D900 + ENDIF + + ENDIF diff --git a/src/bios/rom/ROM.asm b/bios/rom/ROM.asm similarity index 94% rename from src/bios/rom/ROM.asm rename to bios/rom/ROM.asm index b426fd1..f299f87 100644 --- a/src/bios/rom/ROM.asm +++ b/bios/rom/ROM.asm @@ -1,447 +1,447 @@ -; -; MODULE ROM_PART - DISPLAY "\r\n/=====================[ROM part]=====================\\" -;------------[Begin of ROM]------------- -ROM_START: - DI - HALT -;--------------------------------------- - -;--------------[checksum]--------------- - _mInfoBLOCK 4-$,#FF -Check_Sum: - DB #FF,#FF,#FF,#FF ; ஫쭮 㬬 -;--------------------------------------- - _mInfoBLOCK #10-$,#FF - RET -;--------------------------------------- - -;!TODO ਪ ROM.BIOS -;----------------[int]------------------ - _mInfoBLOCK #38-$,#FF -; INT: PUSH BC -; PUSH AF - -; LD C,SLOT3 -; IN B,(C) -; LD A,SYS_PAGE -; OUT (C),A - -; LD A,(SYS_PAGE.INT_ID) -; CP #AA -; JR Z,YESINT -; OUT (C),B -; JR NOINT -; YESINT: PUSH HL -; LD HL,(SYS_PAGE.INT_ADRESS) -; LD A,H -; OR L -; LD A,(SYS_PAGE.INT_PAGE) -; OUT (C),B -; CALL NZ,EXTINT -; POP HL -; NOINT: POP AF -; POP BC - EI - RETI -;--------------------------------------- - -;----------------[NMI]------------------ - _mInfoBLOCK #66-$,#FF -NMI: RETN -;--------------------------------------- - -; ;----------------[int]------------------ -; EXTINT: OR A -; RET Z - -; ;LD C,SLOT1 -; BIT 7,H -; JR Z,.L2 -; LD C,SLOT2 -; BIT 6,H -; JR Z,.L1 -; LD C,SLOT3 - -; .L1: IN B,(C) -; PUSH BC -; OUT (C),A -; CALL .JPHL -; POP BC -; OUT (C),B -; RET -; ; ஢ઠ 㫥 ᫮ -; .L2: BIT 6,H -; LD C,SLOT1 -; JR NZ,.L1 ; த ᫨ 㫥 ᫮ -; ; SLOT0 -; ; 楤 , ਬ - - -; IF TEST_INT -; LD HL,-.stackDepth - .switchProcedure.size + .patch+2 -; ADD HL,SP -; PUSH HL - -; LD HL,-.stackDepth - .switchProcedure.size ; memory stack use! -; ADD HL,SP ; stack -; PUSH HL ; ணࠬ .readProcedure - -; LD DE,.switchProcedure ; ७ ணࠬ ⥪ -; EX DE,HL -; LD BC,.switchProcedure.size -; LDIR -; RET - -; ; 楤, ७ᨬ ⥪ 맮 뢠 짮⥫ SLOT0 -; ; ஦ PUSH, ᫨ , 㢥稢 .stackDepth -; .switchProcedure: -; DEC DE -; POP HL -; LD (HL),E -; INC HL -; LD (HL),D - - -; LD C,SLOT0 -; IN B,(C) -; PUSH BC -; OUT (C),A - -; XOR A -; OUT (SYS_PORT.RAM),A -; .patch EQU $+1-.switchProcedure -; CALL .JPHL - -; DI - -; XOR A -; OUT (SYS_PORT.ROM),A - -; POP BC -; OUT (C),B - -; RET -; .JPHL: JP (HL) -; .stackDepth EQU 32 ; ﭨ 楤 設 ⥪. -; .switchProcedure.size EQU $-.switchProcedure -; ELSE - -; SCF -; RET -; .JPHL: JP (HL) -; ENDIF -;--------------------------------------- - -/* - - - -*/ - -; -; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ [___FOR ZX-MODE___] _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ; - -; -;----------------------------[ FOR ZX-MODE ]----------------------------; -;!HARDCODE #0 룠 vROM Basic-48 #3CF0 -; ஡ । ⠬ - _mInfoBLOCK #C0-$,#FF -; 室 १ USR 15600 -RET_FROM_BIOS_TO_BASIC48: - CALL CH_2 - CALL COMAND_LINE ; , - ; 室 - JP _SW_ROM_1 ; << MAIN MENU >> - INCLUDE 'ZX/ZX_FUNC.ASM' - INCLUDE 'ZX/ZX_MENU.ASM' -;-----------------------------------------------------------------------; -; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ; -; - - - - -;-------------[#1000 SETUP]------------- - ShowInfo 'Setup block of ROM start', 0 ; !!!!! test - -BLOCK_Setup EQU $ -; - IF PACKED_MAIN - BLOCK ROM_MAP.SETUP-$,#FF - - DISP COMPILE_ADDR.SETUP - -; Depacker version -SETUP_MAIN: - LD HL,DEPACKER.UnpackedEXECaddr; 窠 室 ᯠ - PUSH HL - LD DE,DEPACKER.WorkAddr ; 楤 - PUSH DE - - LD HL,DEPACKER.Addr - LD BC,DEPACKER.Length - LDIR - - LD HL,DEPACKER.PackedMAIN ; 娢 - LD DE,DEPACKER.UnpackAddr ; 㤠 ᯠ뢠 - RET - -.Depacker EQU $ - ENT - -;-----------------[v] -DEPACK_DATA: - DISP DEPACKER.WorkAddr - MODULE UnPacker - INCLUDE 'src/bios/ROM/SETUP/DEHRUST.asm' ; !TODO ᤥ LUA ⮢롮 -PackedMAIN: INCBIN 'Build/Bin/temp/MAIN.PAK' - ENDMODULE - ENT -DEPACK_DATA.length EQU $-DEPACK_DATA -;-----------------[^] - - - ELSE - DISP COMPILE_ADDR.SETUP - ShowInfo 'Setup block DISP start', 1 ; !!!!! test -SETUP_MAIN: INCLUDE 'src/bios/ROM/SETUP/Main.asm' -SETUP_MAIN.Size EQU $-SETUP_MAIN - ShowInfo 'Setup block DISP end', 1 ; !!!!! test - ENT - ENDIF - - ASSERT ($ + Setup_Starter.Size) < (STACK - STACK.Size), "WARNING: Stack area overlaps code..." - ShowInfo 'Setup block of ROM end', 0 ; !!!!! test -BLOCK_Setup.Length EQU $-BLOCK_Setup - - -;--------------------------------------- -; - - - - - -; -; !FIXIT ᤥ 䨪஢ ⤥ 䠩 IF/ELSE ⮬ 㤠 . -;----------------------------------------------------------------------; -; BLOCK #3CC0-$,255 - ; no-magics! -;MAGIC_1: ; MAGIC -; PUSH AF -; LD A,ROM.EXT -; OUT (SYS_PORT.OFF),A -; POP AF -; JP MAGIC_1 -;MAGIC_3: -; PUSH AF -; LD A,ROM.EXT -; OUT (SYS_PORT.OFF),A -; POP AF -; RETN -;MAGIC_2: -;; CALL MG_BEGIN -; JR MAGIC_3 - -;************************* - _mInfoBLOCK #3CE0-$,#FF ;!TEST 0 -_SW_ROM_1 EQU SW_ROM_1 - LD HL,#259F ;!HARDCODE Show Main Menu in BASIC-128 - PUSH HL - LD HL,#5B00 ;!HARDCODE - LD A,(HL) - CP #F5 ; #F5 - 'PUSH AF'. ஢ #5B00 - JR Z,_JP_HL_48 ; BASIC128 - POP HL - JR _SW_ROM_1 ; -;************************* - - _mInfoBLOCK #3CF0-$,#FF ;!TEST 0 -;JMP_48: -; LD HL,00h -; JR _JP_HL_48 -; -; NOP -; NOP -; NOP - -;*************************************** - _mInfoBLOCK #3CF8-$,#FF ;!TEST 0 - ; no basic-48! -_JP_HL_48 EQU JP_HL_48 - PUSH HL -_SW_ROM EQU SW_ROM - PUSH AF - LD A,ROM.BIOS - OUT (SYS_PORT.RAM),A - POP AF - RET -;*************************************** -;----------------------------------------------------------------------; -; - -;!TODO ᯥ㬮᪨ ⨫ -;----------------------------------------------------------------------; - ; _mInfoBLOCK #3CFA-$,#FF - ; LD A,0 ;!HARDCODE - ; OUT (SYS_PORT.OFF),A - ; POP AF -;----------------------------------------------------------------------; -; - - -; -;----------------------------------------------------------------------; - _mInfoBLOCK #3D00-$,#FF -;DOS_ON: - NOP - RET -;*************************************** - -;*************************************** -; BLOCK #3D02-$,FF -; !TODO 室 17 ⮢ -; -;*************************************** - -;*************************************** - _mInfoBLOCK #3D13-$,#FF - NOP - CALL ToBIOS_FromEXT - JP DOS_OFF -;*************************************** - -;*************************************** -; BLOCK #3D17-$,FF -; !TODO 室 233 -; -;*************************************** - -;*************************************** - _mInfoBLOCK #3E00-$,#FF -;DOS_OFF: - PUSH AF - LD A,R - DI - PUSH AF - PUSH BC - ; - LD BC,(#5BFF) ; !HARDCODE - LD A,#C9 ; Opcode RET - LD (#5BFF),A ; !HARDCODE - CALL #5BFF ; !HARDCODE - LD (#5BFF),BC ; !HARDCODE - ; - POP BC - POP AF - JP PO,.no_EI - EI -.no_EI: POP AF - RET -;*************************************** - - -;*************************************** -; BLOCK #3E16-$,FF -; !TODO 室 10 ⮢ -; -;*************************************** -; - - - -; -;--------------------------------------- -; _mInfoBLOCK #3FC6-$,#FF -; 㭪樨 -; TRDOS_HD_CMD: -; ; LD A,C -; ; OR #40 -; ; LD C,A -; POP AF -; SET 6,C -; RST_to_BIOS -; JR RET_TO_TRDOS -;--------------------------------------- -; -;--------------[GOTO BIOS]-------------- - _mInfoBLOCK #3FD0-$,#FF -;ToBIOS_FromEXT: call BIOS from EXTENSION - PUSH AF - LD A,ROM.BIOS ; set BIOS to slot0 - OUT (SYS_PORT.ROM),A - POP AF - RET -;--------------------------------------- - - -;--------[ From TR-DOS to HDD part2]-------- - _mInfoBLOCK #3FD8-$,#FF -TRDOS_HD_CMD: - POP AF - SET 6,C - RST_to_BIOS - JR RET_TO_TRDOS -;--------------------------------------- - - -;!FIXIT ⪨ ⮢ 㪮 ⮩ -;-------------[SND_TEST_RET]------------- - _mInfoBLOCK #3FE0-$,#FF -; SND_TEST_RET: -; LD A,ROM.BIOS -; OUT (SYS_PORT.RAM),A -; ;JP SOUND_TEST -; JP #0000 -;--------------------------------------- - - -;------------[Portal to EXT]------------ -; 窠 室/室 㭪権 BIOS - _mInfoBLOCK #3FE8-$,#FF -RET_TO_BIOS: ;RET_TO_EXP: - PUSH AF - LD A,ROM.BIOS - OUT (SYS_PORT.ROM),A ; from BIOS EXTENSION_FNs - POP AF - RET - ; JP HDD_FN_5x -;--------------------------------------- - - -;!FIXIT ࠢ 㭪権 맮 TR-DOS 룠 ࠧ BIOS -;-------[ From TR-DOS to API 4x ]------- - _mInfoBLOCK #3FF0-$,#FF -RET_TO_TRDOS: - PUSH AF - DI - LD A,ROM.BIOS - OUT (SYS_PORT.RAM),A - JR TRDOS_HD_CMD ; 墠⨫ 1 , ⮡ ࠧ ᤥ JP -;--------------------------------------- - - - -;-----[???????????????????????????]----- - _mInfoBLOCK #3FF8-$,#FF - ; PUSH AF - ; LD A,ROM.BIOS - ; OUT (SYS_PORT.RAM),A - ; JP #0000 -;--------------------------------------- - _mInfoBLOCK #4000-$,#FF -;======================================= - - IFNDEF PREBUILD - DISPLAY ' -------------------[Main.asm]-------------------' - DISPLAY 'End code address: ',/A,MAIN_END_CODE_ADDRESS - DISPLAY 'Code size: ',/A,MAIN_END_CODE_ADDRESS + 1 - COMPILE_ADDR.MAIN - DISPLAY 'End buffers address: ',/A,memBUFFER.End - 1 - DISPLAY 'Free memory: ',/A,#C000 - (memBUFFER.End-1) - STACK.Size - DISPLAY 'Unused bytes before INT_POINTER: ',/A,INT_POINTER-before_intPointer - ENDIF -; ENDMODULE ;ROM_PART -; - DISPLAY ' ' +; +; MODULE ROM_PART + DISPLAY "\r\n/=====================[ROM part]=====================\\" +;------------[Begin of ROM]------------- +ROM_START: + DI + HALT +;--------------------------------------- + +;--------------[checksum]--------------- + _mInfoBLOCK 4-$,#FF +Check_Sum: + DB #FF,#FF,#FF,#FF ; ஫쭮 㬬 +;--------------------------------------- + _mInfoBLOCK #10-$,#FF + RET +;--------------------------------------- + +;!TODO ਪ ROM.BIOS +;----------------[int]------------------ + _mInfoBLOCK #38-$,#FF +; INT: PUSH BC +; PUSH AF + +; LD C,SLOT3 +; IN B,(C) +; LD A,SYS_PAGE +; OUT (C),A + +; LD A,(SYS_PAGE.INT_ID) +; CP #AA +; JR Z,YESINT +; OUT (C),B +; JR NOINT +; YESINT: PUSH HL +; LD HL,(SYS_PAGE.INT_ADRESS) +; LD A,H +; OR L +; LD A,(SYS_PAGE.INT_PAGE) +; OUT (C),B +; CALL NZ,EXTINT +; POP HL +; NOINT: POP AF +; POP BC + EI + RETI +;--------------------------------------- + +;----------------[NMI]------------------ + _mInfoBLOCK #66-$,#FF +NMI: RETN +;--------------------------------------- + +; ;----------------[int]------------------ +; EXTINT: OR A +; RET Z + +; ;LD C,SLOT1 +; BIT 7,H +; JR Z,.L2 +; LD C,SLOT2 +; BIT 6,H +; JR Z,.L1 +; LD C,SLOT3 + +; .L1: IN B,(C) +; PUSH BC +; OUT (C),A +; CALL .JPHL +; POP BC +; OUT (C),B +; RET +; ; ஢ઠ 㫥 ᫮ +; .L2: BIT 6,H +; LD C,SLOT1 +; JR NZ,.L1 ; த ᫨ 㫥 ᫮ +; ; SLOT0 +; ; 楤 , ਬ + + +; IF TEST_INT +; LD HL,-.stackDepth - .switchProcedure.size + .patch+2 +; ADD HL,SP +; PUSH HL + +; LD HL,-.stackDepth - .switchProcedure.size ; memory stack use! +; ADD HL,SP ; stack +; PUSH HL ; ணࠬ .readProcedure + +; LD DE,.switchProcedure ; ७ ணࠬ ⥪ +; EX DE,HL +; LD BC,.switchProcedure.size +; LDIR +; RET + +; ; 楤, ७ᨬ ⥪ 맮 뢠 짮⥫ SLOT0 +; ; ஦ PUSH, ᫨ , 㢥稢 .stackDepth +; .switchProcedure: +; DEC DE +; POP HL +; LD (HL),E +; INC HL +; LD (HL),D + + +; LD C,SLOT0 +; IN B,(C) +; PUSH BC +; OUT (C),A + +; XOR A +; OUT (SYS_PORT.RAM),A +; .patch EQU $+1-.switchProcedure +; CALL .JPHL + +; DI + +; XOR A +; OUT (SYS_PORT.ROM),A + +; POP BC +; OUT (C),B + +; RET +; .JPHL: JP (HL) +; .stackDepth EQU 32 ; ﭨ 楤 設 ⥪. +; .switchProcedure.size EQU $-.switchProcedure +; ELSE + +; SCF +; RET +; .JPHL: JP (HL) +; ENDIF +;--------------------------------------- + +/* + + + +*/ + +; +; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ [___FOR ZX-MODE___] _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ; + +; +;----------------------------[ FOR ZX-MODE ]----------------------------; +;!HARDCODE #0 룠 vROM Basic-48 #3CF0 +; ஡ । ⠬ + _mInfoBLOCK #C0-$,#FF +; 室 १ USR 15600 +RET_FROM_BIOS_TO_BASIC48: + CALL CH_2 + CALL COMAND_LINE ; , + ; 室 + JP _SW_ROM_1 ; << MAIN MENU >> + INCLUDE 'ZX/ZX_FUNC.ASM' + INCLUDE 'ZX/ZX_MENU.ASM' +;-----------------------------------------------------------------------; +; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ; +; + + + + +;-------------[#1000 SETUP]------------- + ShowInfo 'Setup block of ROM start', 0 ; !!!!! test + +BLOCK_Setup EQU $ +; + IF PACKED_MAIN + BLOCK ROM_MAP.SETUP-$,#FF + + DISP COMPILE_ADDR.SETUP + +; Depacker version +SETUP_MAIN: + LD HL,DEPACKER.UnpackedEXECaddr; 窠 室 ᯠ + PUSH HL + LD DE,DEPACKER.WorkAddr ; 楤 + PUSH DE + + LD HL,DEPACKER.Addr + LD BC,DEPACKER.Length + LDIR + + LD HL,DEPACKER.PackedMAIN ; 娢 + LD DE,DEPACKER.UnpackAddr ; 㤠 ᯠ뢠 + RET + +.Depacker EQU $ + ENT + +;-----------------[v] +DEPACK_DATA: + DISP DEPACKER.WorkAddr + MODULE UnPacker + INCLUDE 'bios/ROM/SETUP/DEHRUST.asm' ; !TODO ᤥ LUA ⮢롮 +PackedMAIN: INCBIN 'Build/Bin/temp/MAIN.PAK' + ENDMODULE + ENT +DEPACK_DATA.length EQU $-DEPACK_DATA +;-----------------[^] + + + ELSE + DISP COMPILE_ADDR.SETUP + ShowInfo 'Setup block DISP start', 1 ; !!!!! test +SETUP_MAIN: INCLUDE 'bios/ROM/SETUP/Main.asm' +SETUP_MAIN.Size EQU $-SETUP_MAIN + ShowInfo 'Setup block DISP end', 1 ; !!!!! test + ENT + ENDIF + + ASSERT ($ + Setup_Starter.Size) < (STACK - STACK.Size), "WARNING: Stack area overlaps code..." + ShowInfo 'Setup block of ROM end', 0 ; !!!!! test +BLOCK_Setup.Length EQU $-BLOCK_Setup + + +;--------------------------------------- +; + + + + + +; +; !FIXIT ᤥ 䨪஢ ⤥ 䠩 IF/ELSE ⮬ 㤠 . +;----------------------------------------------------------------------; +; BLOCK #3CC0-$,255 + ; no-magics! +;MAGIC_1: ; MAGIC +; PUSH AF +; LD A,ROM.EXT +; OUT (SYS_PORT.OFF),A +; POP AF +; JP MAGIC_1 +;MAGIC_3: +; PUSH AF +; LD A,ROM.EXT +; OUT (SYS_PORT.OFF),A +; POP AF +; RETN +;MAGIC_2: +;; CALL MG_BEGIN +; JR MAGIC_3 + +;************************* + _mInfoBLOCK #3CE0-$,#FF ;!TEST 0 +_SW_ROM_1 EQU SW_ROM_1 + LD HL,#259F ;!HARDCODE Show Main Menu in BASIC-128 + PUSH HL + LD HL,#5B00 ;!HARDCODE + LD A,(HL) + CP #F5 ; #F5 - 'PUSH AF'. ஢ #5B00 + JR Z,_JP_HL_48 ; BASIC128 + POP HL + JR _SW_ROM_1 ; +;************************* + + _mInfoBLOCK #3CF0-$,#FF ;!TEST 0 +;JMP_48: +; LD HL,00h +; JR _JP_HL_48 +; +; NOP +; NOP +; NOP + +;*************************************** + _mInfoBLOCK #3CF8-$,#FF ;!TEST 0 + ; no basic-48! +_JP_HL_48 EQU JP_HL_48 + PUSH HL +_SW_ROM EQU SW_ROM + PUSH AF + LD A,ROM.BIOS + OUT (SYS_PORT.RAM),A + POP AF + RET +;*************************************** +;----------------------------------------------------------------------; +; + +;!TODO ᯥ㬮᪨ ⨫ +;----------------------------------------------------------------------; + ; _mInfoBLOCK #3CFA-$,#FF + ; LD A,0 ;!HARDCODE + ; OUT (SYS_PORT.OFF),A + ; POP AF +;----------------------------------------------------------------------; +; + + +; +;----------------------------------------------------------------------; + _mInfoBLOCK #3D00-$,#FF +;DOS_ON: + NOP + RET +;*************************************** + +;*************************************** +; BLOCK #3D02-$,FF +; !TODO 室 17 ⮢ +; +;*************************************** + +;*************************************** + _mInfoBLOCK #3D13-$,#FF + NOP + CALL ToBIOS_FromEXT + JP DOS_OFF +;*************************************** + +;*************************************** +; BLOCK #3D17-$,FF +; !TODO 室 233 +; +;*************************************** + +;*************************************** + _mInfoBLOCK #3E00-$,#FF +;DOS_OFF: + PUSH AF + LD A,R + DI + PUSH AF + PUSH BC + ; + LD BC,(#5BFF) ; !HARDCODE + LD A,#C9 ; Opcode RET + LD (#5BFF),A ; !HARDCODE + CALL #5BFF ; !HARDCODE + LD (#5BFF),BC ; !HARDCODE + ; + POP BC + POP AF + JP PO,.no_EI + EI +.no_EI: POP AF + RET +;*************************************** + + +;*************************************** +; BLOCK #3E16-$,FF +; !TODO 室 10 ⮢ +; +;*************************************** +; + + + +; +;--------------------------------------- +; _mInfoBLOCK #3FC6-$,#FF +; 㭪樨 +; TRDOS_HD_CMD: +; ; LD A,C +; ; OR #40 +; ; LD C,A +; POP AF +; SET 6,C +; RST_to_BIOS +; JR RET_TO_TRDOS +;--------------------------------------- +; +;--------------[GOTO BIOS]-------------- + _mInfoBLOCK #3FD0-$,#FF +;ToBIOS_FromEXT: call BIOS from EXTENSION + PUSH AF + LD A,ROM.BIOS ; set BIOS to slot0 + OUT (SYS_PORT.ROM),A + POP AF + RET +;--------------------------------------- + + +;--------[ From TR-DOS to HDD part2]-------- + _mInfoBLOCK #3FD8-$,#FF +TRDOS_HD_CMD: + POP AF + SET 6,C + RST_to_BIOS + JR RET_TO_TRDOS +;--------------------------------------- + + +;!FIXIT ⪨ ⮢ 㪮 ⮩ +;-------------[SND_TEST_RET]------------- + _mInfoBLOCK #3FE0-$,#FF +; SND_TEST_RET: +; LD A,ROM.BIOS +; OUT (SYS_PORT.RAM),A +; ;JP SOUND_TEST +; JP #0000 +;--------------------------------------- + + +;------------[Portal to EXT]------------ +; 窠 室/室 㭪権 BIOS + _mInfoBLOCK #3FE8-$,#FF +RET_TO_BIOS: ;RET_TO_EXP: + PUSH AF + LD A,ROM.BIOS + OUT (SYS_PORT.ROM),A ; from BIOS EXTENSION_FNs + POP AF + RET + ; JP HDD_FN_5x +;--------------------------------------- + + +;!FIXIT ࠢ 㭪権 맮 TR-DOS 룠 ࠧ BIOS +;-------[ From TR-DOS to API 4x ]------- + _mInfoBLOCK #3FF0-$,#FF +RET_TO_TRDOS: + PUSH AF + DI + LD A,ROM.BIOS + OUT (SYS_PORT.RAM),A + JR TRDOS_HD_CMD ; 墠⨫ 1 , ⮡ ࠧ ᤥ JP +;--------------------------------------- + + + +;-----[???????????????????????????]----- + _mInfoBLOCK #3FF8-$,#FF + ; PUSH AF + ; LD A,ROM.BIOS + ; OUT (SYS_PORT.RAM),A + ; JP #0000 +;--------------------------------------- + _mInfoBLOCK #4000-$,#FF +;======================================= + + IFNDEF PREBUILD + DISPLAY ' -------------------[Main.asm]-------------------' + DISPLAY 'End code address: ',/A,MAIN_END_CODE_ADDRESS + DISPLAY 'Code size: ',/A,MAIN_END_CODE_ADDRESS + 1 - COMPILE_ADDR.MAIN + DISPLAY 'End buffers address: ',/A,memBUFFER.End - 1 + DISPLAY 'Free memory: ',/A,#C000 - (memBUFFER.End-1) - STACK.Size + DISPLAY 'Unused bytes before INT_POINTER: ',/A,INT_POINTER-before_intPointer + ENDIF +; ENDMODULE ;ROM_PART +; + DISPLAY ' ' DISPLAY 'FIX printer init!!!!!!!!' \ No newline at end of file diff --git a/src/bios/rom/SETUP/AUTOIDE.asm b/bios/rom/SETUP/AUTOIDE.asm similarity index 100% rename from src/bios/rom/SETUP/AUTOIDE.asm rename to bios/rom/SETUP/AUTOIDE.asm diff --git a/src/bios/rom/SETUP/IM2_INT.asm b/bios/rom/SETUP/IM2_INT.asm similarity index 100% rename from src/bios/rom/SETUP/IM2_INT.asm rename to bios/rom/SETUP/IM2_INT.asm diff --git a/src/bios/rom/SETUP/KEY.asm b/bios/rom/SETUP/KEY.asm similarity index 96% rename from src/bios/rom/SETUP/KEY.asm rename to bios/rom/SETUP/KEY.asm index 40134bb..2004b1e 100644 --- a/src/bios/rom/SETUP/KEY.asm +++ b/bios/rom/SETUP/KEY.asm @@ -1,790 +1,790 @@ - -; - _mInfoALIGN 256,0 ; ࠢ #XX00 -SBUF: BLOCK 64,0 - -HEAD: DB 0 -HOST: DB 0 - -; -K_LOCK EQU $-KEYFLAG -LANG_L EQU 7 -PAUSE_L EQU 6 -RES5_L EQU 5 -RES4_L EQU 4 -NUM_L EQU 3 -SCRL_L EQU 2 -INS_L EQU 1 -CAPS_L EQU 0 -KEYFLAG: DB 2 ;D0-Key Pressed -; -K_SHIFT EQU $-KEYFLAG -L_SHIFT EQU 7 -R_SHIFT EQU 6 -X_CTRL EQU 5 -X_ALT EQU 4 -L_CTRL EQU 3 -L_ALT EQU 2 -R_CTRL EQU 1 -R_ALT EQU 0 -KEYCTRL: DB 0 -; -KEYFLG EQU $-KEYFLAG -FLAG_E0 EQU 7 -FLAG_F0 EQU 6 -FLAG_E1 EQU 5 -FLAG_04 EQU 4 -FLAG_03 EQU 3 -FLAG_02 EQU 2 -FLAG_01 EQU 1 -FLAG_00 EQU 0 - DB 0 -; -SOUND_K EQU $-KEYFLAG -FLAG_S7 EQU 7 -FLAG_S6 EQU 6 -FLAG_S5 EQU 5 -FLAG_S4 EQU 4 -FLAG_S3 EQU 3 -FLAG_S2 EQU 2 -SF_ALT EQU 1 -SF_BUFF EQU 0 - DB 3 -; -;UNCODE: DW 0000 -; - -; D15 - LShift -; D14 - RShift -; D13 - CTRL -; D12 - ALT -; D11 - LCTRL -; D10 - LALT -; D9 - RCTRL -; D8 - RALT -; D7 - Language Lock -; D6 - Reserved -; D5 - Reserved -; D4 - Reserved -; D3 - Num Lock -; D2 - Scroll Lock -; D1 - Insert Lock -; D0 - Caps Lock - -; D15 - Keystroke -; D14 -; D13 \ -; D12 \ -; D11 -- Position code (0...5Ah) -; D10 / -; D9 / -; D8 -; D7..D0 - ASCII code - -WAITKEY: LD HL,HOST - LD A,(HEAD) - CP (HL) - JR Z,WAITKEY - CALL GETSYM - LD A,E - ;AND A - RET - -SCANKEY: LD HL,HOST - LD A,(HEAD) - CP (HL) - RET Z - CALL GETSYM - LD A,E - RET - -CTRLKEY: LD HL,HOST - LD A,(HEAD) - CP (HL) - LD BC,(KEYFLAG) - LD A,#00 - RET Z - DEC A - RET - -PUTSYM: LD HL,HEAD - LD A,(HOST) - SUB 4 - AND #3F - CP (HL) - JR Z,FULL_BF - ; - CALL GetSymAddr - ; - LD (HL),E - INC L - LD (HL),D - INC L - LD (HL),B - INC L - LD (HL),C - RET - -GetSymAddr: LD A,(HL) - INC (HL) - INC (HL) - INC (HL) - INC (HL) - RES 6,(HL) - LD L,A - LD H,high SBUF - RET - -GETSYM: LD HL,HOST - LD A,(HEAD) - CP (HL) - RET Z - AND A - ; - CALL GetSymAddr - ; - LD E,(HL) - INC L - LD D,(HL) - INC L - LD B,(HL) - INC L - LD C,(HL) - RET - -FULL_BF: EX AF,AF' - BIT SF_BUFF,(IX+SOUND_K) - JR Z,.FBF - EXX - LD DE,230 - LD HL,50 - CALL BEEP - EXX -.FBF: EX AF,AF' - RET - -KEYSCAN: LD IX,KEYFLAG -RESCANN: - IN A,(Z84.SIO.Ch_A.Ctrl) - AND 1 - RET Z - ;[x] 18/02/2024 ஢ઠ ९ - ; A = 1 - ; reg 1 - OUT (Z84.SIO.Ch_A.Ctrl),A - IN A,(Z84.SIO.Ch_A.Ctrl) - AND %0010'0000 ; check receiver overrun error - JP NZ,Receiver_Overrun - ; - IN A,(Z84.SIO.Ch_A.Data) - CP #F0 - JR Z,F0_KEY - CP #E0 - JR Z,E0_KEY - ; - CP #E1 - IF USE_E1_SCANCODE - JR Z,E1_KEY - ELSE - JR Z,RESCANN - ENDIF - ; - BIT FLAG_F0,(IX+KEYFLG) - JR NZ,UN_KEY - ; - LD L,A - CALL XLAT - CALL SHIFTS - RES FLAG_E0,(IX+KEYFLG) - IF USE_E1_SCANCODE - RES FLAG_E1,(IX+KEYFLG) - ENDIF - ; - ;[x] 29/02/2024 ॡ - JR Z,RESCANN ;IT'S SHIFT KEY - ; RET Z ;IT'S SHIFT KEY - ; - CALL INPCODE ;L - AT POS. CODE - ;PUTCODE - LD HL,#1C00 ;Caps Lock - AND A - SBC HL,DE - CALL Z,CAPS_X - - ; !TODO ᪨? 祬? -; LD HL,#B800 ;Ctrl + Space -; AND A -; SBC HL,DE -; CALL Z,RUS_X - - LD HL,#5000 ;Insert - AND A - SBC HL,DE - CALL Z,INS_X - LD HL,#4900 ;Num Lock - AND A - SBC HL,DE - CALL Z,NUM_X - LD HL,#C900 ;Pause Lock - AND A - SBC HL,DE - CALL Z,PAUSE_X - LD HL,#4800 ;Scroll Lock - AND A - SBC HL,DE - CALL Z,SCL_X - ;-----------------------; !!!!! - ; LD HL,#CF00 ; ; Ctrl + Alt + Del - ; AND A ; - ; SBC HL,DE ; - ; CALL Z,RST_X ; - ;-----------------------; - LD BC,(KEYFLAG) - CALL PUTSYM - JP RESCANN - -E0_KEY: SET FLAG_E0,(IX+KEYFLG) - JR RESCANN - -F0_KEY: SET FLAG_F0,(IX+KEYFLG) - JR RESCANN - - IF USE_E1_SCANCODE -E1_KEY: SET FLAG_E1,(IX+KEYFLG) - JR RESCANN - ENDIF - -UN_KEY: RES FLAG_F0,(IX+KEYFLG) - LD L,A - CALL XLAT - CALL UNSHIFT - RES FLAG_E0,(IX+KEYFLG) - ;LD H,0 - ;LD (UNCODE),HL - RET - -CAPS_X: LD A,(KEYFLAG) - XOR 1<","?",#00,"|" - DB #00,#00,Spc,#00,#00 - DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 - DB #00,#00,#00,"/","*","-","+",Ent,#00 - DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 -CAPSTAB: - DB "`",Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs - DB Tab,"Q","W","E","R","T","Y","U","I","O","P","[","]" - DB Cps,"A","S","D","F","G","H","J","K","L",";","'",Ent - DB #00,"Z","X","C","V","B","N","M",#2C,".","/",#00,#5C ;"\" - DB #00,#00,Spc,#00,#00 - DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 - DB #00,#00,#00,"/","*","-","+",Ent,#00 - DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 -SHF2TAB: - DB "~",Esc,"!","@","#","$","%","^","&","*","(",")","_","+",Bcs - DB Tab,"q","w","e","r","t","y","u","i","o","p","{","}" - DB Cps,"a","s","d","f","g","h","j","k","l",":",#22,Ent - DB #00,"z","x","c","v","b","n","m","<",">","?",#00,"|" - DB #00,#00,Spc,#00,#00 - DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 - DB #00,#00,#00,"/","*","-","+",Ent,#00 - DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 - -/////////////////////////////////////////////////////////////////////// -; _mInfoALIGN 256,0 ; ࠢ -XLAT_T: -; 0 1 2 3 4 5 6 7 8 9 A B C D E F - DB #00,#43,#00,#3F,#3D,#3B,#3C,#46,#00,#44,#42,#40,#3E,#0F,#00,#00 ;00 - DB #00,#37,#29,#00,#36,#10,#02,#00,#00,#00,#2A,#1E,#1D,#11,#03,#00 ;10 - DB #00,#2C,#2B,#1F,#12,#05,#04,#00,#00,#38,#2D,#20,#14,#13,#06,#00 ;20 - DB #00,#2F,#2E,#22,#21,#15,#07,#00,#00,#00,#30,#23,#16,#08,#09,#00 ;30 - DB #00,#31,#24,#17,#18,#0B,#0A,#00,#00,#32,#33,#25,#26,#19,#0C,#00 ;40 - DB #00,#00,#27,#00,#1A,#0D,#00,#00,#1C,#34,#28,#1B,#00,#35,#00,#00 ;50 - DB #00,#00,#00,#00,#00,#00,#0E,#00,#00,#51,#00,#54,#57,#00,#00,#00 ;60 - DB #50,#4F,#52,#55,#56,#58,#01,#49,#45,#4D,#53,#4C,#4B,#59,#48,#00 ;70 - DB #00,#00,#00,#41,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 ;80 -XLAT_T.Size EQU $-XLAT_T -/////////////////////////////////////////////////////////////////////// - - -XLAT: BIT FLAG_E0,(IX+KEYFLG) - JR Z,.W_O_E0 - CP #11 ; Right ALT - LD L,#39 - RET Z - - CP #14 ; Right CTRL - LD L,#3A - RET Z - - CP #5A ; enter - LD L,#4E - RET Z - - CP #4A ; / - LD L,#4A - RET Z - - CP #7C ; * - Print Screen - LD L,#47 - RET Z - - LD L,A -.W_O_E0: - ; ⠡ ࠢ 256 - ; LD H,high XLAT_T - ; LD L,(HL) - ; - ; ࠢ - ; [x] 31/03/2024 ࠢ 室 ࠭ ⠡ XLAT_T - CP XLAT_T.Size - LD L,0 - RET NC - ; - LD HL,XLAT_T - ADD A,L - LD L,A - JR NC,.no_inc - INC H -.no_inc: - LD L,(HL) - RET - RET - -; !TODO ᬮ -;INPCODE: -; BIT 1,(IX+1) ;00110000 -; JR NZ,FN_KEY ;LRCAcaRP - -INPCODE: LD D,L - LD E,0 - ; !TODO ᪨? 祬? - ; BIT LANG_L,(IX+K_LOCK) - ; JP NZ,RUSCODE - LD A,(KEYCTRL) - AND 1<","?",#00,"|" + DB #00,#00,Spc,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,"/","*","-","+",Ent,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 +CAPSTAB: + DB "`",Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs + DB Tab,"Q","W","E","R","T","Y","U","I","O","P","[","]" + DB Cps,"A","S","D","F","G","H","J","K","L",";","'",Ent + DB #00,"Z","X","C","V","B","N","M",#2C,".","/",#00,#5C ;"\" + DB #00,#00,Spc,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,"/","*","-","+",Ent,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 +SHF2TAB: + DB "~",Esc,"!","@","#","$","%","^","&","*","(",")","_","+",Bcs + DB Tab,"q","w","e","r","t","y","u","i","o","p","{","}" + DB Cps,"a","s","d","f","g","h","j","k","l",":",#22,Ent + DB #00,"z","x","c","v","b","n","m","<",">","?",#00,"|" + DB #00,#00,Spc,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,"/","*","-","+",Ent,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + +/////////////////////////////////////////////////////////////////////// +; _mInfoALIGN 256,0 ; ࠢ +XLAT_T: +; 0 1 2 3 4 5 6 7 8 9 A B C D E F + DB #00,#43,#00,#3F,#3D,#3B,#3C,#46,#00,#44,#42,#40,#3E,#0F,#00,#00 ;00 + DB #00,#37,#29,#00,#36,#10,#02,#00,#00,#00,#2A,#1E,#1D,#11,#03,#00 ;10 + DB #00,#2C,#2B,#1F,#12,#05,#04,#00,#00,#38,#2D,#20,#14,#13,#06,#00 ;20 + DB #00,#2F,#2E,#22,#21,#15,#07,#00,#00,#00,#30,#23,#16,#08,#09,#00 ;30 + DB #00,#31,#24,#17,#18,#0B,#0A,#00,#00,#32,#33,#25,#26,#19,#0C,#00 ;40 + DB #00,#00,#27,#00,#1A,#0D,#00,#00,#1C,#34,#28,#1B,#00,#35,#00,#00 ;50 + DB #00,#00,#00,#00,#00,#00,#0E,#00,#00,#51,#00,#54,#57,#00,#00,#00 ;60 + DB #50,#4F,#52,#55,#56,#58,#01,#49,#45,#4D,#53,#4C,#4B,#59,#48,#00 ;70 + DB #00,#00,#00,#41,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 ;80 +XLAT_T.Size EQU $-XLAT_T +/////////////////////////////////////////////////////////////////////// + + +XLAT: BIT FLAG_E0,(IX+KEYFLG) + JR Z,.W_O_E0 + CP #11 ; Right ALT + LD L,#39 + RET Z + + CP #14 ; Right CTRL + LD L,#3A + RET Z + + CP #5A ; enter + LD L,#4E + RET Z + + CP #4A ; / + LD L,#4A + RET Z + + CP #7C ; * - Print Screen + LD L,#47 + RET Z + + LD L,A +.W_O_E0: + ; ⠡ ࠢ 256 + ; LD H,high XLAT_T + ; LD L,(HL) + ; + ; ࠢ + ; [x] 31/03/2024 ࠢ 室 ࠭ ⠡ XLAT_T + CP XLAT_T.Size + LD L,0 + RET NC + ; + LD HL,XLAT_T + ADD A,L + LD L,A + JR NC,.no_inc + INC H +.no_inc: + LD L,(HL) + RET + RET + +; !TODO ᬮ +;INPCODE: +; BIT 1,(IX+1) ;00110000 +; JR NZ,FN_KEY ;LRCAcaRP + +INPCODE: LD D,L + LD E,0 + ; !TODO ᪨? 祬? + ; BIT LANG_L,(IX+K_LOCK) + ; JP NZ,RUSCODE + LD A,(KEYCTRL) + AND 1< 16 -; DISPLAY 'Warning! To much space before INT_POINTER: ',/D,INT_POINTER-before_intPointer -; ENDIF -; ENDIF - -; INT_HANDLER: -; PUSH AF -; EX AF,AF' -; PUSH AF -; PUSH BC -; PUSH DE -; PUSH HL -; EXX -; PUSH BC -; PUSH DE -; PUSH HL -; PUSH IX -; PUSH IY -; CALL KEYSCAN -; POP IY -; POP IX -; POP HL -; POP DE -; POP BC -; EXX -; POP HL -; POP DE -; POP BC -; POP AF -; EX AF,AF' -; POP AF -; EI -; RETI -; ; - -INT_OFF: DI - LD A,#3F - LD I,A - IM 1 - RET - ; -INT_ON: DI - LD A,+high INT_POINTER - LD I,A - LD HL,INT_HANDLER - LD (INT_POINTER),HL - IM 2 - EI - RET -; - -; -;------------------------[go to spectrum from bios]---------------------; -EXIT_SETUP: CALL INT_OFF - CALL TRD_MOUNT ; !TEST 24/09/2024 ७ EXIT_SETUP (। ᪮ ZX) - CALL SetUp_ZX_HDD - -; IF FREE_ZX_PAGES - LD A,Spec_Page - OUT (SLOT3),A - ; - LD A,(Spec_Page.flag_Z) - CP 'Z' - LD A,(Spec_Page.flag_X) - LD B,A - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,B - JR NZ,.Set_Page41 - CP 'X' -.Set_Page41: CALL NZ,ZXMODE_SETUP.Set_Page41 - -.set_ZX_params: LD BC,CMOS_CELL.QuickStartSetUp.Mask.ZxRom - CALL GET_CMOS_VALUE - LD L,A - LD BC,CMOS_CELL.QuickStartSetUp.Mask.Hardware - CALL GET_CMOS_VALUE - ; - EX AF,AF - LD A,ROM.EXTENSION - OUT (SYS_PORT.ROM),A - EX AF,AF - OR A - JP Z,SPRINTER_ZX.custom_ROM - DEC A - JP Z,Pentagon_48.custom_ROM - DEC A - JP Z,PENTAGON_128.custom_ROM - DEC A - JP Z,PENTAGON_512.custom_ROM - DEC A - JP Z,SCORPION_256.custom_ROM - DEC A - JP Z,ZX_Spectrum_48.custom_ROM - DEC A - JP Z,ZX_SPECTRUM_128.custom_ROM - ; error - XOR A - OUT (SYS_PORT.ROM),A - LD D,CMOS_CELL.QuickStartSetUp ; 塞 ࠬ 直 砩 - CALL CMOS_WR - ; - CALL ScreenPOS.CRLF - LD A,msgStrings.errorZXmode - LD E,COLORS.CGA.INK.RED - CALL POSTMSC -.loop_di: DI - HALT - JR .loop_di - - - -SetUp_ZX_HDD: LD D,CMOS_CELL.TRDOSmount - CALL CMOS_RD - AND %1010'1010 ; ᪠ 4- HDD - RET Z - ; find first good partition - ; - ; ⪠ ६ ZX HDD - IN A,(SLOT3) - EX AF,AF - LD A,SYS_PAGE - OUT (SLOT3),A - ; - XOR A - LD H,A - LD L,A - LD (SYS_PAGE.CURRENT_DIR_SEC_L),HL - LD (SYS_PAGE.CURRENT_DIR_SEC_H),HL - DEC A - LD (SYS_PAGE.CURRENT_HDD),A - LD (SYS_PAGE.CURRENT_DIR_DRIVE),A - LD (SYS_PAGE.CURRENT_DIR_DRIVE_COPY),A - ; - EX AF,AF - OUT (SLOT3),A - EX AF,AF - ; - XOR A -.loop: PUSH AF - CALL FN_HDD_PART - POP BC - RET NC - LD A,B - INC A - CP #10 - JR C,.loop - RET -;-----------------------------------------------------------------------; - -INSTALL: - CALL INT_ON - CALL SET_CGA - XOR A - OUT (BorderColor),A - LD IX,win_descriptor.tab80x32 - CALL WIN_OPEN.SCR1 - - LD DE,0 - LD HL,#2050 - LD B,7 - CALL LP_CLS_WIN - - LD DE,0 - LD HL,#0820 - LD B,0 - CALL LP_CLS_WIN - - CALL SETLAND - - CALL GET_ID - LD DE,#0028 ; !HARDCODE - CALL LP_SET_PLACE - LD HL,memBUFFER.ID - LD A,COLORS.CGA.INK.LCYAN - CALL CPRINTZ - ; LD HL,BUILD - ; LD A,COLORS.CGA.INK.LCYAN - ; CALL CPRINTZ - - LD DE,#0128 ; !HARDCODE - CALL LP_SET_PLACE - LD A,msgStrings.copyRightPeters - LD E,COLORS.CGA.INK.LGREEN - CALL POSTMSC - - LD DE,#0228 ; !HARDCODE - CALL LP_SET_PLACE - LD A,msgStrings.copyRightSPTeam - LD E,COLORS.CGA.INK.GREEN - CALL POSTMSC - - LD DE,#0328 - CALL LP_SET_PLACE - LD A,msgStrings.extBIOSmsg - IF BETA_BUILD > 0 - LD E,COLORS.CGA.FLASH + COLORS.CGA.INK.RED - ELSE - LD E,COLORS.CGA.INK.LGRAY - ENDIF - CALL POSTMSC - - IN A,(SLOT3) - PUSH AF - LD A,SYS_PAGE - OUT (SLOT3),A - LD HL,RebootDate - CALL GETTIME - POP AF - OUT (SLOT3),A - RET - -RESTART_ID: -.str: DZ "RESTART" -.size EQU $ - RESTART_ID.str - - -Start_again: LD SP,STACK-2 -START: DI - PUSH AF - XOR A - LD (ERRSUM),A - LD (ERRSUM.ErrDateTime),A - ; - LD A,R ; reg R bit7 - ਧ ᪠ ࠡ⪮ ( SET_CONFIG_ID) - LD (LOGOTYPE.playSnd),A - ; -; LD C,#97 -; RST_to_BIOS_18 -; XOR A -; LD C,#F2 -; RST_to_BIOS_18 -;------------------------------ ;!!!!! ᬮ -; CALL KINIT -;------------------------------ ;!!!!! ᬮ - -;--------[Clean keyboard buffer]-------- -; clean_kbd_buf: -; IN A,(Z84.SIO.Ch_A.Ctrl) -; BIT 0,A -; jr z,.exit -; IN A,(Z84.SIO.Ch_A.Data) -; jr clean_kbd_buf -; .exit: -;--------------------------------------- - - -;R08 CALL OPENDOS - ;!TEST 20/08/2024 - ;CALL ZXCLS - ; - CALL READING - CALL TEST_CHECKSUM - CALL NZ,SETDEFX - - ;!TODO CMOS Disabled use of CONFIG_DE (#C13A) word - ;LD A,#1C - ;CALL READCMS - ;PUSH AF - ;LD A,CMOS_CELL.HardwareConfiguration - ;CALL READCMS - ;POP DE - ;LD E,A - ; - - LD C,SLOT3 - IN B,(C) - PUSH BC - LD A,SYS_PAGE - OUT (C),A - -; LD (SYS_PAGE.CONFIG_DE),DE - - LD HL,SYS_PAGE.INT_ADRESS ;EXTENDED INTERRUPT - XOR A - LD (HL),A - INC L - LD (HL),A - INC L - LD (HL),A - INC L - LD (HL),A - POP BC - OUT (C),B - - - ;CALL TRD_MOUNT ; !TEST 24/09/2024 ७ EXIT_SETUP (। ᪮ ZX) - CALL FDD_INSTAL - CALL CLEAR_MEM - CALL ZXMODE_SETUP - CALL XY_SCREEN - -;R06 ;[Check Quick Start ROM] - LD BC,CMOS_CELL.BootUpParams.Mask.QuickStartROM ;#010E - CALL GET_CMOS_VALUE - POP BC - RR C - JR NC,IGNORE_QuickStartROM ; १ ஢ન Space exp.asm [Check SPACE] - PUSH AF - LD C,SLOT3 - IN B,(C) - PUSH BC - LD A,SYS_PAGE - OUT (C),A - LD HL,SYS_PAGE.RESTART_ID - LD DE,RESTART_ID.str - LD B,RESTART_ID.size - CALL COMPARE_RESTART_ID - CALL NZ,SET_RESTART_ID - POP BC - OUT (C),B - JR Z,YES_QuickStartROM - POP AF - JR IGNORE_QuickStartROM - -SET_RESTART_ID: - PUSH AF - LD HL,RESTART_ID.str - LD DE,SYS_PAGE.RESTART_ID - LD BC,RESTART_ID.size - LDIR - LD HL,PowerOnDate ; !TODO , ६ 㤥 ⮢ - CALL GETTIME - POP AF - RET - -YES_QuickStartROM: - POP AF - OR A - JP NZ,EXIT_SETUP -IGNORE_QuickStartROM: - CALL INSTALL - LD DE,#0528 - ;CALL ScreenPOS.LOCAT - CALL LP_SET_PLACE - LD A,msgStrings.toSetupButton - LD E,COLORS.CGA.FLASH + COLORS.CGA.INK.WHITE - CALL POSTMSC - - LD DE,#0900 - ;CALL ScreenPOS.LOCAT - CALL LP_SET_PLACE -ERRSUM+1: - LD A,#00 - OR A - JR Z,.ErrDateTime - XOR A - LD (.ErrDateTime+1),A ; ᫨ ஫쭠 㬬 ᫥⥫, ᮮ饭 ਢ /६ 뢮 - LD A,msgStrings.cmosChecksumErr - LD E,COLORS.CGA.INK.RED - CALL POSTMSC - CALL ScreenPOS.CRLF - CALL ScreenPOS.CRLF - JR CHEKOK - -.ErrDateTime+1: - LD A,0 - OR A - JR Z,CHEKOK - LD A,msgStrings.cmosDateTimeErr - LD E,COLORS.CGA.INK.RED - CALL POSTMSC - CALL ScreenPOS.CRLF - CALL ScreenPOS.CRLF - -CHEKOK: ;CALL ScreenPOS.GET_CUR - CALL LP_GET_PLACE - PUSH DE - CALL LOGOTYPE - - LD DE,#0000 - ;CALL ScreenPOS.LOCAT - CALL LP_SET_PLACE - LD A,msgStrings.spModel - CALL POSTMSG - CALL PIDNUM - CALL ScreenPOS.CRLF - - LD A,msgStrings.boardID - CALL POSTMSG - CALL PIDBOARD - CALL ScreenPOS.CRLF - - LD A,msgStrings.spCNFver - CALL POSTMSG - CALL CNF_VER_PRINT - CALL ScreenPOS.CRLF - - LD A,msgStrings.spMemory - CALL POSTMSG - CALL EMM.GetMemSize - PUSH BC - CALL PMEMORY - CALL ScreenPOS.CRLF - LD A,msgStrings.memoryAvailable - CALL POSTMSG - POP HL - CALL PMEMORY - CALL ScreenPOS.CRLF - - ;CALL TSTCMOS - CALL CMOS_TEST - - LD A,msgStrings.cmosNone - JR C,CMOS_ABSENT - ; CMOS OK - CALL CMOSINIT - LD A,msgStrings.cmosFound - CALL POSTMSG - LD A,',' - CALL PRINT_CHAR - LD A," " - CALL PRINT_CHAR - LD HL,RebootDate - CALL PRNTIME - CALL ScreenPOS.CRLF - JR INFO_MESSAGE -CMOS_ABSENT: - CALL POSTMSG -INFO_MESSAGE: - ; for recovery boot - ; LD DE,#0428 - ; CALL LP_SET_PLACE - ; LD A,msgStrings.forCtrlBootButton - ; LD E,COLORS.CGA.INK.WHITE - ; CALL POSTMSC - ; - ; For alternative boot - LD DE,#0528 - CALL LP_SET_PLACE - LD A,msgStrings.forAltBootButton - LD E,COLORS.CGA.INK.WHITE - CALL POSTMSC - - - POP DE - CALL LP_SET_PLACE - - CALL TSETUP ;!TODO 뢠? - - CALL CONFIGURE_IDE_DRIVES.START - ;CALL CONFIGURE_IDE_DRIVES.Nop_CHANELS - CALL CTRLKEY - LD A,B - ; [x] 05/07/2024 - BIT X_CTRL,A - LD BC,#FFFF ; થ PrepareToBOOT, ⮡ 㧨 Recovery - JR NZ,RECOVERY_BOOT - ; - BIT X_ALT,A - JR NZ,ALT_BOOT - ; - CALL TSETUP - ; - LD BC,CMOS_CELL.BootDrives.Mask.SysDisk ;#0710 -RECOVERY_BOOT: - CALL PrepareToBOOT - LD A,msgStrings.bootFail - LD E,COLORS.CGA.INK.LRED - CALL C,POSTMSC - CALL ScreenPOS.CRLF - ; - CALL INT_ON -ALT_BOOT: - LD A,msgStrings.bootAltDrv - LD E,COLORS.CGA.INK.LGREEN - CALL POSTMSC - - LD BC,CMOS_CELL.BootDrives.Mask.AltSysDisk ;#7010 - CALL PrepareToBOOT - LD A,msgStrings.bootFail - LD E,COLORS.CGA.INK.LRED - CALL C,POSTMSC - CALL ScreenPOS.CRLF - - ;NO START DISK - RESTART / SETUP / ZX SPECTRUM mode - LD BC,CMOS_CELL.Options.Mask.RebootMSG ;#021D - CALL GET_CMOS_VALUE - OR A - JP Z,EXIT_SETUP - - CALL ScreenPOS.CRLF - LD A,msgStrings.afterBootFail - LD E,COLORS.CGA.INK.RED - CALL POSTMSC - - ;EI - CALL INT_ON -StartUpKey: CALL WAITKEY - LD HL,#4F00 ; DEL - go to settings - ;AND A - SBC HL,DE - JR Z,ENTER_SETUP - ; - CP #1B ; ESC - go to zx spectrum mode - JP Z,EXIT_SETUP - CP #0D ; ENTER - restart - JP NZ,StartUpKey - XOR A - JP Start_again - -TSETUP: CALL SCANKEY - RET Z - LD HL,#4F00 ; DEL - go to settings - AND A - SBC HL,DE - JR Z,ENTER_SETUP - ; - LD HL,#011B ; ESC - AND A - SBC HL,DE - JR NZ,TSETUP - POP HL ; 㡨ࠥ 譥 - JP EXIT_SETUP -ENTER_SETUP: - XOR A - LD (ITEM_Restore),A - CALL SETTINGS - XOR A - JP Start_again - -COMPARE_RESTART_ID: - LD A,(DE) - CP (HL) - RET NZ - INC HL - INC DE - DJNZ COMPARE_RESTART_ID - RET - -; ????? ७ 㭪樨 ? -; HL - data to write: BYTE Hours, minutes, seconds, day, month, century, year. (2022: 20 - century, 22 - year) -writeDateTimeToCmos: ;!FIXIT - LD A,(HL) - LD D,CMOS.Register.hours - CALL CMOS_WR - - INC HL - LD A,(HL) - LD D,CMOS.Register.minutes - CALL CMOS_WR - - INC HL - LD A,(HL) - LD D,CMOS.Register.seconds - CALL CMOS_WR - - INC HL - LD A,(HL) - LD D,CMOS.Register.date - CALL CMOS_WR - - INC HL - LD A,(HL) - LD D,CMOS.Register.month - CALL CMOS_WR - - INC HL - LD A,(HL) - LD D,CMOS.Register.century - CALL CMOS_WR - - INC HL - LD A,(HL) - LD D,CMOS.Register.year - CALL CMOS_WR - RET - -XY_SCREEN: ;R06 - LD A,CMOS_CELL.ScreenPosition - CALL READCMS - LD B,A - LD A,ACEX.HOLD - JP SET_PORTS - ; PUSH AF - ; IN A,(SLOT3) - ; LD E,A - ; LD A,DCP_PAGE - ; OUT (SLOT3),A - ; LD A,(#C400) ;c400 for first cfg 50176 - ; LD D,A - ; LD A,ACEX.HOLD - ; LD (#C400),A - ; POP AF - ; LD BC,0 - ; OUT (C),A - ; LD A,D - ; LD (#C400),A - ; LD A,E - ; OUT (SLOT3),a - ; RET -; -;R07 -; CMOSINIT: -; LD D,10 ;FREQ -; LD C,#F6 ;READ CMOS -; RST_to_BIOS -; CP #26 -; JR NZ,CMSERR -; LD D,12 -; LD C,#F6 -; RST_to_BIOS -; CP #50 -; RET Z -; CMSERR: -; LD D,10 -; LD A,#26 ;FREQ -; LD C,#F7 -; RST_to_BIOS -; LD D,11 -; LD A,#02 ;TIME FORMAT -; LD C,#F7 -; RST_to_BIOS -; LD D,12 -; LD A,#50 -; LD C,#F7 -; RST_to_BIOS -; LD D,13 -; LD A,#80 -; LD C,#F7 -; RST_to_BIOS -; RET - -;------------------- ;!!!!! ᬮ -; 0 - 1-st FDD -; 1 - 2-nd FDD -; 2 - 1-st IDE -; 3 - 2-nd IDE -; 4 - 3-rd IDE -; 5 - 4-th IDE -; 6 - RAM-DISK -; -; -> BC - 祩 ᪠ ⥭ 祭 㧮筮 ࠩ - -; -;[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ] -RECOVERYstart: - LD A,msgStrings.bootRecovery - CALL POSTMSG - ; - - ; 롮 ࠬ᪠ ४ - _mRECOVERYrdChooseTYPE RECOVERYrdChooseTYPE - - ; ਡ ᫥ ࠬ, ᫨ -.killRAMdisk: LD A,SYS_PAGE.RAMD_KEYS.NUM-1 - LD (.RDkey),A - CALL EMM.FreeMemRMD - JR NC,.setRAMdisk - JR Z,.setRAMdisk - RET ; ⭠ 訡 - 室 -.setRAMdisk: LD A,(.RDkey) - LD B,ROM_DISK.Pages.Size - CALL EMM.GetMemRMD - JR NC,.IMGread ; ᢮ ࠬ - DEC A - JR Z,.FreeMem ; 訡 - 筮 , 뢠 - RET ; ⭠ 訡 - 室 -.FreeMem: CALL EMM.FullInit - JR .killRAMdisk -; - -; 室: A - RAM block ID -.IMGread: - ; ਠ ஢ ROM -> RAM disk - _mRECOVERYmountTYPE RECOVERYmountTYPE -; - ;Exit from "ROM Disk to RAM disk" procedure -.RDkey+*: LD A,0 - OR DRIVE_CODES.SPRINTER.RAM - LD B,A ; । 㧮筮 ன⢮ OS_LOAD - JP OS_LOAD - ; -;[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ] -; - -PrepareToBOOT: ;CALL INT_ON - HALT - CALL PORTS_INIT.clean_kbd_buf ;Clearing the keyboard buffer - CALL PORTS_INIT.clean_mouse_buf ;Clearing the mouse buffer - CALL INT_OFF - ; ᯮ祭 祭 BC - ; [x] 05/07/2024 - INC BC - LD A,B - OR C - JP Z,RECOVERYstart - DEC BC - ; - CALL GET_CMOS_VALUE - LD B,DRIVE_CODES.SPRINTER.FDD - ; FDD - OR A - JR Z,FDSTART ; FDD A: - INC B - DEC A - JR Z,FDSTART ; FDD B: - ; IDE - LD B,DRIVE_CODES.SPRINTER.HDD - DEC A - JR Z,HDSTART - INC B ;LD B,#81 - DEC A - JR Z,HDSTART - INC B ;LD B,#82 - DEC A - JR Z,HDSTART - INC B ;LD B,#83 - DEC A - JR Z,HDSTART - ; RAM - DEC A - JR Z,RDSTART - ; ROM - DEC A - JP Z,RECOVERYstart - ; Error - SCF - RET - ; -FDSTART: PUSH BC - PUSH BC - LD A,msgStrings.bootFdd - CALL POSTMSG - POP AF - CALL FDD_5x_RESET - POP BC - RET C - JR OS_LOAD - ; -CDSTART: LD A,B ; [ ] 15/02/2025 boot from ATAPI - OR DRIVE_CODES.SPRINTER.ATAPI - LD B,A - PUSH BC - LD A,msgStrings.bootCd - CALL POSTMSG - POP AF - PUSH AF - CALL PRINT_CHANEL - ; - POP BC - PUSH BC - CALL OS_LOAD - POP BC - RET NC - LD HL,2048 ;!HARDCODE sector size - LD IX,#0011 - JR OS_LOAD.CD - ; -RDSTART: LD A,msgStrings.bootRamDrv - CALL POSTMSG - LD B,DRIVE_CODES.SPRINTER.RAM ; 6 - ⨯ ࠩ RAM-DRV, 0 - ࠩ -.loop: PUSH BC - CALL OS_LOAD - POP BC - INC B - LD A,DRIVE_CODES.SPRINTER.RAM + SYS_PAGE.RAMD_KEYS.NUM-1 ; ᨬ ࠬ᪠ - SUB B - JR NC,.loop - RET - - -HDSTART: IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,B - ; - AND #03 ;R02 %00000011 - LD IY,IDE.INIT_TBL_IDE0 - JR Z,.next - ; - LD IY,IDE.INIT_TBL_IDE1 - CP 1 ;R02 - JR Z,.next - ; - LD IY,IDE.INIT_TBL_IDE2 ;R02 - CP 2 ;R02 - JR Z,.next - ; - LD IY,IDE.INIT_TBL_IDE3 ;R02 - ; -.next: LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) - EX AF,AF' - OUT (SLOT3),A - EX AF,AF' - CP IDE.Device.ATAPI - JP Z,CDSTART - PUSH AF - PUSH BC - LD A,msgStrings.bootHdd - CALL POSTMSG - POP AF - PUSH AF - CALL PRINT_CHANEL - ; - POP BC - POP AF - CP #FF - SCF - RET Z - ; -OS_LOAD: LD HL,512 ;!HARDCODE - LD IX,#0001 -.CD: LD (.SectorSizeAddr),HL - LD HL,#0000 - LD DE,TEMP - LD A,B - LD BC,1*256 + BIOS.DRV_READ - PUSH AF - RST ToBIOS_18 - ; - POP BC - RET C - LD A,B - EX AF,AF' - LD HL,TEMP - LD DE,SYSID - LD B,SYSID.length -.loop: LD A,(DE) - CP (HL) - SCF - RET NZ - INC HL - INC DE - DJNZ .loop - EX AF,AF' - PUSH AF - LD A,msgStrings.bootOk - LD E,COLORS.CGA.INK.LGREEN - CALL POSTMSC - CALL ScreenPOS.CRLF - POP AF ; 䨧᪨ ᪠ - POP HL -.MOVE0: DI - IM 1 - LD HL,MOVE1 - LD DE,OS_LOAD.SectorSizeAddr - MOVE1.length ; !HARDCODE - LD BC,MOVE1.length - LDIR - JP OS_LOAD.SectorSizeAddr - MOVE1.length - ; -MOVE1: LD HL,#8000 ; !HARDCODE - LD SP,HL - EX DE,HL - LD HL,TEMP - LD BC,(OS_LOAD.SectorSizeAddr) - LDIR - JP #8000+SYSID.length ;#800C ; !HARDCODE - ; -.length EQU $-MOVE1 - - -SYSID: DZ "Starting..." -.length EQU $-SYSID - - -;FD144A: DB #80,#12,#02,#50,#00,#00,#02,FDD_INIT_TABLE.FDD -; .Size EQU $ - FD144A -; FD720A: DB #00,#09,#02,#50,#00,#00,#02,FDD_INIT_TABLE.FDD -; .Size EQU $ - FD720A - - -FDD_INIT_TABLE_35: FDD_TABLE_s { - #80, ;.DISK - #12, ;.SECTORS - #02, ;.HEADS - #50, ;.CYLINDL - #00, ;.CYLINDH - #0200, ;.BytesPerSector - #01 ;.ID 3.5" - } -; -FDD_INIT_TABLE_525: FDD_TABLE_s { - #00 ;.DISK - #09 ;.SECTORS - #02 ;.HEADS - #50 ;.CYLINDL - #00 ;.CYLINDH - #0200 ;.BytesPerSector - #02 ;.ID 5.25" - } - -FDD_INSTAL: IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD HL,SYS_PAGE.FDD_TABLE.A - LD BC,+(2*FDD_TABLE_s)*256 + #FF ; table_size*256 + fill_byte -.FILLFDD: LD (HL),C - INC HL - DJNZ .FILLFDD - ; - ; - LD BC,CMOS_CELL.DrivesSetup_1.Mask.FirstFDD ;#0311 - CALL .Choose_FDD_Type - JR NZ,.next_FDD - ; - LD DE,SYS_PAGE.FDD_TABLE.A - LD BC,SYS_PAGE.FDD_TABLE.A.Size - LDIR -.next_FDD: LD BC,CMOS_CELL.DrivesSetup_1.Mask.SecondFDD ;#0C11 - CALL .Choose_FDD_Type - JR NZ,.NOFDD1 - ; - LD DE,SYS_PAGE.FDD_TABLE.B - LD BC,SYS_PAGE.FDD_TABLE.B.Size - LDIR - LD A,(SYS_PAGE.FDD_TABLE.B + FDD_TABLE_s.DISK) - OR 1 - LD (SYS_PAGE.FDD_TABLE.B + FDD_TABLE_s.DISK),A -.NOFDD1: EX AF,AF' - OUT (SLOT3),A - RET - ; -.Choose_FDD_Type: - CALL GET_CMOS_VALUE - LD HL,FDD_INIT_TABLE_35 - OR A - RET Z - ; - LD HL,FDD_INIT_TABLE_525 - DEC A - RET - - -PIDNUM: LD HL,memBUFFER.ID - LD BC,#00FF - XOR A - CPIR - LD A,(HL) - OR A - RET Z - CALL PRINTZ - RET - -PIDBOARD: CALL FN_CRIPT.board_id - ; - IF MotherBoardType > 0 - PUSH AF - ENDIF - PUSH DE - PUSH HL - PUSH BC - LD A,B - CALL PRNHEX - LD A,'-' - CALL PRINT_CHAR - POP BC - LD A,C - CALL PRNHEX - LD A,'-' - CALL PRINT_CHAR - POP HL - CALL IPRINT.Z - POP DE - PUSH DE - LD A,D - CALL PRNHEX - POP DE - LD A,E - IF MotherBoardType == 0 - JP PRNHEX - ELSE - CALL PRNHEX - LD A,' ' - CALL PRINT_CHAR - POP AF - ; type 0 - Classic - RET Z - ; type 1 - DX - LD HL,.ver_DX - DEC A - JP Z,PRINTZ - ; type 2 - DP - LD HL,.ver_DP - DEC A - JP Z,PRINTZ - ; type 3 - Max - LD HL,.ver_Max - DEC A - JP Z,PRINTZ - ; type 4 - test - LD HL,.Test - DEC A - JP Z,PRINTZ - RET - ; -.ver_DX: DZ "DX" -.ver_DP: DZ "DP" -.ver_Max: DZ "Max" -.Test DZ "0123456789A" - ENDIF - - -CNF_VER_PRINT: - LD HL,memBUFFER.ID - IFN BIOS.FN_VERSION.STR.BitstreamVer = 0 - LD BC,BIOS.FN_VERSION.STR.BitstreamVer*256 - XOR A -.loop: CPIR - DJNZ .loop - ENDIF - JP PRINTZ - -;PIDNUM LD A,#0D -; LD HL,ID_BUFFER -; LD BC,#0030 -; CPIR -; RET NZ -; INC HL -; LD BC,#0286 -; RST_to_BIOS_18 -; INC HL -; LD BC,#0586 -; RST_to_BIOS_18 -; INC HL -; LD BC,#0286 -; RST_to_BIOS_18 -; XOR A -; RET - -;PIDDATE -; LD A,#0D -; LD HL,ID_BUFFER -; LD BC,#0030 -; CPIR -; RET NZ -; INC HL -; CPIR -; RET NZ -; INC HL -; LD BC,#0A86 -; JP_to_BIOS - -////////////////////////////////////////////////////////////////////// -; INCLUDE 'IM2_INT.asm' -////////////////////////////////////////////////////////////////////// - -PRNHEX: LD D,A - RRCA - RRCA - RRCA - RRCA - AND #0F - ADD A,#30 - CP #3A - JR C,PRNH1 - ADD A,7 -PRNH1: CALL PRINT_CHAR - LD A,D - AND #0F - ADD A,#30 - CP #3A - JP C,PRINT_CHAR - ADD A,7 - JP PRINT_CHAR - -PHEX: LD D,A - RRCA - RRCA - RRCA - RRCA - AND #0F - ADD A,#30 - CALL PRINT_CHAR - LD A,D - AND #0F - ADD A,#30 - JP PRINT_CHAR - -PRNTIME: - IN A,(SLOT3) - PUSH AF - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,(HL) - CALL PHEX - LD A,":" - CALL PRINT_CHAR - INC L - LD A,(HL) - CALL PHEX - LD A,":" - CALL PRINT_CHAR - INC L - LD A,(HL) - CALL PHEX - POP AF - OUT (SLOT3),A - RET - - -PMEMORY: - ADD HL,HL - ADD HL,HL - ADD HL,HL - ADD HL,HL ; * 16 - CALL IPRINT - LD A,"K" - JP PRINT_CHAR - - IFUSED ZXCLS -ZXCLS: LD HL,#4000 - LD DE,#4001 - LD BC,#1AFF - LD (HL),L - LDIR - RET - ENDIF - -GET_ID: LD HL,memBUFFER.ID - ;LD C,BIOS.FN_VERSION - ;JP_to_BIOS - JP FN_VERSION - - -;R01GET_ID -;R01 LD A,#10 -;R01 LD BC,#1FFD -;R01 OUT (C),A -;R01 LD C,SLOT3 -;R01 IN B,(C) -;R01 PUSH BC -;R01 LD A,#EE -;R01 OUT (C),A -;R01 LD HL,#FFD0 -;R01 LD DE,ID_BUFFER -;R01 LD BC,#30 -;R01 LDIR -;R01 POP BC -;R01 OUT (C),B -;R01 XOR A -;R01 LD BC,#1FFD -;R01 OUT (C),A -;R01 RET - - -; COPY_CHAIN: LD E,L -; LDI -; DEC L -; LD L,(HL) -; INC L -; RET Z -; DEC L -; JR COPY_CHAIN - -; ; 室: HL - RAM_TABLE 㤠 ஢ -; RESTORE_CHAINS: LD DE,SYS_PAGE.RAM_TABLE -; XOR A -; .loop: CP (HL) -; JR Z,.NoCopy -; LD E,L -; LDI -; DEC L -; .NoCopy: INC L -; JR NZ,.loop -; RET - -;---------------------------------------------------------------[] -;REGISTER #1E -; %0000'0011 - TR DOS A: Default / FDD / HDD / RMD -; %0000'1100 - TR DOS B: Default / FDD / HDD / RMD -; %0011'0000 - TR DOS C: Default / FDD / HDD / RMD -; %1100'0000 - TR DOS D: Default / FDD / HDD / RMD - -TRD_MOUNT: LD BC,CMOS_CELL.TRDOSmount.Mask.A ;#031E - LD A,0 - CALL .TRDOSX - LD BC,CMOS_CELL.TRDOSmount.Mask.B ;#0C1E - LD A,1 - CALL .TRDOSX - LD BC,CMOS_CELL.TRDOSmount.Mask.C ;#301E - LD A,2 - CALL .TRDOSX - LD BC,CMOS_CELL.TRDOSmount.Mask.D ;#C01E - LD A,3 -.TRDOSX: ; PUSH AF - ; CALL GET_CMOS_VALUE - ; POP BC - ; OR A - ; RET Z - ; LD C,BIOS.FDD_TO_DRV - ; DEC A - ; JP Z,ToBIOS_18 - ; LD C,BIOS.HDD_TO_DRV - ; DEC A - ; JP Z,ToBIOS_18 - ; SCF - ; RET - PUSH AF - CALL GET_CMOS_VALUE - POP BC - OR A - RET Z - DEC A - JP Z,FDD_TO_DRV - DEC A - JP Z,HDD_TO_DRV - SCF - RET -;---------------------------------------------------------------[] - - -;!TODO ᬮ - ;뢠 #FE ⥭ 3- ⮢ - ;OPENDOS: - ; DI - ; IN A,(SLOT3) - ; EX AF,AF' - ; LD A,#40 - ; OUT (SLOT3),A - ; LD HL,#C000 - ; LD DE,#F000 - ; LD BC,#0400 - ; LDIR - ; LD A,#40 - ; LD (#F26E),A - ; LD (#F27E),A - ; LD (#F2EE),A - ; LD (#F2FE),A - ; LD (#F36E),A - ; LD (#F37E),A - ; LD (#F3EE),A - ; LD (#F3FE),A - ; LD HL,#F000 - ; LD DE,#F400 - ; LD BC,#0C00 - ; LDIR - ; EX AF,AF' - ; OUT (SLOT3),A - ; RET -; - - - -setFRAME: -.double: - LD HL,.dataDoubleAll - JR .setElements -.single: - LD HL,.dataSingleAll - JR .setElements -.high: LD HL,.dataSingleDown - JR .setElements -.low: LD HL,.dataSingleUp - JR .setElements -.medium: - LD HL,.dataSingleMedium -; JR .setElements -.setElements: - LD DE,ElementsBuffer - LD BC,ElementsBuffer.Size - LDIR - RET - -.dataDoubleAll: BYTE "ɻͺȼ", "̹" ; #C9,#BB,#CD,#BA,#C8,#BC, #CC,#B9,#CB,#CA -.dataSingleAll: BYTE "ڿij", "ô" ; #DA,#BF,#C4,#B3,#C0,#D9, #C3,#B4,#C2,#C1 -.dataSingleDown: BYTE "ɻĺǶ", "Ƕ" ; #C9,#BB,#C4,#BA,#C7,#B6, #C7,#B6,#D1,#C1 -.dataSingleUp: BYTE "Ƕĺȼ", "Ƕ" ; #C7,#B6,#C4,#BA,#C8,#BC, #C7,#B6,#C2,#CF -.dataSingleMedium: BYTE "ǶĺǶ", "Ƕ" ; #C7,#B6,#C4,#BA,#C7,#B6, #C7,#B6,#C2,#C1 -; -ElementsBuffer: -.UpLeft: BYTE "" ; UL - UpLeft -.UpRight: BYTE "" ; UR - UpRight -.HorizontalLine: BYTE "" ; ZL - HorizontalLine -.VerticalLine: BYTE "" ; VL - VerticalLine -.DownLeft: BYTE "" ; LL - DownLeft -.DownRight: BYTE "" ; LR - DownRight -.LeftCenter: BYTE "" ; LC - LeftCenter -.RightCenter: BYTE "" ; RC - RightCenter -.UpCenter: BYTE "" ; UC - UpCenter -.DownCenter: BYTE "" ; DC - DownCenter -.Size EQU $-ElementsBuffer -; - IF STARTUP_SND - INCLUDE 'startup_sound.asm' - ENDIF - INCLUDE 'VIDEO_IO.asm' - INCLUDE 'AUTOIDE.asm' - INCLUDE 'SETTINGS.asm' - INCLUDE 'KEY.asm' -;....................................... - -KEY: EI - JP WAITKEY - -FindStringAddr: - LD L,A - LD H,0 - LD BC,memBUFFER.Messages - ADD HL,HL - ADD HL,BC - LD A,(HL) - INC HL - LD H,(HL) - LD L,A - RET - -POSTLEN: - CALL FindStringAddr - LD BC,#0100 - XOR A - CPIR - LD A,#FF - SUB C - SRL A - LD C,A - LD A,40 - SUB C - LD E,A - ;JP ScreenPOS.LOCAT - JP LP_SET_PLACE - -SETLAND: - LD A,#0E ; !HARDCODE CMOS 祩 options - CALL READCMS ;!TODO । GET_CMOS_VALUE - AND #04 ; !HARDCODE CMOS 祭 몠 - LD HL,MSG_RUS - JR NZ,.set - LD HL,MSG_ENG - ; -.set: LD DE,memBUFFER.Messages - LD BC,MSG_TABLE.Size - LDIR - RET - -; -; print boot drive number -PRINT_CHANEL: AND #0F - LD C,A - ; - LD A,msgStrings.parPriIdeMA - JR Z,.print_chanel - ; - LD A,msgStrings.parPriIdeSl - DEC C - JR Z,.print_chanel - ; - LD A,msgStrings.parSecIdeMA - DEC C - JR Z,.print_chanel - ; - LD A,msgStrings.parSecIdeSl -.print_chanel: CALL FindStringAddr - ;CALL LP_GET_PLACE - ;LD A,ScreenPOS.SUBNAME.POS - ;SUB E - ;LD B,A - LD B,0 - LD D,#FF - JP LP_PRINT_LINE6 -; - -POSTMSC: CALL FindStringAddr - LD A,E - JP CPRINTZ -; -////////////////////////////////////////////////////////////////////// - INCLUDE 'IM2_INT.asm' -////////////////////////////////////////////////////////////////////// - -POSTMSG: CALL FindStringAddr - JP PRINTZ - - - -;----------------------------------------------------------------------[] -; 㧨 v . ਠ: -;[x] 0 - 㧨 ᯥ㬠, ࠭ #41 3.04 -;[x] 1 - 㧨 ᯥ㬠 ROM ᫨ 䫠 ZX -;[x] 2 - 㧨 ᯥ㬠 ROM १᪥ -;[ ] 3 - 㧨 ᯥ㬠, ࠭ #41 ⠪, -; ⮡ 㦠 ᯥ㬠 饭 -ZXMODE_SETUP: IN A,(SLOT3) - PUSH AF - LD A,Spec_Page - OUT (SLOT3),A - ; - LD BC,CMOS_CELL.Options.Mask.LoadZXroms - CALL GET_CMOS_VALUE - ; - OR A - JR Z,.init_41h - DEC A - JR Z,.CheckAndLoad - DEC A - JR Z,.Load_ZXROMS - ;!TODO - ;DEC A - ;JR Z,.New_init_41h - ; - ; Check ZX ROMS Loaded -.CheckAndLoad: LD A,(Spec_Page.flag_Z) - CP 'Z' - JR NZ,.Load_ZXROMS - LD A,(Spec_Page.flag_X) - CP 'X' - JR NZ,.Load_ZXROMS - ; [x] 31/12/23 客 窨 - LD A,R - AND #80 - JR Z,.No_Need_To_Load_ZXROMS -.Load_ZXROMS: XOR A - LD R,A - ; Load ZX ROM's - LD BC,64*256 + BIOS.ZX_MEMORY_MANAGER ; [ ] free zx pages! MANAGE_ZX_PAGES.FREE_vMEMORY - RST ToBIOS_18 - ; - LD B,3 ; !HARDCODE zx-rom number of pages - CALL EMM.GetMem - JR C,.init_41h ;!FIXIT 訡 ; [ ] free zx pages! - CALL init_zx_roms - ; IFN FREE_ZX_PAGES - ; ; ⠢ ᫨ ண㧨 ᯥ㬠 - ; LD HL,'XZ' - ; LD (Spec_Page.flag_Z),HL - ; ENDIF ; -.No_Need_To_Load_ZXROMS: - POP AF - OUT (SLOT3),A - RET - ; -.init_41h: CALL init_zx_roms.init_41h - LD A,SYS_PAGE - OUT (SLOT3),A - CALL .Set_Page41 - ;!FIXIT ⠭ vROM ࠭ #41 ; [ ] free zx pages! - JR .No_Need_To_Load_ZXROMS - ; -.Set_Page41: LD HL,SYS_PAGE.SHARED_BUFFER_256b + 11 - LD DE,SYS_PAGE.SHARED_BUFFER_256b + 11-1 - LD BC,11-1 ; !HARDCODE - ࠭ vROM + RAM BLOCK ID - LD (HL),#FF - LDDR ; 頥 - EX DE,HL - ; - ; LD A,SYS_PORT.EXTENSION - ; OUT (SYS_PORT.ROM),A - ; JP MANAGE_ZX_PAGES.INIT_vROM - ; XOR A ;LD A,SYS_PORT.BIOS - ; OUT (SYS_PORT.ROM),A - LD BC,128*256 + BIOS.ZX_MEMORY_MANAGER ; [ ] free zx pages! HARDCODE - JP ToBIOS_18 - ;RET -; -;--------------------[copy zx-roms to zx-pages]-----------------; -; SLOT0 - ROM 8, sys_port - on. -; RAM SLOT0 - page 0 -; RAM SLOT3 - Spec_Page -; ० zx spectrum -; !HARDCODE ࠭ -init_zx_roms: DI - ; ;;;;;;;; - ; IF FREE_ZX_PAGES - ; ;;;;;;;; - ; A = SYS_PAGE.Block_ID.vROM - ; 11 ⮢ 묨 ࠭栬 - ; 㯠 1 RAM BLOCK ID, 3 ࠭ vROM #FF - LD HL,#FFFF - LD (memBUFFER.Shared + 5),HL ; !HARDCODE zx-rom number of pages - LD (memBUFFER.Shared + 7),HL ; !HARDCODE zx-rom number of pages - LD (memBUFFER.Shared + 9),HL ; !HARDCODE zx-rom number of pages - ; 砥 ᯨ᮪ ࠭ vROM - LD HL,memBUFFER.Shared - LD (HL),A - INC HL - LD B,A - CALL EMM.GetMemBlkPages - ; - LD A,SYS_PAGE - OUT (SLOT3),A - ; ⠭ ࠭ vROM ALTERA - DEC HL - LD A,ROM.EXTENSION - OUT (SYS_PORT.ROM),A - CALL MANAGE_ZX_PAGES.INIT_vROM - ; 㥬 ࠧ ZX-ROM ࠭ vROM - LD A,2 ; !HARDCODE - LD BC,+(3*2)*256 + SLOT3 ; !HARDCODE B = (zx-rom number of pages)*2 - LD HL,memBUFFER.Shared + 1 -.loop: OUTI - OUT (ROM.SLOT0),A - EXX - LD HL,0 - LD DE,#C000 - LD BC,#4000 - LDIR - EXX - INC A - DJNZ .loop - ; 頥 ࠭ - XOR A - OUT (ROM.SLOT0),A - OUT (SYS_PORT.ROM),A - LD A,Spec_Page - OUT (SLOT3),A -.init_41h: ; FF- - LD HL,#C000 - LD DE,#C001 - LD BC,#3FFF - 2 - LD (HL),#FF - LDIR - ; 誠 ࠭ #41 - LD HL,PROG_NO_ROM - LD DE,#C000 + Spec_Page.no_zx_rom - LD BC,PROG_NO_ROM.size - LDIR - ; - LD HL,RAM_BIOS_PROG - LD DE,#C000 + Spec_Page.to_bios - LD BC,RAM_BIOS_PROG.Length - LDIR - RET -;---------------------------------------------------------------------[] - - -;--------------------------------------- - INCLUDE 'src/bios/ROM/SETUP/messages.z80' -;--------------------------------------- -; - - STRUCT MAIN_BUFFERS -ID BLOCK #100 -Messages BLOCK MSG_ENG.size -Shared BLOCK 1024 -End BYTE - ENDS - - -memBUFFER MAIN_BUFFERS = $ -STACK EQU #C000 -.Size EQU 128 - - - IF memBUFFER.End-1 > #C000-STACK.Size - DISPLAY 'memBUFFER.Shared overlaps STACK by: ',/A,(memBUFFER.End-1)-(#C000-STACK.size) - ASSERT memBUFFER.End-1 < #C000-STACK.size - ENDIF - - IFDEF PREBUILD - OUTEND - - DISPLAY '-----[Set_Pictures Prebuild start]-----' - MMU 1 e, 0 ; ࠭ 0 0 ஢ઠ ࠭. - ORG ROM_MAP.LOGO - INCLUDE 'src/bios/logo/Set_Pictures.asm' - DISPLAY '-----[Set_Pictures Prebuild done ]-----' - ELSE -MAIN_END_CODE_ADDRESS EQU $-1 - ; DISPLAY ' -------------------[Main.asm]-------------------' - ; DISPLAY 'End code address: ',/A,$-1 - ; DISPLAY 'Code size: ',/A,$-COMPILE_ADDR.MAIN - ; DISPLAY 'End buffers address: ',/A,memBUFFER.End-1 - ; DISPLAY 'Free memory: ',/A,#C000-(memBUFFER.End-1)-STACK.Size - ; DISPLAY 'Unused bytes before INT_POINTER: ',/A,INT_POINTER-before_intPointer - ENDIF -; - - - -;======================================================================================================================= - -; ;;;;;;;; -; ELSE -; ;;;;;;;; -; IN A,(SLOT3) -; EX AF,AF' -; ; -; LD A,SYS_PORT.EXTENSION -; OUT (SYS_PORT.ROM),A -; INC A ; !HARDCODE LD A,2 -; LD B,3 ; !HARDCODE zx-rom number of pages -; ; -; .loop: EXX -; ; -; OUT (ROM.SLOT0),A -; OR %0100'0000 ; !HARDCODE ࠭ -; OUT (SLOT3),A -; AND %1011'1111 ; !HARDCODE ࠭ -; ; -; LD HL,0 -; LD DE,#C000 -; LD BC,#4000 -; LDIR -; ; -; INC A -; EXX -; DJNZ .loop -; ; -; XOR A -; OUT (ROM.SLOT0),A -; OUT (SYS_PORT.ROM),A -; EX AF,AF' -; OUT (SLOT3),A -; ; -; ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 -; [ ] free zx pages! । 맮 FREE_ZX_PAGES.INIT_vROM -; LD A,ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128 -; LD B,#42 ;!HARDCODE page -; CALL SET_PORTS -; ; -; LD A,ACEX.vROM.BASIC_48 ; ROM-ID - BASIC 48 -; LD B,#43 ;!HARDCODE page -; CALL SET_PORTS -; ; -; LD A,ACEX.vROM.TR_DOS ; ROM-ID - TR-DOS -; LD B,#44 ;!HARDCODE page -; CALL SET_PORTS -; ; -; ; ࠭ ᯮ -; LD A,ACEX.vROM.EXPANSION ; ROM-ID - BIOS -; ;LD B,#45 ;!HARDCODE page -; LD B,#41 -; CALL SET_PORTS -; ; -; LD A,ACEX.vROM.BIOS_1 ; ROM-ID - BIOS-1 -; ;LD B,#46 ;!HARDCODE page -; LD B,#41 -; CALL SET_PORTS -; ; -; LD A,ACEX.vROM.BIOS_2 ; ROM-ID - BIOS-2 -; ;LD B,#47 ;!HARDCODE page -; LD B,#41 -; CALL SET_PORTS -; ; ⢮ 4 ࠭ #E4..#E7 -; ;;;;;;;; -; ENDIF +;[BEGIN] +;//MODULE: DSETUP, Main module of BIOS SETUP & BOOTSTRAP +;//CREATE: ??-??-???? AUTHOR: Denis Parinov +;//UPDATE: 23-04-2001 DNS Remake for Sp2000 mainboard +;--------------------------------------------------------------- +;Rev Date Name Description +;--------------------------------------------------------------- +;R08 04-03-2002 DNS Disabled Open TRDOS +;R07 16-02-2002 DNS Add routine for check CMOS clock registers. +;R06 28-01-2002 DNS Add new items to SETUP Utility for screen position. +;R05 01-10-2001 DNS Found BUG with size of boot messages, messages for secondary +; IDE were removed. (BUG NOT FIXED!) --- 訡, ))) +;R04 14-09-2001 DNS Added procedure GET_BOARD_NUMBER +;R03 30-07-2001 DNS Developed a new IDE DETECT routine and fixied any bugs +;R02 25-07-2001 DNS Add Secondary IDE +;R01 23-04-2001 DNS Removed procedure GET_ID and make new which +; will be take Model Name. +;--------------------------------------------------------------- + +;Memory dump ; !TODO । +;#0000-#3FFF : STANDART ROM BIOS +;#4000-#7BFF : NOT USED MEMORY +;#7C00-#7C7F : SYSTEM JUMP RESIDENT +;#7C80-#7DFF : NOT USED MEMORY +;#7E00-#7FFF : SECTOR BUFFER AND TEMPORY AREA +;#8000-#8002 : SETUP ENTRY POINT +;#8003-#80F0 : STACK FRAME ;!!!!! ᬮ +;#80F1-#80FD : NOT USED MEMORY +;#80FE-#80FF : INTERRUPT ADDRESS +;#8000-#B3FF : SETUP AND BOOT PROGRAM +;#B400-#BAFF : BOOT MESSAGES ;!!!!! ᬮ +;#B900-#BEFF : SETUP MESSAGES AND ITEMS ;!!!!! ᬮ +;#BF00-#BFFF : STACK FRAME ;!!!!! ᬮ! +;#C000-#D8FF : NOT USED MEMORY +;---DELETED--- #D900-#FFFF : UNPACKED LOGOTYPE + +;System page(#FE) dump +;#F000-#F007 : db "RESTART",0 ;First start identificator +;#F008-#F00F : db hour,min,sec,day,month,century,year,reserved ; PowerOn date +;#F010-#F017 : db hour,min,sec,day,mouth,century,year,reserved ; Reboot date +; +;#FEE0-#FEEF : Any buffer (Video mode set?!) Used in Sprinter DOS and CD driver +;#FF00 +; + +; ਠ ୨ ( ࠡ 쭨 ) + IFDEF PREBUILD +; ENCODING "DOS" + DEVICE ZXSPECTRUM4096 ; 4 ࠬ + MMU 2 e, 0 ; ࠭ 0 2 ஢ઠ ࠭. + INCLUDE 'bios/shared/includes.inc' + ORG COMPILE_ADDR.MAIN + OUTPUT 'Build/Bin/temp/MAIN.BIN' + ENDIF + +;SYS_PAGE.RAMD_KEYS EQU #C180 ; RAM-Disks +;RAMD_KEY_NUM EQU 16 +;SYS_PAGE EQU #FE ; ࠭ ⥬묨 ६묨 BIOS +;SYS_PORT_ON EQU #7C +;SYS_PORT_OFF EQU #3C +;STACK EQU #80F0 +;PAGE0 EQU #82 +;PAGE1 EQU #A2 +;PAGE2 EQU #C2 +;SLOT3 EQU #E2 +;Y_PORT EQU #89 +;SYSPAGE EQU #FE +;INT EQU #80 + +;ITMADDR EQU MSG_Items_Buffer +;ITMTABS EQU #BA00 ;!!!!! b900 +;ITMTABS EQU ITMADDR + +;FDD EQU #03 + +;!FIXIT ଠ쭮 ய +TEMP EQU #7800 ; !HARDCODE +OS_LOAD.SectorSizeAddr EQU TEMP-2 +IDENTIFY_DEVICE_BUFFER _ATA_IDENTIFY_DEVICE_DATA = TEMP +MEMMAP2 EQU TEMP ; ஢ ALIGN 256 +TPOINTD EQU TEMP - SYS_PAGE.RAMD_KEYS.NUM; - SYS_PAGE.Sp_RAMD_KEYS.NUM ; [x] 4/11/2023 + ASSERT (low TEMP = 0) or (low MEMMAP2 = 0), "ERROR Align 256!!!" + +;; +;SETUP_MAIN: +MAIN_START: + ; POP AF + ; POP HL + LD SP,STACK + PUSH HL + LD (RET_TO_EXP_ADDR),HL + JP START +; DB "(C) 2002 PETERS PLUS LTD " +RET_TO_EXP_ADDR: WORD 0000 ; place for save ret address to exp + +; +;------------------- ;!!!!! ᬮ +; 祭 ६ ᠭ 묨 祭ﬨ +; ॣ A 室 㭪樨 #F6 (CMOS_RD) BIOS 祭 . +GETTIME: + PUSH HL + LD D,CMOS.Register.hours + CALL CMOS_RD + CP #24 ;24 + jp nc,.error + LD (HL),A + INC HL + + LD D,CMOS.Register.minutes + CALL CMOS_RD + CP #5A ; 60 + jp nc,.error + LD (HL),A + INC HL + + LD D,CMOS.Register.seconds + CALL CMOS_RD + CP #5A ; 60 + jp nc,.error + LD (HL),A + INC HL + + LD D,CMOS.Register.date ; ᫮ + CALL CMOS_RD + CP #32 + jp nc,.error + LD (HL),A + INC HL + + LD D,CMOS.Register.month + CALL CMOS_RD + CP #13 ;13 + jp nc,.error + LD (HL),A + INC HL + + LD D,CMOS.Register.century + CALL CMOS_RD + CP #1A ;20 + jp c,.error + CP #9A ;100 + jp nc,.error + LD (HL),A + INC HL + + LD D,CMOS.Register.year + CALL CMOS_RD + CP #9A ;100 + jp nc,.error + LD (HL),A + +; DEC HL +; LD C,A +; LD A,19 +; CP (HL) +; RET Z +; LD A,20 +; CP (HL) +; RET Z +; LD A,80 +; CP C +; LD A,20 +; JR NC,.correct_century +; LD A,19 +; .correct_century: +; LD (HL),A +; LD D,#32 ;CENTURY +; LD C,#F7 ; !HARDCODE +; RST_to_BIOS_18 + + POP HL + RET +.error: + LD HL,.default_date + POP DE + LD BC,7 + LDIR + +;---[] +;!FIXIT + CALL CMSERR + ; LD HL,.default_date + ; call writeDateTimeToCmos +;---[] + + ld a,#FF + ld (ERRSUM.ErrDateTime),a + RET + + LUA ALLPASS + sj.insert_define("Current_CENTURY", math.modf(tonumber(os.date("%Y"))/100)) + sj.insert_define("Current_YEAR", tonumber(os.date("%y"))) + sj.insert_define("Current_MONTH", tonumber(os.date("%m"))) + sj.insert_define("Current_DATE", tonumber(os.date("%d"))) + ENDLUA + +.default_date: + BYTE 0,0,0 ; Hours, minutes, seconds + BYTE #Current_DATE + BYTE #Current_MONTH + BYTE #Current_CENTURY + BYTE #Current_YEAR + + UNDEFINE Current_DATE + UNDEFINE Current_MONTH + UNDEFINE Current_CENTURY + UNDEFINE Current_YEAR +;-------------------------------- +; +;R07 ; !FIXIT CMOS ᤥ ᮣ᭮ +; ᫨ ३ ᥫ, 祪 뤠 ᮮ⢥ 訡 , , ࠡ . +CMOSINIT: + LD D,CMOS.Register.CTRLregA ; !FIXIT FREQ + CALL CMOS_RD + CP #26 ; !FIXIT + JR NZ,CMSERR + + LD D,CMOS.Register.CTRLregC + CALL CMOS_RD + CP #50 + RET Z +CMSERR: + LD D,CMOS.Register.CTRLregB + LD A,#82 ;TIME FORMAT ; !FIXIT CMOS + CALL CMOS_WR + + LD D,CMOS.Register.CTRLregA + LD A,#26 ; !FIXIT CMOS FREQ + CALL CMOS_WR + + LD D,CMOS.Register.CTRLregC + LD A,#0 ; !FIXIT CMOS + CALL CMOS_WR + + LD HL,GETTIME.default_date + call writeDateTimeToCmos + + LD D,CMOS.Register.CTRLregB + LD A,#02 ;TIME FORMAT ; !FIXIT CMOS + CALL CMOS_WR + + ; LD D,13 + ; LD A,#80 ; !FIXIT CMOS + ; LD C,#F7 ; !HARDCODE + ; RST_to_BIOS + RET + +CLEAR_MEM: IN A,(SLOT3) + PUSH AF + LD A,SYS_PAGE + OUT (SLOT3),A + ; 頥 RAM Table + LD HL,MEMMAP2 + LD DE,MEMMAP2+1 + LD BC,255 + LD (HL),0 + LDIR + ; 㥬 ZX vROM + LD HL,(SYS_PAGE.Block_ID.vROM) ; 㦭 祭 L + LD H,high SYS_PAGE.RAM_TABLE + LD D,high MEMMAP2 + ;LD BC,#01FF ;!HARDCODE 1 vROM RAM BLOCK ID + CALL COPY_CHAIN + ; LD IX,SYS_PAGE.Block_ID.vROM + ; LD H,high SYS_PAGE.RAM_TABLE + ; LD D,high MEMMAP2 + ; LD BC,#01FF ;!HARDCODE 1 vROM RAM BLOCK ID + ; CALL .SAVE_RMD + ; [x] 28/09/2024 ⤥ ࠬ᪨ ० ᯥ㬠 DSS. + LD B,high BIOS.SWAP_RAM_DRIVES.Sp2000 + CALL SWAP_RAM_DRIVES + ; 㦭 ࠭ ࠬ᪨ १᪥? + LD BC,CMOS_CELL.BootUpParams.Mask.SaveRAMdisks ;#400E + CALL GET_CMOS_VALUE + OR A + PUSH AF + JR Z,.skip_save_rmd + ; + ; save RAM disks on reboot when memory is cleared + LD HL,SYS_PAGE.RAMD_KEYS + LD DE,TPOINTD + LD BC,SYS_PAGE.RAMD_KEYS.NUM + LDIR + ; [x] 4/11/2023 + ; LD HL,SYS_PAGE.Sp_RAMD_KEYS + ; LD BC,SYS_PAGE.Sp_RAMD_KEYS.NUM + ; LDIR + ; + ; 㥬 RAM ᪨ Sprinter mode + LD IX,SYS_PAGE.RAMD_KEYS ;RAM DISKS + LD H,high SYS_PAGE.RAM_TABLE + LD D,high MEMMAP2 + LD BC,SYS_PAGE.RAMD_KEYS.NUM*256+#FF + CALL SAVE_CHAINS + ; [x] 4/11/2023 + ; LD IX,SYS_PAGE.Sp_RAMD_KEYS + ; LD B,SYS_PAGE.Sp_RAMD_KEYS.NUM + ; CALL .SAVE_RMD + ; +.skip_save_rmd: CALL EMM.InitMem + LD HL,MEMMAP2 + LD DE,SYS_PAGE.RAM_TABLE + CALL RESTORE_CHAINS + POP AF + JR Z,.skip_restore_rmd + ; LD BC,CMOS_CELL.BootUpParams.Mask.SaveRAMdisks ;#400E + ; CALL GET_CMOS_VALUE + ; OR A + ; JR Z,.skip_restore + ; + LD HL,TPOINTD + LD DE,SYS_PAGE.RAMD_KEYS + LD BC,SYS_PAGE.RAMD_KEYS.NUM + LDIR + ; +.skip_restore_rmd: + POP AF + OUT (SLOT3),A + ; [x] 04/11/2023 ⤥ ࠬ᪨ ० ᯥ㬠 DSS. + ; LD B,high BIOS.SWAP_RAM_DRIVES.Sp2000 + ; JP SWAP_RAM_DRIVES + RET + ; +; SAVE_CHAINS: LD A,(IX) +; INC IX +; OR A +; LD L,A +; CALL NZ,COPY_CHAIN +; DJNZ SAVE_CHAINS +; RET +; + +; +; +; before_intPointer EQU $ +; BLOCK #FF - low $,0 ; ࠢ #xxFF +; INT_POINTER: WORD 0 + +; ASSERT +low INT_POINTER = #FF, 'ERROR! Not valid interrupt pointer!' +; IFDEF PREBUILD +; ASSERT INT_POINTER-before_intPointer < 16, 'Warning! To much space before INT_POINTER.' +; ELSE +; IF INT_POINTER-before_intPointer > 16 +; DISPLAY 'Warning! To much space before INT_POINTER: ',/D,INT_POINTER-before_intPointer +; ENDIF +; ENDIF + +; INT_HANDLER: +; PUSH AF +; EX AF,AF' +; PUSH AF +; PUSH BC +; PUSH DE +; PUSH HL +; EXX +; PUSH BC +; PUSH DE +; PUSH HL +; PUSH IX +; PUSH IY +; CALL KEYSCAN +; POP IY +; POP IX +; POP HL +; POP DE +; POP BC +; EXX +; POP HL +; POP DE +; POP BC +; POP AF +; EX AF,AF' +; POP AF +; EI +; RETI +; ; + +INT_OFF: DI + LD A,#3F + LD I,A + IM 1 + RET + ; +INT_ON: DI + LD A,+high INT_POINTER + LD I,A + LD HL,INT_HANDLER + LD (INT_POINTER),HL + IM 2 + EI + RET +; + +; +;------------------------[go to spectrum from bios]---------------------; +EXIT_SETUP: CALL INT_OFF + CALL TRD_MOUNT ; !TEST 24/09/2024 ७ EXIT_SETUP (। ᪮ ZX) + CALL SetUp_ZX_HDD + +; IF FREE_ZX_PAGES + LD A,Spec_Page + OUT (SLOT3),A + ; + LD A,(Spec_Page.flag_Z) + CP 'Z' + LD A,(Spec_Page.flag_X) + LD B,A + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,B + JR NZ,.Set_Page41 + CP 'X' +.Set_Page41: CALL NZ,ZXMODE_SETUP.Set_Page41 + +.set_ZX_params: LD BC,CMOS_CELL.QuickStartSetUp.Mask.ZxRom + CALL GET_CMOS_VALUE + LD L,A + LD BC,CMOS_CELL.QuickStartSetUp.Mask.Hardware + CALL GET_CMOS_VALUE + ; + EX AF,AF + LD A,ROM.EXTENSION + OUT (SYS_PORT.ROM),A + EX AF,AF + OR A + JP Z,SPRINTER_ZX.custom_ROM + DEC A + JP Z,Pentagon_48.custom_ROM + DEC A + JP Z,PENTAGON_128.custom_ROM + DEC A + JP Z,PENTAGON_512.custom_ROM + DEC A + JP Z,SCORPION_256.custom_ROM + DEC A + JP Z,ZX_Spectrum_48.custom_ROM + DEC A + JP Z,ZX_SPECTRUM_128.custom_ROM + ; error + XOR A + OUT (SYS_PORT.ROM),A + LD D,CMOS_CELL.QuickStartSetUp ; 塞 ࠬ 直 砩 + CALL CMOS_WR + ; + CALL ScreenPOS.CRLF + LD A,msgStrings.errorZXmode + LD E,COLORS.CGA.INK.RED + CALL POSTMSC +.loop_di: DI + HALT + JR .loop_di + + + +SetUp_ZX_HDD: LD D,CMOS_CELL.TRDOSmount + CALL CMOS_RD + AND %1010'1010 ; ᪠ 4- HDD + RET Z + ; find first good partition + ; + ; ⪠ ६ ZX HDD + IN A,(SLOT3) + EX AF,AF + LD A,SYS_PAGE + OUT (SLOT3),A + ; + XOR A + LD H,A + LD L,A + LD (SYS_PAGE.CURRENT_DIR_SEC_L),HL + LD (SYS_PAGE.CURRENT_DIR_SEC_H),HL + DEC A + LD (SYS_PAGE.CURRENT_HDD),A + LD (SYS_PAGE.CURRENT_DIR_DRIVE),A + LD (SYS_PAGE.CURRENT_DIR_DRIVE_COPY),A + ; + EX AF,AF + OUT (SLOT3),A + EX AF,AF + ; + XOR A +.loop: PUSH AF + CALL FN_HDD_PART + POP BC + RET NC + LD A,B + INC A + CP #10 + JR C,.loop + RET +;-----------------------------------------------------------------------; + +INSTALL: + CALL INT_ON + CALL SET_CGA + XOR A + OUT (BorderColor),A + LD IX,win_descriptor.tab80x32 + CALL WIN_OPEN.SCR1 + + LD DE,0 + LD HL,#2050 + LD B,7 + CALL LP_CLS_WIN + + LD DE,0 + LD HL,#0820 + LD B,0 + CALL LP_CLS_WIN + + CALL SETLAND + + CALL GET_ID + LD DE,#0028 ; !HARDCODE + CALL LP_SET_PLACE + LD HL,memBUFFER.ID + LD A,COLORS.CGA.INK.LCYAN + CALL CPRINTZ + ; LD HL,BUILD + ; LD A,COLORS.CGA.INK.LCYAN + ; CALL CPRINTZ + + LD DE,#0128 ; !HARDCODE + CALL LP_SET_PLACE + LD A,msgStrings.copyRightPeters + LD E,COLORS.CGA.INK.LGREEN + CALL POSTMSC + + LD DE,#0228 ; !HARDCODE + CALL LP_SET_PLACE + LD A,msgStrings.copyRightSPTeam + LD E,COLORS.CGA.INK.GREEN + CALL POSTMSC + + LD DE,#0328 + CALL LP_SET_PLACE + LD A,msgStrings.extBIOSmsg + IF BETA_BUILD > 0 + LD E,COLORS.CGA.FLASH + COLORS.CGA.INK.RED + ELSE + LD E,COLORS.CGA.INK.LGRAY + ENDIF + CALL POSTMSC + + IN A,(SLOT3) + PUSH AF + LD A,SYS_PAGE + OUT (SLOT3),A + LD HL,RebootDate + CALL GETTIME + POP AF + OUT (SLOT3),A + RET + +RESTART_ID: +.str: DZ "RESTART" +.size EQU $ - RESTART_ID.str + + +Start_again: LD SP,STACK-2 +START: DI + PUSH AF + XOR A + LD (ERRSUM),A + LD (ERRSUM.ErrDateTime),A + ; + LD A,R ; reg R bit7 - ਧ ᪠ ࠡ⪮ ( SET_CONFIG_ID) + LD (LOGOTYPE.playSnd),A + ; +; LD C,#97 +; RST_to_BIOS_18 +; XOR A +; LD C,#F2 +; RST_to_BIOS_18 +;------------------------------ ;!!!!! ᬮ +; CALL KINIT +;------------------------------ ;!!!!! ᬮ + +;--------[Clean keyboard buffer]-------- +; clean_kbd_buf: +; IN A,(Z84.SIO.Ch_A.Ctrl) +; BIT 0,A +; jr z,.exit +; IN A,(Z84.SIO.Ch_A.Data) +; jr clean_kbd_buf +; .exit: +;--------------------------------------- + + +;R08 CALL OPENDOS + ;!TEST 20/08/2024 + ;CALL ZXCLS + ; + CALL READING + CALL TEST_CHECKSUM + CALL NZ,SETDEFX + + ;!TODO CMOS Disabled use of CONFIG_DE (#C13A) word + ;LD A,#1C + ;CALL READCMS + ;PUSH AF + ;LD A,CMOS_CELL.HardwareConfiguration + ;CALL READCMS + ;POP DE + ;LD E,A + ; + + LD C,SLOT3 + IN B,(C) + PUSH BC + LD A,SYS_PAGE + OUT (C),A + +; LD (SYS_PAGE.CONFIG_DE),DE + + LD HL,SYS_PAGE.INT_ADRESS ;EXTENDED INTERRUPT + XOR A + LD (HL),A + INC L + LD (HL),A + INC L + LD (HL),A + INC L + LD (HL),A + POP BC + OUT (C),B + + + ;CALL TRD_MOUNT ; !TEST 24/09/2024 ७ EXIT_SETUP (। ᪮ ZX) + CALL FDD_INSTAL + CALL CLEAR_MEM + CALL ZXMODE_SETUP + CALL XY_SCREEN + +;R06 ;[Check Quick Start ROM] + LD BC,CMOS_CELL.BootUpParams.Mask.QuickStartROM ;#010E + CALL GET_CMOS_VALUE + POP BC + RR C + JR NC,IGNORE_QuickStartROM ; १ ஢ન Space exp.asm [Check SPACE] + PUSH AF + LD C,SLOT3 + IN B,(C) + PUSH BC + LD A,SYS_PAGE + OUT (C),A + LD HL,SYS_PAGE.RESTART_ID + LD DE,RESTART_ID.str + LD B,RESTART_ID.size + CALL COMPARE_RESTART_ID + CALL NZ,SET_RESTART_ID + POP BC + OUT (C),B + JR Z,YES_QuickStartROM + POP AF + JR IGNORE_QuickStartROM + +SET_RESTART_ID: + PUSH AF + LD HL,RESTART_ID.str + LD DE,SYS_PAGE.RESTART_ID + LD BC,RESTART_ID.size + LDIR + LD HL,PowerOnDate ; !TODO , ६ 㤥 ⮢ + CALL GETTIME + POP AF + RET + +YES_QuickStartROM: + POP AF + OR A + JP NZ,EXIT_SETUP +IGNORE_QuickStartROM: + CALL INSTALL + LD DE,#0528 + ;CALL ScreenPOS.LOCAT + CALL LP_SET_PLACE + LD A,msgStrings.toSetupButton + LD E,COLORS.CGA.FLASH + COLORS.CGA.INK.WHITE + CALL POSTMSC + + LD DE,#0900 + ;CALL ScreenPOS.LOCAT + CALL LP_SET_PLACE +ERRSUM+1: + LD A,#00 + OR A + JR Z,.ErrDateTime + XOR A + LD (.ErrDateTime+1),A ; ᫨ ஫쭠 㬬 ᫥⥫, ᮮ饭 ਢ /६ 뢮 + LD A,msgStrings.cmosChecksumErr + LD E,COLORS.CGA.INK.RED + CALL POSTMSC + CALL ScreenPOS.CRLF + CALL ScreenPOS.CRLF + JR CHEKOK + +.ErrDateTime+1: + LD A,0 + OR A + JR Z,CHEKOK + LD A,msgStrings.cmosDateTimeErr + LD E,COLORS.CGA.INK.RED + CALL POSTMSC + CALL ScreenPOS.CRLF + CALL ScreenPOS.CRLF + +CHEKOK: ;CALL ScreenPOS.GET_CUR + CALL LP_GET_PLACE + PUSH DE + CALL LOGOTYPE + + LD DE,#0000 + ;CALL ScreenPOS.LOCAT + CALL LP_SET_PLACE + LD A,msgStrings.spModel + CALL POSTMSG + CALL PIDNUM + CALL ScreenPOS.CRLF + + LD A,msgStrings.boardID + CALL POSTMSG + CALL PIDBOARD + CALL ScreenPOS.CRLF + + LD A,msgStrings.spCNFver + CALL POSTMSG + CALL CNF_VER_PRINT + CALL ScreenPOS.CRLF + + LD A,msgStrings.spMemory + CALL POSTMSG + CALL EMM.GetMemSize + PUSH BC + CALL PMEMORY + CALL ScreenPOS.CRLF + LD A,msgStrings.memoryAvailable + CALL POSTMSG + POP HL + CALL PMEMORY + CALL ScreenPOS.CRLF + + ;CALL TSTCMOS + CALL CMOS_TEST + + LD A,msgStrings.cmosNone + JR C,CMOS_ABSENT + ; CMOS OK + CALL CMOSINIT + LD A,msgStrings.cmosFound + CALL POSTMSG + LD A,',' + CALL PRINT_CHAR + LD A," " + CALL PRINT_CHAR + LD HL,RebootDate + CALL PRNTIME + CALL ScreenPOS.CRLF + JR INFO_MESSAGE +CMOS_ABSENT: + CALL POSTMSG +INFO_MESSAGE: + ; for recovery boot + ; LD DE,#0428 + ; CALL LP_SET_PLACE + ; LD A,msgStrings.forCtrlBootButton + ; LD E,COLORS.CGA.INK.WHITE + ; CALL POSTMSC + ; + ; For alternative boot + LD DE,#0528 + CALL LP_SET_PLACE + LD A,msgStrings.forAltBootButton + LD E,COLORS.CGA.INK.WHITE + CALL POSTMSC + + + POP DE + CALL LP_SET_PLACE + + CALL TSETUP ;!TODO 뢠? + + CALL CONFIGURE_IDE_DRIVES.START + ;CALL CONFIGURE_IDE_DRIVES.Nop_CHANELS + CALL CTRLKEY + LD A,B + ; [x] 05/07/2024 + BIT X_CTRL,A + LD BC,#FFFF ; થ PrepareToBOOT, ⮡ 㧨 Recovery + JR NZ,RECOVERY_BOOT + ; + BIT X_ALT,A + JR NZ,ALT_BOOT + ; + CALL TSETUP + ; + LD BC,CMOS_CELL.BootDrives.Mask.SysDisk ;#0710 +RECOVERY_BOOT: + CALL PrepareToBOOT + LD A,msgStrings.bootFail + LD E,COLORS.CGA.INK.LRED + CALL C,POSTMSC + CALL ScreenPOS.CRLF + ; + CALL INT_ON +ALT_BOOT: + LD A,msgStrings.bootAltDrv + LD E,COLORS.CGA.INK.LGREEN + CALL POSTMSC + + LD BC,CMOS_CELL.BootDrives.Mask.AltSysDisk ;#7010 + CALL PrepareToBOOT + LD A,msgStrings.bootFail + LD E,COLORS.CGA.INK.LRED + CALL C,POSTMSC + CALL ScreenPOS.CRLF + + ;NO START DISK - RESTART / SETUP / ZX SPECTRUM mode + LD BC,CMOS_CELL.Options.Mask.RebootMSG ;#021D + CALL GET_CMOS_VALUE + OR A + JP Z,EXIT_SETUP + + CALL ScreenPOS.CRLF + LD A,msgStrings.afterBootFail + LD E,COLORS.CGA.INK.RED + CALL POSTMSC + + ;EI + CALL INT_ON +StartUpKey: CALL WAITKEY + LD HL,#4F00 ; DEL - go to settings + ;AND A + SBC HL,DE + JR Z,ENTER_SETUP + ; + CP #1B ; ESC - go to zx spectrum mode + JP Z,EXIT_SETUP + CP #0D ; ENTER - restart + JP NZ,StartUpKey + XOR A + JP Start_again + +TSETUP: CALL SCANKEY + RET Z + LD HL,#4F00 ; DEL - go to settings + AND A + SBC HL,DE + JR Z,ENTER_SETUP + ; + LD HL,#011B ; ESC + AND A + SBC HL,DE + JR NZ,TSETUP + POP HL ; 㡨ࠥ 譥 + JP EXIT_SETUP +ENTER_SETUP: + XOR A + LD (ITEM_Restore),A + CALL SETTINGS + XOR A + JP Start_again + +COMPARE_RESTART_ID: + LD A,(DE) + CP (HL) + RET NZ + INC HL + INC DE + DJNZ COMPARE_RESTART_ID + RET + +; ????? ७ 㭪樨 ? +; HL - data to write: BYTE Hours, minutes, seconds, day, month, century, year. (2022: 20 - century, 22 - year) +writeDateTimeToCmos: ;!FIXIT + LD A,(HL) + LD D,CMOS.Register.hours + CALL CMOS_WR + + INC HL + LD A,(HL) + LD D,CMOS.Register.minutes + CALL CMOS_WR + + INC HL + LD A,(HL) + LD D,CMOS.Register.seconds + CALL CMOS_WR + + INC HL + LD A,(HL) + LD D,CMOS.Register.date + CALL CMOS_WR + + INC HL + LD A,(HL) + LD D,CMOS.Register.month + CALL CMOS_WR + + INC HL + LD A,(HL) + LD D,CMOS.Register.century + CALL CMOS_WR + + INC HL + LD A,(HL) + LD D,CMOS.Register.year + CALL CMOS_WR + RET + +XY_SCREEN: ;R06 + LD A,CMOS_CELL.ScreenPosition + CALL READCMS + LD B,A + LD A,ACEX.HOLD + JP SET_PORTS + ; PUSH AF + ; IN A,(SLOT3) + ; LD E,A + ; LD A,DCP_PAGE + ; OUT (SLOT3),A + ; LD A,(#C400) ;c400 for first cfg 50176 + ; LD D,A + ; LD A,ACEX.HOLD + ; LD (#C400),A + ; POP AF + ; LD BC,0 + ; OUT (C),A + ; LD A,D + ; LD (#C400),A + ; LD A,E + ; OUT (SLOT3),a + ; RET +; +;R07 +; CMOSINIT: +; LD D,10 ;FREQ +; LD C,#F6 ;READ CMOS +; RST_to_BIOS +; CP #26 +; JR NZ,CMSERR +; LD D,12 +; LD C,#F6 +; RST_to_BIOS +; CP #50 +; RET Z +; CMSERR: +; LD D,10 +; LD A,#26 ;FREQ +; LD C,#F7 +; RST_to_BIOS +; LD D,11 +; LD A,#02 ;TIME FORMAT +; LD C,#F7 +; RST_to_BIOS +; LD D,12 +; LD A,#50 +; LD C,#F7 +; RST_to_BIOS +; LD D,13 +; LD A,#80 +; LD C,#F7 +; RST_to_BIOS +; RET + +;------------------- ;!!!!! ᬮ +; 0 - 1-st FDD +; 1 - 2-nd FDD +; 2 - 1-st IDE +; 3 - 2-nd IDE +; 4 - 3-rd IDE +; 5 - 4-th IDE +; 6 - RAM-DISK +; +; -> BC - 祩 ᪠ ⥭ 祭 㧮筮 ࠩ + +; +;[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ] +RECOVERYstart: + LD A,msgStrings.bootRecovery + CALL POSTMSG + ; + + ; 롮 ࠬ᪠ ४ + _mRECOVERYrdChooseTYPE RECOVERYrdChooseTYPE + + ; ਡ ᫥ ࠬ, ᫨ +.killRAMdisk: LD A,SYS_PAGE.RAMD_KEYS.NUM-1 + LD (.RDkey),A + CALL EMM.FreeMemRMD + JR NC,.setRAMdisk + JR Z,.setRAMdisk + RET ; ⭠ 訡 - 室 +.setRAMdisk: LD A,(.RDkey) + LD B,ROM_DISK.Pages.Size + CALL EMM.GetMemRMD + JR NC,.IMGread ; ᢮ ࠬ + DEC A + JR Z,.FreeMem ; 訡 - 筮 , 뢠 + RET ; ⭠ 訡 - 室 +.FreeMem: CALL EMM.FullInit + JR .killRAMdisk +; + +; 室: A - RAM block ID +.IMGread: + ; ਠ ஢ ROM -> RAM disk + _mRECOVERYmountTYPE RECOVERYmountTYPE +; + ;Exit from "ROM Disk to RAM disk" procedure +.RDkey+*: LD A,0 + OR DRIVE_CODES.SPRINTER.RAM + LD B,A ; । 㧮筮 ன⢮ OS_LOAD + JP OS_LOAD + ; +;[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ] +; + +PrepareToBOOT: ;CALL INT_ON + HALT + CALL PORTS_INIT.clean_kbd_buf ;Clearing the keyboard buffer + CALL PORTS_INIT.clean_mouse_buf ;Clearing the mouse buffer + CALL INT_OFF + ; ᯮ祭 祭 BC + ; [x] 05/07/2024 + INC BC + LD A,B + OR C + JP Z,RECOVERYstart + DEC BC + ; + CALL GET_CMOS_VALUE + LD B,DRIVE_CODES.SPRINTER.FDD + ; FDD + OR A + JR Z,FDSTART ; FDD A: + INC B + DEC A + JR Z,FDSTART ; FDD B: + ; IDE + LD B,DRIVE_CODES.SPRINTER.HDD + DEC A + JR Z,HDSTART + INC B ;LD B,#81 + DEC A + JR Z,HDSTART + INC B ;LD B,#82 + DEC A + JR Z,HDSTART + INC B ;LD B,#83 + DEC A + JR Z,HDSTART + ; RAM + DEC A + JR Z,RDSTART + ; ROM + DEC A + JP Z,RECOVERYstart + ; Error + SCF + RET + ; +FDSTART: PUSH BC + PUSH BC + LD A,msgStrings.bootFdd + CALL POSTMSG + POP AF + CALL FDD_5x_RESET + POP BC + RET C + JR OS_LOAD + ; +CDSTART: LD A,B ; [ ] 15/02/2025 boot from ATAPI + OR DRIVE_CODES.SPRINTER.ATAPI + LD B,A + PUSH BC + LD A,msgStrings.bootCd + CALL POSTMSG + POP AF + PUSH AF + CALL PRINT_CHANEL + ; + POP BC + PUSH BC + CALL OS_LOAD + POP BC + RET NC + LD HL,2048 ;!HARDCODE sector size + LD IX,#0011 + JR OS_LOAD.CD + ; +RDSTART: LD A,msgStrings.bootRamDrv + CALL POSTMSG + LD B,DRIVE_CODES.SPRINTER.RAM ; 6 - ⨯ ࠩ RAM-DRV, 0 - ࠩ +.loop: PUSH BC + CALL OS_LOAD + POP BC + INC B + LD A,DRIVE_CODES.SPRINTER.RAM + SYS_PAGE.RAMD_KEYS.NUM-1 ; ᨬ ࠬ᪠ + SUB B + JR NC,.loop + RET + + +HDSTART: IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,B + ; + AND #03 ;R02 %00000011 + LD IY,IDE.INIT_TBL_IDE0 + JR Z,.next + ; + LD IY,IDE.INIT_TBL_IDE1 + CP 1 ;R02 + JR Z,.next + ; + LD IY,IDE.INIT_TBL_IDE2 ;R02 + CP 2 ;R02 + JR Z,.next + ; + LD IY,IDE.INIT_TBL_IDE3 ;R02 + ; +.next: LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) + EX AF,AF' + OUT (SLOT3),A + EX AF,AF' + CP IDE.Device.ATAPI + JP Z,CDSTART + PUSH AF + PUSH BC + LD A,msgStrings.bootHdd + CALL POSTMSG + POP AF + PUSH AF + CALL PRINT_CHANEL + ; + POP BC + POP AF + CP #FF + SCF + RET Z + ; +OS_LOAD: LD HL,512 ;!HARDCODE + LD IX,#0001 +.CD: LD (.SectorSizeAddr),HL + LD HL,#0000 + LD DE,TEMP + LD A,B + LD BC,1*256 + BIOS.DRV_READ + PUSH AF + RST ToBIOS_18 + ; + POP BC + RET C + LD A,B + EX AF,AF' + LD HL,TEMP + LD DE,SYSID + LD B,SYSID.length +.loop: LD A,(DE) + CP (HL) + SCF + RET NZ + INC HL + INC DE + DJNZ .loop + EX AF,AF' + PUSH AF + LD A,msgStrings.bootOk + LD E,COLORS.CGA.INK.LGREEN + CALL POSTMSC + CALL ScreenPOS.CRLF + POP AF ; 䨧᪨ ᪠ + POP HL +.MOVE0: DI + IM 1 + LD HL,MOVE1 + LD DE,OS_LOAD.SectorSizeAddr - MOVE1.length ; !HARDCODE + LD BC,MOVE1.length + LDIR + JP OS_LOAD.SectorSizeAddr - MOVE1.length + ; +MOVE1: LD HL,#8000 ; !HARDCODE + LD SP,HL + EX DE,HL + LD HL,TEMP + LD BC,(OS_LOAD.SectorSizeAddr) + LDIR + JP #8000+SYSID.length ;#800C ; !HARDCODE + ; +.length EQU $-MOVE1 + + +SYSID: DZ "Starting..." +.length EQU $-SYSID + + +;FD144A: DB #80,#12,#02,#50,#00,#00,#02,FDD_INIT_TABLE.FDD +; .Size EQU $ - FD144A +; FD720A: DB #00,#09,#02,#50,#00,#00,#02,FDD_INIT_TABLE.FDD +; .Size EQU $ - FD720A + + +FDD_INIT_TABLE_35: FDD_TABLE_s { + #80, ;.DISK + #12, ;.SECTORS + #02, ;.HEADS + #50, ;.CYLINDL + #00, ;.CYLINDH + #0200, ;.BytesPerSector + #01 ;.ID 3.5" + } +; +FDD_INIT_TABLE_525: FDD_TABLE_s { + #00 ;.DISK + #09 ;.SECTORS + #02 ;.HEADS + #50 ;.CYLINDL + #00 ;.CYLINDH + #0200 ;.BytesPerSector + #02 ;.ID 5.25" + } + +FDD_INSTAL: IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD HL,SYS_PAGE.FDD_TABLE.A + LD BC,+(2*FDD_TABLE_s)*256 + #FF ; table_size*256 + fill_byte +.FILLFDD: LD (HL),C + INC HL + DJNZ .FILLFDD + ; + ; + LD BC,CMOS_CELL.DrivesSetup_1.Mask.FirstFDD ;#0311 + CALL .Choose_FDD_Type + JR NZ,.next_FDD + ; + LD DE,SYS_PAGE.FDD_TABLE.A + LD BC,SYS_PAGE.FDD_TABLE.A.Size + LDIR +.next_FDD: LD BC,CMOS_CELL.DrivesSetup_1.Mask.SecondFDD ;#0C11 + CALL .Choose_FDD_Type + JR NZ,.NOFDD1 + ; + LD DE,SYS_PAGE.FDD_TABLE.B + LD BC,SYS_PAGE.FDD_TABLE.B.Size + LDIR + LD A,(SYS_PAGE.FDD_TABLE.B + FDD_TABLE_s.DISK) + OR 1 + LD (SYS_PAGE.FDD_TABLE.B + FDD_TABLE_s.DISK),A +.NOFDD1: EX AF,AF' + OUT (SLOT3),A + RET + ; +.Choose_FDD_Type: + CALL GET_CMOS_VALUE + LD HL,FDD_INIT_TABLE_35 + OR A + RET Z + ; + LD HL,FDD_INIT_TABLE_525 + DEC A + RET + + +PIDNUM: LD HL,memBUFFER.ID + LD BC,#00FF + XOR A + CPIR + LD A,(HL) + OR A + RET Z + CALL PRINTZ + RET + +PIDBOARD: CALL FN_CRIPT.board_id + ; + IF MotherBoardType > 0 + PUSH AF + ENDIF + PUSH DE + PUSH HL + PUSH BC + LD A,B + CALL PRNHEX + LD A,'-' + CALL PRINT_CHAR + POP BC + LD A,C + CALL PRNHEX + LD A,'-' + CALL PRINT_CHAR + POP HL + CALL IPRINT.Z + POP DE + PUSH DE + LD A,D + CALL PRNHEX + POP DE + LD A,E + IF MotherBoardType == 0 + JP PRNHEX + ELSE + CALL PRNHEX + LD A,' ' + CALL PRINT_CHAR + POP AF + ; type 0 - Classic + RET Z + ; type 1 - DX + LD HL,.ver_DX + DEC A + JP Z,PRINTZ + ; type 2 - DP + LD HL,.ver_DP + DEC A + JP Z,PRINTZ + ; type 3 - Max + LD HL,.ver_Max + DEC A + JP Z,PRINTZ + ; type 4 - test + LD HL,.Test + DEC A + JP Z,PRINTZ + RET + ; +.ver_DX: DZ "DX" +.ver_DP: DZ "DP" +.ver_Max: DZ "Max" +.Test DZ "0123456789A" + ENDIF + + +CNF_VER_PRINT: + LD HL,memBUFFER.ID + IFN BIOS.FN_VERSION.STR.BitstreamVer = 0 + LD BC,BIOS.FN_VERSION.STR.BitstreamVer*256 + XOR A +.loop: CPIR + DJNZ .loop + ENDIF + JP PRINTZ + +;PIDNUM LD A,#0D +; LD HL,ID_BUFFER +; LD BC,#0030 +; CPIR +; RET NZ +; INC HL +; LD BC,#0286 +; RST_to_BIOS_18 +; INC HL +; LD BC,#0586 +; RST_to_BIOS_18 +; INC HL +; LD BC,#0286 +; RST_to_BIOS_18 +; XOR A +; RET + +;PIDDATE +; LD A,#0D +; LD HL,ID_BUFFER +; LD BC,#0030 +; CPIR +; RET NZ +; INC HL +; CPIR +; RET NZ +; INC HL +; LD BC,#0A86 +; JP_to_BIOS + +////////////////////////////////////////////////////////////////////// +; INCLUDE 'IM2_INT.asm' +////////////////////////////////////////////////////////////////////// + +PRNHEX: LD D,A + RRCA + RRCA + RRCA + RRCA + AND #0F + ADD A,#30 + CP #3A + JR C,PRNH1 + ADD A,7 +PRNH1: CALL PRINT_CHAR + LD A,D + AND #0F + ADD A,#30 + CP #3A + JP C,PRINT_CHAR + ADD A,7 + JP PRINT_CHAR + +PHEX: LD D,A + RRCA + RRCA + RRCA + RRCA + AND #0F + ADD A,#30 + CALL PRINT_CHAR + LD A,D + AND #0F + ADD A,#30 + JP PRINT_CHAR + +PRNTIME: + IN A,(SLOT3) + PUSH AF + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,(HL) + CALL PHEX + LD A,":" + CALL PRINT_CHAR + INC L + LD A,(HL) + CALL PHEX + LD A,":" + CALL PRINT_CHAR + INC L + LD A,(HL) + CALL PHEX + POP AF + OUT (SLOT3),A + RET + + +PMEMORY: + ADD HL,HL + ADD HL,HL + ADD HL,HL + ADD HL,HL ; * 16 + CALL IPRINT + LD A,"K" + JP PRINT_CHAR + + IFUSED ZXCLS +ZXCLS: LD HL,#4000 + LD DE,#4001 + LD BC,#1AFF + LD (HL),L + LDIR + RET + ENDIF + +GET_ID: LD HL,memBUFFER.ID + ;LD C,BIOS.FN_VERSION + ;JP_to_BIOS + JP FN_VERSION + + +;R01GET_ID +;R01 LD A,#10 +;R01 LD BC,#1FFD +;R01 OUT (C),A +;R01 LD C,SLOT3 +;R01 IN B,(C) +;R01 PUSH BC +;R01 LD A,#EE +;R01 OUT (C),A +;R01 LD HL,#FFD0 +;R01 LD DE,ID_BUFFER +;R01 LD BC,#30 +;R01 LDIR +;R01 POP BC +;R01 OUT (C),B +;R01 XOR A +;R01 LD BC,#1FFD +;R01 OUT (C),A +;R01 RET + + +; COPY_CHAIN: LD E,L +; LDI +; DEC L +; LD L,(HL) +; INC L +; RET Z +; DEC L +; JR COPY_CHAIN + +; ; 室: HL - RAM_TABLE 㤠 ஢ +; RESTORE_CHAINS: LD DE,SYS_PAGE.RAM_TABLE +; XOR A +; .loop: CP (HL) +; JR Z,.NoCopy +; LD E,L +; LDI +; DEC L +; .NoCopy: INC L +; JR NZ,.loop +; RET + +;---------------------------------------------------------------[] +;REGISTER #1E +; %0000'0011 - TR DOS A: Default / FDD / HDD / RMD +; %0000'1100 - TR DOS B: Default / FDD / HDD / RMD +; %0011'0000 - TR DOS C: Default / FDD / HDD / RMD +; %1100'0000 - TR DOS D: Default / FDD / HDD / RMD + +TRD_MOUNT: LD BC,CMOS_CELL.TRDOSmount.Mask.A ;#031E + LD A,0 + CALL .TRDOSX + LD BC,CMOS_CELL.TRDOSmount.Mask.B ;#0C1E + LD A,1 + CALL .TRDOSX + LD BC,CMOS_CELL.TRDOSmount.Mask.C ;#301E + LD A,2 + CALL .TRDOSX + LD BC,CMOS_CELL.TRDOSmount.Mask.D ;#C01E + LD A,3 +.TRDOSX: ; PUSH AF + ; CALL GET_CMOS_VALUE + ; POP BC + ; OR A + ; RET Z + ; LD C,BIOS.FDD_TO_DRV + ; DEC A + ; JP Z,ToBIOS_18 + ; LD C,BIOS.HDD_TO_DRV + ; DEC A + ; JP Z,ToBIOS_18 + ; SCF + ; RET + PUSH AF + CALL GET_CMOS_VALUE + POP BC + OR A + RET Z + DEC A + JP Z,FDD_TO_DRV + DEC A + JP Z,HDD_TO_DRV + SCF + RET +;---------------------------------------------------------------[] + + +;!TODO ᬮ + ;뢠 #FE ⥭ 3- ⮢ + ;OPENDOS: + ; DI + ; IN A,(SLOT3) + ; EX AF,AF' + ; LD A,#40 + ; OUT (SLOT3),A + ; LD HL,#C000 + ; LD DE,#F000 + ; LD BC,#0400 + ; LDIR + ; LD A,#40 + ; LD (#F26E),A + ; LD (#F27E),A + ; LD (#F2EE),A + ; LD (#F2FE),A + ; LD (#F36E),A + ; LD (#F37E),A + ; LD (#F3EE),A + ; LD (#F3FE),A + ; LD HL,#F000 + ; LD DE,#F400 + ; LD BC,#0C00 + ; LDIR + ; EX AF,AF' + ; OUT (SLOT3),A + ; RET +; + + + +setFRAME: +.double: + LD HL,.dataDoubleAll + JR .setElements +.single: + LD HL,.dataSingleAll + JR .setElements +.high: LD HL,.dataSingleDown + JR .setElements +.low: LD HL,.dataSingleUp + JR .setElements +.medium: + LD HL,.dataSingleMedium +; JR .setElements +.setElements: + LD DE,ElementsBuffer + LD BC,ElementsBuffer.Size + LDIR + RET + +.dataDoubleAll: BYTE "ɻͺȼ", "̹" ; #C9,#BB,#CD,#BA,#C8,#BC, #CC,#B9,#CB,#CA +.dataSingleAll: BYTE "ڿij", "ô" ; #DA,#BF,#C4,#B3,#C0,#D9, #C3,#B4,#C2,#C1 +.dataSingleDown: BYTE "ɻĺǶ", "Ƕ" ; #C9,#BB,#C4,#BA,#C7,#B6, #C7,#B6,#D1,#C1 +.dataSingleUp: BYTE "Ƕĺȼ", "Ƕ" ; #C7,#B6,#C4,#BA,#C8,#BC, #C7,#B6,#C2,#CF +.dataSingleMedium: BYTE "ǶĺǶ", "Ƕ" ; #C7,#B6,#C4,#BA,#C7,#B6, #C7,#B6,#C2,#C1 +; +ElementsBuffer: +.UpLeft: BYTE "" ; UL - UpLeft +.UpRight: BYTE "" ; UR - UpRight +.HorizontalLine: BYTE "" ; ZL - HorizontalLine +.VerticalLine: BYTE "" ; VL - VerticalLine +.DownLeft: BYTE "" ; LL - DownLeft +.DownRight: BYTE "" ; LR - DownRight +.LeftCenter: BYTE "" ; LC - LeftCenter +.RightCenter: BYTE "" ; RC - RightCenter +.UpCenter: BYTE "" ; UC - UpCenter +.DownCenter: BYTE "" ; DC - DownCenter +.Size EQU $-ElementsBuffer +; + IF STARTUP_SND + INCLUDE 'startup_sound.asm' + ENDIF + INCLUDE 'VIDEO_IO.asm' + INCLUDE 'AUTOIDE.asm' + INCLUDE 'SETTINGS.asm' + INCLUDE 'KEY.asm' +;....................................... + +KEY: EI + JP WAITKEY + +FindStringAddr: + LD L,A + LD H,0 + LD BC,memBUFFER.Messages + ADD HL,HL + ADD HL,BC + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + RET + +POSTLEN: + CALL FindStringAddr + LD BC,#0100 + XOR A + CPIR + LD A,#FF + SUB C + SRL A + LD C,A + LD A,40 + SUB C + LD E,A + ;JP ScreenPOS.LOCAT + JP LP_SET_PLACE + +SETLAND: + LD A,#0E ; !HARDCODE CMOS 祩 options + CALL READCMS ;!TODO । GET_CMOS_VALUE + AND #04 ; !HARDCODE CMOS 祭 몠 + LD HL,MSG_RUS + JR NZ,.set + LD HL,MSG_ENG + ; +.set: LD DE,memBUFFER.Messages + LD BC,MSG_TABLE.Size + LDIR + RET + +; +; print boot drive number +PRINT_CHANEL: AND #0F + LD C,A + ; + LD A,msgStrings.parPriIdeMA + JR Z,.print_chanel + ; + LD A,msgStrings.parPriIdeSl + DEC C + JR Z,.print_chanel + ; + LD A,msgStrings.parSecIdeMA + DEC C + JR Z,.print_chanel + ; + LD A,msgStrings.parSecIdeSl +.print_chanel: CALL FindStringAddr + ;CALL LP_GET_PLACE + ;LD A,ScreenPOS.SUBNAME.POS + ;SUB E + ;LD B,A + LD B,0 + LD D,#FF + JP LP_PRINT_LINE6 +; + +POSTMSC: CALL FindStringAddr + LD A,E + JP CPRINTZ +; +////////////////////////////////////////////////////////////////////// + INCLUDE 'IM2_INT.asm' +////////////////////////////////////////////////////////////////////// + +POSTMSG: CALL FindStringAddr + JP PRINTZ + + + +;----------------------------------------------------------------------[] +; 㧨 v . ਠ: +;[x] 0 - 㧨 ᯥ㬠, ࠭ #41 3.04 +;[x] 1 - 㧨 ᯥ㬠 ROM ᫨ 䫠 ZX +;[x] 2 - 㧨 ᯥ㬠 ROM १᪥ +;[ ] 3 - 㧨 ᯥ㬠, ࠭ #41 ⠪, +; ⮡ 㦠 ᯥ㬠 饭 +ZXMODE_SETUP: IN A,(SLOT3) + PUSH AF + LD A,Spec_Page + OUT (SLOT3),A + ; + LD BC,CMOS_CELL.Options.Mask.LoadZXroms + CALL GET_CMOS_VALUE + ; + OR A + JR Z,.init_41h + DEC A + JR Z,.CheckAndLoad + DEC A + JR Z,.Load_ZXROMS + ;!TODO + ;DEC A + ;JR Z,.New_init_41h + ; + ; Check ZX ROMS Loaded +.CheckAndLoad: LD A,(Spec_Page.flag_Z) + CP 'Z' + JR NZ,.Load_ZXROMS + LD A,(Spec_Page.flag_X) + CP 'X' + JR NZ,.Load_ZXROMS + ; [x] 31/12/23 客 窨 + LD A,R + AND #80 + JR Z,.No_Need_To_Load_ZXROMS +.Load_ZXROMS: XOR A + LD R,A + ; Load ZX ROM's + LD BC,64*256 + BIOS.ZX_MEMORY_MANAGER ; [ ] free zx pages! MANAGE_ZX_PAGES.FREE_vMEMORY + RST ToBIOS_18 + ; + LD B,3 ; !HARDCODE zx-rom number of pages + CALL EMM.GetMem + JR C,.init_41h ;!FIXIT 訡 ; [ ] free zx pages! + CALL init_zx_roms + ; IFN FREE_ZX_PAGES + ; ; ⠢ ᫨ ண㧨 ᯥ㬠 + ; LD HL,'XZ' + ; LD (Spec_Page.flag_Z),HL + ; ENDIF ; +.No_Need_To_Load_ZXROMS: + POP AF + OUT (SLOT3),A + RET + ; +.init_41h: CALL init_zx_roms.init_41h + LD A,SYS_PAGE + OUT (SLOT3),A + CALL .Set_Page41 + ;!FIXIT ⠭ vROM ࠭ #41 ; [ ] free zx pages! + JR .No_Need_To_Load_ZXROMS + ; +.Set_Page41: LD HL,SYS_PAGE.SHARED_BUFFER_256b + 11 + LD DE,SYS_PAGE.SHARED_BUFFER_256b + 11-1 + LD BC,11-1 ; !HARDCODE - ࠭ vROM + RAM BLOCK ID + LD (HL),#FF + LDDR ; 頥 + EX DE,HL + ; + ; LD A,SYS_PORT.EXTENSION + ; OUT (SYS_PORT.ROM),A + ; JP MANAGE_ZX_PAGES.INIT_vROM + ; XOR A ;LD A,SYS_PORT.BIOS + ; OUT (SYS_PORT.ROM),A + LD BC,128*256 + BIOS.ZX_MEMORY_MANAGER ; [ ] free zx pages! HARDCODE + JP ToBIOS_18 + ;RET +; +;--------------------[copy zx-roms to zx-pages]-----------------; +; SLOT0 - ROM 8, sys_port - on. +; RAM SLOT0 - page 0 +; RAM SLOT3 - Spec_Page +; ० zx spectrum +; !HARDCODE ࠭ +init_zx_roms: DI + ; ;;;;;;;; + ; IF FREE_ZX_PAGES + ; ;;;;;;;; + ; A = SYS_PAGE.Block_ID.vROM + ; 11 ⮢ 묨 ࠭栬 + ; 㯠 1 RAM BLOCK ID, 3 ࠭ vROM #FF + LD HL,#FFFF + LD (memBUFFER.Shared + 5),HL ; !HARDCODE zx-rom number of pages + LD (memBUFFER.Shared + 7),HL ; !HARDCODE zx-rom number of pages + LD (memBUFFER.Shared + 9),HL ; !HARDCODE zx-rom number of pages + ; 砥 ᯨ᮪ ࠭ vROM + LD HL,memBUFFER.Shared + LD (HL),A + INC HL + LD B,A + CALL EMM.GetMemBlkPages + ; + LD A,SYS_PAGE + OUT (SLOT3),A + ; ⠭ ࠭ vROM ALTERA + DEC HL + LD A,ROM.EXTENSION + OUT (SYS_PORT.ROM),A + CALL MANAGE_ZX_PAGES.INIT_vROM + ; 㥬 ࠧ ZX-ROM ࠭ vROM + LD A,2 ; !HARDCODE + LD BC,+(3*2)*256 + SLOT3 ; !HARDCODE B = (zx-rom number of pages)*2 + LD HL,memBUFFER.Shared + 1 +.loop: OUTI + OUT (ROM.SLOT0),A + EXX + LD HL,0 + LD DE,#C000 + LD BC,#4000 + LDIR + EXX + INC A + DJNZ .loop + ; 頥 ࠭ + XOR A + OUT (ROM.SLOT0),A + OUT (SYS_PORT.ROM),A + LD A,Spec_Page + OUT (SLOT3),A +.init_41h: ; FF- + LD HL,#C000 + LD DE,#C001 + LD BC,#3FFF - 2 + LD (HL),#FF + LDIR + ; 誠 ࠭ #41 + LD HL,PROG_NO_ROM + LD DE,#C000 + Spec_Page.no_zx_rom + LD BC,PROG_NO_ROM.size + LDIR + ; + LD HL,RAM_BIOS_PROG + LD DE,#C000 + Spec_Page.to_bios + LD BC,RAM_BIOS_PROG.Length + LDIR + RET +;---------------------------------------------------------------------[] + + +;--------------------------------------- + INCLUDE 'bios/ROM/SETUP/messages.z80' +;--------------------------------------- +; + + STRUCT MAIN_BUFFERS +ID BLOCK #100 +Messages BLOCK MSG_ENG.size +Shared BLOCK 1024 +End BYTE + ENDS + + +memBUFFER MAIN_BUFFERS = $ +STACK EQU #C000 +.Size EQU 128 + + + IF memBUFFER.End-1 > #C000-STACK.Size + DISPLAY 'memBUFFER.Shared overlaps STACK by: ',/A,(memBUFFER.End-1)-(#C000-STACK.size) + ASSERT memBUFFER.End-1 < #C000-STACK.size + ENDIF + + IFDEF PREBUILD + OUTEND + + DISPLAY '-----[Set_Pictures Prebuild start]-----' + MMU 1 e, 0 ; ࠭ 0 0 ஢ઠ ࠭. + ORG ROM_MAP.LOGO + INCLUDE 'bios/logo/Set_Pictures.asm' + DISPLAY '-----[Set_Pictures Prebuild done ]-----' + ELSE +MAIN_END_CODE_ADDRESS EQU $-1 + ; DISPLAY ' -------------------[Main.asm]-------------------' + ; DISPLAY 'End code address: ',/A,$-1 + ; DISPLAY 'Code size: ',/A,$-COMPILE_ADDR.MAIN + ; DISPLAY 'End buffers address: ',/A,memBUFFER.End-1 + ; DISPLAY 'Free memory: ',/A,#C000-(memBUFFER.End-1)-STACK.Size + ; DISPLAY 'Unused bytes before INT_POINTER: ',/A,INT_POINTER-before_intPointer + ENDIF +; + + + +;======================================================================================================================= + +; ;;;;;;;; +; ELSE +; ;;;;;;;; +; IN A,(SLOT3) +; EX AF,AF' +; ; +; LD A,SYS_PORT.EXTENSION +; OUT (SYS_PORT.ROM),A +; INC A ; !HARDCODE LD A,2 +; LD B,3 ; !HARDCODE zx-rom number of pages +; ; +; .loop: EXX +; ; +; OUT (ROM.SLOT0),A +; OR %0100'0000 ; !HARDCODE ࠭ +; OUT (SLOT3),A +; AND %1011'1111 ; !HARDCODE ࠭ +; ; +; LD HL,0 +; LD DE,#C000 +; LD BC,#4000 +; LDIR +; ; +; INC A +; EXX +; DJNZ .loop +; ; +; XOR A +; OUT (ROM.SLOT0),A +; OUT (SYS_PORT.ROM),A +; EX AF,AF' +; OUT (SLOT3),A +; ; +; ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 +; [ ] free zx pages! । 맮 FREE_ZX_PAGES.INIT_vROM +; LD A,ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128 +; LD B,#42 ;!HARDCODE page +; CALL SET_PORTS +; ; +; LD A,ACEX.vROM.BASIC_48 ; ROM-ID - BASIC 48 +; LD B,#43 ;!HARDCODE page +; CALL SET_PORTS +; ; +; LD A,ACEX.vROM.TR_DOS ; ROM-ID - TR-DOS +; LD B,#44 ;!HARDCODE page +; CALL SET_PORTS +; ; +; ; ࠭ ᯮ +; LD A,ACEX.vROM.EXPANSION ; ROM-ID - BIOS +; ;LD B,#45 ;!HARDCODE page +; LD B,#41 +; CALL SET_PORTS +; ; +; LD A,ACEX.vROM.BIOS_1 ; ROM-ID - BIOS-1 +; ;LD B,#46 ;!HARDCODE page +; LD B,#41 +; CALL SET_PORTS +; ; +; LD A,ACEX.vROM.BIOS_2 ; ROM-ID - BIOS-2 +; ;LD B,#47 ;!HARDCODE page +; LD B,#41 +; CALL SET_PORTS +; ; ⢮ 4 ࠭ #E4..#E7 +; ;;;;;;;; +; ENDIF ; ;;;;;;;; \ No newline at end of file diff --git a/src/bios/rom/SETUP/SETTINGS.asm b/bios/rom/SETUP/SETTINGS.asm similarity index 95% rename from src/bios/rom/SETUP/SETTINGS.asm rename to bios/rom/SETUP/SETTINGS.asm index ff06cd2..634cfd8 100644 --- a/src/bios/rom/SETUP/SETTINGS.asm +++ b/bios/rom/SETUP/SETTINGS.asm @@ -1,1092 +1,1092 @@ -;U_SETUP: -SETTINGS: - LD A,CMOS_CELL.ScreenSET - CALL READCMS - AND high CMOS_CELL.ScreenSET.Mask.ColorStyle - LD L,A - CALL CSET - LD DE,0 - LD HL,#2050 - LD A,(NORCLR) - LD B,A - CALL LP_CLS_WIN - - - LD A,msgStrings.setupBiosVer - LD DE,#0100 ; ????? - CALL POSTLEN - LD A,msgStrings.setupBiosVer - CALL POSTMSG - LD A,msgStrings.setupCopyRight - LD DE,#0200 - CALL POSTLEN - LD A,msgStrings.setupCopyRight - CALL POSTMSG - LD A,msgStrings.setupUtilityVer - LD DE,#0500 - CALL POSTLEN - LD A,msgStrings.setupUtilityVer - CALL POSTMSG - - CALL setFRAME.double - - LD DE,#0402 - LD BC,#1A4C - CALL PBORDER - - CALL setFRAME.medium - - LD DE,#0602 - LD BC,#134C - CALL PBORDER ;!FIXIT - - CALL setFRAME.single - - LD DE,#062A - LD H,#13 - CALL TLINEV - - LD DE,#1906 - ;CALL ScreenPOS.LOCAT - CALL LP_SET_PLACE - LD A,msgStrings.setupHelpStr1 - CALL POSTMSG - LD DE,#1A06 - ;CALL ScreenPOS.LOCAT - CALL LP_SET_PLACE - LD A,msgStrings.setupHelpStr2 - CALL POSTMSG - LD DE,#1B06 - ;CALL ScreenPOS.LOCAT - CALL LP_SET_PLACE - LD A,msgStrings.setupHelpStr3 - CALL POSTMSG - LD DE,#1C06 - ;CALL ScreenPOS.LOCAT - CALL LP_SET_PLACE - LD A,msgStrings.setupHelpStr4 - CALL POSTMSG - LD BC,SettingsItemsTabsAddrs.max*256 - - - IF NEW_FEATURE - - ; LD HL,CurrentDateTime - ; CALL GETTIME - - ; LD HL,CurrentDateTime - - ; LD A,(HL) - ; AND #F0 - - ENDIF - - -STT1: LD A,C - LD (ITEM),A - PUSH BC - CALL PTEXT - POP BC - INC C - DJNZ STT1 - - LD a,(ITEM_Restore) - LD (ITEM),A - CALL PCURSOR - -AGAIN: LD HL,AGAIN - PUSH HL - CALL KEY -; CURSOR DOWN - LD HL,#5200 - AND A - SBC HL,DE - JP Z,INCITM -; CURSOR UP - LD HL,#5800 - AND A - SBC HL,DE - JP Z,DECITM -; CURSOR RIGHT - LD HL,#5600 - AND A - SBC HL,DE - JP Z,ADDITM -; CURSOR LEFT - LD HL,#5400 - AND A - SBC HL,DE - JP Z,SUBITM -; + - LD HL,#5300 - AND A - SBC HL,DE - JP Z,INCVAL -; - - LD HL,#5900 - AND A - SBC HL,DE - JP Z,DECVAL -; + or - - LD HL,#A400 - AND A - SBC HL,DE - JP Z,INCVAL - CP "+" - JP Z,INCVAL - CP "-" - JP Z,DECVAL - - IF NEW_FEATURE -; ENTER - LD HL,#280D - AND A - SBC HL,DE - JP Z,pressedEnter - ENDIF - -; F2 - LD HL,#3C00 - AND A - SBC HL,DE - JP Z,SAVEV -; F3 - LD HL,#3D00 - AND A - SBC HL,DE - JP Z,CCHANGE -; F5 - LD HL,#3F00 - AND A - SBC HL,DE - JP Z,OLD_VAL -; F7 - LD HL,#4100 - AND A - SBC HL,DE - JP Z,DEF_VAL -; F10 - LD HL,#4400 - AND A - SBC HL,DE - JP Z,SAVEXIT -; ESC - LD HL,#011B - AND A - SBC HL,DE - RET NZ - POP HL - RET - -OLD_VAL: - CALL READING - JR RestartSetup - RET - -DEF_VAL: - CALL SETDEF -;--------------------------------------- -RestartSetup: -;setXYpos - CALL XY_SCREEN -;setLang - CALL SETLAND -;setVsinc - CALL OnChangeAction.setVsinc -;setInt - ᫥!!! - JP OnChangeAction.setInt -;--------------------------------------- - -SAVEXIT: - CALL WRITING - POP HL - RET - -SAVEV: - CALL WRITING - RET - -SUBITM: - CALL RCURSOR - LD A,(ITEM) - SUB 17 ; !HARDCODE max items in column - JR NC,GODITM2 - XOR A -GODITM2: - LD (ITEM),A - JP PCURSOR - -ADDITM: - CALL RCURSOR - LD A,(ITEM) - ADD A,17 ; !HARDCODE max items in column - CP SettingsItemsTabsAddrs.max - JR C,GODITM - LD A,SettingsItemsTabsAddrs.max - DEC A -GODITM: - LD (ITEM),A - JP PCURSOR - -INCITM: CALL RCURSOR - LD A,(ITEM) - INC A - CP SettingsItemsTabsAddrs.max - JR NZ,1F - XOR A -1: LD (ITEM),A - JP PCURSOR - -DECITM: - CALL RCURSOR - LD A,(ITEM) - OR A - JR NZ,1F - LD A,SettingsItemsTabsAddrs.max -1: DEC A - LD (ITEM),A - JP PCURSOR - -CCHANGE: - LD A,CMOS_CELL.ScreenSET - CALL READCMS - INC A - AND high CMOS_CELL.ScreenSET.Mask.ColorStyle - LD L,A - LD B,A - LD A,CMOS_CELL.ScreenSET - CALL WRITCMS -CSET: LD H,0 - LD DE,STYLES - ADD HL,HL - ADD HL,HL - ADD HL,DE - LD DE,NORCLR - LDI - LDI - LDI - LDI - CALL FSCREEN - ; - ;REFRESH: - LD BC,SettingsItemsTabsAddrs.max*256 - LD A,(ITEM) - PUSH AF -STT2: LD A,C - LD (ITEM),A - PUSH BC - CALL PTEXT - POP BC - INC C - DJNZ STT2 - POP AF - LD (ITEM),A - CALL PCURSOR - RET - -PTEXT: call Get_Item_Address - JP PITEM - -;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\-[v] - IF NEW_FEATURE -; New procedure with IY reg -LocateCursor: - call Get_Item_Address - LD E,(IY+MenusItem.Column) - LD D,(IY+MenusItem.Line) - ld a,(IY+MenusItem.Name) - push iy - call FindStringAddr - LD BC,#0100 - XOR A - CPIR - LD A,#FF - SUB C - ADD A,E - LD E,A - ;CALL ScreenPOS.LOCAT - CALL LP_SET_PLACE - pop iy - ld a,(iy+MenusItem.FirstString) - call FindStringAddr - LD BC,#0100 - XOR A - CPIR - LD A,#FF - SUB C - LD B,A - ret - - ELSE -LocateCursor: - call Get_Item_Address - LD E,(HL) - INC HL - LD D,(HL) - INC HL - ld a,(hl) - inc hl - push hl - call FindStringAddr - LD BC,#0100 - XOR A - CPIR - LD A,#FF - SUB C - ADD A,E - LD E,A - ;CALL ScreenPOS.LOCAT - CALL LP_SET_PLACE - pop hl - INC HL ;SKIP REGISTER - INC HL ;SKIP MASK - INC HL ;SKIP MAX VALUE - ld a,(hl) - call FindStringAddr - LD BC,#0100 - XOR A - CPIR - LD A,#FF - SUB C - LD B,A - ret - ENDIF -;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\-[^] - -PCURSOR: - call LocateCursor - LD A,(CURCLR) - JP PRINTA - -RCURSOR: - call LocateCursor - LD A,(NORCLR) - JP PRINTA - -FSCREEN: - LD DE,#0000 - EI - HALT -FSC1: - PUSH DE - CALL LP_SET_PLACE - - LD A,(NORCLR) - LD E,A - LD B,#50 - CALL LP_PRINT_ATR - - POP DE - LD A,#20 - INC D - CP D - JR NZ,FSC1 - RET - -ITEM: DB #00 -ITEM_Restore: DB #00 - -NORCLR: DB COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE -HLTCLR: DB COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.YELLOW -CURCLR: DB COLORS.CGA.PAPER.RED + COLORS.CGA.INK.WHITE -WRMCLR: DB COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE - - -;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\-[v] - IF NEW_FEATURE -; New procedure with IY reg -INCVAL: call Get_Item_Address - ld A,(IY+MenusItem.Type) - AND A - RET NZ ; ஢ઠ ⨯, ᫨ paramLine - - LD A,(IY+MenusItem.CMOSreg) - PUSH AF - CALL READCMS - LD C,A - AND (IY+MenusItem.ValueMask) - CP (IY+MenusItem.ValueMax) - LD A,C - JR Z,OVERI - LD B,(IY+MenusItem.ValueMask) - CALL ADDVAL - ADD A,B - JR OVER -OVERI: XOR (IY+MenusItem.ValueMax) -OVER: LD B,A - POP AF - CALL WRITCMS - PUSH IY - PUSH IY - POP HL - CALL PITEM - POP IY - ld l,(IY+MenusItem.Action) - ld h,(IY+MenusItem.Action+1) - jp (hl) - -DECVAL: call Get_Item_Address - ld A,(IY+MenusItem.Type) - AND A - RET NZ ; ஢ઠ ⨯, ᫨ paramLine - - LD A,(IY+MenusItem.CMOSreg) - PUSH AF - CALL READCMS - LD C,A - AND (IY+MenusItem.ValueMask) - LD A,C - JR Z,OVERD - LD B,(IY+MenusItem.ValueMask) - CALL ADDVAL - SUB B - JR OVER -OVERD: OR (IY+MenusItem.ValueMax) - JR OVER - - -pressedEnter: -; !TODO New Feature - ld a,(iy+MenusItem.Type) - and a - ret z - ld l,(iy+MenusItem.Action) - ld h,(iy+MenusItem.Action+1) - jp (HL) - - ELSE -INCVAL: call Get_Item_Address - INC HL - INC HL - INC HL - LD A,(HL) - INC HL - PUSH AF - CALL READCMS - LD C,A - AND (HL) - INC HL - CP (HL) - LD A,C - JR Z,OVERI - DEC HL - LD B,(HL) - CALL ADDVAL - ADD A,B - JR OVER -OVERI: XOR (HL) -OVER: LD B,A - POP AF - CALL WRITCMS - CALL PTEXT - call Get_Item_Address - dec hl - ld a,(hl) - dec hl - ld l,(hl) - ld h,a - jp (hl) - -DECVAL: call Get_Item_Address - INC HL - INC HL - INC HL - LD A,(HL) - INC HL - PUSH AF - CALL READCMS - LD C,A - AND (HL) - LD A,C - INC HL - JR Z,OVERD - DEC HL - LD B,(HL) - CALL ADDVAL - SUB B - JR OVER -OVERD: - OR (HL) - JR OVER - - ENDIF -;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\-[^] - -; B - MASK -ADDVAL: LD C,#00 -ADDV1: INC C - RRC B - JR NC,ADDV1 - LD B,#80 -ADDV2: RLC B - DEC C - JR NZ,ADDV2 - RET - -;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\-[v] - IF NEW_FEATURE -; IY - item's address -; New procedure with IY reg -PITEM: LD E,(IY+MenusItem.Column) ; x-coordinate - LD D,(IY+MenusItem.Line) ; y-coordinate - ;CALL ScreenPOS.LOCAT - CALL LP_SET_PLACE ; set position of item - LD A,(IY+MenusItem.Name) - CALL POSTMSG - - PUSH IY - LD BC,MenusItem.FirstString - ADD IY,BC - EX (SP),IY - POP HL ; ப ࢮ ࠬ - - LD A,(IY+MenusItem.Type) - AND A - JR NZ,.printParameter ; ᫨ ப 塞 ࠬ஬, - - LD A,(IY+MenusItem.CMOSreg) ; address of next parametr - CALL READCMS ; read item`s value from cmos - - LD B,(IY+MenusItem.ValueMask) ; item's value mask - AND B -.getParameterNum: - RRCA - RRC B - JR NC,.getParameterNum - RLCA - OR A - jr Z,.printParameter ; ࠬ 뢮? - - ld c,a - xor a - ld b,a - add hl,bc ; 室 ࠬ -.printParameter: - ld a,(hl) - jp POSTMSG - - ELSE -; 맮 楤 , ॣ -; HL - item's address -PITEM: LD E,(HL) ; x-coordinate - INC HL - LD D,(HL) ; y-coordinate - INC HL ; address of next parametr - PUSH HL - CALL LP_SET_PLACE ; set position of item - LD A,(HL) - CALL POSTMSG - POP HL - INC HL - LD A,(HL) ; address of next parametr - CALL READCMS ; read item`s value from cmos - INC HL - LD B,(HL) ; item's value mask - INC HL - INC HL - AND B -.getParameterNum: - RRCA - RRC B - JR NC,.getParameterNum - RLCA - OR A - jr Z,.printParameter ; ࠬ 뢮? - - ld c,a - xor a - ld b,a - add hl,bc ; 室 ࠬ -.printParameter: - ld a,(hl) - jp POSTMSG - ENDIF -;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\-[^] - -; HL -GET_CMOS_VALUE: - PUSH BC - LD A,C - CALL READCMS - POP BC - AND B -.loop: RRCA - RRC B - JR NC,.loop - RLCA - RET - -; [x] ⮡ 㤠 -READCMS: LD D,high CMOSARE - LD E,A - CP CMOS.USED_MAX_ADDRESS+1 - JR NC,.error - LD A,(DE) - RET - ; -.error: SCF - RET - -; [x] ⮡ 㤠 -WRITCMS: - LD D,high CMOSARE - LD E,A - CP CMOS.USED_MAX_ADDRESS+1 - JR NC,.error - LD A,B - LD (DE),A - RET -.error: SCF - RET - -CHEKSUM: - LD BC,DEFVAL.Size*256 + CMOS.USED_MIN_ADDRESS - LD H,#DE ;!HARDCODE -.loop: LD A,C - CALL READCMS - LD L,A - LD A,H - SUB L - RLCA - SUB L - LD H,A - INC C - DJNZ .loop - RET - -TEST_CHECKSUM: - CALL CHEKSUM - LD A,CMOS_CELL.CheckSum - CALL READCMS - CP H - RET - -; TSTCMOS: -; LD C,BIOS.CMOS_TEST -; JP_to_BIOS - - -; RDCMOS: -; LD C,BIOS.CMOS_RD -; JP_to_BIOS - -; WRCMOS: -; LD C,BIOS.CMOS_WR -; JP_to_BIOS - -READING: - LD D,CMOS.USED_MIN_ADDRESS -.loop: PUSH DE - CALL CMOS_RD - POP DE - LD H,high CMOSARE - LD L,D - LD (HL),A - LD A,CMOS.USED_MAX_ADDRESS+1 - INC D - CP D - JR NZ,.loop - RET - -WRITING: CALL CHEKSUM - LD B,H - LD A,CMOS.Cell.CheckSum - CALL WRITCMS - LD D,CMOS.USED_MIN_ADDRESS -.loop: LD H,high CMOSARE - LD L,D - LD A,(HL) - PUSH DE - CALL CMOS_WR - POP DE - LD A,CMOS.USED_MAX_ADDRESS+1 - INC D - CP D - JR NZ,.loop - RET - -SETDEFX: - LD A,#FF - LD (ERRSUM),A - CALL SETDEF - JP WRITING - -SETDEF: ;!TODO LDIR? ᬮ - LD HL,DEFVAL - LD C,DEFVAL.Size - LD A,CMOS.USED_MIN_ADDRESS -.loop: - LD B,(HL) - INC HL - PUSH AF - CALL WRITCMS - POP AF - INC A - DEC C - JR NZ,.loop - - LD A,CMOS_CELL.HardwareConfiguration ; ᯮ - LD B,0 - CALL WRITCMS - - LD A,CMOS_CELL.QuickStartSetUp - LD B,CMOS_CELL.QuickStartSetUp.ZxRom.Basic128 - CALL WRITCMS - - CALL CHEKSUM - LD B,H - LD A,CMOS_CELL.CheckSum - CALL WRITCMS - RET - -;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\-[v] -; New procedure with IY reg - IF NEW_FEATURE -Get_Item_Address: - LD A,(ITEM) - LD L,A - LD H,0 - LD DE,SettingsItemsTabsAddrs - ADD HL,HL - ADD HL,DE - LD A,(HL) - INC HL - LD H,(HL) - LD L,A - PUSH HL - POP IY - RET - - ELSE -Get_Item_Address: - LD A,(ITEM) - LD L,A - LD H,0 - LD DE,SettingsItemsTabsAddrs - ADD HL,HL - ADD HL,DE - LD A,(HL) - INC HL - LD H,(HL) - LD L,A - INC HL - INC HL - RET - ENDIF -;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\-[^] -; - MODULE OnChangeAction -nothing: - ret - - ; !TODO New Feature - ; !TODO - ⨯ API ᮢ ᯫ뢠 - IF NEW_FEATURE -SetTime: - xor a - ld hl,#050E - ld de,#0C20 - ld ix,memBUFFER.Shared - CALL WIN_COPY - - LD DE,#0C20 ; !HARDCODE - ld b,5 - DI - -.loop: push bc - push de - CALL LP_SET_PLACE - ; ਡ⮢ - LD E,COLORS.CGA.INK.RED - LD B,#0E - CALL LP_PRINT_ATR - - pop de - inc d - pop bc - DJNZ .loop - - CALL setFRAME.single - LD DE,#0C20 ;yx. y=0..1F, x=0..4F न 孥 㣫 - LD BC,#050E ;yx. - CALL PBORDER - - CALL KEY - xor a - ld hl,#050E - ld de,#0C20 - ld ix,memBUFFER.Shared - JP WIN_RESTORE - ENDIF - -setXYpos: - JP XY_SCREEN - -setVsinc: - ld a,CMOS_CELL.ScreenSET - call READCMS - and high CMOS_CELL.ScreenSET.Mask.Sinc - SCF - jr z,.skip ;320 - SLA A -.skip: ld a,128+7 ;312 - jp nc,FN_SYNC - dec a ;320 -.set: jp FN_SYNC - -setLang: - CALL SETLAND - ld a,(ITEM) - ld (ITEM_Restore),a - pop hl ; delete return adress from stack - jp SETTINGS -setInt: ld a,CMOS_CELL.ScreenSET - call READCMS - and high CMOS_CELL.ScreenSET.Mask.Int - jr nz,.skipDefaultInt - ld a,2 ; Pentagon sync - default - jr .set - -.skipDefaultInt: - SRA A - SRA A - SRA A - SRA A ; byte %00xx0000 --> %000000xx -.set: CALL FN_SYNC - - LD IX,win_descriptor.tab80x32 - CALL WIN_OPEN.SCR1 - - ld a,(ITEM) - ld (ITEM_Restore),a - pop hl ; delete return adress from stack - jp SETTINGS - ENDMODULE -; -;-----------------------------------------------------------------------; -;!FIXIT ਡ -SETBOOTSOUND EQU high CMOS_CELL.BootUpParams.Mask.BootSound -MEMTEST EQU high CMOS_CELL.BootUpParams.Mask.MemTest -SAVERAM EQU high CMOS_CELL.BootUpParams.Mask.SaveRAMdisks -EXTBIOS EQU high CMOS_CELL.BootUpParams.Mask.UpdBios - -SDELAY2 EQU #10 -SDELAY1 EQU #08 -SDELAY0 EQU #00 -RUS EQU #04 -QSTART EQU #01 - -TMAT_ON EQU #80 -TDL250 EQU #00 -TDL500 EQU #20 -TDL750 EQU #40 -TDL1000 EQU #60 -TRATE6 EQU #00 -TRATE8 EQU #01 -TRATE10 EQU #02 -TRATE12 EQU #03 -TRATE15 EQU #04 -TRATE20 EQU #05 -TRATE24 EQU #06 -TRATE30 EQU #07 -SDFDD1 EQU #00 -SDFDD2 EQU #01 -SDIDE1 EQU #02 -SDIDE2 EQU #03 -SDRAM EQU #04 -ASDFDD1 EQU #00 -ASDFDD2 EQU #10 -ASDRECOVERY EQU #70 -ASDIDE1 EQU #20 -ASDIDE2 EQU #30 -ASDRAM EQU #40 -FD1720 EQU #00 -FD1144 EQU #01 -FD1NONE EQU #02 -FD2720 EQU #00 -FD2144 EQU #04 -FD2NONE EQU #08 -HD1AUTO EQU #00 -HD1STP EQU #01 -HD1NONE EQU #02 -HD2AUTO EQU #00 -HD2STP EQU #04 -HD2NONE EQU #08 -TURBOFF EQU #06 -TURBON EQU #07 -SPRIN EQU #00 -SCORP EQU #08 -PENT EQU #10 -USER EQU #18 -BAS128 EQU #00 -BAS48_ EQU #01 -TRD128 EQU #02 -EXPN EQU #03 -TRD48 EQU #04 -BAS48 EQU #05 -REBOOTM EQU #02 -HDDWP EQU #01 -;-----------------------------------------------------------------------; - -STYLES: -; Color Style 0 - DB COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE - DB COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.YELLOW - DB COLORS.CGA.PAPER.RED + COLORS.CGA.INK.WHITE - DB COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE -; Color Style 1 - DB COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.LGREEN - DB COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.LMAGENT - DB COLORS.CGA.PAPER.MAGENTA + COLORS.CGA.INK.WHITE - DB COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE -; Color Style 2 - DB COLORS.CGA.PAPER.GREEN + COLORS.CGA.INK.LCYAN - DB COLORS.CGA.PAPER.GREEN + COLORS.CGA.INK.YELLOW - DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.BLACK - DB COLORS.CGA.PAPER.GREEN + COLORS.CGA.INK.BLACK -; Color Style 3 - DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.BLACK - DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.YELLOW - DB COLORS.CGA.PAPER.GREEN + COLORS.CGA.INK.BLACK - DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.LGREEN -; Color Style 4 - DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.WHITE - DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.BLACK - DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.BLUE - DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.YELLOW -; Color Style 5 - DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.BLACK - DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.BROWN - DB COLORS.CGA.PAPER.BROWN + COLORS.CGA.INK.LGRAY - DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.WHITE -; Color Style 6 - DB COLORS.CGA.PAPER.RED + COLORS.CGA.INK.YELLOW - DB COLORS.CGA.PAPER.RED + COLORS.CGA.INK.WHITE - DB COLORS.CGA.PAPER.BLACK + COLORS.CGA.INK.GREEN - DB COLORS.CGA.PAPER.RED + COLORS.CGA.INK.GREEN -; Color Style 7 - DB COLORS.CGA.PAPER.RED + COLORS.CGA.INK.LGRAY - DB COLORS.CGA.PAPER.RED + COLORS.CGA.INK.WHITE - DB COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE - DB COLORS.CGA.PAPER.RED + COLORS.CGA.INK.WHITE -; Color Style 8 - DB COLORS.CGA.PAPER.MAGENTA + COLORS.CGA.INK.LCYAN - DB COLORS.CGA.PAPER.MAGENTA + COLORS.CGA.INK.LGREEN - DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.BLACK - DB COLORS.CGA.PAPER.MAGENTA + COLORS.CGA.INK.WHITE -; Color Style 9 - DB COLORS.CGA.PAPER.MAGENTA + COLORS.CGA.INK.WHITE - DB COLORS.CGA.PAPER.MAGENTA + COLORS.CGA.INK.YELLOW - DB COLORS.CGA.PAPER.GREEN + COLORS.CGA.INK.BLUE - DB COLORS.CGA.PAPER.MAGENTA + COLORS.CGA.INK.LRED -; Color Style 10 - DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.BLACK - DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.RED - DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.WHITE - DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.WHITE -; Color Style 11 - DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.BLUE - DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.YELLOW - DB COLORS.CGA.PAPER.MAGENTA + COLORS.CGA.INK.WHITE - DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.WHITE -; Color Style 12 - DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.LGREEN - DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.LCYAN - DB COLORS.CGA.PAPER.GREEN + COLORS.CGA.INK.WHITE - DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.WHITE -; Color Style 13 - DB COLORS.CGA.PAPER.BLACK + COLORS.CGA.INK.LGREEN - DB COLORS.CGA.PAPER.BLACK + COLORS.CGA.INK.LCYAN - DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.YELLOW - DB COLORS.CGA.PAPER.BLACK + COLORS.CGA.INK.YELLOW -; Color Style 14 (Mono) - DB COLORS.CGA.PAPER.BLACK + COLORS.CGA.INK.LGRAY - DB COLORS.CGA.PAPER.BLACK + COLORS.CGA.INK.WHITE - DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.BLACK - DB COLORS.CGA.PAPER.BLACK + COLORS.CGA.INK.LGRAY -; Color Style 15 - DB COLORS.CGA.PAPER.BLACK + COLORS.CGA.INK.LMAGENT - DB COLORS.CGA.PAPER.BLACK + COLORS.CGA.INK.LGREEN - DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.RED - DB COLORS.CGA.PAPER.BLACK + COLORS.CGA.INK.RED - -DEFVAL: DB SAVERAM + SETBOOTSOUND + SDELAY1 ;#0E - OPTIONS - DB TDL250 + TRATE30 ;#0F - KEYBOARD - DB SDIDE1 + ASDFDD1 ;#10 - SYSTEM DISKS - DB FD1720 + FD2720+HD1AUTO+HD2AUTO ;#11 - FDD & Primary HDD's - DB 0 ;#12 - CYLINDERS LOW MASTER - DB 0 ;#13 - CYLINDERS HIGH MASTER - DB 0 ;#14 - HEADS MASTER - DB 0 ;#15 - SECTORS MASTER - DB 0 ;#16 - CYLINDERS LOW SLAVE - DB 0 ;#17 - CYLINDERS HIGH SLAVE - DB 0 ;#18 - HEADS SLAVE - DB 0 ;#19 - SECTORS SLAVE - DB 0 ;#1A - Int conf, Screen sync, COLOR STYLE - DB CNF_PORT.TURBO.ON + CNF_PORT.CNF_0 ;#1B - HARDARE CONF - DB BAS128 ;#1C - RESET MODE - DB REBOOTM + 4 ;#1D - REBOOT + LoadZXroms by ZX flag - DB 0 ;#1E - TRDOS - DB #77 ;#1F - SCREEN POSITION - DB HD1AUTO + HD2AUTO ;#20 - Secondary HDD's -.Size EQU $-DEFVAL - - -;!FIXIT ᯨ 祩 ᬥ饭 ⪮ ਢ易 #0E SETDEF - _mInfoALIGN 256,0 ; ࠢ #XX00 -CMOSARE: - DS 14 - ; - DB SAVERAM + SETBOOTSOUND + SDELAY1 ;#0E - OPTIONS - DB TDL250+TRATE30 ;#0F - KEYBOARD - DB SDIDE1 + ASDFDD1 ;#10 - SYSTEM DISKS - DB FD1720+FD2720+HD1AUTO+HD2AUTO ;#11 - FDD & HDD - DB 0 ;#12 - CYLINDERS LOW MASTER - DB 0 ;#13 - CYLINDERS HIGH MASTER - DB 0 ;#14 - HEADS MASTER - DB 0 ;#15 - SECTORS MASTER - DB 0 ;#16 - CYLINDERS LOW SLAVE - DB 0 ;#17 - CYLINDERS HIGH SLAVE - DB 0 ;#18 - HEADS SLAVE - DB 0 ;#19 - SECTORS SLAVE - DB 0 ;#1A - Int conf, Screen sync, COLOR STYLE - DB TURBON+SPRIN ;#1B - HARDARE CONF - DB BAS128 ;#1C - RESET MODE - DB REBOOTM ;#1D - REBOOT MSG, HDD W/P - DB %0000'0000 ;#1E - TRDOS - DB %0111'0111 ;#1F - SCREEN POSITION - DB HD1AUTO+HD2AUTO ;#20 - Secondary HDD's - DB %0000'0000 ;#21 - DB %0000'0000 ;#22 - DB %0000'0000 ;#23 - DB %0000'0000 ;#24 - DB %0000'0000 ;#25 - DB %0000'0000 ;#26 - DB %0000'0000 ;#27 - DB %0000'0000 ;#28 - DB %0000'0000 ;#29 - DB %0000'0000 ;#2A - DB %0000'0000 ;#2B - DB %0000'0000 ;#2C - DB %0000'0000 ;#2D - DB %0000'0000 ;#2E - DB %0000'0000 ;#2F - DB %0000'0000 ;#30 - DB %0000'0000 ;#31 - DB #20 ;#32 - CENTURY - DB %0000'0000 ;#33 - DB %0000'0000 ;#34 - DB %0000'0000 ;#35 - DB %0000'0000 ;#36 - DB %0000'0000 ;#37 - DB %0000'0000 ;#38 - DB %0000'0000 ;#39 - DB %0000'0000 ;#3A - DB %0000'0000 ;#3B - DB %0000'0000 ;#3C - DB %0000'0000 ;#3D - DB %0000'0000 ;#3E - DB %0000'0000 ;#3F - CHECKSUM - BLOCK #100 - low $ ; CMOSARE ࠧ 256 ⮢ -;DONT MOVE !!! ADDRESS +;U_SETUP: +SETTINGS: + LD A,CMOS_CELL.ScreenSET + CALL READCMS + AND high CMOS_CELL.ScreenSET.Mask.ColorStyle + LD L,A + CALL CSET + LD DE,0 + LD HL,#2050 + LD A,(NORCLR) + LD B,A + CALL LP_CLS_WIN + + + LD A,msgStrings.setupBiosVer + LD DE,#0100 ; ????? + CALL POSTLEN + LD A,msgStrings.setupBiosVer + CALL POSTMSG + LD A,msgStrings.setupCopyRight + LD DE,#0200 + CALL POSTLEN + LD A,msgStrings.setupCopyRight + CALL POSTMSG + LD A,msgStrings.setupUtilityVer + LD DE,#0500 + CALL POSTLEN + LD A,msgStrings.setupUtilityVer + CALL POSTMSG + + CALL setFRAME.double + + LD DE,#0402 + LD BC,#1A4C + CALL PBORDER + + CALL setFRAME.medium + + LD DE,#0602 + LD BC,#134C + CALL PBORDER ;!FIXIT + + CALL setFRAME.single + + LD DE,#062A + LD H,#13 + CALL TLINEV + + LD DE,#1906 + ;CALL ScreenPOS.LOCAT + CALL LP_SET_PLACE + LD A,msgStrings.setupHelpStr1 + CALL POSTMSG + LD DE,#1A06 + ;CALL ScreenPOS.LOCAT + CALL LP_SET_PLACE + LD A,msgStrings.setupHelpStr2 + CALL POSTMSG + LD DE,#1B06 + ;CALL ScreenPOS.LOCAT + CALL LP_SET_PLACE + LD A,msgStrings.setupHelpStr3 + CALL POSTMSG + LD DE,#1C06 + ;CALL ScreenPOS.LOCAT + CALL LP_SET_PLACE + LD A,msgStrings.setupHelpStr4 + CALL POSTMSG + LD BC,SettingsItemsTabsAddrs.max*256 + + + IF NEW_FEATURE + + ; LD HL,CurrentDateTime + ; CALL GETTIME + + ; LD HL,CurrentDateTime + + ; LD A,(HL) + ; AND #F0 + + ENDIF + + +STT1: LD A,C + LD (ITEM),A + PUSH BC + CALL PTEXT + POP BC + INC C + DJNZ STT1 + + LD a,(ITEM_Restore) + LD (ITEM),A + CALL PCURSOR + +AGAIN: LD HL,AGAIN + PUSH HL + CALL KEY +; CURSOR DOWN + LD HL,#5200 + AND A + SBC HL,DE + JP Z,INCITM +; CURSOR UP + LD HL,#5800 + AND A + SBC HL,DE + JP Z,DECITM +; CURSOR RIGHT + LD HL,#5600 + AND A + SBC HL,DE + JP Z,ADDITM +; CURSOR LEFT + LD HL,#5400 + AND A + SBC HL,DE + JP Z,SUBITM +; + + LD HL,#5300 + AND A + SBC HL,DE + JP Z,INCVAL +; - + LD HL,#5900 + AND A + SBC HL,DE + JP Z,DECVAL +; + or - + LD HL,#A400 + AND A + SBC HL,DE + JP Z,INCVAL + CP "+" + JP Z,INCVAL + CP "-" + JP Z,DECVAL + + IF NEW_FEATURE +; ENTER + LD HL,#280D + AND A + SBC HL,DE + JP Z,pressedEnter + ENDIF + +; F2 + LD HL,#3C00 + AND A + SBC HL,DE + JP Z,SAVEV +; F3 + LD HL,#3D00 + AND A + SBC HL,DE + JP Z,CCHANGE +; F5 + LD HL,#3F00 + AND A + SBC HL,DE + JP Z,OLD_VAL +; F7 + LD HL,#4100 + AND A + SBC HL,DE + JP Z,DEF_VAL +; F10 + LD HL,#4400 + AND A + SBC HL,DE + JP Z,SAVEXIT +; ESC + LD HL,#011B + AND A + SBC HL,DE + RET NZ + POP HL + RET + +OLD_VAL: + CALL READING + JR RestartSetup + RET + +DEF_VAL: + CALL SETDEF +;--------------------------------------- +RestartSetup: +;setXYpos + CALL XY_SCREEN +;setLang + CALL SETLAND +;setVsinc + CALL OnChangeAction.setVsinc +;setInt - ᫥!!! + JP OnChangeAction.setInt +;--------------------------------------- + +SAVEXIT: + CALL WRITING + POP HL + RET + +SAVEV: + CALL WRITING + RET + +SUBITM: + CALL RCURSOR + LD A,(ITEM) + SUB 17 ; !HARDCODE max items in column + JR NC,GODITM2 + XOR A +GODITM2: + LD (ITEM),A + JP PCURSOR + +ADDITM: + CALL RCURSOR + LD A,(ITEM) + ADD A,17 ; !HARDCODE max items in column + CP SettingsItemsTabsAddrs.max + JR C,GODITM + LD A,SettingsItemsTabsAddrs.max + DEC A +GODITM: + LD (ITEM),A + JP PCURSOR + +INCITM: CALL RCURSOR + LD A,(ITEM) + INC A + CP SettingsItemsTabsAddrs.max + JR NZ,1F + XOR A +1: LD (ITEM),A + JP PCURSOR + +DECITM: + CALL RCURSOR + LD A,(ITEM) + OR A + JR NZ,1F + LD A,SettingsItemsTabsAddrs.max +1: DEC A + LD (ITEM),A + JP PCURSOR + +CCHANGE: + LD A,CMOS_CELL.ScreenSET + CALL READCMS + INC A + AND high CMOS_CELL.ScreenSET.Mask.ColorStyle + LD L,A + LD B,A + LD A,CMOS_CELL.ScreenSET + CALL WRITCMS +CSET: LD H,0 + LD DE,STYLES + ADD HL,HL + ADD HL,HL + ADD HL,DE + LD DE,NORCLR + LDI + LDI + LDI + LDI + CALL FSCREEN + ; + ;REFRESH: + LD BC,SettingsItemsTabsAddrs.max*256 + LD A,(ITEM) + PUSH AF +STT2: LD A,C + LD (ITEM),A + PUSH BC + CALL PTEXT + POP BC + INC C + DJNZ STT2 + POP AF + LD (ITEM),A + CALL PCURSOR + RET + +PTEXT: call Get_Item_Address + JP PITEM + +;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\-[v] + IF NEW_FEATURE +; New procedure with IY reg +LocateCursor: + call Get_Item_Address + LD E,(IY+MenusItem.Column) + LD D,(IY+MenusItem.Line) + ld a,(IY+MenusItem.Name) + push iy + call FindStringAddr + LD BC,#0100 + XOR A + CPIR + LD A,#FF + SUB C + ADD A,E + LD E,A + ;CALL ScreenPOS.LOCAT + CALL LP_SET_PLACE + pop iy + ld a,(iy+MenusItem.FirstString) + call FindStringAddr + LD BC,#0100 + XOR A + CPIR + LD A,#FF + SUB C + LD B,A + ret + + ELSE +LocateCursor: + call Get_Item_Address + LD E,(HL) + INC HL + LD D,(HL) + INC HL + ld a,(hl) + inc hl + push hl + call FindStringAddr + LD BC,#0100 + XOR A + CPIR + LD A,#FF + SUB C + ADD A,E + LD E,A + ;CALL ScreenPOS.LOCAT + CALL LP_SET_PLACE + pop hl + INC HL ;SKIP REGISTER + INC HL ;SKIP MASK + INC HL ;SKIP MAX VALUE + ld a,(hl) + call FindStringAddr + LD BC,#0100 + XOR A + CPIR + LD A,#FF + SUB C + LD B,A + ret + ENDIF +;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\-[^] + +PCURSOR: + call LocateCursor + LD A,(CURCLR) + JP PRINTA + +RCURSOR: + call LocateCursor + LD A,(NORCLR) + JP PRINTA + +FSCREEN: + LD DE,#0000 + EI + HALT +FSC1: + PUSH DE + CALL LP_SET_PLACE + + LD A,(NORCLR) + LD E,A + LD B,#50 + CALL LP_PRINT_ATR + + POP DE + LD A,#20 + INC D + CP D + JR NZ,FSC1 + RET + +ITEM: DB #00 +ITEM_Restore: DB #00 + +NORCLR: DB COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE +HLTCLR: DB COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.YELLOW +CURCLR: DB COLORS.CGA.PAPER.RED + COLORS.CGA.INK.WHITE +WRMCLR: DB COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE + + +;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\-[v] + IF NEW_FEATURE +; New procedure with IY reg +INCVAL: call Get_Item_Address + ld A,(IY+MenusItem.Type) + AND A + RET NZ ; ஢ઠ ⨯, ᫨ paramLine + + LD A,(IY+MenusItem.CMOSreg) + PUSH AF + CALL READCMS + LD C,A + AND (IY+MenusItem.ValueMask) + CP (IY+MenusItem.ValueMax) + LD A,C + JR Z,OVERI + LD B,(IY+MenusItem.ValueMask) + CALL ADDVAL + ADD A,B + JR OVER +OVERI: XOR (IY+MenusItem.ValueMax) +OVER: LD B,A + POP AF + CALL WRITCMS + PUSH IY + PUSH IY + POP HL + CALL PITEM + POP IY + ld l,(IY+MenusItem.Action) + ld h,(IY+MenusItem.Action+1) + jp (hl) + +DECVAL: call Get_Item_Address + ld A,(IY+MenusItem.Type) + AND A + RET NZ ; ஢ઠ ⨯, ᫨ paramLine + + LD A,(IY+MenusItem.CMOSreg) + PUSH AF + CALL READCMS + LD C,A + AND (IY+MenusItem.ValueMask) + LD A,C + JR Z,OVERD + LD B,(IY+MenusItem.ValueMask) + CALL ADDVAL + SUB B + JR OVER +OVERD: OR (IY+MenusItem.ValueMax) + JR OVER + + +pressedEnter: +; !TODO New Feature + ld a,(iy+MenusItem.Type) + and a + ret z + ld l,(iy+MenusItem.Action) + ld h,(iy+MenusItem.Action+1) + jp (HL) + + ELSE +INCVAL: call Get_Item_Address + INC HL + INC HL + INC HL + LD A,(HL) + INC HL + PUSH AF + CALL READCMS + LD C,A + AND (HL) + INC HL + CP (HL) + LD A,C + JR Z,OVERI + DEC HL + LD B,(HL) + CALL ADDVAL + ADD A,B + JR OVER +OVERI: XOR (HL) +OVER: LD B,A + POP AF + CALL WRITCMS + CALL PTEXT + call Get_Item_Address + dec hl + ld a,(hl) + dec hl + ld l,(hl) + ld h,a + jp (hl) + +DECVAL: call Get_Item_Address + INC HL + INC HL + INC HL + LD A,(HL) + INC HL + PUSH AF + CALL READCMS + LD C,A + AND (HL) + LD A,C + INC HL + JR Z,OVERD + DEC HL + LD B,(HL) + CALL ADDVAL + SUB B + JR OVER +OVERD: + OR (HL) + JR OVER + + ENDIF +;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\-[^] + +; B - MASK +ADDVAL: LD C,#00 +ADDV1: INC C + RRC B + JR NC,ADDV1 + LD B,#80 +ADDV2: RLC B + DEC C + JR NZ,ADDV2 + RET + +;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\-[v] + IF NEW_FEATURE +; IY - item's address +; New procedure with IY reg +PITEM: LD E,(IY+MenusItem.Column) ; x-coordinate + LD D,(IY+MenusItem.Line) ; y-coordinate + ;CALL ScreenPOS.LOCAT + CALL LP_SET_PLACE ; set position of item + LD A,(IY+MenusItem.Name) + CALL POSTMSG + + PUSH IY + LD BC,MenusItem.FirstString + ADD IY,BC + EX (SP),IY + POP HL ; ப ࢮ ࠬ + + LD A,(IY+MenusItem.Type) + AND A + JR NZ,.printParameter ; ᫨ ப 塞 ࠬ஬, + + LD A,(IY+MenusItem.CMOSreg) ; address of next parametr + CALL READCMS ; read item`s value from cmos + + LD B,(IY+MenusItem.ValueMask) ; item's value mask + AND B +.getParameterNum: + RRCA + RRC B + JR NC,.getParameterNum + RLCA + OR A + jr Z,.printParameter ; ࠬ 뢮? + + ld c,a + xor a + ld b,a + add hl,bc ; 室 ࠬ +.printParameter: + ld a,(hl) + jp POSTMSG + + ELSE +; 맮 楤 , ॣ +; HL - item's address +PITEM: LD E,(HL) ; x-coordinate + INC HL + LD D,(HL) ; y-coordinate + INC HL ; address of next parametr + PUSH HL + CALL LP_SET_PLACE ; set position of item + LD A,(HL) + CALL POSTMSG + POP HL + INC HL + LD A,(HL) ; address of next parametr + CALL READCMS ; read item`s value from cmos + INC HL + LD B,(HL) ; item's value mask + INC HL + INC HL + AND B +.getParameterNum: + RRCA + RRC B + JR NC,.getParameterNum + RLCA + OR A + jr Z,.printParameter ; ࠬ 뢮? + + ld c,a + xor a + ld b,a + add hl,bc ; 室 ࠬ +.printParameter: + ld a,(hl) + jp POSTMSG + ENDIF +;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\-[^] + +; HL +GET_CMOS_VALUE: + PUSH BC + LD A,C + CALL READCMS + POP BC + AND B +.loop: RRCA + RRC B + JR NC,.loop + RLCA + RET + +; [x] ⮡ 㤠 +READCMS: LD D,high CMOSARE + LD E,A + CP CMOS.USED_MAX_ADDRESS+1 + JR NC,.error + LD A,(DE) + RET + ; +.error: SCF + RET + +; [x] ⮡ 㤠 +WRITCMS: + LD D,high CMOSARE + LD E,A + CP CMOS.USED_MAX_ADDRESS+1 + JR NC,.error + LD A,B + LD (DE),A + RET +.error: SCF + RET + +CHEKSUM: + LD BC,DEFVAL.Size*256 + CMOS.USED_MIN_ADDRESS + LD H,#DE ;!HARDCODE +.loop: LD A,C + CALL READCMS + LD L,A + LD A,H + SUB L + RLCA + SUB L + LD H,A + INC C + DJNZ .loop + RET + +TEST_CHECKSUM: + CALL CHEKSUM + LD A,CMOS_CELL.CheckSum + CALL READCMS + CP H + RET + +; TSTCMOS: +; LD C,BIOS.CMOS_TEST +; JP_to_BIOS + + +; RDCMOS: +; LD C,BIOS.CMOS_RD +; JP_to_BIOS + +; WRCMOS: +; LD C,BIOS.CMOS_WR +; JP_to_BIOS + +READING: + LD D,CMOS.USED_MIN_ADDRESS +.loop: PUSH DE + CALL CMOS_RD + POP DE + LD H,high CMOSARE + LD L,D + LD (HL),A + LD A,CMOS.USED_MAX_ADDRESS+1 + INC D + CP D + JR NZ,.loop + RET + +WRITING: CALL CHEKSUM + LD B,H + LD A,CMOS.Cell.CheckSum + CALL WRITCMS + LD D,CMOS.USED_MIN_ADDRESS +.loop: LD H,high CMOSARE + LD L,D + LD A,(HL) + PUSH DE + CALL CMOS_WR + POP DE + LD A,CMOS.USED_MAX_ADDRESS+1 + INC D + CP D + JR NZ,.loop + RET + +SETDEFX: + LD A,#FF + LD (ERRSUM),A + CALL SETDEF + JP WRITING + +SETDEF: ;!TODO LDIR? ᬮ + LD HL,DEFVAL + LD C,DEFVAL.Size + LD A,CMOS.USED_MIN_ADDRESS +.loop: + LD B,(HL) + INC HL + PUSH AF + CALL WRITCMS + POP AF + INC A + DEC C + JR NZ,.loop + + LD A,CMOS_CELL.HardwareConfiguration ; ᯮ + LD B,0 + CALL WRITCMS + + LD A,CMOS_CELL.QuickStartSetUp + LD B,CMOS_CELL.QuickStartSetUp.ZxRom.Basic128 + CALL WRITCMS + + CALL CHEKSUM + LD B,H + LD A,CMOS_CELL.CheckSum + CALL WRITCMS + RET + +;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\-[v] +; New procedure with IY reg + IF NEW_FEATURE +Get_Item_Address: + LD A,(ITEM) + LD L,A + LD H,0 + LD DE,SettingsItemsTabsAddrs + ADD HL,HL + ADD HL,DE + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + PUSH HL + POP IY + RET + + ELSE +Get_Item_Address: + LD A,(ITEM) + LD L,A + LD H,0 + LD DE,SettingsItemsTabsAddrs + ADD HL,HL + ADD HL,DE + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + INC HL + INC HL + RET + ENDIF +;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\-[^] +; + MODULE OnChangeAction +nothing: + ret + + ; !TODO New Feature + ; !TODO - ⨯ API ᮢ ᯫ뢠 + IF NEW_FEATURE +SetTime: + xor a + ld hl,#050E + ld de,#0C20 + ld ix,memBUFFER.Shared + CALL WIN_COPY + + LD DE,#0C20 ; !HARDCODE + ld b,5 + DI + +.loop: push bc + push de + CALL LP_SET_PLACE + ; ਡ⮢ + LD E,COLORS.CGA.INK.RED + LD B,#0E + CALL LP_PRINT_ATR + + pop de + inc d + pop bc + DJNZ .loop + + CALL setFRAME.single + LD DE,#0C20 ;yx. y=0..1F, x=0..4F न 孥 㣫 + LD BC,#050E ;yx. + CALL PBORDER + + CALL KEY + xor a + ld hl,#050E + ld de,#0C20 + ld ix,memBUFFER.Shared + JP WIN_RESTORE + ENDIF + +setXYpos: + JP XY_SCREEN + +setVsinc: + ld a,CMOS_CELL.ScreenSET + call READCMS + and high CMOS_CELL.ScreenSET.Mask.Sinc + SCF + jr z,.skip ;320 + SLA A +.skip: ld a,128+7 ;312 + jp nc,FN_SYNC + dec a ;320 +.set: jp FN_SYNC + +setLang: + CALL SETLAND + ld a,(ITEM) + ld (ITEM_Restore),a + pop hl ; delete return adress from stack + jp SETTINGS +setInt: ld a,CMOS_CELL.ScreenSET + call READCMS + and high CMOS_CELL.ScreenSET.Mask.Int + jr nz,.skipDefaultInt + ld a,2 ; Pentagon sync - default + jr .set + +.skipDefaultInt: + SRA A + SRA A + SRA A + SRA A ; byte %00xx0000 --> %000000xx +.set: CALL FN_SYNC + + LD IX,win_descriptor.tab80x32 + CALL WIN_OPEN.SCR1 + + ld a,(ITEM) + ld (ITEM_Restore),a + pop hl ; delete return adress from stack + jp SETTINGS + ENDMODULE +; +;-----------------------------------------------------------------------; +;!FIXIT ਡ +SETBOOTSOUND EQU high CMOS_CELL.BootUpParams.Mask.BootSound +MEMTEST EQU high CMOS_CELL.BootUpParams.Mask.MemTest +SAVERAM EQU high CMOS_CELL.BootUpParams.Mask.SaveRAMdisks +EXTBIOS EQU high CMOS_CELL.BootUpParams.Mask.UpdBios + +SDELAY2 EQU #10 +SDELAY1 EQU #08 +SDELAY0 EQU #00 +RUS EQU #04 +QSTART EQU #01 + +TMAT_ON EQU #80 +TDL250 EQU #00 +TDL500 EQU #20 +TDL750 EQU #40 +TDL1000 EQU #60 +TRATE6 EQU #00 +TRATE8 EQU #01 +TRATE10 EQU #02 +TRATE12 EQU #03 +TRATE15 EQU #04 +TRATE20 EQU #05 +TRATE24 EQU #06 +TRATE30 EQU #07 +SDFDD1 EQU #00 +SDFDD2 EQU #01 +SDIDE1 EQU #02 +SDIDE2 EQU #03 +SDRAM EQU #04 +ASDFDD1 EQU #00 +ASDFDD2 EQU #10 +ASDRECOVERY EQU #70 +ASDIDE1 EQU #20 +ASDIDE2 EQU #30 +ASDRAM EQU #40 +FD1720 EQU #00 +FD1144 EQU #01 +FD1NONE EQU #02 +FD2720 EQU #00 +FD2144 EQU #04 +FD2NONE EQU #08 +HD1AUTO EQU #00 +HD1STP EQU #01 +HD1NONE EQU #02 +HD2AUTO EQU #00 +HD2STP EQU #04 +HD2NONE EQU #08 +TURBOFF EQU #06 +TURBON EQU #07 +SPRIN EQU #00 +SCORP EQU #08 +PENT EQU #10 +USER EQU #18 +BAS128 EQU #00 +BAS48_ EQU #01 +TRD128 EQU #02 +EXPN EQU #03 +TRD48 EQU #04 +BAS48 EQU #05 +REBOOTM EQU #02 +HDDWP EQU #01 +;-----------------------------------------------------------------------; + +STYLES: +; Color Style 0 + DB COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE + DB COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.YELLOW + DB COLORS.CGA.PAPER.RED + COLORS.CGA.INK.WHITE + DB COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE +; Color Style 1 + DB COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.LGREEN + DB COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.LMAGENT + DB COLORS.CGA.PAPER.MAGENTA + COLORS.CGA.INK.WHITE + DB COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE +; Color Style 2 + DB COLORS.CGA.PAPER.GREEN + COLORS.CGA.INK.LCYAN + DB COLORS.CGA.PAPER.GREEN + COLORS.CGA.INK.YELLOW + DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.BLACK + DB COLORS.CGA.PAPER.GREEN + COLORS.CGA.INK.BLACK +; Color Style 3 + DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.BLACK + DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.YELLOW + DB COLORS.CGA.PAPER.GREEN + COLORS.CGA.INK.BLACK + DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.LGREEN +; Color Style 4 + DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.WHITE + DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.BLACK + DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.BLUE + DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.YELLOW +; Color Style 5 + DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.BLACK + DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.BROWN + DB COLORS.CGA.PAPER.BROWN + COLORS.CGA.INK.LGRAY + DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.WHITE +; Color Style 6 + DB COLORS.CGA.PAPER.RED + COLORS.CGA.INK.YELLOW + DB COLORS.CGA.PAPER.RED + COLORS.CGA.INK.WHITE + DB COLORS.CGA.PAPER.BLACK + COLORS.CGA.INK.GREEN + DB COLORS.CGA.PAPER.RED + COLORS.CGA.INK.GREEN +; Color Style 7 + DB COLORS.CGA.PAPER.RED + COLORS.CGA.INK.LGRAY + DB COLORS.CGA.PAPER.RED + COLORS.CGA.INK.WHITE + DB COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE + DB COLORS.CGA.PAPER.RED + COLORS.CGA.INK.WHITE +; Color Style 8 + DB COLORS.CGA.PAPER.MAGENTA + COLORS.CGA.INK.LCYAN + DB COLORS.CGA.PAPER.MAGENTA + COLORS.CGA.INK.LGREEN + DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.BLACK + DB COLORS.CGA.PAPER.MAGENTA + COLORS.CGA.INK.WHITE +; Color Style 9 + DB COLORS.CGA.PAPER.MAGENTA + COLORS.CGA.INK.WHITE + DB COLORS.CGA.PAPER.MAGENTA + COLORS.CGA.INK.YELLOW + DB COLORS.CGA.PAPER.GREEN + COLORS.CGA.INK.BLUE + DB COLORS.CGA.PAPER.MAGENTA + COLORS.CGA.INK.LRED +; Color Style 10 + DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.BLACK + DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.RED + DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.WHITE + DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.WHITE +; Color Style 11 + DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.BLUE + DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.YELLOW + DB COLORS.CGA.PAPER.MAGENTA + COLORS.CGA.INK.WHITE + DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.WHITE +; Color Style 12 + DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.LGREEN + DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.LCYAN + DB COLORS.CGA.PAPER.GREEN + COLORS.CGA.INK.WHITE + DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.WHITE +; Color Style 13 + DB COLORS.CGA.PAPER.BLACK + COLORS.CGA.INK.LGREEN + DB COLORS.CGA.PAPER.BLACK + COLORS.CGA.INK.LCYAN + DB COLORS.CGA.PAPER.CYAN + COLORS.CGA.INK.YELLOW + DB COLORS.CGA.PAPER.BLACK + COLORS.CGA.INK.YELLOW +; Color Style 14 (Mono) + DB COLORS.CGA.PAPER.BLACK + COLORS.CGA.INK.LGRAY + DB COLORS.CGA.PAPER.BLACK + COLORS.CGA.INK.WHITE + DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.BLACK + DB COLORS.CGA.PAPER.BLACK + COLORS.CGA.INK.LGRAY +; Color Style 15 + DB COLORS.CGA.PAPER.BLACK + COLORS.CGA.INK.LMAGENT + DB COLORS.CGA.PAPER.BLACK + COLORS.CGA.INK.LGREEN + DB COLORS.CGA.PAPER.LGRAY + COLORS.CGA.INK.RED + DB COLORS.CGA.PAPER.BLACK + COLORS.CGA.INK.RED + +DEFVAL: DB SAVERAM + SETBOOTSOUND + SDELAY1 ;#0E - OPTIONS + DB TDL250 + TRATE30 ;#0F - KEYBOARD + DB SDIDE1 + ASDFDD1 ;#10 - SYSTEM DISKS + DB FD1720 + FD2720+HD1AUTO+HD2AUTO ;#11 - FDD & Primary HDD's + DB 0 ;#12 - CYLINDERS LOW MASTER + DB 0 ;#13 - CYLINDERS HIGH MASTER + DB 0 ;#14 - HEADS MASTER + DB 0 ;#15 - SECTORS MASTER + DB 0 ;#16 - CYLINDERS LOW SLAVE + DB 0 ;#17 - CYLINDERS HIGH SLAVE + DB 0 ;#18 - HEADS SLAVE + DB 0 ;#19 - SECTORS SLAVE + DB 0 ;#1A - Int conf, Screen sync, COLOR STYLE + DB CNF_PORT.TURBO.ON + CNF_PORT.CNF_0 ;#1B - HARDARE CONF + DB BAS128 ;#1C - RESET MODE + DB REBOOTM + 4 ;#1D - REBOOT + LoadZXroms by ZX flag + DB 0 ;#1E - TRDOS + DB #77 ;#1F - SCREEN POSITION + DB HD1AUTO + HD2AUTO ;#20 - Secondary HDD's +.Size EQU $-DEFVAL + + +;!FIXIT ᯨ 祩 ᬥ饭 ⪮ ਢ易 #0E SETDEF + _mInfoALIGN 256,0 ; ࠢ #XX00 +CMOSARE: + DS 14 + ; + DB SAVERAM + SETBOOTSOUND + SDELAY1 ;#0E - OPTIONS + DB TDL250+TRATE30 ;#0F - KEYBOARD + DB SDIDE1 + ASDFDD1 ;#10 - SYSTEM DISKS + DB FD1720+FD2720+HD1AUTO+HD2AUTO ;#11 - FDD & HDD + DB 0 ;#12 - CYLINDERS LOW MASTER + DB 0 ;#13 - CYLINDERS HIGH MASTER + DB 0 ;#14 - HEADS MASTER + DB 0 ;#15 - SECTORS MASTER + DB 0 ;#16 - CYLINDERS LOW SLAVE + DB 0 ;#17 - CYLINDERS HIGH SLAVE + DB 0 ;#18 - HEADS SLAVE + DB 0 ;#19 - SECTORS SLAVE + DB 0 ;#1A - Int conf, Screen sync, COLOR STYLE + DB TURBON+SPRIN ;#1B - HARDARE CONF + DB BAS128 ;#1C - RESET MODE + DB REBOOTM ;#1D - REBOOT MSG, HDD W/P + DB %0000'0000 ;#1E - TRDOS + DB %0111'0111 ;#1F - SCREEN POSITION + DB HD1AUTO+HD2AUTO ;#20 - Secondary HDD's + DB %0000'0000 ;#21 + DB %0000'0000 ;#22 + DB %0000'0000 ;#23 + DB %0000'0000 ;#24 + DB %0000'0000 ;#25 + DB %0000'0000 ;#26 + DB %0000'0000 ;#27 + DB %0000'0000 ;#28 + DB %0000'0000 ;#29 + DB %0000'0000 ;#2A + DB %0000'0000 ;#2B + DB %0000'0000 ;#2C + DB %0000'0000 ;#2D + DB %0000'0000 ;#2E + DB %0000'0000 ;#2F + DB %0000'0000 ;#30 + DB %0000'0000 ;#31 + DB #20 ;#32 - CENTURY + DB %0000'0000 ;#33 + DB %0000'0000 ;#34 + DB %0000'0000 ;#35 + DB %0000'0000 ;#36 + DB %0000'0000 ;#37 + DB %0000'0000 ;#38 + DB %0000'0000 ;#39 + DB %0000'0000 ;#3A + DB %0000'0000 ;#3B + DB %0000'0000 ;#3C + DB %0000'0000 ;#3D + DB %0000'0000 ;#3E + DB %0000'0000 ;#3F - CHECKSUM + BLOCK #100 - low $ ; CMOSARE ࠧ 256 ⮢ +;DONT MOVE !!! ADDRESS ; \ No newline at end of file diff --git a/src/bios/rom/SETUP/VIDEO_IO.asm b/bios/rom/SETUP/VIDEO_IO.asm similarity index 94% rename from src/bios/rom/SETUP/VIDEO_IO.asm rename to bios/rom/SETUP/VIDEO_IO.asm index 571f1fe..f334966 100644 --- a/src/bios/rom/SETUP/VIDEO_IO.asm +++ b/bios/rom/SETUP/VIDEO_IO.asm @@ -1,657 +1,657 @@ - -def_pal_mask EQU #FF -PIC_SET_PAL_FF EQU def_pal_mask*256+BIOS.PIC_SET_PAL - -;; -ScreenPOS: -.SUBNAME: - CALL LP_GET_PLACE - LD E,.SUBNAME.POS ;!HARDCODE autodetected hdd/cdrom info - JP LP_SET_PLACE -.SUBNAME.POS EQU 37 - ; -.CRLF: CALL LP_GET_PLACE - INC D - LD E,#00 - JP LP_SET_PLACE -;; - - -;======================================================================= -; 2 - ய᪠ ஡ - ⮪ -; PRINT_STR_BIG_ENDIAN: -; LD A,(HL) -; CP ' ' -; JR NZ,.PRINTDW -; INC HL -; LD A,(HL) -; DEC HL -; CP ' ' -; JR NZ,.PRINTDW -; INC HL -; INC HL -; .no_space: DJNZ DWPRINT -; RET -; ; -; .PRINTDW: PUSH BC -; LD E,(HL) -; INC HL -; LD A,(HL) -; INC HL -; CALL PRINT_CHAR -; LD A,E -; CALL PRINT_CHAR -; POP BC -; LD A,' ' -; CP E -; JR Z,.no_space -; DJNZ .PRINTDW -; RET -;======================================================================= -; 0 - 祩 ய᪮ ஡ - 1,5 ࠧ ॥ ⮪ ࠥ । ப -; PRINT_STR_BIG_ENDIAN: -; PUSH HL -; PUSH BC -; LD D,H -; LD E,L -; INC HL -; ; -; .loop_ch: LD A,(DE) -; LDI -; LD (DE),A -; INC HL -; INC DE -; DJNZ .loop_ch -; ; -; POP BC -; POP HL -; LD A,B -; ADD A,B -; LD B,A -; ; -; .print_loop: CALL .no_space -; RET Z -; LD D,H -; LD E,L -; PUSH DE -; PUSH BC -; LD D,' ' -; CALL LP_PRINT_LINE6 -; POP BC -; POP DE -; PUSH HL -; AND A -; SBC HL,DE -; LD A,B -; SUB L -; LD B,A -; JR Z,.exit -; LD A,' ' -; INC B -; PUSH BC -; CALL PRINT_CHAR -; POP BC -; POP HL -; DJNZ .print_loop -; RET -; ; -; .no_space: LD A,(HL) -; CP ' ' -; RET NZ -; INC HL -; DJNZ .no_space -; RET -; ; -; .exit: POP HL -; RET -;======================================================================= -; 1 - 祩 ய᪠ ஡ - 3 ࠧ ॥ ⮪ -; PRINT_STR_BIG_ENDIAN: -; ;PUSH HL -; PUSH BC -; LD D,H -; LD E,L -; INC HL -; ; -; .loop_ch: LD A,(DE) -; LDI -; LD (DE),A -; INC HL -; INC DE -; DJNZ .loop_ch -; ; -; POP BC -; ;POP HL -; ;LD A,B -; ;ADD A,B -; ;PUSH HL -; ;CALL CONFIGURE_IDE_DRIVES.COPY_IDE_NAME_TO_SYS_PAGE -; ;POP HL -; JP LP_PRINT_LINE2 -;======================================================================= - - -PRINTA: LD E,A - JP LP_PRINT_ATR -; -PRINT_CHAR: LD B,1 - JP LP_PRINT_SYM -; - -;TPRINTZ: CALL LP_SET_PLACE -PRINTZ: LD B,0 - LD D,B - JP LP_PRINT_LINE6 -; - -; HPRINTZ: LD B,0 -; LD D,B -; LD E,COLORS.CGA.INK.WHITE -; JP LP_PRINT_LINE5 - -CPRINTZ: LD B,0 - LD D,B - LD E,A - JP LP_PRINT_LINE5 -; - -IPRINT: LD D,0 -.I: LD BC,10000 - CALL PRINTDG - LD BC,1000 - CALL PRINTDG - LD BC,100 - CALL PRINTDG - LD BC,10 - CALL PRINTDG - LD A,L - ADD A,#30 - JP PRINT_CHAR - ;HL - NUMBER -.Z: LD D,1 - JR .I - -PRINTDG: - LD A,#2F -PDG1: INC A - SBC HL,BC - JR NC,PDG1 - ADD HL,BC - BIT 0,D - JR NZ,PDG2 - CP #30 - RET Z - SET 0,D -PDG2: PUSH BC - CALL PRINT_CHAR - POP BC - RET - -; D - Y -; E - X -; H - CY -TLINEV: - ;CALL ScreenPOS.LOCAT - CALL LP_SET_PLACE - LD A,(ElementsBuffer.UpCenter) - CALL PRSYM - DEC H - DEC H - -.loop: INC D - ;CALL ScreenPOS.LOCAT - CALL LP_SET_PLACE - LD A,(ElementsBuffer.VerticalLine) - CALL PRSYM - DEC H - JR NZ,.loop - - INC D - ;CALL ScreenPOS.LOCAT - CALL LP_SET_PLACE - LD A,(ElementsBuffer.DownCenter) - JP PRSYM - -; D - Y -; E - X -; L - CX -TLINEH: - ;CALL ScreenPOS.LOCAT - CALL LP_SET_PLACE - LD A,(ElementsBuffer.LeftCenter) - CALL PRSYM - DEC L - DEC L - LD A,(ElementsBuffer.HorizontalLine) - LD B,L - - ;CALL PRSYMB - CALL LP_PRINT_SYM - - - LD A,(ElementsBuffer.RightCenter) - JP PRSYM - -; D - Y -; E - X -; B - CY -; C - CX -PBORDER: PUSH BC - LD A,C - DEC A - LD (.BSHI),A - DEC A - LD (.BHOR),A - LD (.BHOR2),A - CALL LP_SET_PLACE - LD A,(ElementsBuffer.UpLeft) - LD H,E - CALL PRSYM - LD A,(ElementsBuffer.HorizontalLine) -.BHOR+1: LD B,1 - CALL LP_PRINT_SYM - - LD A,(ElementsBuffer.UpRight) - CALL PRSYM - POP BC - DEC B - DEC B - INC D - LD E,H - -.loop: PUSH BC - CALL LP_SET_PLACE - LD A,(ElementsBuffer.VerticalLine) - CALL PRSYM - LD A,H -.BSHI+1: ADD A,#00 - LD E,A - CALL LP_SET_PLACE - LD A,(ElementsBuffer.VerticalLine) - CALL PRSYM - POP BC - LD E,H - INC D - DJNZ .loop - - CALL LP_SET_PLACE - LD A,(ElementsBuffer.DownLeft) - CALL PRSYM - LD A,(ElementsBuffer.HorizontalLine) -.BHOR2+1: LD B,1 - CALL LP_PRINT_SYM - LD A,(ElementsBuffer.DownRight) - CALL PRSYM - RET - -PRSYM: LD B,1 - JP LP_PRINT_SYM - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -//////////////////// LOGO \\\\\\\\\\\\\\\\\\\\ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -LOGOTYPE: CALL SHOW_LOGO - ; - IF STARTUP_SND -.playSnd+1: LD A,#80 - RLA - JR NC,.noSound - ; - LD BC,CMOS_CELL.BootUpParams.Mask.BootSound - CALL GET_CMOS_VALUE - OR A - JR Z,.noSound - LD A,#37 ; opcode SCF, play sound on - LD (INT_HANDLER.sndSwitch),A -.noSound: ; - ENDIF - ; - LD BC,CMOS_CELL.BootUpParams.Mask.StartDelay - CALL GET_CMOS_VALUE - OR A - JR Z,.MinDelay - DEC A - JR Z,.AverageDelay - ; Delay enabled - LD B,LOGO_DELAY_NORM -.loop EI - push bc - HALT - CALL go_setup - pop bc - DJNZ .loop - ; Delay average -.AverageDelay: LD B,LOGO_DELAY_MAX -.MMA: PUSH BC - EI - HALT - DI - CALL FADE - POP BC - DJNZ .MMA - ; ; -.ERASE_LOGO: LD IX,win_descriptor.tab80x32 - ;LD HL,#0000 - ;LD E,1 - ; - EI - HALT - DI - CALL WIN_OPEN.SCR1 - ; - IF STARTUP_SND - LD A,#3F ; opcode CCF, play sound off - LD (INT_HANDLER.sndSwitch),A - CALL STARTUP_SOUND.mute - ENDIF - ; - LD DE,0 - LD HL,#0920 ;!HARDCODE LOGOTYPE SIZE - LD B,7 - JP LP_CLS_WIN - ; Delay disabled -.MinDelay: LD B,LOGO_DELAY_MIN -.loop2: EI - HALT - DJNZ .loop2 - DI - JR .ERASE_LOGO -; ; ; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -SHOW_LOGO: LD IX,win_descriptor.tab320x256 - CALL WIN_OPEN.SCR1 - - SAFE_PORTY - - DI - LD A,SYS_PORT.PAGE0 - OUT (SYS_PORT.ON),A - OUT (ROM.SLOT0),A - - LD HL,MAIN_LOGO.Pallete - LD DE,memBUFFER.Shared - LD BC,MAIN_LOGO.Pallete.length - LDIR - - XOR A - OUT (ROM.SLOT0),A - OUT (SYS_PORT.ON),A - EI - - LD HL,memBUFFER.Shared - ; A = 0 - LD D,A ; SET DESKTOP PALETTE & CURSOR COLORS - LD E,A - LD B,def_pal_mask - CALL PIC_SET_PAL - - SAFE_PORTY - - DI - LD A,SYS_PORT.PAGE0 - OUT (SYS_PORT.ON),A - OUT (ROM.SLOT0),A - LD HL,MAIN_LOGO.Raster ; 砫 ⨭ - ; CALL DECODE - CALL LOGO_TO_SCREEN - XOR A - OUT (SYS_PORT.ON),A - OUT (ROM.SLOT0),A - EI - RET -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -win_descriptor: -.tab80x32 Window_UserVars{ - 40, ; ਧ⠫ ࠧ - 32, ; ⨪ ࠧ - 0, ; ਧ⠫ ࠭ - 0, ; ⨪ ࠭ - %0001'1011, ; ० - 0, ; ⥫ ० - 0, ; X 䨪 ( ⠬) - 0 ; Y 䨪 ( ⠬) - } -.tab320x256 Window_UserVars{ - 16, ; ਧ⠫ ࠧ - 9, ; ⨪ ࠧ - 0, ; ਧ⠫ ࠭ - 0, ; ⨪ ࠭ - %0010'0000, ; ० - 0, ; ⥫ ० - 8, ; X 䨪 ( ⠬) - 0 ; Y 䨪 ( ⠬) - } -; - - MACRO _mFADE - LD HL,memBUFFER.Shared - ; A = 0 - LD B,A -.loop: DUP 3 - CP (HL) - JR Z,1F - DEC (HL) -1: INC HL - EDUP - INC HL - DJNZ .loop - ENDM - - -FADE: XOR A - _mFADE - _mFADE - ; A = 0 - LD HL,memBUFFER.Shared - ; LD DE,#0000 - LD D,A - LD E,A - ; - LD B,def_pal_mask - CALL PIC_SET_PAL - - SAFE_PORTY - -go_setup: ; !FIXIT । TSETUP - CALL SCANKEY - RET Z - - CP #1B - JP Z,.to_EXIT_SETUP - - LD HL,#4F00 - AND A - SBC HL,DE - jr nz,go_setup - - LD IX,win_descriptor.tab80x32 - CALL WIN_OPEN.SCR1 - JP ENTER_SETUP - -.to_EXIT_SETUP: - LD HL,(RET_TO_EXP_ADDR) - PUSH HL - JP EXIT_SETUP - -;DECODE: -LOGO_TO_SCREEN: - PUSH HL - IN A,(SLOT1) - LD H,A - IN A,(PORT_Y) - LD L,A - EX (SP),HL - - LD A,#50 - OUT (SLOT1),A - LD A,72 ; !HARDCODE न ⨭ Y + ⨭ -.loop: - DEC A - OUT (PORT_Y),A - LD DE,#4040 ; !HARDCODE न ⨭ - LD BC,128 ; !HARDCODE ਧ⠫쭮 ⨭ - LDIR - OR A - JP NZ,.loop - - POP BC - LD A,B - OUT (SLOT1),A - LD A,C - OUT (PORT_Y),A - XOR A - RET - - ; IF !ROM_LOGO_TEST - ; LOGPAL: ; palitre for logotype - ; IF TEST_Build - ; INCBIN './test/test2_pal.bin' - ; ELSE - ; INCBIN './original/logo_pal.bin' - ; ENDIF - ; - ; IF ($-LOGPAL) < 1024 - ; BLOCK +(1024-($-LOGPAL)),0 - ; ENDIF - ; ENDIF - -; Original hardcoded pallete for Peters logotype - ; B G R - ; DB #FF,#FF,#FF,#00 - ; DB #8C,#A5,#A5,#00 - ; DB #42,#EF,#EF,#00 - ; DB #DE,#CE,#C6,#00 - ; DB #84,#39,#39,#00 - ; DB #CE,#8C,#84,#00 - ; DB #A5,#39,#31,#00 - ; DB #84,#7B,#7B,#00 - ; DB #63,#5A,#5A,#00 - ; DB #BD,#39,#39,#00 - ; DB #84,#08,#08,#00 - ; DB #AD,#08,#08,#00 - ; DB #18,#00,#00,#00 - ; DB #63,#08,#10,#00 - ; DB #94,#08,#18,#00 - ; DB #00,#00,#00,#00 - - ; PALCOL: - ; ; B G R - ; DB #FF,#FF,#FF,#00 - ; DB #8C,#BD,#BD,#80 - ; DB #BD,#CE,#BD,#00 - ; DB #EF,#CE,#BD,#00 - ; DB #BC,#73,#73,#00 - ; DB #9C,#63,#63,#00 - ; DB #DE,#8C,#8C,#00 - ; DB #8C,#52,#52,#00 - ; DB #BD,#63,#63,#00 - ; DB #52,#10,#10,#00 - ; DB #21,#00,#00,#00 - ; DB #8C,#00,#00,#00 - ; DB #AD,#00,#00,#00 - ; DB #AD,#10,#21,#00 - ; DB #8C,#00,#10,#00 - ; DB #00,#00,#00,#00 - - - -SET_CGA: - ; LD A,4 - ; LD B,3 - ; CALL SET_PAL_INIT - ; LD A,5 - ; LD B,3 - ; CALL SET_PAL_INIT - ; LD A,6 - ; LD B,3 - ; CALL SET_PAL_INIT - ; LD A,7 - ; LD B,3 - ; CALL SET_PAL_INIT - ; RET - - CALL SETPAL4 - LD A,4 ; page_pal - LD HL,memBUFFER.Shared - LD DE,#0000 ; D - ELEMENTS,E - COLOR - LD B,def_pal_mask - CALL PIC_SET_PAL - - LD A,6 ; page_pal - LD HL,memBUFFER.Shared - LD DE,#0000 ;D - ELEMENTS,E - COLOR - LD B,def_pal_mask - CALL PIC_SET_PAL - - LD A,7 ; page_pal - LD HL,#80*4+memBUFFER.Shared - LD DE,#8080 ;D - ELEMENTS,E - COLOR - LD B,def_pal_mask - CALL PIC_SET_PAL - ; - - CALL SETPAL5 - LD A,5 ; page_pal - LD HL,memBUFFER.Shared - LD DE,#0000 ;D - ELEMENTS,E - COLOR - LD B,def_pal_mask - CALL PIC_SET_PAL - - LD A,7 ; page_pal - LD HL,memBUFFER.Shared - LD DE,#8000 ;D - ELEMENTS,E - COLOR - LD B,def_pal_mask - CALL PIC_SET_PAL - ; - -SETPAL4: - LD HL,COLORS.CGA.PALETTE - LD DE,memBUFFER.Shared - LD C,#08 - -.DCR0: LD B,COLORS.CGA.PALETTE.ColNum - PUSH HL - ; -.DCR1: POP HL - PUSH HL - PUSH BC - LDI - LDI - LDI - LDI - POP BC - DJNZ .DCR1 - ; - INC SP - INC SP - DEC C - JR NZ,.DCR0 - - LD HL,memBUFFER.Shared - LD BC,512 - LDIR - RET - -SETPAL5: - LD HL,COLORS.CGA.PALETTE - LD DE,memBUFFER.Shared - LD B,#08 -.DCR01: - PUSH BC - PUSH HL - LD BC,16*4 - LDIR - POP HL - POP BC - DJNZ .DCR01 - LD HL,memBUFFER.Shared - LD BC,512 - LDIR - RET - - include 'shared_includes/constants/standart_colors.inc' + +def_pal_mask EQU #FF +PIC_SET_PAL_FF EQU def_pal_mask*256+BIOS.PIC_SET_PAL + +;; +ScreenPOS: +.SUBNAME: + CALL LP_GET_PLACE + LD E,.SUBNAME.POS ;!HARDCODE autodetected hdd/cdrom info + JP LP_SET_PLACE +.SUBNAME.POS EQU 37 + ; +.CRLF: CALL LP_GET_PLACE + INC D + LD E,#00 + JP LP_SET_PLACE +;; + + +;======================================================================= +; 2 - ய᪠ ஡ - ⮪ +; PRINT_STR_BIG_ENDIAN: +; LD A,(HL) +; CP ' ' +; JR NZ,.PRINTDW +; INC HL +; LD A,(HL) +; DEC HL +; CP ' ' +; JR NZ,.PRINTDW +; INC HL +; INC HL +; .no_space: DJNZ DWPRINT +; RET +; ; +; .PRINTDW: PUSH BC +; LD E,(HL) +; INC HL +; LD A,(HL) +; INC HL +; CALL PRINT_CHAR +; LD A,E +; CALL PRINT_CHAR +; POP BC +; LD A,' ' +; CP E +; JR Z,.no_space +; DJNZ .PRINTDW +; RET +;======================================================================= +; 0 - 祩 ய᪮ ஡ - 1,5 ࠧ ॥ ⮪ ࠥ । ப +; PRINT_STR_BIG_ENDIAN: +; PUSH HL +; PUSH BC +; LD D,H +; LD E,L +; INC HL +; ; +; .loop_ch: LD A,(DE) +; LDI +; LD (DE),A +; INC HL +; INC DE +; DJNZ .loop_ch +; ; +; POP BC +; POP HL +; LD A,B +; ADD A,B +; LD B,A +; ; +; .print_loop: CALL .no_space +; RET Z +; LD D,H +; LD E,L +; PUSH DE +; PUSH BC +; LD D,' ' +; CALL LP_PRINT_LINE6 +; POP BC +; POP DE +; PUSH HL +; AND A +; SBC HL,DE +; LD A,B +; SUB L +; LD B,A +; JR Z,.exit +; LD A,' ' +; INC B +; PUSH BC +; CALL PRINT_CHAR +; POP BC +; POP HL +; DJNZ .print_loop +; RET +; ; +; .no_space: LD A,(HL) +; CP ' ' +; RET NZ +; INC HL +; DJNZ .no_space +; RET +; ; +; .exit: POP HL +; RET +;======================================================================= +; 1 - 祩 ய᪠ ஡ - 3 ࠧ ॥ ⮪ +; PRINT_STR_BIG_ENDIAN: +; ;PUSH HL +; PUSH BC +; LD D,H +; LD E,L +; INC HL +; ; +; .loop_ch: LD A,(DE) +; LDI +; LD (DE),A +; INC HL +; INC DE +; DJNZ .loop_ch +; ; +; POP BC +; ;POP HL +; ;LD A,B +; ;ADD A,B +; ;PUSH HL +; ;CALL CONFIGURE_IDE_DRIVES.COPY_IDE_NAME_TO_SYS_PAGE +; ;POP HL +; JP LP_PRINT_LINE2 +;======================================================================= + + +PRINTA: LD E,A + JP LP_PRINT_ATR +; +PRINT_CHAR: LD B,1 + JP LP_PRINT_SYM +; + +;TPRINTZ: CALL LP_SET_PLACE +PRINTZ: LD B,0 + LD D,B + JP LP_PRINT_LINE6 +; + +; HPRINTZ: LD B,0 +; LD D,B +; LD E,COLORS.CGA.INK.WHITE +; JP LP_PRINT_LINE5 + +CPRINTZ: LD B,0 + LD D,B + LD E,A + JP LP_PRINT_LINE5 +; + +IPRINT: LD D,0 +.I: LD BC,10000 + CALL PRINTDG + LD BC,1000 + CALL PRINTDG + LD BC,100 + CALL PRINTDG + LD BC,10 + CALL PRINTDG + LD A,L + ADD A,#30 + JP PRINT_CHAR + ;HL - NUMBER +.Z: LD D,1 + JR .I + +PRINTDG: + LD A,#2F +PDG1: INC A + SBC HL,BC + JR NC,PDG1 + ADD HL,BC + BIT 0,D + JR NZ,PDG2 + CP #30 + RET Z + SET 0,D +PDG2: PUSH BC + CALL PRINT_CHAR + POP BC + RET + +; D - Y +; E - X +; H - CY +TLINEV: + ;CALL ScreenPOS.LOCAT + CALL LP_SET_PLACE + LD A,(ElementsBuffer.UpCenter) + CALL PRSYM + DEC H + DEC H + +.loop: INC D + ;CALL ScreenPOS.LOCAT + CALL LP_SET_PLACE + LD A,(ElementsBuffer.VerticalLine) + CALL PRSYM + DEC H + JR NZ,.loop + + INC D + ;CALL ScreenPOS.LOCAT + CALL LP_SET_PLACE + LD A,(ElementsBuffer.DownCenter) + JP PRSYM + +; D - Y +; E - X +; L - CX +TLINEH: + ;CALL ScreenPOS.LOCAT + CALL LP_SET_PLACE + LD A,(ElementsBuffer.LeftCenter) + CALL PRSYM + DEC L + DEC L + LD A,(ElementsBuffer.HorizontalLine) + LD B,L + + ;CALL PRSYMB + CALL LP_PRINT_SYM + + + LD A,(ElementsBuffer.RightCenter) + JP PRSYM + +; D - Y +; E - X +; B - CY +; C - CX +PBORDER: PUSH BC + LD A,C + DEC A + LD (.BSHI),A + DEC A + LD (.BHOR),A + LD (.BHOR2),A + CALL LP_SET_PLACE + LD A,(ElementsBuffer.UpLeft) + LD H,E + CALL PRSYM + LD A,(ElementsBuffer.HorizontalLine) +.BHOR+1: LD B,1 + CALL LP_PRINT_SYM + + LD A,(ElementsBuffer.UpRight) + CALL PRSYM + POP BC + DEC B + DEC B + INC D + LD E,H + +.loop: PUSH BC + CALL LP_SET_PLACE + LD A,(ElementsBuffer.VerticalLine) + CALL PRSYM + LD A,H +.BSHI+1: ADD A,#00 + LD E,A + CALL LP_SET_PLACE + LD A,(ElementsBuffer.VerticalLine) + CALL PRSYM + POP BC + LD E,H + INC D + DJNZ .loop + + CALL LP_SET_PLACE + LD A,(ElementsBuffer.DownLeft) + CALL PRSYM + LD A,(ElementsBuffer.HorizontalLine) +.BHOR2+1: LD B,1 + CALL LP_PRINT_SYM + LD A,(ElementsBuffer.DownRight) + CALL PRSYM + RET + +PRSYM: LD B,1 + JP LP_PRINT_SYM + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +//////////////////// LOGO \\\\\\\\\\\\\\\\\\\\ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +LOGOTYPE: CALL SHOW_LOGO + ; + IF STARTUP_SND +.playSnd+1: LD A,#80 + RLA + JR NC,.noSound + ; + LD BC,CMOS_CELL.BootUpParams.Mask.BootSound + CALL GET_CMOS_VALUE + OR A + JR Z,.noSound + LD A,#37 ; opcode SCF, play sound on + LD (INT_HANDLER.sndSwitch),A +.noSound: ; + ENDIF + ; + LD BC,CMOS_CELL.BootUpParams.Mask.StartDelay + CALL GET_CMOS_VALUE + OR A + JR Z,.MinDelay + DEC A + JR Z,.AverageDelay + ; Delay enabled + LD B,LOGO_DELAY_NORM +.loop EI + push bc + HALT + CALL go_setup + pop bc + DJNZ .loop + ; Delay average +.AverageDelay: LD B,LOGO_DELAY_MAX +.MMA: PUSH BC + EI + HALT + DI + CALL FADE + POP BC + DJNZ .MMA + ; ; +.ERASE_LOGO: LD IX,win_descriptor.tab80x32 + ;LD HL,#0000 + ;LD E,1 + ; + EI + HALT + DI + CALL WIN_OPEN.SCR1 + ; + IF STARTUP_SND + LD A,#3F ; opcode CCF, play sound off + LD (INT_HANDLER.sndSwitch),A + CALL STARTUP_SOUND.mute + ENDIF + ; + LD DE,0 + LD HL,#0920 ;!HARDCODE LOGOTYPE SIZE + LD B,7 + JP LP_CLS_WIN + ; Delay disabled +.MinDelay: LD B,LOGO_DELAY_MIN +.loop2: EI + HALT + DJNZ .loop2 + DI + JR .ERASE_LOGO +; ; ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +SHOW_LOGO: LD IX,win_descriptor.tab320x256 + CALL WIN_OPEN.SCR1 + + SAFE_PORTY + + DI + LD A,SYS_PORT.PAGE0 + OUT (SYS_PORT.ON),A + OUT (ROM.SLOT0),A + + LD HL,MAIN_LOGO.Pallete + LD DE,memBUFFER.Shared + LD BC,MAIN_LOGO.Pallete.length + LDIR + + XOR A + OUT (ROM.SLOT0),A + OUT (SYS_PORT.ON),A + EI + + LD HL,memBUFFER.Shared + ; A = 0 + LD D,A ; SET DESKTOP PALETTE & CURSOR COLORS + LD E,A + LD B,def_pal_mask + CALL PIC_SET_PAL + + SAFE_PORTY + + DI + LD A,SYS_PORT.PAGE0 + OUT (SYS_PORT.ON),A + OUT (ROM.SLOT0),A + LD HL,MAIN_LOGO.Raster ; 砫 ⨭ + ; CALL DECODE + CALL LOGO_TO_SCREEN + XOR A + OUT (SYS_PORT.ON),A + OUT (ROM.SLOT0),A + EI + RET +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +win_descriptor: +.tab80x32 Window_UserVars{ + 40, ; ਧ⠫ ࠧ + 32, ; ⨪ ࠧ + 0, ; ਧ⠫ ࠭ + 0, ; ⨪ ࠭ + %0001'1011, ; ० + 0, ; ⥫ ० + 0, ; X 䨪 ( ⠬) + 0 ; Y 䨪 ( ⠬) + } +.tab320x256 Window_UserVars{ + 16, ; ਧ⠫ ࠧ + 9, ; ⨪ ࠧ + 0, ; ਧ⠫ ࠭ + 0, ; ⨪ ࠭ + %0010'0000, ; ० + 0, ; ⥫ ० + 8, ; X 䨪 ( ⠬) + 0 ; Y 䨪 ( ⠬) + } +; + + MACRO _mFADE + LD HL,memBUFFER.Shared + ; A = 0 + LD B,A +.loop: DUP 3 + CP (HL) + JR Z,1F + DEC (HL) +1: INC HL + EDUP + INC HL + DJNZ .loop + ENDM + + +FADE: XOR A + _mFADE + _mFADE + ; A = 0 + LD HL,memBUFFER.Shared + ; LD DE,#0000 + LD D,A + LD E,A + ; + LD B,def_pal_mask + CALL PIC_SET_PAL + + SAFE_PORTY + +go_setup: ; !FIXIT । TSETUP + CALL SCANKEY + RET Z + + CP #1B + JP Z,.to_EXIT_SETUP + + LD HL,#4F00 + AND A + SBC HL,DE + jr nz,go_setup + + LD IX,win_descriptor.tab80x32 + CALL WIN_OPEN.SCR1 + JP ENTER_SETUP + +.to_EXIT_SETUP: + LD HL,(RET_TO_EXP_ADDR) + PUSH HL + JP EXIT_SETUP + +;DECODE: +LOGO_TO_SCREEN: + PUSH HL + IN A,(SLOT1) + LD H,A + IN A,(PORT_Y) + LD L,A + EX (SP),HL + + LD A,#50 + OUT (SLOT1),A + LD A,72 ; !HARDCODE न ⨭ Y + ⨭ +.loop: + DEC A + OUT (PORT_Y),A + LD DE,#4040 ; !HARDCODE न ⨭ + LD BC,128 ; !HARDCODE ਧ⠫쭮 ⨭ + LDIR + OR A + JP NZ,.loop + + POP BC + LD A,B + OUT (SLOT1),A + LD A,C + OUT (PORT_Y),A + XOR A + RET + + ; IF !ROM_LOGO_TEST + ; LOGPAL: ; palitre for logotype + ; IF TEST_Build + ; INCBIN './test/test2_pal.bin' + ; ELSE + ; INCBIN './original/logo_pal.bin' + ; ENDIF + ; + ; IF ($-LOGPAL) < 1024 + ; BLOCK +(1024-($-LOGPAL)),0 + ; ENDIF + ; ENDIF + +; Original hardcoded pallete for Peters logotype + ; B G R + ; DB #FF,#FF,#FF,#00 + ; DB #8C,#A5,#A5,#00 + ; DB #42,#EF,#EF,#00 + ; DB #DE,#CE,#C6,#00 + ; DB #84,#39,#39,#00 + ; DB #CE,#8C,#84,#00 + ; DB #A5,#39,#31,#00 + ; DB #84,#7B,#7B,#00 + ; DB #63,#5A,#5A,#00 + ; DB #BD,#39,#39,#00 + ; DB #84,#08,#08,#00 + ; DB #AD,#08,#08,#00 + ; DB #18,#00,#00,#00 + ; DB #63,#08,#10,#00 + ; DB #94,#08,#18,#00 + ; DB #00,#00,#00,#00 + + ; PALCOL: + ; ; B G R + ; DB #FF,#FF,#FF,#00 + ; DB #8C,#BD,#BD,#80 + ; DB #BD,#CE,#BD,#00 + ; DB #EF,#CE,#BD,#00 + ; DB #BC,#73,#73,#00 + ; DB #9C,#63,#63,#00 + ; DB #DE,#8C,#8C,#00 + ; DB #8C,#52,#52,#00 + ; DB #BD,#63,#63,#00 + ; DB #52,#10,#10,#00 + ; DB #21,#00,#00,#00 + ; DB #8C,#00,#00,#00 + ; DB #AD,#00,#00,#00 + ; DB #AD,#10,#21,#00 + ; DB #8C,#00,#10,#00 + ; DB #00,#00,#00,#00 + + + +SET_CGA: + ; LD A,4 + ; LD B,3 + ; CALL SET_PAL_INIT + ; LD A,5 + ; LD B,3 + ; CALL SET_PAL_INIT + ; LD A,6 + ; LD B,3 + ; CALL SET_PAL_INIT + ; LD A,7 + ; LD B,3 + ; CALL SET_PAL_INIT + ; RET + + CALL SETPAL4 + LD A,4 ; page_pal + LD HL,memBUFFER.Shared + LD DE,#0000 ; D - ELEMENTS,E - COLOR + LD B,def_pal_mask + CALL PIC_SET_PAL + + LD A,6 ; page_pal + LD HL,memBUFFER.Shared + LD DE,#0000 ;D - ELEMENTS,E - COLOR + LD B,def_pal_mask + CALL PIC_SET_PAL + + LD A,7 ; page_pal + LD HL,#80*4+memBUFFER.Shared + LD DE,#8080 ;D - ELEMENTS,E - COLOR + LD B,def_pal_mask + CALL PIC_SET_PAL + ; + + CALL SETPAL5 + LD A,5 ; page_pal + LD HL,memBUFFER.Shared + LD DE,#0000 ;D - ELEMENTS,E - COLOR + LD B,def_pal_mask + CALL PIC_SET_PAL + + LD A,7 ; page_pal + LD HL,memBUFFER.Shared + LD DE,#8000 ;D - ELEMENTS,E - COLOR + LD B,def_pal_mask + CALL PIC_SET_PAL + ; + +SETPAL4: + LD HL,COLORS.CGA.PALETTE + LD DE,memBUFFER.Shared + LD C,#08 + +.DCR0: LD B,COLORS.CGA.PALETTE.ColNum + PUSH HL + ; +.DCR1: POP HL + PUSH HL + PUSH BC + LDI + LDI + LDI + LDI + POP BC + DJNZ .DCR1 + ; + INC SP + INC SP + DEC C + JR NZ,.DCR0 + + LD HL,memBUFFER.Shared + LD BC,512 + LDIR + RET + +SETPAL5: + LD HL,COLORS.CGA.PALETTE + LD DE,memBUFFER.Shared + LD B,#08 +.DCR01: + PUSH BC + PUSH HL + LD BC,16*4 + LDIR + POP HL + POP BC + DJNZ .DCR01 + LD HL,memBUFFER.Shared + LD BC,512 + LDIR + RET + + include 'shared_includes/constants/standart_colors.inc' ; \ No newline at end of file diff --git a/src/bios/rom/SETUP/messages.z80 b/bios/rom/SETUP/messages.z80 similarity index 97% rename from src/bios/rom/SETUP/messages.z80 rename to bios/rom/SETUP/messages.z80 index 57a80ef..0310678 100644 --- a/src/bios/rom/SETUP/messages.z80 +++ b/bios/rom/SETUP/messages.z80 @@ -1,929 +1,929 @@ - -; OnChangeAction: -; .setLang EQU 1 -; .nothing EQU 2 -; .setXYpos EQU 3 -; .setInt EQU 4 -; .setVsinc EQU 5 - - LUA ALLPASS - function get_key_for_value(t, value) - for column=1,2 do - for line,name in pairs(t[column]) do - if name==value then return column,line end - end - end - return nil - end - - function DeleteValueByDEFINE (t,zero_def,value) - if tonumber(sj.get_define(zero_def)) then - local delCol, delLine = get_key_for_value(t, value) - table.remove (t[delCol], delLine) - end - end - ENDLUA - - LUA PASS1 - SettingsTabsOrder = { - [1]={ - "Lang", -- 1 - "SaveRAMdrvs", -- 2 - "StartDelay", -- 3 - "RebootMsg", -- 4 - "SysDsk", -- 5 - "AltSysDsk", -- 6 - "FddFirst", -- 7 - "FddSecond", -- 8 - "PriIdeMA", -- 9 - "PriIdeSl", -- 10 - "SecIdeMA", -- 11 - "SecIdeSl", -- 12 - "ScreenY", -- 13 - "ScreenX", -- 14 - "FrameInt", -- 15 - "VSync", -- 16 - "QuickStartROM", -- 17 - "MemTest", -- DEFINES.INC --> UnusedSettingsFeatures - "UpdBios", -- DEFINES.INC --> UnusedSettingsFeatures - "TypRate", -- DEFINES.INC --> UnusedSettingsFeatures - "TypDelay", -- DEFINES.INC --> UnusedSettingsFeatures - }, - [2]={ - "PlayStartUpSound", -- 1 - "LoadZXroms", -- 2 - "QS_SetUpHardware", -- 3 - "QS_SetUpZxRom", -- 4 - "TrDosA", -- 5 - "TrDosB", -- 6 - "TrDosC", -- 7 - "TrDosD", -- 8 - "SetTime", -- 9 DEFINES.INC --> NEW_FEATUREDEFINES.INC --> HDDwriteProtect - --"HddWrPr", -- 10 DEFINES.INC --> HDDwriteProtect - -- 11 - -- 12 - -- 13 - -- 14 - -- 15 - -- 16 - -- 17 - } - } - DeleteValueByDEFINE(SettingsTabsOrder,"NEW_FEATURE","SetTime") - --DeleteValueByDEFINE(SettingsTabsOrder,"HDDwriteProtect","HddWrPr") - DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","MemTest") - DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","UpdBios") - DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","TypRate") - DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","TypDelay") - -- DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","") - -- DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","") - ENDLUA -; - -; - MACRO _mSETitemParams itemName? -@.itemName? EQU $ - DEFINE TmpDef itemName? - LUA ALLPASS - local tmpName = sj.get_define("TmpDef") - local column,line = get_key_for_value(SettingsTabsOrder, tmpName) - if (column == nil or line == nil) then sj.error("Settings Tab not found",tmpName) end - if column == 1 then column = _c("firstColumn") else column = _c("secondColumn") end - sj.insert_define("columnNum", column) - sj.insert_define("lineNum", (_c("firstLine")+line-1)) - sj.insert_define("paramName", "msgStrings.par" .. tmpName) - ENDLUA - UNDEFINE TmpDef - ENDM -; - - MACRO _mCreateSettingsItemsTabsAddrs - LUA ALLPASS - for i = 1, #SettingsTabsOrder do - for j = 1, #SettingsTabsOrder[i] do - _pc("DW " .. _c("SettingsItemsTabs." .. SettingsTabsOrder[i][j])) - end - end - ENDLUA - -; ᮧ ⠪ : -; DW SettingsItemsTabs.FirstItem -; DW .. -; DW SettingsItemsTabs.LastItem - ENDM - - MACRO _mCreateMsgAddrTable ; !FIXIT ࠬ "msgRusStrings.msg_", ᠬ । - LUA ALLPASS - for i = 0, _c("tmp_Counter")-1, 1 do - _pc("WORD " .. "msgRusStrings.msg_" .. i) - end - ENDLUA - -; ᮧ ⠪ : -; WORD msgRusStrings.msg_0 -; .. -; WORD msgRusStrings.msg_XX ; XX = tmp_Counter - ENDM - -;----------------------------[Settings items table]----------------------------[v] - -; - IF NEW_FEATURE -; New structure for procedure with IY reg - STRUCT MenusItem -Action WORD -Type BYTE -Column BYTE -Line BYTE -Name BYTE -CMOSreg BYTE -ValueMask BYTE -ValueMax BYTE -FirstString BYTE - ENDS - -paramLine EQU 0 -folderLine EQU 1 - - ENDIF -; - -firstColumn EQU 03 ; ᬥ饭 X ࢮ ⮫ -secondColumn EQU 43 ; ᬥ饭 X ண ⮫ -firstLine EQU 07 ; ᬥ饭 Y ࢮ ப - -SettingsItemsTabs: - - _mSETitemParams Lang - DW OnChangeAction.setLang ; ⢨ - IF NEW_FEATURE : DB paramLine : ENDIF ; ⨯ ࠬ (ப 祭 ⠫) - DB columnNum,lineNum ; ⮫, ப - DB paramName ; ࠬ - DW CMOS_CELL.BootUpParams.Mask.Language : DB %0000'0100 ; CMOS : MASK - DB msgStrings.valLangEng ; 1- ਠ ࠬ - DB msgStrings.valLangRus ; 2- ਠ ࠬ - - - IF UnusedSettingsFeatures ; !TODO - _mSETitemParams MemTest - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.BootUpParams.Mask.MemTest : DB %1000'0000 - DB msgStrings.valDisabled - DB msgStrings.valEnabled - ENDIF - - _mSETitemParams SaveRAMdrvs - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.BootUpParams.Mask.SaveRAMdisks : DB %0100'0000 - DB msgStrings.valDisabled - DB msgStrings.valEnabled - - IF UnusedSettingsFeatures ; !TODO - _mSETitemParams UpdBios - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.BootUpParams.Mask.UpdBios : DB %0010'0000 - DB msgStrings.valDisabled - DB msgStrings.valEnabled - ENDIF - - _mSETitemParams StartDelay - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.BootUpParams.Mask.StartDelay : DB %0001'0000 - DB msgStrings.valDisabled - DB msgStrings.valShort - DB msgStrings.valLong - - IF UnusedSettingsFeatures ; !TODO - _mSETitemParams TypRate - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.Typematic.Mask.Rate : DB %0000'0111 - DB msgStrings.val_6 - DB msgStrings.val_8 - DB msgStrings.val_10 - DB msgStrings.val_12 - DB msgStrings.val_15 - DB msgStrings.val_20 - DB msgStrings.val_24 - DB msgStrings.val_30 - ENDIF - - IF UnusedSettingsFeatures ; !TODO - _mSETitemParams TypDelay - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.Typematic.Mask.Delay : DB %0110'0000 - DB msgStrings.val_250 - DB msgStrings.val_500 - DB msgStrings.val_750 - DB msgStrings.val_1000 - ENDIF - - _mSETitemParams RebootMsg - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.Options.Mask.RebootMSG : DB %0000'0010 - DB msgStrings.valDisabled - DB msgStrings.valEnabled - - _mSETitemParams SysDsk - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.BootDrives.Mask.SysDisk : DB %0000'0111 - DB msgStrings.val1stFDD - DB msgStrings.val2ndFDD - DB msgStrings.val1stIDE - DB msgStrings.val2ndIDE - DB msgStrings.val3rdIDE - DB msgStrings.val4thIDE - DB msgStrings.valRamDsk - DB msgStrings.valRecovery - - _mSETitemParams AltSysDsk - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.BootDrives.Mask.AltSysDisk : DB %0111'0000 - DB msgStrings.val1stFDD - DB msgStrings.val2ndFDD - DB msgStrings.val1stIDE - DB msgStrings.val2ndIDE - DB msgStrings.val3rdIDE - DB msgStrings.val4thIDE - DB msgStrings.valRamDsk - DB msgStrings.valRecovery - - _mSETitemParams FddFirst - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.DrivesSetup_1.Mask.FirstFDD : DB %0000'0010 - DB msgStrings.val35 - DB msgStrings.val525 - DB msgStrings.valDash6 - ; DB msgStrings.valAuto - ; DB msgStrings.val720 - ; DB msgStrings.val1440 - ; DB msgStrings.val1200 - - _mSETitemParams FddSecond - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.DrivesSetup_1.Mask.SecondFDD : DB %0000'1000 - DB msgStrings.val35 - DB msgStrings.val525 - DB msgStrings.valDash6 - ; DB msgStrings.valAuto - ; DB msgStrings.val720 - ; DB msgStrings.val1440 - ; DB msgStrings.val1200 - - _mSETitemParams PriIdeMA - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.DrivesSetup_1.Mask.PriIDEmaster : DB %0011'0000 - DB msgStrings.valAuto - DB msgStrings.valSetup - DB msgStrings.valCdRom - DB msgStrings.valDash6 - - _mSETitemParams PriIdeSl - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.DrivesSetup_1.Mask.PriIDEslave : DB %1100'0000 - DB msgStrings.valAuto - DB msgStrings.valSetup - DB msgStrings.valCdRom - DB msgStrings.valDash6 - - _mSETitemParams SecIdeMA - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.DrivesSetup_2.Mask.SecIDEmaster : DB %0011'0000 - DB msgStrings.valAuto - DB msgStrings.valSetup - DB msgStrings.valCdRom - DB msgStrings.valDash6 - - _mSETitemParams SecIdeSl - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.DrivesSetup_2.Mask.SecIDEslave : DB %1100'0000 - DB msgStrings.valAuto - DB msgStrings.valSetup - DB msgStrings.valCdRom - DB msgStrings.valDash6 - - ; IF HDDwriteProtect - ; _mSETitemParams HddWrPr - ; DW OnChangeAction.nothing - ; IF NEW_FEATURE : DB paramLine : ENDIF - ; DB columnNum,lineNum - ; DB paramName - ; DW CMOS_CELL.Options.Mask.HDDwriteProtect : DB %0000'0001 - ; DB msgStrings.valDisabled - ; DB msgStrings.valEnabled - ; ENDIF - - _mSETitemParams ScreenY - DW OnChangeAction.setXYpos - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.ScreenPosition.Mask.X : DB %1110'0000 - DB msgStrings.valMinus7 - DB msgStrings.valMinus6 - DB msgStrings.valMinus5 - DB msgStrings.valMinus4 - DB msgStrings.valMinus3 - DB msgStrings.valMinus2 - DB msgStrings.valMinus1 - DB msgStrings.val_0 - DB msgStrings.valPlus1 - DB msgStrings.valPlus2 - DB msgStrings.valPlus3 - DB msgStrings.valPlus4 - DB msgStrings.valPlus5 - DB msgStrings.valPlus6 - DB msgStrings.valPlus7 - - _mSETitemParams ScreenX - DW OnChangeAction.setXYpos - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.ScreenPosition.Mask.Y : DB %0000'1110 - DB msgStrings.valPlus7 - DB msgStrings.valPlus6 - DB msgStrings.valPlus5 - DB msgStrings.valPlus4 - DB msgStrings.valPlus3 - DB msgStrings.valPlus2 - DB msgStrings.valPlus1 - DB msgStrings.val_0 - DB msgStrings.valMinus1 - DB msgStrings.valMinus2 - DB msgStrings.valMinus3 - DB msgStrings.valMinus4 - DB msgStrings.valMinus5 - DB msgStrings.valMinus6 - DB msgStrings.valMinus7 - - _mSETitemParams FrameInt - DW OnChangeAction.setInt - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.ScreenSET.Mask.Int : DB %0011'0000 - DB msgStrings.valDash8 - DB msgStrings.valScorpion - DB msgStrings.valPentagon - DB msgStrings.valSpectrum - - _mSETitemParams VSync - DW OnChangeAction.setVsinc - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.ScreenSET.Mask.Sinc : DB %1000'0000 - DB msgStrings.valDash8 - DB msgStrings.val312_50 - DB msgStrings.val320_49 - - _mSETitemParams QuickStartROM - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.BootUpParams.Mask.QuickStartROM : DB %0000'0001 - DB msgStrings.valQuickStartSP - DB msgStrings.valSpectrum - - - _mSETitemParams QS_SetUpZxRom - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.QuickStartSetUp.Mask.ZxRom : DB %0000'0101 - DB msgStrings.valQS_SetUpBasic128 - DB msgStrings.valQS_SetUpBasic48p - DB msgStrings.valQS_SetUpTrDos - DB msgStrings.valQS_SetUpExp - DB msgStrings.valQS_SetUpTrDos48 - DB msgStrings.valQS_SetUpBasic48 - - _mSETitemParams QS_SetUpHardware - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.QuickStartSetUp.Mask.Hardware : DB %0011'0000 - DB msgStrings.valSprinterZX - DB msgStrings.valPentagon48 - DB msgStrings.valPentagon128 - DB msgStrings.valPentagon512 - DB msgStrings.valScorpion256 - DB msgStrings.valZXSpectrum48 - DB msgStrings.valZXSpectrum128 - - - _mSETitemParams TrDosA - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.TRDOSmount.Mask.A : DB %0000'0010 - DB msgStrings.valDefault - DB msgStrings.valFDD - DB msgStrings.valHDD - - _mSETitemParams TrDosB - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.TRDOSmount.Mask.B : DB %0000'1000 - DB msgStrings.valDefault - DB msgStrings.valFDD - DB msgStrings.valHDD - - _mSETitemParams TrDosC - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.TRDOSmount.Mask.C : DB %0010'0000 - DB msgStrings.valDefault - DB msgStrings.valFDD - DB msgStrings.valHDD - - _mSETitemParams TrDosD - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.TRDOSmount.Mask.D : DB %1000'0000 - DB msgStrings.valDefault - DB msgStrings.valFDD - DB msgStrings.valHDD - - _mSETitemParams LoadZXroms - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.Options.Mask.LoadZXroms : DB %0000'1000 - DB msgStrings.valLoadZXromsManually - DB msgStrings.valLoadZXromsFlag - DB msgStrings.valLoadZXromsCAD - - _mSETitemParams PlayStartUpSound - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.BootUpParams.Mask.BootSound : DB %0000'0010 - DB msgStrings.valDisabled - DB msgStrings.valEnabled - - IF NEW_FEATURE - _mSETitemParams SetTime - DW OnChangeAction.SetTime - DB folderLine - DB columnNum,lineNum - DB paramName - DB #00,%0000'0000,%0000'0000 - DB msgStrings.valFolder - ENDIF -;--------------------[Items Addresses table]--------------------[] -SettingsItemsTabsAddrs: - _mCreateSettingsItemsTabsAddrs -.max EQU ($-SettingsItemsTabsAddrs)/2 - - ; db on-change routine addr - ; db X,Y - ; db string-name number - ; db CMOS, MASK - ; db string-value number 1, .. , string-value number XX -;----------------------------------------------------------------[] - -;----------------------------[Settings items table]----------------------------[^] - -; -; !TODO ᯮ ᮧ ६ ⤥ 䠩 ࠢ - MACRO _mSetStr Suffix?, Num? -@.Suffix? EQU Num? - LUA ALLPASS - _pl("@.msg_" .. _c("Num?")) - ENDLUA -!tmp_Counter = tmp_Counter + 1 - ENDM -; -; - -; -; !TODO ᯮ ᮧ ६ ⤥ 䠩 ࠢ - MACRO _mSetStrRus Suffix?, Num? - DEFINE TmpDef Suffix? - LUA ALLPASS - if (_c("msgStrings." .. sj.get_define("TmpDef"))) ~= _c("Num?") then - sj.error("Sequence matching between Russian and English strings is broken!!!") - else - _pl("@.msg_" .. _c("Num?")) - end - ENDLUA - UNDEFINE TmpDef -!tmp_Counter = tmp_Counter + 1 - ENDM -; -; -; -;================================================================================================================================== -; 㬭 ⪨ msgStrings !!! LUA ⮬ 䠩. -tmp_Counter DEFL 0 -msgStrings: - _mSetStr copyRightPeters, tmp_Counter : DZ 'Copyright (c) 2002 Peters Plus' - _mSetStr copyRightSPTeam, tmp_Counter : DZ 'Copyright (c) 2009-', SPTeam_year, ' Sprinter Team' - _mSetStr setupBiosVer, tmp_Counter : DZ 'Sprinter BIOS v', BIOS_ver_string - _mSetStr setupCopyRight, tmp_Counter : DZ 'Copyright (c) 2002 Peters Plus, (c) 2009-', SPTeam_year, ' Sprinter Team' - _mSetStr setupUtilityVer, tmp_Counter : DZ 'SETUP Utility v', SetupVer - _mSetStr setupHelpStr1, tmp_Counter : DZ 'ESC : Quit F10 : Save & Exit Setup' - _mSetStr setupHelpStr2, tmp_Counter : DZ 'F2 : Save Values ',24,32,25,32,26,32,27,' : Select Item' ; ५ ஡: 24,32,25,32,26,32,27 - _mSetStr setupHelpStr3, tmp_Counter : DZ 'F5 : Old Values PU/PD/+/- : Modify' - _mSetStr setupHelpStr4, tmp_Counter : DZ 'F7 : Default Values F3 : Color ' - _mSetStr toSetupButton, tmp_Counter : DZ ' to enter SETUP' -;_mSetStr forCtrlBootButton, tmp_Counter : DZ ' for Recovery boot' - _mSetStr forAltBootButton, tmp_Counter : DZ ' for Alternative boot' - _mSetStr cmosChecksumErr, tmp_Counter : DZ 'WARNING! CMOS CHECKSUM ERROR, DEFAULT VALUES SET!' - _mSetStr cmosDateTimeErr, tmp_Counter : DZ 'WARNING! CMOS DATE/TIME ERROR, DEFAULT VALUES SET!' - _mSetStr detectIdePrMA, tmp_Counter : DZ ' Detecting IDE Primary Master ... [Press F4 to skip]' - _mSetStr detectIdePrSL, tmp_Counter : DZ ' Detecting IDE Primary Slave ... [Press F4 to skip]' - _mSetStr detectIdeSecMA, tmp_Counter : DZ ' Detecting IDE Secondary Master ... [Press F4 to skip]' - _mSetStr detectIdeSecSL, tmp_Counter : DZ ' Detecting IDE Secondary Slave ... [Press F4 to skip]' - _mSetStr ideUnknown, tmp_Counter : DZ 'Unknown ' - _mSetStr ideNone, tmp_Counter : DZ 'None ' - _mSetStr ideSkiped, tmp_Counter : DZ 'Skipped ' - _mSetStr ideFail, tmp_Counter : DZ 'Fail ' ; !FIXIT strFail - _mSetStr spModel, tmp_Counter : DZ 'Model : ' -.str_ACEX_MODEL EQU $$$+7 ; 㪠⥫ ப ஬ - _mSetStr spCNFver, tmp_Counter : DZ 'Core 1K30 : v' - _mSetStr spMemory, tmp_Counter : DZ 'Memory : ' - _mSetStr cmosFound, tmp_Counter : DZ 'CMOS : Found' - _mSetStr cmosNone, tmp_Counter : DZ 'CMOS : None' - _mSetStr memoryAvailable, tmp_Counter : DZ 'Available : ' -; _mSetStr unknownSTR1, tmp_Counter : DZ "7" -; _mSetStr unknownSTR2, tmp_Counter : DZ "8" - _mSetStr boardID, tmp_Counter : DZ 'Board ID : ' - _mSetStr bootFdd, tmp_Counter : DZ 'Boot from Diskette' -; _mSetStr bootHdd, tmp_Counter : DZ 'Boot from Hard disk ' - _mSetStr bootHdd, tmp_Counter : DZ 'Boot from HDD ' - _mSetStr bootCd, tmp_Counter : DZ 'Boot from CD-ROM ' - _mSetStr bootRamDrv, tmp_Counter : DZ 'Boot from RAM disk' - _mSetStr bootRecovery, tmp_Counter : DZ 'Starting recovery' - _mSetStr bootAltDrv, tmp_Counter : DZ 'Alternative ' - _mSetStr bootFail, tmp_Counter : DZ ' fail' ; !FIXIT strFail - _mSetStr bootOk, tmp_Counter : DZ ' OK' - _mSetStr afterBootFail, tmp_Counter : DZ 'PRESS TO REBOOT, TO ENTER SETUP OR TO ZX-MODE . . .' - _mSetStr errorZXmode, tmp_Counter : DZ 'Error! Spectrum mode launch failed. Press CTRL+ALT+DEL or RESET.' -; - _mSetStr parLang, tmp_Counter : DZ 'Language () : ' - _mSetStr valLangEng, tmp_Counter : DZ 'English ' - _mSetStr valLangRus, tmp_Counter : DZ '᪨ ' - _mSetStr parMemTest, tmp_Counter : DZ 'Memory test : ' - _mSetStr valDisabled, tmp_Counter : DZ 'Disabled' - _mSetStr valEnabled, tmp_Counter : DZ 'Enabled ' - _mSetStr parSaveRAMdrvs, tmp_Counter : DZ 'Save RAM-disks : ' - _mSetStr parUpdBios, tmp_Counter : DZ 'Update BIOS : ' - _mSetStr parStartDelay, tmp_Counter : DZ 'Start delay : ' - _mSetStr valShort, tmp_Counter : DZ 'Short ' - _mSetStr valLong, tmp_Counter : DZ 'Long ' - _mSetStr parTypRate, tmp_Counter : DZ 'Typematic rate (chars/sec) : ' - _mSetStr val_6, tmp_Counter : DZ '6 ' - _mSetStr val_8, tmp_Counter : DZ '8 ' - _mSetStr val_10, tmp_Counter : DZ '10' - _mSetStr val_12, tmp_Counter : DZ '12' - _mSetStr val_15, tmp_Counter : DZ '15' - _mSetStr val_20, tmp_Counter : DZ '20' - _mSetStr val_24, tmp_Counter : DZ '24' - _mSetStr val_30, tmp_Counter : DZ '30' - _mSetStr parTypDelay, tmp_Counter : DZ 'Typematic delay (Msec) : ' - _mSetStr val_250, tmp_Counter : DZ '250 ' - _mSetStr val_500, tmp_Counter : DZ '500 ' - _mSetStr val_750, tmp_Counter : DZ '750 ' - _mSetStr val_1000, tmp_Counter : DZ '1000' - _mSetStr parRebootMsg, tmp_Counter : DZ 'Reboot message : ' - _mSetStr parSysDsk, tmp_Counter : DZ 'System disk : ' - _mSetStr val1stFDD, tmp_Counter : DZ '1-st FDD' - _mSetStr val2ndFDD, tmp_Counter : DZ '2-nd FDD' - _mSetStr val1stIDE, tmp_Counter : DZ '1-st IDE' - _mSetStr val2ndIDE, tmp_Counter : DZ '2-nd IDE' - _mSetStr val3rdIDE, tmp_Counter : DZ '3-rd IDE' - _mSetStr val4thIDE, tmp_Counter : DZ '4-th IDE' - _mSetStr valRamDsk, tmp_Counter : DZ 'RAM-DISK' - _mSetStr valRecovery, tmp_Counter : DZ 'RECOVERY' - _mSetStr parAltSysDsk, tmp_Counter : DZ 'Alt. system disk : ' - _mSetStr parFddFirst, tmp_Counter : DZ 'FDD first : ' - _mSetStr valAuto, tmp_Counter : DZ 'Auto ' -; _mSetStr val720, tmp_Counter : DZ '720K ' -; _mSetStr val1440, tmp_Counter : DZ '1.44M ' - _mSetStr val35, tmp_Counter : DZ '3.5" ' - _mSetStr val525, tmp_Counter : DZ '5.25" ' - _mSetStr valDash6, tmp_Counter : DZ '------' - _mSetStr parFddSecond, tmp_Counter : DZ 'FDD second : ' - _mSetStr parPriIdeMA, tmp_Counter : DZ 'Primary IDE Master',#FF,' : ' - _mSetStr valSetup, tmp_Counter : DZ 'Setup ' - _mSetStr valCdRom, tmp_Counter : DZ 'CD-ROM' - _mSetStr parPriIdeSl, tmp_Counter : DZ 'Primary IDE Slave',#FF,' : ' - _mSetStr parSecIdeMA, tmp_Counter : DZ 'Secondary IDE Master',#FF,' : ' - _mSetStr parSecIdeSl, tmp_Counter : DZ 'Secondary IDE Slave',#FF,' : ' -; IF HDDwriteProtect -; _mSetStr parHddWrPr, tmp_Counter : DZ 'HDD write protect : ' -; ENDIF - _mSetStr parScreenY, tmp_Counter : DZ 'Y-screen position : ' - _mSetStr valMinus7, tmp_Counter : DZ '-7' - _mSetStr valMinus6, tmp_Counter : DZ '-6' - _mSetStr valMinus5, tmp_Counter : DZ '-5' - _mSetStr valMinus4, tmp_Counter : DZ '-4' - _mSetStr valMinus3, tmp_Counter : DZ '-3' - _mSetStr valMinus2, tmp_Counter : DZ '-2' - _mSetStr valMinus1, tmp_Counter : DZ '-1' - _mSetStr val_0, tmp_Counter : DZ ' 0' - _mSetStr valPlus1, tmp_Counter : DZ '+1' - _mSetStr valPlus2, tmp_Counter : DZ '+2' - _mSetStr valPlus3, tmp_Counter : DZ '+3' - _mSetStr valPlus4, tmp_Counter : DZ '+4' - _mSetStr valPlus5, tmp_Counter : DZ '+5' - _mSetStr valPlus6, tmp_Counter : DZ '+6' - _mSetStr valPlus7, tmp_Counter : DZ '+7' - _mSetStr parScreenX, tmp_Counter : DZ 'X-screen position : ' - _mSetStr parFrameInt, tmp_Counter : DZ 'Frame interrupt : ' - _mSetStr valDash8, tmp_Counter : DZ '--------' - _mSetStr valScorpion, tmp_Counter : DZ 'Scorpion' - _mSetStr valPentagon, tmp_Counter : DZ 'Pentagon' - _mSetStr valSpectrum, tmp_Counter : DZ 'Spectrum' - _mSetStr parVSync, tmp_Counter : DZ 'V-synchronization : ' - _mSetStr val312_50, tmp_Counter : DZ '312/50Hz' - _mSetStr val320_49, tmp_Counter : DZ '320/49Hz' - _mSetStr parQuickStartROM, tmp_Counter : DZ 'Run in mode : ' - _mSetStr valQuickStartSP, tmp_Counter : DZ 'Sprinter' - _mSetStr valDefault, tmp_Counter : DZ 'Default' - _mSetStr valFDD, tmp_Counter : DZ 'FDD ' ; ????? 㬠 ਠ - _mSetStr valHDD, tmp_Counter : DZ 'HDD ' ; ????? 㬠 ਠ - _mSetStr parTrDosA, tmp_Counter : DZ 'TR DOS A:> : ' - _mSetStr parTrDosB, tmp_Counter : DZ 'TR DOS B:> : ' - _mSetStr parTrDosC, tmp_Counter : DZ 'TR DOS C:> : ' - _mSetStr parTrDosD, tmp_Counter : DZ 'TR DOS D:> : ' - _mSetStr parPlayStartUpSound, tmp_Counter : DZ 'Startup sound : ' - _mSetStr parLoadZXroms, tmp_Counter : DZ 'Load ZX ROMs : ' - _mSetStr valLoadZXromsManually, tmp_Counter : DZ 'Manually ' - _mSetStr valLoadZXromsFlag, tmp_Counter : DZ 'By ZX flag' - _mSetStr valLoadZXromsCAD, tmp_Counter : DZ 'On restart' -; - _mSetStr parQS_SetUpHardware, tmp_Counter : DZ 'ZX Mode : ' - _mSetStr valSprinterZX, tmp_Counter : DZ 'Sprinter ZX ' - _mSetStr valPentagon48, tmp_Counter : DZ 'Pentagon 48 ' - _mSetStr valPentagon128, tmp_Counter : DZ 'Pentagon 128' - _mSetStr valPentagon512, tmp_Counter : DZ 'Pentagon 512' - _mSetStr valScorpion256, tmp_Counter : DZ 'Scorpion 256' - _mSetStr valZXSpectrum48, tmp_Counter : DZ 'Spectrum 48 ' - _mSetStr valZXSpectrum128, tmp_Counter : DZ 'Spectrum 128' -; - _mSetStr parQS_SetUpZxRom, tmp_Counter : DZ 'ZX Mode start in : ' - _mSetStr valQS_SetUpBasic128, tmp_Counter : DZ 'Basic 128' - _mSetStr valQS_SetUpBasic48p, tmp_Counter : DZ 'Basic 48+' - _mSetStr valQS_SetUpTrDos, tmp_Counter : DZ 'TR-DOS ' - _mSetStr valQS_SetUpExp, tmp_Counter : DZ 'Expansion' - _mSetStr valQS_SetUpTrDos48, tmp_Counter : DZ 'TR-DOS 48' - _mSetStr valQS_SetUpBasic48, tmp_Counter : DZ 'Basic 48 ' -; _mSetStrRus valLoadZXromsAuto, tmp_Counter : DZ 'On call ' - IF NEW_FEATURE - _mSetStr parSetTime, tmp_Counter : DZ 'Date and time setup : ' - _mSetStr valFolder, tmp_Counter : DB 16,'ENTER',17,0 - ENDIF - IF BETA_BUILD > 0 - _mSetStr extBIOSmsg, tmp_Counter : DZ 'Test build! ',BUILD_DATE,', ',__TIME__ - ELSE - _mSetStr extBIOSmsg, tmp_Counter : DZ 'Release ',RELEASE_BUILD_DATE - ENDIF -; - -MSG_ENG: ; !FIXIT ⠢ _mCreateMsgAddrTable ࠬ "msgStrings.msg_" "msgRusStrings.msg_" - LUA ALLPASS - for i = 0, _c("tmp_Counter")-1, 1 do - _pc("WORD " .. "msgStrings.msg_" .. i) - end - ENDLUA -/* - WORD msgStrings.msg_0 - .. - WORD msgStrings.msg_XX ; XX = tmp_Counter -*/ -MSG_ENG.size EQU $-MSG_ENG -;================================================================================================================================== - -;================================================================================================================================== -tmp_Counter = 0 -msgRusStrings: - _mSetStrRus copyRightPeters, tmp_Counter : DZ 'Copyright (c) 2002 Peters Plus' - _mSetStrRus copyRightSPTeam, tmp_Counter : DZ 'Copyright (c) 2009-', SPTeam_year, ' Sprinter Team' - _mSetStrRus setupBiosVer, tmp_Counter : DZ 'Sprinter BIOS v', BIOS_ver_string - _mSetStrRus setupCopyRight, tmp_Counter : DZ 'Copyright (c) 2002 Peters Plus, (c) 2009-', SPTeam_year, ' Sprinter Team' - _mSetStrRus setupUtilityVer, tmp_Counter : DZ 'SETUP Utility v', SetupVer - _mSetStrRus setupHelpStr1, tmp_Counter : DZ 'ESC : F10 : ࠭ ' - _mSetStrRus setupHelpStr2, tmp_Counter : DZ 'F2 : ࠭ 祭 ',24,32,25,32,26,32,27,' : 롮 㭪' - _mSetStrRus setupHelpStr3, tmp_Counter : DZ 'F5 : 祭 PU/PD/+/- : ' - _mSetStrRus setupHelpStr4, tmp_Counter : DZ 'F7 : 祭 㬮砭 F3 : ' - _mSetStrRus toSetupButton, tmp_Counter : DZ ' 室 SETUP' -;_mSetStrRus forCtrlBootButton, tmp_Counter : DZ ' 㧪 Recovery' - _mSetStrRus forAltBootButton, tmp_Counter : DZ ' ୠ⨢ 㧪' - _mSetStrRus cmosChecksumErr, tmp_Counter : DZ '! CMOS, ' - _mSetStrRus cmosDateTimeErr, tmp_Counter : DZ '! / CMOS, ' - _mSetStrRus detectIdePrMA, tmp_Counter : DZ ' ।塞 ࢨ IDE Master ... [F4 ய᪠] ' - _mSetStrRus detectIdePrSL, tmp_Counter : DZ ' ।塞 ࢨ IDE Slave ... [F4 ய᪠]' - _mSetStrRus detectIdeSecMA, tmp_Counter : DZ ' ।塞 IDE Master ... [F4 ய᪠]' - _mSetStrRus detectIdeSecSL, tmp_Counter : DZ ' ।塞 IDE Slave ... [F4 ய᪠]' - _mSetStrRus ideUnknown, tmp_Counter : DZ ' ' - _mSetStrRus ideNone, tmp_Counter : DZ ' ' - _mSetStrRus ideSkiped, tmp_Counter : DZ 'ய饭 ' - _mSetStrRus ideFail, tmp_Counter : DZ ' । ' - _mSetStrRus spModel, tmp_Counter : DZ ' : ' -.str_ACEX_MODEL EQU $$$+7 ; 㪠⥫ ப ஬ ; !FIXIT ?  १ FN_CRIPT.Acex_ver ? - _mSetStrRus spCNFver, tmp_Counter : DZ ' 1K30 : v' - _mSetStrRus spMemory, tmp_Counter : DZ ' : ' - _mSetStrRus cmosFound, tmp_Counter : DZ 'CMOS : ' - _mSetStrRus cmosNone, tmp_Counter : DZ 'CMOS : ' - _mSetStrRus memoryAvailable, tmp_Counter : DZ '㯭 : ' -; _mSetStrRus unknownSTR1, tmp_Counter : DZ '7' -; _mSetStrRus unknownSTR2, tmp_Counter : DZ '8' - _mSetStrRus boardID, tmp_Counter : DZ 'ID : ' - _mSetStrRus bootFdd, tmp_Counter : DZ ' ᪥' - _mSetStrRus bootHdd, tmp_Counter : DZ ' HDD ' - _mSetStrRus bootCd, tmp_Counter : DZ ' CD-ROM ' - _mSetStrRus bootRamDrv, tmp_Counter : DZ ' RAM ᪠' - _mSetStrRus bootRecovery, tmp_Counter : DZ ' ⠭' - _mSetStrRus bootAltDrv, tmp_Counter : DZ 'ୠ⨢ ' - _mSetStrRus bootFail, tmp_Counter : DZ ' ' - _mSetStrRus bootOk, tmp_Counter : DZ ' OK' - _mSetStrRus afterBootFail, tmp_Counter : DZ ' , ZX-MODE . . .' - _mSetStrRus errorZXmode, tmp_Counter : DZ '訡! ० Spectrum 㤠. CTRL+ALT+DEL RESET.' -; - _mSetStrRus parLang, tmp_Counter : DZ ' (language) : ' - _mSetStrRus valLangEng, tmp_Counter : DZ 'English ' - _mSetStrRus valLangRus, tmp_Counter : DZ '᪨ ' - _mSetStrRus parMemTest, tmp_Counter : DZ '஢ : ' - _mSetStrRus valDisabled, tmp_Counter : DZ '⪫祭' - _mSetStrRus valEnabled, tmp_Counter : DZ '祭 ' - _mSetStrRus parSaveRAMdrvs, tmp_Counter : DZ '࠭ RAM-᪮ : ' - _mSetStrRus parUpdBios, tmp_Counter : DZ ' BIOS : ' - _mSetStrRus parStartDelay, tmp_Counter : DZ '砫쭮 : ' - _mSetStrRus valShort, tmp_Counter : DZ '⪮ ' - _mSetStrRus valLong, tmp_Counter : DZ ' ' - _mSetStrRus parTypRate, tmp_Counter : DZ ' ⮯ : ' - _mSetStrRus val_6, tmp_Counter : DZ '6 ' - _mSetStrRus val_8, tmp_Counter : DZ '8 ' - _mSetStrRus val_10, tmp_Counter : DZ '10' - _mSetStrRus val_12, tmp_Counter : DZ '12' - _mSetStrRus val_15, tmp_Counter : DZ '15' - _mSetStrRus val_20, tmp_Counter : DZ '20' - _mSetStrRus val_24, tmp_Counter : DZ '24' - _mSetStrRus val_30, tmp_Counter : DZ '30' - _mSetStrRus parTypDelay, tmp_Counter : DZ 'প ⮯ (ᥪ): ' - _mSetStrRus val_250, tmp_Counter : DZ '250 ' - _mSetStrRus val_500, tmp_Counter : DZ '500 ' - _mSetStrRus val_750, tmp_Counter : DZ '750 ' - _mSetStrRus val_1000, tmp_Counter : DZ '1000' - _mSetStrRus parRebootMsg, tmp_Counter : DZ '饭 १㧪 : ' - _mSetStrRus parSysDsk, tmp_Counter : DZ '⥬ : ' - _mSetStrRus val1stFDD, tmp_Counter : DZ '1- FDD' - _mSetStrRus val2ndFDD, tmp_Counter : DZ '2- FDD' - _mSetStrRus val1stIDE, tmp_Counter : DZ '1- IDE' - _mSetStrRus val2ndIDE, tmp_Counter : DZ '2- IDE' - _mSetStrRus val3rdIDE, tmp_Counter : DZ '3- IDE' - _mSetStrRus val4thIDE, tmp_Counter : DZ '4- IDE' - _mSetStrRus valRamDsk, tmp_Counter : DZ 'RAM-DISK' - _mSetStrRus valRecovery, tmp_Counter : DZ 'RECOVERY' - _mSetStrRus parAltSysDsk, tmp_Counter : DZ '. ⥬ : ' - _mSetStrRus parFddFirst, tmp_Counter : DZ 'FDD : ' - _mSetStrRus valAuto, tmp_Counter : DZ ' ' -; _mSetStrRus val720, tmp_Counter : DZ '720K ' -; _mSetStrRus val1440, tmp_Counter : DZ '1.44M ' - _mSetStrRus val35, tmp_Counter : DZ '3.5" ' - _mSetStrRus val525, tmp_Counter : DZ '5.25" ' - _mSetStrRus valDash6, tmp_Counter : DZ '------' - _mSetStrRus parFddSecond, tmp_Counter : DZ 'FDD ன : ' - _mSetStrRus parPriIdeMA, tmp_Counter : DZ 'Primary IDE Master',#FF,' : ' - _mSetStrRus valSetup, tmp_Counter : DZ 'Setup ' - _mSetStrRus valCdRom, tmp_Counter : DZ 'CD-ROM' - _mSetStrRus parPriIdeSl, tmp_Counter : DZ 'Primary IDE Slave',#FF,' : ' - _mSetStrRus parSecIdeMA, tmp_Counter : DZ 'Secondary IDE Master',#FF,' : ' - _mSetStrRus parSecIdeSl, tmp_Counter : DZ 'Secondary IDE Slave',#FF,' : ' -; IF HDDwriteProtect -; _mSetStrRus parHddWrPr, tmp_Counter : DZ ' HDD : ' -; ENDIF - _mSetStrRus parScreenY, tmp_Counter : DZ ' ࠭ Y : ' - _mSetStrRus valMinus7, tmp_Counter : DZ '-7' - _mSetStrRus valMinus6, tmp_Counter : DZ '-6' - _mSetStrRus valMinus5, tmp_Counter : DZ '-5' - _mSetStrRus valMinus4, tmp_Counter : DZ '-4' - _mSetStrRus valMinus3, tmp_Counter : DZ '-3' - _mSetStrRus valMinus2, tmp_Counter : DZ '-2' - _mSetStrRus valMinus1, tmp_Counter : DZ '-1' - _mSetStrRus val_0, tmp_Counter : DZ ' 0' - _mSetStrRus valPlus1, tmp_Counter : DZ '+1' - _mSetStrRus valPlus2, tmp_Counter : DZ '+2' - _mSetStrRus valPlus3, tmp_Counter : DZ '+3' - _mSetStrRus valPlus4, tmp_Counter : DZ '+4' - _mSetStrRus valPlus5, tmp_Counter : DZ '+5' - _mSetStrRus valPlus6, tmp_Counter : DZ '+6' - _mSetStrRus valPlus7, tmp_Counter : DZ '+7' - _mSetStrRus parScreenX, tmp_Counter : DZ ' ࠭ X : ' - _mSetStrRus parFrameInt, tmp_Counter : DZ '஢ 뢠 : ' - _mSetStrRus valDash8, tmp_Counter : DZ '--------' - _mSetStrRus valScorpion, tmp_Counter : DZ '௨' - _mSetStrRus valPentagon, tmp_Counter : DZ '⠣' - _mSetStrRus valSpectrum, tmp_Counter : DZ '' - _mSetStrRus parVSync, tmp_Counter : DZ '. ᨭ஭ : ' - _mSetStrRus val312_50, tmp_Counter : DZ '312/50' - _mSetStrRus val320_49, tmp_Counter : DZ '320/49' - _mSetStrRus parQuickStartROM, tmp_Counter : DZ ' ० : ' - _mSetStrRus valQuickStartSP, tmp_Counter : DZ 'ਭ' - _mSetStrRus valDefault, tmp_Counter : DZ ' 㬮砭' - _mSetStrRus valFDD, tmp_Counter : DZ 'FDD ' - _mSetStrRus valHDD, tmp_Counter : DZ 'HDD ' - _mSetStrRus parTrDosA, tmp_Counter : DZ 'TR DOS A:> : ' - _mSetStrRus parTrDosB, tmp_Counter : DZ 'TR DOS B:> : ' - _mSetStrRus parTrDosC, tmp_Counter : DZ 'TR DOS C:> : ' - _mSetStrRus parTrDosD, tmp_Counter : DZ 'TR DOS D:> : ' - _mSetStrRus parPlayStartUpSound, tmp_Counter : DZ '⮢ : ' - _mSetStrRus parLoadZXroms, tmp_Counter : DZ '㦠 ZX : ' - _mSetStrRus valLoadZXromsManually, tmp_Counter : DZ ' ' - _mSetStrRus valLoadZXromsFlag, tmp_Counter : DZ ' 䫠 ZX ' - _mSetStrRus valLoadZXromsCAD, tmp_Counter : DZ ' ' -; - _mSetStrRus parQS_SetUpHardware, tmp_Counter : DZ ' ZX : ' - _mSetStrRus valSprinterZX, tmp_Counter : DZ 'ਭ ZX ' - _mSetStrRus valPentagon48, tmp_Counter : DZ '⠣ 48 ' - _mSetStrRus valPentagon128, tmp_Counter : DZ '⠣ 128' - _mSetStrRus valPentagon512, tmp_Counter : DZ '⠣ 512' - _mSetStrRus valScorpion256, tmp_Counter : DZ '௨ 256' - _mSetStrRus valZXSpectrum48, tmp_Counter : DZ ' 48 ' - _mSetStrRus valZXSpectrum128, tmp_Counter : DZ ' 128' -; - _mSetStrRus parQS_SetUpZxRom, tmp_Counter : DZ ' ० ZX : ' - _mSetStrRus valQS_SetUpBasic128, tmp_Counter : DZ 'Basic 128' - _mSetStrRus valQS_SetUpBasic48p, tmp_Counter : DZ 'Basic 48+' - _mSetStrRus valQS_SetUpTrDos, tmp_Counter : DZ 'TR-DOS ' - _mSetStrRus valQS_SetUpExp, tmp_Counter : DZ 'Expansion' - _mSetStrRus valQS_SetUpTrDos48, tmp_Counter : DZ 'TR-DOS 48' - _mSetStrRus valQS_SetUpBasic48, tmp_Counter : DZ 'Basic 48 ' -; _mSetStrRus valLoadZXromsAuto, tmp_Counter : DZ ' 맮 ' - IF NEW_FEATURE - _mSetStrRus parSetTime, tmp_Counter : DZ ' ६ : ' - _mSetStrRus valFolder, tmp_Counter : DB 16,'',17,0 - ENDIF - IF BETA_BUILD > 0 - _mSetStrRus extBIOSmsg, tmp_Counter : DZ '⮢ ᡮઠ! ',BUILD_DATE,', ',__TIME__ - ELSE - _mSetStrRus extBIOSmsg, tmp_Counter : DZ ' ',RELEASE_BUILD_DATE - ENDIF -; -MSG_RUS: - _mCreateMsgAddrTable -MSG_RUS.size EQU $-MSG_RUS -;================================================================================================================================== - ASSERT MSG_ENG.size = MSG_RUS.size, "ERROR IN MESSAGE STRINGS: RUS and ENG do not match" -MSG_TABLE.Size EQU MSG_RUS.size + +; OnChangeAction: +; .setLang EQU 1 +; .nothing EQU 2 +; .setXYpos EQU 3 +; .setInt EQU 4 +; .setVsinc EQU 5 + + LUA ALLPASS + function get_key_for_value(t, value) + for column=1,2 do + for line,name in pairs(t[column]) do + if name==value then return column,line end + end + end + return nil + end + + function DeleteValueByDEFINE (t,zero_def,value) + if tonumber(sj.get_define(zero_def)) then + local delCol, delLine = get_key_for_value(t, value) + table.remove (t[delCol], delLine) + end + end + ENDLUA + + LUA PASS1 + SettingsTabsOrder = { + [1]={ + "Lang", -- 1 + "SaveRAMdrvs", -- 2 + "StartDelay", -- 3 + "RebootMsg", -- 4 + "SysDsk", -- 5 + "AltSysDsk", -- 6 + "FddFirst", -- 7 + "FddSecond", -- 8 + "PriIdeMA", -- 9 + "PriIdeSl", -- 10 + "SecIdeMA", -- 11 + "SecIdeSl", -- 12 + "ScreenY", -- 13 + "ScreenX", -- 14 + "FrameInt", -- 15 + "VSync", -- 16 + "QuickStartROM", -- 17 + "MemTest", -- DEFINES.INC --> UnusedSettingsFeatures + "UpdBios", -- DEFINES.INC --> UnusedSettingsFeatures + "TypRate", -- DEFINES.INC --> UnusedSettingsFeatures + "TypDelay", -- DEFINES.INC --> UnusedSettingsFeatures + }, + [2]={ + "PlayStartUpSound", -- 1 + "LoadZXroms", -- 2 + "QS_SetUpHardware", -- 3 + "QS_SetUpZxRom", -- 4 + "TrDosA", -- 5 + "TrDosB", -- 6 + "TrDosC", -- 7 + "TrDosD", -- 8 + "SetTime", -- 9 DEFINES.INC --> NEW_FEATUREDEFINES.INC --> HDDwriteProtect + --"HddWrPr", -- 10 DEFINES.INC --> HDDwriteProtect + -- 11 + -- 12 + -- 13 + -- 14 + -- 15 + -- 16 + -- 17 + } + } + DeleteValueByDEFINE(SettingsTabsOrder,"NEW_FEATURE","SetTime") + --DeleteValueByDEFINE(SettingsTabsOrder,"HDDwriteProtect","HddWrPr") + DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","MemTest") + DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","UpdBios") + DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","TypRate") + DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","TypDelay") + -- DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","") + -- DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","") + ENDLUA +; + +; + MACRO _mSETitemParams itemName? +@.itemName? EQU $ + DEFINE TmpDef itemName? + LUA ALLPASS + local tmpName = sj.get_define("TmpDef") + local column,line = get_key_for_value(SettingsTabsOrder, tmpName) + if (column == nil or line == nil) then sj.error("Settings Tab not found",tmpName) end + if column == 1 then column = _c("firstColumn") else column = _c("secondColumn") end + sj.insert_define("columnNum", column) + sj.insert_define("lineNum", (_c("firstLine")+line-1)) + sj.insert_define("paramName", "msgStrings.par" .. tmpName) + ENDLUA + UNDEFINE TmpDef + ENDM +; + + MACRO _mCreateSettingsItemsTabsAddrs + LUA ALLPASS + for i = 1, #SettingsTabsOrder do + for j = 1, #SettingsTabsOrder[i] do + _pc("DW " .. _c("SettingsItemsTabs." .. SettingsTabsOrder[i][j])) + end + end + ENDLUA + +; ᮧ ⠪ : +; DW SettingsItemsTabs.FirstItem +; DW .. +; DW SettingsItemsTabs.LastItem + ENDM + + MACRO _mCreateMsgAddrTable ; !FIXIT ࠬ "msgRusStrings.msg_", ᠬ । + LUA ALLPASS + for i = 0, _c("tmp_Counter")-1, 1 do + _pc("WORD " .. "msgRusStrings.msg_" .. i) + end + ENDLUA + +; ᮧ ⠪ : +; WORD msgRusStrings.msg_0 +; .. +; WORD msgRusStrings.msg_XX ; XX = tmp_Counter + ENDM + +;----------------------------[Settings items table]----------------------------[v] + +; + IF NEW_FEATURE +; New structure for procedure with IY reg + STRUCT MenusItem +Action WORD +Type BYTE +Column BYTE +Line BYTE +Name BYTE +CMOSreg BYTE +ValueMask BYTE +ValueMax BYTE +FirstString BYTE + ENDS + +paramLine EQU 0 +folderLine EQU 1 + + ENDIF +; + +firstColumn EQU 03 ; ᬥ饭 X ࢮ ⮫ +secondColumn EQU 43 ; ᬥ饭 X ண ⮫ +firstLine EQU 07 ; ᬥ饭 Y ࢮ ப + +SettingsItemsTabs: + + _mSETitemParams Lang + DW OnChangeAction.setLang ; ⢨ + IF NEW_FEATURE : DB paramLine : ENDIF ; ⨯ ࠬ (ப 祭 ⠫) + DB columnNum,lineNum ; ⮫, ப + DB paramName ; ࠬ + DW CMOS_CELL.BootUpParams.Mask.Language : DB %0000'0100 ; CMOS : MASK + DB msgStrings.valLangEng ; 1- ਠ ࠬ + DB msgStrings.valLangRus ; 2- ਠ ࠬ + + + IF UnusedSettingsFeatures ; !TODO + _mSETitemParams MemTest + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.BootUpParams.Mask.MemTest : DB %1000'0000 + DB msgStrings.valDisabled + DB msgStrings.valEnabled + ENDIF + + _mSETitemParams SaveRAMdrvs + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.BootUpParams.Mask.SaveRAMdisks : DB %0100'0000 + DB msgStrings.valDisabled + DB msgStrings.valEnabled + + IF UnusedSettingsFeatures ; !TODO + _mSETitemParams UpdBios + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.BootUpParams.Mask.UpdBios : DB %0010'0000 + DB msgStrings.valDisabled + DB msgStrings.valEnabled + ENDIF + + _mSETitemParams StartDelay + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.BootUpParams.Mask.StartDelay : DB %0001'0000 + DB msgStrings.valDisabled + DB msgStrings.valShort + DB msgStrings.valLong + + IF UnusedSettingsFeatures ; !TODO + _mSETitemParams TypRate + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.Typematic.Mask.Rate : DB %0000'0111 + DB msgStrings.val_6 + DB msgStrings.val_8 + DB msgStrings.val_10 + DB msgStrings.val_12 + DB msgStrings.val_15 + DB msgStrings.val_20 + DB msgStrings.val_24 + DB msgStrings.val_30 + ENDIF + + IF UnusedSettingsFeatures ; !TODO + _mSETitemParams TypDelay + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.Typematic.Mask.Delay : DB %0110'0000 + DB msgStrings.val_250 + DB msgStrings.val_500 + DB msgStrings.val_750 + DB msgStrings.val_1000 + ENDIF + + _mSETitemParams RebootMsg + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.Options.Mask.RebootMSG : DB %0000'0010 + DB msgStrings.valDisabled + DB msgStrings.valEnabled + + _mSETitemParams SysDsk + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.BootDrives.Mask.SysDisk : DB %0000'0111 + DB msgStrings.val1stFDD + DB msgStrings.val2ndFDD + DB msgStrings.val1stIDE + DB msgStrings.val2ndIDE + DB msgStrings.val3rdIDE + DB msgStrings.val4thIDE + DB msgStrings.valRamDsk + DB msgStrings.valRecovery + + _mSETitemParams AltSysDsk + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.BootDrives.Mask.AltSysDisk : DB %0111'0000 + DB msgStrings.val1stFDD + DB msgStrings.val2ndFDD + DB msgStrings.val1stIDE + DB msgStrings.val2ndIDE + DB msgStrings.val3rdIDE + DB msgStrings.val4thIDE + DB msgStrings.valRamDsk + DB msgStrings.valRecovery + + _mSETitemParams FddFirst + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.DrivesSetup_1.Mask.FirstFDD : DB %0000'0010 + DB msgStrings.val35 + DB msgStrings.val525 + DB msgStrings.valDash6 + ; DB msgStrings.valAuto + ; DB msgStrings.val720 + ; DB msgStrings.val1440 + ; DB msgStrings.val1200 + + _mSETitemParams FddSecond + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.DrivesSetup_1.Mask.SecondFDD : DB %0000'1000 + DB msgStrings.val35 + DB msgStrings.val525 + DB msgStrings.valDash6 + ; DB msgStrings.valAuto + ; DB msgStrings.val720 + ; DB msgStrings.val1440 + ; DB msgStrings.val1200 + + _mSETitemParams PriIdeMA + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.DrivesSetup_1.Mask.PriIDEmaster : DB %0011'0000 + DB msgStrings.valAuto + DB msgStrings.valSetup + DB msgStrings.valCdRom + DB msgStrings.valDash6 + + _mSETitemParams PriIdeSl + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.DrivesSetup_1.Mask.PriIDEslave : DB %1100'0000 + DB msgStrings.valAuto + DB msgStrings.valSetup + DB msgStrings.valCdRom + DB msgStrings.valDash6 + + _mSETitemParams SecIdeMA + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.DrivesSetup_2.Mask.SecIDEmaster : DB %0011'0000 + DB msgStrings.valAuto + DB msgStrings.valSetup + DB msgStrings.valCdRom + DB msgStrings.valDash6 + + _mSETitemParams SecIdeSl + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.DrivesSetup_2.Mask.SecIDEslave : DB %1100'0000 + DB msgStrings.valAuto + DB msgStrings.valSetup + DB msgStrings.valCdRom + DB msgStrings.valDash6 + + ; IF HDDwriteProtect + ; _mSETitemParams HddWrPr + ; DW OnChangeAction.nothing + ; IF NEW_FEATURE : DB paramLine : ENDIF + ; DB columnNum,lineNum + ; DB paramName + ; DW CMOS_CELL.Options.Mask.HDDwriteProtect : DB %0000'0001 + ; DB msgStrings.valDisabled + ; DB msgStrings.valEnabled + ; ENDIF + + _mSETitemParams ScreenY + DW OnChangeAction.setXYpos + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.ScreenPosition.Mask.X : DB %1110'0000 + DB msgStrings.valMinus7 + DB msgStrings.valMinus6 + DB msgStrings.valMinus5 + DB msgStrings.valMinus4 + DB msgStrings.valMinus3 + DB msgStrings.valMinus2 + DB msgStrings.valMinus1 + DB msgStrings.val_0 + DB msgStrings.valPlus1 + DB msgStrings.valPlus2 + DB msgStrings.valPlus3 + DB msgStrings.valPlus4 + DB msgStrings.valPlus5 + DB msgStrings.valPlus6 + DB msgStrings.valPlus7 + + _mSETitemParams ScreenX + DW OnChangeAction.setXYpos + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.ScreenPosition.Mask.Y : DB %0000'1110 + DB msgStrings.valPlus7 + DB msgStrings.valPlus6 + DB msgStrings.valPlus5 + DB msgStrings.valPlus4 + DB msgStrings.valPlus3 + DB msgStrings.valPlus2 + DB msgStrings.valPlus1 + DB msgStrings.val_0 + DB msgStrings.valMinus1 + DB msgStrings.valMinus2 + DB msgStrings.valMinus3 + DB msgStrings.valMinus4 + DB msgStrings.valMinus5 + DB msgStrings.valMinus6 + DB msgStrings.valMinus7 + + _mSETitemParams FrameInt + DW OnChangeAction.setInt + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.ScreenSET.Mask.Int : DB %0011'0000 + DB msgStrings.valDash8 + DB msgStrings.valScorpion + DB msgStrings.valPentagon + DB msgStrings.valSpectrum + + _mSETitemParams VSync + DW OnChangeAction.setVsinc + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.ScreenSET.Mask.Sinc : DB %1000'0000 + DB msgStrings.valDash8 + DB msgStrings.val312_50 + DB msgStrings.val320_49 + + _mSETitemParams QuickStartROM + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.BootUpParams.Mask.QuickStartROM : DB %0000'0001 + DB msgStrings.valQuickStartSP + DB msgStrings.valSpectrum + + + _mSETitemParams QS_SetUpZxRom + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.QuickStartSetUp.Mask.ZxRom : DB %0000'0101 + DB msgStrings.valQS_SetUpBasic128 + DB msgStrings.valQS_SetUpBasic48p + DB msgStrings.valQS_SetUpTrDos + DB msgStrings.valQS_SetUpExp + DB msgStrings.valQS_SetUpTrDos48 + DB msgStrings.valQS_SetUpBasic48 + + _mSETitemParams QS_SetUpHardware + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.QuickStartSetUp.Mask.Hardware : DB %0011'0000 + DB msgStrings.valSprinterZX + DB msgStrings.valPentagon48 + DB msgStrings.valPentagon128 + DB msgStrings.valPentagon512 + DB msgStrings.valScorpion256 + DB msgStrings.valZXSpectrum48 + DB msgStrings.valZXSpectrum128 + + + _mSETitemParams TrDosA + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.TRDOSmount.Mask.A : DB %0000'0010 + DB msgStrings.valDefault + DB msgStrings.valFDD + DB msgStrings.valHDD + + _mSETitemParams TrDosB + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.TRDOSmount.Mask.B : DB %0000'1000 + DB msgStrings.valDefault + DB msgStrings.valFDD + DB msgStrings.valHDD + + _mSETitemParams TrDosC + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.TRDOSmount.Mask.C : DB %0010'0000 + DB msgStrings.valDefault + DB msgStrings.valFDD + DB msgStrings.valHDD + + _mSETitemParams TrDosD + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.TRDOSmount.Mask.D : DB %1000'0000 + DB msgStrings.valDefault + DB msgStrings.valFDD + DB msgStrings.valHDD + + _mSETitemParams LoadZXroms + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.Options.Mask.LoadZXroms : DB %0000'1000 + DB msgStrings.valLoadZXromsManually + DB msgStrings.valLoadZXromsFlag + DB msgStrings.valLoadZXromsCAD + + _mSETitemParams PlayStartUpSound + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.BootUpParams.Mask.BootSound : DB %0000'0010 + DB msgStrings.valDisabled + DB msgStrings.valEnabled + + IF NEW_FEATURE + _mSETitemParams SetTime + DW OnChangeAction.SetTime + DB folderLine + DB columnNum,lineNum + DB paramName + DB #00,%0000'0000,%0000'0000 + DB msgStrings.valFolder + ENDIF +;--------------------[Items Addresses table]--------------------[] +SettingsItemsTabsAddrs: + _mCreateSettingsItemsTabsAddrs +.max EQU ($-SettingsItemsTabsAddrs)/2 + + ; db on-change routine addr + ; db X,Y + ; db string-name number + ; db CMOS, MASK + ; db string-value number 1, .. , string-value number XX +;----------------------------------------------------------------[] + +;----------------------------[Settings items table]----------------------------[^] + +; +; !TODO ᯮ ᮧ ६ ⤥ 䠩 ࠢ + MACRO _mSetStr Suffix?, Num? +@.Suffix? EQU Num? + LUA ALLPASS + _pl("@.msg_" .. _c("Num?")) + ENDLUA +!tmp_Counter = tmp_Counter + 1 + ENDM +; +; + +; +; !TODO ᯮ ᮧ ६ ⤥ 䠩 ࠢ + MACRO _mSetStrRus Suffix?, Num? + DEFINE TmpDef Suffix? + LUA ALLPASS + if (_c("msgStrings." .. sj.get_define("TmpDef"))) ~= _c("Num?") then + sj.error("Sequence matching between Russian and English strings is broken!!!") + else + _pl("@.msg_" .. _c("Num?")) + end + ENDLUA + UNDEFINE TmpDef +!tmp_Counter = tmp_Counter + 1 + ENDM +; +; +; +;================================================================================================================================== +; 㬭 ⪨ msgStrings !!! LUA ⮬ 䠩. +tmp_Counter DEFL 0 +msgStrings: + _mSetStr copyRightPeters, tmp_Counter : DZ 'Copyright (c) 2002 Peters Plus' + _mSetStr copyRightSPTeam, tmp_Counter : DZ 'Copyright (c) 2009-', SPTeam_year, ' Sprinter Team' + _mSetStr setupBiosVer, tmp_Counter : DZ 'Sprinter BIOS v', BIOS_ver_string + _mSetStr setupCopyRight, tmp_Counter : DZ 'Copyright (c) 2002 Peters Plus, (c) 2009-', SPTeam_year, ' Sprinter Team' + _mSetStr setupUtilityVer, tmp_Counter : DZ 'SETUP Utility v', SetupVer + _mSetStr setupHelpStr1, tmp_Counter : DZ 'ESC : Quit F10 : Save & Exit Setup' + _mSetStr setupHelpStr2, tmp_Counter : DZ 'F2 : Save Values ',24,32,25,32,26,32,27,' : Select Item' ; ५ ஡: 24,32,25,32,26,32,27 + _mSetStr setupHelpStr3, tmp_Counter : DZ 'F5 : Old Values PU/PD/+/- : Modify' + _mSetStr setupHelpStr4, tmp_Counter : DZ 'F7 : Default Values F3 : Color ' + _mSetStr toSetupButton, tmp_Counter : DZ ' to enter SETUP' +;_mSetStr forCtrlBootButton, tmp_Counter : DZ ' for Recovery boot' + _mSetStr forAltBootButton, tmp_Counter : DZ ' for Alternative boot' + _mSetStr cmosChecksumErr, tmp_Counter : DZ 'WARNING! CMOS CHECKSUM ERROR, DEFAULT VALUES SET!' + _mSetStr cmosDateTimeErr, tmp_Counter : DZ 'WARNING! CMOS DATE/TIME ERROR, DEFAULT VALUES SET!' + _mSetStr detectIdePrMA, tmp_Counter : DZ ' Detecting IDE Primary Master ... [Press F4 to skip]' + _mSetStr detectIdePrSL, tmp_Counter : DZ ' Detecting IDE Primary Slave ... [Press F4 to skip]' + _mSetStr detectIdeSecMA, tmp_Counter : DZ ' Detecting IDE Secondary Master ... [Press F4 to skip]' + _mSetStr detectIdeSecSL, tmp_Counter : DZ ' Detecting IDE Secondary Slave ... [Press F4 to skip]' + _mSetStr ideUnknown, tmp_Counter : DZ 'Unknown ' + _mSetStr ideNone, tmp_Counter : DZ 'None ' + _mSetStr ideSkiped, tmp_Counter : DZ 'Skipped ' + _mSetStr ideFail, tmp_Counter : DZ 'Fail ' ; !FIXIT strFail + _mSetStr spModel, tmp_Counter : DZ 'Model : ' +.str_ACEX_MODEL EQU $$$+7 ; 㪠⥫ ப ஬ + _mSetStr spCNFver, tmp_Counter : DZ 'Core 1K30 : v' + _mSetStr spMemory, tmp_Counter : DZ 'Memory : ' + _mSetStr cmosFound, tmp_Counter : DZ 'CMOS : Found' + _mSetStr cmosNone, tmp_Counter : DZ 'CMOS : None' + _mSetStr memoryAvailable, tmp_Counter : DZ 'Available : ' +; _mSetStr unknownSTR1, tmp_Counter : DZ "7" +; _mSetStr unknownSTR2, tmp_Counter : DZ "8" + _mSetStr boardID, tmp_Counter : DZ 'Board ID : ' + _mSetStr bootFdd, tmp_Counter : DZ 'Boot from Diskette' +; _mSetStr bootHdd, tmp_Counter : DZ 'Boot from Hard disk ' + _mSetStr bootHdd, tmp_Counter : DZ 'Boot from HDD ' + _mSetStr bootCd, tmp_Counter : DZ 'Boot from CD-ROM ' + _mSetStr bootRamDrv, tmp_Counter : DZ 'Boot from RAM disk' + _mSetStr bootRecovery, tmp_Counter : DZ 'Starting recovery' + _mSetStr bootAltDrv, tmp_Counter : DZ 'Alternative ' + _mSetStr bootFail, tmp_Counter : DZ ' fail' ; !FIXIT strFail + _mSetStr bootOk, tmp_Counter : DZ ' OK' + _mSetStr afterBootFail, tmp_Counter : DZ 'PRESS TO REBOOT, TO ENTER SETUP OR TO ZX-MODE . . .' + _mSetStr errorZXmode, tmp_Counter : DZ 'Error! Spectrum mode launch failed. Press CTRL+ALT+DEL or RESET.' +; + _mSetStr parLang, tmp_Counter : DZ 'Language () : ' + _mSetStr valLangEng, tmp_Counter : DZ 'English ' + _mSetStr valLangRus, tmp_Counter : DZ '᪨ ' + _mSetStr parMemTest, tmp_Counter : DZ 'Memory test : ' + _mSetStr valDisabled, tmp_Counter : DZ 'Disabled' + _mSetStr valEnabled, tmp_Counter : DZ 'Enabled ' + _mSetStr parSaveRAMdrvs, tmp_Counter : DZ 'Save RAM-disks : ' + _mSetStr parUpdBios, tmp_Counter : DZ 'Update BIOS : ' + _mSetStr parStartDelay, tmp_Counter : DZ 'Start delay : ' + _mSetStr valShort, tmp_Counter : DZ 'Short ' + _mSetStr valLong, tmp_Counter : DZ 'Long ' + _mSetStr parTypRate, tmp_Counter : DZ 'Typematic rate (chars/sec) : ' + _mSetStr val_6, tmp_Counter : DZ '6 ' + _mSetStr val_8, tmp_Counter : DZ '8 ' + _mSetStr val_10, tmp_Counter : DZ '10' + _mSetStr val_12, tmp_Counter : DZ '12' + _mSetStr val_15, tmp_Counter : DZ '15' + _mSetStr val_20, tmp_Counter : DZ '20' + _mSetStr val_24, tmp_Counter : DZ '24' + _mSetStr val_30, tmp_Counter : DZ '30' + _mSetStr parTypDelay, tmp_Counter : DZ 'Typematic delay (Msec) : ' + _mSetStr val_250, tmp_Counter : DZ '250 ' + _mSetStr val_500, tmp_Counter : DZ '500 ' + _mSetStr val_750, tmp_Counter : DZ '750 ' + _mSetStr val_1000, tmp_Counter : DZ '1000' + _mSetStr parRebootMsg, tmp_Counter : DZ 'Reboot message : ' + _mSetStr parSysDsk, tmp_Counter : DZ 'System disk : ' + _mSetStr val1stFDD, tmp_Counter : DZ '1-st FDD' + _mSetStr val2ndFDD, tmp_Counter : DZ '2-nd FDD' + _mSetStr val1stIDE, tmp_Counter : DZ '1-st IDE' + _mSetStr val2ndIDE, tmp_Counter : DZ '2-nd IDE' + _mSetStr val3rdIDE, tmp_Counter : DZ '3-rd IDE' + _mSetStr val4thIDE, tmp_Counter : DZ '4-th IDE' + _mSetStr valRamDsk, tmp_Counter : DZ 'RAM-DISK' + _mSetStr valRecovery, tmp_Counter : DZ 'RECOVERY' + _mSetStr parAltSysDsk, tmp_Counter : DZ 'Alt. system disk : ' + _mSetStr parFddFirst, tmp_Counter : DZ 'FDD first : ' + _mSetStr valAuto, tmp_Counter : DZ 'Auto ' +; _mSetStr val720, tmp_Counter : DZ '720K ' +; _mSetStr val1440, tmp_Counter : DZ '1.44M ' + _mSetStr val35, tmp_Counter : DZ '3.5" ' + _mSetStr val525, tmp_Counter : DZ '5.25" ' + _mSetStr valDash6, tmp_Counter : DZ '------' + _mSetStr parFddSecond, tmp_Counter : DZ 'FDD second : ' + _mSetStr parPriIdeMA, tmp_Counter : DZ 'Primary IDE Master',#FF,' : ' + _mSetStr valSetup, tmp_Counter : DZ 'Setup ' + _mSetStr valCdRom, tmp_Counter : DZ 'CD-ROM' + _mSetStr parPriIdeSl, tmp_Counter : DZ 'Primary IDE Slave',#FF,' : ' + _mSetStr parSecIdeMA, tmp_Counter : DZ 'Secondary IDE Master',#FF,' : ' + _mSetStr parSecIdeSl, tmp_Counter : DZ 'Secondary IDE Slave',#FF,' : ' +; IF HDDwriteProtect +; _mSetStr parHddWrPr, tmp_Counter : DZ 'HDD write protect : ' +; ENDIF + _mSetStr parScreenY, tmp_Counter : DZ 'Y-screen position : ' + _mSetStr valMinus7, tmp_Counter : DZ '-7' + _mSetStr valMinus6, tmp_Counter : DZ '-6' + _mSetStr valMinus5, tmp_Counter : DZ '-5' + _mSetStr valMinus4, tmp_Counter : DZ '-4' + _mSetStr valMinus3, tmp_Counter : DZ '-3' + _mSetStr valMinus2, tmp_Counter : DZ '-2' + _mSetStr valMinus1, tmp_Counter : DZ '-1' + _mSetStr val_0, tmp_Counter : DZ ' 0' + _mSetStr valPlus1, tmp_Counter : DZ '+1' + _mSetStr valPlus2, tmp_Counter : DZ '+2' + _mSetStr valPlus3, tmp_Counter : DZ '+3' + _mSetStr valPlus4, tmp_Counter : DZ '+4' + _mSetStr valPlus5, tmp_Counter : DZ '+5' + _mSetStr valPlus6, tmp_Counter : DZ '+6' + _mSetStr valPlus7, tmp_Counter : DZ '+7' + _mSetStr parScreenX, tmp_Counter : DZ 'X-screen position : ' + _mSetStr parFrameInt, tmp_Counter : DZ 'Frame interrupt : ' + _mSetStr valDash8, tmp_Counter : DZ '--------' + _mSetStr valScorpion, tmp_Counter : DZ 'Scorpion' + _mSetStr valPentagon, tmp_Counter : DZ 'Pentagon' + _mSetStr valSpectrum, tmp_Counter : DZ 'Spectrum' + _mSetStr parVSync, tmp_Counter : DZ 'V-synchronization : ' + _mSetStr val312_50, tmp_Counter : DZ '312/50Hz' + _mSetStr val320_49, tmp_Counter : DZ '320/49Hz' + _mSetStr parQuickStartROM, tmp_Counter : DZ 'Run in mode : ' + _mSetStr valQuickStartSP, tmp_Counter : DZ 'Sprinter' + _mSetStr valDefault, tmp_Counter : DZ 'Default' + _mSetStr valFDD, tmp_Counter : DZ 'FDD ' ; ????? 㬠 ਠ + _mSetStr valHDD, tmp_Counter : DZ 'HDD ' ; ????? 㬠 ਠ + _mSetStr parTrDosA, tmp_Counter : DZ 'TR DOS A:> : ' + _mSetStr parTrDosB, tmp_Counter : DZ 'TR DOS B:> : ' + _mSetStr parTrDosC, tmp_Counter : DZ 'TR DOS C:> : ' + _mSetStr parTrDosD, tmp_Counter : DZ 'TR DOS D:> : ' + _mSetStr parPlayStartUpSound, tmp_Counter : DZ 'Startup sound : ' + _mSetStr parLoadZXroms, tmp_Counter : DZ 'Load ZX ROMs : ' + _mSetStr valLoadZXromsManually, tmp_Counter : DZ 'Manually ' + _mSetStr valLoadZXromsFlag, tmp_Counter : DZ 'By ZX flag' + _mSetStr valLoadZXromsCAD, tmp_Counter : DZ 'On restart' +; + _mSetStr parQS_SetUpHardware, tmp_Counter : DZ 'ZX Mode : ' + _mSetStr valSprinterZX, tmp_Counter : DZ 'Sprinter ZX ' + _mSetStr valPentagon48, tmp_Counter : DZ 'Pentagon 48 ' + _mSetStr valPentagon128, tmp_Counter : DZ 'Pentagon 128' + _mSetStr valPentagon512, tmp_Counter : DZ 'Pentagon 512' + _mSetStr valScorpion256, tmp_Counter : DZ 'Scorpion 256' + _mSetStr valZXSpectrum48, tmp_Counter : DZ 'Spectrum 48 ' + _mSetStr valZXSpectrum128, tmp_Counter : DZ 'Spectrum 128' +; + _mSetStr parQS_SetUpZxRom, tmp_Counter : DZ 'ZX Mode start in : ' + _mSetStr valQS_SetUpBasic128, tmp_Counter : DZ 'Basic 128' + _mSetStr valQS_SetUpBasic48p, tmp_Counter : DZ 'Basic 48+' + _mSetStr valQS_SetUpTrDos, tmp_Counter : DZ 'TR-DOS ' + _mSetStr valQS_SetUpExp, tmp_Counter : DZ 'Expansion' + _mSetStr valQS_SetUpTrDos48, tmp_Counter : DZ 'TR-DOS 48' + _mSetStr valQS_SetUpBasic48, tmp_Counter : DZ 'Basic 48 ' +; _mSetStrRus valLoadZXromsAuto, tmp_Counter : DZ 'On call ' + IF NEW_FEATURE + _mSetStr parSetTime, tmp_Counter : DZ 'Date and time setup : ' + _mSetStr valFolder, tmp_Counter : DB 16,'ENTER',17,0 + ENDIF + IF BETA_BUILD > 0 + _mSetStr extBIOSmsg, tmp_Counter : DZ 'Test build! ',BUILD_DATE,', ',__TIME__ + ELSE + _mSetStr extBIOSmsg, tmp_Counter : DZ 'Release ',RELEASE_BUILD_DATE + ENDIF +; + +MSG_ENG: ; !FIXIT ⠢ _mCreateMsgAddrTable ࠬ "msgStrings.msg_" "msgRusStrings.msg_" + LUA ALLPASS + for i = 0, _c("tmp_Counter")-1, 1 do + _pc("WORD " .. "msgStrings.msg_" .. i) + end + ENDLUA +/* + WORD msgStrings.msg_0 + .. + WORD msgStrings.msg_XX ; XX = tmp_Counter +*/ +MSG_ENG.size EQU $-MSG_ENG +;================================================================================================================================== + +;================================================================================================================================== +tmp_Counter = 0 +msgRusStrings: + _mSetStrRus copyRightPeters, tmp_Counter : DZ 'Copyright (c) 2002 Peters Plus' + _mSetStrRus copyRightSPTeam, tmp_Counter : DZ 'Copyright (c) 2009-', SPTeam_year, ' Sprinter Team' + _mSetStrRus setupBiosVer, tmp_Counter : DZ 'Sprinter BIOS v', BIOS_ver_string + _mSetStrRus setupCopyRight, tmp_Counter : DZ 'Copyright (c) 2002 Peters Plus, (c) 2009-', SPTeam_year, ' Sprinter Team' + _mSetStrRus setupUtilityVer, tmp_Counter : DZ 'SETUP Utility v', SetupVer + _mSetStrRus setupHelpStr1, tmp_Counter : DZ 'ESC : F10 : ࠭ ' + _mSetStrRus setupHelpStr2, tmp_Counter : DZ 'F2 : ࠭ 祭 ',24,32,25,32,26,32,27,' : 롮 㭪' + _mSetStrRus setupHelpStr3, tmp_Counter : DZ 'F5 : 祭 PU/PD/+/- : ' + _mSetStrRus setupHelpStr4, tmp_Counter : DZ 'F7 : 祭 㬮砭 F3 : ' + _mSetStrRus toSetupButton, tmp_Counter : DZ ' 室 SETUP' +;_mSetStrRus forCtrlBootButton, tmp_Counter : DZ ' 㧪 Recovery' + _mSetStrRus forAltBootButton, tmp_Counter : DZ ' ୠ⨢ 㧪' + _mSetStrRus cmosChecksumErr, tmp_Counter : DZ '! CMOS, ' + _mSetStrRus cmosDateTimeErr, tmp_Counter : DZ '! / CMOS, ' + _mSetStrRus detectIdePrMA, tmp_Counter : DZ ' ।塞 ࢨ IDE Master ... [F4 ய᪠] ' + _mSetStrRus detectIdePrSL, tmp_Counter : DZ ' ।塞 ࢨ IDE Slave ... [F4 ய᪠]' + _mSetStrRus detectIdeSecMA, tmp_Counter : DZ ' ।塞 IDE Master ... [F4 ய᪠]' + _mSetStrRus detectIdeSecSL, tmp_Counter : DZ ' ।塞 IDE Slave ... [F4 ய᪠]' + _mSetStrRus ideUnknown, tmp_Counter : DZ ' ' + _mSetStrRus ideNone, tmp_Counter : DZ ' ' + _mSetStrRus ideSkiped, tmp_Counter : DZ 'ய饭 ' + _mSetStrRus ideFail, tmp_Counter : DZ ' । ' + _mSetStrRus spModel, tmp_Counter : DZ ' : ' +.str_ACEX_MODEL EQU $$$+7 ; 㪠⥫ ப ஬ ; !FIXIT ?  १ FN_CRIPT.Acex_ver ? + _mSetStrRus spCNFver, tmp_Counter : DZ ' 1K30 : v' + _mSetStrRus spMemory, tmp_Counter : DZ ' : ' + _mSetStrRus cmosFound, tmp_Counter : DZ 'CMOS : ' + _mSetStrRus cmosNone, tmp_Counter : DZ 'CMOS : ' + _mSetStrRus memoryAvailable, tmp_Counter : DZ '㯭 : ' +; _mSetStrRus unknownSTR1, tmp_Counter : DZ '7' +; _mSetStrRus unknownSTR2, tmp_Counter : DZ '8' + _mSetStrRus boardID, tmp_Counter : DZ 'ID : ' + _mSetStrRus bootFdd, tmp_Counter : DZ ' ᪥' + _mSetStrRus bootHdd, tmp_Counter : DZ ' HDD ' + _mSetStrRus bootCd, tmp_Counter : DZ ' CD-ROM ' + _mSetStrRus bootRamDrv, tmp_Counter : DZ ' RAM ᪠' + _mSetStrRus bootRecovery, tmp_Counter : DZ ' ⠭' + _mSetStrRus bootAltDrv, tmp_Counter : DZ 'ୠ⨢ ' + _mSetStrRus bootFail, tmp_Counter : DZ ' ' + _mSetStrRus bootOk, tmp_Counter : DZ ' OK' + _mSetStrRus afterBootFail, tmp_Counter : DZ ' , ZX-MODE . . .' + _mSetStrRus errorZXmode, tmp_Counter : DZ '訡! ० Spectrum 㤠. CTRL+ALT+DEL RESET.' +; + _mSetStrRus parLang, tmp_Counter : DZ ' (language) : ' + _mSetStrRus valLangEng, tmp_Counter : DZ 'English ' + _mSetStrRus valLangRus, tmp_Counter : DZ '᪨ ' + _mSetStrRus parMemTest, tmp_Counter : DZ '஢ : ' + _mSetStrRus valDisabled, tmp_Counter : DZ '⪫祭' + _mSetStrRus valEnabled, tmp_Counter : DZ '祭 ' + _mSetStrRus parSaveRAMdrvs, tmp_Counter : DZ '࠭ RAM-᪮ : ' + _mSetStrRus parUpdBios, tmp_Counter : DZ ' BIOS : ' + _mSetStrRus parStartDelay, tmp_Counter : DZ '砫쭮 : ' + _mSetStrRus valShort, tmp_Counter : DZ '⪮ ' + _mSetStrRus valLong, tmp_Counter : DZ ' ' + _mSetStrRus parTypRate, tmp_Counter : DZ ' ⮯ : ' + _mSetStrRus val_6, tmp_Counter : DZ '6 ' + _mSetStrRus val_8, tmp_Counter : DZ '8 ' + _mSetStrRus val_10, tmp_Counter : DZ '10' + _mSetStrRus val_12, tmp_Counter : DZ '12' + _mSetStrRus val_15, tmp_Counter : DZ '15' + _mSetStrRus val_20, tmp_Counter : DZ '20' + _mSetStrRus val_24, tmp_Counter : DZ '24' + _mSetStrRus val_30, tmp_Counter : DZ '30' + _mSetStrRus parTypDelay, tmp_Counter : DZ 'প ⮯ (ᥪ): ' + _mSetStrRus val_250, tmp_Counter : DZ '250 ' + _mSetStrRus val_500, tmp_Counter : DZ '500 ' + _mSetStrRus val_750, tmp_Counter : DZ '750 ' + _mSetStrRus val_1000, tmp_Counter : DZ '1000' + _mSetStrRus parRebootMsg, tmp_Counter : DZ '饭 १㧪 : ' + _mSetStrRus parSysDsk, tmp_Counter : DZ '⥬ : ' + _mSetStrRus val1stFDD, tmp_Counter : DZ '1- FDD' + _mSetStrRus val2ndFDD, tmp_Counter : DZ '2- FDD' + _mSetStrRus val1stIDE, tmp_Counter : DZ '1- IDE' + _mSetStrRus val2ndIDE, tmp_Counter : DZ '2- IDE' + _mSetStrRus val3rdIDE, tmp_Counter : DZ '3- IDE' + _mSetStrRus val4thIDE, tmp_Counter : DZ '4- IDE' + _mSetStrRus valRamDsk, tmp_Counter : DZ 'RAM-DISK' + _mSetStrRus valRecovery, tmp_Counter : DZ 'RECOVERY' + _mSetStrRus parAltSysDsk, tmp_Counter : DZ '. ⥬ : ' + _mSetStrRus parFddFirst, tmp_Counter : DZ 'FDD : ' + _mSetStrRus valAuto, tmp_Counter : DZ ' ' +; _mSetStrRus val720, tmp_Counter : DZ '720K ' +; _mSetStrRus val1440, tmp_Counter : DZ '1.44M ' + _mSetStrRus val35, tmp_Counter : DZ '3.5" ' + _mSetStrRus val525, tmp_Counter : DZ '5.25" ' + _mSetStrRus valDash6, tmp_Counter : DZ '------' + _mSetStrRus parFddSecond, tmp_Counter : DZ 'FDD ன : ' + _mSetStrRus parPriIdeMA, tmp_Counter : DZ 'Primary IDE Master',#FF,' : ' + _mSetStrRus valSetup, tmp_Counter : DZ 'Setup ' + _mSetStrRus valCdRom, tmp_Counter : DZ 'CD-ROM' + _mSetStrRus parPriIdeSl, tmp_Counter : DZ 'Primary IDE Slave',#FF,' : ' + _mSetStrRus parSecIdeMA, tmp_Counter : DZ 'Secondary IDE Master',#FF,' : ' + _mSetStrRus parSecIdeSl, tmp_Counter : DZ 'Secondary IDE Slave',#FF,' : ' +; IF HDDwriteProtect +; _mSetStrRus parHddWrPr, tmp_Counter : DZ ' HDD : ' +; ENDIF + _mSetStrRus parScreenY, tmp_Counter : DZ ' ࠭ Y : ' + _mSetStrRus valMinus7, tmp_Counter : DZ '-7' + _mSetStrRus valMinus6, tmp_Counter : DZ '-6' + _mSetStrRus valMinus5, tmp_Counter : DZ '-5' + _mSetStrRus valMinus4, tmp_Counter : DZ '-4' + _mSetStrRus valMinus3, tmp_Counter : DZ '-3' + _mSetStrRus valMinus2, tmp_Counter : DZ '-2' + _mSetStrRus valMinus1, tmp_Counter : DZ '-1' + _mSetStrRus val_0, tmp_Counter : DZ ' 0' + _mSetStrRus valPlus1, tmp_Counter : DZ '+1' + _mSetStrRus valPlus2, tmp_Counter : DZ '+2' + _mSetStrRus valPlus3, tmp_Counter : DZ '+3' + _mSetStrRus valPlus4, tmp_Counter : DZ '+4' + _mSetStrRus valPlus5, tmp_Counter : DZ '+5' + _mSetStrRus valPlus6, tmp_Counter : DZ '+6' + _mSetStrRus valPlus7, tmp_Counter : DZ '+7' + _mSetStrRus parScreenX, tmp_Counter : DZ ' ࠭ X : ' + _mSetStrRus parFrameInt, tmp_Counter : DZ '஢ 뢠 : ' + _mSetStrRus valDash8, tmp_Counter : DZ '--------' + _mSetStrRus valScorpion, tmp_Counter : DZ '௨' + _mSetStrRus valPentagon, tmp_Counter : DZ '⠣' + _mSetStrRus valSpectrum, tmp_Counter : DZ '' + _mSetStrRus parVSync, tmp_Counter : DZ '. ᨭ஭ : ' + _mSetStrRus val312_50, tmp_Counter : DZ '312/50' + _mSetStrRus val320_49, tmp_Counter : DZ '320/49' + _mSetStrRus parQuickStartROM, tmp_Counter : DZ ' ० : ' + _mSetStrRus valQuickStartSP, tmp_Counter : DZ 'ਭ' + _mSetStrRus valDefault, tmp_Counter : DZ ' 㬮砭' + _mSetStrRus valFDD, tmp_Counter : DZ 'FDD ' + _mSetStrRus valHDD, tmp_Counter : DZ 'HDD ' + _mSetStrRus parTrDosA, tmp_Counter : DZ 'TR DOS A:> : ' + _mSetStrRus parTrDosB, tmp_Counter : DZ 'TR DOS B:> : ' + _mSetStrRus parTrDosC, tmp_Counter : DZ 'TR DOS C:> : ' + _mSetStrRus parTrDosD, tmp_Counter : DZ 'TR DOS D:> : ' + _mSetStrRus parPlayStartUpSound, tmp_Counter : DZ '⮢ : ' + _mSetStrRus parLoadZXroms, tmp_Counter : DZ '㦠 ZX : ' + _mSetStrRus valLoadZXromsManually, tmp_Counter : DZ ' ' + _mSetStrRus valLoadZXromsFlag, tmp_Counter : DZ ' 䫠 ZX ' + _mSetStrRus valLoadZXromsCAD, tmp_Counter : DZ ' ' +; + _mSetStrRus parQS_SetUpHardware, tmp_Counter : DZ ' ZX : ' + _mSetStrRus valSprinterZX, tmp_Counter : DZ 'ਭ ZX ' + _mSetStrRus valPentagon48, tmp_Counter : DZ '⠣ 48 ' + _mSetStrRus valPentagon128, tmp_Counter : DZ '⠣ 128' + _mSetStrRus valPentagon512, tmp_Counter : DZ '⠣ 512' + _mSetStrRus valScorpion256, tmp_Counter : DZ '௨ 256' + _mSetStrRus valZXSpectrum48, tmp_Counter : DZ ' 48 ' + _mSetStrRus valZXSpectrum128, tmp_Counter : DZ ' 128' +; + _mSetStrRus parQS_SetUpZxRom, tmp_Counter : DZ ' ० ZX : ' + _mSetStrRus valQS_SetUpBasic128, tmp_Counter : DZ 'Basic 128' + _mSetStrRus valQS_SetUpBasic48p, tmp_Counter : DZ 'Basic 48+' + _mSetStrRus valQS_SetUpTrDos, tmp_Counter : DZ 'TR-DOS ' + _mSetStrRus valQS_SetUpExp, tmp_Counter : DZ 'Expansion' + _mSetStrRus valQS_SetUpTrDos48, tmp_Counter : DZ 'TR-DOS 48' + _mSetStrRus valQS_SetUpBasic48, tmp_Counter : DZ 'Basic 48 ' +; _mSetStrRus valLoadZXromsAuto, tmp_Counter : DZ ' 맮 ' + IF NEW_FEATURE + _mSetStrRus parSetTime, tmp_Counter : DZ ' ६ : ' + _mSetStrRus valFolder, tmp_Counter : DB 16,'',17,0 + ENDIF + IF BETA_BUILD > 0 + _mSetStrRus extBIOSmsg, tmp_Counter : DZ '⮢ ᡮઠ! ',BUILD_DATE,', ',__TIME__ + ELSE + _mSetStrRus extBIOSmsg, tmp_Counter : DZ ' ',RELEASE_BUILD_DATE + ENDIF +; +MSG_RUS: + _mCreateMsgAddrTable +MSG_RUS.size EQU $-MSG_RUS +;================================================================================================================================== + ASSERT MSG_ENG.size = MSG_RUS.size, "ERROR IN MESSAGE STRINGS: RUS and ENG do not match" +MSG_TABLE.Size EQU MSG_RUS.size ; \ No newline at end of file diff --git a/src/bios/rom/SETUP/startup_sound.asm b/bios/rom/SETUP/startup_sound.asm similarity index 95% rename from src/bios/rom/SETUP/startup_sound.asm rename to bios/rom/SETUP/startup_sound.asm index f4980ea..acecb83 100644 --- a/src/bios/rom/SETUP/startup_sound.asm +++ b/bios/rom/SETUP/startup_sound.asm @@ -1,164 +1,164 @@ -; CODE BY ᠭ -=TmK deMarche=- -; play frame -; use: af,hl,de,bc 251 -STARTUP_SOUND: LD HL,.BYTE_POS - LD A,(HL) - LD C,SP_SND.AY - ; - AND A - JR NZ,.no_init - ; - LD DE,7*256 + %0011'1011 - LD B,high SP_SND.AY.CTRL - OUT (C),D - LD B,high SP_SND.AY.DATA - OUT (C),E - ; -.no_init: CP .volDataSize - JR C,.play - ;-- mus off -.mute: XOR A - LD E,A -.offLp: CALL .set_regs - CP 14 - JR NZ,.offLp - ; - LD A,7 - DEC E - CALL .set_regs - RET - ; -.play: ; - ;--- set tone - LD HL,(.WORD_TONE) - ;A=0 - LD A,4 ;REG C -.playToneLp: LD B,high SP_SND.AY.CTRL - OUT (C),A - LD B,high SP_SND.AY.DATA + 1 - OUTI - INC A - CP 6 - JR NZ,.playToneLp - ; - LD (.WORD_TONE),HL - ;--- set volume -.playVol: LD HL,(.WORD_VOL) - LD A,10 - LD E,(HL) - INC HL -.playVolLp: CALL .set_regs - ; - LD (.WORD_VOL),HL - LD HL,.BYTE_POS - INC (HL) - RET - ; ; -.set_regs: LD B,high SP_SND.AY.CTRL - OUT (C),A - LD B,high SP_SND.AY.DATA - OUT (C),E - INC A - RET -;----------------------------------------------------------------------- -.BYTE_POS: DB 0 -.WORD_VOL: DW .volData -.WORD_TONE: DW .toneData -;----------------------------------------------------------------------- -.toneData: DW #022, #044, #088, #110, #220, #440 - DW #880, #440, #220, #110, #088, #044 - DW #022, #044, #088, #110, #220, #440 - DW #880, #440, #220, #110, #088, #044 - DW #022 -.volData: DB #02, #04, #06, #08, #0A, #0C - DB #0E, #0D, #0C, #0B, #0A, #09 - DB #08, #07, #06, #05, #04, #03 - DB #02, #06, #08, #0A, #0C, #0E - DB #0F -.volDataSize EQU $ - .volData - -.codeEnd: DISPLAY "StartUp Sound size: ",/A,.codeEnd - STARTUP_SOUND - - -/* -; CODE BY ᠭ -=TmK deMarche=- -; play frame -; use: af,hl,de,bc 251 -STARTUP_SOUND: LD HL,.BYTE_POS - LD A,(HL) - LD C,SP_SND.AY - ; - AND A - JR NZ,.no_init - ; - LD DE,7*256 + %0011'1011 - LD B,high SP_SND.AY.CTRL - OUT (C),D - LD B,high SP_SND.AY.DATA - OUT (C),E - ; -.no_init: CP .volDataSize - JR C,.play - ;-- mus off -.mute: XOR A - LD E,A -.offLp: CALL .set_regs - CP 14 - JR NZ,.offLp - ; - LD A,7 - DEC E - CALL .set_regs - RET - ; -.play: ; - ;--- set tone - LD HL,(.WORD_TONE) - ;A=0 - LD A,4 ;REG C -.playToneLp: LD B,high SP_SND.AY.CTRL - OUT (C),A - LD B,high SP_SND.AY.DATA + 1 - OUTI - INC A - CP 6 - JR NZ,.playToneLp - ; - LD (.WORD_TONE),HL - ;--- set volume -.playVol: LD HL,(.WORD_VOL) - LD A,10 - LD E,(HL) - INC HL -.playVolLp: CALL .set_regs - ; - LD (.WORD_VOL),HL - LD HL,.BYTE_POS - INC (HL) - RET - ; ; -.set_regs: LD B,high SP_SND.AY.CTRL - OUT (C),A - LD B,high SP_SND.AY.DATA - OUT (C),E - INC A - RET -;----------------------------------------------------------------------- -.BYTE_POS: DB 0 -.WORD_VOL: DW .volData -.WORD_TONE: DW .toneData -;----------------------------------------------------------------------- -.toneData: DW #022, #044, #088, #110, #220, #440 - DW #880, #440, #220, #110, #088, #044 - DW #022, #044, #088, #110, #220, #440 - DW #880, #440, #220, #110, #088, #044 - DW #022 -.volData: DB #02, #04, #06, #08, #0A, #0C - DB #0E, #0D, #0C, #0B, #0A, #09 - DB #08, #07, #06, #05, #04, #03 - DB #02, #06, #08, #0A, #0C, #0E - DB #0F -.volDataSize EQU $ - .volData - -.codeEnd: DISPLAY "StartUp Sound size: ",/A,.codeEnd - STARTUP_SOUND +; CODE BY ᠭ -=TmK deMarche=- +; play frame +; use: af,hl,de,bc 251 +STARTUP_SOUND: LD HL,.BYTE_POS + LD A,(HL) + LD C,SP_SND.AY + ; + AND A + JR NZ,.no_init + ; + LD DE,7*256 + %0011'1011 + LD B,high SP_SND.AY.CTRL + OUT (C),D + LD B,high SP_SND.AY.DATA + OUT (C),E + ; +.no_init: CP .volDataSize + JR C,.play + ;-- mus off +.mute: XOR A + LD E,A +.offLp: CALL .set_regs + CP 14 + JR NZ,.offLp + ; + LD A,7 + DEC E + CALL .set_regs + RET + ; +.play: ; + ;--- set tone + LD HL,(.WORD_TONE) + ;A=0 + LD A,4 ;REG C +.playToneLp: LD B,high SP_SND.AY.CTRL + OUT (C),A + LD B,high SP_SND.AY.DATA + 1 + OUTI + INC A + CP 6 + JR NZ,.playToneLp + ; + LD (.WORD_TONE),HL + ;--- set volume +.playVol: LD HL,(.WORD_VOL) + LD A,10 + LD E,(HL) + INC HL +.playVolLp: CALL .set_regs + ; + LD (.WORD_VOL),HL + LD HL,.BYTE_POS + INC (HL) + RET + ; ; +.set_regs: LD B,high SP_SND.AY.CTRL + OUT (C),A + LD B,high SP_SND.AY.DATA + OUT (C),E + INC A + RET +;----------------------------------------------------------------------- +.BYTE_POS: DB 0 +.WORD_VOL: DW .volData +.WORD_TONE: DW .toneData +;----------------------------------------------------------------------- +.toneData: DW #022, #044, #088, #110, #220, #440 + DW #880, #440, #220, #110, #088, #044 + DW #022, #044, #088, #110, #220, #440 + DW #880, #440, #220, #110, #088, #044 + DW #022 +.volData: DB #02, #04, #06, #08, #0A, #0C + DB #0E, #0D, #0C, #0B, #0A, #09 + DB #08, #07, #06, #05, #04, #03 + DB #02, #06, #08, #0A, #0C, #0E + DB #0F +.volDataSize EQU $ - .volData + +.codeEnd: DISPLAY "StartUp Sound size: ",/A,.codeEnd - STARTUP_SOUND + + +/* +; CODE BY ᠭ -=TmK deMarche=- +; play frame +; use: af,hl,de,bc 251 +STARTUP_SOUND: LD HL,.BYTE_POS + LD A,(HL) + LD C,SP_SND.AY + ; + AND A + JR NZ,.no_init + ; + LD DE,7*256 + %0011'1011 + LD B,high SP_SND.AY.CTRL + OUT (C),D + LD B,high SP_SND.AY.DATA + OUT (C),E + ; +.no_init: CP .volDataSize + JR C,.play + ;-- mus off +.mute: XOR A + LD E,A +.offLp: CALL .set_regs + CP 14 + JR NZ,.offLp + ; + LD A,7 + DEC E + CALL .set_regs + RET + ; +.play: ; + ;--- set tone + LD HL,(.WORD_TONE) + ;A=0 + LD A,4 ;REG C +.playToneLp: LD B,high SP_SND.AY.CTRL + OUT (C),A + LD B,high SP_SND.AY.DATA + 1 + OUTI + INC A + CP 6 + JR NZ,.playToneLp + ; + LD (.WORD_TONE),HL + ;--- set volume +.playVol: LD HL,(.WORD_VOL) + LD A,10 + LD E,(HL) + INC HL +.playVolLp: CALL .set_regs + ; + LD (.WORD_VOL),HL + LD HL,.BYTE_POS + INC (HL) + RET + ; ; +.set_regs: LD B,high SP_SND.AY.CTRL + OUT (C),A + LD B,high SP_SND.AY.DATA + OUT (C),E + INC A + RET +;----------------------------------------------------------------------- +.BYTE_POS: DB 0 +.WORD_VOL: DW .volData +.WORD_TONE: DW .toneData +;----------------------------------------------------------------------- +.toneData: DW #022, #044, #088, #110, #220, #440 + DW #880, #440, #220, #110, #088, #044 + DW #022, #044, #088, #110, #220, #440 + DW #880, #440, #220, #110, #088, #044 + DW #022 +.volData: DB #02, #04, #06, #08, #0A, #0C + DB #0E, #0D, #0C, #0B, #0A, #09 + DB #08, #07, #06, #05, #04, #03 + DB #02, #06, #08, #0A, #0C, #0E + DB #0F +.volDataSize EQU $ - .volData + +.codeEnd: DISPLAY "StartUp Sound size: ",/A,.codeEnd - STARTUP_SOUND */ \ No newline at end of file diff --git a/src/bios/rom/ZX/ZX_FUNC.ASM b/bios/rom/ZX/ZX_FUNC.ASM similarity index 100% rename from src/bios/rom/ZX/ZX_FUNC.ASM rename to bios/rom/ZX/ZX_FUNC.ASM diff --git a/src/bios/rom/ZX/ZX_MENU.ASM b/bios/rom/ZX/ZX_MENU.ASM similarity index 95% rename from src/bios/rom/ZX/ZX_MENU.ASM rename to bios/rom/ZX/ZX_MENU.ASM index c0de839..4a14cf0 100644 --- a/src/bios/rom/ZX/ZX_MENU.ASM +++ b/bios/rom/ZX/ZX_MENU.ASM @@ -1,752 +1,752 @@ -; "MENU PROGRAMS." -;********************************* -; FOR INCLUDE !!! -;********************************* -; 㦨 -; HL - ⠡ ணࠬ -; A - ⠡ -; ᫨ A=-1, , -; 믮 -;***************************** -EXEC_PNT: - INC A - RET Z - ;!FIXIT 祬 ⠪? - ; DEC A - ; JR Z,EXEC_HL - ; LD D,0 - ; LD E,A - ; XOR A - ; ADC HL,DE - ; ADC HL,DE - ; -EXEC_PNT_LOOP: - DEC A - JR Z,EXEC_HL - INC HL - INC HL - JR EXEC_PNT_LOOP -EXEC_HL: - LD E,(HL) - INC HL - LD D,(HL) - INC HL - EX DE,HL - JP (HL) -RET_FROM_M: - POP HL - RET - -;**************************************** -; MENU_128 -;**************************************** -; : DE - -; BC - -; : A - ࠭ 㭪 -;**************************************** -RUN_MENU: - PUSH IX - PUSH DE ; DE - MENU - PUSH BC ; BC - len_menu - - LD A,(DE) - DEC A ; ᫮ CMD - CP 9 ; !HARDCODE ᬠ쭮 ᫮ 㭪⮢ - JR C,RUN_M_1 -RUN_MN_ERR: - POP BC - POP DE - LD A,#FF ; ஬ 255 - 訡 - POP IX - RET -RUN_M_1: - LD A,(ZX_VARS.PROG.SWAP_ROM) - CP #F5 ; ࠢ PUSH AF - JR NZ,RUN_MN_ERR - - - LD HL,LEN_P_M - ADD HL,BC ; HL - 㦭 - LD B,H ; HL -> BC - LD C,L - LD HL,(ZX_VARS.WORK_SPACE) ; HL - 砫 ࠡ - - PUSH BC - PUSH HL - - CALL C_1655 ; ࠡ - - POP DE - PUSH DE ; 砫 ࠡ - - LD BC,LEN_P_M ; ணࠬ - LD HL,MENU_128 ; ᠬ ணࠬ - LDIR ; ணࠬ ६饭. DE - MENU - POP BC - PUSH BC ; 砫 ணࠬ - - PUSH DE ; ࠭ MENU - LD DE,MN_128_S ; shifter - CALL SHIFTER ; ᮮ⢥⢨ MEM - POP DE ; MENU - - POP HL ; 砫 ணࠬ - POP IX ; - POP BC ; - EX (SP),HL ; HL - - LDIR ; ६ MENU - - POP HL ; ணࠬ MENU - PUSH HL - PUSH IX ; ࠡ. - CALL JP_HL ; 맮 ணࠬ MENU - POP BC ; ࠡ - POP HL ; 砫 ணࠬ - - PUSH AF ; ࠭ 롮 - CALL C_19E8 ; ᢮ !! - POP AF ; 롮 - POP IX - RET ; ணࠬ RUN_MENU -JP_HL: JP (HL) -;************************************** -; 128k MENU -;************************************** -;!HARDCODE -MENU_PROG EQU #25B9 ; #25B9 in sp_128.asm -;SWAP_ROM EQU #5B00 -NEW_SP EQU #1F45 ; L1F45: in sp_128.asm -RET_SP EQU #1F20 ; L1F20: in sp_128.asm - -;************************************** -; ணࠬ 맮 MENU_128 . -;************************************** -MN_128_S: - DB SH_1 - MENU_128+1 - DB SH_2 - MENU_128+1 - DB SH_3 - MENU_128+1 - DB SH_4 - MENU_128+1 - DB SH_5 - MENU_128 - DB SH_6 - MENU_128 - DB SH_7 - MENU_128 - DB SH_8 - MENU_128 - DB SH_9 - MENU_128 - DB SH_A - MENU_128 - DB SH_B - MENU_128 - DB SH_C - MENU_128 - DB 0 -;************************************** -; ணࠬ ६頥 -;************************************** -MENU_128: - XOR A - OUT (SYS_PORT.RAM),A - CALL ZX_VARS.PROG.SWAP_ROM - CALL NEW_SP - -SH_1: LD DE,MENU_DAT - MENU_128 - LD HL,ZX_VARS.MENU_TBL.JUMP - LD BC,4 - LDIR - -SH_2: LD HL,MENU_128_E - MENU_128 - LD (ZX_VARS.MENU_TBL.JUMP),HL -SH_3: LD HL,MENU_128_E2 - MENU_128 - LD (ZX_VARS.MENU_TBL.TEXT),HL - JP MENU_PROG - -RET_M EQU $-MENU_128 -SH_4: LD HL,MENU_DAT - MENU_128 - LD DE,ZX_VARS.MENU_TBL.JUMP - LD BC,4 - LDIR - - CALL RET_SP - CALL ZX_VARS.PROG.SWAP_ROM - EX AF,AF' - LD A,SYS_PORT.EXTENSION - OUT (SYS_PORT.ROM),A - EX AF,AF' - RET -MENU_DAT: - DW 0,0 -MENU_128_E: - DB 8 - DB 0 -SH_5: DW RET_M - DB 1 -SH_6: DW RET_M - DB 2 -SH_7: DW RET_M - DB 3 -SH_8: DW RET_M - DB 4 -SH_9: DW RET_M - DB 5 -SH_A: DW RET_M - DB 6 -SH_B: DW RET_M - DB 7 -SH_C: DW RET_M -MENU_128_E2: - -LEN_P_M EQU $-MENU_128 - -;************************************** -; RST 30 - 祭 BC SPACES HL -; #19E8 - ᢮ BC spaces HL -; HL - ࠡ. 祩 -; BC - ணࠬ -; DE - ६饭 -SHIFTER: - LD A,(DE) ; (DE) - SHIFT IN PROG - AND A - RET Z - INC DE - LD L,A - LD H,0 - - ADD HL,BC ; HL - ADRESS FOR SHIFT - LD A,(HL) ; (HL)=(HL)+BC - ADD A,C - LD (HL),A - INC HL - LD A,(HL) - ADC A,B - LD (HL),A - JR SHIFTER - -;******************************************* -; : 1 - १ -; 2 - ᫮ 㭪⮢ +1 -; , 0FFh ( COPY ) -; 㭪 砭 ⮬ -; , 7- ⮬ + ப !! -;******************************************* -BASIC_MENU: -; LD A,(HL) -; CP 'S' -; JP Z,SET_SYSTEM - - LD DE,(ZX_VARS.CH_ADR) - PUSH DE - LD (ZX_VARS.CH_ADR),HL - CALL_48X #1C8C ; SYMBOL VAR - CALL_48X #2BF1 ; input txt !!! - ; DE - adr - ; BC - len - PUSH DE - PUSH BC - INC DE - CALL TST_M - JR C,NO_EXE_M - CALL RUN_MENU - LD (IY+0),255 -NO_EXE_M: - POP BC - POP DE - LD (DE),A - POP HL - LD (ZX_VARS.CH_ADR),HL - JP SW_ROM -TST_M: - PUSH DE - PUSH BC - EX DE,HL - LD D,(HL) - INC D - LD A,255 - CPIR - JR NZ,ERR_TST_M -LOOP_TST_M: - LD A,B - OR C - JR Z,ERR_TST_M - - BIT 7,(HL) - INC HL - DEC BC - JR Z,LOOP_TST_M - DEC D - JR NZ,LOOP_TST_M - POP BC - POP DE - AND A - RET - -ERR_TST_M: - POP BC - POP DE - LD A,255 - SCF - RET - -;************************************** - -CALL_DOS_MOVE: - LD HL,DOS_PROG - LD DE,DOS_PROG.Exec - LD BC,DOS_PROG.Size - LDIR - RET -; -; HL - , BC - -CALL_DOS1: - LD C,(HL) - INC HL - LD B,0 - LD DE,(ZX_VARS.E_LINE) - LD (ZX_VARS.CH_ADR),DE - LDIR - LD (ZX_VARS.WORK_SPACE),DE - LD (ZX_VARS.STK_BOT),DE - LD (ZX_VARS.STK_END),DE - CALL CALL_DOS_MOVE - JP DOS_PROG.Exec - -DOS_PROG: - DISP #5C00 - DOS_PROG.Size ;!HARDCODE - //DOS_PROG: -.Exec: PUSH AF - XOR A - OUT (SYS_PORT.RAM),A - POP AF - //DOS_PROG_A+1: -.Patch+2: CALL #3D03 ;!HARDCODE - PUSH AF - ;!FIXIT ᤥ १ ᫮ 樨 ZX_ROM_BIOS - //LD A,0 - //OUT (CNF_PORT),A - LD A,SYS_PORT.EXTENSION - OUT (SYS_PORT.ROM),A ;!!!!! - POP AF - RET - //DOS_PROG_LEN -.Size EQU $ - .Exec - ENT - - ;????? த, ᯮ -CONT_PROG: - LD HL,#1AFD ;!HARDCODE COM_LN: - PUSH HL - LD HL,#5B00 ;!HARDCODE - PUSH HL - LD DE,ZX_VARS.FLG_INPUT - LD BC,1 - LD A,#E8 ;!HARDCODE - LD (DE),A - JP SW_ROM -CALL_DOS: - PUSH HL - PUSH DE - PUSH BC - PUSH AF - CALL CALL_DOS_MOVE - LD A,#13 ;!HARDCODE #13 AUTO_1303 - LD (DOS_PROG.Patch),A - POP AF - POP BC - POP DE - POP HL - JP DOS_PROG.Exec - ; -; - -;=======================================================================; -;=======================================================================; -;=======================================================================; -SERVICE: - //LD HL,SR_TAB - LD DE,SR_MENU - LD BC,SR_MENU.Size - //PUSH HL - CALL RUN_MENU ;09f3 - LD HL,SR_TAB - //POP HL - CALL EXEC_PNT - JR SERVICE - -SR_TAB: DW RUN_DISK_TRD - DW GOTO_TRDOS.m128 - DW GOTO_TRDOS.m48 - DW TURBO_OFF - DW TURBO_ON - DW CLEAR_RAM - DW RET_FROM_M - -; DC - every last character of a string will have bit 7 set -SR_MENU: - BYTE 8 ; ⢮ 㭪⮢ - BYTE 'Options ',#FF ; - DC 'RUN disk.trd' - DC '128 TR-DOS' - DC '48 TR-DOS' - DC 'TURBO OFF ' - DC 'TURBO ON ' - DC 'Clear RAM' - DC 'RETURN' - DC " " ; થ -.Size EQU $-SR_MENU - -;***************************** - -;SR_48R: -GOTO_TRDOS: -.m128: LD A,#10 - JR .RUN -;SR_48: -.m48: LD A,#30 ; ⮯ PORT_128 !!! -;SR_48A: -.RUN: LD BC,ZX_MEM_PORT.Pentagon - OUT (C),A - LD BC,0 ; 0 !! - PUSH BC - LD BC,#3D2F ; DOS ! - PUSH BC - JP SW_ROM - -;******************************* -TURBO_OFF: - LD A,BIOS.FN_TURBO.OFF - LD C,BIOS.FN_TURBO - JP_to_BIOS -TURBO_ON: - LD A,BIOS.FN_TURBO.ON - LD C,BIOS.FN_TURBO - JP_to_BIOS - -;******************************* - -CLEAR_RAM: - DI - ; [ ] free zx pages! - LD BC,BIOS.REINIT.FREE_NO_ZX_MEM - ;LD C,BIOS.FullInit - ; - CALL ToBIOS_FromEXT - ; ⪥ ᯥ㬠 DSS CAD - ; 㤥 (RAM Blocks ᢮), - ; ⮬ ⪫砥 墠 . - LD A,ACEX.RET_PORT - LD BC,BIOS.SET_PORTS - ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 - ;CALL ToBIOS_3D13 - CALL ToBIOS_FromEXT - ; - EI - RET - - -;***************************** -; *** MENU Hardware *** -;***************************** - -Hardware_Menu: - LD HL,Hardware_Menu_TAB - LD DE,Hardware_Menu_STR - LD BC,Hardware_Menu_STR.Size - PUSH HL - CALL RUN_MENU - POP HL - CALL EXEC_PNT - JR Hardware_Menu - -Hardware_Menu_TAB: -; DW TR_DOS -; DW SP_DOS - DW SPRINTER_ZX - DW SCORPION_256 - DW Pentagon_48 - DW PENTAGON_128 - DW PENTAGON_512 - DW ZX_SPECTRUM_128 - DW SPRINTER_reset ;SPRINTER_2X - DW RET_FROM_M - -; DC - every last character of a string will have bit 7 set -Hardware_Menu_STR: - BYTE 9 ; ⢮ 㭪⮢ - BYTE 'Hardware',#FF ; - DC 'Sprinter ZX ' - DC 'Scorpion 256' - DC 'Pentagon 48 ' - DC 'Pentagon 128' - DC 'Pentagon 512' - DC 'Spectrum 128' - DC 'Restart ' - DC 'RETURN' - DC " " ; થ -.Size EQU $ - Hardware_Menu_STR - -;!TODO ⪫ 7FFD 1FFD ६ १ ⪫祭 1FFD cnf_port -; 饫 7FFD vROM 㭥 ࠭ BASIC128. -; ᨬ ⠭ ⮢ 롨 ய뢠 AY -; -;************************************************** -SPRINTER_ZX: LD L,0 ; 窠 室 -.custom_ROM: LD H,BIOS.RST_CONF.SP97_1 - LD BC,#FE*256 + %0000'0010 ; = GOTO_SPEC reg B, reg A - LD DE,4*256 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_0 ; !HARDCODE 4 - 뤥 Scorpion 256k. 2+6+8 ࠭ - JR PREPARE_TO_START_ZX - ; -ZX_SPECTRUM_128: - LD L,0 ; 窠 室 -.custom_ROM: LD H,BIOS.RST_CONF.AY8910 - LD BC,#FA*256 + %1000'0011 ; = GOTO_SPEC reg B, reg A - JR PENTAGON_128.zx - ; -SCORPION_256: LD L,0 ; 窠 室 -.custom_ROM: LD H,BIOS.RST_CONF.AY8910 - LD BC,#FE*256 + %1000'0001 ; = GOTO_SPEC reg B, reg A - LD DE,4*256 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_1 ; !HARDCODE 4 - 뤥 Scorpion 256k. 2+6+8 ࠭ -PREPARE_TO_START_ZX: - DI - LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON - OUT (SYS_PORT.ROM),A - LD A,SYS_PAGE - OUT (SLOT3),A - ; - PUSH HL - PUSH BC - PUSH DE - PUSH DE - ; - LD C,H - CALL ToBIOS_FromEXT - ; - POP DE - LD B,D - CALL MANAGE_ZX_PAGES.FN_ENTRANCE.API - JR C,.loop_rst - ; - POP DE - POP BC - POP HL - ; - LD D,L ; !HARDCODE 窠 室 ᯥ㬠 - ; LD H,A - ; LD A,(SYS_PAGE.Block_ID.vROM) - ; LD L,A - LD HL,(SYS_PAGE.Block_ID.vROM) - LD H,A - LD A,C - JP GOTO_SPECTRUM - ; -.loop_rst: LD BC,BIOS.REINIT.HARD_RESET - CALL ToBIOS_FromEXT - JR .loop_rst - ; -PENTAGON_128: LD L,0 ; 窠 室 -.custom_ROM: LD H,BIOS.RST_CONF.AY8910 - LD BC,#FE*256 + %0000'0010 ; = GOTO_SPEC reg B, reg A -.zx: LD DE,2*256 + CNF_PORT.CNF_2 + CNF_PORT.TURBO.ON + CNF_PORT.SCORP_RESET ; !HARDCODE 2 - 뤥 Pentagon 128 - JR PREPARE_TO_START_ZX - ; -PENTAGON_512: LD L,0 ; 窠 室 -.custom_ROM: LD H,BIOS.RST_CONF.AY8910 - LD BC,#FE*256 + %0000'0010 ; = GOTO_SPEC reg B, reg A - LD DE,3*256 + CNF_PORT.CNF_2 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_512 + CNF_PORT.SCORP_RESET ; !HARDCODE 3 - 뤥 Pentagon 512 - JR PREPARE_TO_START_ZX - ; -Pentagon_48: LD L,0 ; 窠 室 -.custom_ROM: LD H,BIOS.RST_CONF.AY8910 - LD BC,#FE*256 + %0000'0010 ; = GOTO_SPEC reg B, reg A -.zx: LD DE,1*256 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_2 ; !HARDCODE 1 - 뤥 48 - JR PREPARE_TO_START_ZX - ; -ZX_Spectrum_48: LD L,0 ; 窠 室 -.custom_ROM: LD H,BIOS.RST_CONF.AY8910 - LD BC,#FA*256 + %1000'0011 ; = GOTO_SPEC reg B, reg A - JR Pentagon_48.zx - -SPRINTER_reset: - DI - LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON - OUT (SYS_PORT.ROM),A - LD BC,BIOS.REINIT.SOFT_RESET - JP_to_BIOS - - -;***************************** -; *** MENU UTILITES *** -;***************************** -;!FIXIT BIOS SIZE. c:\disk.trd - 㬠, 㦭, -RUN_DISK_TRD: - LD HL,C_DISK_C - CALL CALL_DOS1 - - ; [ ] ࠢ ᪮ disk.trd CNF != 0 - LD A,SYS_PORT.CNF_0 + SYS_PORT.EXTENSION - OUT (SYS_PORT.ROM),A - ; - - LD C,BIOS.HDD_INIT - CALL ToBIOS_FromEXT - JR C,.DISK_UTILIT - - LD HL,C_DISK_C3 - CALL CALL_DOS1 - -.UTIL_DISK: - XOR A - LD C,BIOS.FreeMemRMD - CALL ToBIOS_FromEXT - - LD HL,C_DEMO6 - CALL CALL_DOS1 - - XOR A - LD C,BIOS.GET_RAMD_ST - CALL ToBIOS_FromEXT - - JR C,.UTIL_DISK_L1 - JR Z,.UTIL_DISK_L1 - - LD HL,C_DISK_C1 - CALL CALL_DOS1 - ; [ ] ࠢ ᪮ disk.trd CNF != 0 - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,(SYS_PAGE.CONFIG_DE.CNF_PORT) - EX AF,AF' - OUT (SLOT3),A - EX AF,AF' - OUT (SYS_PORT.ROM),A - ; - LD HL,C_DISK_C2 - CALL CALL_DOS1 - RET - -.UTIL_DISK_L1: - LD A,(ZX_VARS.OPER_DISK) - INC A - CP 2 - JR Z,.DISK_UTIL_RET - LD HL,C_DISK_C5 - CALL CALL_DOS1 - JR .UTIL_DISK - -.DISK_UTIL_RET: - LD HL,C_DISK_C6 - CALL CALL_DOS1 - RET - -.DISK_UTILIT: - LD HL,C_DISK_C4 - CALL CALL_DOS1 - JR .UTIL_DISK - -C_DEMO6: DB .Size, ZX_Token.rem, ':/disk.trd', 13,80 -.Size EQU $-C_DEMO6-1 - -C_DISK_C: DB .Size,ZX_Token.rem,':',13,80 -.Size EQU $-C_DISK_C-1 - -; C_DISK_C0: DB .Size,ZX_Token.rem,':/CLEAR E',13,80 -; .Size EQU $-C_DISK_C0-1 - -C_DISK_C1: DB .Size,ZX_Token.rem,':/RMD E',13,80 -.Size EQU $-C_DISK_C1-1 - -C_DISK_C2: DB .Size,ZX_Token.rem,':RUN',13,80 -.Size EQU $-C_DISK_C2-1 - -C_DISK_C3: DB .Size,ZX_Token.rem,':/HDD',13,80 -.Size EQU $-C_DISK_C3-1 - -C_DISK_C4: DB .Size,ZX_Token.rem,':/FDD',13,80 -.Size EQU $-C_DISK_C4-1 - -C_DISK_C5: DB .Size,ZX_Token.rem,':/B:',13,80 -.Size EQU $-C_DISK_C5-1 - -C_DISK_C6: DB .Size,ZX_Token.rem,':/A:',13,80 -.Size EQU $-C_DISK_C6-1 -; - -;*************************************** - -;VERSION: DEFB 22,21,0 -; DEFB 16,2,"Expansion 3.02  1997 ELSY Co.",16,1,0FFh - -;********************************************** - -;****************************** -;SP_DOS: -; LD B,#E2 -; LD A,#E1 -; JR TR_DOS1 -;TR_DOS: -; LD B,#EA -; LD A,#E1 -;TR_DOS1: -; CALL DOS_ON -; CALL SET_ROM_PAGES -; CALL DOS_OFF -; RET -;****************************** - - -; _SET_CNF: -; ;DI -; LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON -; OUT (SYS_PORT.ROM),A -; RET - -; CNF_SC_312: -; LD A,Port_VSYNC.SET_312L -; OUT (Port_VSYNC),A -; RET - -; CNF_PN_320: -; LD A,Port_VSYNC.SET_320L -; OUT (Port_VSYNC),A -; RET - -; LD A,CNF_0 -; OUT (SYS_PORT.ROM),A -; CALL DOS_OFF -; JP 0 - - -; DOS_RUN: LD HL,C_DISK_C1 -; CALL CALL_DOS1 -; ; -; LD HL,C_DISK_C2 -; CALL CALL_DOS1 -; RET - -; START_TRD: LD HL,C_DISK_C -; CALL CALL_DOS1 -; LD HL,C_DISK_C0 -; CALL CALL_DOS1 -; LD HL,C_DISK_C3 -; CALL CALL_DOS1 -; RET - -;SR_CL_MEM: -; DI -; LD A,10H -;SR_CL_R2: -; LD BC,1FFDH -; OUT (C),A -; EX AF,AF' -; XOR A -;SR_CL_R1: -; LD BC,7FFDH -; OUT (C),A -; LD HL,0C000H -; LD DE,0C001H -; LD BC,03FFFH -; LD (HL),L -; LDIR -; INC A -; CP 48H -; JR NZ,SR_CL_R1 -; EX AF,AF' -; CP 0 -; JP Z,BASIC_128 ; 室 BASIC 128 -; LD A,0 -; JR SR_CL_R2 +; "MENU PROGRAMS." +;********************************* +; FOR INCLUDE !!! +;********************************* +; 㦨 +; HL - ⠡ ணࠬ +; A - ⠡ +; ᫨ A=-1, , +; 믮 +;***************************** +EXEC_PNT: + INC A + RET Z + ;!FIXIT 祬 ⠪? + ; DEC A + ; JR Z,EXEC_HL + ; LD D,0 + ; LD E,A + ; XOR A + ; ADC HL,DE + ; ADC HL,DE + ; +EXEC_PNT_LOOP: + DEC A + JR Z,EXEC_HL + INC HL + INC HL + JR EXEC_PNT_LOOP +EXEC_HL: + LD E,(HL) + INC HL + LD D,(HL) + INC HL + EX DE,HL + JP (HL) +RET_FROM_M: + POP HL + RET + +;**************************************** +; MENU_128 +;**************************************** +; : DE - +; BC - +; : A - ࠭ 㭪 +;**************************************** +RUN_MENU: + PUSH IX + PUSH DE ; DE - MENU + PUSH BC ; BC - len_menu + + LD A,(DE) + DEC A ; ᫮ CMD + CP 9 ; !HARDCODE ᬠ쭮 ᫮ 㭪⮢ + JR C,RUN_M_1 +RUN_MN_ERR: + POP BC + POP DE + LD A,#FF ; ஬ 255 - 訡 + POP IX + RET +RUN_M_1: + LD A,(ZX_VARS.PROG.SWAP_ROM) + CP #F5 ; ࠢ PUSH AF + JR NZ,RUN_MN_ERR + + + LD HL,LEN_P_M + ADD HL,BC ; HL - 㦭 + LD B,H ; HL -> BC + LD C,L + LD HL,(ZX_VARS.WORK_SPACE) ; HL - 砫 ࠡ + + PUSH BC + PUSH HL + + CALL C_1655 ; ࠡ + + POP DE + PUSH DE ; 砫 ࠡ + + LD BC,LEN_P_M ; ணࠬ + LD HL,MENU_128 ; ᠬ ணࠬ + LDIR ; ணࠬ ६饭. DE - MENU + POP BC + PUSH BC ; 砫 ணࠬ + + PUSH DE ; ࠭ MENU + LD DE,MN_128_S ; shifter + CALL SHIFTER ; ᮮ⢥⢨ MEM + POP DE ; MENU + + POP HL ; 砫 ணࠬ + POP IX ; + POP BC ; + EX (SP),HL ; HL - + LDIR ; ६ MENU + + POP HL ; ணࠬ MENU + PUSH HL + PUSH IX ; ࠡ. + CALL JP_HL ; 맮 ணࠬ MENU + POP BC ; ࠡ + POP HL ; 砫 ணࠬ + + PUSH AF ; ࠭ 롮 + CALL C_19E8 ; ᢮ !! + POP AF ; 롮 + POP IX + RET ; ணࠬ RUN_MENU +JP_HL: JP (HL) +;************************************** +; 128k MENU +;************************************** +;!HARDCODE +MENU_PROG EQU #25B9 ; #25B9 in sp_128.asm +;SWAP_ROM EQU #5B00 +NEW_SP EQU #1F45 ; L1F45: in sp_128.asm +RET_SP EQU #1F20 ; L1F20: in sp_128.asm + +;************************************** +; ணࠬ 맮 MENU_128 . +;************************************** +MN_128_S: + DB SH_1 - MENU_128+1 + DB SH_2 - MENU_128+1 + DB SH_3 - MENU_128+1 + DB SH_4 - MENU_128+1 + DB SH_5 - MENU_128 + DB SH_6 - MENU_128 + DB SH_7 - MENU_128 + DB SH_8 - MENU_128 + DB SH_9 - MENU_128 + DB SH_A - MENU_128 + DB SH_B - MENU_128 + DB SH_C - MENU_128 + DB 0 +;************************************** +; ணࠬ ६頥 +;************************************** +MENU_128: + XOR A + OUT (SYS_PORT.RAM),A + CALL ZX_VARS.PROG.SWAP_ROM + CALL NEW_SP + +SH_1: LD DE,MENU_DAT - MENU_128 + LD HL,ZX_VARS.MENU_TBL.JUMP + LD BC,4 + LDIR + +SH_2: LD HL,MENU_128_E - MENU_128 + LD (ZX_VARS.MENU_TBL.JUMP),HL +SH_3: LD HL,MENU_128_E2 - MENU_128 + LD (ZX_VARS.MENU_TBL.TEXT),HL + JP MENU_PROG + +RET_M EQU $-MENU_128 +SH_4: LD HL,MENU_DAT - MENU_128 + LD DE,ZX_VARS.MENU_TBL.JUMP + LD BC,4 + LDIR + + CALL RET_SP + CALL ZX_VARS.PROG.SWAP_ROM + EX AF,AF' + LD A,SYS_PORT.EXTENSION + OUT (SYS_PORT.ROM),A + EX AF,AF' + RET +MENU_DAT: + DW 0,0 +MENU_128_E: + DB 8 + DB 0 +SH_5: DW RET_M + DB 1 +SH_6: DW RET_M + DB 2 +SH_7: DW RET_M + DB 3 +SH_8: DW RET_M + DB 4 +SH_9: DW RET_M + DB 5 +SH_A: DW RET_M + DB 6 +SH_B: DW RET_M + DB 7 +SH_C: DW RET_M +MENU_128_E2: + +LEN_P_M EQU $-MENU_128 + +;************************************** +; RST 30 - 祭 BC SPACES HL +; #19E8 - ᢮ BC spaces HL +; HL - ࠡ. 祩 +; BC - ணࠬ +; DE - ६饭 +SHIFTER: + LD A,(DE) ; (DE) - SHIFT IN PROG + AND A + RET Z + INC DE + LD L,A + LD H,0 + + ADD HL,BC ; HL - ADRESS FOR SHIFT + LD A,(HL) ; (HL)=(HL)+BC + ADD A,C + LD (HL),A + INC HL + LD A,(HL) + ADC A,B + LD (HL),A + JR SHIFTER + +;******************************************* +; : 1 - १ +; 2 - ᫮ 㭪⮢ +1 +; , 0FFh ( COPY ) +; 㭪 砭 ⮬ +; , 7- ⮬ + ப !! +;******************************************* +BASIC_MENU: +; LD A,(HL) +; CP 'S' +; JP Z,SET_SYSTEM + + LD DE,(ZX_VARS.CH_ADR) + PUSH DE + LD (ZX_VARS.CH_ADR),HL + CALL_48X #1C8C ; SYMBOL VAR + CALL_48X #2BF1 ; input txt !!! + ; DE - adr + ; BC - len + PUSH DE + PUSH BC + INC DE + CALL TST_M + JR C,NO_EXE_M + CALL RUN_MENU + LD (IY+0),255 +NO_EXE_M: + POP BC + POP DE + LD (DE),A + POP HL + LD (ZX_VARS.CH_ADR),HL + JP SW_ROM +TST_M: + PUSH DE + PUSH BC + EX DE,HL + LD D,(HL) + INC D + LD A,255 + CPIR + JR NZ,ERR_TST_M +LOOP_TST_M: + LD A,B + OR C + JR Z,ERR_TST_M + + BIT 7,(HL) + INC HL + DEC BC + JR Z,LOOP_TST_M + DEC D + JR NZ,LOOP_TST_M + POP BC + POP DE + AND A + RET + +ERR_TST_M: + POP BC + POP DE + LD A,255 + SCF + RET + +;************************************** + +CALL_DOS_MOVE: + LD HL,DOS_PROG + LD DE,DOS_PROG.Exec + LD BC,DOS_PROG.Size + LDIR + RET +; +; HL - , BC - +CALL_DOS1: + LD C,(HL) + INC HL + LD B,0 + LD DE,(ZX_VARS.E_LINE) + LD (ZX_VARS.CH_ADR),DE + LDIR + LD (ZX_VARS.WORK_SPACE),DE + LD (ZX_VARS.STK_BOT),DE + LD (ZX_VARS.STK_END),DE + CALL CALL_DOS_MOVE + JP DOS_PROG.Exec + +DOS_PROG: + DISP #5C00 - DOS_PROG.Size ;!HARDCODE + //DOS_PROG: +.Exec: PUSH AF + XOR A + OUT (SYS_PORT.RAM),A + POP AF + //DOS_PROG_A+1: +.Patch+2: CALL #3D03 ;!HARDCODE + PUSH AF + ;!FIXIT ᤥ १ ᫮ 樨 ZX_ROM_BIOS + //LD A,0 + //OUT (CNF_PORT),A + LD A,SYS_PORT.EXTENSION + OUT (SYS_PORT.ROM),A ;!!!!! + POP AF + RET + //DOS_PROG_LEN +.Size EQU $ - .Exec + ENT + + ;????? த, ᯮ +CONT_PROG: + LD HL,#1AFD ;!HARDCODE COM_LN: + PUSH HL + LD HL,#5B00 ;!HARDCODE + PUSH HL + LD DE,ZX_VARS.FLG_INPUT + LD BC,1 + LD A,#E8 ;!HARDCODE + LD (DE),A + JP SW_ROM +CALL_DOS: + PUSH HL + PUSH DE + PUSH BC + PUSH AF + CALL CALL_DOS_MOVE + LD A,#13 ;!HARDCODE #13 AUTO_1303 + LD (DOS_PROG.Patch),A + POP AF + POP BC + POP DE + POP HL + JP DOS_PROG.Exec + ; +; + +;=======================================================================; +;=======================================================================; +;=======================================================================; +SERVICE: + //LD HL,SR_TAB + LD DE,SR_MENU + LD BC,SR_MENU.Size + //PUSH HL + CALL RUN_MENU ;09f3 + LD HL,SR_TAB + //POP HL + CALL EXEC_PNT + JR SERVICE + +SR_TAB: DW RUN_DISK_TRD + DW GOTO_TRDOS.m128 + DW GOTO_TRDOS.m48 + DW TURBO_OFF + DW TURBO_ON + DW CLEAR_RAM + DW RET_FROM_M + +; DC - every last character of a string will have bit 7 set +SR_MENU: + BYTE 8 ; ⢮ 㭪⮢ + BYTE 'Options ',#FF ; + DC 'RUN disk.trd' + DC '128 TR-DOS' + DC '48 TR-DOS' + DC 'TURBO OFF ' + DC 'TURBO ON ' + DC 'Clear RAM' + DC 'RETURN' + DC " " ; થ +.Size EQU $-SR_MENU + +;***************************** + +;SR_48R: +GOTO_TRDOS: +.m128: LD A,#10 + JR .RUN +;SR_48: +.m48: LD A,#30 ; ⮯ PORT_128 !!! +;SR_48A: +.RUN: LD BC,ZX_MEM_PORT.Pentagon + OUT (C),A + LD BC,0 ; 0 !! + PUSH BC + LD BC,#3D2F ; DOS ! + PUSH BC + JP SW_ROM + +;******************************* +TURBO_OFF: + LD A,BIOS.FN_TURBO.OFF + LD C,BIOS.FN_TURBO + JP_to_BIOS +TURBO_ON: + LD A,BIOS.FN_TURBO.ON + LD C,BIOS.FN_TURBO + JP_to_BIOS + +;******************************* + +CLEAR_RAM: + DI + ; [ ] free zx pages! + LD BC,BIOS.REINIT.FREE_NO_ZX_MEM + ;LD C,BIOS.FullInit + ; + CALL ToBIOS_FromEXT + ; ⪥ ᯥ㬠 DSS CAD + ; 㤥 (RAM Blocks ᢮), + ; ⮬ ⪫砥 墠 . + LD A,ACEX.RET_PORT + LD BC,BIOS.SET_PORTS + ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 + ;CALL ToBIOS_3D13 + CALL ToBIOS_FromEXT + ; + EI + RET + + +;***************************** +; *** MENU Hardware *** +;***************************** + +Hardware_Menu: + LD HL,Hardware_Menu_TAB + LD DE,Hardware_Menu_STR + LD BC,Hardware_Menu_STR.Size + PUSH HL + CALL RUN_MENU + POP HL + CALL EXEC_PNT + JR Hardware_Menu + +Hardware_Menu_TAB: +; DW TR_DOS +; DW SP_DOS + DW SPRINTER_ZX + DW SCORPION_256 + DW Pentagon_48 + DW PENTAGON_128 + DW PENTAGON_512 + DW ZX_SPECTRUM_128 + DW SPRINTER_reset ;SPRINTER_2X + DW RET_FROM_M + +; DC - every last character of a string will have bit 7 set +Hardware_Menu_STR: + BYTE 9 ; ⢮ 㭪⮢ + BYTE 'Hardware',#FF ; + DC 'Sprinter ZX ' + DC 'Scorpion 256' + DC 'Pentagon 48 ' + DC 'Pentagon 128' + DC 'Pentagon 512' + DC 'Spectrum 128' + DC 'Restart ' + DC 'RETURN' + DC " " ; થ +.Size EQU $ - Hardware_Menu_STR + +;!TODO ⪫ 7FFD 1FFD ६ १ ⪫祭 1FFD cnf_port +; 饫 7FFD vROM 㭥 ࠭ BASIC128. +; ᨬ ⠭ ⮢ 롨 ய뢠 AY +; +;************************************************** +SPRINTER_ZX: LD L,0 ; 窠 室 +.custom_ROM: LD H,BIOS.RST_CONF.SP97_1 + LD BC,#FE*256 + %0000'0010 ; = GOTO_SPEC reg B, reg A + LD DE,4*256 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_0 ; !HARDCODE 4 - 뤥 Scorpion 256k. 2+6+8 ࠭ + JR PREPARE_TO_START_ZX + ; +ZX_SPECTRUM_128: + LD L,0 ; 窠 室 +.custom_ROM: LD H,BIOS.RST_CONF.AY8910 + LD BC,#FA*256 + %1000'0011 ; = GOTO_SPEC reg B, reg A + JR PENTAGON_128.zx + ; +SCORPION_256: LD L,0 ; 窠 室 +.custom_ROM: LD H,BIOS.RST_CONF.AY8910 + LD BC,#FE*256 + %1000'0001 ; = GOTO_SPEC reg B, reg A + LD DE,4*256 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_1 ; !HARDCODE 4 - 뤥 Scorpion 256k. 2+6+8 ࠭ +PREPARE_TO_START_ZX: + DI + LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON + OUT (SYS_PORT.ROM),A + LD A,SYS_PAGE + OUT (SLOT3),A + ; + PUSH HL + PUSH BC + PUSH DE + PUSH DE + ; + LD C,H + CALL ToBIOS_FromEXT + ; + POP DE + LD B,D + CALL MANAGE_ZX_PAGES.FN_ENTRANCE.API + JR C,.loop_rst + ; + POP DE + POP BC + POP HL + ; + LD D,L ; !HARDCODE 窠 室 ᯥ㬠 + ; LD H,A + ; LD A,(SYS_PAGE.Block_ID.vROM) + ; LD L,A + LD HL,(SYS_PAGE.Block_ID.vROM) + LD H,A + LD A,C + JP GOTO_SPECTRUM + ; +.loop_rst: LD BC,BIOS.REINIT.HARD_RESET + CALL ToBIOS_FromEXT + JR .loop_rst + ; +PENTAGON_128: LD L,0 ; 窠 室 +.custom_ROM: LD H,BIOS.RST_CONF.AY8910 + LD BC,#FE*256 + %0000'0010 ; = GOTO_SPEC reg B, reg A +.zx: LD DE,2*256 + CNF_PORT.CNF_2 + CNF_PORT.TURBO.ON + CNF_PORT.SCORP_RESET ; !HARDCODE 2 - 뤥 Pentagon 128 + JR PREPARE_TO_START_ZX + ; +PENTAGON_512: LD L,0 ; 窠 室 +.custom_ROM: LD H,BIOS.RST_CONF.AY8910 + LD BC,#FE*256 + %0000'0010 ; = GOTO_SPEC reg B, reg A + LD DE,3*256 + CNF_PORT.CNF_2 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_512 + CNF_PORT.SCORP_RESET ; !HARDCODE 3 - 뤥 Pentagon 512 + JR PREPARE_TO_START_ZX + ; +Pentagon_48: LD L,0 ; 窠 室 +.custom_ROM: LD H,BIOS.RST_CONF.AY8910 + LD BC,#FE*256 + %0000'0010 ; = GOTO_SPEC reg B, reg A +.zx: LD DE,1*256 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_2 ; !HARDCODE 1 - 뤥 48 + JR PREPARE_TO_START_ZX + ; +ZX_Spectrum_48: LD L,0 ; 窠 室 +.custom_ROM: LD H,BIOS.RST_CONF.AY8910 + LD BC,#FA*256 + %1000'0011 ; = GOTO_SPEC reg B, reg A + JR Pentagon_48.zx + +SPRINTER_reset: + DI + LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON + OUT (SYS_PORT.ROM),A + LD BC,BIOS.REINIT.SOFT_RESET + JP_to_BIOS + + +;***************************** +; *** MENU UTILITES *** +;***************************** +;!FIXIT BIOS SIZE. c:\disk.trd - 㬠, 㦭, +RUN_DISK_TRD: + LD HL,C_DISK_C + CALL CALL_DOS1 + + ; [ ] ࠢ ᪮ disk.trd CNF != 0 + LD A,SYS_PORT.CNF_0 + SYS_PORT.EXTENSION + OUT (SYS_PORT.ROM),A + ; + + LD C,BIOS.HDD_INIT + CALL ToBIOS_FromEXT + JR C,.DISK_UTILIT + + LD HL,C_DISK_C3 + CALL CALL_DOS1 + +.UTIL_DISK: + XOR A + LD C,BIOS.FreeMemRMD + CALL ToBIOS_FromEXT + + LD HL,C_DEMO6 + CALL CALL_DOS1 + + XOR A + LD C,BIOS.GET_RAMD_ST + CALL ToBIOS_FromEXT + + JR C,.UTIL_DISK_L1 + JR Z,.UTIL_DISK_L1 + + LD HL,C_DISK_C1 + CALL CALL_DOS1 + ; [ ] ࠢ ᪮ disk.trd CNF != 0 + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,(SYS_PAGE.CONFIG_DE.CNF_PORT) + EX AF,AF' + OUT (SLOT3),A + EX AF,AF' + OUT (SYS_PORT.ROM),A + ; + LD HL,C_DISK_C2 + CALL CALL_DOS1 + RET + +.UTIL_DISK_L1: + LD A,(ZX_VARS.OPER_DISK) + INC A + CP 2 + JR Z,.DISK_UTIL_RET + LD HL,C_DISK_C5 + CALL CALL_DOS1 + JR .UTIL_DISK + +.DISK_UTIL_RET: + LD HL,C_DISK_C6 + CALL CALL_DOS1 + RET + +.DISK_UTILIT: + LD HL,C_DISK_C4 + CALL CALL_DOS1 + JR .UTIL_DISK + +C_DEMO6: DB .Size, ZX_Token.rem, ':/disk.trd', 13,80 +.Size EQU $-C_DEMO6-1 + +C_DISK_C: DB .Size,ZX_Token.rem,':',13,80 +.Size EQU $-C_DISK_C-1 + +; C_DISK_C0: DB .Size,ZX_Token.rem,':/CLEAR E',13,80 +; .Size EQU $-C_DISK_C0-1 + +C_DISK_C1: DB .Size,ZX_Token.rem,':/RMD E',13,80 +.Size EQU $-C_DISK_C1-1 + +C_DISK_C2: DB .Size,ZX_Token.rem,':RUN',13,80 +.Size EQU $-C_DISK_C2-1 + +C_DISK_C3: DB .Size,ZX_Token.rem,':/HDD',13,80 +.Size EQU $-C_DISK_C3-1 + +C_DISK_C4: DB .Size,ZX_Token.rem,':/FDD',13,80 +.Size EQU $-C_DISK_C4-1 + +C_DISK_C5: DB .Size,ZX_Token.rem,':/B:',13,80 +.Size EQU $-C_DISK_C5-1 + +C_DISK_C6: DB .Size,ZX_Token.rem,':/A:',13,80 +.Size EQU $-C_DISK_C6-1 +; + +;*************************************** + +;VERSION: DEFB 22,21,0 +; DEFB 16,2,"Expansion 3.02  1997 ELSY Co.",16,1,0FFh + +;********************************************** + +;****************************** +;SP_DOS: +; LD B,#E2 +; LD A,#E1 +; JR TR_DOS1 +;TR_DOS: +; LD B,#EA +; LD A,#E1 +;TR_DOS1: +; CALL DOS_ON +; CALL SET_ROM_PAGES +; CALL DOS_OFF +; RET +;****************************** + + +; _SET_CNF: +; ;DI +; LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON +; OUT (SYS_PORT.ROM),A +; RET + +; CNF_SC_312: +; LD A,Port_VSYNC.SET_312L +; OUT (Port_VSYNC),A +; RET + +; CNF_PN_320: +; LD A,Port_VSYNC.SET_320L +; OUT (Port_VSYNC),A +; RET + +; LD A,CNF_0 +; OUT (SYS_PORT.ROM),A +; CALL DOS_OFF +; JP 0 + + +; DOS_RUN: LD HL,C_DISK_C1 +; CALL CALL_DOS1 +; ; +; LD HL,C_DISK_C2 +; CALL CALL_DOS1 +; RET + +; START_TRD: LD HL,C_DISK_C +; CALL CALL_DOS1 +; LD HL,C_DISK_C0 +; CALL CALL_DOS1 +; LD HL,C_DISK_C3 +; CALL CALL_DOS1 +; RET + +;SR_CL_MEM: +; DI +; LD A,10H +;SR_CL_R2: +; LD BC,1FFDH +; OUT (C),A +; EX AF,AF' +; XOR A +;SR_CL_R1: +; LD BC,7FFDH +; OUT (C),A +; LD HL,0C000H +; LD DE,0C001H +; LD BC,03FFFH +; LD (HL),L +; LDIR +; INC A +; CP 48H +; JR NZ,SR_CL_R1 +; EX AF,AF' +; CP 0 +; JP Z,BASIC_128 ; 室 BASIC 128 +; LD A,0 +; JR SR_CL_R2 diff --git a/src/bios/rom/_not_used/DEHRUST.asm b/bios/rom/_not_used/DEHRUST.asm similarity index 100% rename from src/bios/rom/_not_used/DEHRUST.asm rename to bios/rom/_not_used/DEHRUST.asm diff --git a/src/bios/rom/_not_used/LZ4_DEC.asm b/bios/rom/_not_used/LZ4_DEC.asm similarity index 95% rename from src/bios/rom/_not_used/LZ4_DEC.asm rename to bios/rom/_not_used/LZ4_DEC.asm index f25c685..c52f738 100644 --- a/src/bios/rom/_not_used/LZ4_DEC.asm +++ b/bios/rom/_not_used/LZ4_DEC.asm @@ -1,157 +1,157 @@ -;------------------------------------------------------------------------------ -;hl=src de=dst -lz4decrunch: - ld bc,7 - add hl,bc - ld c,(hl) - inc hl - ld b,(hl) ;quv} trp qpzp yx xps|r{p - px}u - inc hl - inc hl - inc hl ;~pp| wp tp~~ }uu~y #0B - - ld a,l - add a,c - ld (.endL+1),a - ld a,h - adc a,b - ld (.endH+1),a ;K~u~z ptu wp tp~~ - -.loop: - ld a,(hl) - inc hl - ld (.litteral+1),a - and #F0 - jr z,.copy ;E|y t|y~p pr~p 0, {yrp wu uutp~~u tp~~u - rrca - rrca - rrca - rrca - ld b,0 - ld c,a - cp #0F - call z,.getlength ;E|y t|y~p #0F, |y t|~yu|~ t|y~ - - ldir ;Puutpp ~py~pu |utuz y~}pyy t|y~u - -.copy: - ld a,l ;tys|y |y wpu tp~~u {~u~s ptup -.endL: - sub #FF - ld a,h -.endH: - sbc a,#FF - ret nc ;^u{yr~p ru{p zf=1 - - ld c,(hl) - inc hl - ld b,(hl) ;bc=2byte Xu~yu x~pu~y }uu~y - inc hl - -.litteral: - ld a,0 ;litteral uuyp xtu - and #0F - add a,#04 ;cf=0 - - push hl - ld h,d - ld l,e - sbc hl,bc ;hl=de-bc I|xzu tp~~u, {u wu q|y pyu~, r {puru y~y{p uutpy - - ld b,0 - ld c,a - cp #0F+#04 - ex (sp),hl - call z,.getlength - ex (sp),hl - - ldir ;Kyrp uu~ wu pxru~ tp~~ - pop hl - jp .loop - -.getlength: ;P|y t|y~ qpzp uurtp (q|u) bc=u{p }}p uurtp - ld a,(hl) - inc hl - cp #FF ;#FF trpyrpu {p{ x~p{, xp {} |utu y~}py t|y~u - jr nz,.addlen - inc b - dec bc ;bc += 255 - jr .getlength -.addlen: - add a,c - ld c,a - adc a,b - sub c - ld b,a ;bc=t|y~p uutprpu}s qpzp - ret - -;------------------------------------------------------------------------------ -;in: hl=~pp|~z ptu bc=t|y~p -;out: bcde=ux|p -crc32: - push hl - push bc - - ld de,#FFFF ; 0xFFFFFFFF ? ~pp|~u x~pu~yu CRC32, y|xu}s r ZIP - ld h,d - ld l,e - ld c,#20 ;{pu~yu - - exx - pop hl - dec hl - inc h - inc l - ld b,l - ld c,h - pop hl -.loop1: - ld a,(hl) - inc hl - exx - - xor e - ld b,8 -.loop2: - srl h - rr l - rr d - rra - jp nc,.skip - ld e,a - ld a,h - xor #ED - ld h,a - ld a,l - xor #B8 - ld l,a - ld a,d - xor #83 - ld d,a - ld a,e -; xor #20 - xor c -.skip: - djnz .loop2 - ld e,a - - exx - djnz .loop1 - dec c - jp nz,.loop1 - exx - - ld a,h ;CRC32, y|xu}z r ZIP, y~y}pu xor 0xFFFFFFFF r {~u - cpl - ld b,a - ld a,l - cpl - ld c,a - - ld a,d - cpl - ld d,a - ld a,e - cpl - ld e,a - ret +;------------------------------------------------------------------------------ +;hl=src de=dst +lz4decrunch: + ld bc,7 + add hl,bc + ld c,(hl) + inc hl + ld b,(hl) ;quv} trp qpzp yx xps|r{p - px}u + inc hl + inc hl + inc hl ;~pp| wp tp~~ }uu~y #0B + + ld a,l + add a,c + ld (.endL+1),a + ld a,h + adc a,b + ld (.endH+1),a ;K~u~z ptu wp tp~~ + +.loop: + ld a,(hl) + inc hl + ld (.litteral+1),a + and #F0 + jr z,.copy ;E|y t|y~p pr~p 0, {yrp wu uutp~~u tp~~u + rrca + rrca + rrca + rrca + ld b,0 + ld c,a + cp #0F + call z,.getlength ;E|y t|y~p #0F, |y t|~yu|~ t|y~ + + ldir ;Puutpp ~py~pu |utuz y~}pyy t|y~u + +.copy: + ld a,l ;tys|y |y wpu tp~~u {~u~s ptup +.endL: + sub #FF + ld a,h +.endH: + sbc a,#FF + ret nc ;^u{yr~p ru{p zf=1 + + ld c,(hl) + inc hl + ld b,(hl) ;bc=2byte Xu~yu x~pu~y }uu~y + inc hl + +.litteral: + ld a,0 ;litteral uuyp xtu + and #0F + add a,#04 ;cf=0 + + push hl + ld h,d + ld l,e + sbc hl,bc ;hl=de-bc I|xzu tp~~u, {u wu q|y pyu~, r {puru y~y{p uutpy + + ld b,0 + ld c,a + cp #0F+#04 + ex (sp),hl + call z,.getlength + ex (sp),hl + + ldir ;Kyrp uu~ wu pxru~ tp~~ + pop hl + jp .loop + +.getlength: ;P|y t|y~ qpzp uurtp (q|u) bc=u{p }}p uurtp + ld a,(hl) + inc hl + cp #FF ;#FF trpyrpu {p{ x~p{, xp {} |utu y~}py t|y~u + jr nz,.addlen + inc b + dec bc ;bc += 255 + jr .getlength +.addlen: + add a,c + ld c,a + adc a,b + sub c + ld b,a ;bc=t|y~p uutprpu}s qpzp + ret + +;------------------------------------------------------------------------------ +;in: hl=~pp|~z ptu bc=t|y~p +;out: bcde=ux|p +crc32: + push hl + push bc + + ld de,#FFFF ; 0xFFFFFFFF ? ~pp|~u x~pu~yu CRC32, y|xu}s r ZIP + ld h,d + ld l,e + ld c,#20 ;{pu~yu + + exx + pop hl + dec hl + inc h + inc l + ld b,l + ld c,h + pop hl +.loop1: + ld a,(hl) + inc hl + exx + + xor e + ld b,8 +.loop2: + srl h + rr l + rr d + rra + jp nc,.skip + ld e,a + ld a,h + xor #ED + ld h,a + ld a,l + xor #B8 + ld l,a + ld a,d + xor #83 + ld d,a + ld a,e +; xor #20 + xor c +.skip: + djnz .loop2 + ld e,a + + exx + djnz .loop1 + dec c + jp nz,.loop1 + exx + + ld a,h ;CRC32, y|xu}z r ZIP, y~y}pu xor 0xFFFFFFFF r {~u + cpl + ld b,a + ld a,l + cpl + ld c,a + + ld a,d + cpl + ld d,a + ld a,e + cpl + ld e,a + ret diff --git a/src/bios/rom/_not_used/Logo_Depacker.asm b/bios/rom/_not_used/Logo_Depacker.asm similarity index 88% rename from src/bios/rom/_not_used/Logo_Depacker.asm rename to bios/rom/_not_used/Logo_Depacker.asm index b5276d2..ec2ee54 100644 --- a/src/bios/rom/_not_used/Logo_Depacker.asm +++ b/bios/rom/_not_used/Logo_Depacker.asm @@ -1,89 +1,89 @@ - CALL #E1D2 - DI - LD (RelocatedCode.SPsave),SP - LD HL,.START - LD DE,#D800 - LD BC,.END-.START - PUSH DE - LDIR - - LD HL,#E1D1 - LD DE,#FFFF - LD BC,#0850 - RET - -RelocatedCode: -.START: - LDDR - LD HL,#F7B0 - LD DE,#D900 - LD B,#00 - LD A,(HL) - BIT 7,A - JR NZ,#D94A - AND #0F - LD B,A - RLD - ADD A,#03 - LD C,A - INC HL - LD A,E - SUB (HL) - INC HL - LD SP,HL - LD H,(HL) - LD L,A - LD A,D - SBC A,B - LD B,H - LD H,A - LD A,B - LD B,#00 - LDIR - LD H,B - LD L,C - ADD HL,SP - JR #D929 - AND #7F - JR Z,#D967 - INC HL - BIT 6,A - JR NZ,#D958 - LD C,A - LDIR - JR #D928 - AND #3F - ADD A,#03 - LD B,A - LD A,(HL) - INC HL - LD C,(HL) - LD (DE),A - INC DE - DJNZ #D960 - LD A,C - JR #D929 - LD SP,#D85B - LD B,#03 - POP HL - DEC SP - POP AF - LD (HL),A - DJNZ #D96C -.SPsave+1: LD SP,#0000 - DI - RET - NOP - NOP - NOP - NOP - NOP - NOP - NOP - NOP - NOP - NOP - NOP -.END EQU $ -; ⨭ ⮢ ࠭ ᫥ ᢥ + CALL #E1D2 + DI + LD (RelocatedCode.SPsave),SP + LD HL,.START + LD DE,#D800 + LD BC,.END-.START + PUSH DE + LDIR + + LD HL,#E1D1 + LD DE,#FFFF + LD BC,#0850 + RET + +RelocatedCode: +.START: + LDDR + LD HL,#F7B0 + LD DE,#D900 + LD B,#00 + LD A,(HL) + BIT 7,A + JR NZ,#D94A + AND #0F + LD B,A + RLD + ADD A,#03 + LD C,A + INC HL + LD A,E + SUB (HL) + INC HL + LD SP,HL + LD H,(HL) + LD L,A + LD A,D + SBC A,B + LD B,H + LD H,A + LD A,B + LD B,#00 + LDIR + LD H,B + LD L,C + ADD HL,SP + JR #D929 + AND #7F + JR Z,#D967 + INC HL + BIT 6,A + JR NZ,#D958 + LD C,A + LDIR + JR #D928 + AND #3F + ADD A,#03 + LD B,A + LD A,(HL) + INC HL + LD C,(HL) + LD (DE),A + INC DE + DJNZ #D960 + LD A,C + JR #D929 + LD SP,#D85B + LD B,#03 + POP HL + DEC SP + POP AF + LD (HL),A + DJNZ #D96C +.SPsave+1: LD SP,#0000 + DI + RET + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP +.END EQU $ +; ⨭ ⮢ ࠭ ᫥ ᢥ INCBIN 'SP_LOGO.BIN' \ No newline at end of file diff --git a/src/bios/rom/_not_used/ayfxplay.asm b/bios/rom/_not_used/ayfxplay.asm similarity index 100% rename from src/bios/rom/_not_used/ayfxplay.asm rename to bios/rom/_not_used/ayfxplay.asm diff --git a/src/bios/rom/_not_used/netherworld_8.afx b/bios/rom/_not_used/netherworld_8.afx similarity index 100% rename from src/bios/rom/_not_used/netherworld_8.afx rename to bios/rom/_not_used/netherworld_8.afx diff --git a/src/bios/shared/CompMacro.asm b/bios/shared/CompMacro.asm similarity index 96% rename from src/bios/shared/CompMacro.asm rename to bios/shared/CompMacro.asm index d6b4f43..5c75cf9 100644 --- a/src/bios/shared/CompMacro.asm +++ b/bios/shared/CompMacro.asm @@ -1,172 +1,172 @@ -; - MACRO ShowInfo text, in_disp -/* - DISPLAY ' ' - DISPLAY '[*] ', text - IF in_disp - DISPLAY 'ROM:' - DISPLAY ' ORG: ',/H, $$$ - DISPLAY ' PAGE: ',/H, $$$$ - DISPLAY 'MEM:' - DISPLAY ' DISP: ',/H, $ - DISPLAY ' PAGE: ',/H, $$ - ELSE - DISPLAY 'ROM:' - DISPLAY ' ORG: ',/H, $ - DISPLAY ' PAGE: ',/H, $$ - ENDIF - DISPLAY '[X]' - DISPLAY ' ' -*/ - ENDM -; - -; -; 室: ਭ ࠩ, , न X, न Y, ࠩ - MACRO EasterTable width, height, Xcoord, Ycoord, addr - WORD addr ; ࠩ - WORD width ; ਭ - BYTE height+Ycoord ; + Y coord - WORD Xcoord+#4040 ; X coord ; !HARDCODE ࠢ #4040 - - BYTE Ycoord ; Y coord - ENDM -; - -; - MACRO _mRECOVERYrdChooseTYPE vers - IF vers = 1 - ; ᫨ RECOVERY ࠧ㬥 90% ᭮ 짮⥫᪨ ࠬ᪮ - ; 롨ࠥ ਠ, ॥, RECOVERY ᥣ 롨ࠥ RAM Disk 15 - ; - - ELSEIF vers = 2 - - ; 饬 ᢮ ࠬ - LD B,SYS_PAGE.RAMD_KEYS.NUM -.getRDidLoop: LD A,B - DEC A - LD (RECOVERYstart.RDkey),A - PUSH BC - LD B,ROM_DISK.Pages.Size - CALL EMM.GetMemRMD - POP BC - JR NC,RECOVERYstart.IMGread ; ᢮ ࠬ , 室 横 - DEC A - JR Z,RECOVERYstart.FreeMem ; 訡 - 筮 , 뢠 - DJNZ .getRDidLoop - ; - - ELSE - ASSERT 0, Invalid 'RECOVERYrdChooseTYPE' variant - RECOVERYrdChooseTYPE - ENDIF - ENDM -; - MACRO _mRECOVERYmountTYPE vers - IF vers = 1 ; , प ਠ - - LD HL,TEMP - CALL EMM.GetMemBlkPages ; ࠭ RAM disk - - IN A,(SLOT3) - LD (.slot3save),A - - LD HL,ROM_DISK.Pages.Number - LD B,0 - LD C,(HL) - INC C - LD DE,TEMP+ROM_DISK.Pages.Size - LDIR ; ࠭ ROM disk - - LD IY,TEMP+ROM_DISK.Pages.Size ; ROM_DISK.Pages.Number - LD IX,TEMP - LD B,(IY+0) - - LD A,R - PUSH AF - DI -.loopIMGtoRAM: PUSH BC - INC IY - LD A,(IY+0) - OUT (ROM.SLOT0),A - LD A,(IX+0) - OUT (SLOT3),A - INC IX - - LD HL,0 - LD DE,#C000 - LD BC,#4000 - LDIR - - POP BC - DJNZ .loopIMGtoRAM -.slot3save+*: LD A,0 - OUT (SLOT3),A - XOR A - OUT (ROM.SLOT0),A - OUT (SYS_PORT.ROM),A - POP AF - JP PO,.noInterrupts - EI -.noInterrupts: - ; - - ELSEIF vers = 2 ; , ࠢ ਠ १ 㭪樨 - - LD (.ramdskID),A - LD DE,0 ; ᥪ - LD B,(ROM_DISK.Pages.Size * #4000)/512 ; 稪 - - ᥪ஢ 512 -.loop: - ;read rom disk - PUSH BC - LD A,1 ;ࠧ ᥪ 256 - EX AF,AF' - LD A,#46 ;⥭ ROM-Disk - EX AF,AF' - LD HL,TEMP ; - LD B,2 ;᫮ ᥪ஢ - CALL BLK_RD_WR - - ;write to ram disk - PUSH DE ; ᥪ - DEC DE - DEC DE - -.ramdskID+*: LD A,0 ;䨪 - EX AF,AF' - LD A,#FF ; RAM-Disk - EX AF,AF' - LD HL,TEMP ; - LD B,2 ;᫮ ᥪ஢ - CALL BLK_RD_WR - - POP DE ; ᥪ - POP BC - DJNZ .loop - ; - - ELSE - ASSERT 0, Invalid 'RECOVERYmountTYPE' variant - RECOVERYmountTYPE - ENDIF - ENDM -; - -; - MACRO RST_to_BIOS - IF (IsInBIOS = 0) && ($ < #4000) - CALL ToBIOS_FromEXT - ELSE - RST ToBIOS_18 - ENDIF - ENDM - -; - -; - MACRO JP_to_BIOS - IF (IsInBIOS = 0) && ($ < #4000) - JP ToBIOS_FromEXT - ELSE - JP ToBIOS_18 - ENDIF - ENDM -; +; + MACRO ShowInfo text, in_disp +/* + DISPLAY ' ' + DISPLAY '[*] ', text + IF in_disp + DISPLAY 'ROM:' + DISPLAY ' ORG: ',/H, $$$ + DISPLAY ' PAGE: ',/H, $$$$ + DISPLAY 'MEM:' + DISPLAY ' DISP: ',/H, $ + DISPLAY ' PAGE: ',/H, $$ + ELSE + DISPLAY 'ROM:' + DISPLAY ' ORG: ',/H, $ + DISPLAY ' PAGE: ',/H, $$ + ENDIF + DISPLAY '[X]' + DISPLAY ' ' +*/ + ENDM +; + +; +; 室: ਭ ࠩ, , न X, न Y, ࠩ + MACRO EasterTable width, height, Xcoord, Ycoord, addr + WORD addr ; ࠩ + WORD width ; ਭ + BYTE height+Ycoord ; + Y coord + WORD Xcoord+#4040 ; X coord ; !HARDCODE ࠢ #4040 - + BYTE Ycoord ; Y coord + ENDM +; + +; + MACRO _mRECOVERYrdChooseTYPE vers + IF vers = 1 + ; ᫨ RECOVERY ࠧ㬥 90% ᭮ 짮⥫᪨ ࠬ᪮ + ; 롨ࠥ ਠ, ॥, RECOVERY ᥣ 롨ࠥ RAM Disk 15 + ; + + ELSEIF vers = 2 + + ; 饬 ᢮ ࠬ + LD B,SYS_PAGE.RAMD_KEYS.NUM +.getRDidLoop: LD A,B + DEC A + LD (RECOVERYstart.RDkey),A + PUSH BC + LD B,ROM_DISK.Pages.Size + CALL EMM.GetMemRMD + POP BC + JR NC,RECOVERYstart.IMGread ; ᢮ ࠬ , 室 横 + DEC A + JR Z,RECOVERYstart.FreeMem ; 訡 - 筮 , 뢠 + DJNZ .getRDidLoop + ; + + ELSE + ASSERT 0, Invalid 'RECOVERYrdChooseTYPE' variant - RECOVERYrdChooseTYPE + ENDIF + ENDM +; + MACRO _mRECOVERYmountTYPE vers + IF vers = 1 ; , प ਠ + + LD HL,TEMP + CALL EMM.GetMemBlkPages ; ࠭ RAM disk + + IN A,(SLOT3) + LD (.slot3save),A + + LD HL,ROM_DISK.Pages.Number + LD B,0 + LD C,(HL) + INC C + LD DE,TEMP+ROM_DISK.Pages.Size + LDIR ; ࠭ ROM disk + + LD IY,TEMP+ROM_DISK.Pages.Size ; ROM_DISK.Pages.Number + LD IX,TEMP + LD B,(IY+0) + + LD A,R + PUSH AF + DI +.loopIMGtoRAM: PUSH BC + INC IY + LD A,(IY+0) + OUT (ROM.SLOT0),A + LD A,(IX+0) + OUT (SLOT3),A + INC IX + + LD HL,0 + LD DE,#C000 + LD BC,#4000 + LDIR + + POP BC + DJNZ .loopIMGtoRAM +.slot3save+*: LD A,0 + OUT (SLOT3),A + XOR A + OUT (ROM.SLOT0),A + OUT (SYS_PORT.ROM),A + POP AF + JP PO,.noInterrupts + EI +.noInterrupts: + ; + + ELSEIF vers = 2 ; , ࠢ ਠ १ 㭪樨 + + LD (.ramdskID),A + LD DE,0 ; ᥪ + LD B,(ROM_DISK.Pages.Size * #4000)/512 ; 稪 - - ᥪ஢ 512 +.loop: + ;read rom disk + PUSH BC + LD A,1 ;ࠧ ᥪ 256 + EX AF,AF' + LD A,#46 ;⥭ ROM-Disk + EX AF,AF' + LD HL,TEMP ; + LD B,2 ;᫮ ᥪ஢ + CALL BLK_RD_WR + + ;write to ram disk + PUSH DE ; ᥪ + DEC DE + DEC DE + +.ramdskID+*: LD A,0 ;䨪 + EX AF,AF' + LD A,#FF ; RAM-Disk + EX AF,AF' + LD HL,TEMP ; + LD B,2 ;᫮ ᥪ஢ + CALL BLK_RD_WR + + POP DE ; ᥪ + POP BC + DJNZ .loop + ; + + ELSE + ASSERT 0, Invalid 'RECOVERYmountTYPE' variant - RECOVERYmountTYPE + ENDIF + ENDM +; + +; + MACRO RST_to_BIOS + IF (IsInBIOS = 0) && ($ < #4000) + CALL ToBIOS_FromEXT + ELSE + RST ToBIOS_18 + ENDIF + ENDM + +; + +; + MACRO JP_to_BIOS + IF (IsInBIOS = 0) && ($ < #4000) + JP ToBIOS_FromEXT + ELSE + JP ToBIOS_18 + ENDIF + ENDM +; diff --git a/src/bios/shared/DEFINES.INC b/bios/shared/DEFINES.INC similarity index 97% rename from src/bios/shared/DEFINES.INC rename to bios/shared/DEFINES.INC index 9dcd46c..6841957 100644 --- a/src/bios/shared/DEFINES.INC +++ b/bios/shared/DEFINES.INC @@ -10,7 +10,7 @@ RELEASEhotFIX EQU 0 ; DEFINE SP2000_Loader_Flag #0107 ; DEFINE IDE_Optimization 1 ; ᫥ ⨬ 楤 ࠡ HDD DEFINE NeedSafePort_Y 1 ; ᫨ 0, ० ᥫ 楤 ࠭ - DEFINE PICTURE_FILE './src/bios/logo/psfathers.bmp' ; + DEFINE PICTURE_FILE './bios/logo/psfathers.bmp' ; DEFINE StandartCGApallete 1 ; standart_colors.inc DEFINE BitStream_SizeInPages 4 ; DEFINE USE_E1_SCANCODE 0 ; diff --git a/src/bios/shared/RECOVERY.IMG b/bios/shared/RECOVERY.IMG similarity index 100% rename from src/bios/shared/RECOVERY.IMG rename to bios/shared/RECOVERY.IMG diff --git a/src/bios/shared/VERSION.inc b/bios/shared/VERSION.inc similarity index 95% rename from src/bios/shared/VERSION.inc rename to bios/shared/VERSION.inc index 87f4338..f9aa2ca 100644 --- a/src/bios/shared/VERSION.inc +++ b/bios/shared/VERSION.inc @@ -1,60 +1,60 @@ -;; -; ============[For EXP part]============= -; ------[Version of BIOS "VER.MOD"]------ -EXP_ID: -.VER EQU SET_EXPID_VER ; ᨨ ! -.MOD EQU SET_EXPID_MOD ; ᨨ ! -BIOS_ver_hex EQU EXP_ID.VER*256+EXP_ID.MOD - - DEFINE BIOS_ver_string '0'+EXP_ID.VER, '.', '0'+EXP_ID.MOD/10, '0'+EXP_ID.MOD-(EXP_ID.MOD/10)*10 - - IF BETA_BUILD > 0 - IF BETA_RC > 0 - DEFINE BETA_str_ver "RC","0"+BETA_RC - ELSE - DEFINE BETA_str_ver "BETA ","0"+BETA_BUILD - ENDIF - ENDIF -;--------------------------------------- - DEFINE BoardID_start #5283 - DEFINE BoardID_end #47E8 - DEFINE MotherBoardID #0000 - DEFINE MotherBoardType #00 ; !TODO 0 - Legacy, 1 - DX, 2 - Max -;======================================= -;; - -; ============[For ROM part]============= -; -[Version of disk subsystem "VER.MOD"]- -ROM_ID: -.VER EQU 2 ; ᨨ ! -.MOD EQU 56 ; ᨨ ! -Disk_subsystem_ver_hex EQU ROM_ID.VER*256+ROM_ID.MOD - - DEFINE Disk_subsystem_ver_txt '0'+ROM_ID.VER, '.', '0'+ROM_ID.MOD/10, '0'+ROM_ID.MOD-(ROM_ID.MOD/10)*10 -;--------------------------------------- - IF RELEASEhotFIX != 0 - IF RELEASEhotFIX > 9 - DEFINE ReleaseHotFix ' Hotfix ', '0' + RELEASEhotFIX/10, '0' + (RELEASEhotFIX - (RELEASEhotFIX/10)*10) - ELSE - DEFINE ReleaseHotFix ' Hotfix ', '0' + RELEASEhotFIX - ENDIF - ELSE - DEFINE ReleaseHotFix "" - ENDIF -;; - -; ============[For CNF part]============= -CNF_ID: -.VER EQU 3 ; ᨨ ! -.MOD EQU 05 ; ᨨ ! -bitstream_ver_hex EQU CNF_ID.VER*256+CNF_ID.MOD - - DEFINE bitstream_ver_string '0'+CNF_ID.VER, '.', '0'+CNF_ID.MOD/10, '0'+CNF_ID.MOD-(CNF_ID.MOD/10)*10 -;--------------------------------------- -;; - -;======================================= - DEFINE SPTeam_year BUILD_YEAR - DEFINE SetupVer '1.60' -;--------------------------------------- +;; +; ============[For EXP part]============= +; ------[Version of BIOS "VER.MOD"]------ +EXP_ID: +.VER EQU SET_EXPID_VER ; ᨨ ! +.MOD EQU SET_EXPID_MOD ; ᨨ ! +BIOS_ver_hex EQU EXP_ID.VER*256+EXP_ID.MOD + + DEFINE BIOS_ver_string '0'+EXP_ID.VER, '.', '0'+EXP_ID.MOD/10, '0'+EXP_ID.MOD-(EXP_ID.MOD/10)*10 + + IF BETA_BUILD > 0 + IF BETA_RC > 0 + DEFINE BETA_str_ver "RC","0"+BETA_RC + ELSE + DEFINE BETA_str_ver "BETA ","0"+BETA_BUILD + ENDIF + ENDIF +;--------------------------------------- + DEFINE BoardID_start #5283 + DEFINE BoardID_end #47E8 + DEFINE MotherBoardID #0000 + DEFINE MotherBoardType #00 ; !TODO 0 - Legacy, 1 - DX, 2 - Max +;======================================= +;; + +; ============[For ROM part]============= +; -[Version of disk subsystem "VER.MOD"]- +ROM_ID: +.VER EQU 2 ; ᨨ ! +.MOD EQU 56 ; ᨨ ! +Disk_subsystem_ver_hex EQU ROM_ID.VER*256+ROM_ID.MOD + + DEFINE Disk_subsystem_ver_txt '0'+ROM_ID.VER, '.', '0'+ROM_ID.MOD/10, '0'+ROM_ID.MOD-(ROM_ID.MOD/10)*10 +;--------------------------------------- + IF RELEASEhotFIX != 0 + IF RELEASEhotFIX > 9 + DEFINE ReleaseHotFix ' Hotfix ', '0' + RELEASEhotFIX/10, '0' + (RELEASEhotFIX - (RELEASEhotFIX/10)*10) + ELSE + DEFINE ReleaseHotFix ' Hotfix ', '0' + RELEASEhotFIX + ENDIF + ELSE + DEFINE ReleaseHotFix "" + ENDIF +;; + +; ============[For CNF part]============= +CNF_ID: +.VER EQU 3 ; ᨨ ! +.MOD EQU 05 ; ᨨ ! +bitstream_ver_hex EQU CNF_ID.VER*256+CNF_ID.MOD + + DEFINE bitstream_ver_string '0'+CNF_ID.VER, '.', '0'+CNF_ID.MOD/10, '0'+CNF_ID.MOD-(CNF_ID.MOD/10)*10 +;--------------------------------------- +;; + +;======================================= + DEFINE SPTeam_year BUILD_YEAR + DEFINE SetupVer '1.60' +;--------------------------------------- ;; \ No newline at end of file diff --git a/bios/shared/includes.inc b/bios/shared/includes.inc new file mode 100644 index 0000000..5efcab5 --- /dev/null +++ b/bios/shared/includes.inc @@ -0,0 +1,17 @@ +; +;---------[All shared includes]--------- + INCLUDE 'bios/shared/DEFINES.INC' ; Shared defines + INCLUDE 'Shared_Includes/structures/FileSystem.inc' + INCLUDE 'Shared_Includes/structures/ATA_ATAPI.inc' + INCLUDE 'bios/Loader/Loader.asm' ; Bitstream loader as macros + INCLUDE 'bios/shared/CompMacro.asm' ; + INCLUDE 'Shared_Includes/constants/SP2000.inc' ; ⠭ + INCLUDE 'Shared_Includes/constants/zx_char_codes.inc' ; ⠭ + INCLUDE 'Shared_Includes/constants/zx_vars.inc' ; + INCLUDE 'Shared_Includes/macroses/macros.z80' + INCLUDE 'bios/ROM/MEM_MAP.inc' ; + INCLUDE 'bios/shared/VERSION.inc' ; EXP ROM + INCLUDE 'Shared_Includes/constants/BIOS_EQU.inc' + INCLUDE 'bios/ROM/BIOS.inc' +;--------------------------------------- +; diff --git a/src/doc/CDLOADER.TXT b/doc/CDLOADER.TXT similarity index 92% rename from src/doc/CDLOADER.TXT rename to doc/CDLOADER.TXT index 1866836..e1011be 100644 --- a/src/doc/CDLOADER.TXT +++ b/doc/CDLOADER.TXT @@ -1,262 +1,262 @@ - -RETTR PUSH BC - LD DE,DIR - LD HL,0 - LD IX,#0010 - LD BC,#0105 - LD A,(DRIVE) - RST #18 - POP BC - JR C,CDAGAA - LD HL,DIR - LD A,(HL) - INC HL - CP #01 - JR NZ,UNKCD - LD A,(HL) - INC HL - CP "C" - JR NZ,UNKCD - LD A,(HL) - INC HL - CP "D" - JR NZ,UNKCD - LD HL,DIR+#009E - LD DE,ROOTDIR - LDI - LDI - LDI - LDI - LD HL,DIR+#00A6 - LD DE,ROOTLEN - LDI - LDI - LDI - LDI - POP AF - OUT (PAGE3),A - LD HL,0 - LD (FATCASH),HL - XOR A - RET - -LOADDIR XOR A - LD HL,0 - LD IX,0 - LD B,0 - CALL MOVE_FP - LD A,DIRPAGE - CALL BANK - PUSH AF - LD B,3 -LOADFFF PUSH BC - LD HL,#C000 - LD DE,#C001 - LD BC,#3FFF - LD (HL),L - LDIR - LD A,(DRIVE) - LD (IY+FDRV),A -; LD C,(IY+LEN1) - LD C,(IY+LEN2) - LD B,(IY+LEN3) - LD E,(IY+LEN4) - LD D,0 - SRL D - RR E - RR B - RR C - SRL D - RR E - RR B - RR C - SRL D - RR E - RR B - RR C - LD E,(IY+CLU1) - LD D,(IY+CLU2) - LD L,(IY+CLU3) - LD H,(IY+CLU4) - LD HX,D - LD LX,E - LD B,C - LD A,B - OR A - JR Z,ERRLEND - CP #08 - JR C,NORLEND - LD B,8 -NORLEND LD A,(DRIVE) - LD C,5 - LD DE,DIR - RST #18 - POP BC - JR NC,LOADMMM - DEC B - JP NZ,LOADFFF - POP AF - OUT (PAGE3),A - SCF - LD A,20 - RET - -ERRLEND POP BC - POP AF - OUT (PAGE3),A - SCF - LD A,20 - RET - -LOADMMM POP AF - OUT (PAGE3),A - CALL CORRDIR - AND A - RET - -CORRDIR LD A,DIRPAGE - CALL BANK - PUSH AF - LD HL,DIR - LD DE,DIR -CORRL1 PUSH DE - LD C,(HL) - LD B,0 - LD DE,ENTRYBF - LDIR - POP DE - PUSH HL - LD HL,FCDFLEN - LD C,(HL) - LD B,0 - ADD HL,BC - INC HL - LD (HL),0 - SBC HL,BC - PUSH DE - CALL MASK - POP HL - LD BC,11 - ADD HL,BC - LD A,(FCDFLAG) - AND 2 - LD A,#00 ;ATTRIBUT FILE - JR Z,CORRL0 - LD A,#10 ;ATTRIBUT DIRECTORY -CORRL0 LD (HL),A - INC HL - XOR A - LD B,8 -FILLCDN LD (HL),A - INC HL - DJNZ FILLCDN - LD A,(FCDSEC+2) - LD (HL),A - INC HL - LD A,(FCDSEC+3) - LD (HL),A - INC HL - LD DE,#0000 ;TIME - LD (HL),E - INC HL - LD (HL),D - INC HL - LD DE,#0000 ;DATE - LD (HL),E - INC HL - LD (HL),D - INC HL - LD DE,(FCDSEC) - LD (HL),E - INC HL - LD (HL),D - INC HL - EX DE,HL - LD HL,FCDLEN - LDI - LDI - LDI - LDI - POP HL - BIT 7,H - JR Z,CORRL2 - LD A,(HL) - OR A - JP NZ,CORRL1 - LD L,0 - INC H - JR Z,CORRL2 - LD A,(HL) - OR A - JP NZ,CORRL1 -CORRL2 XOR A - LD (DE),A - LD DE,(ROOTDIR+0) - LD L,(IY+CLU1) - LD H,(IY+CLU2) - AND A - SBC HL,DE - JR NZ,CORRL6 - LD DE,(ROOTDIR+2) - LD L,(IY+CLU3) - LD H,(IY+CLU4) - AND A - SBC HL,DE - JR NZ,CORRL6 - LD HL,DIR - LD A,(HL) - CP " " - JR NZ,CORRL4 - LD (HL),#E5 - LD BC,#0020 - ADD HL,BC - LD A,(HL) - CP " " - JR NZ,CORRL4 - LD (HL),#E5 - JR CORRL4 -CORRL6 LD HL,DIR - LD A,(HL) - CP " " - JR NZ,CORRL4 - LD (HL),"." - LD BC,#0020 - ADD HL,BC - LD A,(HL) - CP " " - JR NZ,CORRL4 - LD (HL),"." - INC HL - LD (HL),"." -CORRL4 POP AF - OUT (PAGE3),A - AND A - RET - -ENTRYBF - DEFB #00 ;Entry lenght - DEFB #00 ;XAR in LBN -FCDSEC DEFW #00,#00 ;Start sector (Intel) - DEFW #00,#00 ;Start sector (Motorola) -FCDLEN DEFW #00,#00 ;Lenght file (Intel) - DEFW #00,#00 ;Lenght file (Motorola) -FCDYEAR DEFB #00 ;Year -FCDMOUN DEFB #00 ;Mount -FCDDAY DEFB #00 ;Day -FCDHOUR DEFB #00 ;Hour -FCDMIN DEFB #00 ;Minute -FCDSECN DEFB #00 ;Second - DEFB #00 ;Reserve -FCDFLAG DEFB #00 ;Flag - DEFB #00 ;Interlive size - DEFB #00 ;Interlive skip factor - DEFW #0000 ;Volume Set Sequence (Intel) - DEFW #0000 ;Volume Set Sequence (Motorola) -FCDFLEN DEFB #00 -DEFSA EQU $-ENTRYBF -FCDNAME DEFS #100-DEFSA - -ROOTDIR DEFW 0,0 -ROOTLEN DEFW 0,0 - - + +RETTR PUSH BC + LD DE,DIR + LD HL,0 + LD IX,#0010 + LD BC,#0105 + LD A,(DRIVE) + RST #18 + POP BC + JR C,CDAGAA + LD HL,DIR + LD A,(HL) + INC HL + CP #01 + JR NZ,UNKCD + LD A,(HL) + INC HL + CP "C" + JR NZ,UNKCD + LD A,(HL) + INC HL + CP "D" + JR NZ,UNKCD + LD HL,DIR+#009E + LD DE,ROOTDIR + LDI + LDI + LDI + LDI + LD HL,DIR+#00A6 + LD DE,ROOTLEN + LDI + LDI + LDI + LDI + POP AF + OUT (PAGE3),A + LD HL,0 + LD (FATCASH),HL + XOR A + RET + +LOADDIR XOR A + LD HL,0 + LD IX,0 + LD B,0 + CALL MOVE_FP + LD A,DIRPAGE + CALL BANK + PUSH AF + LD B,3 +LOADFFF PUSH BC + LD HL,#C000 + LD DE,#C001 + LD BC,#3FFF + LD (HL),L + LDIR + LD A,(DRIVE) + LD (IY+FDRV),A +; LD C,(IY+LEN1) + LD C,(IY+LEN2) + LD B,(IY+LEN3) + LD E,(IY+LEN4) + LD D,0 + SRL D + RR E + RR B + RR C + SRL D + RR E + RR B + RR C + SRL D + RR E + RR B + RR C + LD E,(IY+CLU1) + LD D,(IY+CLU2) + LD L,(IY+CLU3) + LD H,(IY+CLU4) + LD HX,D + LD LX,E + LD B,C + LD A,B + OR A + JR Z,ERRLEND + CP #08 + JR C,NORLEND + LD B,8 +NORLEND LD A,(DRIVE) + LD C,5 + LD DE,DIR + RST #18 + POP BC + JR NC,LOADMMM + DEC B + JP NZ,LOADFFF + POP AF + OUT (PAGE3),A + SCF + LD A,20 + RET + +ERRLEND POP BC + POP AF + OUT (PAGE3),A + SCF + LD A,20 + RET + +LOADMMM POP AF + OUT (PAGE3),A + CALL CORRDIR + AND A + RET + +CORRDIR LD A,DIRPAGE + CALL BANK + PUSH AF + LD HL,DIR + LD DE,DIR +CORRL1 PUSH DE + LD C,(HL) + LD B,0 + LD DE,ENTRYBF + LDIR + POP DE + PUSH HL + LD HL,FCDFLEN + LD C,(HL) + LD B,0 + ADD HL,BC + INC HL + LD (HL),0 + SBC HL,BC + PUSH DE + CALL MASK + POP HL + LD BC,11 + ADD HL,BC + LD A,(FCDFLAG) + AND 2 + LD A,#00 ;ATTRIBUT FILE + JR Z,CORRL0 + LD A,#10 ;ATTRIBUT DIRECTORY +CORRL0 LD (HL),A + INC HL + XOR A + LD B,8 +FILLCDN LD (HL),A + INC HL + DJNZ FILLCDN + LD A,(FCDSEC+2) + LD (HL),A + INC HL + LD A,(FCDSEC+3) + LD (HL),A + INC HL + LD DE,#0000 ;TIME + LD (HL),E + INC HL + LD (HL),D + INC HL + LD DE,#0000 ;DATE + LD (HL),E + INC HL + LD (HL),D + INC HL + LD DE,(FCDSEC) + LD (HL),E + INC HL + LD (HL),D + INC HL + EX DE,HL + LD HL,FCDLEN + LDI + LDI + LDI + LDI + POP HL + BIT 7,H + JR Z,CORRL2 + LD A,(HL) + OR A + JP NZ,CORRL1 + LD L,0 + INC H + JR Z,CORRL2 + LD A,(HL) + OR A + JP NZ,CORRL1 +CORRL2 XOR A + LD (DE),A + LD DE,(ROOTDIR+0) + LD L,(IY+CLU1) + LD H,(IY+CLU2) + AND A + SBC HL,DE + JR NZ,CORRL6 + LD DE,(ROOTDIR+2) + LD L,(IY+CLU3) + LD H,(IY+CLU4) + AND A + SBC HL,DE + JR NZ,CORRL6 + LD HL,DIR + LD A,(HL) + CP " " + JR NZ,CORRL4 + LD (HL),#E5 + LD BC,#0020 + ADD HL,BC + LD A,(HL) + CP " " + JR NZ,CORRL4 + LD (HL),#E5 + JR CORRL4 +CORRL6 LD HL,DIR + LD A,(HL) + CP " " + JR NZ,CORRL4 + LD (HL),"." + LD BC,#0020 + ADD HL,BC + LD A,(HL) + CP " " + JR NZ,CORRL4 + LD (HL),"." + INC HL + LD (HL),"." +CORRL4 POP AF + OUT (PAGE3),A + AND A + RET + +ENTRYBF + DEFB #00 ;Entry lenght + DEFB #00 ;XAR in LBN +FCDSEC DEFW #00,#00 ;Start sector (Intel) + DEFW #00,#00 ;Start sector (Motorola) +FCDLEN DEFW #00,#00 ;Lenght file (Intel) + DEFW #00,#00 ;Lenght file (Motorola) +FCDYEAR DEFB #00 ;Year +FCDMOUN DEFB #00 ;Mount +FCDDAY DEFB #00 ;Day +FCDHOUR DEFB #00 ;Hour +FCDMIN DEFB #00 ;Minute +FCDSECN DEFB #00 ;Second + DEFB #00 ;Reserve +FCDFLAG DEFB #00 ;Flag + DEFB #00 ;Interlive size + DEFB #00 ;Interlive skip factor + DEFW #0000 ;Volume Set Sequence (Intel) + DEFW #0000 ;Volume Set Sequence (Motorola) +FCDFLEN DEFB #00 +DEFSA EQU $-ENTRYBF +FCDNAME DEFS #100-DEFSA + +ROOTDIR DEFW 0,0 +ROOTLEN DEFW 0,0 + + diff --git a/src/doc/SETUP.REV b/doc/SETUP.REV similarity index 98% rename from src/doc/SETUP.REV rename to doc/SETUP.REV index aea21a2..f14ed3b 100644 --- a/src/doc/SETUP.REV +++ b/doc/SETUP.REV @@ -1,30 +1,30 @@ -;--------------------------------------------------------------- -;Rev Date Name Description -;--------------------------------------------------------------- -; build'e 2.53 -;R06 16-02-2002 DNS Add CMOS install routine. Disabled TRDOS install routine. -; build'e 2.52 -;R05 28-01-2002 DNS Add new items to SETUP Utility for screen position. -; build'e 2.51 -;R04 14-09-2001 DNS Added procedure GET_BOARD_NUMBER and - Removed 2 IDE (if with_2ide) -; build'e 2.50 -;R03a 02-08-2001 DNS ADD BUILD-IN CD DRIVER (Not release) -;R03 30-07-2001 DNS Developed a new IDE DETECT routine and fixied any bugs -;R02 25-07-2001 DNS Add Secondary IDE -; build'e 2.48 -;R01 23-04-2001 DNS Removed procedure GET_ID and make new which -; will be take Model Name. -;R00 xx-xx-2000 DNS New BIOS for Sp2000 build 2.48 -;--------------------------------------------------------------- -;Revisions: -;R01 - GET_ID Sprinter97, -; , Sp2000 . -;R02 - 4 -;R03 - IDE , -; , , CD, -; ( CDROM -; MASTER/SLAVE IDE(#FE:#C1C0-#C1CF). -;R04 - ( #ED) , -; IDE (if with_2ide) +;--------------------------------------------------------------- +;Rev Date Name Description +;--------------------------------------------------------------- +; build'e 2.53 +;R06 16-02-2002 DNS Add CMOS install routine. Disabled TRDOS install routine. +; build'e 2.52 +;R05 28-01-2002 DNS Add new items to SETUP Utility for screen position. +; build'e 2.51 +;R04 14-09-2001 DNS Added procedure GET_BOARD_NUMBER and + Removed 2 IDE (if with_2ide) +; build'e 2.50 +;R03a 02-08-2001 DNS ADD BUILD-IN CD DRIVER (Not release) +;R03 30-07-2001 DNS Developed a new IDE DETECT routine and fixied any bugs +;R02 25-07-2001 DNS Add Secondary IDE +; build'e 2.48 +;R01 23-04-2001 DNS Removed procedure GET_ID and make new which +; will be take Model Name. +;R00 xx-xx-2000 DNS New BIOS for Sp2000 build 2.48 +;--------------------------------------------------------------- +;Revisions: +;R01 - GET_ID Sprinter97, +; , Sp2000 . +;R02 - 4 +;R03 - IDE , +; , , CD, +; ( CDROM +; MASTER/SLAVE IDE(#FE:#C1C0-#C1CF). +;R04 - ( #ED) , +; IDE (if with_2ide) ;---------------------------------------------------------------- \ No newline at end of file diff --git a/src/doc/_BIOS.REV b/doc/_BIOS.REV similarity index 98% rename from src/doc/_BIOS.REV rename to doc/_BIOS.REV index 7f08748..718e1e0 100644 --- a/src/doc/_BIOS.REV +++ b/doc/_BIOS.REV @@ -1,121 +1,121 @@ -;--------------------------------------------------------------- -;Rev Date Name Description -;--------------------------------------------------------------- -; 3.04 -;R0046 16.06.2003 IM ࠢ ᮢ⨬ video Sp2000 -;R0046 13.06.2003 IM ࠢ  ० ZX -;R0046 02.06.2003 IM ࠢ - AS7C1024A-JC12 -; 3.03 -;R0045 05.02.2003 IM ࠢ - AS7C1024-JC12 -; 3.02 -;R0044 01.10.2002 IM 訢 -; 3.00.253 (10.04.2002) UPDATE01 -;R0043 01.04.2002 IM ४ 訢 SIMM -;R0042 10.03.2002 DNS Setup 253 -; 2.17.252 (03.03.2002) UPDATE-beta-version -;R0041 03-03-2002 IM ࠢ 梥 㭪樨 CGA -;R0040 02-03-2002 IM ࠢ 㭪樨 뤠 ⮢ -;R0039 02-03-2002 IM ⥭ ⥪⮢ CGA -; 2.16.252 (27.02.2002) WORK -;R0038 27-02-2002 IM 饭 ⢨ Spectrum-ROM -;R0037 26-02-2002 IM ⪮ ९ ࠭ 41h..47h Spectrum.ROM -;R0036 25-02-2002 IM ७ ZX/FN -;R0035 22-02-2002 IM BIOS 㭪 ⠭ Original-INT -;R0034 21-02-2002 IM 㭪 BIOS, ४ 720/1.44 -; 2.15.252 (18.02.2002) WORK -;R0033 18-02-2002 IM ࠢ ISA -;R0032 12-02-2002 IM 㭪 ⥭ ROM-Disk- -;R0031 12-02-2002 IM ࠢ 㭪 BIOS ⥭/ RAM-Disk- -;R0030 12-02-2002 IM ࠢ 奬 COVOX-Blaster- -;R0029 08-02-2002 IM a 奬 㯠 /Fast-RAM/ISA -; 2.14.252 (01.02.2002) WORK -;R0028 01-02-2002 DNS ᤢ ࠭ setup -; 2.13.251 (10.11.2002) WORK -;R0027 23-01-2002 IM COVOX-Blaster 16bit, 110khz, stereo -;R0026 17-01-2002 IM ࠢ 訡 㭪樨 FN_PIC1 -; 2.12.251 (10.11.2002) RELEASE -;R0025 10-01-2002 IM 饭 ࠭ 1 -; 2.11.251 (08.01.2002) WORK -;R0024 10-01-2002 IM ࠢ ।饣 ࠢ -;R0023 08-01-2002 IM ࠢ BIOS- (१㧪 ) -;R0022 08-01-2002 IM ࠧન FDD -; 2.10.251 (25.12.2001) RELEASE -;R0020 23-12-2001 IM ४ ᨭ஭樨 -;R0019 20-12-2001 IM ࠭ R0018 - NMI -; 2.09.251 (18.12.2001) WORK (for Denis only!) -;R0018 18-12-2001 IM 訢 ( NMI) -;R0017 17-12-2001 IM 訢 (ࠢ SIMM) -;R0016 15-12-2001 IM 訢 (ࠢ SINC) -;R0015 14-12-2001 IM 㭪 "L" Post -;R0014 19-11-2001 IM 祭 訢 Winbond -;R0013 18-11-2001 IM 饭 copyright Basic128 -; 2.08.251 (17.11.2001) WORK -;R0012 17-11-2001 IM 訢 17--2001 -; 2.07.251 (11.11.2001) WORK -;R0011 11-11-2001 IM 訢 11--2001 -; 2.06.251 (07.11.2001) WORK -;R0010 07-11-2001 IM 訢 07--2001 -; 2.06.251 (05.11.2001) WORK -;R0009 05-11-2001 IM 訢 05--2001 -; 2.05.251 (xx.xx.2001) WORK -;R0008 xx-xx-2001 IM -- ᠭ -- -; 2.04.251 (27.10.2001) RELEASE -;R0007 27-10-2001 IM 訢 27--2001 -;R0006 12-10-2001 IM ४ 訢 12--2001 -; 2.04.250 (04.10.2001) WORK -;R0005 04-10-2001 DNS ⠢ ROM.BIN 4--2001 -; 2.04.249 (22.09.2001) WORK -;R0004 22-09-2001 DNS ⠢ ROM.BIN ..... .. -;R0003 22-09-2001 IM ࠢ "Hardware" -;R0002 22-09-2001 IM ⠢ 㭪 0EDh -;R0001 22-09-2001 IM 㭪 GOTO Spectrum 0FBh -; 2.03.248 (08.06.2001) WORK -;--------------------------------------------------------------- -;Revisions: -;R0044 - ࠢ ࠢ: -; 몫祭 RESET -; 祭 NMI + -; ⪫祭 ZX-screen (ᮢ饭 ⮬ Sprinter/Spectrum) -;R0036 - -㭪 sprinter.exe ⠭ ७ EE -; 0 ਢ 室 ⠭ ࠭ த -; ࠡ ணࠬ, ⠭襩 墠 -;R0033 - ० Sprinter ISA १ 1FFD -; PAGE3=D0..DF -;R0031 - 㭪樨 ⥭/ RAM-Disk- ⮪ ... -; ࠡ⠫ -;R0030 - ࠭ ᡮ ந뢠 ० 뢠ﬨ, -; CBL 뢠 譨 뢠 ... -; 뢠 CBL ७ 稪 ⠭ 00h 80h -;R0029 - ࠧ Sprinter Spectrum ०. -; ० Spectrum Sprinter-ZX 室 -; Fast-RAM ⠫ ॥. -; ࠭ Fast-RAM ROM. १ 5F ० -; SYSTEM-on. 㯠 RAM ६ ࠡ -; ᢮ 㣨 㭪権 (ॡ DMA) -; ࠡ Fast-RAM 뢥 ᨬ ( ⮢). -; 모 Spectrum- BIOS. -;R0026 - ࠢ 訡 㭪樨 FN_PIC1. 뫨 ୠ ࠡ⪠ -; ࠭ RGADR. -;R0024 - ᫥⢨ R0023, ࡮ ᪮ - -; ४祭 ࠢ饣 ॣ boundary wait -;R0023 - 㦥 ࠭ 訡 ணࠬ १㧪 -; (१ ) ୮ 樠஢ boundary-ॣ Z84C15 -;R0022 - ࠭ ࠡ FDD, 訩 ᫥ ४஢ ࠡ -; SIMM- ( FDD 뢠 ࠭ ६) -;R0020 - ࠭ ᮢ⨬ 訢 "ன" "" ⨩ -;R0018 - "" NMI - alt+F12 NMI, 祣 -; ᫥ -;R0017 - প (input delay in MAX+) SIMM-, -; ६ﭪ ᨣ /WE SIMM -;R0016 - 奬 筮 ᨭ஭樨 -; +/- 0.25 -;R0015 - । 㧪 "L" Post-Tester-a -;R0014 - ࠭ help Winbond- (஢!) -;R0012 - ९ ࠢ ISA, - 襭 UMC -;R0011 - ९ ࠢ ISA, - ⪠ 2.04 ᨨ -;R0010 - ⥫쭮 㤠  - -;R0009 - 筮 㤠  - -;R0007 - ࠢ ⢥  ࠡ SIMM ⮤ -; ४樨 묨 ﬨ MAX-Plus. -;R0006 - ⥫쭮 ࠢ  ࠡ SIMM. -; +;--------------------------------------------------------------- +;Rev Date Name Description +;--------------------------------------------------------------- +; 3.04 +;R0046 16.06.2003 IM ࠢ ᮢ⨬ video Sp2000 +;R0046 13.06.2003 IM ࠢ  ० ZX +;R0046 02.06.2003 IM ࠢ - AS7C1024A-JC12 +; 3.03 +;R0045 05.02.2003 IM ࠢ - AS7C1024-JC12 +; 3.02 +;R0044 01.10.2002 IM 訢 +; 3.00.253 (10.04.2002) UPDATE01 +;R0043 01.04.2002 IM ४ 訢 SIMM +;R0042 10.03.2002 DNS Setup 253 +; 2.17.252 (03.03.2002) UPDATE-beta-version +;R0041 03-03-2002 IM ࠢ 梥 㭪樨 CGA +;R0040 02-03-2002 IM ࠢ 㭪樨 뤠 ⮢ +;R0039 02-03-2002 IM ⥭ ⥪⮢ CGA +; 2.16.252 (27.02.2002) WORK +;R0038 27-02-2002 IM 饭 ⢨ Spectrum-ROM +;R0037 26-02-2002 IM ⪮ ९ ࠭ 41h..47h Spectrum.ROM +;R0036 25-02-2002 IM ७ ZX/FN +;R0035 22-02-2002 IM BIOS 㭪 ⠭ Original-INT +;R0034 21-02-2002 IM 㭪 BIOS, ४ 720/1.44 +; 2.15.252 (18.02.2002) WORK +;R0033 18-02-2002 IM ࠢ ISA +;R0032 12-02-2002 IM 㭪 ⥭ ROM-Disk- +;R0031 12-02-2002 IM ࠢ 㭪 BIOS ⥭/ RAM-Disk- +;R0030 12-02-2002 IM ࠢ 奬 COVOX-Blaster- +;R0029 08-02-2002 IM a 奬 㯠 /Fast-RAM/ISA +; 2.14.252 (01.02.2002) WORK +;R0028 01-02-2002 DNS ᤢ ࠭ setup +; 2.13.251 (10.11.2002) WORK +;R0027 23-01-2002 IM COVOX-Blaster 16bit, 110khz, stereo +;R0026 17-01-2002 IM ࠢ 訡 㭪樨 FN_PIC1 +; 2.12.251 (10.11.2002) RELEASE +;R0025 10-01-2002 IM 饭 ࠭ 1 +; 2.11.251 (08.01.2002) WORK +;R0024 10-01-2002 IM ࠢ ।饣 ࠢ +;R0023 08-01-2002 IM ࠢ BIOS- (१㧪 ) +;R0022 08-01-2002 IM ࠧન FDD +; 2.10.251 (25.12.2001) RELEASE +;R0020 23-12-2001 IM ४ ᨭ஭樨 +;R0019 20-12-2001 IM ࠭ R0018 - NMI +; 2.09.251 (18.12.2001) WORK (for Denis only!) +;R0018 18-12-2001 IM 訢 ( NMI) +;R0017 17-12-2001 IM 訢 (ࠢ SIMM) +;R0016 15-12-2001 IM 訢 (ࠢ SINC) +;R0015 14-12-2001 IM 㭪 "L" Post +;R0014 19-11-2001 IM 祭 訢 Winbond +;R0013 18-11-2001 IM 饭 copyright Basic128 +; 2.08.251 (17.11.2001) WORK +;R0012 17-11-2001 IM 訢 17--2001 +; 2.07.251 (11.11.2001) WORK +;R0011 11-11-2001 IM 訢 11--2001 +; 2.06.251 (07.11.2001) WORK +;R0010 07-11-2001 IM 訢 07--2001 +; 2.06.251 (05.11.2001) WORK +;R0009 05-11-2001 IM 訢 05--2001 +; 2.05.251 (xx.xx.2001) WORK +;R0008 xx-xx-2001 IM -- ᠭ -- +; 2.04.251 (27.10.2001) RELEASE +;R0007 27-10-2001 IM 訢 27--2001 +;R0006 12-10-2001 IM ४ 訢 12--2001 +; 2.04.250 (04.10.2001) WORK +;R0005 04-10-2001 DNS ⠢ ROM.BIN 4--2001 +; 2.04.249 (22.09.2001) WORK +;R0004 22-09-2001 DNS ⠢ ROM.BIN ..... .. +;R0003 22-09-2001 IM ࠢ "Hardware" +;R0002 22-09-2001 IM ⠢ 㭪 0EDh +;R0001 22-09-2001 IM 㭪 GOTO Spectrum 0FBh +; 2.03.248 (08.06.2001) WORK +;--------------------------------------------------------------- +;Revisions: +;R0044 - ࠢ ࠢ: +; 몫祭 RESET +; 祭 NMI + +; ⪫祭 ZX-screen (ᮢ饭 ⮬ Sprinter/Spectrum) +;R0036 - -㭪 sprinter.exe ⠭ ७ EE +; 0 ਢ 室 ⠭ ࠭ த +; ࠡ ணࠬ, ⠭襩 墠 +;R0033 - ० Sprinter ISA १ 1FFD +; PAGE3=D0..DF +;R0031 - 㭪樨 ⥭/ RAM-Disk- ⮪ ... +; ࠡ⠫ +;R0030 - ࠭ ᡮ ந뢠 ० 뢠ﬨ, +; CBL 뢠 譨 뢠 ... +; 뢠 CBL ७ 稪 ⠭ 00h 80h +;R0029 - ࠧ Sprinter Spectrum ०. +; ० Spectrum Sprinter-ZX 室 +; Fast-RAM ⠫ ॥. +; ࠭ Fast-RAM ROM. १ 5F ० +; SYSTEM-on. 㯠 RAM ६ ࠡ +; ᢮ 㣨 㭪権 (ॡ DMA) +; ࠡ Fast-RAM 뢥 ᨬ ( ⮢). +; 모 Spectrum- BIOS. +;R0026 - ࠢ 訡 㭪樨 FN_PIC1. 뫨 ୠ ࠡ⪠ +; ࠭ RGADR. +;R0024 - ᫥⢨ R0023, ࡮ ᪮ - +; ४祭 ࠢ饣 ॣ boundary wait +;R0023 - 㦥 ࠭ 訡 ணࠬ १㧪 +; (१ ) ୮ 樠஢ boundary-ॣ Z84C15 +;R0022 - ࠭ ࠡ FDD, 訩 ᫥ ४஢ ࠡ +; SIMM- ( FDD 뢠 ࠭ ६) +;R0020 - ࠭ ᮢ⨬ 訢 "ன" "" ⨩ +;R0018 - "" NMI - alt+F12 NMI, 祣 +; ᫥ +;R0017 - প (input delay in MAX+) SIMM-, +; ६ﭪ ᨣ /WE SIMM +;R0016 - 奬 筮 ᨭ஭樨 +; +/- 0.25 +;R0015 - । 㧪 "L" Post-Tester-a +;R0014 - ࠭ help Winbond- (஢!) +;R0012 - ९ ࠢ ISA, - 襭 UMC +;R0011 - ९ ࠢ ISA, - ⪠ 2.04 ᨨ +;R0010 - ⥫쭮 㤠  - +;R0009 - 筮 㤠  - +;R0007 - ࠢ ⢥  ࠡ SIMM ⮤ +; ४樨 묨 ﬨ MAX-Plus. +;R0006 - ⥫쭮 ࠢ  ࠡ SIMM. +; diff --git a/src/doc/changes.txt b/doc/changes.txt similarity index 97% rename from src/doc/changes.txt rename to doc/changes.txt index 851f7c5..ed514b5 100644 --- a/src/doc/changes.txt +++ b/doc/changes.txt @@ -1,154 +1,154 @@ -TODO: --? 㭪 ⠯ "࠭ ࠭ ᯥ㬠 १㧪" -- , - 直 SIO/PIO, ᫨ - - -Done: -+ ࠡ⠭ ⥬ 墠 ࠭  饥 -+ ⠯ ࠡ⠥ ࠭ ஥ HDD "Setup" ᫥ ࢮ 㤠筮 ⮤⥪ -+ 㭨ᠫ 稪 ਬ 1k30 1k50 -+ ⨢஢ ன IDE -+ 㬥 ன IDE । ᫥⥫쭮 䨧 -+ 롮 㧮筮 IDE ᫥⥫쭮 䨧᪨ -+ ⠭ IDE ண ⢥ ᭮ ୠ⨢ 㧮筮 ᪠ -+ ࠭ Ctrl+Alt+Del -+ ४ 祭 ६ CMOS 䮫 祭, 뢮 ᮮ饭 訡 -+ Setup 롮 ० ࠧ⪨ (--------/Scorpion/Pentagon/Spectrum) -+ Setup 롮 ⨪쭮 ᨭ஭樨 (--------/312 50/320 49) -+ 㧪 ⥬ RAM Disk -+ ࠢ ⥪ BLK_TO_RAMD ᪮쪮 楤 ⥭ - -+ 㧪 RECOVERY ROM-Disk -+ 宫 ⠭ ⠣ ( ᪮௨), ᫨ CMOS -+ 㭪 FN_SINC (#F2) 㤠筮 襭 뢠 䫠 CF 室 - ࠢ -+ 㭪 GET_RAMD_NUM -+ ⥫ 樨 㭪 FN_SINC (#F2), bit7 ॣ A ⥯ ⢥砥 ४祭 ண/ - ਠ ࠡ 㭪樨 ( ࠭ ᮢ⨬ 묨 ணࠬ) -+ , ࠧ襭 25664 16 梥⮢ 12872 256 梥⮢ -+ 楤 뢮 ⨯, ⨯ ७ ࠭ -+ 몠, ࠧ⪨ ந室 Setup ࠧ -+ ࠢ SETUP -+ 㭪 FN_RESET -+ 㭪 DCP_CONFIG - 㭪 ࠢ ஬ ⮢ -+ ࠭ 㭪権 4 -+ 㭪樨 5 ७ᥭ 0 8 ࠭ -+ 㭪 樠樨 DCP, ᢮ 4,5 -+ १ࢨ஢ ० ᯥ㬠 ࠭ ᢮, - 1 -+ ࠧ ZX-Sprinter ᪠ ० ᯥ㬠 㧪 DSS -+ ࠭ BIOS ᮢ⨬ ஢묨 ࠧ ᯥ㬠. ⤥ ࠭ ਣ SP_EXP SP_EXP2 - ॡ. -+ ࠢ ० ᯥ㬠. 롮 Clear RAM ᫥騬 室 CAD ᠫ, - ⮬ 뢠 楤 FullInit ⪨ . ⪮ 뢠 墠 -+ ࠢ , ⨬஢ 楤, ᢮ 1,5 ࠡ BIOS ६ -+ ᪮쪮 ॢ 客 copy/paste, ࠡ 뫮 ⭮, ⭮, 諨 -+ ࠢ , ९ ⥪ 室-室 SETUP -+ ⥯ 䠪ਭ ))) -+ ᥣ ᯮ 㦥... -==================================================================================================================================================================================================================== - - ᠭ 㭪樨 FN_SINC (#F2) -LD A,sync_mode ; ० ᨭ஭樨 - ; Reg A bit7 = 0 - ० ⪨ ࠭ ⠭ INT - ; A=0 ० 㬮砭 - ᯮ ⪨ - ; ࠭ ० (⪫祭 뢮 ) - ; ⠭ INT ⥬ ६ - ; A=1 ० Scorpion - ; INT-, Scorpion-256 - ; A=2 ० Pentagon - ; INT-a Pentagon-128 - ; A=3 ० Spectrum - ; INT-a ਣ쭮 ZX Spectrum - ; A=4 ⠭ INT ஥ 짮⥫ CMOS - ; - ; Reg A bit7 = 1 - ० ⠭ ⨪쭮 ᨭ஭樨 / wait - ; bit1,bit0: - ; %00 - ᨭ ⠢ ⥬ ६ - ; %01 - ᨭ ⠢ CMOS - ; %10 - ᨭ 320 lines 49 Hz - ; %11 - ᨭ 312 lines 50 Hz - ; bit2: - ; %0 - ஢ bit1..bit0 - ; %1 - ஢ bit1..bit0 - ; - ; bit3: - ; %0 - no waits (port all_mode bit2 set) - ; %1 - original waits (port all_mode bit2 res) - ; bit4: - ; %0 - ஢ bit3 - ; %1 - ஢ bit3 - ; - ; bit5,bit6 - reserved -; - -DRV_GET_PAR: ; ࠬ ⥫ - LD A,drv_type ; 0..3 - ன⢠ - ; 4..7 - ⨯ ன⢠ - ; 0 - ᪮ - ; 6 - ram-disk - ; 8 - HDD - ; C - CD-ROM - LD C,#58 ; - RST ToBIOS ; NC - ଠ쭮 襭 - ; L - ᫮ ᥪ஢ ( 楫) - ; H - ᫮ - ; DE - ⢮ 樫஢ - ; IX - ࠧ ᥪ - ; B - . ࠬ: - ; FDD: - ; 7 - ⨯ 1.44/720 - ; HDD: - ; 0 - IDE 0/1 - ; 6 - CHS/LBA -;++++++++ ; RMD: ramdrive block id - ; ᫨ HL,DE FF - ன⢠ - ; CF - ன⢠ -; - - - ᠭ 㭪樨 FN_RESET -FN_RESET: ; १㧪 - LD B,res_type ; 1 - , 2 - soft reset, 3 - hard reset, 4 - Reinit spectrum pages - LD C,#FD ; 㭪樨 - RST ToBIOS ; CF -> 㭪 ᯮ, 稭: - ; ४⭮ 祭 res_type - ; ZX ࠭ ( res_type=4), ⮣ zx ⤠ ⮫쪮 ࠭ - ; BIOS -; - - - ᠭ 㭪樨 GET_RAMD_NUM (#9B) -GET_RAMD_NUM: ; RAM-Disk- (0..15) block id - LD A,id_blk ; 䨪 - LD C,#9B ; 㭪樨 - RST ToBIOS ; NC -> A - RAM-Disk- (0..15). - ; CF -> 訡 䨪 2.55 -; - - - ᠭ 㭪樨 BLK_RD_WR (#C8) -BLK_RD_WR: ; ⥭/ / () ᥪࠬ - ; 256 -LD HL,bufer ; -LD DE,sector ; ᮫ ᥪ (256b) -LD B,sec_num ; ᫮ ᥪ஢ -LD A,id_blk ; 䨪 ࠧ ᥪ (1 - 256b, 2 - 512b) command = #46 -LD A',command ; 0 - ⥭, #FF - , #46 ⥭ ROM-Disk -LD C,#C8 ; 㭪樨 -; - -s_line_def equ 4 -s_line_cmos equ 5 -s_lines320 equ 6 -s_lines312 equ 7 - -s_wait_orig equ #18 -s_wait_def equ #10 - - -DCP_CONFIG: ; [x] 㭪 ࠢ ஬ ⮢. - ;A - ᫨ , 맮 㭪樨 २樠樨 ⮢ PORTS_INIT - ;HL - - ;DE - ᪠ - 0 塞 , 1 塞 - ;B - - ;C - #F4 㭪樨 -; !FIXIT 㭪 뢠/뢠 ⥫ . +TODO: +-? 㭪 ⠯ "࠭ ࠭ ᯥ㬠 १㧪" +- , - 直 SIO/PIO, ᫨ + + +Done: ++ ࠡ⠭ ⥬ 墠 ࠭  饥 ++ ⠯ ࠡ⠥ ࠭ ஥ HDD "Setup" ᫥ ࢮ 㤠筮 ⮤⥪ ++ 㭨ᠫ 稪 ਬ 1k30 1k50 ++ ⨢஢ ன IDE ++ 㬥 ன IDE । ᫥⥫쭮 䨧 ++ 롮 㧮筮 IDE ᫥⥫쭮 䨧᪨ ++ ⠭ IDE ண ⢥ ᭮ ୠ⨢ 㧮筮 ᪠ ++ ࠭ Ctrl+Alt+Del ++ ४ 祭 ६ CMOS 䮫 祭, 뢮 ᮮ饭 訡 ++ Setup 롮 ० ࠧ⪨ (--------/Scorpion/Pentagon/Spectrum) ++ Setup 롮 ⨪쭮 ᨭ஭樨 (--------/312 50/320 49) ++ 㧪 ⥬ RAM Disk ++ ࠢ ⥪ BLK_TO_RAMD ᪮쪮 楤 ⥭ - ++ 㧪 RECOVERY ROM-Disk ++ 宫 ⠭ ⠣ ( ᪮௨), ᫨ CMOS ++ 㭪 FN_SINC (#F2) 㤠筮 襭 뢠 䫠 CF 室 - ࠢ ++ 㭪 GET_RAMD_NUM ++ ⥫ 樨 㭪 FN_SINC (#F2), bit7 ॣ A ⥯ ⢥砥 ४祭 ண/ + ਠ ࠡ 㭪樨 ( ࠭ ᮢ⨬ 묨 ணࠬ) ++ , ࠧ襭 25664 16 梥⮢ 12872 256 梥⮢ ++ 楤 뢮 ⨯, ⨯ ७ ࠭ ++ 몠, ࠧ⪨ ந室 Setup ࠧ ++ ࠢ SETUP ++ 㭪 FN_RESET ++ 㭪 DCP_CONFIG - 㭪 ࠢ ஬ ⮢ ++ ࠭ 㭪権 4 ++ 㭪樨 5 ७ᥭ 0 8 ࠭ ++ 㭪 樠樨 DCP, ᢮ 4,5 ++ १ࢨ஢ ० ᯥ㬠 ࠭ ᢮, - 1 ++ ࠧ ZX-Sprinter ᪠ ० ᯥ㬠 㧪 DSS ++ ࠭ BIOS ᮢ⨬ ஢묨 ࠧ ᯥ㬠. ⤥ ࠭ ਣ SP_EXP SP_EXP2 + ॡ. ++ ࠢ ० ᯥ㬠. 롮 Clear RAM ᫥騬 室 CAD ᠫ, + ⮬ 뢠 楤 FullInit ⪨ . ⪮ 뢠 墠 ++ ࠢ , ⨬஢ 楤, ᢮ 1,5 ࠡ BIOS ६ ++ ᪮쪮 ॢ 客 copy/paste, ࠡ 뫮 ⭮, ⭮, 諨 ++ ࠢ , ९ ⥪ 室-室 SETUP ++ ⥯ 䠪ਭ ))) ++ ᥣ ᯮ 㦥... +==================================================================================================================================================================================================================== + + ᠭ 㭪樨 FN_SINC (#F2) +LD A,sync_mode ; ० ᨭ஭樨 + ; Reg A bit7 = 0 - ० ⪨ ࠭ ⠭ INT + ; A=0 ० 㬮砭 - ᯮ ⪨ + ; ࠭ ० (⪫祭 뢮 ) + ; ⠭ INT ⥬ ६ + ; A=1 ० Scorpion + ; INT-, Scorpion-256 + ; A=2 ० Pentagon + ; INT-a Pentagon-128 + ; A=3 ० Spectrum + ; INT-a ਣ쭮 ZX Spectrum + ; A=4 ⠭ INT ஥ 짮⥫ CMOS + ; + ; Reg A bit7 = 1 - ० ⠭ ⨪쭮 ᨭ஭樨 / wait + ; bit1,bit0: + ; %00 - ᨭ ⠢ ⥬ ६ + ; %01 - ᨭ ⠢ CMOS + ; %10 - ᨭ 320 lines 49 Hz + ; %11 - ᨭ 312 lines 50 Hz + ; bit2: + ; %0 - ஢ bit1..bit0 + ; %1 - ஢ bit1..bit0 + ; + ; bit3: + ; %0 - no waits (port all_mode bit2 set) + ; %1 - original waits (port all_mode bit2 res) + ; bit4: + ; %0 - ஢ bit3 + ; %1 - ஢ bit3 + ; + ; bit5,bit6 - reserved +; + +DRV_GET_PAR: ; ࠬ ⥫ + LD A,drv_type ; 0..3 - ன⢠ + ; 4..7 - ⨯ ன⢠ + ; 0 - ᪮ + ; 6 - ram-disk + ; 8 - HDD + ; C - CD-ROM + LD C,#58 ; + RST ToBIOS ; NC - ଠ쭮 襭 + ; L - ᫮ ᥪ஢ ( 楫) + ; H - ᫮ + ; DE - ⢮ 樫஢ + ; IX - ࠧ ᥪ + ; B - . ࠬ: + ; FDD: + ; 7 - ⨯ 1.44/720 + ; HDD: + ; 0 - IDE 0/1 + ; 6 - CHS/LBA +;++++++++ ; RMD: ramdrive block id + ; ᫨ HL,DE FF - ன⢠ + ; CF - ன⢠ +; + + + ᠭ 㭪樨 FN_RESET +FN_RESET: ; १㧪 + LD B,res_type ; 1 - , 2 - soft reset, 3 - hard reset, 4 - Reinit spectrum pages + LD C,#FD ; 㭪樨 + RST ToBIOS ; CF -> 㭪 ᯮ, 稭: + ; ४⭮ 祭 res_type + ; ZX ࠭ ( res_type=4), ⮣ zx ⤠ ⮫쪮 ࠭ + ; BIOS +; + + + ᠭ 㭪樨 GET_RAMD_NUM (#9B) +GET_RAMD_NUM: ; RAM-Disk- (0..15) block id + LD A,id_blk ; 䨪 + LD C,#9B ; 㭪樨 + RST ToBIOS ; NC -> A - RAM-Disk- (0..15). + ; CF -> 訡 䨪 2.55 +; + + + ᠭ 㭪樨 BLK_RD_WR (#C8) +BLK_RD_WR: ; ⥭/ / () ᥪࠬ + ; 256 +LD HL,bufer ; +LD DE,sector ; ᮫ ᥪ (256b) +LD B,sec_num ; ᫮ ᥪ஢ +LD A,id_blk ; 䨪 ࠧ ᥪ (1 - 256b, 2 - 512b) command = #46 +LD A',command ; 0 - ⥭, #FF - , #46 ⥭ ROM-Disk +LD C,#C8 ; 㭪樨 +; + +s_line_def equ 4 +s_line_cmos equ 5 +s_lines320 equ 6 +s_lines312 equ 7 + +s_wait_orig equ #18 +s_wait_def equ #10 + + +DCP_CONFIG: ; [x] 㭪 ࠢ ஬ ⮢. + ;A - ᫨ , 맮 㭪樨 २樠樨 ⮢ PORTS_INIT + ;HL - + ;DE - ᪠ - 0 塞 , 1 塞 + ;B - + ;C - #F4 㭪樨 +; !FIXIT 㭪 뢠/뢠 ⥫ . ; \ No newline at end of file diff --git a/src/doc/перехваты ресета.txt b/doc/перехваты ресета.txt similarity index 96% rename from src/doc/перехваты ресета.txt rename to doc/перехваты ресета.txt index 7cf0991..19f8d7c 100644 --- a/src/doc/перехваты ресета.txt +++ b/doc/перехваты ресета.txt @@ -1,37 +1,37 @@ - BIOS ࠡ뢠 ਠ 墠 Reset: - --------------------------------[ਠ 1]------------------------------ - ࠧ ᫥ ᯥ樠쭠 楤 ஢ ࠭ #40 - 3 ᬥ饭 #FFE0 (RESTARTS) 稥 ணࠬ 墠稪. - 12 ணࠬ ⠪ 墠: - ORG #FFE0 -RESTARTS_PROG: - LD HL,RESTARTS ; 3 - LD B,16 ; 2 -.loop: - LD (HL),0 ; 2 - INC HL ; 1 - DJNZ .loop ; 2 - NOP ; 1 - NOP ; 1 -; ORG #FFEC ࠧ頥 ணࠬ 墠稪 짮⥫ -; 20 ⮢ ணࠬ. - - ਠ 㧪 ਭ ந樠஢, - ࠡ⠥ ⮢. ॥ ᥣ, ⠪ ਠ -墠 - ᫥ Sp97. ਠ, ᯮ짮 砥 -᪠ ᨫ쭮 ⫨饩 ⮩, BIOS. ⮣ 㦭, -⮡ 砫 ᫥騥 ࠭ : -BANK0 - ROM #08 -BANK1 - RAM #05 -BANK2 - RAM #02 -BANK3 - RAM #40 ------------------------------------------------------------------------- - --------------------------------[ਠ 2]------------------------------ - ------------------------------------------------------------------------- - --------------------------------[ਠ 3]------------------------------ - + BIOS ࠡ뢠 ਠ 墠 Reset: + +-------------------------------[ਠ 1]------------------------------ + ࠧ ᫥ ᯥ樠쭠 楤 ஢ ࠭ #40 + 3 ᬥ饭 #FFE0 (RESTARTS) 稥 ணࠬ 墠稪. + 12 ணࠬ ⠪ 墠: + ORG #FFE0 +RESTARTS_PROG: + LD HL,RESTARTS ; 3 + LD B,16 ; 2 +.loop: + LD (HL),0 ; 2 + INC HL ; 1 + DJNZ .loop ; 2 + NOP ; 1 + NOP ; 1 +; ORG #FFEC ࠧ頥 ணࠬ 墠稪 짮⥫ +; 20 ⮢ ணࠬ. + + ਠ 㧪 ਭ ந樠஢, + ࠡ⠥ ⮢. ॥ ᥣ, ⠪ ਠ +墠 - ᫥ Sp97. ਠ, ᯮ짮 砥 +᪠ ᨫ쭮 ⫨饩 ⮩, BIOS. ⮣ 㦭, +⮡ 砫 ᫥騥 ࠭ : +BANK0 - ROM #08 +BANK1 - RAM #05 +BANK2 - RAM #02 +BANK3 - RAM #40 +------------------------------------------------------------------------ + +-------------------------------[ਠ 2]------------------------------ + +------------------------------------------------------------------------ + +-------------------------------[ਠ 3]------------------------------ + ------------------------------------------------------------------------ \ No newline at end of file diff --git a/src/altera/acex/k30/ACCELER.ACF b/src/altera/acex/k30/ACCELER.ACF deleted file mode 100644 index 5480845..0000000 --- a/src/altera/acex/k30/ACCELER.ACF +++ /dev/null @@ -1,568 +0,0 @@ --- --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. --- -CHIP acceler -BEGIN - DEVICE = EP1K30QC208-3; -END; - -DEFAULT_DEVICES -BEGIN - AUTO_DEVICE = EP1K100FC484-1; - AUTO_DEVICE = EP1K100FC256-1; - AUTO_DEVICE = EP1K100QC208-1; - AUTO_DEVICE = EP1K50FC484-1; - AUTO_DEVICE = EP1K50FC256-1; - AUTO_DEVICE = EP1K50QC208-1; - AUTO_DEVICE = EP1K50TC144-1; - AUTO_DEVICE = EP1K30FC256-1; - AUTO_DEVICE = EP1K30QC208-1; - AUTO_DEVICE = EP1K30TC144-1; - ASK_BEFORE_ADDING_EXTRA_DEVICES = ON; -END; - -TIMING_POINT -BEGIN - DEVICE_FOR_TIMING_SYNTHESIS = EP1K30QC208-3; - FREQUENCY = 200MHz; - MAINTAIN_STABLE_SYNTHESIS = OFF; - CUT_ALL_CLEAR_PRESET = ON; - CUT_ALL_BIDIR = ON; -END; - -IGNORED_ASSIGNMENTS -BEGIN - FIT_IGNORE_TIMING = OFF; - DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF; - IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF; - IGNORE_DEVICE_ASSIGNMENTS = OFF; - IGNORE_LC_ASSIGNMENTS = OFF; - IGNORE_PIN_ASSIGNMENTS = OFF; - IGNORE_CHIP_ASSIGNMENTS = OFF; - IGNORE_TIMING_ASSIGNMENTS = OFF; - IGNORE_LOGIC_OPTION_ASSIGNMENTS = OFF; - IGNORE_CLIQUE_ASSIGNMENTS = OFF; -END; - -GLOBAL_PROJECT_DEVICE_OPTIONS -BEGIN - MAX7000B_ENABLE_VREFB = OFF; - MAX7000B_ENABLE_VREFA = OFF; - MAX7000B_VCCIO_IOBANK2 = 3.3V; - MAX7000B_VCCIO_IOBANK1 = 3.3V; - CONFIG_EPROM_PULLUP_RESISTOR = ON; - CONFIG_EPROM_USER_CODE = FFFFFFFF; - FLEX_CONFIGURATION_EPROM = AUTO; - MAX7000AE_ENABLE_JTAG = ON; - MAX7000AE_USER_CODE = FFFFFFFF; - FLEX6000_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX10KA_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = ON; - FLEX10K_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX6000_ENABLE_JTAG = OFF; - CONFIG_SCHEME_FLEX_6000 = PASSIVE_SERIAL; - MULTIVOLT_IO = OFF; - MAX7000S_ENABLE_JTAG = ON; - FLEX10K_ENABLE_LOCK_OUTPUT = OFF; - MAX7000S_USER_CODE = FFFF; - CONFIG_SCHEME_10K = PASSIVE_SERIAL; - FLEX10K_JTAG_USER_CODE = 7F; - ENABLE_INIT_DONE_OUTPUT = OFF; - ENABLE_CHIP_WIDE_OE = OFF; - ENABLE_CHIP_WIDE_RESET = OFF; - nCEO = UNRESERVED; - CLKUSR = UNRESERVED; - ADD17 = UNRESERVED; - ADD16 = UNRESERVED; - ADD15 = UNRESERVED; - ADD14 = UNRESERVED; - ADD13 = UNRESERVED; - ADD0_TO_ADD12 = UNRESERVED; - SDOUT = RESERVED_DRIVES_OUT; - RDCLK = UNRESERVED; - RDYnBUSY = UNRESERVED; - nWS_nRS_nCS_CS = UNRESERVED; - DATA1_TO_DATA7 = UNRESERVED; - DATA0 = RESERVED_TRI_STATED; - FLEX8000_ENABLE_JTAG = OFF; - CONFIG_SCHEME = ACTIVE_SERIAL; - DISABLE_TIME_OUT = OFF; - ENABLE_DCLK_OUTPUT = OFF; - RELEASE_CLEARS = OFF; - AUTO_RESTART = OFF; - USER_CLOCK = OFF; - SECURITY_BIT = OFF; - RESERVED_PINS_PERCENT = 0; - RESERVED_LCELLS_PERCENT = 0; -END; - -GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS -BEGIN - STYLE = FAST; - DEVICE_FAMILY = ACEX1K; - MULTI_LEVEL_SYNTHESIS_MAX9000 = ON; - AUTO_IMPLEMENT_IN_EAB = OFF; - AUTO_OPEN_DRAIN_PINS = ON; - ONE_HOT_STATE_MACHINE_ENCODING = OFF; - AUTO_REGISTER_PACKING = OFF; - AUTO_FAST_IO = OFF; - AUTO_GLOBAL_OE = ON; - AUTO_GLOBAL_PRESET = ON; - AUTO_GLOBAL_CLEAR = ON; - AUTO_GLOBAL_CLOCK = ON; - MULTI_LEVEL_SYNTHESIS_MAX5000_7000 = OFF; - OPTIMIZE_FOR_SPEED = 5; -END; - -COMPILER_PROCESSING_CONFIGURATION -BEGIN - USE_QUARTUS_FITTER = ON; - PRESERVE_ALL_NODE_NAME_SYNONYMS = OFF; - FITTER_SETTINGS = NORMAL; - SMART_RECOMPILE = OFF; - GENERATE_AHDL_TDO_FILE = OFF; - RPT_FILE_USER_ASSIGNMENTS = ON; - RPT_FILE_LCELL_INTERCONNECT = ON; - RPT_FILE_HIERARCHY = ON; - RPT_FILE_EQUATIONS = ON; - LINKED_SNF_EXTRACTOR = OFF; - OPTIMIZE_TIMING_SNF = OFF; - TIMING_SNF_EXTRACTOR = ON; - FUNCTIONAL_SNF_EXTRACTOR = OFF; - DESIGN_DOCTOR_RULES = EPLD; - DESIGN_DOCTOR = OFF; -END; - -COMPILER_INTERFACES_CONFIGURATION -BEGIN - NETLIST_OUTPUT_TIME_SCALE = 0.1ns; - EDIF_INPUT_SHOW_LMF_MAPPING_MESSAGES = OFF; - EDIF_BUS_DELIMITERS = []; - EDIF_FLATTEN_BUS = OFF; - EDIF_OUTPUT_FORCE_0NS_DELAYS = OFF; - EDIF_OUTPUT_INCLUDE_SPECIAL_PRIM = OFF; - EDIF_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - EDIF_OUTPUT_DELAY_CONSTRUCTS = EDO_FILE; - EDIF_OUTPUT_USE_EDC = OFF; - EDIF_INPUT_USE_LMF2 = OFF; - EDIF_INPUT_USE_LMF1 = OFF; - EDIF_OUTPUT_GND = GND; - EDIF_OUTPUT_VCC = VCC; - EDIF_INPUT_GND = GND; - EDIF_INPUT_VCC = VCC; - EDIF_OUTPUT_EDC_FILE = *.edc; - EDIF_INPUT_LMF2 = *.lmf; - EDIF_INPUT_LMF1 = *.lmf; - VHDL_GENERATE_CONFIGURATION_DECLARATION = OFF; - VHDL_OUTPUT_DELAY_CONSTRUCTS = VHO_FILE; - VERILOG_OUTPUT_DELAY_CONSTRUCTS = VO_FILE; - VHDL_FLATTEN_BUS = OFF; - VERILOG_FLATTEN_BUS = OFF; - EDIF_TRUNCATE_HIERARCHY_PATH = OFF; - VHDL_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - VHDL_WRITER_VERSION = VHDL87; - VHDL_READER_VERSION = VHDL87; - SYNOPSYS_MAPPING_EFFORT = MEDIUM; - SYNOPSYS_BOUNDARY_OPTIMIZATION = OFF; - SYNOPSYS_HIERARCHICAL_COMPILATION = ON; - SYNOPSYS_DESIGNWARE = OFF; - SYNOPSYS_COMPILER = DESIGN; - USE_SYNOPSYS_SYNTHESIS = OFF; - VHDL_NETLIST_WRITER = OFF; - VERILOG_NETLIST_WRITER = OFF; - XNF_GENERATE_AHDL_TDX_FILE = ON; - XNF_TRANSLATE_INTERNAL_NODE_NAMES = ON; - XNF_EMULATE_TRI_STATE_BUSES = INTERNAL_LOGIC; - EDIF_OUTPUT_VERSION = 200; - EDIF_NETLIST_WRITER = OFF; -END; - -CUSTOM_DESIGN_DOCTOR_RULES -BEGIN - MASTER_RESET = OFF; - EXPANDER_NETWORKS = ON; - RACE_CONDITIONS = ON; - DELAY_CHAINS = ON; - ASYNCHRONOUS_INPUTS = ON; - PRESET_CLEAR_NETWORKS = ON; - STATIC_HAZARDS_AFTER_SYNTHESIS = OFF; - STATIC_HAZARDS_BEFORE_SYNTHESIS = ON; - MULTI_CLOCK_NETWORKS = ON; - MULTI_LEVEL_CLOCKS = ON; - GATED_CLOCKS = ON; - RIPPLE_CLOCKS = ON; -END; - -SIMULATOR_CONFIGURATION -BEGIN - END_TIME = 5.0us; - BIDIR_PIN = STRONG; - START_TIME = 0.0ns; - GLITCH_TIME = 0.0ns; - GLITCH = OFF; - OSCILLATION_TIME = 0.0ns; - OSCILLATION = OFF; - CHECK_OUTPUTS = OFF; - SETUP_HOLD = OFF; - USE_DEVICE = OFF; -END; - -TIMING_ANALYZER_CONFIGURATION -BEGIN - ANALYSIS_MODE = REGISTERED_PERFORMANCE; - CUT_OFF_RAM_REGISTERED_WE_PATHS = OFF; - LIST_PATH_FREQUENCY = 10MHz; - LIST_PATH_COUNT = 10; - REGISTERED_PERFORMANCE_OPTIONS = NUMBER_OF_PATHS; - INCLUDE_PATHS_LESS_THAN_VALUE = 214.7483647ms; - INCLUDE_PATHS_LESS_THAN = OFF; - INCLUDE_PATHS_GREATER_THAN_VALUE = 0.0ns; - INCLUDE_PATHS_GREATER_THAN = OFF; - DELAY_MATRIX_OPTIONS = SHOW_ALL_PATHS; - CELL_WIDTH = 18; - LIST_ONLY_LONGEST_PATH = ON; - CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; - CUT_OFF_IO_PIN_FEEDBACK = ON; - AUTO_RECALCULATE = OFF; -END; - -OTHER_CONFIGURATION -BEGIN - LAST_MAXPLUS2_VERSION = 10.0; - ROW_PINS_LCELL_INSERT = ON; - CARRY_OUT_PINS_LCELL_INSERT = OFF; - NORMAL_LCELL_INSERT = ON; - EXPLICIT_FAMILY = 1; - FLEX_10K_52_COLUMNS = 40; - DEFAULT_9K_EXP_PER_LCELL = 1/2; - LOCAL_INTERCONNECT_PER_LAB_PERCENT = 100; - LCELLS_PER_ROW_PERCENT = 100; - FAN_IN_PER_LCELL_PERCENT = 100; - EXP_PER_LCELL_PERCENT = 100; - ROW_PINS_PERCENT = 50; - ORIGINAL_MAXPLUS2_VERSION = 9.6; - COMPILER_DATA = "1,1,0,1,0,0,0,1,1,1,1,0,1,1,1"; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = ON; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.FLEX8000 -BEGIN - CARRY_CHAIN_LENGTH = 32; - CASCADE_CHAIN_LENGTH = 2; - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = AUTO; - CASCADE_CHAIN = AUTO; - MINIMIZATION = FULL; - IGNORE_SOFT_BUFFERS = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = MANUAL; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = MANUAL; -END; - diff --git a/src/altera/acex/k30/ACCELER.INC b/src/altera/acex/k30/ACCELER.INC deleted file mode 100644 index 8610479..0000000 --- a/src/altera/acex/k30/ACCELER.INC +++ /dev/null @@ -1,26 +0,0 @@ --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. - --- MAX+plus II Include File --- Version 10.0 9/14/2000 --- Created: Fri Jan 25 12:59:19 2002 - -FUNCTION acceler (clk42, /reset, ct[2..0], ras, cas, clk_z80, mc_end, mc_begin, mc_type, mc_write, ai[15..0], di[7..0], /io, /rd, /wr, /mr, /rf, /m1, /iom, dcp[7..0], mdi[15..0], acc_ena, hddr[7..0], hdd_flip) - RETURNS (continue, ao[15..0], do[7..0], mdo[15..0], md[7..0], g_line[7..0], glisser, acc_on, double_cas, acc_dir[7..0]); diff --git a/src/altera/acex/k30/ACCELER.TDF b/src/altera/acex/k30/ACCELER.TDF deleted file mode 100644 index 45ccc00..0000000 --- a/src/altera/acex/k30/ACCELER.TDF +++ /dev/null @@ -1,374 +0,0 @@ - - TITLE "ACCELERATOR"; - -INCLUDE "lpm_ram_dp"; - -SUBDESIGN acceler - ( - CLK42 : INPUT; - /RESET : INPUT; - CT[2..0] : INPUT; - - RAS : INPUT; - CAS : INPUT; - CLK_Z80 : INPUT; - - CONTINUE : OUTPUT; - - MC_END : INPUT; - MC_BEGIN : INPUT; - MC_TYPE : INPUT; - MC_WRITE : INPUT; --- MCA[1..0] : INPUT; - - AI[15..0] : INPUT; - DI[7..0] : INPUT; - - AO[15..0] : OUTPUT; - DO[7..0] : OUTPUT; - - /IO : INPUT; - /RD : INPUT; - /WR : INPUT; - /MR : INPUT; - /RF : INPUT; - /M1 : INPUT; - /IOM : INPUT; - - DCP[7..0] : INPUT; - - MDI[15..0] : INPUT; - MDO[15..0] : OUTPUT; - MD[7..0] : OUTPUT; - - G_LINE[7..0]: OUTPUT; - - GLISSER : OUTPUT; - - ACC_ON : OUTPUT; - - ACC_ENA : INPUT; - - DOUBLE_CAS : OUTPUT; - - HDDR[7..0] : INPUT; - HDD_FLIP : INPUT; - - ACC_DIR[7..0] : OUTPUT; - - ) -VARIABLE - - RAM : LPM_RAM_DP WITH (LPM_WIDTH=16,LPM_WIDTHAD=8); - - DO[7..0] : DFFE; - MDO[15..0] : DFFE; - - PRF_CMD : DFFE; - ED_CMD : DFFE; - CB_CMD : DFFE; - ID_CMD : DFFE; - IN_OUT_CMD : DFFE; - - CORRECT_1F : NODE; - - ACC_BLK : DFF; - - RETI : DFFE; - RETN : DFFE; - - AA[15..0] : DFFE; - - RGACC[7..0] : DFFE; - AGR[7..0] : DFFE; - ACC_CNT[7..0] : DFFE; - - START_ACC : NODE; - ACC_END : DFFE; - FN_ACC[2..0]: DFFE; - ACC_MODE[3..0] : DFFE; - - MD[7..0] : LCELL; - XMD[7..0] : DFF; - XMDH[7..0] : DFF; - - ACC_DIR[7..0] : LCELL; - - /M1M : NODE; - - ACC_GO : NODE; - ACC_GO_1 : NODE; - - RAM_WR : NODE; - - STATE_EI : DFFE; - --- HDDR[7..0] : DFFE; - - XAGR[7..0] : DFFE; - AAGR[9..0] : DFFE; - XCNT[7..0] : DFFE; - ALT_ACC : NODE; - - RAM_ADR[7..0] : NODE; - ACC_C : NODE; - WR_C7 : NODE; - - XCNT_AGR[15..0] : NODE; - - MDOX[7..0] : DFF; - MDOY[7..0] : DFF; - - GLISS_R : DFF; - - ACC_TIME : NODE; - -BEGIN - - ACC_ON = ACC_DIR0; - - /M1M = DFF(!/M1,CLK_Z80,/RESET,); - - PRF_CMD.clk = /MR; - PRF_CMD.ena = /M1M; - PRF_CMD.d = (DI[] == B"11XX1XX1") & - ((DI[] == B"XX00X01X") or -- CB - (DI[] == B"XX01X10X") or -- DD - (DI[] == B"XX10X10X") or -- ED - (DI[] == B"XX11X10X")); -- FD - --- === interrupt === 0 - disable; 1 - enable - - STATE_EI.clk = /MR; - STATE_EI.ena = /M1M & !PRF_CMD & (DI[] == B"1111X011"); - STATE_EI.d = DI3; - --- RETI comand - - ED_CMD.clk = /MR; - ED_CMD.ena = /M1M; - ED_CMD.d = (DI[] == H"ED"); - - RETI.clk = /MR; - RETI.ena = /M1M; - RETI.d = ED_CMD & (DI[] == H"4D"); - --- "1" on the RETI triger is the end of interupt sycle. - - RETN.clk = /MR; - RETN.ena = /M1M; - RETN.d = ED_CMD & (DI[] == H"45"); - --- The end of NMI sycle. - - ACC_BLK.clk = /M1; - ACC_BLK.d = DFF(((/IO & ACC_BLK) or (!ACC_BLK & RETI)),CLK_Z80,,); - ACC_BLK.prn = /RESET & ACC_MODE3; - - CB_CMD.clk = /MR; - ID_CMD.clk = /MR; - CB_CMD.ena = /M1M; - ID_CMD.ena = /M1M; - - CB_CMD.d = (DI[] == H"CB"); - ID_CMD.d = (DI[] == B"11X11101"); - - IN_OUT_CMD.clk = /MR; - IN_OUT_CMD.ena = /M1M; - IN_OUT_CMD.d = (DI[] == B"1101X011") & !PRF_CMD; -- D3/DB - IN_OUT_CMD.clrn = /IO; - - CORRECT_1F = LCELL(IN_OUT_CMD & (DO[] == H"1F") & !/MR & !/RD); - DO[4..3].clrn = !CORRECT_1F; - - ACC_GO = DFFE((CAS or START_ACC),CLK42,,(!/MR & /M1),CT1); - ACC_GO_1 = DFF(ACC_GO,CLK42,,); - --- == accelerator number == - - RGACC[].clk = /MR; - RGACC[].ena = DFF((/M1 & /RF & ACC_DIR3),CLK_Z80,,); - RGACC[].d = DI[]; - --- == accelerator grafic line == - - AGR[].clk = CLK42; - AGR[].ena = !DFF((/IOM or /WR or !DFF((DCP[] == B"1100X100"),CLK42,,)),CLK42,,) or - !(!ACC_DIR4 or ACC_GO or !ACC_GO_1); - - CASE DFF(START_ACC,CLK42,,) IS - WHEN 0 => AGR[].d = AGR[] + 1; - WHEN 1 => AGR[].d = DI[]; - END CASE; - - AGR[].clrn = /RESET; - - G_LINE[] = AGR[]; - --- == accelerator counter == - - ACC_C = (!ACC_GO & DFF(((CT0 & !/RD) or (CT1 & !/WR)),CLK42,,)); - ACC_CNT[].clk = CLK42; --- ACC_CNT[].ena = START_ACC or (ACC_C & ACC_DIR2); - ACC_CNT[].ena = LCELL(START_ACC or (ACC_C & ACC_DIR2)); - - CASE DFF(START_ACC,CLK42,,) IS - WHEN 1 => ACC_CNT[].d = RGACC[]; - WHEN 0 => ACC_CNT[].d = ACC_CNT[] - 1; - END CASE; - - WR_C7 = DFF((/IOM or DFF(!/IOM,CLK42,,) or /WR or DFF(!(DCP[] == B"1100X111"),CLK42,,)),CLK42,,); - ALT_ACC = DFF(VCC,WR_C7,/RESET,); - - (AAGR[].ena,XCNT[].ena,XAGR[].ena) = LCELL(!WR_C7 or (ACC_DIR1 & ACC_C)); - (AAGR[].clk,XCNT[].clk,XAGR[].clk) = CLK42; - - XCNT_AGR[15..0] = (XCNT[],XAGR[]) + (B"000000",AAGR[]); - - CASE !DFF(START_ACC,CLK42,,) IS - WHEN 1 => AAGR[].d = AAGR[]; - (XCNT[].d,XAGR[].d) = XCNT_AGR[15..0]; - WHEN 0 => AAGR[].d = (AI9,AI8,DI[]); - (XCNT[].d,XAGR[].d) = (B"00",AI[15..10],B"00000000"); - END CASE; - --- == accelerator dir == - - START_ACC = LCELL(LCELL(/MR or !/M1 or !/RF or !ACC_BLK) or (!ACC_DIR0 or MC_TYPE)); - - DOUBLE_CAS= LCELL(ACC_DIR6 & !START_ACC); - - ACC_END.clk = CLK42; - ACC_END.ena = !ACC_GO & ACC_GO_1; - ACC_END.prn = /M1; - ACC_END.d = (ACC_CNT[] == 1) or !ACC_DIR2; - - CONTINUE = ACC_END; - - CASE ACC_MODE[2..0] IS - WHEN 0 => ACC_DIR[] = B"00000000"; % LD B,B % - WHEN 1 => ACC_DIR[] = B"00100101"; % LD C,C % % fill by constant % - WHEN 2 => ACC_DIR[] = B"00001001"; % LD D,D % % load count accelerator % - WHEN 3 => ACC_DIR[] = B"00010101"; % LD E,E % % fill by constant VERTICAL % - WHEN 4 => ACC_DIR[] = B"01000001"; % LD H,H % % duble byte fn % - WHEN 5 => ACC_DIR[] = B"00100111"; % LD L,L % % copy line % - WHEN 6 => ACC_DIR[] = B"00000000"; % HALT % - WHEN 7 => ACC_DIR[] = B"00010111"; % LD A,A % % copy line VERTICAL % - END CASE; - --- == accelerator mode == - - ACC_MODE[].clk = /MR; - ACC_MODE[].ena = DFF((!/M1 & !PRF_CMD & - LCELL((DI[] == B"XXX00X00") or - (DI[] == B"XXX01X01") or - (DI[] == B"XXX10X10") or - (DI[] == B"XXX11X11")) & - LCELL((DI[] == B"010XX0XX") or - (DI[] == B"011XX1XX"))),CLK_Z80,,); - ACC_MODE[].d = (VCC,DI[2..0]); - ACC_MODE[2..0].clrn = /RESET & ACC_ENA; - ACC_MODE[3].clrn = /RESET & !DFF(ACC_MODE3,CLK_Z80,,); - --- == accelerator datas == - - CASE DFFE(AA0,CLK42,,,(CT2 & CT1)) IS - WHEN 0 => MD[] = MDI[7..0]; --- GLISSER = DFF((MDO[7..0] == H"FF"),CLK42,,); - WHEN 1 => MD[] = MDI[15..8]; --- GLISSER = DFF((MDO[15..8] == H"FF"),CLK42,,); - END CASE; - - GLISS_R.clk = CLK42; - CASE ACC_DIR1 IS - WHEN 0 => GLISS_R = LCELL(DI[] == H"FF"); - WHEN 1 => GLISS_R = LCELL(RAM.q[7..4] == H"F") & LCELL(RAM.q[3..0] == H"F"); - END CASE; - GLISSER = GLISS_R; - --- MDO[].clk = !CLK42; - MDO[].clk = CLK42; - - MDO[].ena = CAS; - - MDOX[].clk = CLK42; - MDOY[].clk = CLK42; - - CASE LCELL(MC_END & HDD_FLIP) IS - WHEN 0 => MDOX[7..0] = DI[]; - WHEN 1 => MDOX[7..0] = HDDR[]; - END CASE; - - CASE ACC_DIR6 IS - WHEN 0 => MDOY[7..0] = DI[]; - WHEN 1 => MDOY[7..0] = HDDR[]; - END CASE; - - CASE LCELL(/IO & ACC_DIR1) IS - WHEN 0 => MDO[].d = (MDOY[],MDOX[]); - WHEN 1 => MDO[].d = (RAM.q[7..0],RAM.q[7..0]); - END CASE; - - DO[].clk = DFF(MC_END,!CLK42,,); --- DO[].clk = !CLK42; - DO[].ena = VCC; --- DO[].ena = DFF(!MC_END,CLK42,,); - DO[].d = MD[]; - --- == accelerator functions == - - FN_ACC[].clk = /MR; - FN_ACC[].ena = /M1M; - FN_ACC[].d = LCELL(DI7 & !DI6 & !PRF_CMD) & !(DI[5..3]); - - XMDH[].clk = !CLK42; - XMDH[] = MDI[15..8]; - - XMD[].clk = !CLK42; - CASE FN_ACC[1..0] IS - WHEN 0 => - XMD[] = MD[]; % BE % - WHEN 1 => - XMD[] = MD[] or RAM.q[7..0]; % B6 % - WHEN 2 => - XMD[] = MD[] xor RAM.q[7..0]; % AE % - WHEN 3 => - XMD[] = MD[] & RAM.q[7..0]; % A6 % - END CASE; - - CASE ALT_ACC IS - WHEN 0 => RAM_ADR[] = ACC_CNT[]; - WHEN 1 => RAM_ADR[] = XCNT[]; - END CASE; - - ACC_TIME = LCELL((!ACC_END or !DFFE(ACC_END,CLK42,,,(CT1 & CT2)))); - --- RAM_WR = DFF((!/RD & (!ACC_GO & CT0) & ACC_TIME),CLK42,,); - RAM_WR = DFF((!/RD & (!ACC_GO & CT0) & ACC_DIR1),CLK42,,); - - RAM.wren = RAM_WR; - RAM.data[] = (XMD[],XMD[]); --- RAM.wraddress[] = ACC_CNT[]; - RAM.wraddress[] = RAM_ADR[]; - RAM.wrclock = CLK42; - RAM.wrclken = VCC; - RAM.rden = VCC; --- RAM.rdaddress[] = ACC_CNT[]; - RAM.rdaddress[] = RAM_ADR[]; - RAM.rdclock = CLK42; - RAM.rdclken = VCC; - - AA[].clk = CLK42; --- AA[].ena = START_ACC or (ACC_DIR5 & !ACC_GO & ACC_GO_1); - AA[].ena = LCELL(START_ACC or (ACC_DIR5 & !(CAS or START_ACC) & (ACC_GO or (ACC_GO_1 & ACC_DIR6)))); - - CASE DFF(START_ACC,CLK42,,) IS - WHEN 1 => AA[].d = AI[]; --- WHEN 0 => AA[].d = AA[] + (B"00000000000000",ACC_DIR6,!ACC_DIR6); - WHEN 0 => AA[].d = AA[] + 1; - END CASE; - - AO[] = (AA[15..0]); - -END; - diff --git a/src/altera/acex/k30/AY.ACF b/src/altera/acex/k30/AY.ACF deleted file mode 100644 index 2f068ab..0000000 --- a/src/altera/acex/k30/AY.ACF +++ /dev/null @@ -1,578 +0,0 @@ --- --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. --- -CHIP ay -BEGIN - DEVICE = EP1K30QC208-3; -END; - -DEFAULT_DEVICES -BEGIN - AUTO_DEVICE = EP1K100FC484-1; - AUTO_DEVICE = EP1K100FC256-1; - AUTO_DEVICE = EP1K100QC208-1; - AUTO_DEVICE = EP1K50FC484-1; - AUTO_DEVICE = EP1K50FC256-1; - AUTO_DEVICE = EP1K50QC208-1; - AUTO_DEVICE = EP1K50TC144-1; - AUTO_DEVICE = EP1K30FC256-1; - AUTO_DEVICE = EP1K30QC208-1; - AUTO_DEVICE = EP1K30TC144-1; - AUTO_DEVICE = EP1K10FC256-1; - AUTO_DEVICE = EP1K10QC208-1; - AUTO_DEVICE = EP1K10TC144-1; - AUTO_DEVICE = EP1K10TC100-1; - ASK_BEFORE_ADDING_EXTRA_DEVICES = ON; -END; - -TIMING_POINT -BEGIN - DEVICE_FOR_TIMING_SYNTHESIS = EP1K30QC208-3; - FREQUENCY = 100MHz; - MAINTAIN_STABLE_SYNTHESIS = OFF; - CUT_ALL_CLEAR_PRESET = ON; - CUT_ALL_BIDIR = ON; -END; - -IGNORED_ASSIGNMENTS -BEGIN - FIT_IGNORE_TIMING = ON; - DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF; - IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF; - IGNORE_DEVICE_ASSIGNMENTS = OFF; - IGNORE_LC_ASSIGNMENTS = OFF; - IGNORE_PIN_ASSIGNMENTS = OFF; - IGNORE_CHIP_ASSIGNMENTS = OFF; - IGNORE_TIMING_ASSIGNMENTS = OFF; - IGNORE_LOGIC_OPTION_ASSIGNMENTS = OFF; - IGNORE_CLIQUE_ASSIGNMENTS = OFF; -END; - -GLOBAL_PROJECT_DEVICE_OPTIONS -BEGIN - MAX7000B_ENABLE_VREFB = OFF; - MAX7000B_ENABLE_VREFA = OFF; - MAX7000B_VCCIO_IOBANK2 = 3.3V; - MAX7000B_VCCIO_IOBANK1 = 3.3V; - CONFIG_EPROM_PULLUP_RESISTOR = ON; - CONFIG_EPROM_USER_CODE = FFFFFFFF; - FLEX_CONFIGURATION_EPROM = AUTO; - MAX7000AE_ENABLE_JTAG = ON; - MAX7000AE_USER_CODE = FFFFFFFF; - FLEX6000_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX10KA_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = ON; - FLEX10K_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX6000_ENABLE_JTAG = OFF; - CONFIG_SCHEME_FLEX_6000 = PASSIVE_SERIAL; - MULTIVOLT_IO = OFF; - MAX7000S_ENABLE_JTAG = ON; - FLEX10K_ENABLE_LOCK_OUTPUT = OFF; - MAX7000S_USER_CODE = FFFF; - CONFIG_SCHEME_10K = PASSIVE_SERIAL; - FLEX10K_JTAG_USER_CODE = 7F; - ENABLE_INIT_DONE_OUTPUT = OFF; - ENABLE_CHIP_WIDE_OE = OFF; - ENABLE_CHIP_WIDE_RESET = OFF; - nCEO = UNRESERVED; - CLKUSR = UNRESERVED; - ADD17 = UNRESERVED; - ADD16 = UNRESERVED; - ADD15 = UNRESERVED; - ADD14 = UNRESERVED; - ADD13 = UNRESERVED; - ADD0_TO_ADD12 = UNRESERVED; - SDOUT = RESERVED_DRIVES_OUT; - RDCLK = UNRESERVED; - RDYnBUSY = UNRESERVED; - nWS_nRS_nCS_CS = UNRESERVED; - DATA1_TO_DATA7 = UNRESERVED; - DATA0 = RESERVED_TRI_STATED; - FLEX8000_ENABLE_JTAG = OFF; - CONFIG_SCHEME = ACTIVE_SERIAL; - DISABLE_TIME_OUT = OFF; - ENABLE_DCLK_OUTPUT = OFF; - RELEASE_CLEARS = OFF; - AUTO_RESTART = OFF; - USER_CLOCK = OFF; - SECURITY_BIT = OFF; - RESERVED_PINS_PERCENT = 0; - RESERVED_LCELLS_PERCENT = 0; -END; - -GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS -BEGIN - MULTI_LEVEL_SYNTHESIS_MAX9000 = ON; - AUTO_IMPLEMENT_IN_EAB = OFF; - AUTO_OPEN_DRAIN_PINS = ON; - ONE_HOT_STATE_MACHINE_ENCODING = OFF; - AUTO_REGISTER_PACKING = OFF; - DEVICE_FAMILY = ACEX1K; - STYLE = NORMAL; - AUTO_FAST_IO = OFF; - AUTO_GLOBAL_OE = ON; - AUTO_GLOBAL_PRESET = ON; - AUTO_GLOBAL_CLEAR = ON; - AUTO_GLOBAL_CLOCK = ON; - MULTI_LEVEL_SYNTHESIS_MAX5000_7000 = OFF; - OPTIMIZE_FOR_SPEED = 5; -END; - -COMPILER_PROCESSING_CONFIGURATION -BEGIN - USE_QUARTUS_FITTER = ON; - PRESERVE_ALL_NODE_NAME_SYNONYMS = OFF; - FITTER_SETTINGS = NORMAL; - SMART_RECOMPILE = OFF; - GENERATE_AHDL_TDO_FILE = OFF; - RPT_FILE_USER_ASSIGNMENTS = ON; - RPT_FILE_LCELL_INTERCONNECT = ON; - RPT_FILE_HIERARCHY = ON; - RPT_FILE_EQUATIONS = ON; - LINKED_SNF_EXTRACTOR = OFF; - OPTIMIZE_TIMING_SNF = OFF; - TIMING_SNF_EXTRACTOR = ON; - FUNCTIONAL_SNF_EXTRACTOR = OFF; - DESIGN_DOCTOR_RULES = EPLD; - DESIGN_DOCTOR = OFF; -END; - -COMPILER_INTERFACES_CONFIGURATION -BEGIN - NETLIST_OUTPUT_TIME_SCALE = 0.1ns; - EDIF_INPUT_SHOW_LMF_MAPPING_MESSAGES = OFF; - EDIF_BUS_DELIMITERS = []; - EDIF_FLATTEN_BUS = OFF; - EDIF_OUTPUT_FORCE_0NS_DELAYS = OFF; - EDIF_OUTPUT_INCLUDE_SPECIAL_PRIM = OFF; - EDIF_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - EDIF_OUTPUT_DELAY_CONSTRUCTS = EDO_FILE; - EDIF_OUTPUT_USE_EDC = OFF; - EDIF_INPUT_USE_LMF2 = OFF; - EDIF_INPUT_USE_LMF1 = OFF; - EDIF_OUTPUT_GND = GND; - EDIF_OUTPUT_VCC = VCC; - EDIF_INPUT_GND = GND; - EDIF_INPUT_VCC = VCC; - EDIF_OUTPUT_EDC_FILE = *.edc; - EDIF_INPUT_LMF2 = *.lmf; - EDIF_INPUT_LMF1 = *.lmf; - VHDL_GENERATE_CONFIGURATION_DECLARATION = OFF; - VHDL_OUTPUT_DELAY_CONSTRUCTS = VHO_FILE; - VERILOG_OUTPUT_DELAY_CONSTRUCTS = VO_FILE; - VHDL_FLATTEN_BUS = OFF; - VERILOG_FLATTEN_BUS = OFF; - EDIF_TRUNCATE_HIERARCHY_PATH = OFF; - VHDL_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - VHDL_WRITER_VERSION = VHDL93; - VHDL_READER_VERSION = VHDL93; - SYNOPSYS_MAPPING_EFFORT = MEDIUM; - SYNOPSYS_BOUNDARY_OPTIMIZATION = OFF; - SYNOPSYS_HIERARCHICAL_COMPILATION = ON; - SYNOPSYS_DESIGNWARE = OFF; - SYNOPSYS_COMPILER = DESIGN; - USE_SYNOPSYS_SYNTHESIS = OFF; - VHDL_NETLIST_WRITER = OFF; - VERILOG_NETLIST_WRITER = OFF; - XNF_GENERATE_AHDL_TDX_FILE = ON; - XNF_TRANSLATE_INTERNAL_NODE_NAMES = ON; - XNF_EMULATE_TRI_STATE_BUSES = INTERNAL_LOGIC; - EDIF_OUTPUT_VERSION = 200; - EDIF_NETLIST_WRITER = OFF; -END; - -CUSTOM_DESIGN_DOCTOR_RULES -BEGIN - MASTER_RESET = OFF; - EXPANDER_NETWORKS = ON; - RACE_CONDITIONS = ON; - DELAY_CHAINS = ON; - ASYNCHRONOUS_INPUTS = ON; - PRESET_CLEAR_NETWORKS = ON; - STATIC_HAZARDS_AFTER_SYNTHESIS = OFF; - STATIC_HAZARDS_BEFORE_SYNTHESIS = ON; - MULTI_CLOCK_NETWORKS = ON; - MULTI_LEVEL_CLOCKS = ON; - GATED_CLOCKS = ON; - RIPPLE_CLOCKS = ON; -END; - -SIMULATOR_CONFIGURATION -BEGIN - BIDIR_PIN = STRONG; - END_TIME = 0.0ns; - START_TIME = 0.0ns; - GLITCH_TIME = 0.0ns; - GLITCH = OFF; - OSCILLATION_TIME = 0.0ns; - OSCILLATION = OFF; - CHECK_OUTPUTS = OFF; - SETUP_HOLD = OFF; - USE_DEVICE = OFF; -END; - -TIMING_ANALYZER_CONFIGURATION -BEGIN - ANALYSIS_MODE = REGISTERED_PERFORMANCE; - CUT_OFF_RAM_REGISTERED_WE_PATHS = OFF; - LIST_PATH_FREQUENCY = 10MHz; - LIST_PATH_COUNT = 10; - REGISTERED_PERFORMANCE_OPTIONS = NUMBER_OF_PATHS; - INCLUDE_PATHS_LESS_THAN_VALUE = 214.7483647ms; - INCLUDE_PATHS_LESS_THAN = OFF; - INCLUDE_PATHS_GREATER_THAN_VALUE = 0.0ns; - INCLUDE_PATHS_GREATER_THAN = OFF; - DELAY_MATRIX_OPTIONS = SHOW_ALL_PATHS; - CELL_WIDTH = 18; - LIST_ONLY_LONGEST_PATH = ON; - CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; - CUT_OFF_IO_PIN_FEEDBACK = ON; - AUTO_RECALCULATE = OFF; -END; - -OTHER_CONFIGURATION -BEGIN - ROW_PINS_LCELL_INSERT = ON; - CARRY_OUT_PINS_LCELL_INSERT = OFF; - NORMAL_LCELL_INSERT = ON; - EXPLICIT_FAMILY = 1; - LAST_MAXPLUS2_VERSION = 10.0; - FLEX_10K_52_COLUMNS = 40; - DEFAULT_9K_EXP_PER_LCELL = 1/2; - LOCAL_INTERCONNECT_PER_LAB_PERCENT = 100; - LCELLS_PER_ROW_PERCENT = 100; - FAN_IN_PER_LCELL_PERCENT = 100; - EXP_PER_LCELL_PERCENT = 100; - ROW_PINS_PERCENT = 50; - ORIGINAL_MAXPLUS2_VERSION = 10.0; - COMPILER_DATA = "1,1,0,1,0,0,0,1,1,1,1,0,1,1,1"; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = ON; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = AUTO; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = AUTO; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = MANUAL; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = MANUAL; -END; - diff --git a/src/altera/acex/k30/AY.INC b/src/altera/acex/k30/AY.INC deleted file mode 100644 index aec944a..0000000 --- a/src/altera/acex/k30/AY.INC +++ /dev/null @@ -1,26 +0,0 @@ --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. - --- MAX+plus II Include File --- Version 10.0 9/14/2000 --- Created: Sat May 26 07:09:40 2001 - -FUNCTION ay (/reset, clk42, ay_t[8..0], ay_d_wr, ay_a_wr, d[7..0], beeper) - RETURNS (do[7..0], ay_ch_a[3..0], ay_ch_b[3..0], ay_ch_c[3..0], ay_ch_l[9..0], ay_ch_r[9..0], ay_ch_val); diff --git a/src/altera/acex/k30/AY.MIF b/src/altera/acex/k30/AY.MIF deleted file mode 100644 index 1ed1d5e..0000000 --- a/src/altera/acex/k30/AY.MIF +++ /dev/null @@ -1,154 +0,0 @@ -DEPTH = 256; % Memory depth and width are required % -WIDTH = 8; % Enter a decimal number % - -ADDRESS_RADIX = HEX; % Address and value radixes are optional % -DATA_RADIX = BIN; % Enter BIN, DEC, HEX, or OCT; unless % - % otherwise specified, radixes = HEX % - --- Specify values for addresses, which can be single address or range - -CONTENT -BEGIN - [0..7F] : 00000000; - 0 : 00000000 00000000 - 00000000 00000000 - 00000000 00000000 - 00000000 11111111 - 00000000 00000000 - 00000000 00000000 - 00000000 00000000 - 00000000 00000000 - - 11111111 11111111 - 11111111 11111111 - 11111111 11111111 - 11111111 11111111 - 11111111 11111111 - 11111111 11111111 - 11111111 00000001 - 00000000 11111111 - ; - 1E : 00000000; - 1F : 11111111; - - 30 : 00000000 - 00000010 - 00000011 - 00000100 - 00000110 - 00001000 - 00001011 - 00010000 - 00010110 - 00100000 - 00101101 - 01000000 - 01011010 - 10000000 - 10110100 - 11111111; - - [80..FF]: 00000000; - -% - 000 - set CX, load & sub 1 - 001 - load - 010 - save, if NZ,reset CX - 011 - bit_out - 100 - load & sub 1 - 101 - load & sub C - 110 - if CX, save - 111 - read states /RESET, AY_F_RES -% - - 80 : - 00010000 -- set C,CX load reg10 & sub C - 01010000 -- save reg10 & reset CX if NZ - 10110001 -- load reg11 & sub C - 01010001 -- save reg11 & reset CX if NZ - - 00100000 -- set C load reg00 & sub C - 11010000 -- save reg10 if CX - 00100001 -- load reg01 & sub C - 11010001 -- save reg11 if CX - - 00101000 -- load reg08 - 01100001 -- set AY_OUT1 - - - 00010010 -- set C,CX load reg12 & sub C - 01010010 -- save reg12 & reset CX if NZ - 10110011 -- load reg13 & sub C - 01010011 -- save reg13 & reset CX if NZ - - 00100010 -- set C load reg02 & sub C - 11010010 -- save reg12 if CX - 00100011 -- load reg03 & reset CX if NZ - 11010011 -- save reg13 if CX - - 00101001 -- load reg09 - 01100010 -- set AY_OUT2 - - - 00010100 -- set C,CX load reg14 & sub C - 01010100 -- save reg14 & reset CX if NZ - 10110101 -- load reg15 & sub C - 01010101 -- save reg15 & reset CX if NZ - - 00100100 -- set C load reg04 & sub C - 11010100 -- save reg14 if CX - 00100101 -- load reg05 & reset CX if NZ - 11010101 -- save reg15 if CX - - 00101010 -- load reg0A - 01100011 -- set AY_OUT3 - - - 00010111 -- set C,CX load reg17 & dec 1 - 01010111 -- save reg17 & reset CX if NZ - 00100110 -- load reg06 dec 1 *********** - 11010111 -- save reg17 if CX - - 01100100 -- set AY_SH - 00000000 -- NOP - - 00011000 -- set C,CX load reg18 & sub C - 01011000 -- save reg18 & reset CX if NZ - 10111001 -- load reg19 & sub C - 01011001 -- save reg19 & reset CX if NZ - - 00101011 -- load reg0B & sub 1 - 11011000 -- save reg18 if CX - 00101100 -- load reg0C & sub C - 11011001 -- save reg19 if CX - - 01100101 -- set FORM_CLK - - 11100000 -- set CX = AY_F_RES - --- 00101011 -- load reg0B & sub 1 --- 11011000 -- save reg18 if CX --- 00101100 -- load reg0C & sub C --- 11011001 -- save reg19 if CX - - 11100001 -- set CX = /RESET - - 00111111 -- load reg1F - FF *********** - 11000111 -- save reg07 if CX - 00111110 -- load reg1E - 00 *********** - - 11001101 -- save reg0D if CX - 11001000 -- save reg08 if CX - 11001001 -- save reg09 if CX - 11001010 -- save reg0a if CX - - 00100111 -- load reg07 *********** - 01100110 -- set keys_bits - - 00101101 -- load reg0D *********** - 01100111 -- set keys_bits SET-FORM-bits - --- 01100000 -- set AY_OUT_ALL - - ; -END ; diff --git a/src/altera/acex/k30/AY.TDF b/src/altera/acex/k30/AY.TDF deleted file mode 100644 index c090bef..0000000 --- a/src/altera/acex/k30/AY.TDF +++ /dev/null @@ -1,368 +0,0 @@ - - TITLE "AY-3-8910"; - -include "lpm_ram_dq"; -include "lpm_add_sub"; - -SUBDESIGN ay - ( - /RESET : INPUT; - CLK42 : INPUT; -- ⠪ 42 - AY_T[8..0] : INPUT; -- 譨 稪 ⠪⮢ - - AY_D_WR : INPUT; - AY_A_WR : INPUT; - - D[7..0] : INPUT; - DO[7..0] : OUTPUT; - - AY_CH_A[3..0] : OUTPUT; - AY_CH_B[3..0] : OUTPUT; - AY_CH_C[3..0] : OUTPUT; - - AY_CH_L[9..0] : OUTPUT; - AY_CH_R[9..0] : OUTPUT; - - AY_CH_VAL : OUTPUT; -- chanels data valid - BEEPER : INPUT; - - ) -VARIABLE - - BD[7..0] : DFFE; - BWR : DFFE; - AWR : DFFE; - - AY_DI[7..0] : NODE; - AY_DO[7..0] : NODE; - - AY_F_RES : NODE; - AY_F_R1 : NODE; - - AY_ADR[7..0] : DFF; - AY_AAX[1..0] : DFF; - - AY_X_[5..0] : DFFE; - AY_GF[3..0] : DFFE; - - AY_OUT[3..1] : DFFE; - AY_OUTS[3..1] : NODE; - - AY_CLK1 : NODE; - AY_SH[16..0] : DFFE; - AY_AA[3..0] : DFF; - AY_SH_Q : NODE; - - AY_ABLK : NODE; - AY_BBLK : NODE; - AY_AINV : NODE; - AY_BINV : NODE; - - AY_ADRX[7..0] : NODE; - AY_CCC[8..0] : DFF; - AY_AX[7..0] : NODE; - AY_C : DFFE; - AY_CX : DFFE; - AY_CXX : DFFE; - AY_WR : NODE; - AY_VA[3..0] : DFFE; - AY_VAR : DFFE; - AY_VX : DFFE; - - AY_DAT_WR : DFF; - AY_DAT[7..0] : DFFE; - - AY_DQ1[3..0] : DFFE; - AY_DQ2[3..0] : DFFE; - AY_DQ3[3..0] : DFFE; - - AY_DQX[3..0] : DFFE; - AY_OUTSX : NODE; - AY_CH_MIX : DFF; - - AY_AMP[3..0] : DFF; - - AY_DD[7..0] : DFFE; - - AY_CH_A[3..0] : DFF; - AY_CH_B[3..0] : DFF; - AY_CH_C[3..0] : DFF; - - AY_CH_CS[8..0] : DFF; - AY_CH_LX[10..0] : DFFE; - AY_CH_RX[10..0] : DFFE; - --- AY_CH_L[9..0] : DFF; --- AY_CH_R[9..0] : DFF; - - AY_CH_DIR[7..0] : DFFE; - - AY_OUTS1X : NODE; - AY_OUTS2X : NODE; - AY_OUTS3X : NODE; - - AY_OUTS1Y : NODE; --- AY_OUTS2Y : NODE; - AY_OUTS3Y : NODE; - -BEGIN - --- ====== AY8910 III version ========= - - BD[].clk = CLK42; - AWR.clk = CLK42; - BWR.clk = CLK42; - - BD[].ena = AY_CCC1; - BWR.ena = AY_CCC1; - AWR.ena = AY_CCC1; - - BD[7..5].clrn = !((AY_ADR[3..0] == B"00X1") or -- ch 1,2 - (AY_ADR[3..0] == B"0101") or -- ch 3 - (AY_ADR[3..0] == B"0110") -- ch shum - ); - BD4.clrn = !((AY_ADR[3..0] == B"00X1") or -- ch 1,2 - (AY_ADR[3..0] == B"0101") -- ch 3 - ); - - BD[] = D[]; - - AWR = AY_A_WR; --- BWR = (AY_D_WR or !(AY_ADR[5..4] == 0)); - BWR = AY_D_WR; - - AY_CH_DIR[].clk = AY_D_WR; - AY_CH_DIR[].ena = (AY_ADR[] == B"XXX10000"); - AY_CH_DIR[].d = D[]; - AY_CH_DIR[].clrn= /RESET; - - AY_CCC[].clk = CLK42; - AY_CCC[8..0].d = AY_T[]; - - (AY_AAX[].clk,AY_ADR[].clk) = AY_A_WR; - AY_ADR[].d = D[]; - - -- Write to 0D register - AY_AAX0.d = (D[3..0] == B"1101"); - -- Write to AMP registers 08,09,0A - AY_AAX1.d = (D[3..0] == B"1000") or (D[3..0] == B"1001") or (D[3..0] == B"1010"); - - -- reset signal for form generator --- AY_F_RES = DFF(VCC,DFF((!((AY_DO[7..5] == B"111") & AY_CCC1 & !AY_DO0) or AY_F_RES),CLK42,,),LCELL(!(AY_AAX0 or (AY_AAX1 & BD4)) or BWR),); - --- AY_F_R1 = DFF((!(AY_AAX0 or (AY_AAX1)) or BWR),CLK42,,); - AY_F_R1 = DFF((!AY_AAX0 or BWR),CLK42,,); - AY_F_RES = DFF(DFF(VCC,AY_CCC7,AY_F_R1,),AY_CCC7,AY_F_R1,); - - AY_X_[].prn = VCC; - --- AY_GF[3..0].clrn = /RESET; --- AY_GF[3..0].clk = AY_D_WR; --- AY_GF[3..0].ena = AY_ADR[] == B"XXXX1101"; --- AY_GF[3..0].d = D[3..0]; - - AY_DAT_WR.clk = CLK42; - - CASE AY_CCC[1..0] IS - WHEN B"00" => - AY_AX[] = (VCC,GND,AY_CCC[7..2]); -- CMD adress - AY_WR = GND; - AY_DI[] = AY_DAT[]; - - AY_DAT_WR = VCC; - - WHEN B"01" => - AY_AX[] = (B"0000",AY_ADR[3..0]); - AY_WR = !BWR; - AY_DI[] = BD[]; - - AY_DAT_WR = VCC; - - WHEN B"1X" => - AY_AX[] = (GND,GND,GND,AY_DO[4..0]); - AY_DAT_WR = AY_DO6; - AY_WR = !LCELL(!(AY_DO[7..5] == B"010") & - !((AY_DO[7..5] == B"110") & AY_CXX)); --- !((AY_DO[7..5] == B"110") & AY_CX)); - AY_DI[] = AY_DAT[]; - END CASE; - - AY_DD[].clk = CLK42; - AY_DD[].ena = !AY_CCC1 & !AY_CCC0; - AY_DD[] = AY_DO[]; - - AY_DO[] = lpm_ram_dq(AY_DI[],AY_AX[],AY_WR,CLK42,CLK42) - WITH (lpm_width=8,lpm_widthad=8,lpm_file="AY.MIF"); - --- AY_CX.prn = !DFF((((AY_DO[7..5] == B"00X") & AY_CCC1) & (!AY_DO5 or AY_C)),CLK42,,); - AY_CX.prn = !DFF(((AY_DO[7..5] == B"000") & AY_CCC1),CLK42,,); - AY_CXX.prn = !DFF(((AY_DO[7..5] == B"000") & AY_CCC1),CLK42,,); - AY_C.prn = VCC; - - AY_CX.clk = CLK42; - AY_CXX.clk = CLK42; - (AY_CXX.ena,AY_CX.ena) = DFF((((AY_DO[7..5] == B"010") or (AY_DO[7..5] == B"111")) & AY_CCC1),CLK42,,); - - IF DFF(((AY_DO[7..5] == B"010")),CLK42,,) THEN - AY_CX = (LCELL(AY_DAT[] == 0) & AY_CX); --- AY_CXX = (LCELL(AY_DAT[] == 0) & AY_CXX); --- AY_CX = (LCELL(AY_DAT[] == 0) & AY_CX) or (AY_C & DFF(AY_DO0,CLK42,,)); - AY_CXX = (LCELL(AY_DAT[] == 0) & AY_CXX) or (AY_C & DFF(AY_DO0,CLK42,,)); - ELSE - AY_CXX = DFF(((!/RESET & AY_DO0) or (!AY_F_RES & !AY_DO0)),CLK42,,); - AY_CX = DFF(((!/RESET & AY_DO0) or (!AY_F_RES & !AY_DO0)),CLK42,,); - END IF; - - (AY_C.clk,AY_DAT[].clk) = CLK42; - (AY_C.ena,AY_DAT[].ena) = !DFF(AY_DAT_WR,CLK42,,); - (AY_C,AY_DAT[]) = (GND,AY_DO[]) - (B"00000000",DFF((DFF(!AY_DO5,CLK42,,) or (AY_C & DFF(AY_DO7,CLK42,,))),CLK42,,)); - - AY_OUT[].clk = CLK42; - - AY_AMP[].clk = CLK42; - AY_AMP[] = ((AY_DAT[3..0] or AY_DAT[4]) & (AY_AA[] or !AY_DAT[4])); - - AY_DQ1[].clk = CLK42; - AY_OUTS1 = DFF(((AY_DO[7..0] == B"011XX001") & AY_CCC1),CLK42,,); - AY_OUT1.ena = AY_OUTS1; - AY_OUT1 = AY_CX xor AY_OUT1; - AY_DQ1[].ena = AY_OUTS1; - AY_DQ1[] = AY_AMP[] & LCELL((AY_OUT1 or AY_X_0) & (AY_X_3 or AY_SH0)); - - AY_DQ2[].clk = CLK42; - AY_OUTS2 = DFF(((AY_DO[7..0] == B"011XX010") & AY_CCC1),CLK42,,); - AY_OUT2.ena = AY_OUTS2; - AY_OUT2 = AY_CX xor AY_OUT2; - AY_DQ2[].ena = AY_OUTS2; - AY_DQ2[] = AY_AMP[] & LCELL((AY_OUT2 or AY_X_1) & (AY_X_4 or AY_SH0)); - - AY_DQ3[].clk = CLK42; - AY_OUTS3 = DFF(((AY_DO[7..0] == B"011XX011") & AY_CCC1),CLK42,,); - AY_OUT3.ena = AY_OUTS3; - AY_OUT3 = AY_CX xor AY_OUT3; - AY_DQ3[].ena = AY_OUTS3; - AY_DQ3[] = AY_AMP[] & LCELL((AY_OUT3 or AY_X_2) & (AY_X_5 or AY_SH0)); - - AY_OUTSX = DFF((((AY_DO[7..0] == B"011XX01X") or - (AY_DO[7..0] == B"011XX0X1")) & AY_CCC1),CLK42,,); - AY_DQX[].clk = CLK42; - AY_DQX[].ena = AY_OUTSX; - AY_DQX[] = AY_AMP[] & AY_CH_MIX; - - AY_DQX[].clrn = !AY_SH_Q; - AY_DQX[].prn = (B"0010") or !DFF((AY_SH_Q & BEEPER),CLK42,,); - - AY_CH_MIX.clk = CLK42; - CASE AY_DO[1..0] IS - WHEN 0,1 => AY_CH_MIX = LCELL((AY_OUT1 or AY_X_0) & (AY_X_3 or AY_SH0)); - WHEN 2 => AY_CH_MIX = LCELL((AY_OUT2 or AY_X_1) & (AY_X_4 or AY_SH0)); - WHEN 3 => AY_CH_MIX = LCELL((AY_OUT3 or AY_X_2) & (AY_X_5 or AY_SH0)); - END CASE; - - AY_SH_Q = DFF(((AY_DO[7..0] == B"011XX100") & AY_CCC1),CLK42,,); - - AY_SH[].clk = CLK42; - AY_SH[].prn = /RESET; - AY_SH[].ena = AY_SH_Q & AY_CXX; - AY_SH[] = ((AY_SH3 xor AY_SH0),AY_SH[16..1]); - - AY_VAR.clk = CLK42; - AY_VX.clk = CLK42; - AY_VA[].clk = CLK42; - - (AY_VAR.clrn,AY_VA[].clrn) = AY_F_RES; - AY_VX.clrn = AY_F_RES; - - (AY_VX.ena,AY_VA[].ena,AY_VAR.ena) = DFF(((AY_DO[7..0] == B"011XX101") & AY_CCC1 & !AY_BBLK & AY_CX),CLK42,,); - (AY_VX,AY_VA[],AY_VAR) = (AY_VX,AY_VA[],AY_VAR) + 1; - - AY_X_[].clk = CLK42; - AY_X_[].ena = DFF(((AY_DO[7..0] == B"011XX110") & AY_CCC1),CLK42,,); - AY_X_[] = AY_DAT[5..0]; - - AY_GF[].clk = CLK42; - AY_GF[].ena = DFF(((AY_DO[7..0] == B"011XX111") & AY_CCC1),CLK42,,); - AY_GF[] = AY_DAT[3..0]; - - -- block count when 1-st period end - AY_BBLK = DFF((AY_VX & (AY_GF0 or !AY_GF3)),CLK42,,); -- VA_COUNT_STOP - - -- set ALL ZERO when 1-st period end - AY_ABLK = DFF((!AY_GF3 & AY_VX),CLK42,,); - - -- inverse 2-nd-s periods - AY_BINV = DFF((AY_VX & ((AY_GF[] == B"1X10") or (AY_GF == B"1X01"))),CLK42,,); - - -- inverse ALL - AY_AINV = AY_GF2; - - AY_AA[].clrn= VCC; - AY_AA[].clk = CLK42; - AY_AA[].d = (AY_VA[] xor AY_BINV xor !AY_AINV) & !AY_ABLK; - -% - AY_AA[].clrn= VCC; - AY_AA[].prn = GND; - AY_AA[].clk = CLK42; - AY_AA[] = VCC; -% - - AY_CH_A[3..0].clk = AY_CCC7; - AY_CH_B[3..0].clk = AY_CCC7; - AY_CH_C[3..0].clk = AY_CCC7; - - AY_CH_A[3..0] = AY_DQ1[3..0]; - AY_CH_B[3..0] = AY_DQ2[3..0]; - AY_CH_C[3..0] = AY_DQ3[3..0]; - - DO[7..0] = AY_DD[]; - - AY_CH_CS[].clk = CLK42; - CASE AY_DQX[] IS - WHEN 15 => AY_CH_CS[] = 360 ; - WHEN 14 => AY_CH_CS[] = 255 ; - WHEN 13 => AY_CH_CS[] = 180 ; - WHEN 12 => AY_CH_CS[] = 127 ; - WHEN 11 => AY_CH_CS[] = 90 ; - WHEN 10 => AY_CH_CS[] = 64 ; - WHEN 9 => AY_CH_CS[] = 45 ; - WHEN 8 => AY_CH_CS[] = 32 ; - WHEN 7 => AY_CH_CS[] = 22 ; - WHEN 6 => AY_CH_CS[] = 16 ; - WHEN 5 => AY_CH_CS[] = 11 ; - WHEN 4 => AY_CH_CS[] = 8 ; - WHEN 3 => AY_CH_CS[] = 6 ; - WHEN 2 => AY_CH_CS[] = 4 ; - WHEN 1 => AY_CH_CS[] = 2 ; - WHEN 0 => AY_CH_CS[] = 0 ; - END CASE; - - AY_OUTS1X = DFF(AY_OUTS1,CLK42,,); - AY_OUTS2X = DFF((AY_OUTS2 or AY_SH_Q),CLK42,,); - AY_OUTS3X = DFF(AY_OUTS3,CLK42,,); - - AY_OUTS1Y = DFF(AY_OUTS1 or AY_OUTS1X,CLK42,,); --- AY_OUTS2Y = DFF(AY_OUTS2 or AY_OUTS2X,CLK42,,); - AY_OUTS3Y = DFF(AY_OUTS3 or AY_OUTS3X,CLK42,,); - - (AY_CH_LX[].clrn,AY_CH_RX[].clrn) = !DFF((AY_CCC[7..2] == 0),CLK42,,); - - (AY_CH_LX[],,) = LPM_ADD_SUB (,AY_CH_LX[],(B"00",AY_CH_CS[]),,,,) - WITH(LPM_WIDTH=11,LPM_REPRESENTATION="UNSIGNED"); - (AY_CH_RX[],,) = LPM_ADD_SUB (,AY_CH_RX[],(B"00",AY_CH_CS[]),,,,) - WITH (LPM_WIDTH=11,LPM_REPRESENTATION="UNSIGNED"); - - AY_CH_LX[].clk = CLK42; - AY_CH_RX[].clk = CLK42; - AY_CH_LX[].ena = DFF(DFF((AY_OUTS1 or AY_OUTS1Y or AY_OUTS2X or AY_OUTS2),CLK42,,),CLK42,,); - AY_CH_RX[].ena = DFF(DFF((AY_OUTS3 or AY_OUTS3Y or AY_OUTS2X or AY_OUTS2),CLK42,,),CLK42,,); - - AY_CH_VAL = DFF((AY_CCC[7..2] == B"111100"),CLK42,,); - --- AY_CH_L[].clk = AY_CH_VAL; --- AY_CH_R[].clk = AY_CH_VAL; - AY_CH_L[] = AY_CH_LX[10..1]; - AY_CH_R[] = AY_CH_RX[10..1]; - -END; - diff --git a/src/altera/acex/k30/DCP.ACF b/src/altera/acex/k30/DCP.ACF deleted file mode 100644 index b8616b1..0000000 --- a/src/altera/acex/k30/DCP.ACF +++ /dev/null @@ -1,568 +0,0 @@ --- --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. --- -CHIP dcp -BEGIN - DEVICE = EP1K30FC256-3; -END; - -DEFAULT_DEVICES -BEGIN - AUTO_DEVICE = EP1K100FC484-1; - AUTO_DEVICE = EP1K100FC256-1; - AUTO_DEVICE = EP1K100QC208-1; - AUTO_DEVICE = EP1K50FC484-1; - AUTO_DEVICE = EP1K50FC256-1; - AUTO_DEVICE = EP1K50QC208-1; - AUTO_DEVICE = EP1K50TC144-1; - AUTO_DEVICE = EP1K30FC256-1; - AUTO_DEVICE = EP1K30QC208-1; - AUTO_DEVICE = EP1K30TC144-1; - ASK_BEFORE_ADDING_EXTRA_DEVICES = ON; -END; - -TIMING_POINT -BEGIN - DEVICE_FOR_TIMING_SYNTHESIS = EP1K30FC256-3; - FREQUENCY = 200MHz; - MAINTAIN_STABLE_SYNTHESIS = OFF; - CUT_ALL_CLEAR_PRESET = ON; - CUT_ALL_BIDIR = ON; -END; - -IGNORED_ASSIGNMENTS -BEGIN - FIT_IGNORE_TIMING = OFF; - DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF; - IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF; - IGNORE_DEVICE_ASSIGNMENTS = OFF; - IGNORE_LC_ASSIGNMENTS = OFF; - IGNORE_PIN_ASSIGNMENTS = OFF; - IGNORE_CHIP_ASSIGNMENTS = OFF; - IGNORE_TIMING_ASSIGNMENTS = OFF; - IGNORE_LOGIC_OPTION_ASSIGNMENTS = OFF; - IGNORE_CLIQUE_ASSIGNMENTS = OFF; -END; - -GLOBAL_PROJECT_DEVICE_OPTIONS -BEGIN - MAX7000B_ENABLE_VREFB = OFF; - MAX7000B_ENABLE_VREFA = OFF; - MAX7000B_VCCIO_IOBANK2 = 3.3V; - MAX7000B_VCCIO_IOBANK1 = 3.3V; - CONFIG_EPROM_PULLUP_RESISTOR = ON; - CONFIG_EPROM_USER_CODE = FFFFFFFF; - FLEX_CONFIGURATION_EPROM = AUTO; - MAX7000AE_ENABLE_JTAG = ON; - MAX7000AE_USER_CODE = FFFFFFFF; - FLEX6000_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX10KA_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = ON; - FLEX10K_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX6000_ENABLE_JTAG = OFF; - CONFIG_SCHEME_FLEX_6000 = PASSIVE_SERIAL; - MULTIVOLT_IO = OFF; - MAX7000S_ENABLE_JTAG = ON; - FLEX10K_ENABLE_LOCK_OUTPUT = OFF; - MAX7000S_USER_CODE = FFFF; - CONFIG_SCHEME_10K = PASSIVE_SERIAL; - FLEX10K_JTAG_USER_CODE = 7F; - ENABLE_INIT_DONE_OUTPUT = OFF; - ENABLE_CHIP_WIDE_OE = OFF; - ENABLE_CHIP_WIDE_RESET = OFF; - nCEO = UNRESERVED; - CLKUSR = UNRESERVED; - ADD17 = UNRESERVED; - ADD16 = UNRESERVED; - ADD15 = UNRESERVED; - ADD14 = UNRESERVED; - ADD13 = UNRESERVED; - ADD0_TO_ADD12 = UNRESERVED; - SDOUT = RESERVED_DRIVES_OUT; - RDCLK = UNRESERVED; - RDYnBUSY = UNRESERVED; - nWS_nRS_nCS_CS = UNRESERVED; - DATA1_TO_DATA7 = UNRESERVED; - DATA0 = RESERVED_TRI_STATED; - FLEX8000_ENABLE_JTAG = OFF; - CONFIG_SCHEME = ACTIVE_SERIAL; - DISABLE_TIME_OUT = OFF; - ENABLE_DCLK_OUTPUT = OFF; - RELEASE_CLEARS = OFF; - AUTO_RESTART = OFF; - USER_CLOCK = OFF; - SECURITY_BIT = OFF; - RESERVED_PINS_PERCENT = 0; - RESERVED_LCELLS_PERCENT = 0; -END; - -GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS -BEGIN - STYLE = FAST; - MULTI_LEVEL_SYNTHESIS_MAX9000 = ON; - AUTO_IMPLEMENT_IN_EAB = OFF; - AUTO_OPEN_DRAIN_PINS = ON; - ONE_HOT_STATE_MACHINE_ENCODING = OFF; - AUTO_REGISTER_PACKING = OFF; - DEVICE_FAMILY = ACEX1K; - AUTO_FAST_IO = OFF; - AUTO_GLOBAL_OE = ON; - AUTO_GLOBAL_PRESET = ON; - AUTO_GLOBAL_CLEAR = ON; - AUTO_GLOBAL_CLOCK = ON; - MULTI_LEVEL_SYNTHESIS_MAX5000_7000 = OFF; - OPTIMIZE_FOR_SPEED = 5; -END; - -COMPILER_PROCESSING_CONFIGURATION -BEGIN - USE_QUARTUS_FITTER = ON; - PRESERVE_ALL_NODE_NAME_SYNONYMS = OFF; - FITTER_SETTINGS = NORMAL; - SMART_RECOMPILE = OFF; - GENERATE_AHDL_TDO_FILE = OFF; - RPT_FILE_USER_ASSIGNMENTS = ON; - RPT_FILE_LCELL_INTERCONNECT = ON; - RPT_FILE_HIERARCHY = ON; - RPT_FILE_EQUATIONS = ON; - LINKED_SNF_EXTRACTOR = OFF; - OPTIMIZE_TIMING_SNF = OFF; - TIMING_SNF_EXTRACTOR = ON; - FUNCTIONAL_SNF_EXTRACTOR = OFF; - DESIGN_DOCTOR_RULES = EPLD; - DESIGN_DOCTOR = OFF; -END; - -COMPILER_INTERFACES_CONFIGURATION -BEGIN - NETLIST_OUTPUT_TIME_SCALE = 0.1ns; - EDIF_INPUT_SHOW_LMF_MAPPING_MESSAGES = OFF; - EDIF_BUS_DELIMITERS = []; - EDIF_FLATTEN_BUS = OFF; - EDIF_OUTPUT_FORCE_0NS_DELAYS = OFF; - EDIF_OUTPUT_INCLUDE_SPECIAL_PRIM = OFF; - EDIF_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - EDIF_OUTPUT_DELAY_CONSTRUCTS = EDO_FILE; - EDIF_OUTPUT_USE_EDC = OFF; - EDIF_INPUT_USE_LMF2 = OFF; - EDIF_INPUT_USE_LMF1 = OFF; - EDIF_OUTPUT_GND = GND; - EDIF_OUTPUT_VCC = VCC; - EDIF_INPUT_GND = GND; - EDIF_INPUT_VCC = VCC; - EDIF_OUTPUT_EDC_FILE = *.edc; - EDIF_INPUT_LMF2 = *.lmf; - EDIF_INPUT_LMF1 = *.lmf; - VHDL_GENERATE_CONFIGURATION_DECLARATION = OFF; - VHDL_OUTPUT_DELAY_CONSTRUCTS = VHO_FILE; - VERILOG_OUTPUT_DELAY_CONSTRUCTS = VO_FILE; - VHDL_FLATTEN_BUS = OFF; - VERILOG_FLATTEN_BUS = OFF; - EDIF_TRUNCATE_HIERARCHY_PATH = OFF; - VHDL_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - VHDL_WRITER_VERSION = VHDL87; - VHDL_READER_VERSION = VHDL87; - SYNOPSYS_MAPPING_EFFORT = MEDIUM; - SYNOPSYS_BOUNDARY_OPTIMIZATION = OFF; - SYNOPSYS_HIERARCHICAL_COMPILATION = ON; - SYNOPSYS_DESIGNWARE = OFF; - SYNOPSYS_COMPILER = DESIGN; - USE_SYNOPSYS_SYNTHESIS = OFF; - VHDL_NETLIST_WRITER = OFF; - VERILOG_NETLIST_WRITER = OFF; - XNF_GENERATE_AHDL_TDX_FILE = ON; - XNF_TRANSLATE_INTERNAL_NODE_NAMES = ON; - XNF_EMULATE_TRI_STATE_BUSES = INTERNAL_LOGIC; - EDIF_OUTPUT_VERSION = 200; - EDIF_NETLIST_WRITER = OFF; -END; - -CUSTOM_DESIGN_DOCTOR_RULES -BEGIN - MASTER_RESET = OFF; - EXPANDER_NETWORKS = ON; - RACE_CONDITIONS = ON; - DELAY_CHAINS = ON; - ASYNCHRONOUS_INPUTS = ON; - PRESET_CLEAR_NETWORKS = ON; - STATIC_HAZARDS_AFTER_SYNTHESIS = OFF; - STATIC_HAZARDS_BEFORE_SYNTHESIS = ON; - MULTI_CLOCK_NETWORKS = ON; - MULTI_LEVEL_CLOCKS = ON; - GATED_CLOCKS = ON; - RIPPLE_CLOCKS = ON; -END; - -SIMULATOR_CONFIGURATION -BEGIN - END_TIME = 5.0us; - BIDIR_PIN = STRONG; - START_TIME = 0.0ns; - GLITCH_TIME = 0.0ns; - GLITCH = OFF; - OSCILLATION_TIME = 0.0ns; - OSCILLATION = OFF; - CHECK_OUTPUTS = OFF; - SETUP_HOLD = OFF; - USE_DEVICE = OFF; -END; - -TIMING_ANALYZER_CONFIGURATION -BEGIN - ANALYSIS_MODE = REGISTERED_PERFORMANCE; - CUT_OFF_RAM_REGISTERED_WE_PATHS = OFF; - LIST_PATH_FREQUENCY = 10MHz; - LIST_PATH_COUNT = 10; - REGISTERED_PERFORMANCE_OPTIONS = NUMBER_OF_PATHS; - INCLUDE_PATHS_LESS_THAN_VALUE = 214.7483647ms; - INCLUDE_PATHS_LESS_THAN = OFF; - INCLUDE_PATHS_GREATER_THAN_VALUE = 0.0ns; - INCLUDE_PATHS_GREATER_THAN = OFF; - DELAY_MATRIX_OPTIONS = SHOW_ALL_PATHS; - CELL_WIDTH = 18; - LIST_ONLY_LONGEST_PATH = ON; - CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; - CUT_OFF_IO_PIN_FEEDBACK = ON; - AUTO_RECALCULATE = OFF; -END; - -OTHER_CONFIGURATION -BEGIN - LAST_MAXPLUS2_VERSION = 10.0; - EXPLICIT_FAMILY = 1; - ROW_PINS_LCELL_INSERT = ON; - CARRY_OUT_PINS_LCELL_INSERT = OFF; - NORMAL_LCELL_INSERT = ON; - FLEX_10K_52_COLUMNS = 40; - DEFAULT_9K_EXP_PER_LCELL = 1/2; - LOCAL_INTERCONNECT_PER_LAB_PERCENT = 100; - LCELLS_PER_ROW_PERCENT = 100; - FAN_IN_PER_LCELL_PERCENT = 100; - EXP_PER_LCELL_PERCENT = 100; - ROW_PINS_PERCENT = 50; - ORIGINAL_MAXPLUS2_VERSION = 9.6; - COMPILER_DATA = "1,1,0,1,0,0,0,1,1,1,1,0,1,1,1"; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = ON; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.FLEX8000 -BEGIN - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = AUTO; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = AUTO; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = MANUAL; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = MANUAL; -END; - diff --git a/src/altera/acex/k30/DCP.INC b/src/altera/acex/k30/DCP.INC deleted file mode 100644 index 12ce88f..0000000 --- a/src/altera/acex/k30/DCP.INC +++ /dev/null @@ -1,27 +0,0 @@ --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. - --- MAX+plus II Include File --- Version 10.0 9/14/2000 --- Created: Thu Feb 07 21:14:23 2002 - -FUNCTION dcp (clk42, /reset, ct[2..0], continue, a[15..0], di[7..0], turbo_hand, /io, /rd, /wr, /mr, /rf, /m1, md[7..0], dos, refresh, g_line[9..0], test_r, acc_on, double_cas, blk_mem) - WITH (UPDATE) - RETURNS (/res, ras, cas, mc_end, mc_begin, mc_type, mc_write, do[7..0], ma[11..0], mca[1..0], clk_z80, turbo, /wait, /iom, /iomm, ra[17..14], page[11..0], type[3..0], cs_rom, cs_ram, v_ram, port, wr_dwg, wr_tm9, wr_awg, rd_kp11, kp11_mix, ga[9..0], graf, sp_scr, sp_sa, scr128, hdd_data, hdd_flip, ram, blk_r, pn4q, dcpp[7..0]); diff --git a/src/altera/acex/k30/DCP.MIF b/src/altera/acex/k30/DCP.MIF deleted file mode 100644 index aee8502..0000000 --- a/src/altera/acex/k30/DCP.MIF +++ /dev/null @@ -1,119 +0,0 @@ -DEPTH = 256; % Memory depth and width are required % -WIDTH = 16; % Enter a decimal number % - -ADDRESS_RADIX = HEX; % Address and value radixes are optional % -DATA_RADIX = HEX; % Enter BIN, DEC, HEX, or OCT; unless % - % otherwise specified, radixes = HEX % - --- Specify values for addresses, which can be single address or range - -CONTENT -BEGIN - [0..FF] : 1000; - - 0 : 1040 % DCP PAGE %; - -% - MA[11..0] bit0 - WG_A5 - bit1 - WG_A6 - - bit2 - MUX_KP11, 0 - WG,CMOS 1 - KMPS,TM9 - bit3 - RD/WR 0 - WRITE 1 - READ - bit4 - CS_WG93 or WR_TM9 - - bit5 - HDD/CMOS strobe - bit6,7 - 00 - FDD/Scr switches - 01 - HDD Switch/ Reset - 10 - HDD1/HDD2 - 11 - CMOS - bit8 - HDD CS1/CS3 or CMOS data/adr - bit9,10,11 - HDD_A[2..0] -% - 10 : - 7018 % RD WG93 1F,0F % - 7019 % RD WG93 3F % - 701A % RD WG93 5F % - 701B % RD WG93 7F % - - 7017 % WR_PDOS FF % - 701F % RD_KEYS/ WR_A20 % - - 7023 % Set 720 % - 7027 % Set 1440 %; - --- 18 : --- 1000 % No_function % - --- 1B : 1000; % ISA_A20 WR % - - 1C : 71D8 % CMOS_DAT_RD %; - 1D : 70D4 % CMOS_ADR_WR %; - 1E : 71D4 % CMOS_DAT_WR %; - - 20 : - 60A8 % HD_CS1 ports % - 62A8 - 64A8 - 66A8 - 68A8 - 6AA8 - 6CA8 - 6EA8 - - 6DA8 % HD_CS3 3F6 port % - 6FA8 % HD_CS3 3F7 port % - - 7060 % Set HDD1 % - 7064 % Set HDD2 % - - 7120 % Set 320 Lines % - 7124 % Set 312 Lines % - - 7160 % Soft Reset % - 7164 % ??? %; - - - 30 : - 7000 % slot 1 ports % - 7001 % slot 2 ports % - 7002 % slot 1 mem % - 7003 % slot 2 mem % - ; - - 40 : 4000; % kb read % - - 52 : 3000; -- AY_D READ - - 58 : 5000; -- KEMPSTON-Mouse - - [80..FF]: C000; - - 88 : 2000; -- COVOX - 89 : 2000; -- COVOX-Mode - - 8C : 3000; -- AY_D READ - 8D : 2000; -- AY_A WRITE - 8E : 2000; -- AY_D WRITE - - 8F : 2000; -- port for ROM_WRITE - --- 80 : 7F 7F 7F 7F 7F 7F 7F 7F % KBD_DAT %; --- 90 : 7F % PORT FF %; - - 90 : 3030 3031 2032 2033 2034 2035 2036 2037 - 2038 2039 203A 203B 203C 203D 203E 203F; % RAM PAGES % - - B0 : 2020 2021 2022 2023 2024 2025 2026 2027 - 2028 2029 202A 202B 202C 202D 202E 202F; % RAM PAGES % - - [C0..CF]: 2000 % SYS PORTS COPYES %; - - D0 : 2010 2011 2012 2013 2014 2015 2016 2017 - 2018 2019 201A 201B 201C 201D 201E 201F; % RAM PAGES % - E0 : 2041 2041 2041 2041 2041 2041 2041 2041 - 2000 2005 2002 2041 20FF 2000 2000 2041; % ROM PAGES % --- E0 : 41 42 43 44 45 46 47 48 00 05 02 E0 F0 00 00 E8; % ROM PAGES % - F0 : 2000 2001 2002 2003 2004 2005 2006 2007 - 2008 2009 200A 200B 200C 200D 200E 200F; % RAM PAGES % - -END ; diff --git a/src/altera/acex/k30/DCP.TDF b/src/altera/acex/k30/DCP.TDF deleted file mode 100644 index 2a1f2cf..0000000 --- a/src/altera/acex/k30/DCP.TDF +++ /dev/null @@ -1,750 +0,0 @@ - - TITLE "DCP"; - -PARAMETERS - ( - UPDATE = 1 - ); - -INCLUDE "lpm_ram_dp"; --- INCLUDE "DC_PORT2"; - -SUBDESIGN dcp - ( - CLK42 : INPUT; - /RESET : INPUT; - - /RES : OUTPUT; - - CT[2..0] : INPUT; - - CONTINUE : INPUT; - RAS : OUTPUT; - CAS : OUTPUT; - MC_END : OUTPUT; - MC_BEGIN : OUTPUT; - MC_TYPE : OUTPUT; - MC_WRITE : OUTPUT; - - A[15..0] : INPUT; - DI[7..0] : INPUT; - DO[7..0] : OUTPUT; - MA[11..0] : OUTPUT; - MCA[1..0] : OUTPUT; - - TURBO_HAND : INPUT; - CLK_Z80 : OUTPUT; - TURBO : OUTPUT; - - /IO : INPUT; - /RD : INPUT; - /WR : INPUT; - /MR : INPUT; - /RF : INPUT; - /M1 : INPUT; - - /WAIT : OUTPUT; - /IOM : OUTPUT; - /IOMM : OUTPUT; - - MD[7..0] : INPUT; - RA[17..14] : OUTPUT; - PAGE[11..0] : OUTPUT; - - TYPE[3..0] : OUTPUT; - - CS_ROM : OUTPUT; - CS_RAM : OUTPUT; - V_RAM : OUTPUT; - PORT : OUTPUT; --- DOS : OUTPUT; - DOS : INPUT; - - WR_DWG : OUTPUT; - - WR_TM9 : OUTPUT; - WR_AWG : OUTPUT; - RD_KP11 : OUTPUT; - KP11_MIX : OUTPUT; - - REFRESH : INPUT; - - G_LINE[9..0]: INPUT; - GA[9..0] : OUTPUT; - GRAF : OUTPUT; - - SP_SCR : OUTPUT; - SP_SA : OUTPUT; - SCR128 : OUTPUT; - - TEST_R : INPUT; - - HDD_DATA : OUTPUT; - HDD_FLIP : OUTPUT; - RAM : OUTPUT; - BLK_R : OUTPUT; - - PN4Q : OUTPUT; - - ACC_ON : INPUT; -- asselerator state - 1 - present - - DCPP[7..0] : OUTPUT; - - DOUBLE_CAS : INPUT; - - BLK_MEM : INPUT; - - ) -VARIABLE - - CLK21 : NODE; - --- DC : DC_PORT2; - - CLK84 : NODE; - CLK42X : NODE; - - CTZ[1..0] : DFF; - --- CT[2..0] : DFF; - - MEM : LPM_RAM_DP WITH (LPM_WIDTH=16,LPM_WIDTHAD=8,LPM_FILE="DCP.MIF"); - - D[7..0] : NODE; - ADR8_MEM : NODE; - MEM_D[15..0]: NODE; - MEM_WR : NODE; - - DCP_CX : NODE; - SC_LCELL : NODE; - - PG3[5..0] : NODE; - PG0[5..0] : NODE; - MPGS[7..0] : LCELL; - PGS[7..0] : DFF; --- PGS[7..0] : NODE; - - PN[7..0] : DFFE; - SC[7..0] : DFFE; - SYS : DFFE; - CNF[7..0] : DFFE; - AROM16 : DFFE; - TB_SW : DFFE; - - CASH_ON : NODE; - NMI_ENA : NODE; - - DD[7..0] : DFFE; - STARTING : NODE; - --- DOS_ : NODE; --- DOS : NODE; --- DOS_ON_ : NODE; - - MC_RQ : NODE; - MC_END : DFFE; - MC_BEGIN : DFFE; - MC_TYPE : DFFE; - MC_WRITE : DFFE; - RAS : DFFE; - CAS : DFFE; - - MA_[11..0] : DFFE; - MCA[1..0] : DFFE; - - /IOM : DFFE; - /IOMM : DFFE; - /IOMX : DFFE; - /IOMY : DFFE; - - WT_CT[3..0] : DFFE; - W_TAB[3..0] : LCELL; - HDD_W[3..0] : NODE; - /IO_WAIT : NODE; - /MR_WAIT : NODE; - - MEM_RW : NODE; - IO_RW : NODE; - IO_RWM : NODE; - - MA_CT[1..0] : DFFE; - - WR_TM9 : DFFE; - RD_KP11 : DFFE; - - /RES : NODE; - - RFT : DFF; - RFC : DFFE; - - GRAF : DFFE; - GRAF_X : NODE; - GA[9..0] : LCELL; - - SP_SCR : LCELL; - SP_SA : LCELL; - - HDD_FLIP : DFFE; - /IOMZ : DFFE; - - HDD_DATA : NODE; - HDD_ENA : NODE; - - BLK_C : NODE; - /CASH : NODE; - - DCPP[7..0] : DFFE; - - PORTS_X : NODE; - - NO_IO_WAIT : NODE; - - DCP_RES : NODE; - - HDD_A[3..0] : DFF; - - X_ADR[11..0]: LCELL; - X_MA_[11..0]: LCELL; - - WR_AWGX : NODE; - - /IOWR : NODE; - - RA[17..14] : LCELL; - --- SPR_[1..0] : NODE; - SPR_[1..0] : LCELL; - - SYS_ENA : NODE; - -BEGIN - -% --- DC.CLK42 = CLK42; --- DC./RESET = /RESET; --- --- DC.A[15..0] = A[15..0]; --- --- DC./IO = /IO; --- DC./WR = /WR; --- DC./M1 = /M1; --- --- -- DC./IOM; --- -- DC./IOMM; --- -- DC.DCP[7..0]; --- --- DC.DOS = DOS; --- DC.CNF[1..0]= CNF[4..3]; --- --- DC.SYS = SYS; --- --- -- DC.PORT_X; -% - - --- ============================================================== -% --- CT[].clk = CLK42; --- --- IF CT1 THEN --- CT[1..0] = GND; --- CT2 = !CT2; --- ELSE --- CT[1..0] = CT[1..0]+1; --- CT2 = CT2; --- END IF; -% - - /RES = DFFE(VCC,CLK42,,,CT0); --- ============================================================== - --- TURBO = DFFE((TB_SW & TURBO_HAND),CLK42,,/RESET,CLK_Z80); - TURBO = DFF(DFFE((TB_SW & TURBO_HAND),CLK_Z80,,/RESET,!/RF),CLK42,,); - - CLK84 = CLK42 xor LCELL(CLK42X); - CLK42X = DFF(!CLK42X,CLK84,,); - - CTZ[].clk = CLK84 xor CTZ1; - CTZ[] = CTZ[]+1; - --- CLK_Z80 = CTZ1; - --- CLK_Z80 = DFF((!CLK21 & TURBO) or (TFF((CT2 & CT1),CLK42,,) & !TURBO),!CLK42,,); --- CLK_Z80 = DFF((CLK21 & TURBO) or (TFF((CT2 & CT1),CLK42,,) & !TURBO),!CLK42,,); - - CLK_Z80 = DFF((CLK21 & TURBO) or (TFF((!CT2 & CT1),CLK42,,) & !TURBO),!CLK42,,); --- CLK_Z80 = DFF((!CLK21 & TURBO) or (TFF((!CT2 & CT1),CLK42,,) & !TURBO),!CLK42,,); - --- ============================================================== - CLK21 = DFF((!CT0 xor CT2),CLK42,,); --- === Adress Multiplexer ======================================= - - MA_[].clk = CLK42; --- MA_[].ena = (CT2 xor CT0); - MA_[].ena = CLK21; - - WR_TM9.clk = CLK42; --- WR_TM9.ena = (CT2 xor CT0); - WR_TM9.ena = CLK21; - WR_TM9.prn = /RES; - - RD_KP11.clk = !CLK42; --- RD_KP11.ena = (CT2 xor CT0); - RD_KP11.ena = CLK21; - RD_KP11.prn = /RES; - RD_KP11.d = !(MA_CT[] == 0); - --- WR_AWGX = DFF((WR_TM9 or CLK21),!CLK42,,); - WR_AWGX = DFF(GND,!WR_TM9,,DFF(WR_AWGX,CLK42,,)); - --- WR_TM9 = (!MA_CT1 or (!IO_RW & !PORTS_X)); - WR_TM9 = (!MA_CT1 or (!/IO & !PORTS_X)); - - WR_AWG = WR_AWGX; - - KP11_MIX = TFF(VCC,RD_KP11,,); - - WR_DWG = !MC_BEGIN; --- WR_DWG = DFF(!MC_BEGIN,CLK42,,); --- WR_DWG = LCELL(!MC_BEGIN); - --- MA_CT[].ena = (CT2 xor CT0); - MA_CT[].ena = CLK21; - MA_CT[].clk = CLK42; - - IF !LCELL(CT2 & !CT1) THEN - MA_CT[] = MA_CT[]+1; - ELSE - MA_CT[] = GND; - END IF; - -% --- MA_[11..0] bit0 - WG_A5 --- bit1 - WG_A6 --- bit2 - MUX_KP11, 0 - WG,CMOS 1 - KMPS,TM9 --- bit3 - RD/WR 0 - WRITE 1 - READ --- bit4 - CS_WG93 or WR_TM9 --- bit5 - HDD/CMOS strobe --- bit7,6 - 00 - not --- 01 - ???? --- 10 - HDD1/2 --- 11 - CMOS --- bit8 - HDD CS1/CS3 or CMOS data/adr --- bit9,10,11 - HDD_A[2..0] -% - CASE A[15..14] IS - WHEN 0 => SP_SCR = GND; SP_SA = GND; - WHEN 1 => SP_SCR = !GRAF; SP_SA = GND; - WHEN 2 => SP_SCR = GND; SP_SA = PG3[1]; - WHEN 3 => SP_SCR = !GRAF & LCELL(PG3[] == B"1101X1"); SP_SA = PG3[1]; - END CASE; - - CASE GRAF IS - WHEN 0 => GA[] = (GND,GND,MEM.q[3..0],A[13..10]); --- WHEN 1 => GA[] = (VCC,(G_LINE[8..0] + (B"00000",A[13..10]))); - WHEN 1 => GA[] = (VCC,G_LINE[8..0]); - END CASE; - - CASE (IO_RW,MA_CT0) IS - WHEN 0 => X_ADR[] = (GND,CNF4,PN5,DOS,/WR,A15,A14,A[6..5],A13,A7,A[2]); - WHEN 1 => X_ADR[] = (GND,GND,CNF[4..3],B"01000000"); - WHEN 2 => X_ADR[] = (GND,GA3,GA[1..0],A[9..2]); - WHEN 3 => X_ADR[] = (GND,GND,GA[3..2],MEM.q[7..4],GA[7..4]); - END CASE; - - CASE IO_RW IS - WHEN 0 => X_MA_[] = (HDD_A[2..0],MEM.q[8..6],((MEM.q[5..4]) & (!/IOMZ,!/IOMY)),/WR,MEM.q2,A[6..5]); - WHEN 1 => X_MA_[] = (HDD_A[2..0],B"00000",/WR,VCC,A[6..5]); - END CASE; -% --- CASE MA_CT1 IS ----- WHEN 0 => MA_[] = X_ADR[]; --- WHEN 0 => MA_[] = (GND,X_ADR[10..0]); --- WHEN 1 => MA_[] = (HDD_A[2..0],X_MA_[8..4],/WR,X_MA_[3],A[6..5]); --- END CASE; -% - - CASE (IO_RW,MA_CT1) IS - WHEN B"00" => - MA_[] = (X_ADR[11..0]); - WHEN B"01" => - MA_[] = (HDD_A[2..0],MEM.q[8..6],((MEM.q[5..4]) & (!/IOMZ,!/IOMY)),/WR,MEM.q2,A[6..5]); - WHEN B"10" => - MA_[] = (X_ADR[11..0]); - WHEN B"11" => - MA_[] = (HDD_A[2..0],B"00000",/WR,VCC,A[6..5]); - END CASE; - - MA[] = MA_[]; - - MCA[].ena = CT2 & CT1; - MCA[].clk = CLK42; - MCA[] = A[1..0]; -- adress for CAS - - HDD_A[].clk = CLK42; - CASE (A[14],A[2..0]) IS - WHEN 0 => HDD_A[] = 0; - WHEN 1 => HDD_A[] = 1; - WHEN 2 => HDD_A[] = 2; - WHEN 3 => HDD_A[] = 3; - WHEN 4 => HDD_A[] = 4; - WHEN 5 => HDD_A[] = 5; - WHEN 6 => HDD_A[] = 0; - WHEN 7 => HDD_A[] = 0; - WHEN 8 => HDD_A[] = 0; - WHEN 9 => HDD_A[] = 0; - WHEN 10 => HDD_A[] = 6; - WHEN 11 => HDD_A[] = 7; - WHEN 12 => HDD_A[] = 14; - WHEN 13 => HDD_A[] = 15; - WHEN 14 => HDD_A[] = 0; - WHEN 15 => HDD_A[] = 0; - END CASE; - - --- === Memory Sinchronizer ====================================== - - -% RF | MEM | RF - ____ | | _______ -/MR \__________/ - | | - _____| | _______ -MC_BEGIN \________/ - | |__ -MC_END ____________/ \_______ - ______ |__________ -MC_TYPE \_____/ - | | -RAS __ _ ___ __ - \__/|\__/ | \__/ - ____ _ __ -CAS \__/ | \__/|\__/ - | | - -% - --- MC_RQ = DFF(((/MR & DFF(/IO,CLK42,,)) or (/RD & /WR)),CLK42,,); - --- MC_RQ = DFF(((/MR & DFFE(GND,!CLK42,,!/IO,CT0)) or (/RD & /WR)),!CLK42,,); - --- MC_RQ = DFF((((/MR or !/RF) & DFF(/IO,CLK42,,/M1)) or (/RD & /WR)),CLK42,,); - --- MC_RQ = DFF((((/MR or !/RF) & IO_RW) or (/RD & /WR)),CLK42,,); - --- MC_RQ = DFF(((MEM_RW & IO_RW) or (/RD & /WR)),CLK42,,); - - MC_RQ = DFF(((MEM_RW & DFF(DFF(IO_RW,CLK42,,!/IO),CLK42,,!/IO)) or (/RD & /WR)),!CLK42,,); - - MC_BEGIN.clk= CLK42; - MC_BEGIN.ena= CT1 & CT2; - MC_BEGIN.d = MC_RQ; - MC_BEGIN.prn= !(/MR & /IO); - - MC_END.clk = CLK42; - MC_END.d = VCC; - MC_END.ena = (CT0 & CT2) & !MC_BEGIN & CONTINUE & !BLK_C; - MC_END.clrn = !(/MR & /IO); - - MC_TYPE.clk = CLK42; - MC_TYPE.ena = CT1 & CT2; - MC_TYPE.d = MC_RQ or MC_END; - MC_TYPE.prn = /RES; - - MC_WRITE.clk= CLK42; - MC_WRITE.ena= CT1 & CT2; - MC_WRITE.d = MC_RQ or CS_RAM or /WR or MC_END; - MC_WRITE.prn= /RES; - - RFT.clk = REFRESH; - RFT.d = GND; - RFT.prn = RFC; --- RFT.prn = VCC; - - RFC.clk = CLK42; - RFC.d = !MC_RQ or RFT; --- RFC.d = !MC_RQ; - RFC.ena = CT1 & CT2; - - RAS.ena = (!(CT1 or (CT0 xor MC_TYPE))) & (!MC_TYPE or !RFC); - CAS.ena = (!(CT1 or (CT0 xor !MC_TYPE))) & (!MC_TYPE or !RFC); --- RAS.ena = (!(CT1 or (CT0 xor MC_TYPE))); --- CAS.ena = (!(CT1 or (CT0 xor !MC_TYPE))); - - RAS.clk = CLK42; CAS.clk = CLK42; - RAS.d = CT2; CAS.d = CT2 or BLK_C; - - RAS.prn = /RES; - CAS.prn = /RES; --- CAS.prn = !BLK_C; - --- /MR_WAIT = (MEM_RW or /CASH or DFF(MC_END,CLK42,!/MR,)) or (!TURBO & !ACC_ON); --- /MR_WAIT = MC_END or LCELL(MEM_RW or /CASH or (!TURBO & !ACC_ON)); - - /MR_WAIT = LCELL(MC_END or MEM_RW or /CASH or (!TURBO & !ACC_ON)); - --- MEM_RW = LCELL(/MR or !/RF); - - -- anti gluk! - MEM_RW = DFF((!/RF or BLK_MEM),!/MR,,LCELL(MEM_RW or !/MR)); - IO_RWM = DFF(!/M1,!/IO,,LCELL(IO_RW or !/IO)); - - IO_RW = DFF(/IO,CLK42,,/M1); - - /IOMM.clk = CLK42; --- /IOMM.ena = CT0 xor CT2; - /IOMM.ena = CLK21; - /IOMM.d = IO_RW or !MC_END or DFF((WT_CT[] == 0),CLK42,,); - /IOMM.prn = /RES; - - /IOMX.clk = CLK42; --- /IOMX.ena = CT0 xor CT2; - /IOMX.ena = CLK21; - /IOMX.d = /IOMM; - /IOMX.prn = /RES; - - /IOMY.clk = CLK42; --- /IOMY.ena = CT0 xor CT2; - /IOMY.ena = CLK21; - /IOMY.d = /IOMX or !MC_END or DFF((WT_CT[] == B"000X"),CLK42,,); --- /IOMY.prn = /RES; - /IOMY.prn = PORTS_X; - - PORTS_X = DFF(((DCPP[7..4] == B"0010") or (DCPP[7..4] == B"0001")),CLK42,,); - - /IOMZ.clk = CLK42; --- /IOMZ.ena = CT0 xor CT2; - /IOMZ.ena = CLK21; - /IOMZ.d = (A8 xor /RD) or /IOMX or !MC_END or DFF((WT_CT[] == B"000X"),CLK42,,); - /IOMZ.prn = PORTS_X; - - HDD_DATA = DFF((HDD_ENA & DFF((MEM.q[11..8] == 0),CLK42,,) & PORTS_X),CLK42,,); - HDD_ENA = (MEM.q[7..5] == B"101"); - - HDD_FLIP.clk = /IOM; - HDD_FLIP.ena = HDD_ENA & DFF((DCPP[] == B"0010XXXX"),CLK42,,); - HDD_FLIP.d = !HDD_FLIP & (MEM.q[11..8] == 0); - HDD_FLIP.clrn = /RESET & DFF(GND,!DOUBLE_CAS,,HDD_FLIP); - - /IOM.clk = CLK42; --- /IOM.ena = CT0 xor CT2; - /IOM.ena = CLK21; - /IOM.d = (/IOMX & /IOM); - /IOM.prn = !/IO & /M1; - --- /IO_WAIT = LCELL(/IO or !/M1 or DFF(DFFE((WT_CT[] == 0),CLK42,,,CLK21),CLK42,,NO_IO_WAIT)); - - /IO_WAIT = LCELL(IO_RWM or DFF(DFFE((WT_CT[] == 0),CLK42,,,CLK21),CLK42,,NO_IO_WAIT)); - - NO_IO_WAIT = !DFF(((A[7..0] == B"111XX1XX") & !TURBO & DOS),CLK42,,); --- NO_IO_WAIT = TURBO; - - WT_CT[].clk = CLK42; --- WT_CT[].ena = (CT2 xor CT0); - WT_CT[].ena = CLK21; --- WT_CT[].ena = CT1; - WT_CT[].prn = MC_END; - - CASE (/IOM,DFF((WT_CT[] == 0),CLK42,,)) IS - WHEN B"1X" => WT_CT[].d = W_TAB[]; - WHEN B"00" => WT_CT[].d = WT_CT[]-1; - WHEN B"01" => WT_CT[].d = GND; - END CASE; - - CASE (TURBO,MEM.q[14..12]) IS - WHEN 0 => W_TAB[] = 2; WHEN 8 => W_TAB[] = 2; - WHEN 1 => W_TAB[] = 2; WHEN 9 => W_TAB[] = 2; - WHEN 2 => W_TAB[] = 1; WHEN 10 => W_TAB[] = 4; - WHEN 3 => W_TAB[] = 1; WHEN 11 => W_TAB[] = 4; - WHEN 4 => W_TAB[] = 1; WHEN 12 => W_TAB[] = 7; - WHEN 5 => W_TAB[] = 2; WHEN 13 => W_TAB[] = 7; --- WHEN 6 => W_TAB[] = 10; WHEN 14 => W_TAB[] = 10; - WHEN 6 => W_TAB[] = 7; WHEN 14 => W_TAB[] = 7; --- WHEN 6 => W_TAB[] = 13; WHEN 14 => W_TAB[] = 13; - WHEN 7 => W_TAB[] = 10; WHEN 15 => W_TAB[] = 10; - END CASE; - - CASE LCELL(MEM.q[11..8] == 0) IS - WHEN 0 => HDD_W[] = 10; -- registers wait - WHEN 1 => HDD_W[] = 4; -- datas wait - END CASE; - - /WAIT = (/IO_WAIT & /MR_WAIT); - - --- === Other Devicese CASHE, ISA, ROM... === - - V_RAM = PN2; -- for ORIGINAL Waits - -IF UPDATE == 1 GENERATE - -- all ROM/RAM switches in main .tdf - BLK_R = SC4; - -- all cashes in main .tdf - /CASH = GND; - -- cashe dir in main .tdf - CASH_ON = GND; -ELSE GENERATE - -- for blk wait - /CASH = DFF((MEM.q[7..4] == 15),!CLK42,BLK_R,); --- when BLK_R = 1 => Other Devices stay Active! - BLK_R = DFF( (LCELL((MEM.q7 & MEM.q6 & RAM) or - (MEM.q7 & LCELL(A14 & A15 & SC4))) & - !DFF(DFF(MC_RQ,CLK42,,!/MR),CLK42,,!/MR)),!CLK42,!/MR,); - CASH_ON = DFFE(A7,(/IO or /RD),/RESET,,DFF((DCPP[] == H"88"),CLK42,,)); -END GENERATE; - - RAM = !LCELL(A14 or A15 or (SC0 & SYS)); - - CS_ROM = LCELL(/MR or !RAM or !/RF); - CS_RAM = LCELL(/MR or RAM or !/RF); - --- ============================================== - --- graf screen enable for pages - - GRAF_X = LCELL(MEM.q[7..4] == B"0101"); - - GRAF.clk = CLK42; - GRAF.ena = (CT0 & CT2); - GRAF.d = GRAF_X; - - BLK_C = LCELL((GRAF_X xor GRAF) & !MC_TYPE); - ------------------------------------------ - - SCR128 = PN3; - - D[] = DI[]; - -- when not IO - reset DCPP! - - DCP_RES = DFF((STARTING & !/IO & /M1),CLK42,,); - - DCPP[].clk = CLK42; - DCPP[].ena = !DFF(MC_END,CLK42,,); - DCPP[].clrn = MC_END & DCP_RES; -- not in/out when START - DCPP[].d = MD[]; - --- DD[].clk = !CLK42; --- DD[].ena = !DFF(MC_END,!CLK42,,); - - DD[].clk = CLK42; - DD[].ena = !DFF(MC_END,CLK42,,); - DD[].clrn = MC_END & DCP_RES; - - CASE LCELL(MD[7..4] == 15) IS - WHEN 0 => DD[].d = MD[]; - WHEN 1 => DD[].d = (VCC,VCC,PG3[]); - END CASE; - --- === Port Decoder ============================================= - - DCP_CX = (DCPP[] == B"1100XXXX"); - SYS_ENA = DFF((DCP_CX & (DCPP[] == B"XXXXX110")),CLK42,,); - --- /IOWR = DFF((/WR or /IO),CLK42,,!/IO); - /IOWR = LCELL(/IO or /WR or !/M1); - - CNF[].ena = SYS_ENA; CNF[].d = (DI[] & DI2) or (CNF[] & !DI2); - AROM16.ena = SYS_ENA; AROM16.d = (DI0 & !DI1) or (AROM16 & DI1); - TB_SW.ena = SYS_ENA; TB_SW.d = (DI0 & DI1) or (TB_SW & !DI1); - SYS.ena = SYS_ENA; SYS.d = !A6; - - SC[].ena = DFF((DCP_CX & (DCPP[] == B"XXXXX000")),CLK42,,) ;SC[].d = DI[]; - PN[].ena = DFF((DCP_CX & (DCPP[] == B"XXXXX001")),CLK42,,) ;PN[].d = DI[]; - - TB_SW.clk = /IOWR; - AROM16.clk = /IOWR; - PN[].clk = /IOWR; - SC[].clk = /IOWR; - SYS.clk = /IOWR; - CNF[].clk = /IOWR; - - AROM16.clrn = /RESET; - TB_SW.prn = /RESET; - SYS.clrn = /RESET; - CNF[].clrn = /RESET; - - SC[].clrn = /RESET & !CNF6; -- Scorpion-OFF - - PN[5..0].clrn = /RESET & !CNF5; -- reset PN5 - PN[7..6].clrn = /RESET & CNF7; -- set Pentagon-512 - - PN4Q = PN4; - --- ==================================== - --- ********** Pages decoder *********** - --- ==================================== - - PG3[] = (!PN7,VCC,LCELL((SC4 & !CNF7) or (CNF7 & PN6)),PN[2..0]); - --- SC0,SC1,SYS,DOS,PN4,AROM16,CASH_ON,NMI_ENA - PG0[] = (VCC,GND, - LCELL(SC0 or !SYS or CASH_ON or !NMI_ENA), - LCELL(((AROM16 & !(SC0 & SYS)) or (CASH_ON & NMI_ENA))), - LCELL((SPR_1 & SC_LCELL) or !SYS or !NMI_ENA), - LCELL((SPR_0 & SC_LCELL) or !SYS or !NMI_ENA)); - --- SC_LCELL = LCELL(!(SC0 & SYS) & !CASH_ON); - SC_LCELL = (!(SC0 & SYS) & !CASH_ON); - - NMI_ENA = VCC; - - SPR_[] = !SC1 & (DOS,(PN4 or !DOS)); -- expansion/dos/basic128/basic48 - - CASE (TEST_R,SYS) IS - WHEN B"X0" => RA[] = (!AROM16,B"000"); -- system 0/1 - WHEN B"01" => RA[] = (!AROM16,GND,SPR_[]); -- expansion/dos/basic - WHEN B"11" => RA[] = (B"001",SPR_0); -- test - END CASE; - --- ==================================== - - CASE A[15..14] IS - WHEN 0 => MPGS[5..0] = PG0[]; - WHEN 1 => MPGS[5..0] = B"101001"; %H"E9"% - WHEN 2 => MPGS[5..0] = B"101010"; %H"EA"% - WHEN 3 => MPGS[5..0] = PG3[]; - END CASE; - MPGS[7..6] = VCC; - --- STARTING = DFF(GND,VCC,/RESET,(/IO or /RD)); - STARTING = LCELL(/RESET & (STARTING or !(/IO or /RD))); - - PGS[].clk = !CLK42; - CASE (LCELL(/IO & !(A14 & A15 & !STARTING)),MC_END) IS - WHEN B"1X" => PGS[] = (VCC,VCC,MPGS[5..0]); - WHEN B"01" => PGS[] = DD[]; - WHEN B"00" => PGS[] = GND; - END CASE; - - MEM_WR = DFFE((DCPP[7] & DCPP[6] & STARTING & DFF(DFF((MC_END & !/WR),CLK42,,),CLK42,,)),CLK42,!/IO,,CT1); - - ADR8_MEM = GND; - - CASE ADR8_MEM IS - WHEN 1 => MEM_D[] = (DI[],MEM.q[7..0]); DO[] = MEM.q[15..8]; - WHEN 0 => MEM_D[] = (MEM.q[15..8],DI[]); DO[] = MEM.q[7..0]; - END CASE; - - MEM.wren = MEM_WR; - MEM.data[] = MEM_D[]; - MEM.wraddress[] = PGS[]; - MEM.wrclock = CLK42; - MEM.wrclken = VCC; - MEM.rden = VCC; - MEM.rdaddress[] = PGS[]; - MEM.rdclock = CLK42; - MEM.rdclken = VCC; --- = MEM.q[]; - - PAGE[] = MEM.q[11..0]; - TYPE[] = MEM.q[15..12]; - - - PORT = !(MEM.q[15..12] == 0) or /IO or (/RD & /WR); - -END; - - diff --git a/src/altera/acex/k30/KBD.ACF b/src/altera/acex/k30/KBD.ACF deleted file mode 100644 index 6ef977a..0000000 --- a/src/altera/acex/k30/KBD.ACF +++ /dev/null @@ -1,568 +0,0 @@ --- --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. --- -CHIP kbd -BEGIN - DEVICE = EP1K30QC208-3; -END; - -DEFAULT_DEVICES -BEGIN - AUTO_DEVICE = EP1K100FC484-1; - AUTO_DEVICE = EP1K100FC256-1; - AUTO_DEVICE = EP1K100QC208-1; - AUTO_DEVICE = EP1K50FC484-1; - AUTO_DEVICE = EP1K50FC256-1; - AUTO_DEVICE = EP1K50QC208-1; - AUTO_DEVICE = EP1K50TC144-1; - AUTO_DEVICE = EP1K30FC256-1; - AUTO_DEVICE = EP1K30QC208-1; - AUTO_DEVICE = EP1K30TC144-1; - ASK_BEFORE_ADDING_EXTRA_DEVICES = ON; -END; - -TIMING_POINT -BEGIN - DEVICE_FOR_TIMING_SYNTHESIS = EP1K30QC208-3; - FREQUENCY = 100MHz; - MAINTAIN_STABLE_SYNTHESIS = OFF; - CUT_ALL_CLEAR_PRESET = ON; - CUT_ALL_BIDIR = ON; -END; - -IGNORED_ASSIGNMENTS -BEGIN - FIT_IGNORE_TIMING = OFF; - DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF; - IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF; - IGNORE_DEVICE_ASSIGNMENTS = OFF; - IGNORE_LC_ASSIGNMENTS = OFF; - IGNORE_PIN_ASSIGNMENTS = OFF; - IGNORE_CHIP_ASSIGNMENTS = OFF; - IGNORE_TIMING_ASSIGNMENTS = OFF; - IGNORE_LOGIC_OPTION_ASSIGNMENTS = OFF; - IGNORE_CLIQUE_ASSIGNMENTS = OFF; -END; - -GLOBAL_PROJECT_DEVICE_OPTIONS -BEGIN - MAX7000B_ENABLE_VREFB = OFF; - MAX7000B_ENABLE_VREFA = OFF; - MAX7000B_VCCIO_IOBANK2 = 3.3V; - MAX7000B_VCCIO_IOBANK1 = 3.3V; - CONFIG_EPROM_PULLUP_RESISTOR = ON; - CONFIG_EPROM_USER_CODE = FFFFFFFF; - FLEX_CONFIGURATION_EPROM = AUTO; - MAX7000AE_ENABLE_JTAG = ON; - MAX7000AE_USER_CODE = FFFFFFFF; - FLEX6000_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX10KA_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = ON; - FLEX10K_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX6000_ENABLE_JTAG = OFF; - CONFIG_SCHEME_FLEX_6000 = PASSIVE_SERIAL; - MULTIVOLT_IO = OFF; - MAX7000S_ENABLE_JTAG = ON; - FLEX10K_ENABLE_LOCK_OUTPUT = OFF; - MAX7000S_USER_CODE = FFFF; - CONFIG_SCHEME_10K = PASSIVE_SERIAL; - FLEX10K_JTAG_USER_CODE = 7F; - ENABLE_INIT_DONE_OUTPUT = OFF; - ENABLE_CHIP_WIDE_OE = OFF; - ENABLE_CHIP_WIDE_RESET = OFF; - nCEO = UNRESERVED; - CLKUSR = UNRESERVED; - ADD17 = UNRESERVED; - ADD16 = UNRESERVED; - ADD15 = UNRESERVED; - ADD14 = UNRESERVED; - ADD13 = UNRESERVED; - ADD0_TO_ADD12 = UNRESERVED; - SDOUT = RESERVED_DRIVES_OUT; - RDCLK = UNRESERVED; - RDYnBUSY = UNRESERVED; - nWS_nRS_nCS_CS = UNRESERVED; - DATA1_TO_DATA7 = UNRESERVED; - DATA0 = RESERVED_TRI_STATED; - FLEX8000_ENABLE_JTAG = OFF; - CONFIG_SCHEME = ACTIVE_SERIAL; - DISABLE_TIME_OUT = OFF; - ENABLE_DCLK_OUTPUT = OFF; - RELEASE_CLEARS = OFF; - AUTO_RESTART = OFF; - USER_CLOCK = OFF; - SECURITY_BIT = OFF; - RESERVED_PINS_PERCENT = 0; - RESERVED_LCELLS_PERCENT = 0; -END; - -GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS -BEGIN - STYLE = FAST; - MULTI_LEVEL_SYNTHESIS_MAX9000 = ON; - AUTO_IMPLEMENT_IN_EAB = OFF; - AUTO_OPEN_DRAIN_PINS = ON; - ONE_HOT_STATE_MACHINE_ENCODING = OFF; - AUTO_REGISTER_PACKING = OFF; - DEVICE_FAMILY = ACEX1K; - AUTO_FAST_IO = OFF; - AUTO_GLOBAL_OE = ON; - AUTO_GLOBAL_PRESET = ON; - AUTO_GLOBAL_CLEAR = ON; - AUTO_GLOBAL_CLOCK = ON; - MULTI_LEVEL_SYNTHESIS_MAX5000_7000 = OFF; - OPTIMIZE_FOR_SPEED = 5; -END; - -COMPILER_PROCESSING_CONFIGURATION -BEGIN - USE_QUARTUS_FITTER = ON; - PRESERVE_ALL_NODE_NAME_SYNONYMS = OFF; - FITTER_SETTINGS = NORMAL; - SMART_RECOMPILE = OFF; - GENERATE_AHDL_TDO_FILE = OFF; - RPT_FILE_USER_ASSIGNMENTS = ON; - RPT_FILE_LCELL_INTERCONNECT = ON; - RPT_FILE_HIERARCHY = ON; - RPT_FILE_EQUATIONS = ON; - LINKED_SNF_EXTRACTOR = OFF; - OPTIMIZE_TIMING_SNF = OFF; - TIMING_SNF_EXTRACTOR = ON; - FUNCTIONAL_SNF_EXTRACTOR = OFF; - DESIGN_DOCTOR_RULES = EPLD; - DESIGN_DOCTOR = OFF; -END; - -COMPILER_INTERFACES_CONFIGURATION -BEGIN - NETLIST_OUTPUT_TIME_SCALE = 0.1ns; - EDIF_INPUT_SHOW_LMF_MAPPING_MESSAGES = OFF; - EDIF_BUS_DELIMITERS = []; - EDIF_FLATTEN_BUS = OFF; - EDIF_OUTPUT_FORCE_0NS_DELAYS = OFF; - EDIF_OUTPUT_INCLUDE_SPECIAL_PRIM = OFF; - EDIF_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - EDIF_OUTPUT_DELAY_CONSTRUCTS = EDO_FILE; - EDIF_OUTPUT_USE_EDC = OFF; - EDIF_INPUT_USE_LMF2 = OFF; - EDIF_INPUT_USE_LMF1 = OFF; - EDIF_OUTPUT_GND = GND; - EDIF_OUTPUT_VCC = VCC; - EDIF_INPUT_GND = GND; - EDIF_INPUT_VCC = VCC; - EDIF_OUTPUT_EDC_FILE = *.edc; - EDIF_INPUT_LMF2 = *.lmf; - EDIF_INPUT_LMF1 = *.lmf; - VHDL_GENERATE_CONFIGURATION_DECLARATION = OFF; - VHDL_OUTPUT_DELAY_CONSTRUCTS = VHO_FILE; - VERILOG_OUTPUT_DELAY_CONSTRUCTS = VO_FILE; - VHDL_FLATTEN_BUS = OFF; - VERILOG_FLATTEN_BUS = OFF; - EDIF_TRUNCATE_HIERARCHY_PATH = OFF; - VHDL_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - VHDL_WRITER_VERSION = VHDL87; - VHDL_READER_VERSION = VHDL87; - SYNOPSYS_MAPPING_EFFORT = MEDIUM; - SYNOPSYS_BOUNDARY_OPTIMIZATION = OFF; - SYNOPSYS_HIERARCHICAL_COMPILATION = ON; - SYNOPSYS_DESIGNWARE = OFF; - SYNOPSYS_COMPILER = DESIGN; - USE_SYNOPSYS_SYNTHESIS = OFF; - VHDL_NETLIST_WRITER = OFF; - VERILOG_NETLIST_WRITER = OFF; - XNF_GENERATE_AHDL_TDX_FILE = ON; - XNF_TRANSLATE_INTERNAL_NODE_NAMES = ON; - XNF_EMULATE_TRI_STATE_BUSES = INTERNAL_LOGIC; - EDIF_OUTPUT_VERSION = 200; - EDIF_NETLIST_WRITER = OFF; -END; - -CUSTOM_DESIGN_DOCTOR_RULES -BEGIN - MASTER_RESET = OFF; - EXPANDER_NETWORKS = ON; - RACE_CONDITIONS = ON; - DELAY_CHAINS = ON; - ASYNCHRONOUS_INPUTS = ON; - PRESET_CLEAR_NETWORKS = ON; - STATIC_HAZARDS_AFTER_SYNTHESIS = OFF; - STATIC_HAZARDS_BEFORE_SYNTHESIS = ON; - MULTI_CLOCK_NETWORKS = ON; - MULTI_LEVEL_CLOCKS = ON; - GATED_CLOCKS = ON; - RIPPLE_CLOCKS = ON; -END; - -SIMULATOR_CONFIGURATION -BEGIN - BIDIR_PIN = STRONG; - END_TIME = 0.0ns; - START_TIME = 0.0ns; - GLITCH_TIME = 0.0ns; - GLITCH = OFF; - OSCILLATION_TIME = 0.0ns; - OSCILLATION = OFF; - CHECK_OUTPUTS = OFF; - SETUP_HOLD = OFF; - USE_DEVICE = OFF; -END; - -TIMING_ANALYZER_CONFIGURATION -BEGIN - ANALYSIS_MODE = REGISTERED_PERFORMANCE; - CUT_OFF_RAM_REGISTERED_WE_PATHS = OFF; - LIST_PATH_FREQUENCY = 10MHz; - LIST_PATH_COUNT = 10; - REGISTERED_PERFORMANCE_OPTIONS = NUMBER_OF_PATHS; - INCLUDE_PATHS_LESS_THAN_VALUE = 214.7483647ms; - INCLUDE_PATHS_LESS_THAN = OFF; - INCLUDE_PATHS_GREATER_THAN_VALUE = 0.0ns; - INCLUDE_PATHS_GREATER_THAN = OFF; - DELAY_MATRIX_OPTIONS = SHOW_ALL_PATHS; - CELL_WIDTH = 18; - LIST_ONLY_LONGEST_PATH = ON; - CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; - CUT_OFF_IO_PIN_FEEDBACK = ON; - AUTO_RECALCULATE = OFF; -END; - -OTHER_CONFIGURATION -BEGIN - LAST_MAXPLUS2_VERSION = 10.0; - EXPLICIT_FAMILY = 1; - ROW_PINS_LCELL_INSERT = ON; - CARRY_OUT_PINS_LCELL_INSERT = OFF; - NORMAL_LCELL_INSERT = ON; - FLEX_10K_52_COLUMNS = 40; - DEFAULT_9K_EXP_PER_LCELL = 1/2; - LOCAL_INTERCONNECT_PER_LAB_PERCENT = 100; - LCELLS_PER_ROW_PERCENT = 100; - FAN_IN_PER_LCELL_PERCENT = 100; - EXP_PER_LCELL_PERCENT = 100; - ROW_PINS_PERCENT = 50; - ORIGINAL_MAXPLUS2_VERSION = 9.6; - COMPILER_DATA = "1,1,0,1,0,0,0,1,1,1,1,0,1,1,1"; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = ON; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.FLEX8000 -BEGIN - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = AUTO; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = AUTO; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = MANUAL; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = MANUAL; -END; - diff --git a/src/altera/acex/k30/KBD.INC b/src/altera/acex/k30/KBD.INC deleted file mode 100644 index a6b7f8d..0000000 --- a/src/altera/acex/k30/KBD.INC +++ /dev/null @@ -1,26 +0,0 @@ --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. - --- MAX+plus II Include File --- Version 10.0 9/14/2000 --- Created: Thu May 03 21:43:31 2001 - -FUNCTION kbd (clk42, clk_k, kbd_cc, kbd_dd, /rf, /io, /iom, /m1, a[15..8], ena, int_ena) - RETURNS (kbo[7..0], kb_reset, kb_f12, kb_ctrl, kb_alt, kb_sh, int); diff --git a/src/altera/acex/k30/KBD.TDF b/src/altera/acex/k30/KBD.TDF deleted file mode 100644 index 20e40be..0000000 --- a/src/altera/acex/k30/KBD.TDF +++ /dev/null @@ -1,180 +0,0 @@ - - TITLE "ZX-Keyboard"; - -INCLUDE "lpm_ram_dq"; - -SUBDESIGN kbd - ( - CLK42 : INPUT; -- full sinc 42MHz - CLK_K : INPUT; -- sinc input 15KHz - KBD_CC : INPUT; -- sinc KBD - KBD_DD : INPUT; -- data KBD - - /RF : INPUT; -- /rfsh - /IO : INPUT; -- /iorq - /IOM : INPUT; - /M1 : INPUT; - - A[15..8] : INPUT; - - KBO[7..0] : OUTPUT; -- output - - KB_RESET : OUTPUT; - - KB_F12 : OUTPUT; - KB_CTRL : OUTPUT; - KB_ALT : OUTPUT; - KB_SH : OUTPUT; - - ENA : INPUT; - INT_ENA : INPUT; - INT : OUTPUT; - ) -VARIABLE - - KB_CT[2..0] : DFF; - KB_D[10..0] : DFF; - KB_OFF : DFFE; - - KB_EXT : DFF; - KB_ALT : DFF; - KB_CTRL : DFF; - KB_SH : DFF; - - KB_CTRL_X : NODE; - KB_ALT_X : NODE; - KB_SH_X : NODE; - KB_XXX : NODE; - KB_RESET : DFF; - RXA[1..0] : DFFE; - - K_CLK : NODE; - KA[15..0] : NODE; - KB_MA[2..0] : DFF; - KB_MXA : NODE; - KDCA[2..0] : LCELL; - - KDD[7..0] : DFF; - KBD[5..0] : DFF; - KD[7..0] : NODE; - KDX[5..0] : DFF; - KDXX[5..0] : DFF; - WR_KBD : NODE; - KB_OFL : NODE; - -BEGIN - - INT = DFF((KB_CT[] == 0),CLK42,,INT_ENA); - --- KB_CT[].clk = DFF(CLK_K,CLK42,,); - KB_CT[].clk = CLK_K; - KB_CT[].prn = DFF(KBD_CC,CLK42,,); - - CASE KB_CT[] IS - WHEN 0 => KB_CT[].d = GND; - WHEN 1,2,3,4,5,6,7 => KB_CT[].d = KB_CT[] - 1; - END CASE; - - KB_D[].clk = DFF(!KBD_CC,CLK42,,); - KB_D[].d = (KBD_DD,KB_D[10..1]); - - KB_OFF.ena = !KB_EXT; - KB_OFF.clk = DFF((KB_CT[] == 0),CLK42,,); - KB_OFF.d = KB_D[] == B"XX11110000X"; - - KB_EXT.clk = DFF((KB_CT[] == 1),CLK42,,); - KB_EXT.d = KB_D[] == B"XX11100000X"; - - KB_CTRL.clk = !KB_CT2; - KB_ALT.clk = !KB_CT2; - KB_SH.clk = !KB_CT2; - - KB_CTRL_X = LCELL(KB_D[] == B"XXXXX1X100X"); - KB_ALT_X = LCELL(KB_D[] == B"XXXXX1X001X"); - KB_SH_X = LCELL(KB_D[] == B"XX0X01X0XXX") & - CASCADE((KB_D[] == B"XXX1XX1X01X") or (KB_D[] == B"XXX0XX0X10X")); - KB_XXX = LCELL(KB_D[] == B"XX000X0XXXX"); - - CASE KB_OFF IS - WHEN 0 => - KB_CTRL.d = (KB_CTRL_X & KB_XXX) or KB_CTRL; - KB_ALT.d = (KB_ALT_X & KB_XXX) or KB_ALT; - KB_SH.d = (KB_SH_X) or KB_SH; - WHEN 1 => - KB_CTRL.d = !(KB_CTRL_X & KB_XXX) & KB_CTRL; - KB_ALT.d = !(KB_ALT_X & KB_XXX) & KB_ALT; - KB_SH.d = !(KB_SH_X) & KB_SH; - END CASE; - - KB_F12 = DFF(!((KB_XXX & LCELL(KB_D[] == B"XXXXX0X111X")) & !KB_OFF), - !KB_CT2,,!(KB_CT[] == 1)); - - KB_RESET.clk = !KB_CT2; - KB_RESET.d = !(KB_ALT_X & (KB_D[] == B"XX011X0XXXX") & !KB_OFF & KB_CTRL & KB_ALT); - KB_RESET.prn = !DFF((KB_CT[] == 1),CLK42,,); - - K_CLK = DFF(/RF,CLK42,,); - - RXA[].ena = VCC; - RXA[].clk = K_CLK; - - CASE DFF((!(KB_CT[] == B"01X") & (RXA[] == 0)),CLK42,,) IS - WHEN B"1" => RXA[] = GND; - WHEN B"0" => RXA[] = (RXA0,!RXA1); - END CASE; - - CASE (DFF((/IO & (RXA[] == 0),CLK42,,)),LCELL(KDD7 & KDD6)) IS - WHEN B"0X" => KA[15..8] = (B"101",KDCA[],B"11"); - WHEN B"10" => KA[15..8] = (B"110000",KDD7,KDD6); - WHEN B"11" => KA[15..8] = KB_D[8..1]; - END CASE; - - KB_MA[].clk = CLK42; - KB_MA[].d = KB_MA[] + 1; - KB_MA[].clrn = !DFF(/IO,CLK42,,); - - KB_MXA = DFF(( (((KB_MA[] == 7) & A15) or ((KB_MA[] == 6) & A14)) - or (((KB_MA[] == 5) & A13) or ((KB_MA[] == 4) & A12)) - or (((KB_MA[] == 3) & A11) or ((KB_MA[] == 2) & A10)) - or (((KB_MA[] == 1) & A9 ) or ((KB_MA[] == 0) & A8 ))),CLK42,,); - - IF !DFF(/IO,CLK42,,) THEN - KDCA[] = KB_MA[]; - ELSE - KDCA[] = KDD[5..3]; - END IF; - - KDD[].clk = RXA0; - KDD[].d = KD[]; - KDD[7..6].prn = !KB_CT2; - - KDXX[].clk = RXA0; - KDXX[].d = !((KD[2..0] == 5),(KD[2..0] == 4), - (KD[2..0] == 3),(KD[2..0] == 2), - (KD[2..0] == 1),(KD[2..0] == 0)); - - KDX[].clk = RXA1; - - CASE KB_OFF IS - WHEN B"0" => KDX[].d = (KD[5..0] & KDXX[]); - WHEN B"1" => KDX[].d = (KD[5..0] or !KDXX[]); - END CASE; - --- ============================== - - WR_KBD = K_CLK or !DFF((KB_CT[] == 2),CLK42,,) or !(RXA[] == 3); - - KD[] = lpm_ram_dq((B"11",KDX[5..0]),KA[15..8],!WR_KBD,CLK42,) - WITH (lpm_width=8,lpm_widthad=8,lpm_file="KBD_INI2.MIF", - lpm_outdata="UNREGISTERED"); - - KBD[].clk = CLK42; - KBD[].prn = DFF(VCC,KB_MA2,(!/IO & ENA),); - --- KBD[].prn = DFF(!/IOM,CLK42,,); - KBD[].d = KBD[] & (KD[5..0] or KB_MXA); - - KBO[] = (VCC,VCC,KBD[]); - -END; - diff --git a/src/altera/acex/k30/KBD_INI2.MIF b/src/altera/acex/k30/KBD_INI2.MIF deleted file mode 100644 index 43e7390..0000000 --- a/src/altera/acex/k30/KBD_INI2.MIF +++ /dev/null @@ -1,167 +0,0 @@ -DEPTH = 256; % Memory depth and width are required % -WIDTH = 8; % Enter a decimal number % - -ADDRESS_RADIX = HEX; % Address and value radixes are optional % -DATA_RADIX = BIN; % Enter BIN, DEC, HEX, or OCT; unless % - % otherwise specified, radixes = HEX % - --- Specify values for addresses, which can be single address or range - -CONTENT - BEGIN -[0..FF] : 11111111; -0 : - 11111111 % .. % - 00100001 % F9 % - 11111111 % .. % - 00011100 % F5 % - 00011010 % F3 % - 00011000 % F1 % - 00011001 % F2 % - 11111111 % F12 % - 11111111 % .. % - 00100000 % F10 % - - 00100010 % F8 % - 00100100 % F6 % - 00011011 % F4 % - 01011000 % Tab % - 10001000 % ~` % - 11111111 % .. % - 11111111 % .. % - 01111001 % Alt % - 11000000 % Left Shift % - 11111111 % .. % - - 11111001 % Ctrl % - 11010000 % 'Q' % - 11011000 % '1' % - 11111111 % .. % - 11111111 % .. % - 11111111 % .. % - 11000001 % 'Z' % - 11001001 % 'S' % - 11001000 % 'A' % - 11010001 % 'W' % - - 11011001 % '2' % - 01110000 % left WIN % - 11111111 % .. % - 11000011 % 'C' % - 11000010 % 'X' % - 11001010 % 'D' % - 11010010 % 'E' % - 11011011 % '4' % - 11011010 % '3' % - 10110000 % Right WIN % - - 11111111 % .. % - 11111000 % ' ' % - 11000100 % 'V' % - 11001011 % 'F' % - 11010100 % 'T' % - 11010011 % 'R' % - 11011100 % '5' % - 10111000 % Right Mouse % - 11111111 % .. % - 11111011 % 'N' % - - 11111100 % 'B' % - 11110100 % 'H' % - 11001100 % 'G' % - 11101100 % 'Y' % - 11100100 % '6' % - 11111111 % .. % - 11111111 % .. % - 11111111 % .. % - 11111010 % 'M' % - 11110011 % 'J' % - - 11101011 % 'U' % - 11100011 % '7' % - 11100010 % '8' % - 11111111 % .. % - 11111111 % .. % - 10111011 % ',' % - 11110010 % 'K' % - 11101010 % 'I' % - 11101001 % 'O' % - 11100000 % '0' % - - 11100001 % '9' % - 11111111 % .. % - 11111111 % .. % - 10111010 % '.' % - 10000100 % '/' % - 11110001 % 'L' % - 10101001 % ';' % - 11101000 % 'P' % - 10110011 % '-' % - 11111111 % .. % - - 11111111 % .. % - 11111111 % .. % - 10101000 % "'" % - 11111111 % .. % - 10101100 % '[' % - 10110001 % '=' % - 11111111 % .. % - 11111111 % .. % - 01011001 % Caps Lock % - 11000000 % Right SHIFT % - - 11110000 % ENTER % - 10101011 % ']' % - 11111111 % .. % - 10001010 % '\' % - 11111111 % .. % - 11111111 % .. % - 11111111 % .. % - 11111111 % .. % - 11111111 % .. % - 11111111 % .. % - - 11111111 % .. % - 11111111 % .. % - 01100000 % Back % - 11111111 % .. % - 11111111 % .. % - 10010010 % End % - 11111111 % .. % - 01011100 % <- % - 10010000 % Home % - 11111111 % .. % - - 11111111 % .. % - 11111111 % .. % - 10010001 % ins % - 01100001 % DEL % - 01100100 % Dn % - 10101010 % grey 5 ; ctrl + I % - 01100010 % -> % - 01100011 % Up % - 01111000 % ESC % - 00111111 % Num % - - 11111111 % F11 % - 10110010 % G+ % - 01011011 % PDn ; caps + 4 % - 10110011 % G- % - 10111100 % G* % - 01011010 % PUp ; caps + 3 % - 00000000 % Scrol Lock % - 11111111 % .. % - 11111111 % .. % - 11111111 % .. % - - 11111111 % .. % - 00100011 % F7 % ; -% !! DATA FOR CAPS !! % -C0 : - 11111101 % Function shift % - 11000000 % Left Shift % - 11111001 % Ctrl % - 11111111 ; % no shift % -END ; - - diff --git a/src/altera/acex/k30/MOUSE.ACF b/src/altera/acex/k30/MOUSE.ACF deleted file mode 100644 index ba8c48d..0000000 --- a/src/altera/acex/k30/MOUSE.ACF +++ /dev/null @@ -1,571 +0,0 @@ --- --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. --- -CHIP mouse -BEGIN - DEVICE = EP1K30QC208-3; -END; - -DEFAULT_DEVICES -BEGIN - AUTO_DEVICE = EP1K100FC484-1; - AUTO_DEVICE = EP1K100FC256-1; - AUTO_DEVICE = EP1K100QC208-1; - AUTO_DEVICE = EP1K50FC484-1; - AUTO_DEVICE = EP1K50FC256-1; - AUTO_DEVICE = EP1K50QC208-1; - AUTO_DEVICE = EP1K50TC144-1; - AUTO_DEVICE = EP1K30FC256-1; - AUTO_DEVICE = EP1K30QC208-1; - AUTO_DEVICE = EP1K30TC144-1; - AUTO_DEVICE = EP1K10FC256-1; - AUTO_DEVICE = EP1K10QC208-1; - AUTO_DEVICE = EP1K10TC144-1; - AUTO_DEVICE = EP1K10TC100-1; - ASK_BEFORE_ADDING_EXTRA_DEVICES = ON; -END; - -TIMING_POINT -BEGIN - DEVICE_FOR_TIMING_SYNTHESIS = EP1K30QC208-3; - FREQUENCY = 200MHz; - MAINTAIN_STABLE_SYNTHESIS = OFF; - CUT_ALL_CLEAR_PRESET = ON; - CUT_ALL_BIDIR = ON; -END; - -IGNORED_ASSIGNMENTS -BEGIN - FIT_IGNORE_TIMING = OFF; - DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF; - IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF; - IGNORE_DEVICE_ASSIGNMENTS = OFF; - IGNORE_LC_ASSIGNMENTS = OFF; - IGNORE_PIN_ASSIGNMENTS = OFF; - IGNORE_CHIP_ASSIGNMENTS = OFF; - IGNORE_TIMING_ASSIGNMENTS = OFF; - IGNORE_LOGIC_OPTION_ASSIGNMENTS = OFF; - IGNORE_CLIQUE_ASSIGNMENTS = OFF; -END; - -GLOBAL_PROJECT_DEVICE_OPTIONS -BEGIN - MAX7000B_ENABLE_VREFB = OFF; - MAX7000B_ENABLE_VREFA = OFF; - MAX7000B_VCCIO_IOBANK2 = 3.3V; - MAX7000B_VCCIO_IOBANK1 = 3.3V; - CONFIG_EPROM_PULLUP_RESISTOR = ON; - CONFIG_EPROM_USER_CODE = FFFFFFFF; - FLEX_CONFIGURATION_EPROM = AUTO; - MAX7000AE_ENABLE_JTAG = ON; - MAX7000AE_USER_CODE = FFFFFFFF; - FLEX6000_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX10KA_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = ON; - FLEX10K_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX6000_ENABLE_JTAG = OFF; - CONFIG_SCHEME_FLEX_6000 = PASSIVE_SERIAL; - MULTIVOLT_IO = OFF; - MAX7000S_ENABLE_JTAG = ON; - FLEX10K_ENABLE_LOCK_OUTPUT = OFF; - MAX7000S_USER_CODE = FFFF; - CONFIG_SCHEME_10K = PASSIVE_SERIAL; - FLEX10K_JTAG_USER_CODE = 7F; - ENABLE_INIT_DONE_OUTPUT = OFF; - ENABLE_CHIP_WIDE_OE = OFF; - ENABLE_CHIP_WIDE_RESET = OFF; - nCEO = UNRESERVED; - CLKUSR = UNRESERVED; - ADD17 = UNRESERVED; - ADD16 = UNRESERVED; - ADD15 = UNRESERVED; - ADD14 = UNRESERVED; - ADD13 = UNRESERVED; - ADD0_TO_ADD12 = UNRESERVED; - SDOUT = RESERVED_DRIVES_OUT; - RDCLK = UNRESERVED; - RDYnBUSY = UNRESERVED; - nWS_nRS_nCS_CS = UNRESERVED; - DATA1_TO_DATA7 = UNRESERVED; - DATA0 = RESERVED_TRI_STATED; - FLEX8000_ENABLE_JTAG = OFF; - CONFIG_SCHEME = ACTIVE_SERIAL; - DISABLE_TIME_OUT = OFF; - ENABLE_DCLK_OUTPUT = OFF; - RELEASE_CLEARS = OFF; - AUTO_RESTART = OFF; - USER_CLOCK = OFF; - SECURITY_BIT = OFF; - RESERVED_PINS_PERCENT = 0; - RESERVED_LCELLS_PERCENT = 0; -END; - -GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS -BEGIN - STYLE = FAST; - MULTI_LEVEL_SYNTHESIS_MAX9000 = ON; - AUTO_IMPLEMENT_IN_EAB = OFF; - AUTO_OPEN_DRAIN_PINS = ON; - ONE_HOT_STATE_MACHINE_ENCODING = OFF; - AUTO_REGISTER_PACKING = OFF; - DEVICE_FAMILY = ACEX1K; - AUTO_FAST_IO = OFF; - AUTO_GLOBAL_OE = ON; - AUTO_GLOBAL_PRESET = ON; - AUTO_GLOBAL_CLEAR = ON; - AUTO_GLOBAL_CLOCK = ON; - MULTI_LEVEL_SYNTHESIS_MAX5000_7000 = OFF; - OPTIMIZE_FOR_SPEED = 5; -END; - -COMPILER_PROCESSING_CONFIGURATION -BEGIN - USE_QUARTUS_FITTER = ON; - PRESERVE_ALL_NODE_NAME_SYNONYMS = OFF; - FITTER_SETTINGS = NORMAL; - SMART_RECOMPILE = OFF; - GENERATE_AHDL_TDO_FILE = OFF; - RPT_FILE_USER_ASSIGNMENTS = ON; - RPT_FILE_LCELL_INTERCONNECT = ON; - RPT_FILE_HIERARCHY = ON; - RPT_FILE_EQUATIONS = ON; - LINKED_SNF_EXTRACTOR = OFF; - OPTIMIZE_TIMING_SNF = OFF; - TIMING_SNF_EXTRACTOR = ON; - FUNCTIONAL_SNF_EXTRACTOR = OFF; - DESIGN_DOCTOR_RULES = EPLD; - DESIGN_DOCTOR = OFF; -END; - -COMPILER_INTERFACES_CONFIGURATION -BEGIN - NETLIST_OUTPUT_TIME_SCALE = 0.1ns; - EDIF_INPUT_SHOW_LMF_MAPPING_MESSAGES = OFF; - EDIF_BUS_DELIMITERS = []; - EDIF_FLATTEN_BUS = OFF; - EDIF_OUTPUT_FORCE_0NS_DELAYS = OFF; - EDIF_OUTPUT_INCLUDE_SPECIAL_PRIM = OFF; - EDIF_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - EDIF_OUTPUT_DELAY_CONSTRUCTS = EDO_FILE; - EDIF_OUTPUT_USE_EDC = OFF; - EDIF_INPUT_USE_LMF2 = OFF; - EDIF_INPUT_USE_LMF1 = OFF; - EDIF_OUTPUT_GND = GND; - EDIF_OUTPUT_VCC = VCC; - EDIF_INPUT_GND = GND; - EDIF_INPUT_VCC = VCC; - EDIF_OUTPUT_EDC_FILE = *.edc; - EDIF_INPUT_LMF2 = *.lmf; - EDIF_INPUT_LMF1 = *.lmf; - VHDL_GENERATE_CONFIGURATION_DECLARATION = OFF; - VHDL_OUTPUT_DELAY_CONSTRUCTS = VHO_FILE; - VERILOG_OUTPUT_DELAY_CONSTRUCTS = VO_FILE; - VHDL_FLATTEN_BUS = OFF; - VERILOG_FLATTEN_BUS = OFF; - EDIF_TRUNCATE_HIERARCHY_PATH = OFF; - VHDL_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - VHDL_WRITER_VERSION = VHDL93; - VHDL_READER_VERSION = VHDL93; - SYNOPSYS_MAPPING_EFFORT = MEDIUM; - SYNOPSYS_BOUNDARY_OPTIMIZATION = OFF; - SYNOPSYS_HIERARCHICAL_COMPILATION = ON; - SYNOPSYS_DESIGNWARE = OFF; - SYNOPSYS_COMPILER = DESIGN; - USE_SYNOPSYS_SYNTHESIS = OFF; - VHDL_NETLIST_WRITER = OFF; - VERILOG_NETLIST_WRITER = OFF; - XNF_GENERATE_AHDL_TDX_FILE = ON; - XNF_TRANSLATE_INTERNAL_NODE_NAMES = ON; - XNF_EMULATE_TRI_STATE_BUSES = INTERNAL_LOGIC; - EDIF_OUTPUT_VERSION = 200; - EDIF_NETLIST_WRITER = OFF; -END; - -CUSTOM_DESIGN_DOCTOR_RULES -BEGIN - MASTER_RESET = OFF; - EXPANDER_NETWORKS = ON; - RACE_CONDITIONS = ON; - DELAY_CHAINS = ON; - ASYNCHRONOUS_INPUTS = ON; - PRESET_CLEAR_NETWORKS = ON; - STATIC_HAZARDS_AFTER_SYNTHESIS = OFF; - STATIC_HAZARDS_BEFORE_SYNTHESIS = ON; - MULTI_CLOCK_NETWORKS = ON; - MULTI_LEVEL_CLOCKS = ON; - GATED_CLOCKS = ON; - RIPPLE_CLOCKS = ON; -END; - -SIMULATOR_CONFIGURATION -BEGIN - END_TIME = 10.0us; - BIDIR_PIN = STRONG; - START_TIME = 0.0ns; - GLITCH_TIME = 0.0ns; - GLITCH = OFF; - OSCILLATION_TIME = 0.0ns; - OSCILLATION = OFF; - CHECK_OUTPUTS = OFF; - SETUP_HOLD = OFF; - USE_DEVICE = OFF; -END; - -TIMING_ANALYZER_CONFIGURATION -BEGIN - CUT_OFF_RAM_REGISTERED_WE_PATHS = OFF; - LIST_PATH_FREQUENCY = 10MHz; - LIST_PATH_COUNT = 10; - REGISTERED_PERFORMANCE_OPTIONS = NUMBER_OF_PATHS; - INCLUDE_PATHS_LESS_THAN_VALUE = 214.7483647ms; - INCLUDE_PATHS_LESS_THAN = OFF; - INCLUDE_PATHS_GREATER_THAN_VALUE = 0.0ns; - INCLUDE_PATHS_GREATER_THAN = OFF; - DELAY_MATRIX_OPTIONS = SHOW_ALL_PATHS; - CELL_WIDTH = 18; - LIST_ONLY_LONGEST_PATH = ON; - CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; - CUT_OFF_IO_PIN_FEEDBACK = ON; - AUTO_RECALCULATE = OFF; - ANALYSIS_MODE = DELAY_MATRIX; -END; - -OTHER_CONFIGURATION -BEGIN - EXPLICIT_FAMILY = 1; - ROW_PINS_LCELL_INSERT = ON; - CARRY_OUT_PINS_LCELL_INSERT = OFF; - NORMAL_LCELL_INSERT = ON; - LAST_MAXPLUS2_VERSION = 10.0; - FLEX_10K_52_COLUMNS = 40; - DEFAULT_9K_EXP_PER_LCELL = 1/2; - LOCAL_INTERCONNECT_PER_LAB_PERCENT = 100; - LCELLS_PER_ROW_PERCENT = 100; - FAN_IN_PER_LCELL_PERCENT = 100; - EXP_PER_LCELL_PERCENT = 100; - ROW_PINS_PERCENT = 50; - ORIGINAL_MAXPLUS2_VERSION = 10.0; - COMPILER_DATA = "1,1,0,1,0,0,0,1,1,1,1,0,1,1,1"; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = ON; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = AUTO; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = AUTO; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = MANUAL; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = MANUAL; -END; - diff --git a/src/altera/acex/k30/MOUSE.INC b/src/altera/acex/k30/MOUSE.INC deleted file mode 100644 index 580ab4b..0000000 --- a/src/altera/acex/k30/MOUSE.INC +++ /dev/null @@ -1,26 +0,0 @@ --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. - --- MAX+plus II Include File --- Version 10.0 9/14/2000 --- Created: Sat Jun 16 17:49:35 2001 - -FUNCTION mouse (mouse_d, clk) - RETURNS (out_x[9..0], out_y[9..0], out_k[1..0], int); diff --git a/src/altera/acex/k30/MOUSE.MIF b/src/altera/acex/k30/MOUSE.MIF deleted file mode 100644 index c6f96ef..0000000 --- a/src/altera/acex/k30/MOUSE.MIF +++ /dev/null @@ -1,65 +0,0 @@ -DEPTH = 256; % Memory depth and width are required % -WIDTH = 16; % Enter a decimal number % - -ADDRESS_RADIX = HEX; % Address and value radixes are optional % -DATA_RADIX = HEX; % Enter BIN, DEC, HEX, or OCT; unless % - % otherwise specified, radixes = HEX % - --- Specify values for addresses, which can be single address or range - -CONTENT -BEGIN - - [0..FF] : 0; - -% - 11 - 1211 - 122211 - 12222211 - 1222222211 - 122222222211 - 1222222211 - 12222221 - 12222221 - 121112221 - 11 12221 - 1 1221 - 111 - - - -% - - 00 : 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0; - 10 : 1 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0; - 20 : 1 2 2 2 1 1 0 0 0 0 0 0 0 0 0 0; - 30 : 1 2 2 2 2 2 1 1 0 0 0 0 0 0 0 0; - 40 : 1 2 2 2 2 2 2 2 1 1 0 0 0 0 0 0; - 50 : 1 2 2 2 2 2 2 2 2 2 1 1 0 0 0 0; - 60 : 1 2 2 2 2 2 2 2 1 1 0 0 0 0 0 0; - E0 : 1 2 2 2 2 2 2 1 0 0 0 0 0 0 0 0; - 70 : 1 2 2 2 2 2 2 1 0 0 0 0 0 0 0 0; - 80 : 1 2 1 1 1 2 2 2 1 0 0 0 0 0 0 0; - 90 : 1 1 0 0 0 1 2 2 2 1 0 0 0 0 0 0; - A0 : 1 0 0 0 0 0 1 2 2 1 0 0 0 0 0 0; - B0 : 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0; - C0 : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; - D0 : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; - E0 : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; - F0 : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; - -% - - 1110 0000 0000 0 00 0000 0000 0000 0000 - 1000 0000 0000 0100 0000 0100 0000 0000 - 1000 1100 1010 0000 1100 1110 0100 1010 - 1110 1010 1100 0100 1010 0100 1010 1100 - 0010 1010 1000 0100 1010 0100 1110 1000 - 0010 1100 1000 0100 1010 0100 1000 1000 - 1110 1000 1000 0100 1010 0010 0110 1000 - 0000 1000 0000 0000 0000 0000 0000 0000 - -% - -END; diff --git a/src/altera/acex/k30/MOUSE.TDF b/src/altera/acex/k30/MOUSE.TDF deleted file mode 100644 index bb5770d..0000000 --- a/src/altera/acex/k30/MOUSE.TDF +++ /dev/null @@ -1,76 +0,0 @@ - - TITLE "Sp-Mouse"; - -INCLUDE "lpm_add_sub"; - -SUBDESIGN mouse - ( - MOUSE_D : INPUT; - CLK : INPUT; - OUT_X[9..0] : OUTPUT; - OUT_Y[9..0] : OUTPUT; - OUT_K[1..0] : OUTPUT; - INT : OUTPUT; - ) -VARIABLE - - SUM_X[9..0] : DFFE; - SUM_Y[9..0] : DFFE; - - CT[3..0] : DFF; - RG[9..0] : DFFE; - STATE[1..0] : DFFE; - RGK[5..0] : DFFE; - - MOUSE_IMP : NODE; - - DDX[7..0] : NODE; - DDY[7..0] : NODE; - -BEGIN - - CT[].clk = CLK; - - MOUSE_IMP = MOUSE_D xor !DFF(MOUSE_D,CLK,,); - - CT[].clrn = MOUSE_IMP; - - IF CT[] == 12 THEN - CT[] = GND; - ELSE - CT[] = CT[]+1; - END IF; - - RG[].clk = CLK; - RG[].ena = (CT[] == 4) or !RG0; - RG[].d = ((MOUSE_D,RG[9..1]) or !RG0); - RG[].prn = VCC; - - STATE[].ena = !RG0; - STATE[].clk = CLK; - - STATE[].d = (STATE0,RG7); - - RGK[].clk = CLK; - RGK[].ena = (RG7 & !RG0); - RGK[].d = RG[6..1]; - - DDX[] = (RGK[1..0],RG[6..1]); - DDY[] = (RGK[3..2],RG[6..1]); - - SUM_X[].ena = LCELL(!RG7 & (STATE[] == 1) & !RG0); - SUM_Y[].ena = LCELL(!RG7 & (STATE[] == 2) & !RG0); - - SUM_X[].clk = CLK; - SUM_Y[].clk = CLK; - - SUM_X[] = SUM_X[] + (DDX7,DDX7,DDX[]); - SUM_Y[] = SUM_Y[] + (DDY7,DDY7,DDY[]); - - OUT_X[] = SUM_X[]; - OUT_Y[] = SUM_Y[]; - OUT_K[] = RGK[5..4]; - - INT = DFF(((STATE[] == 2) & !RG0),CLK,,); - -END; diff --git a/src/altera/acex/k30/SP2_ACEX.ACF b/src/altera/acex/k30/SP2_ACEX.ACF deleted file mode 100644 index 063fc3a..0000000 --- a/src/altera/acex/k30/SP2_ACEX.ACF +++ /dev/null @@ -1,1366 +0,0 @@ --- --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. --- -CHIP SP2_ACEX -BEGIN - DEVICE = EP1K30QC208-3; - |CASXE1 : LOCATION = LC8_B36; - |CASXE0 : LOCATION = LC7_B36; - |CASX_3 : LOCATION = LC6_B36; - |CASX_2 : LOCATION = LC2_B36; - |CASX_1 : LOCATION = LC5_B36; - |CASX_0 : LOCATION = LC1_B36; - "|video2:SVIDEO|V_WRM" : LOCATION = LC8_F18; - "|video2:SVIDEO|V_WEM2" : LOCATION = LC2_F20; - "|video2:SVIDEO|V_WE_R" : LOCATION = LC5_F11; - "|video2:SVIDEO|V_WEMMO" : LOCATION = LC3_F15; - "|video2:SVIDEO|V_WEM" : LOCATION = LC2_F18; - "|video2:SVIDEO|V_WRM2" : LOCATION = LC8_F20; - "|video2:SVIDEO|V_WEMMM" : LOCATION = LC3_F12; - "|video2:SVIDEO|V_WEMMN" : LOCATION = LC2_F12; - "|video2:SVIDEO|V_WE" : LOCATION = LC6_F12; - "|video2:SVIDEO|V_CSX2" : LOCATION = LC5_F4; - "|video2:SVIDEO|V_CSX1" : LOCATION = LC5_F5; - "|video2:SVIDEO|V_CSX0" : LOCATION = LC5_F3; - "|dcp:DECODE|WR_AWGX" : LOCATION = LC2_A15; - "|video2:SVIDEO|V_WEMM" : LOCATION = LC4_F17; - "|video2:SVIDEO|V_WEY2" : LOCATION = LC2_F19; - "|video2:SVIDEO|V_WEY3" : LOCATION = LC2_F14; - "|video2:SVIDEO|V_WEY1" : LOCATION = LC2_F16; - "|video2:SVIDEO|V_WEY0" : LOCATION = LC2_F17; - "|acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_0" : LOCATION = EAB_D; - "|acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_1" : LOCATION = EAB_D; - "|acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_2" : LOCATION = EAB_D; - "|acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_3" : LOCATION = EAB_D; - "|acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_4" : LOCATION = EAB_D; - "|acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_5" : LOCATION = EAB_D; - "|acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_6" : LOCATION = EAB_D; - "|acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_7" : LOCATION = EAB_D; - |V_WRX3 : LOCATION = LC1_F14; - |V_WRX1 : LOCATION = LC1_F16; - |V_WRX0 : LOCATION = LC1_F17; - "|video2:SVIDEO|V_WR_1" : LOCATION = LC8_F16; - "|video2:SVIDEO|V_WR_0" : LOCATION = LC8_F17; - "|ay:AY3|lpm_ram_dq:90|altram:sram|segment0_0" : LOCATION = EAB_E; - "|ay:AY3|lpm_ram_dq:90|altram:sram|segment0_1" : LOCATION = EAB_E; - "|ay:AY3|lpm_ram_dq:90|altram:sram|segment0_2" : LOCATION = EAB_E; - "|ay:AY3|lpm_ram_dq:90|altram:sram|segment0_3" : LOCATION = EAB_E; - "|ay:AY3|lpm_ram_dq:90|altram:sram|segment0_4" : LOCATION = EAB_E; - "|ay:AY3|lpm_ram_dq:90|altram:sram|segment0_5" : LOCATION = EAB_E; - "|ay:AY3|lpm_ram_dq:90|altram:sram|segment0_6" : LOCATION = EAB_E; - "|ay:AY3|lpm_ram_dq:90|altram:sram|segment0_7" : LOCATION = EAB_E; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_0" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_1" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_2" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_3" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_4" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_5" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_6" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_7" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_8" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_9" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_10" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_11" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_12" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_13" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_14" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_15" : LOCATION = EAB_C; - "|kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_0" : LOCATION = EAB_B; - "|kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_1" : LOCATION = EAB_B; - "|kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_2" : LOCATION = EAB_B; - "|kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_3" : LOCATION = EAB_B; - "|kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_4" : LOCATION = EAB_B; - "|kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_5" : LOCATION = EAB_B; - "|kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_6" : LOCATION = EAB_B; - "|kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_7" : LOCATION = EAB_B; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_5" : LOCATION = EAB_A; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_6" : LOCATION = EAB_A; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_7" : LOCATION = EAB_A; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_8" : LOCATION = EAB_A; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_9" : LOCATION = EAB_A; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_10" : LOCATION = EAB_A; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_11" : LOCATION = EAB_A; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_12" : LOCATION = EAB_A; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_13" : LOCATION = EAB_A; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_14" : LOCATION = EAB_A; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_15" : LOCATION = EAB_A; - |V_WRX2 : LOCATION = LC1_F19; - "|video2:SVIDEO|V_WR_2" : LOCATION = LC8_F19; - "|video2:SVIDEO|V_WR_3" : LOCATION = LC8_F14; - "|dcp:DECODE|:285" : LOCATION = LC2_A32; - |RASX_0 : LOCATION = LC2_A35; - |RASX_1 : LOCATION = LC2_A34; - |XA3 : BIDIR_PIN = 17; - |XA1 : BIDIR_PIN = 9; - |XA2 : BIDIR_PIN = 200; - |XA0 : BIDIR_PIN = 180; - |VD30 : BIDIR_PIN = 114; - |VD31 : BIDIR_PIN = 136; - |VD32 : BIDIR_PIN = 144; - |VD33 : BIDIR_PIN = 148; - |VD34 : BIDIR_PIN = 149; - |VD35 : BIDIR_PIN = 143; - |VD36 : BIDIR_PIN = 139; - |VD37 : BIDIR_PIN = 128; - |VD20 : BIDIR_PIN = 150; - |VD21 : BIDIR_PIN = 115; - |VD22 : BIDIR_PIN = 135; - |VD23 : BIDIR_PIN = 140; - |VD24 : BIDIR_PIN = 141; - |VD25 : BIDIR_PIN = 147; - |VD26 : BIDIR_PIN = 142; - |VD27 : BIDIR_PIN = 131; - |VD10 : BIDIR_PIN = 104; - |VD11 : BIDIR_PIN = 111; - |VD12 : BIDIR_PIN = 120; - |VD13 : BIDIR_PIN = 127; - |VD14 : BIDIR_PIN = 132; - |VD15 : BIDIR_PIN = 134; - |VD16 : BIDIR_PIN = 133; - |VD17 : BIDIR_PIN = 122; - |VD00 : BIDIR_PIN = 103; - |VD01 : BIDIR_PIN = 113; - |VD02 : BIDIR_PIN = 116; - |VD03 : BIDIR_PIN = 121; - |VD04 : BIDIR_PIN = 126; - |VD05 : BIDIR_PIN = 125; - |VD06 : BIDIR_PIN = 119; - |VD07 : BIDIR_PIN = 112; - |/RESET : BIDIR_PIN = 19; - |MD15 : BIDIR_PIN = 179; - |MD14 : BIDIR_PIN = 187; - |MD12 : BIDIR_PIN = 192; - |MD11 : BIDIR_PIN = 198; - |MD10 : BIDIR_PIN = 204; - |MD9 : BIDIR_PIN = 208; - |MD8 : BIDIR_PIN = 8; - |MD7 : BIDIR_PIN = 161; - |MD6 : BIDIR_PIN = 162; - |MD5 : BIDIR_PIN = 163; - |MD4 : BIDIR_PIN = 164; - |MD3 : BIDIR_PIN = 186; - |MD2 : BIDIR_PIN = 190; - |MD1 : BIDIR_PIN = 193; - |MD0 : BIDIR_PIN = 196; - |D7 : BIDIR_PIN = 61; - |D6 : BIDIR_PIN = 60; - |D5 : BIDIR_PIN = 58; - |D4 : BIDIR_PIN = 57; - |D3 : BIDIR_PIN = 56; - |D2 : BIDIR_PIN = 55; - |D1 : BIDIR_PIN = 54; - |D0 : BIDIR_PIN = 53; - |XACS : OUTPUT_PIN = 169; - |WR_DWG : OUTPUT_PIN = 11; - |WR_COL : OUTPUT_PIN = 157; - |WR_AWG : OUTPUT_PIN = 176; - |/WE : OUTPUT_PIN = 16; - |V_WR3 : OUTPUT_PIN = 88; - |V_WR2 : OUTPUT_PIN = 75; - |V_WR1 : OUTPUT_PIN = 85; - |V_WR0 : OUTPUT_PIN = 83; - |V_CS0 : OUTPUT_PIN = 101; - |V_CS1 : OUTPUT_PIN = 70; - |VA15 : OUTPUT_PIN = 71; - |VA14 : OUTPUT_PIN = 73; - |VA13 : OUTPUT_PIN = 87; - |VA12 : OUTPUT_PIN = 74; - |VA11 : OUTPUT_PIN = 95; - |VA10 : OUTPUT_PIN = 99; - |VA9 : OUTPUT_PIN = 93; - |VA4 : OUTPUT_PIN = 94; - |VA5 : OUTPUT_PIN = 92; - |VA8 : OUTPUT_PIN = 90; - |VA7 : OUTPUT_PIN = 86; - |VA6 : OUTPUT_PIN = 89; - |VA3 : OUTPUT_PIN = 96; - |VA2 : OUTPUT_PIN = 97; - |VA1 : OUTPUT_PIN = 100; - |VA0 : OUTPUT_PIN = 102; - |SXA : OUTPUT_PIN = 7; - |RDXA : OUTPUT_PIN = 173; - |RD_KMPS : OUTPUT_PIN = 10; - |RA17 : OUTPUT_PIN = 67; - |RA16 : OUTPUT_PIN = 68; - |RA15 : OUTPUT_PIN = 69; - |RA14 : OUTPUT_PIN = 65; - |RAS_1 : OUTPUT_PIN = 205; - |RAS_0 : OUTPUT_PIN = 207; - |MA14 : OUTPUT_PIN = 191; - |MA13 : OUTPUT_PIN = 195; - |MA12 : OUTPUT_PIN = 206; - |MA11 : OUTPUT_PIN = 199; - |MA10 : OUTPUT_PIN = 177; - |MA9 : OUTPUT_PIN = 203; - |MA8 : OUTPUT_PIN = 202; - |MA7 : OUTPUT_PIN = 197; - |MA6 : OUTPUT_PIN = 175; - |MA5 : OUTPUT_PIN = 174; - |MA4 : OUTPUT_PIN = 172; - |MA3 : OUTPUT_PIN = 170; - |MA2 : OUTPUT_PIN = 168; - |MA1 : OUTPUT_PIN = 167; - |MA0 : OUTPUT_PIN = 166; - |DAC_WS : OUTPUT_PIN = 159; - |DAC_DATA : OUTPUT_PIN = 158; - |DAC_BCK : OUTPUT_PIN = 160; - |CS_CASH : OUTPUT_PIN = 64; - |CS_ROM : OUTPUT_PIN = 63; - |CLKZ1 : OUTPUT_PIN = 62; - |CAS_3 : OUTPUT_PIN = 15; - |CAS_2 : OUTPUT_PIN = 13; - |CAS_1 : OUTPUT_PIN = 14; - |CAS_0 : OUTPUT_PIN = 12; - |/WAIT : BIDIR_PIN = 18; - |/RF : INPUT_PIN = 25; - |/M1 : INPUT_PIN = 24; - |/WR : INPUT_PIN = 79; - |TG42 : INPUT_PIN = 183; - |/RD : INPUT_PIN = 80; - |/IO : INPUT_PIN = 78; - |/MR : INPUT_PIN = 184; - |/HALT : INPUT_PIN = 182; - |A15 : INPUT_PIN = 47; - |A14 : INPUT_PIN = 46; - |A13 : INPUT_PIN = 45; - |A12 : INPUT_PIN = 44; - |A11 : INPUT_PIN = 41; - |A10 : INPUT_PIN = 40; - |A9 : INPUT_PIN = 39; - |A8 : INPUT_PIN = 38; - |A7 : INPUT_PIN = 37; - |A6 : INPUT_PIN = 36; - |A5 : INPUT_PIN = 31; - |A4 : INPUT_PIN = 30; - |A3 : INPUT_PIN = 29; - |A2 : INPUT_PIN = 28; - |A1 : INPUT_PIN = 27; - |A0 : INPUT_PIN = 26; - |MD13 : BIDIR_PIN = 189; -END; - -DEFAULT_DEVICES -BEGIN - AUTO_DEVICE = EP1K100FC484-1; - AUTO_DEVICE = EP1K100FC256-1; - AUTO_DEVICE = EP1K100QC208-1; - AUTO_DEVICE = EP1K50FC484-1; - AUTO_DEVICE = EP1K50FC256-1; - AUTO_DEVICE = EP1K50QC208-1; - AUTO_DEVICE = EP1K50TC144-1; - AUTO_DEVICE = EP1K30FC256-1; - AUTO_DEVICE = EP1K30QC208-1; - AUTO_DEVICE = EP1K30TC144-1; - ASK_BEFORE_ADDING_EXTRA_DEVICES = ON; -END; - -TIMING_POINT -BEGIN - DEVICE_FOR_TIMING_SYNTHESIS = EP1K30QC208-3; - FREQUENCY = 100MHz; - MAINTAIN_STABLE_SYNTHESIS = OFF; - CUT_ALL_CLEAR_PRESET = ON; - CUT_ALL_BIDIR = ON; -END; - -IGNORED_ASSIGNMENTS -BEGIN - FIT_IGNORE_TIMING = OFF; - DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF; - IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF; - IGNORE_DEVICE_ASSIGNMENTS = OFF; - IGNORE_LC_ASSIGNMENTS = OFF; - IGNORE_PIN_ASSIGNMENTS = OFF; - IGNORE_CHIP_ASSIGNMENTS = OFF; - IGNORE_TIMING_ASSIGNMENTS = OFF; - IGNORE_LOGIC_OPTION_ASSIGNMENTS = OFF; - IGNORE_CLIQUE_ASSIGNMENTS = OFF; -END; - -LOGIC_OPTIONS -BEGIN - |/wait : SLOW_SLEW_RATE = ON; - |wr_dwg : SLOW_SLEW_RATE = ON; - |wr_dwg : INCREASE_INPUT_DELAY = ON; - |wr_dwg : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |RDXA : FAST_IO = ON; - |SXA : FAST_IO = ON; - |VD00 : INCREASE_INPUT_DELAY = ON; - |VD01 : INCREASE_INPUT_DELAY = ON; - |VD02 : INCREASE_INPUT_DELAY = ON; - |VD03 : INCREASE_INPUT_DELAY = ON; - |VD04 : INCREASE_INPUT_DELAY = ON; - |VD05 : INCREASE_INPUT_DELAY = ON; - |VD06 : INCREASE_INPUT_DELAY = ON; - |VD07 : INCREASE_INPUT_DELAY = ON; - |VD10 : INCREASE_INPUT_DELAY = ON; - |VD11 : INCREASE_INPUT_DELAY = ON; - |VD12 : INCREASE_INPUT_DELAY = ON; - |VD13 : INCREASE_INPUT_DELAY = ON; - |VD14 : INCREASE_INPUT_DELAY = ON; - |VD15 : INCREASE_INPUT_DELAY = ON; - |VD16 : INCREASE_INPUT_DELAY = ON; - |VD17 : INCREASE_INPUT_DELAY = ON; - |VD20 : INCREASE_INPUT_DELAY = ON; - |VD21 : INCREASE_INPUT_DELAY = ON; - |VD22 : INCREASE_INPUT_DELAY = ON; - |VD23 : INCREASE_INPUT_DELAY = ON; - |VD24 : INCREASE_INPUT_DELAY = ON; - |VD25 : INCREASE_INPUT_DELAY = ON; - |VD26 : INCREASE_INPUT_DELAY = ON; - |VD27 : INCREASE_INPUT_DELAY = ON; - |VD30 : INCREASE_INPUT_DELAY = ON; - |VD31 : INCREASE_INPUT_DELAY = ON; - |VD32 : INCREASE_INPUT_DELAY = ON; - |VD33 : INCREASE_INPUT_DELAY = ON; - |VD34 : INCREASE_INPUT_DELAY = ON; - |VD35 : INCREASE_INPUT_DELAY = ON; - |VD36 : INCREASE_INPUT_DELAY = ON; - |VD37 : INCREASE_INPUT_DELAY = ON; - |RAS_0 : INCREASE_INPUT_DELAY = ON; - |RAS_1 : INCREASE_INPUT_DELAY = ON; - |CAS_0 : INCREASE_INPUT_DELAY = ON; - |CAS_0 : SLOW_SLEW_RATE = ON; - |CAS_1 : INCREASE_INPUT_DELAY = ON; - |CAS_1 : SLOW_SLEW_RATE = ON; - |CAS_2 : INCREASE_INPUT_DELAY = ON; - |CAS_2 : SLOW_SLEW_RATE = ON; - |CAS_3 : INCREASE_INPUT_DELAY = ON; - |CAS_3 : SLOW_SLEW_RATE = ON; - |RAS_0 : SLOW_SLEW_RATE = ON; - |RAS_1 : SLOW_SLEW_RATE = ON; - |XACS : INCREASE_INPUT_DELAY = ON; - |/wr : INCREASE_INPUT_DELAY = ON; - |/WE : INCREASE_INPUT_DELAY = ON; - |/wait : INCREASE_INPUT_DELAY = ON; - |VA0 : INCREASE_INPUT_DELAY = ON; - |VA1 : INCREASE_INPUT_DELAY = ON; - |VA2 : INCREASE_INPUT_DELAY = ON; - |VA3 : INCREASE_INPUT_DELAY = ON; - |VA4 : INCREASE_INPUT_DELAY = ON; - |VA5 : INCREASE_INPUT_DELAY = ON; - |VA6 : INCREASE_INPUT_DELAY = ON; - |VA7 : INCREASE_INPUT_DELAY = ON; - |VA8 : INCREASE_INPUT_DELAY = ON; - |VA9 : INCREASE_INPUT_DELAY = ON; - |VA10 : INCREASE_INPUT_DELAY = ON; - |VA11 : INCREASE_INPUT_DELAY = ON; - |VA12 : INCREASE_INPUT_DELAY = ON; - |VA13 : INCREASE_INPUT_DELAY = ON; - |VA14 : INCREASE_INPUT_DELAY = ON; - |VA15 : INCREASE_INPUT_DELAY = ON; - |/rf : INCREASE_INPUT_DELAY = ON; - |/reset : INCREASE_INPUT_DELAY = ON; - |/rd : INCREASE_INPUT_DELAY = ON; - |ra14 : INCREASE_INPUT_DELAY = ON; - |ra14 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ra15 : INCREASE_INPUT_DELAY = ON; - |ra15 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ra16 : INCREASE_INPUT_DELAY = ON; - |ra16 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ra17 : INCREASE_INPUT_DELAY = ON; - |ra17 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |/mr : INCREASE_INPUT_DELAY = ON; - |/m1 : INCREASE_INPUT_DELAY = ON; - |ma12 : INCREASE_INPUT_DELAY = ON; - |ma13 : INCREASE_INPUT_DELAY = ON; - |ma14 : INCREASE_INPUT_DELAY = ON; - |ma0 : INCREASE_INPUT_DELAY = ON; - |ma1 : INCREASE_INPUT_DELAY = ON; - |ma2 : INCREASE_INPUT_DELAY = ON; - |ma3 : INCREASE_INPUT_DELAY = ON; - |ma4 : INCREASE_INPUT_DELAY = ON; - |ma5 : INCREASE_INPUT_DELAY = ON; - |ma6 : INCREASE_INPUT_DELAY = ON; - |ma7 : INCREASE_INPUT_DELAY = ON; - |ma8 : INCREASE_INPUT_DELAY = ON; - |ma9 : INCREASE_INPUT_DELAY = ON; - |ma10 : INCREASE_INPUT_DELAY = ON; - |ma11 : INCREASE_INPUT_DELAY = ON; - |/io : INCREASE_INPUT_DELAY = ON; - |/HALT : INCREASE_INPUT_DELAY = ON; - |d0 : INCREASE_INPUT_DELAY = ON; - |d1 : INCREASE_INPUT_DELAY = ON; - |d2 : INCREASE_INPUT_DELAY = ON; - |d3 : INCREASE_INPUT_DELAY = ON; - |d4 : INCREASE_INPUT_DELAY = ON; - |d5 : INCREASE_INPUT_DELAY = ON; - |d6 : INCREASE_INPUT_DELAY = ON; - |d7 : INCREASE_INPUT_DELAY = ON; - |CS_CASH : PCI_IO = OFF; - |CS_CASH : INCREASE_INPUT_DELAY = ON; - |CS_CASH : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |cs_rom : PCI_IO = OFF; - |cs_rom : INCREASE_INPUT_DELAY = ON; - |cs_rom : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |a0 : INCREASE_INPUT_DELAY = ON; - |a1 : INCREASE_INPUT_DELAY = ON; - |a2 : INCREASE_INPUT_DELAY = ON; - |a3 : INCREASE_INPUT_DELAY = ON; - |a4 : INCREASE_INPUT_DELAY = ON; - |a5 : INCREASE_INPUT_DELAY = ON; - |a6 : INCREASE_INPUT_DELAY = ON; - |a7 : INCREASE_INPUT_DELAY = ON; - |A8 : INCREASE_INPUT_DELAY = ON; - |a9 : INCREASE_INPUT_DELAY = ON; - |A10 : INCREASE_INPUT_DELAY = ON; - |a11 : INCREASE_INPUT_DELAY = ON; - |A12 : INCREASE_INPUT_DELAY = ON; - |A13 : INCREASE_INPUT_DELAY = ON; - |A14 : INCREASE_INPUT_DELAY = ON; - |A15 : INCREASE_INPUT_DELAY = ON; - |md0 : INCREASE_INPUT_DELAY = ON; - |md1 : INCREASE_INPUT_DELAY = ON; - |md2 : INCREASE_INPUT_DELAY = ON; - |md3 : INCREASE_INPUT_DELAY = ON; - |md4 : INCREASE_INPUT_DELAY = ON; - |md5 : INCREASE_INPUT_DELAY = ON; - |md6 : INCREASE_INPUT_DELAY = ON; - |md7 : INCREASE_INPUT_DELAY = ON; - |md8 : INCREASE_INPUT_DELAY = ON; - |md9 : INCREASE_INPUT_DELAY = ON; - |md10 : INCREASE_INPUT_DELAY = ON; - |md11 : INCREASE_INPUT_DELAY = ON; - |md12 : INCREASE_INPUT_DELAY = ON; - |md13 : INCREASE_INPUT_DELAY = ON; - |md14 : INCREASE_INPUT_DELAY = ON; - |md15 : INCREASE_INPUT_DELAY = ON; - |wr_awg : SLOW_SLEW_RATE = OFF; - |XA0 : INCREASE_INPUT_DELAY = ON; - |XA1 : INCREASE_INPUT_DELAY = ON; - |XA2 : INCREASE_INPUT_DELAY = ON; - |XA3 : INCREASE_INPUT_DELAY = ON; - |ma0 : SLOW_SLEW_RATE = ON; - |ma1 : SLOW_SLEW_RATE = ON; - |ma2 : SLOW_SLEW_RATE = ON; - |ma3 : SLOW_SLEW_RATE = ON; - |ma4 : SLOW_SLEW_RATE = ON; - |ma5 : SLOW_SLEW_RATE = ON; - |ma6 : SLOW_SLEW_RATE = ON; - |ma7 : SLOW_SLEW_RATE = ON; - |ma8 : SLOW_SLEW_RATE = ON; - |ma9 : SLOW_SLEW_RATE = ON; - |ma10 : SLOW_SLEW_RATE = ON; - |ma11 : SLOW_SLEW_RATE = ON; - |VD00 : SLOW_SLEW_RATE = OFF; - |VD01 : SLOW_SLEW_RATE = OFF; - |VD02 : SLOW_SLEW_RATE = OFF; - |VD03 : SLOW_SLEW_RATE = OFF; - |VD04 : SLOW_SLEW_RATE = OFF; - |VD05 : SLOW_SLEW_RATE = OFF; - |VD06 : SLOW_SLEW_RATE = OFF; - |VD07 : SLOW_SLEW_RATE = OFF; - |VD10 : SLOW_SLEW_RATE = OFF; - |VD11 : SLOW_SLEW_RATE = OFF; - |VD12 : SLOW_SLEW_RATE = OFF; - |VD13 : SLOW_SLEW_RATE = OFF; - |VD14 : SLOW_SLEW_RATE = OFF; - |VD15 : SLOW_SLEW_RATE = OFF; - |VD16 : SLOW_SLEW_RATE = OFF; - |VD17 : SLOW_SLEW_RATE = OFF; - |VD20 : SLOW_SLEW_RATE = OFF; - |VD21 : SLOW_SLEW_RATE = OFF; - |VD22 : SLOW_SLEW_RATE = OFF; - |VD23 : SLOW_SLEW_RATE = OFF; - |VD24 : SLOW_SLEW_RATE = OFF; - |VD25 : SLOW_SLEW_RATE = OFF; - |VD26 : SLOW_SLEW_RATE = OFF; - |VD27 : SLOW_SLEW_RATE = OFF; - |VD30 : SLOW_SLEW_RATE = OFF; - |VD31 : SLOW_SLEW_RATE = OFF; - |VD32 : SLOW_SLEW_RATE = OFF; - |VD33 : SLOW_SLEW_RATE = OFF; - |VD34 : SLOW_SLEW_RATE = OFF; - |VD35 : SLOW_SLEW_RATE = OFF; - |VD36 : SLOW_SLEW_RATE = OFF; - |VD37 : SLOW_SLEW_RATE = OFF; - |VA0 : PCI_IO = OFF; - |VA1 : PCI_IO = OFF; - |VA2 : PCI_IO = OFF; - |VA3 : PCI_IO = OFF; - |VA4 : PCI_IO = OFF; - |VA6 : PCI_IO = OFF; - |VA5 : PCI_IO = OFF; - |VA7 : PCI_IO = OFF; - |VA8 : PCI_IO = OFF; - |VA9 : PCI_IO = OFF; - |VA10 : PCI_IO = OFF; - |VA11 : PCI_IO = OFF; - |VA12 : PCI_IO = OFF; - |VA13 : PCI_IO = OFF; - |VA14 : PCI_IO = OFF; - |VA15 : PCI_IO = OFF; - |VD00 : PCI_IO = OFF; - |VD01 : PCI_IO = OFF; - |VD02 : PCI_IO = OFF; - |VD03 : PCI_IO = OFF; - |VD04 : PCI_IO = OFF; - |VD05 : PCI_IO = OFF; - |VD06 : PCI_IO = OFF; - |VD07 : PCI_IO = OFF; - |VD10 : PCI_IO = OFF; - |VD11 : PCI_IO = OFF; - |VD12 : PCI_IO = OFF; - |VD13 : PCI_IO = OFF; - |VD14 : PCI_IO = OFF; - |VD15 : PCI_IO = OFF; - |VD16 : PCI_IO = OFF; - |VD17 : PCI_IO = OFF; - |VD20 : PCI_IO = OFF; - |VD21 : PCI_IO = OFF; - |VD22 : PCI_IO = OFF; - |VD23 : PCI_IO = OFF; - |VD24 : PCI_IO = OFF; - |VD25 : PCI_IO = OFF; - |VD26 : PCI_IO = OFF; - |VD27 : PCI_IO = OFF; - |VD30 : PCI_IO = OFF; - |VD31 : PCI_IO = OFF; - |VD32 : PCI_IO = OFF; - |VD33 : PCI_IO = OFF; - |VD34 : PCI_IO = OFF; - |VD35 : PCI_IO = OFF; - |VD36 : PCI_IO = OFF; - |VD37 : PCI_IO = OFF; - |WR_COL : SLOW_SLEW_RATE = ON; - |VA0 : SLOW_SLEW_RATE = ON; - |VA1 : SLOW_SLEW_RATE = ON; - |VA2 : SLOW_SLEW_RATE = ON; - |VA3 : SLOW_SLEW_RATE = ON; - |VA4 : SLOW_SLEW_RATE = ON; - |VA5 : SLOW_SLEW_RATE = ON; - |VA6 : SLOW_SLEW_RATE = ON; - |VA7 : SLOW_SLEW_RATE = ON; - |VA8 : SLOW_SLEW_RATE = ON; - |VA9 : SLOW_SLEW_RATE = ON; - |VA10 : SLOW_SLEW_RATE = ON; - |VA11 : SLOW_SLEW_RATE = ON; - |VA12 : SLOW_SLEW_RATE = ON; - |VA13 : SLOW_SLEW_RATE = ON; - |VA14 : SLOW_SLEW_RATE = ON; - |VA15 : SLOW_SLEW_RATE = ON; - |V_WR0 : SLOW_SLEW_RATE = OFF; - |V_WR1 : SLOW_SLEW_RATE = OFF; - |V_WR2 : SLOW_SLEW_RATE = OFF; - |V_WR3 : SLOW_SLEW_RATE = OFF; - |XA0 : SLOW_SLEW_RATE = ON; - |XA1 : SLOW_SLEW_RATE = ON; - |XA2 : SLOW_SLEW_RATE = ON; - |XA3 : SLOW_SLEW_RATE = ON; - |XACS : SLOW_SLEW_RATE = ON; - |/wait : PCI_IO = OFF; - |SXA : SLOW_SLEW_RATE = ON; - |/rf : PCI_IO = OFF; - |/reset : PCI_IO = OFF; - |RDXA : SLOW_SLEW_RATE = ON; - |/rd : PCI_IO = OFF; - |/m1 : PCI_IO = OFF; - |/mr : PCI_IO = OFF; - |/io : PCI_IO = OFF; - |/HALT : PCI_IO = OFF; - |/WE : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |/WE : SLOW_SLEW_RATE = ON; - |RAS_0 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |RAS_1 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |CAS_0 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |CAS_1 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |CAS_2 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |CAS_3 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma0 : PCI_IO = OFF; - |ma1 : FAST_IO = ON; - |ma2 : FAST_IO = ON; - |ma3 : FAST_IO = ON; - |ma4 : FAST_IO = ON; - |ma5 : FAST_IO = ON; - |ma6 : FAST_IO = ON; - |ma7 : FAST_IO = ON; - |ma8 : FAST_IO = ON; - |ma9 : FAST_IO = ON; - |ma10 : FAST_IO = ON; - |ma11 : FAST_IO = ON; - |ma1 : PCI_IO = OFF; - |ma2 : PCI_IO = OFF; - |ma3 : PCI_IO = OFF; - |ma4 : PCI_IO = OFF; - |ma5 : PCI_IO = OFF; - |ma6 : PCI_IO = OFF; - |ma7 : PCI_IO = OFF; - |ma8 : PCI_IO = OFF; - |ma9 : PCI_IO = OFF; - |ma10 : PCI_IO = OFF; - |ma11 : PCI_IO = OFF; - |ma12 : PCI_IO = OFF; - |ma12 : SLOW_SLEW_RATE = ON; - |ma13 : PCI_IO = OFF; - |ma13 : SLOW_SLEW_RATE = ON; - |ma14 : PCI_IO = OFF; - |ma14 : SLOW_SLEW_RATE = ON; - |SXA : PCI_IO = OFF; - |RDXA : PCI_IO = OFF; - |RDXA : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |/mr : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |/m1 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |/rd : SLOW_SLEW_RATE = ON; - |wr_awg : PCI_IO = OFF; - |wr_awg : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ra14 : PCI_IO = OFF; - |ra14 : SLOW_SLEW_RATE = ON; - |ra15 : PCI_IO = OFF; - |ra15 : SLOW_SLEW_RATE = ON; - |ra16 : PCI_IO = OFF; - |ra16 : SLOW_SLEW_RATE = ON; - |ra17 : PCI_IO = OFF; - |ra17 : SLOW_SLEW_RATE = ON; - |CS_CASH : SLOW_SLEW_RATE = ON; - |cs_rom : SLOW_SLEW_RATE = ON; - |/WE : PCI_IO = OFF; - |RAS_0 : PCI_IO = OFF; - |RAS_1 : PCI_IO = OFF; - |CAS_0 : PCI_IO = OFF; - |CAS_1 : PCI_IO = OFF; - |CAS_2 : PCI_IO = OFF; - |CAS_3 : PCI_IO = OFF; - |V_WR0 : PCI_IO = OFF; - |V_WR1 : PCI_IO = OFF; - |V_WR2 : PCI_IO = OFF; - |V_WR3 : PCI_IO = OFF; - |v_cs0 : PCI_IO = OFF; - |v_cs1 : PCI_IO = OFF; - |XACS : PCI_IO = OFF; - |/wr : PCI_IO = OFF; - |XA0 : PCI_IO = OFF; - |XA1 : PCI_IO = OFF; - |XA2 : PCI_IO = OFF; - |XA3 : PCI_IO = OFF; - |TG42 : PCI_IO = OFF; - |d0 : PCI_IO = OFF; - |d1 : PCI_IO = OFF; - |d2 : PCI_IO = OFF; - |d3 : PCI_IO = OFF; - |d4 : PCI_IO = OFF; - |d5 : PCI_IO = OFF; - |d6 : PCI_IO = OFF; - |d7 : PCI_IO = OFF; - |md0 : PCI_IO = OFF; - |md1 : PCI_IO = OFF; - |md2 : PCI_IO = OFF; - |md3 : PCI_IO = OFF; - |md4 : PCI_IO = OFF; - |md5 : PCI_IO = OFF; - |md6 : PCI_IO = OFF; - |md7 : PCI_IO = OFF; - |md8 : PCI_IO = OFF; - |md9 : PCI_IO = OFF; - |md10 : PCI_IO = OFF; - |md11 : PCI_IO = OFF; - |md12 : PCI_IO = OFF; - |md13 : PCI_IO = OFF; - |md14 : PCI_IO = OFF; - |md15 : PCI_IO = OFF; - |a0 : PCI_IO = OFF; - |a1 : PCI_IO = OFF; - |a2 : PCI_IO = OFF; - |a3 : PCI_IO = OFF; - |a4 : PCI_IO = OFF; - |a5 : PCI_IO = OFF; - |a6 : PCI_IO = OFF; - |A8 : PCI_IO = OFF; - |a7 : PCI_IO = OFF; - |A10 : PCI_IO = OFF; - |a9 : PCI_IO = OFF; - |a11 : PCI_IO = OFF; - |A12 : PCI_IO = OFF; - |A13 : PCI_IO = OFF; - |A14 : PCI_IO = OFF; - |A15 : PCI_IO = OFF; - |/reset : SLOW_SLEW_RATE = ON; - |/rf : SLOW_SLEW_RATE = ON; - |a0 : SLOW_SLEW_RATE = ON; - |a1 : SLOW_SLEW_RATE = ON; - |a2 : SLOW_SLEW_RATE = ON; - |a3 : SLOW_SLEW_RATE = ON; - |a4 : SLOW_SLEW_RATE = ON; - |a5 : SLOW_SLEW_RATE = ON; - |a6 : SLOW_SLEW_RATE = ON; - |a7 : SLOW_SLEW_RATE = ON; - |a8 : SLOW_SLEW_RATE = ON; - |a9 : SLOW_SLEW_RATE = ON; - |a10 : SLOW_SLEW_RATE = ON; - |a11 : SLOW_SLEW_RATE = ON; - |A12 : SLOW_SLEW_RATE = ON; - |A13 : SLOW_SLEW_RATE = ON; - |A14 : SLOW_SLEW_RATE = ON; - |A15 : SLOW_SLEW_RATE = ON; - |/mr : SLOW_SLEW_RATE = ON; - |/m1 : SLOW_SLEW_RATE = ON; - |/HALT : SLOW_SLEW_RATE = ON; - |/io : SLOW_SLEW_RATE = ON; - |d0 : SLOW_SLEW_RATE = ON; - |d1 : SLOW_SLEW_RATE = ON; - |d2 : SLOW_SLEW_RATE = ON; - |d3 : SLOW_SLEW_RATE = ON; - |d4 : SLOW_SLEW_RATE = ON; - |d5 : SLOW_SLEW_RATE = ON; - |d6 : SLOW_SLEW_RATE = ON; - |d7 : SLOW_SLEW_RATE = ON; - |DAC_BCK : SLOW_SLEW_RATE = ON; - |DAC_DATA : SLOW_SLEW_RATE = ON; - |DAC_WS : SLOW_SLEW_RATE = ON; - |WR_COL : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |WR_COL : FAST_IO = ON; - |v_cs0 : SLOW_SLEW_RATE = ON; - |v_cs1 : SLOW_SLEW_RATE = ON; - |ma0 : FAST_IO = ON; - |ma0 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma1 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma2 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma3 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma4 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma5 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma6 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma7 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma8 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma9 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma10 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma11 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma12 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma13 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma14 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md0 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md0 : SLOW_SLEW_RATE = ON; - |md1 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md1 : SLOW_SLEW_RATE = ON; - |md2 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md2 : SLOW_SLEW_RATE = ON; - |md3 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md3 : SLOW_SLEW_RATE = ON; - |md4 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md4 : SLOW_SLEW_RATE = ON; - |md5 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md5 : SLOW_SLEW_RATE = ON; - |md6 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md6 : SLOW_SLEW_RATE = ON; - |md7 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md7 : SLOW_SLEW_RATE = ON; - |md8 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md8 : SLOW_SLEW_RATE = ON; - |md9 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md9 : SLOW_SLEW_RATE = ON; - |md10 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md10 : SLOW_SLEW_RATE = ON; - |md11 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md11 : SLOW_SLEW_RATE = ON; - |md12 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md12 : SLOW_SLEW_RATE = ON; - |md13 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md13 : SLOW_SLEW_RATE = ON; - |md14 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md14 : SLOW_SLEW_RATE = ON; - |md15 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md15 : SLOW_SLEW_RATE = ON; - "|video2:SVIDEO|SVA12" : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON; - "|video2:SVIDEO|SVA11" : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON; - "|video2:SVIDEO|SVA10" : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON; - "|video2:SVIDEO|SVA0" : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON; - "|video2:SVIDEO|SVA1" : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON; - "|video2:SVIDEO|SVA2" : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON; - "|video2:SVIDEO|SVA3" : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON; - "|video2:SVIDEO|SVA4" : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON; - "|video2:SVIDEO|SVA5" : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON; - |v_cs0 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |v_cs1 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD00 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD01 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD02 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD03 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD04 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD05 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD06 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD07 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD10 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD11 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD12 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD13 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD14 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD15 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD16 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD17 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD20 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD21 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD22 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD23 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD24 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD25 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD26 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD27 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD30 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD31 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD32 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD33 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD34 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD35 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD36 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD37 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |CLKZ1 : SLOW_SLEW_RATE = OFF; - "|video2:SVIDEO|D_PIC00" : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - "|video2:SVIDEO|D_PIC01" : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - "|video2:SVIDEO|D_PIC02" : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - "|video2:SVIDEO|D_PIC03" : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - "|video2:SVIDEO|D_PIC04" : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - "|video2:SVIDEO|D_PIC05" : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - "|video2:SVIDEO|D_PIC06" : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - "|video2:SVIDEO|D_PIC07" : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA0 : FAST_IO = ON; - |VA1 : FAST_IO = ON; - |VA2 : FAST_IO = ON; - |VA3 : FAST_IO = ON; - |VA4 : FAST_IO = ON; - |VA5 : FAST_IO = ON; - |VA6 : FAST_IO = ON; - |VA7 : FAST_IO = ON; - |VA8 : FAST_IO = ON; - |VA9 : FAST_IO = ON; - |VA10 : FAST_IO = ON; - |VA11 : FAST_IO = ON; - |VA12 : FAST_IO = ON; - |VA13 : FAST_IO = ON; - |VA14 : FAST_IO = ON; - |VA15 : FAST_IO = ON; - |V_WR0 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |V_WR1 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |V_WR2 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |V_WR3 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA0 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA1 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA2 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA3 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA4 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA5 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA6 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA7 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA8 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA9 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA10 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA11 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA12 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA13 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA14 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA15 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; -END; - -GLOBAL_PROJECT_DEVICE_OPTIONS -BEGIN - MULTIVOLT_IO = ON; - FLEX10KA_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - RELEASE_CLEARS = ON; - AUTO_RESTART = ON; - MAX7000B_ENABLE_VREFB = OFF; - MAX7000B_ENABLE_VREFA = OFF; - MAX7000B_VCCIO_IOBANK2 = 3.3V; - MAX7000B_VCCIO_IOBANK1 = 3.3V; - CONFIG_EPROM_PULLUP_RESISTOR = ON; - CONFIG_EPROM_USER_CODE = FFFFFFFF; - FLEX_CONFIGURATION_EPROM = AUTO; - MAX7000AE_ENABLE_JTAG = ON; - MAX7000AE_USER_CODE = FFFFFFFF; - FLEX6000_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX10K_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX6000_ENABLE_JTAG = OFF; - CONFIG_SCHEME_FLEX_6000 = PASSIVE_SERIAL; - MAX7000S_ENABLE_JTAG = ON; - FLEX10K_ENABLE_LOCK_OUTPUT = OFF; - MAX7000S_USER_CODE = FFFF; - CONFIG_SCHEME_10K = PASSIVE_SERIAL; - FLEX10K_JTAG_USER_CODE = 7F; - ENABLE_INIT_DONE_OUTPUT = OFF; - ENABLE_CHIP_WIDE_OE = OFF; - ENABLE_CHIP_WIDE_RESET = OFF; - nCEO = UNRESERVED; - CLKUSR = UNRESERVED; - ADD17 = UNRESERVED; - ADD16 = UNRESERVED; - ADD15 = UNRESERVED; - ADD14 = UNRESERVED; - ADD13 = UNRESERVED; - ADD0_TO_ADD12 = UNRESERVED; - SDOUT = RESERVED_DRIVES_OUT; - RDCLK = UNRESERVED; - RDYnBUSY = UNRESERVED; - nWS_nRS_nCS_CS = UNRESERVED; - DATA1_TO_DATA7 = UNRESERVED; - DATA0 = RESERVED_TRI_STATED; - FLEX8000_ENABLE_JTAG = OFF; - CONFIG_SCHEME = ACTIVE_SERIAL; - DISABLE_TIME_OUT = OFF; - ENABLE_DCLK_OUTPUT = OFF; - USER_CLOCK = OFF; - SECURITY_BIT = OFF; - RESERVED_PINS_PERCENT = 0; - RESERVED_LCELLS_PERCENT = 0; -END; - -GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS -BEGIN - STYLE = FAST; - OPTIMIZE_FOR_SPEED = 5; - DEVICE_FAMILY = ACEX1K; - MULTI_LEVEL_SYNTHESIS_MAX9000 = ON; - AUTO_IMPLEMENT_IN_EAB = OFF; - AUTO_OPEN_DRAIN_PINS = ON; - ONE_HOT_STATE_MACHINE_ENCODING = OFF; - AUTO_REGISTER_PACKING = OFF; - AUTO_FAST_IO = OFF; - AUTO_GLOBAL_OE = ON; - AUTO_GLOBAL_PRESET = ON; - AUTO_GLOBAL_CLEAR = ON; - AUTO_GLOBAL_CLOCK = ON; - MULTI_LEVEL_SYNTHESIS_MAX5000_7000 = OFF; -END; - -COMPILER_PROCESSING_CONFIGURATION -BEGIN - SMART_RECOMPILE = OFF; - FITTER_SETTINGS = CUSTOM; - USE_QUARTUS_FITTER = OFF; - DESIGN_DOCTOR_RULES = CUSTOM; - RPT_FILE_LCELL_INTERCONNECT = OFF; - RPT_FILE_HIERARCHY = OFF; - DESIGN_DOCTOR = OFF; - PRESERVE_ALL_NODE_NAME_SYNONYMS = OFF; - GENERATE_AHDL_TDO_FILE = OFF; - RPT_FILE_USER_ASSIGNMENTS = ON; - RPT_FILE_EQUATIONS = ON; - LINKED_SNF_EXTRACTOR = OFF; - OPTIMIZE_TIMING_SNF = OFF; - TIMING_SNF_EXTRACTOR = ON; - FUNCTIONAL_SNF_EXTRACTOR = OFF; -END; - -COMPILER_INTERFACES_CONFIGURATION -BEGIN - NETLIST_OUTPUT_TIME_SCALE = 0.1ns; - EDIF_INPUT_SHOW_LMF_MAPPING_MESSAGES = OFF; - EDIF_BUS_DELIMITERS = []; - EDIF_FLATTEN_BUS = OFF; - EDIF_OUTPUT_FORCE_0NS_DELAYS = OFF; - EDIF_OUTPUT_INCLUDE_SPECIAL_PRIM = OFF; - EDIF_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - EDIF_OUTPUT_DELAY_CONSTRUCTS = EDO_FILE; - EDIF_OUTPUT_USE_EDC = OFF; - EDIF_INPUT_USE_LMF2 = OFF; - EDIF_INPUT_USE_LMF1 = OFF; - EDIF_OUTPUT_GND = GND; - EDIF_OUTPUT_VCC = VCC; - EDIF_INPUT_GND = GND; - EDIF_INPUT_VCC = VCC; - EDIF_OUTPUT_EDC_FILE = *.edc; - EDIF_INPUT_LMF2 = *.lmf; - EDIF_INPUT_LMF1 = *.lmf; - VHDL_GENERATE_CONFIGURATION_DECLARATION = OFF; - VHDL_OUTPUT_DELAY_CONSTRUCTS = VHO_FILE; - VERILOG_OUTPUT_DELAY_CONSTRUCTS = VO_FILE; - VHDL_FLATTEN_BUS = OFF; - VERILOG_FLATTEN_BUS = OFF; - EDIF_TRUNCATE_HIERARCHY_PATH = OFF; - VHDL_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - VHDL_WRITER_VERSION = VHDL87; - VHDL_READER_VERSION = VHDL87; - SYNOPSYS_MAPPING_EFFORT = MEDIUM; - SYNOPSYS_BOUNDARY_OPTIMIZATION = OFF; - SYNOPSYS_HIERARCHICAL_COMPILATION = ON; - SYNOPSYS_DESIGNWARE = OFF; - SYNOPSYS_COMPILER = DESIGN; - USE_SYNOPSYS_SYNTHESIS = OFF; - VHDL_NETLIST_WRITER = OFF; - VERILOG_NETLIST_WRITER = OFF; - XNF_GENERATE_AHDL_TDX_FILE = ON; - XNF_TRANSLATE_INTERNAL_NODE_NAMES = ON; - XNF_EMULATE_TRI_STATE_BUSES = INTERNAL_LOGIC; - EDIF_OUTPUT_VERSION = 200; - EDIF_NETLIST_WRITER = OFF; -END; - -CUSTOM_DESIGN_DOCTOR_RULES -BEGIN - EXPANDER_NETWORKS = OFF; - ASYNCHRONOUS_INPUTS = OFF; - PRESET_CLEAR_NETWORKS = OFF; - MULTI_CLOCK_NETWORKS = OFF; - MASTER_RESET = OFF; - RACE_CONDITIONS = ON; - DELAY_CHAINS = ON; - STATIC_HAZARDS_AFTER_SYNTHESIS = OFF; - STATIC_HAZARDS_BEFORE_SYNTHESIS = ON; - MULTI_LEVEL_CLOCKS = ON; - GATED_CLOCKS = ON; - RIPPLE_CLOCKS = ON; -END; - -SIMULATOR_CONFIGURATION -BEGIN - END_TIME = 12.0us; - BIDIR_PIN = STRONG; - START_TIME = 0.0ns; - GLITCH_TIME = 0.0ns; - GLITCH = OFF; - OSCILLATION_TIME = 0.0ns; - OSCILLATION = OFF; - CHECK_OUTPUTS = OFF; - SETUP_HOLD = OFF; - USE_DEVICE = OFF; -END; - -TIMING_ANALYZER_CONFIGURATION -BEGIN - ANALYSIS_MODE = REGISTERED_PERFORMANCE; - CUT_OFF_RAM_REGISTERED_WE_PATHS = OFF; - LIST_PATH_FREQUENCY = 10MHz; - LIST_PATH_COUNT = 10; - REGISTERED_PERFORMANCE_OPTIONS = NUMBER_OF_PATHS; - INCLUDE_PATHS_LESS_THAN_VALUE = 214.7483647ms; - INCLUDE_PATHS_LESS_THAN = OFF; - INCLUDE_PATHS_GREATER_THAN_VALUE = 0.0ns; - INCLUDE_PATHS_GREATER_THAN = OFF; - DELAY_MATRIX_OPTIONS = SHOW_ALL_PATHS; - CELL_WIDTH = 18; - LIST_ONLY_LONGEST_PATH = ON; - CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; - CUT_OFF_IO_PIN_FEEDBACK = ON; - AUTO_RECALCULATE = OFF; -END; - -OTHER_CONFIGURATION -BEGIN - LAST_MAXPLUS2_VERSION = 10.0; - CARRY_OUT_PINS_LCELL_INSERT = ON; - ROW_PINS_LCELL_INSERT = ON; - NORMAL_LCELL_INSERT = ON; - EXPLICIT_FAMILY = 1; - FLEX_10K_52_COLUMNS = 40; - DEFAULT_9K_EXP_PER_LCELL = 1/2; - LOCAL_INTERCONNECT_PER_LAB_PERCENT = 100; - LCELLS_PER_ROW_PERCENT = 100; - FAN_IN_PER_LCELL_PERCENT = 100; - EXP_PER_LCELL_PERCENT = 100; - ROW_PINS_PERCENT = 50; - ORIGINAL_MAXPLUS2_VERSION = 9.6; - COMPILER_DATA = "1,1,0,1,0,0,0,1,1,1,1,0,1,1,1"; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.FLEX8000 -BEGIN - CARRY_CHAIN = AUTO; - CASCADE_CHAIN = AUTO; - SLOW_SLEW_RATE = ON; - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CASCADE_CHAIN_LENGTH = 2; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = ON; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.FLEX8000 -BEGIN - USE_LPM_FOR_AHDL_OPERATORS = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - IGNORE_SOFT_BUFFERS = ON; - REGISTER_OPTIMIZATION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SLOW_SLEW_RATE = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - NOT_GATE_PUSH_BACK = ON; - SOFT_BUFFER_INSERTION = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = AUTO; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = AUTO; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = MANUAL; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = MANUAL; -END; - diff --git a/src/altera/acex/k30/SP2_ACEX.TDF b/src/altera/acex/k30/SP2_ACEX.TDF deleted file mode 100644 index dfa3d6e..0000000 --- a/src/altera/acex/k30/SP2_ACEX.TDF +++ /dev/null @@ -1,1227 +0,0 @@ - - TITLE "Main"; - -PARAMETERS - ( - UPDATE = 1, -- 1 for UPDATE sheet - MODE = "SPRINTER", -- or MODE = "SPECTRUM" - NMI_ON = "OFF", -- "ON" - for use NMI - SCREEN_OFF = "NOT_USE" -- "USE" - for use screen on/off - ); - -INCLUDE "lpm_ram_dp"; -INCLUDE "kbd"; ---INCLUDE "video"; -INCLUDE "video2"; - -INCLUDE "dcp"; ---INCLUDE "dcp2"; - -INCLUDE "acceler"; -INCLUDE "ay"; -INCLUDE "mouse"; - -SUBDESIGN SP2_ACEX - ( - TG42 : INPUT; - CLKZ1 : OUTPUT; - - /WAIT : BIDIR; - /RESET : BIDIR; - /M1 : INPUT; - /RF : INPUT; - /IO : INPUT; - /WR : INPUT; - /RD : INPUT; - /HALT : INPUT; - /MR : INPUT; - A[15..0] : INPUT; - D[7..0] : BIDIR; - - CS_ROM : OUTPUT; - CS_CASH : OUTPUT; - RA[17..14] : OUTPUT; - - V_CS[1..0] : OUTPUT; - VA[15..0] : OUTPUT; - V_WR[3..0] : OUTPUT; - VD3[7..0] : BIDIR; - VD2[7..0] : BIDIR; - VD1[7..0] : BIDIR; - VD0[7..0] : BIDIR; - - WR_COL : OUTPUT; - - DAC_DATA : OUTPUT; - DAC_WS : OUTPUT; - DAC_BCK : OUTPUT; - - MD[15..0] : BIDIR; - MA[14..0] : OUTPUT; - RAS_[1..0] : OUTPUT; - CAS_[3..0] : OUTPUT; - /WE : OUTPUT; - - XACS : OUTPUT; -- ROM_WE - XA[3..0] : BIDIR; - SXA : OUTPUT; - - RDXA : OUTPUT; - WR_AWG : OUTPUT; - RD_KMPS : OUTPUT; - WR_DWG : OUTPUT; - - - - ) -VARIABLE - - MS : MOUSE; - KEYS : KBD; - SVIDEO : VIDEO2 WITH (MODE=MODE); - - DECODE : DCP WITH (UPDATE=UPDATE); --- DECODE : DCP2; - - ACC : ACCELER; - AY3 : AY; - - CBL : lpm_ram_dp WITH (lpm_width=16,lpm_widthad=8); - - CT[5..0] : NODE; - CTH[5..0] : NODE; - CTV[8..0] : NODE; - CTF[6..0] : NODE; - - CLK42 : NODE; - - DD[7..0] : NODE; - D_OUT : NODE; - RD_RAM : NODE; - - MCA[1..0] : NODE; - - DVD3[7..0] : NODE; - DVD2[7..0] : NODE; - DVD1[7..0] : NODE; - DVD0[7..0] : NODE; - - DMD[15..0] : NODE; - DMDX[7..0] : NODE; - - COPY_SINC_H : NODE; - COPY_SINC_V : NODE; - - START_UP : NODE; - - BLANK : NODE; - --- WGA[1..0] : NODE; -- to MA[1..0] / WR_AWG^ --- FDD_C[2..0] : NODE; -- to MA[4..2] / WR_AWG^ --- HDD_C[3..0] : NODE; -- to MA[8..5] / WR_AWG^ --- HD_A[2..0] : NODE; -- to MA[11..9] / WR_AWG^ - NMI_X : NODE; -- to MA12 / WR_AWG^ - INT_X : NODE; -- to MA13 / WR_AWG^ - TURBO : NODE; -- to MA14 / WR_AWG^ - KBD_CX : NODE; -- to XA0 / WR_AWG^ - KBD_DX : NODE; -- to XA1 / WR_AWG^ - TAPE_OUT : NODE; -- to XA2 / WR_AWG^ - - KBD_CC : NODE; -- from XA0 / SXA=0 / RD_XA=0 - KBD_DD : NODE; -- from XA1 / SXA=0 / RD_XA=0 - TAPE_IN : NODE; -- from XA2 / SXA=0 / RD_XA=0 - MOUSE_D : NODE; -- from XA3 / SXA=0 / RD_XA=0 - - FDD_CH : NODE; -- from XA0 / SXA=1 / RD_XA=0 - FDD_W : NODE; -- from XA1 / SXA=1 / RD_XA=0 - SINC_1 : NODE; -- from XA2 / SXA=1 / RD_XA=0 - SINC_2 : NODE; -- from XA3 / SXA=1 / RD_XA=0 - SINC_1M : NODE; - SINC_2M : NODE; - - WR_TM9 : NODE; - --- ==================== - TEST_SWITCH : NODE; - - T_SIGNAL : NODE; --- TEST_1 : LCELL; --- KTA[7..0] : LCELL; --- KTD[7..0] : DFF; --- KTT : LCELL; - - K_DATA[10..0] : NODE; - KEY_D[10..0] : DFF; - KEY_WRITE : NODE; - KD[7..0] : DFF; - K_XOR : NODE; - NEXT_K : NODE; - - RED[7..0] : NODE; - GREEN[7..0] : NODE; - BLUE[7..0] : NODE; - - BORDER[7..0] : DFFE; - KBD_BLK : NODE; - - DOS : NODE; - DOS_ : NODE; - - MDR[7..0] : NODE; - DCPP[7..0] : NODE; - - MDP[7..0] : DFFE; --- MDP[7..0] : LCELL; - - PDD[7..0] : LCELL; - WR_PORT : NODE; - - RGMOD[7..0] : DFFE; - - HDDR[7..0] : DFFE; - - GLISSER : NODE; - BLK_MR : NODE; - VIDEO_PG : NODE; - - AUDIO_CH : NODE; - - CBL_MODE : NODE; - CBL_STEREO : NODE; - CBL_MODE16 : NODE; - CBL_INT_ENA : NODE; - CBL_INT : NODE; - CBL_WR : NODE; - CBL_XX[7..0] : DFFE; - CBL_CNT[7..0] : DFF; - CBL_CTX[4..0] : DFFE; - CBL_WA[7..0] : DFFE; - CBL_WAE : NODE; - CBL_IND : NODE; - - CBL_TAB[4..0] : LCELL; - - CBL_R[15..0] : DFFE; - CBD[7..0] : DFFE; - - AUDIO_R[15..0] : DFFE; - - - /WAIT_ALL : NODE; - - BLK_MEM : NODE; - - SYS_ENA : NODE; - SYS_ENA2 : NODE; - - /SYS : NODE; - SYS_PG : NODE; - - CS_ISA : NODE; - - ISA_CASH : NODE; - ISA_A[3..0] : NODE; - - PRE_ISA : NODE; - PRE_ROM : NODE; - PRE_CASH : NODE; - - WAIT_ORIG : NODE; - WAIT_ROM : NODE; - WAIT_ROMX : NODE; - WT_R[2..0] : DFF; - --- BLK_WAIT : NODE; - - ISA_A20 : NODE; - CASH_ON : NODE; - BLK_MWR2 : NODE; - - ROM_RG[7..0]: DFFE; - ROM_WRITE_MODE : NODE; - - AY_CHS[15..0] : DFFE; - - SOFT_RESET : NODE; - SOFT_RES[1..0] : DFF; - - AY_FULL[10..0] : DFF; - - ALL_MODE[7..0] : DFFE; - - DOUBLE_CAS : NODE; - - XACS : DFF; - - KEMPS[7..0] : LCELL; - - KEY/KEMS[7..0] : LCELL; - AY/PORTS[7..0] : LCELL; - - V_WRXX[3..0]: LCELL; - V_WRX[3..0] : LCELL; --- V_WRX[3..0] : NODE; - - KEY_IO : NODE; - - /IOWR : NODE; - /IORD : NODE; - - RASX_[1..0] : NODE; - CASX_[3..0] : NODE; - CASXE[1..0] : NODE; - CAS_A : NODE; - --- ISA_CELL[1..0] : LCELL; - - T_RDXA : NODE; - - /WE_OUT : NODE; - - SINC_HOLD[8..0] : DFF; - - HOLD[7..0] : DFFE; - - CS_ROMT : NODE; - CS_CASHT : NODE; - - ISA_PORT[7..0] : DFFE; - -BEGIN - - CLK42 = TG42; - --- /RESET = TRI(GND,!DFF((KEYS.kb_reset & START_UP & SOFT_RESET),CLK42,,)); - -- start_up from SOFT_RESET - /RESET = TRI(GND,!DFF((KEYS.kb_reset & SOFT_RESET),CLK42,,)); - --- SOFT_RES[].prn = DFF((!DECODE.BLK_R or /WR or !(DECODE.PAGE[7..0] == H"A0")),CLK42,,); - - SOFT_RES[].clk = !CT4; - CASE SOFT_RES[] IS - WHEN 0,1 => SOFT_RES[] = GND; - WHEN 2 => SOFT_RES[] = 1; - WHEN 3 => SOFT_RES[] = 2; - END CASE; - SOFT_RESET = (SOFT_RES[] == 0); -- when no_Z - RESET! - --- ===== Spectrum-Ports =================== - - /IOWR = DFF((/WR or /IO),CLK42,,!/IO); - /IORD = DFF((/RD or /IO),CLK42,,!/IO); - - BORDER[].clk = /IOWR; - BORDER[].ena = DFF((DCPP[] == B"1100X010"),CLK42,,); -- C2/C8 - BORDER[].d = D[]; - --- ===== keyboard ========================= - --- ======================================== --- NEW 30.06.2022 --- KEYS.int_ena = ALL_MODE0; -- int in all keys --- KEYS.ena = !ALL_MODE0; -- ZX-Keyboard --- new bit3 in ALL_MODE, disables keyboard interruptions w/o accellerator affected - KEYS.int_ena = LCELL(ALL_MODE0 & ALL_MODE3); - KEYS.ena = VCC; -- ZX-Keyboard always enabled --- ======================================== - - KEYS.clk42 = CLK42; - KEYS.clk_k = DFF(CTH5,CLK42,,); - KEYS.kbd_cc = KBD_CC or !KBD_BLK; - KEYS.kbd_dd = KBD_DD; - - KD[].clk = CLK42; - NEXT_K = TFF(VCC,KEY_WRITE,,); - - CASE (NEXT_K) IS - WHEN 0 => KD[] = H"ED"; - WHEN 1 => KD[] = (B"00000",CTF[6..4]); - END CASE; - - K_XOR = !(KD7 xor KD6 xor KD5 xor KD4 xor KD3 xor KD2 xor KD1 xor KD0); - K_DATA[] = (VCC,K_XOR,KD[],GND); - - KEY_D[].clk = KBD_CC; - KEY_D[].d = (GND,KEY_D[10..1]); - - FOR i in 0 to 10 GENERATE - KEY_D[i].prn = K_DATA[i] or KEY_WRITE; - END GENERATE; - KEY_D[].clrn = /RESET; - - KEY_WRITE = DFF((!DFF(CTF1,CLK42,,) or CTF1),CLK42,,); - --- KBD_DX = KEY_D0; --- KBD_BLK = DFF(VCC,CTV7,KEY_WRITE,); - - KBD_BLK = VCC; - KBD_DX = GND; - --- ======================================== --- == Data Paths ========================== --- ======================================== - - MDP[].clk = DECODE./IOMM; - - CASE (DECODE.TYPE[0],(DECODE.HDD_FLIP & DECODE.HDD_DATA)) IS - WHEN B"00" => MDP[] = MD[7..0]; - WHEN B"01" => MDP[] = HDDR[7..0]; - WHEN B"1X" => MDP[] = MD[15..8]; - END CASE; - --- HDDR[].clk = DECODE./IOM; - - HDDR[].clk = LCELL(/WR & (/RD or DECODE./IOMM)); - HDDR[].ena = (DECODE.HDD_DATA & !DECODE./IOM); - - CASE DFF(/WR,DECODE.RAS,,) IS - WHEN 0 => HDDR[].d = D[]; - WHEN 1 => HDDR[].d = MD[15..8]; - END CASE; -% - CASE (DECODE.MC_END & DECODE.HDD_FLIP) IS - WHEN 0 => DMDX[] = (ACC.MDO[7..0]); - WHEN 1 => DMDX[] = (HDDR[]); - END CASE; -% - DMDX[] = (ACC.MDO[7..0]); - - ACC.HDDR[] = HDDR[]; - ACC.HDD_FLIP = DECODE.HDD_FLIP; - - CASE DECODE.TYPE0 IS - WHEN 0 => - KEY/KEMS[] = (LCELL((KEYS.kbo5 & !CBL_MODE) or (CBL_IND & CBL_MODE)),TAPE_IN,LCELL(CBL_MODE & CTV8),KEYS.kbo[4..0]); - AY/PORTS[] = DECODE.DO[]; - WHEN 1 => - KEY/KEMS[] = KEMPS[]; - AY/PORTS[] = AY3.DO[]; - END CASE; - - CASE DECODE.TYPE[2..1] IS - WHEN B"11" => PDD[] = MDP[]; - WHEN B"10" => PDD[] = KEY/KEMS[]; - WHEN B"01" => PDD[] = AY/PORTS[]; - WHEN B"00" => PDD[] = VCC; - END CASE; - - CASE /IO IS - WHEN 1 => DD[] = ACC.DO[]; - WHEN 0 => DD[] = PDD[]; - END CASE; - --- D_OUT = !(/IO or /RD or LCELL((DCPP[7..4] == 0) or (DCPP[7..4] == 3))) or RD_RAM; - D_OUT = !(/IORD or LCELL((DCPP[7..4] == 0) or (DCPP[7..4] == 3))) or RD_RAM; - - V_WRXX[] = !SVIDEO.V_WEN[]; - - V_WRX3 = !SVIDEO.V_WEN3; - V_WRX2 = !SVIDEO.V_WEN2; - V_WRX1 = !SVIDEO.V_WEN1; - V_WRX0 = !SVIDEO.V_WEN0; - - FOR i IN 0 TO 7 GENERATE - D[i] = TRI(DD[i],D_OUT); - VD3[i] = TRI(DVD3[i],V_WRX3); - VD2[i] = TRI(DVD2[i],V_WRX2); - VD1[i] = TRI(DVD1[i],V_WRX1); - VD0[i] = TRI(DVD0[i],V_WRX0); - MD[i] = TRI(DMDX[i],!/WE_OUT or WR_PORT); - MD[i+8] = TRI(ACC.MDO[i+8],!/WE_OUT or WR_PORT); --- MD[i+8] = TRI(DMDY[i],!/WE or WR_PORT); - END GENERATE; - --- ======================================== --- ======================================== --- ======================================== --- ======================================== -% -IF MODE == "SPECTRUM" GENERATE - - TEST_SWITCH = TFF((!KEYS.kb_sh & !KEYS.kb_ctrl),KEYS.kb_F12,,); - - CASE TEST_SWITCH IS - WHEN 0 => - KEYS./rf = /RF; - KEYS./io = /IO; - KEYS.a[15..8] = A[15..8]; - KEYS./iom = /IO; - - WHEN 1 => - - KEYS./rf = DFF((CT4 or CT5),CT2,,); - KEYS./io = DFF((CT4 or !CT5),CT2,,); - KEYS.a[15..8] = !KTA[]; - KEYS./iom = DFF((CT4 or !CT5),CT2,,); - - END CASE; - - CASE TEST_SWITCH IS - WHEN 0 => - RED[] = (SVIDEO.zx_color1 & (VCC,SVIDEO.zx_color3,B"000000")); - GREEN[] = (SVIDEO.zx_color2 & (VCC,SVIDEO.zx_color3,B"000000")); - BLUE[] = (SVIDEO.zx_color0 & (VCC,SVIDEO.zx_color3,B"000000")); - WHEN 1 => - RED[] = (CTH[4..0],CT[5..3]) & CTV[4] & BLANK & T_SIGNAL or TEST_1; - GREEN[] = (CTH[4..0],CT[5..3]) & CTV[5] & BLANK & T_SIGNAL or TEST_1; - BLUE[] = (CTH[4..0],CT[5..3]) & CTV[6] & BLANK & T_SIGNAL or TEST_1; - END CASE; - - DVD0[] = SVIDEO.vdo0[]; - DVD3[] = RED[]; - DVD2[] = GREEN[]; - DVD1[] = BLUE[]; - - V_WR0 = SVIDEO.v_wr0; - V_WR[3..1] = WR_COL; - - DECODE.TURBO_HAND = VCC; - --- ===== TEST CODES ============================================ - - KTD[].clk = DFF((CT4 or !CT5),CT2,,); - KTD[] = KEYS.kbo[]; - - KTA0 = (CTV[5..3] == 0); - KTA1 = (CTV[5..3] == 1); - KTA2 = (CTV[5..3] == 2); - KTA3 = (CTV[5..3] == 3); - KTA4 = (CTV[5..3] == 4); - KTA5 = (CTV[5..3] == 5); - KTA6 = (CTV[5..3] == 6); - KTA7 = (CTV[5..3] == 7); - - CASE CTH[2..0] IS - WHEN 0 => KTT = KTD0; - WHEN 1 => KTT = KTD1; - WHEN 2 => KTT = KTD2; - WHEN 3 => KTT = KTD3; - WHEN 4 => KTT = KTD4; - WHEN 5 => KTT = KTD5; - WHEN 6 => KTT = KTD6; - WHEN 7 => KTT = KTD7; - END CASE; - - T_SIGNAL = DFF(((!CTH5 or TAPE_IN) & (CTH5 or MOUSE_D) & KBD_CC),CLK42,,); - - CASE (CTH[5..3],CTV[8..6]) IS - WHEN B"1XXXXX" => TEST_1 = GND; - WHEN B"XXX100" => TEST_1 = GND; - WHEN B"XXXX11" => TEST_1 = GND; - WHEN B"000000" => TEST_1 = TFF(VCC,KEYS.kb_ctrl,,); - WHEN B"001000" => TEST_1 = GND; - WHEN B"010000" => TEST_1 = GND; - WHEN B"011000" => TEST_1 = KTT; - WHEN B"000001" => TEST_1 = TFF(VCC,KEYS.kb_alt,,); - WHEN B"001001" => TEST_1 = GND; - WHEN B"010001" => TEST_1 = GND; - WHEN B"011001" => TEST_1 = GND; - WHEN B"000010" => TEST_1 = TFF(VCC,KEYS.kb_sh,,); - WHEN B"001010" => TEST_1 = GND; - WHEN B"010010" => TEST_1 = GND; - WHEN B"011010" => TEST_1 = GND; - END CASE; - -ELSE GENERATE -% - TEST_SWITCH = TFF((!KEYS.kb_sh & !KEYS.kb_ctrl & !KEYS.kb_alt),KEYS.kb_F12,,/RESET); - - DECODE.TURBO_HAND = TEST_SWITCH; - - KEY_IO = DFFE((/IO or !/M1),CLK42,,,(CT1 & CT2)); - KEYS./rf = DFFE((CT2 or !KEY_IO),CLK42,,,CT0); - KEYS./iom = KEY_IO; - KEYS./io = KEY_IO; - KEYS./m1 = VCC; - - KEYS.a[15..8] = A[15..8]; - - DVD0[] = SVIDEO.vdo0[]; - DVD1[] = SVIDEO.vdo1[]; - DVD2[] = SVIDEO.vdo2[]; - DVD3[] = SVIDEO.vdo3[]; - - V_WR[3..0] = SVIDEO.V_WR[]; -% -END GENERATE; -% --- ===================================================== --- ===================================================== - - SYS_ENA = (!/SYS or ROM_RG4) or - (A[15..4] == B"001111111111") or - (A[15..4] == B"00000000000X"); - --- SYS_ENA2 = DFFE(SYS_ENA,/MR,,,/RF) & DFF((A[7..0] == B"0X111100"),CLK42,,); - SYS_ENA2 = DFF((A[7..0] == B"0X111100"),CLK42,,); - - ISA_PORT[].clk = /IOWR; - ISA_PORT[].d = D[]; - ISA_PORT[].ena = DECODE.BLK_R & DFF((DCPP[] == B"1111XXXX"),CLK42,,); - -IF (UPDATE == 1) GENERATE - - WAIT_ORIG = LCELL(/MR or CT5 or ALL_MODE2 or - LCELL((!(DECODE.V_RAM & (A14 & A15)) & !(A14 & !A15)) or TURBO)); - - - SOFT_RES[].prn = !DFF(DFF((LCELL(DECODE.BLK_R & A14 & A15) & - LCELL(DECODE.PAGE[7..4] == H"A")),CLK42,,),(/WR or /MR),/RESET,); - - -- /SYS=0 - system ROM on - /SYS = DFFE(!A6,/IOWR,/RESET,,SYS_ENA2); - - -- SYS_PG - system ROM0/ROM1 switch - SYS_PG = DFFE(D0,/IOWR,/RESET,!ROM_RG4,(SYS_ENA2 & !D1)); - - -- 0 - write A20 for ISA - ISA_A20 = (/IOWR or !DFF((DCPP[] == B"00011011"),CLK42,,)); -- 1B --- ISA_A20 = VCC; - - -- 1 - CASHE on IN A,(0FBh/07Bh) --- CASH_ON = DFFE(A7,/IORD,/RESET,,DFF((DCPP[] == H"88"),CLK42,,));-- 88 - CASH_ON = DFFE(A7,/IORD,/RESET,,DFF((A[7..0] == B"X1111011"),CLK42,,)); - - -- 0 - CS_ISA - - PRE_ISA = LCELL(!LCELL(ISA_PORT[] == B"1101XXXX") or !DECODE.BLK_R or !A14 or !A15); - PRE_ROM = LCELL(/SYS or A14 or A15 or CASH_ON); - PRE_CASH = LCELL(A14 or A15 or !CASH_ON); - --- BLK_WAIT = LCELL(LCELL(PRE_CASH or !PRE_ROM) or (/RD & /WR) or /MR); - - WAIT_ROMX = LCELL(CS_ROM & CS_ISA); - WAIT_ROM = (WAIT_ROMX or DFF((WT_R[] == 0),CLK42,!WAIT_ROMX,)); - WT_R[].clk = CLK42; - CASE (WAIT_ROMX,WT_R[]) IS - WHEN 0 => WT_R[] = 0; - WHEN B"0001" => WT_R[] = WT_R[] - 1; - WHEN B"001X" => WT_R[] = WT_R[] - 1; - WHEN B"01XX" => WT_R[] = WT_R[] - 1; - WHEN B"1XXX" => WT_R[] = 4; - END CASE; - - CS_ISA = DFF((!/RF or PRE_ISA),!/MR,,LCELL(CS_ISA or !/MR)); - CS_ROMT = DFF((!/RF or PRE_ROM or !PRE_CASH),!/MR,,LCELL(CS_ROMT or !/MR)); - CS_CASHT = DFF((!/RF or !PRE_ROM or PRE_CASH),!/MR,,LCELL(CS_CASHT or !/MR)); - - CS_ROM = CS_ROMT; - - CS_CASH = CS_CASHT & CS_ISA & ISA_A20; - --- CS_ROM = LCELL(LCELL(PRE_ROM or !PRE_CASH) or (/RD & /WR) or /MR); - --- CS_CASH = LCELL(LCELL(PRE_CASH or !PRE_ROM) or (/RD & /WR) or /MR) & --- CS_ISA & ISA_A20; - - CASE (PRE_ROM,PRE_CASH) IS - WHEN B"00" => ISA_A[] = B"1000"; -- error -> ISA - WHEN B"01" => ISA_A[] = ((ROM_RG3 xor !SYS_PG),ROM_RG[2..0]); -- ROM_ADRESS - WHEN B"10" => ISA_A[] = (B"01",ROM_RG[1..0]); -- CASHE_ADRESS - WHEN B"11" => ISA_A[] = (!PRE_ISA,GND,ISA_PORT[2..1]); -- for ISA_A20 - END CASE; - RA[] = ISA_A[3..0]; - - XACS.clk = !(/MR or /WR); - XACS.d = (!ROM_RG4 or A14 or A15); - XACS.prn = (XACS or (!/MR & ROM_RG4)); - --- XACS.clk = CLK42; --- XACS = (WAIT_ROM or /WR or A14 or A15); --- XACS.prn = !/MR & ROM_RG4; - - BLK_MEM = LCELL(!PRE_ROM or !PRE_CASH or !PRE_ISA); - - RD_RAM = !(/MR or /RD or BLK_MEM); - - BLK_MWR2 = DECODE.RAM or BLK_MEM; - - DECODE.BLK_MEM = BLK_MEM; - - ROM_RG[].clk = /IOWR; - ROM_RG[].d = D[]; - ROM_RG[].ena = DFF((DCPP[] == H"8F"),CLK42,,) or - (!/SYS & DFF((A[7..0] == B"01011100"),CLK42,,)); -- 5C - ROM_RG[].clrn = /RESET; - -ELSE GENERATE - - SOFT_RES[].prn = DFF((!DFF(DECODE.BLK_R,CLK42,,) or /WR or !(DECODE.PAGE[7..4] == H"A")),CLK42,,!/MR); - - WT_R[].clk = GND; - WT_R[] = 0; - - WAIT_ROM = VCC; - - DECODE.BLK_MEM = GND; - - BLK_MWR2 = DECODE.BLK_R; - - XACS.clk = CLK42; - CASE ROM_WRITE_MODE IS - WHEN 0 => - CS_ROM = ROM_RG[4] or !/RF or LCELL(DECODE.CS_ROM or /RD or (DECODE.BLK_R & !LCELL(DECODE.PAGE[7..4] == 14))); - XACS = VCC; - WHEN 1 => - CS_ROM = /MR or !/RF or DFF((/RD & /WR),CLK42,,); --- XACS = /MR or DFF((/WR or DECODE.MC_END),!CLK42,,); - XACS = /MR or DFF(/WR or !DFF(/WR,!CT2,,!/WR),!CT2,,!/WR); - END CASE; - --- CS_CASH = !DECODE.BLK_R or !(DECODE.PAGE[7..4] == 15); - --- CS for CASHE & ISA-Slots - - CS_CASH = (DFF(!(DECODE.PAGE[7..4] == B"11X1"),CLK42,,DECODE.BLK_R) & - --- CS for ISA_A20 signal - - LCELL(DECODE./IOM or /WR or !(DCPP[] == B"00011011")) -- 1B - - ); - --- Switcher for ISA/CASHE adress - - ISA_CASH = LCELL(DECODE.BLK_R & (DECODE.PAGE[7..4] == B"11X1")) or !/IOWR; - - CASE /IO IS - WHEN 0 => ISA_A[3..2] = B"00"; -- for Write to A20 port - ISA_A[1..0] = DECODE.PAGE[1..0]; -- ANY - - WHEN 1 => --- ISA_A[3..2] = B"10"; -- for ISA Slots - ISA_A[3..2] = (!DECODE.PAGE5,DECODE.PAGE5); - --- ISA_A[1..0] = DECODE.PAGE[1..0]; -- ISA select - ISA_A[1..0] = (DECODE.PAGE2,DECODE.PAGE1); -- ISA select - END CASE; - - RD_RAM = !(DECODE.CS_RAM or /RD or DECODE.BLK_R); - - CASE ROM_WRITE_MODE IS - WHEN 0 => - CASE (ISA_CASH,DECODE.RAM) IS - WHEN 0 => RA[] = (B"01",A[15..14]); -- for CASHE in RAM - WHEN 1 => RA[] = DECODE.RA[]; -- ROM Adresses - WHEN 2,3 => RA[] = ISA_A[3..0]; -- CASHE & ISA - END CASE; - WHEN 1 => - RA[] = ROM_RG[3..0]; - END CASE; - ROM_WRITE_MODE = DFF((ROM_RG[4] & !(A14 or A14)),CLK42,,); - - ROM_RG[].clk = /IOWR; - ROM_RG[].d = D[]; - ROM_RG[].ena = DFF((DCPP[] == H"8F"),CLK42,,); - ROM_RG[].clrn = /RESET; - -END GENERATE; - - --- ===================================================== --- ===================================================== - - RD_KMPS = DECODE./IOM or /RD or !(DECODE.TYPE[] == 7); - --- WR_PORT = !(/IO or DFF(!DECODE.MC_END,CLK42,,) or /WR) or !(DECODE.WR_DWG or /IO or /WR); - - WR_PORT = (!(/IO or /WR) & LCELL(DFF(DECODE.MC_TYPE,CLK42,,))); - --- WR_PORT = DFF((!(/IO or /WR) & DECODE.MC_TYPE),CLK42,,); - - WR_DWG = DECODE.WR_DWG; - --- (NMI_X,KBD_CX) = GND; - (KBD_CX) = GND; - - IF (NMI_ON == "ON") GENERATE - NMI_X = (!KEYS.kb_f12 & KEYS.kb_alt); - ELSE GENERATE - NMI_X = GND; - END GENERATE; - --- TFF(KEYS.kb_ctrl,KEYS.kb_f12,,); - --- INT_X = !DFF(GND,CTV8,,((/IO or /M1) & DFF(!INT_X,CTH3,,))); - --- INT_X = !DFF(GND,SVIDEO.INTT,,((/IO or /M1) & DFF(!INT_X,CTH3,,))); - --- INT_X = !DFF(GND,(SVIDEO.INTT & KEYS.int),,((/IO or /M1) & DFF(!INT_X,CTH3,,))); - INT_X = !DFF(GND,(SVIDEO.INTT & KEYS.int),,((/IO or /M1) & DFF(DFF(!INT_X,CTH2,,),CTH2,,))) - or !CBL_INT; - - TAPE_OUT = LCELL(BORDER3); - --- *************************************** - --- RDXA = LCELL(DECODE.RD_KP11); --- T_RDXA = DFF(GND,DECODE.RD_KP11,,DFF((T_RDXA),CLK42,,)); - --- WR_TM9 = !DFF(VCC,!CLK42,DECODE.WR_TM9,); --- WR_TM9 = LCELL(DFF(DECODE.RD_KP11,CLK42,,)); - --- RDXA = LCELL(CT2 or DFFE(!CT2,!CLK42,,,CT1)); - - RDXA = DFF(!((CT[2..0] == B"11X") or (CT[2..0] == 0)),CLK42,,); - --- T_RDXA = CT2; - T_RDXA = LCELL(RDXA); - --- WR_TM9 = DFF(CT2,!CLK42,,); - WR_TM9 = LCELL(CT2); - - --- SXA = TFF(VCC,T_RDXA,,); --- SXA = DFF((CT3 xor (CT2 & CT1)),CLK42,,); - SXA = DFF((CT3 xor CT2),CLK42,,); - --- WR_AWG = LCELL(LCELL(DECODE.WR_AWG)); --- WR_AWG = LCELL(DECODE.WR_AWG); - WR_AWG = DECODE.WR_AWG; - --- WR_AWG = DFF(DECODE.WR_AWG,CLK42,,); - --- SXA = DFF(DECODE.KP11_MIX,CLK42,,); - - XA0 = TRI(KBD_CX,WR_TM9); - XA1 = TRI(KBD_DX,WR_TM9); - XA2 = TRI(TAPE_OUT,WR_TM9); - XA3 = TRI(GND,GND); - - KBD_DD = DFFE(XA1,T_RDXA,,,!SXA); - KBD_CC = DFFE(XA0,T_RDXA,,,!SXA); - TAPE_IN = DFFE(XA2,T_RDXA,,,!SXA); - MOUSE_D = DFFE(XA3,T_RDXA,,,!SXA); - - FDD_CH = DFFE(XA1,T_RDXA,,,SXA); - FDD_W = DFFE(XA0,T_RDXA,,,SXA); - SINC_1 = DFFE(XA2,T_RDXA,DECODE./RES,,SXA); - SINC_2 = DFFE(XA3,T_RDXA,DECODE./RES,,SXA); - - SINC_HOLD[3..0].clk = CT4; - SINC_HOLD[8..4].clk = CTH5; - - SINC_1M = DFF(!(SINC_HOLD[3..0] == 15),CLK42,,); - - CASE !SINC_1 IS - WHEN 0 => SINC_HOLD[3..0] = HOLD[3..0]; - WHEN 1 => SINC_HOLD[3..0] = (SINC_HOLD[3..0] + 1) or !SINC_1M; - END CASE; - - SINC_2M = DFF(!(SINC_HOLD[8..4] == B"1111X"),CLK42,,); - --- CASE DFF((SINC_2 & DFF(SINC_2,CTV0,,)),CLK42,,) IS - - CASE SINC_2 IS - WHEN 1 => SINC_HOLD[8..4] = (HOLD[7..4],GND); - WHEN 0 => SINC_HOLD[8..4] = (SINC_HOLD[8..4] + 1) or !SINC_2M; - END CASE; - - COPY_SINC_H = DFF((!SINC_1M & DFF(SINC_1M,CLK42,,)),CLK42,,); - COPY_SINC_V = DFF((!SINC_2M & DFF(SINC_2M,CLK42,,)),CLK42,,); - --- COPY_SINC_H = DFF(DFF(!SINC_1 & DFF(SINC_1,!CLK42,,),!CLK42,,),CLK42,,); --- COPY_SINC_V = DFF(DFF(!SINC_2 & DFF(SINC_2,!CLK42,,),!CLK42,,),CLK42,,); - --- START_UP = DFFE(DFFE(DFFE(VCC,CLK42,,,COPY_SINC_H),CLK42,,,COPY_SINC_V),CLK42,,,COPY_SINC_V); - START_UP = DFFE(DFFE(DFFE(VCC,CLK42,,,COPY_SINC_H),CLK42,,,COPY_SINC_H),CLK42,,,COPY_SINC_H); - - HOLD[].clk = /IOWR; - HOLD[].ena = DFF((DCPP[] == B"11001011"),CLK42,,); -- CB - HOLD[].d = D[]; - - HOLD[2..0].prn = DECODE./RES; - HOLD[3].clrn = DECODE./RES; - HOLD[6..4].prn = DECODE./RES; - HOLD[7].clrn = DECODE./RES; - --- ===================================================== --- ===== DCP =========================================== --- ===================================================== - - DOS_ = (!((DECODE.PN4Q & A13 & A12) & (A[11..8] == B"1101")) & DOS) or (A14 or A15); - DOS = DFF(DOS_,!(/M1 or /MR),,/RESET); - DECODE.DOS = DOS; - - DECODE.REFRESH = CT4; - - DCPP[] = DECODE.DCPP[]; - - DECODE.CLK42 = CLK42; - DECODE./RESET = /RESET; - - DECODE.ACC_ON = ACC.ACC_ON; - - DECODE.CT[2..0] = CT[2..0]; - - RASX_[1..0] = (LCELL(DECODE.RAS),LCELL(DECODE.RAS)); - - RAS_[] = RASX_[]; - - MCA[] = DECODE.MCA[1..0]; - - DOUBLE_CAS = ACC.DOUBLE_CAS; - - CAS_A = LCELL(DECODE.CAS); --- CAS_A = (DECODE.CAS); - - CASXE0 = LCELL((MCA0 == 0) or ((MCA0 == 1) & DOUBLE_CAS)); - CASXE1 = LCELL((MCA0 == 1) or ((MCA0 == 0) & DOUBLE_CAS)); - - CASX_0 = LCELL(CAS_A or !((!MCA1 & CASXE0) or DECODE.MC_TYPE)); - CASX_1 = LCELL(CAS_A or !((!MCA1 & CASXE1) or DECODE.MC_TYPE)); - CASX_2 = LCELL(CAS_A or !(( MCA1 & CASXE0) or DECODE.MC_TYPE)); - CASX_3 = LCELL(CAS_A or !(( MCA1 & CASXE1) or DECODE.MC_TYPE)); - - CAS_[] = CASX_[]; - --- /WE = DFFE((/WE_OUT or DECODE.RAS),CLK42,,/RESET,); - /WE = DFFE((/WE_OUT or DECODE.RAS),CLK42,,/RESET,); - --- /WE = LCELL(DFFE((/WE_OUT or DECODE.RAS),CLK42,,/RESET,)); --- /WE = LCELL(/WE_OUT or CAS_A); - - /WE_OUT = LCELL(DECODE.MC_WRITE or BLK_MR or BLK_MWR2); - - DECODE.DOUBLE_CAS = DOUBLE_CAS; --- DECODE.A[15..0] = A[]; - DECODE.A[15..0] = ACC.AO[]; - DECODE.DI[7..0] = D[]; - - MA[11..0] = DECODE.MA[11..0]; - MA[14..12] = (!TURBO,INT_X,NMI_X); - - CLKZ1 = DECODE.CLK_Z80; - - TURBO = DECODE.TURBO; - - DECODE./IO = /IO; - DECODE./RD = /RD; - DECODE./WR = /WR; - DECODE./MR = /MR; - DECODE./RF = /RF; - DECODE./M1 = /M1; - - /WAIT_ALL = (DECODE./WAIT & WAIT_ROM & WAIT_ORIG); - --- /WAIT = TRI(DECODE./WAIT,LCELL(!(DECODE./WAIT & DFF(DECODE./WAIT,CLK42,,)))); - - /WAIT = TRI(/WAIT_ALL,LCELL(!/WAIT_ALL)); - - DECODE.TEST_R = TFF(KEYS.kb_ctrl,KEYS.kb_f12,,); - --- DECODE.MD[7..0] = ACC.MD[]; - DECODE.MD[7..0] = ACC.DO[]; - --- ===================================================== --- == Accelerator ====================================== --- ===================================================== - - ACC.ACC_ENA = ALL_MODE0; - - ACC.CLK42 = CLK42; - ACC./RESET = /RESET; - ACC.CT[2..0]= CT[2..0]; - ACC.CLK_Z80 = DECODE.CLK_Z80; - - ACC.RAS = DECODE.RAS; - ACC.CAS = DECODE.CAS; - - DECODE.CONTINUE = ACC.CONTINUE; --- DECODE.CONTINUE = VCC; - - ACC.MC_END = DECODE.MC_END; - ACC.MC_BEGIN= DECODE.MC_BEGIN; - ACC.MC_TYPE = DECODE.MC_TYPE; - ACC.MC_WRITE= DECODE.MC_WRITE; --- ACC.MCA[] = DECODE.MCA[]; - - ACC.AI[15..0] = A[]; - ACC.DI[7..0] = D[]; - - ACC./IO = /IO; - ACC./RD = /RD; - ACC./WR = /WR; - ACC./MR = /MR; - ACC./RF = /RF; - ACC./M1 = /M1; - ACC./IOM = DECODE./IOM; - - ACC.DCP[7..0] = DCPP[]; - - ACC.MDI[15..0] = MD[]; - --- ACC.MDO[15..0]; - --- ===================================================== --- ===== Graf-Mode ===================================== --- ===================================================== - - RGMOD[].clk = /IOWR; - RGMOD[].ena = DFF((DCPP[] == B"1100X101"),CLK42,,); --- (DCPP[] == B"1100X101"); - RGMOD[].d = D[]; - RGMOD[].clrn= /RESET; - - DECODE.G_LINE[] = (GND,GND,ACC.G_LINE[7..0]); - --- ===================================================== --- ===== VIDEO ========================================= --- ===================================================== - - VIDEO_PG = LCELL(DECODE.PAGE[7..4] == B"0101"); - BLK_MR = LCELL((VIDEO_PG & - (DECODE.PAGE2 or (DECODE.PAGE3 & ACC.GLISSER)))); - - GLISSER = LCELL(ACC.GLISSER & DECODE.PAGE[3] & VIDEO_PG); - - SVIDEO.clk42 = CLK42; - - CT[5..0] = SVIDEO.ct[5..0]; - CTH[5..0] = SVIDEO.cth[5..0]; - CTV[8..0] = SVIDEO.ctv[8..0]; - CTF[6..0] = SVIDEO.ctf[6..0]; - - BLANK = SVIDEO.blank; - - SVIDEO.start_up = VCC; - SVIDEO.copy_sinc_h = COPY_SINC_H; - SVIDEO.copy_sinc_v = COPY_SINC_V; - --- SVIDEO.wr = (DECODE.MC_WRITE or DECODE.CAS or GLISSER); --- SVIDEO.wr = DFF((DECODE.MC_WRITE or GLISSER or DECODE.RAS),CLK42,,/RESET); - SVIDEO.wr = DFF((DECODE.MC_WRITE or GLISSER or DECODE.CAS),!CLK42,,/RESET); - --- SVIDEO.vai[] = (DECODE.GA[],A[9..0]); - SVIDEO.vai[] = (DECODE.GA[],ACC.AO[9..0]); - - VA[] = SVIDEO.vao[]; - - SVIDEO.D[] = D[]; - SVIDEO.MDI[] = ACC.MDO[]; - SVIDEO.DOUBLE_CAS = DOUBLE_CAS; - - SVIDEO.VDM0[7..0] = VD0[]; - SVIDEO.VDM1[7..0] = VD1[]; - SVIDEO.VDM2[7..0] = VD2[]; - SVIDEO.VDM3[7..0] = VD3[]; - - V_CS[1..0] = SVIDEO.v_cs[]; - WR_COL = SVIDEO.WR_PIX; - --- ZX_COLOR[3..0] - - SVIDEO.ZX_PORT[5..0] = (ACC.G_LINE[5..0]); --- SVIDEO.ZX_PORT[7..6] = (DECODE.SP_SA,LCELL(DECODE.SP_SCR & !(A13 & !ACC.G_LINE7) & !ACC.G_LINE6)); - --- NEW 25.08.2022 --- disable zx adressing due accelerator is on - SVIDEO.ZX_PORT[7..6] = (DECODE.SP_SA,LCELL(DECODE.SP_SCR & !(A13 & !ACC.G_LINE7) & !ACC.G_LINE6 & !ALL_MODE0)); - - SVIDEO.DIR_PORT[0] = DECODE.SCR128; - - SVIDEO.DIR_PORT[3] = RGMOD0; - - IF (SCREEN_OFF == "USE") GENERATE - SVIDEO.DIR_PORT[4] = RGMOD1; -- 1 screen off, 0 - screen on - ELSE GENERATE - SVIDEO.DIR_PORT[4] = GND; -- 1 screen off, 0 - screen on - END GENERATE; - - SVIDEO.DIR_PORT[2..1] = GND; - SVIDEO.DIR_PORT[7..5] = BORDER[2..0]; --- SVIDEO.DIR_PORT[7..5] = MS.OUT_X[7..5]; - - SVIDEO.MOUSE_X[] = MS.OUT_X[]; - SVIDEO.MOUSE_Y[] = MS.OUT_Y[]; - -% - bit0 - Spectrum SCREEN Switch - bit1 - Spectrum Adress MODE - bit2 - Write to Spectrum Screen OFF - - bit7..5 - Border -% - --- ===================================================== - - ALL_MODE[7..0].clk = /IOWR; - ALL_MODE[7..0].ena = DFF((DCPP[] == B"11000011"),CLK42,,); -- C3 - ALL_MODE[].d = D[]; - ALL_MODE[].prn = /RESET; - --- ===================================================== --- === AUDIO OUT ======================================= --- ===================================================== - - DAC_DATA = DFFE(DFF(AUDIO_R15,CT2,,),!CT2,,,); - --- DAC_DATA = DFF(AUDIO_R15,CLK42,,); --- DAC_DATA = AUDIO_R15; - - DAC_WS = DFF(CTH1,CLK42,,); - DAC_BCK = DFF(CT2,CLK42,,); - - AUDIO_R[15..0].clk = CLK42; - AUDIO_R[15..0].ena = !CT2 & DFF(CT2,CLK42,,); - - AUDIO_CH = DFF(((CTH0,CT[5..3]) == 15),CT2,,); - - IF AUDIO_CH THEN - AUDIO_R[15..0].d = AY_CHS[15..0]; - ELSE - AUDIO_R[15..0].d = (AUDIO_R[14..0],GND); - END IF; - --- ====== COVOX ========== - - CBL_MODE = CBL_XX7; - CBL_STEREO = CBL_XX6; - CBL_MODE16 = CBL_XX5; - CBL_INT_ENA = CBL_XX4; - - CBL_INT = DFF(GND,!CBL_CNT6,,(CBL_INT_ENA & (/IO or /M1))); - - CBL_XX[].clk = /IOWR; - CBL_XX[].ena = DFF((DCPP[] == B"10001001"),CLK42,,); -- 89 - CBL_XX[] = D[]; - - CBL_CTX[].clk = !CTH1; - CBL_CNT[].clk = !CTH1; - - CASE CBL_XX[3..0] IS - WHEN 0 => CBL_TAB[] = 13; -- 16khz -- mono/stereo - WHEN 1 => CBL_TAB[] = 9; -- 22khz -- mono/stereo - WHEN 2 => CBL_TAB[] = 0; -- reserved - WHEN 3 => CBL_TAB[] = 0; -- reserved - WHEN 4 => CBL_TAB[] = 0; -- reserved - WHEN 5 => CBL_TAB[] = 0; -- reserved - WHEN 6 => CBL_TAB[] = 0; -- reserved - WHEN 7 => CBL_TAB[] = 0; -- reserved - - WHEN 8 => CBL_TAB[] = 27; -- 7.8125 KHz -- mono/stereo 8/16 bit - WHEN 9 => CBL_TAB[] = 19; -- 10.9375 KHz -- mono/stereo 8/16 bit - WHEN 10=> CBL_TAB[] = 13; -- 15.625 KHz -- mono/stereo 8/16 bit - WHEN 11=> CBL_TAB[] = 9; -- 21.875 KHz -- mono/stereo 8/16 bit - WHEN 12=> CBL_TAB[] = 6; -- 31.25 KHz -- mono/stereo 8/16 bit - WHEN 13=> CBL_TAB[] = 4; -- 43.75 KHz -- mono/stereo 8/16 bit - WHEN 14=> CBL_TAB[] = 3; -- 54.6875 KHz -- mono/stereo 8/16 bit - WHEN 15=> CBL_TAB[] = 1; -- 109.375 KHz -- mono/stereo 8/16 bit --- WHEN 15=> CBL_TAB[] = 0; -- (218.75)KHz -- stereo 110 only - END CASE; - - IF (CBL_CTX[] == 0) THEN - CBL_CTX[].d = CBL_TAB[]; - ELSE - CBL_CTX[].d = CBL_CTX[] - 1; - END IF; - - CASE (CBL_STEREO,LCELL(CBL_CTX[] == 0)) IS - WHEN 0,2 => CBL_CNT[].d = CBL_CNT[]; - WHEN 1 => CBL_CNT[].d = CBL_CNT[]+1; - WHEN 3 => CBL_CNT[].d = CBL_CNT[]+2; - END CASE; - - CBL_CNT[].clrn = CBL_MODE; - - CBL_IND = CBL_CNT7 xor CBL_WA7; - --- CBL_WR = DFF((DCPP[] == B"10001000"),CLK42,,) & !/IOWR; -- 88 - - CBL_WR = (DFF((DCPP[] == B"10001000"),CLK42,,) & !/IOWR) or - (DFF((DECODE.PAGE[7..0] == B"11111101"),CLK42,(CBL_INT_ENA & ACC.ACC_DIR1),) & - !DFF((DECODE.MC_WRITE or DECODE.CAS),CLK42,,/RESET)); - - - CBL_WAE = CBL_MODE16 & DFF(!CBL_WAE,!CBL_WR,,CBL_INT); - - CBL_WA[].clk = !CBL_WR; - CBL_WA[].ena = !CBL_WAE; - - CBL_WA[7].clrn = CBL_MODE & CBL_INT_ENA & (CBL_INT or !CBL_CNT7); - CBL_WA[7].prn = (CBL_INT or CBL_CNT7); - - CBL_WA[6..0].clrn = CBL_MODE & CBL_INT_ENA & CBL_INT; - - CBL_WA[].d = CBL_WA[] + 1; - - CBD[].clk = !CBL_WR; - CBD[].ena = CBL_WAE; --- CBD[].d = D[]; - CBD[].d = ACC.MDO[7..0]; - CBD[].clrn = CBL_MODE16; - - CBL.wren = (CBL_WR & !CBL_WAE); - --- CBL.data[] = ((D7 xor CBL_MODE16),D[6..0],CBD[]); - CBL.data[] = ((ACC.MDO15 xor CBL_MODE16),ACC.MDO[14..8],CBD[]); - - CBL.wraddress[] = ((!A[15..8]) & !CBL_INT_ENA) xor CBL_WA[]; - - CBL.wrclock = CLK42; - CBL.wrclken = VCC; - CBL.rden = VCC; - CBL.rdaddress[] = (CBL_CNT[7..1],LCELL((CBL_CNT0 & !CBL_STEREO) or (AUDIO_CH & CBL_STEREO))); - CBL.rdclock = CLK42; - CBL.rdclken = VCC; - - CBL_R[].ena = DFF((CBL_MODE or (CBL_WR)),CLK42,,); - - CBL_R[].CLK = CLK42; - CBL_R[15].prn = /RESET; - CBL_R[14..0].clrn = /RESET; - CASE CBL_MODE IS - WHEN 0 => CBL_R[] = (D[7..0],B"00000000"); - WHEN 1 => CBL_R[] = CBL.q[]; - END CASE; - --- ====== AY-3-8910 ======== - - AY3.CLK42 = CLK42; - - AY3./RESET = /RESET; - AY3.AY_T[8..0] = (CTH[2..0],CT[5..0]); - - AY3.AY_D_WR = DFF((DECODE./IOM or /WR) or !DFF((DCPP[] == H"91"),CLK42,,),CLK42,,); - AY3.AY_A_WR = DFF((DECODE./IOM or /WR) or !DFF((DCPP[] == H"90"),CLK42,,),CLK42,,); - - AY3.D[7..0] = D[]; - AY3.BEEPER = BORDER4; - --- AY3.DO[7..0] : OUTPUT; - --- AY3.AY_CH_A[3..0] : OUTPUT; --- AY3.AY_CH_B[3..0] : OUTPUT; --- AY3.AY_CH_C[3..0] : OUTPUT; - - AY_FULL[].clk = CLK42; - --- AY_CHS[].clk = !CTH0; - AY_CHS[].clk = !DFF((CTH1 & (CTH0 or !CT5)),CLK42,,); - AY_CHS[].ena = VCC; - --- AY_FULL[] = (GND,AY_CH_L[]) + (GND,AY_CH_R[]); - - CASE DFF(CTH0,CLK42,,) IS - WHEN 0 => AY_FULL[] = (AY3.AY_CH_L[],GND); - WHEN 1 => AY_FULL[] = (AY3.AY_CH_R[],GND); - END CASE; - --- AY_CHS[].d = (((GND,AY_FULL[]) + (VCC,CBL.q[15..5])),B"0000"); - --- AY_CHS[].d = (((GND,AY_FULL[]) + (VCC,CBL.q[15..8],B"000")),B"0000"); - AY_CHS[].d = (((GND,AY_FULL[]) + (VCC,CBL_R[15..5])),CBL_R[4..1]); - --- ===== MOUSE ========================= - - MS.clk = DFF(CTH5,CLK42,,); - MS.mouse_d = MOUSE_D; - - CASE (A10,A8) IS - WHEN 0,2 => KEMPS[] = (B"111111",!MS.OUT_K0,!MS.OUT_K1); - WHEN 1 => KEMPS[] = (MS.OUT_X[7..0]); - WHEN 3 => KEMPS[] = !(MS.OUT_Y[7..0]); - END CASE; - -END; - diff --git a/src/altera/acex/k30/VIDEO2.ACF b/src/altera/acex/k30/VIDEO2.ACF deleted file mode 100644 index 57d4f1c..0000000 --- a/src/altera/acex/k30/VIDEO2.ACF +++ /dev/null @@ -1,588 +0,0 @@ --- --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. --- -CHIP video2 -BEGIN - DEVICE = AUTO; -END; - -DEFAULT_DEVICES -BEGIN - ASK_BEFORE_ADDING_EXTRA_DEVICES = ON; - AUTO_DEVICE = EP1K30TC144-1; - AUTO_DEVICE = EP1K30QC208-1; - AUTO_DEVICE = EP1K30FC256-1; - AUTO_DEVICE = EP1K50TC144-1; - AUTO_DEVICE = EP1K50QC208-1; - AUTO_DEVICE = EP1K50FC256-1; - AUTO_DEVICE = EP1K50FC484-1; - AUTO_DEVICE = EP1K100QC208-1; - AUTO_DEVICE = EP1K100FC256-1; - AUTO_DEVICE = EP1K100FC484-1; -END; - -TIMING_POINT -BEGIN - MAINTAIN_STABLE_SYNTHESIS = ON; - DEVICE_FOR_TIMING_SYNTHESIS = EP1K30FC256-3; - CUT_ALL_BIDIR = ON; - CUT_ALL_CLEAR_PRESET = ON; - FREQUENCY = 200MHz; -END; - -IGNORED_ASSIGNMENTS -BEGIN - IGNORE_CLIQUE_ASSIGNMENTS = OFF; - IGNORE_LOGIC_OPTION_ASSIGNMENTS = OFF; - IGNORE_TIMING_ASSIGNMENTS = OFF; - IGNORE_CHIP_ASSIGNMENTS = OFF; - IGNORE_PIN_ASSIGNMENTS = OFF; - IGNORE_LC_ASSIGNMENTS = OFF; - IGNORE_DEVICE_ASSIGNMENTS = OFF; - IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF; - DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF; - FIT_IGNORE_TIMING = OFF; -END; - -LOGIC_OPTIONS -BEGIN - |VAO15 : FAST_IO = ON; - |VAO14 : FAST_IO = ON; - |VAO13 : FAST_IO = ON; - |VAO12 : FAST_IO = ON; - |VAO11 : FAST_IO = ON; - |VAO10 : FAST_IO = ON; - |VAO9 : FAST_IO = ON; - |VAO8 : FAST_IO = ON; - |VAO7 : FAST_IO = ON; - |VAO6 : FAST_IO = ON; - |VAO5 : FAST_IO = ON; - |VAO4 : FAST_IO = ON; - |VAO3 : FAST_IO = ON; - |VAO2 : FAST_IO = ON; - |VAO1 : FAST_IO = ON; - |VAO0 : FAST_IO = ON; -END; - -GLOBAL_PROJECT_DEVICE_OPTIONS -BEGIN - RESERVED_LCELLS_PERCENT = 0; - RESERVED_PINS_PERCENT = 0; - SECURITY_BIT = OFF; - USER_CLOCK = OFF; - AUTO_RESTART = OFF; - RELEASE_CLEARS = OFF; - ENABLE_DCLK_OUTPUT = OFF; - DISABLE_TIME_OUT = OFF; - CONFIG_SCHEME = ACTIVE_SERIAL; - FLEX8000_ENABLE_JTAG = OFF; - DATA0 = RESERVED_TRI_STATED; - DATA1_TO_DATA7 = UNRESERVED; - nWS_nRS_nCS_CS = UNRESERVED; - RDYnBUSY = UNRESERVED; - RDCLK = UNRESERVED; - SDOUT = RESERVED_DRIVES_OUT; - ADD0_TO_ADD12 = UNRESERVED; - ADD13 = UNRESERVED; - ADD14 = UNRESERVED; - ADD15 = UNRESERVED; - ADD16 = UNRESERVED; - ADD17 = UNRESERVED; - CLKUSR = UNRESERVED; - nCEO = UNRESERVED; - ENABLE_CHIP_WIDE_RESET = OFF; - ENABLE_CHIP_WIDE_OE = OFF; - ENABLE_INIT_DONE_OUTPUT = OFF; - FLEX10K_JTAG_USER_CODE = 7F; - CONFIG_SCHEME_10K = PASSIVE_SERIAL; - MAX7000S_USER_CODE = FFFF; - FLEX10K_ENABLE_LOCK_OUTPUT = OFF; - MAX7000S_ENABLE_JTAG = ON; - MULTIVOLT_IO = OFF; - CONFIG_SCHEME_FLEX_6000 = PASSIVE_SERIAL; - FLEX6000_ENABLE_JTAG = OFF; - FLEX10K_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX10KA_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = ON; - FLEX6000_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - MAX7000AE_USER_CODE = FFFFFFFF; - MAX7000AE_ENABLE_JTAG = ON; - FLEX_CONFIGURATION_EPROM = AUTO; - CONFIG_EPROM_USER_CODE = FFFFFFFF; - CONFIG_EPROM_PULLUP_RESISTOR = ON; - MAX7000B_VCCIO_IOBANK1 = 3.3V; - MAX7000B_VCCIO_IOBANK2 = 3.3V; - MAX7000B_ENABLE_VREFA = OFF; - MAX7000B_ENABLE_VREFB = OFF; -END; - -GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS -BEGIN - OPTIMIZE_FOR_SPEED = 5; - MULTI_LEVEL_SYNTHESIS_MAX5000_7000 = OFF; - AUTO_GLOBAL_CLOCK = ON; - AUTO_GLOBAL_CLEAR = ON; - AUTO_GLOBAL_PRESET = ON; - AUTO_GLOBAL_OE = ON; - AUTO_FAST_IO = OFF; - DEVICE_FAMILY = ACEX1K; - AUTO_REGISTER_PACKING = OFF; - ONE_HOT_STATE_MACHINE_ENCODING = OFF; - AUTO_OPEN_DRAIN_PINS = ON; - AUTO_IMPLEMENT_IN_EAB = OFF; - MULTI_LEVEL_SYNTHESIS_MAX9000 = ON; - STYLE = FAST; -END; - -COMPILER_PROCESSING_CONFIGURATION -BEGIN - USE_QUARTUS_FITTER = ON; - DESIGN_DOCTOR = OFF; - DESIGN_DOCTOR_RULES = EPLD; - FUNCTIONAL_SNF_EXTRACTOR = OFF; - TIMING_SNF_EXTRACTOR = ON; - OPTIMIZE_TIMING_SNF = OFF; - LINKED_SNF_EXTRACTOR = OFF; - RPT_FILE_EQUATIONS = ON; - RPT_FILE_HIERARCHY = ON; - RPT_FILE_LCELL_INTERCONNECT = ON; - RPT_FILE_USER_ASSIGNMENTS = ON; - GENERATE_AHDL_TDO_FILE = OFF; - SMART_RECOMPILE = OFF; - FITTER_SETTINGS = NORMAL; - PRESERVE_ALL_NODE_NAME_SYNONYMS = OFF; -END; - -COMPILER_INTERFACES_CONFIGURATION -BEGIN - EDIF_NETLIST_WRITER = OFF; - EDIF_OUTPUT_VERSION = 200; - XNF_EMULATE_TRI_STATE_BUSES = INTERNAL_LOGIC; - XNF_TRANSLATE_INTERNAL_NODE_NAMES = ON; - XNF_GENERATE_AHDL_TDX_FILE = ON; - VERILOG_NETLIST_WRITER = OFF; - VHDL_NETLIST_WRITER = OFF; - USE_SYNOPSYS_SYNTHESIS = OFF; - SYNOPSYS_COMPILER = DESIGN; - SYNOPSYS_DESIGNWARE = OFF; - SYNOPSYS_HIERARCHICAL_COMPILATION = ON; - SYNOPSYS_BOUNDARY_OPTIMIZATION = OFF; - SYNOPSYS_MAPPING_EFFORT = MEDIUM; - VHDL_READER_VERSION = VHDL87; - VHDL_WRITER_VERSION = VHDL87; - VERILOG_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - VERILOG_TRUNCATE_HIERARCHY_PATH = OFF; - VHDL_TRUNCATE_HIERARCHY_PATH = OFF; - EDIF_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_FLATTEN_BUS = OFF; - VHDL_FLATTEN_BUS = OFF; - VERILOG_OUTPUT_DELAY_CONSTRUCTS = VO_FILE; - VHDL_OUTPUT_DELAY_CONSTRUCTS = VHO_FILE; - VHDL_GENERATE_CONFIGURATION_DECLARATION = OFF; - EDIF_INPUT_LMF1 = *.lmf; - EDIF_INPUT_LMF2 = *.lmf; - EDIF_OUTPUT_EDC_FILE = *.edc; - EDIF_INPUT_VCC = VCC; - EDIF_INPUT_GND = GND; - EDIF_OUTPUT_VCC = VCC; - EDIF_OUTPUT_GND = GND; - EDIF_INPUT_USE_LMF1 = OFF; - EDIF_INPUT_USE_LMF2 = OFF; - EDIF_OUTPUT_USE_EDC = OFF; - EDIF_OUTPUT_DELAY_CONSTRUCTS = EDO_FILE; - EDIF_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - EDIF_OUTPUT_INCLUDE_SPECIAL_PRIM = OFF; - EDIF_OUTPUT_FORCE_0NS_DELAYS = OFF; - EDIF_FLATTEN_BUS = OFF; - EDIF_BUS_DELIMITERS = []; - EDIF_INPUT_SHOW_LMF_MAPPING_MESSAGES = OFF; - NETLIST_OUTPUT_TIME_SCALE = 0.1ns; -END; - -CUSTOM_DESIGN_DOCTOR_RULES -BEGIN - RIPPLE_CLOCKS = ON; - GATED_CLOCKS = ON; - MULTI_LEVEL_CLOCKS = ON; - MULTI_CLOCK_NETWORKS = ON; - STATIC_HAZARDS_BEFORE_SYNTHESIS = ON; - STATIC_HAZARDS_AFTER_SYNTHESIS = OFF; - PRESET_CLEAR_NETWORKS = ON; - ASYNCHRONOUS_INPUTS = ON; - DELAY_CHAINS = ON; - RACE_CONDITIONS = ON; - EXPANDER_NETWORKS = ON; - MASTER_RESET = OFF; -END; - -SIMULATOR_CONFIGURATION -BEGIN - CHECK_OUTPUTS = OFF; - USE_DEVICE = OFF; - SETUP_HOLD = OFF; - OSCILLATION = OFF; - OSCILLATION_TIME = 0.0ns; - GLITCH = OFF; - GLITCH_TIME = 0.0ns; - START_TIME = 0.0ns; - BIDIR_PIN = STRONG; - END_TIME = 10.0us; -END; - -TIMING_ANALYZER_CONFIGURATION -BEGIN - ANALYSIS_MODE = REGISTERED_PERFORMANCE; - AUTO_RECALCULATE = OFF; - CUT_OFF_IO_PIN_FEEDBACK = ON; - CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; - LIST_ONLY_LONGEST_PATH = ON; - CELL_WIDTH = 18; - DELAY_MATRIX_OPTIONS = SHOW_ALL_PATHS; - INCLUDE_PATHS_GREATER_THAN = OFF; - INCLUDE_PATHS_GREATER_THAN_VALUE = 0.0ns; - INCLUDE_PATHS_LESS_THAN = OFF; - INCLUDE_PATHS_LESS_THAN_VALUE = 214.7483647ms; - REGISTERED_PERFORMANCE_OPTIONS = NUMBER_OF_PATHS; - LIST_PATH_COUNT = 10; - LIST_PATH_FREQUENCY = 10MHz; - CUT_OFF_RAM_REGISTERED_WE_PATHS = OFF; -END; - -OTHER_CONFIGURATION -BEGIN - LAST_MAXPLUS2_VERSION = 10.0; - EXPLICIT_FAMILY = 1; - COMPILER_DATA = "1,1,0,1,0,0,0,1,1,1,1,0,1,1,1"; - ORIGINAL_MAXPLUS2_VERSION = 9.6; - ROW_PINS_PERCENT = 50; - EXP_PER_LCELL_PERCENT = 100; - FAN_IN_PER_LCELL_PERCENT = 100; - LCELLS_PER_ROW_PERCENT = 100; - LOCAL_INTERCONNECT_PER_LAB_PERCENT = 100; - DEFAULT_9K_EXP_PER_LCELL = 1/2; - FLEX_10K_52_COLUMNS = 40; - NORMAL_LCELL_INSERT = ON; - CARRY_OUT_PINS_LCELL_INSERT = OFF; - ROW_PINS_LCELL_INSERT = ON; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX5000 -BEGIN - CASCADE_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CARRY_CHAIN_LENGTH = -1; - MINIMIZATION = FULL; - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = ON; - TURBO_BIT = OFF; - PARALLEL_EXPANDERS = OFF; - IGNORE_SOFT_BUFFERS = OFF; - FAST_IO = OFF; - SOFT_BUFFER_INSERTION = ON; - DECOMPOSE_GATES = ON; - REDUCE_LOGIC = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = ON; - SUBFACTOR_EXTRACTION = ON; - MULTI_LEVEL_FACTORING = ON; - RESYNTHESIZE_NETWORK = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - REGISTER_OPTIMIZATION = ON; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX7000 -BEGIN - CASCADE_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CARRY_CHAIN_LENGTH = -1; - MINIMIZATION = FULL; - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = ON; - TURBO_BIT = ON; - PARALLEL_EXPANDERS = OFF; - IGNORE_SOFT_BUFFERS = OFF; - FAST_IO = OFF; - SOFT_BUFFER_INSERTION = ON; - DECOMPOSE_GATES = ON; - REDUCE_LOGIC = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = ON; - SUBFACTOR_EXTRACTION = ON; - MULTI_LEVEL_FACTORING = ON; - RESYNTHESIZE_NETWORK = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - REGISTER_OPTIMIZATION = ON; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.CLASSIC -BEGIN - CASCADE_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CARRY_CHAIN_LENGTH = -1; - MINIMIZATION = FULL; - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = OFF; - TURBO_BIT = ON; - PARALLEL_EXPANDERS = OFF; - IGNORE_SOFT_BUFFERS = OFF; - FAST_IO = OFF; - SOFT_BUFFER_INSERTION = ON; - DECOMPOSE_GATES = ON; - REDUCE_LOGIC = OFF; - DUPLICATE_LOGIC_EXTRACTION = OFF; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = OFF; - SUBFACTOR_EXTRACTION = OFF; - MULTI_LEVEL_FACTORING = OFF; - RESYNTHESIZE_NETWORK = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - REGISTER_OPTIMIZATION = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.FLEX8000 -BEGIN - CASCADE_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = 2; - CARRY_CHAIN = IGNORE; - CARRY_CHAIN_LENGTH = 32; - MINIMIZATION = FULL; - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = OFF; - TURBO_BIT = OFF; - PARALLEL_EXPANDERS = OFF; - IGNORE_SOFT_BUFFERS = ON; - SOFT_BUFFER_INSERTION = ON; - DECOMPOSE_GATES = ON; - REDUCE_LOGIC = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = ON; - SUBFACTOR_EXTRACTION = ON; - MULTI_LEVEL_FACTORING = ON; - RESYNTHESIZE_NETWORK = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - REGISTER_OPTIMIZATION = ON; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX5000 -BEGIN - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = ON; - TURBO_BIT = OFF; - PARALLEL_EXPANDERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - IGNORE_SOFT_BUFFERS = OFF; - FAST_IO = OFF; - MINIMIZATION = FULL; - CASCADE_CHAIN = IGNORE; - CARRY_CHAIN = IGNORE; - SOFT_BUFFER_INSERTION = ON; - DECOMPOSE_GATES = ON; - REDUCE_LOGIC = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = OFF; - SUBFACTOR_EXTRACTION = OFF; - MULTI_LEVEL_FACTORING = ON; - RESYNTHESIZE_NETWORK = ON; - REGISTER_OPTIMIZATION = ON; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX7000 -BEGIN - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = ON; - TURBO_BIT = ON; - PARALLEL_EXPANDERS = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - IGNORE_SOFT_BUFFERS = OFF; - FAST_IO = OFF; - MINIMIZATION = FULL; - CASCADE_CHAIN = IGNORE; - CARRY_CHAIN = IGNORE; - SOFT_BUFFER_INSERTION = ON; - DECOMPOSE_GATES = ON; - REDUCE_LOGIC = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = OFF; - SUBFACTOR_EXTRACTION = OFF; - MULTI_LEVEL_FACTORING = ON; - RESYNTHESIZE_NETWORK = ON; - REGISTER_OPTIMIZATION = ON; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.CLASSIC -BEGIN - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = OFF; - TURBO_BIT = ON; - PARALLEL_EXPANDERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - IGNORE_SOFT_BUFFERS = OFF; - FAST_IO = OFF; - MINIMIZATION = FULL; - CASCADE_CHAIN = IGNORE; - CARRY_CHAIN = IGNORE; - SOFT_BUFFER_INSERTION = ON; - DECOMPOSE_GATES = ON; - REDUCE_LOGIC = OFF; - DUPLICATE_LOGIC_EXTRACTION = OFF; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = OFF; - SUBFACTOR_EXTRACTION = OFF; - MULTI_LEVEL_FACTORING = OFF; - RESYNTHESIZE_NETWORK = ON; - REGISTER_OPTIMIZATION = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.FLEX8000 -BEGIN - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = OFF; - TURBO_BIT = OFF; - PARALLEL_EXPANDERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - IGNORE_SOFT_BUFFERS = ON; - MINIMIZATION = FULL; - CASCADE_CHAIN = AUTO; - CARRY_CHAIN = AUTO; - SOFT_BUFFER_INSERTION = ON; - DECOMPOSE_GATES = ON; - REDUCE_LOGIC = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = ON; - SUBFACTOR_EXTRACTION = ON; - MULTI_LEVEL_FACTORING = ON; - RESYNTHESIZE_NETWORK = ON; - REGISTER_OPTIMIZATION = ON; - CASCADE_CHAIN_LENGTH = 2; - CARRY_CHAIN_LENGTH = 32; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX5000 -BEGIN - CASCADE_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CARRY_CHAIN_LENGTH = -1; - MINIMIZATION = PARTIAL; - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = OFF; - TURBO_BIT = OFF; - PARALLEL_EXPANDERS = OFF; - IGNORE_SOFT_BUFFERS = OFF; - FAST_IO = OFF; - SOFT_BUFFER_INSERTION = OFF; - DECOMPOSE_GATES = OFF; - REDUCE_LOGIC = OFF; - DUPLICATE_LOGIC_EXTRACTION = OFF; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = OFF; - SUBFACTOR_EXTRACTION = OFF; - MULTI_LEVEL_FACTORING = OFF; - RESYNTHESIZE_NETWORK = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - REGISTER_OPTIMIZATION = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX7000 -BEGIN - CASCADE_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CARRY_CHAIN_LENGTH = -1; - MINIMIZATION = PARTIAL; - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = OFF; - TURBO_BIT = ON; - PARALLEL_EXPANDERS = OFF; - IGNORE_SOFT_BUFFERS = OFF; - FAST_IO = OFF; - SOFT_BUFFER_INSERTION = OFF; - DECOMPOSE_GATES = OFF; - REDUCE_LOGIC = OFF; - DUPLICATE_LOGIC_EXTRACTION = OFF; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = OFF; - SUBFACTOR_EXTRACTION = OFF; - MULTI_LEVEL_FACTORING = OFF; - RESYNTHESIZE_NETWORK = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - REGISTER_OPTIMIZATION = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.CLASSIC -BEGIN - CASCADE_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CARRY_CHAIN_LENGTH = -1; - MINIMIZATION = PARTIAL; - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = OFF; - TURBO_BIT = ON; - PARALLEL_EXPANDERS = OFF; - IGNORE_SOFT_BUFFERS = OFF; - FAST_IO = OFF; - SOFT_BUFFER_INSERTION = OFF; - DECOMPOSE_GATES = ON; - REDUCE_LOGIC = OFF; - DUPLICATE_LOGIC_EXTRACTION = OFF; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = OFF; - SUBFACTOR_EXTRACTION = OFF; - MULTI_LEVEL_FACTORING = OFF; - RESYNTHESIZE_NETWORK = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - REGISTER_OPTIMIZATION = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.FLEX8000 -BEGIN - CASCADE_CHAIN = MANUAL; - CASCADE_CHAIN_LENGTH = 2; - CARRY_CHAIN = MANUAL; - CARRY_CHAIN_LENGTH = 32; - MINIMIZATION = PARTIAL; - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = OFF; - TURBO_BIT = OFF; - PARALLEL_EXPANDERS = OFF; - IGNORE_SOFT_BUFFERS = ON; - SOFT_BUFFER_INSERTION = ON; - DECOMPOSE_GATES = OFF; - REDUCE_LOGIC = OFF; - DUPLICATE_LOGIC_EXTRACTION = OFF; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = OFF; - SUBFACTOR_EXTRACTION = OFF; - MULTI_LEVEL_FACTORING = OFF; - RESYNTHESIZE_NETWORK = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - REGISTER_OPTIMIZATION = OFF; -END; - diff --git a/src/altera/acex/k30/VIDEO2.INC b/src/altera/acex/k30/VIDEO2.INC deleted file mode 100644 index 1c5f796..0000000 --- a/src/altera/acex/k30/VIDEO2.INC +++ /dev/null @@ -1,27 +0,0 @@ --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. - --- MAX+plus II Include File --- Version 10.0 9/14/2000 --- Created: Mon Nov 19 00:36:42 2001 - -FUNCTION video2 (clk42, start_up, copy_sinc_h, copy_sinc_v, wr, vai[19..0], d[7..0], mdi[15..0], vdm0[7..0], vdm1[7..0], vdm2[7..0], vdm3[7..0], zx_port[7..0], dir_port[7..0], double_cas, mouse_x[9..0], mouse_y[9..0]) - WITH (MODE, MOUSE) - RETURNS (ct[5..0], cth[5..0], ctv[8..0], ctf[6..0], blank, vao[15..0], vdo0[7..0], vdo1[7..0], vdo2[7..0], vdo3[7..0], v_wr[3..0], v_wen[3..0], v_cs[1..0], wr_pix, intt); diff --git a/src/altera/acex/k30/VIDEO2.TDF b/src/altera/acex/k30/VIDEO2.TDF deleted file mode 100644 index ea1e862..0000000 --- a/src/altera/acex/k30/VIDEO2.TDF +++ /dev/null @@ -1,783 +0,0 @@ - - TITLE "Video-controller"; - -INCLUDE "lpm_ram_dp"; - -PARAMETERS - ( - MODE = "SPRINTER", - MOUSE = "NO", - HOR_PLACE = H"50", - VER_PLACE = H"91" -- 122h/2 - ); - -SUBDESIGN video2 - ( - CLK42 : INPUT; - - CT[5..0] : OUTPUT; - CTH[5..0] : OUTPUT; - CTV[8..0] : OUTPUT; - CTF[6..0] : OUTPUT; - - BLANK : OUTPUT; - - START_UP : INPUT; - COPY_SINC_H : INPUT; - COPY_SINC_V : INPUT; - - WR : INPUT; - - VAI[19..0] : INPUT; -- input screen adress - - VAO[15..0] : OUTPUT; - - D[7..0] : INPUT; - MDI[15..0] : INPUT; - - VDO0[7..0] : OUTPUT; - VDO1[7..0] : OUTPUT; - VDO2[7..0] : OUTPUT; - VDO3[7..0] : OUTPUT; - - VDM0[7..0] : INPUT; - VDM1[7..0] : INPUT; - VDM2[7..0] : INPUT; - VDM3[7..0] : INPUT; - - V_WR[3..0] : OUTPUT; - V_WEN[3..0] : OUTPUT; - - V_CS[1..0] : OUTPUT; - WR_PIX : OUTPUT; - --- ZX_COLOR[3..0] : OUTPUT; - - ZX_PORT[7..0] : INPUT; - DIR_PORT[7..0] : INPUT; - -% - bit0 - Spectrum SCREEN Switch - bit1 - Spectrum Adress MODE - bit2 - Write to Spectrum Screen OFF - bit3 - MODE page 0/1 - bit4 - MODE on/off screen - - bit7..5 - Border -% - - INTT : OUTPUT; - - DOUBLE_CAS : INPUT; - - MOUSE_X[9..0] : INPUT; - MOUSE_Y[9..0] : INPUT; - - - ) -VARIABLE - --- CLK84 : NODE; --- CLK84_X : NODE; --- CLK84_Y : NODE; - - ZX_COLOR[3..0] : NODE; - - CT[5..0] : DFFE; - CTH[5..0] : DFFE; - CTV[8..0] : DFFE; - CTF[6..0] : DFF; - - VXA[19..0] : DFFE; - - VXD0[7..0] : DFFE; - VXD1[7..0] : DFFE; - VXD2[7..0] : DFFE; - VXD3[7..0] : DFFE; - - E_WR : NODE; - E_WRD : NODE; - - BLANK : NODE; - BORD : NODE; --- INTT_T : NODE; - INTTX : NODE; - - VLA[17..0] : DFF; --- SVA[17..0] : NODE; - SVA[17..0] : DFF; --- RSVA[8..0] : LCELL; - RSVA[8..0] : NODE; --- RSVA[8..0] : DFF; - - V_CST[1..0] : DFF; - VCM[2..0] : DFF; - TSN_W3 : DFF; - V_WE : DFF; - V_WEX : DFF; - - V_WEM : NODE; - V_WEM2 : NODE; - V_WRM : NODE; - V_WRM2 : NODE; -% - V_WEMM : NODE; - V_WEMMM : NODE; - V_WEMMN : NODE; - V_WEMMO : NODE; -% - V_WEMM : NODE; - V_WEMMM : NODE; - V_WEMMN : NODE; - V_WEMMO : NODE; - V_WEMMP : NODE; - V_WEMMQ : NODE; - V_WEMMR : NODE; - V_WEMMS : NODE; - V_WEMMT : NODE; - V_WEMMU : NODE; - V_WEMMV : NODE; - V_WEMMW : NODE; - V_WEMMX : NODE; - V_WEMMY : NODE; - V_WEMMZ : NODE; - - - - V_WET[3..0] : DFF; - - D_PIC0[7..0] : DFFE; --- D_PIC0_[7..0] : LCELL; - - D_PIC0_[7..0] : DFFE; - D_PIC1_[7..0] : DFFE; - D_PIC2_[7..0] : DFFE; - D_PIC3_[7..0] : DFFE; - - D_PICX_[7..0] : NODE; - - LWR_PIC : NODE; - LWR_COL : NODE; - - WR_PIC : DFF; - WR_COL : DFF; - LD_PIC : NODE; -MXL: NODE; -MXR: NODE; - - RBRVA[10..8]: DFF; - BRVA[7..0] : DFF; - DCOL[7..0] : DFFE; - - MXWE : NODE; --- MXCE : NODE; - - AX128 : NODE; - - BRD[2..0] : NODE; - - ZX_COL[3..0] : LCELL; - - ZXA15 : NODE; - ZXS[5..0] : NODE; - ZX_SCREEN : NODE; - SCR128 : NODE; - - MODE0[7..0] : DFFE; - MODE1[7..0] : DFFE; - MODE2[7..0] : DFFE; --- MODE3[7..0] : DFF; - - WR_MODE : DFF; - LWR_MODE : NODE; - X_MODE[7..4]: NODE; - X_MODE_BOND : NODE; - --- M_CTV[2..0] : DFF; --- M_CT[5..3] : DFF; - M_CTV[2..0] : LCELL; - M_CT[5..3] : LCELL; - - DOUBLE : DFFE; - - PIC_CLK : NODE; - - MS_X[9..0] : DFF; - MS_Y[9..0] : DFF; - - MS_POINT : NODE; - MS_POINT2 : NODE; - MS_PNT : NODE; - - MS_DAT : LPM_RAM_DP WITH (LPM_WIDTH=16,LPM_WIDTHAD=8,LPM_FILE="MOUSE.MIF"); - - SCR_ENA : DFFE; - V_WR_[3..0] : LCELL; - V_WEY[3..0] : LCELL; - - V_WE_R : NODE; - - V_CSX[3..0] : NODE; - - V_EN[3..0] : NODE; - - F_WR : NODE; - -BEGIN - - DEFAULTS - WR_MODE.d = VCC; -- WR_MODE2.d = VCC; -- WR_MODE2X.d = VCC; - V_CST[].d = VCC; V_WR[] = VCC; TSN_W3.d = VCC; - V_WE.d = VCC; WR_COL.d = VCC; WR_PIC.d = VCC; - V_WET[].d = VCC; - END DEFAULTS; - - ZX_COLOR[] = ZX_COL[]; - --- === MOUSE counters ======== - - MS_X[].clk = !CT1; - CASE LCELL(CTH[5..2] == 12) IS - WHEN 0 => MS_X[] = MS_X[] + 1; - WHEN 1 => MS_X[] = (!MOUSE_X[9..0]); - END CASE; - - MS_Y[].clk = !CTH5; - CASE LCELL(CTV8 & !CTV5 & CTV4) IS - WHEN 0 => MS_Y[] = MS_Y[] + 1; - WHEN 1 => MS_Y[] = (GND,!MOUSE_Y[8..0]); - END CASE; - - MS_PNT = DFF(((MS_X[] == B"100000XXXX") & (MS_Y[] == B"100000XXXX")),CLK42,,); - - MS_DAT.wren = GND; - MS_DAT.data[] = GND; - MS_DAT.wraddress[] = GND; - MS_DAT.wrclock = CLK42; - MS_DAT.wrclken = GND; - MS_DAT.rden = VCC; - MS_DAT.rdaddress[] = (MS_Y[3..0],MS_X[3..0]); - MS_DAT.rdclock = CLK42; - MS_DAT.rdclken = VCC; - - IF MOUSE == "NO" GENERATE - MS_POINT = GND; - MS_POINT2 = GND; - ELSE GENERATE - MS_POINT = DFF((MS_PNT & MS_DAT.q0),CLK42,,); - MS_POINT2 = DFF((MS_PNT & MS_DAT.q1),CLK42,,); - END GENERATE; - --- === Sinc-counts GENERATOR ============================================ - --- CT[].clrn = START_UP; - --- (,CTH[5..0].clrn,CT[5].clrn) = !COPY_SINC_H or HOR_PLACE; --- (,CTH[5..0].prn ,CT[5].prn ) = !COPY_SINC_H or !HOR_PLACE; - --- CTV[].clrn = !COPY_SINC_V or VER_PLACE; --- CTV[].prn = !COPY_SINC_V or !VER_PLACE; - - CT[5].clrn = !COPY_SINC_H; - - -- set CTH to 50 (32h) - CTH[0].clrn = !COPY_SINC_H; - CTH[1].prn = !COPY_SINC_H; - CTH[2].clrn = !COPY_SINC_H; - CTH[3].clrn = !COPY_SINC_H; - CTH[4].prn = !COPY_SINC_H; - CTH[5].prn = !COPY_SINC_H; - - -- set CTV to 122h - CTV[0].clrn = !COPY_SINC_V; - CTV[1].prn = !COPY_SINC_V; - CTV[3..2].clrn = !COPY_SINC_V; - - CTV[4].clrn = !COPY_SINC_V; - CTV[5].prn = !COPY_SINC_V; - CTV[7..6].clrn = !COPY_SINC_V; - CTV[8].prn = !COPY_SINC_V; - - CT[5..0].clk = CLK42; - CTH[5..0].clk = CLK42; - CTV[8..0].clk = CLK42; - - CT[2..0].ena = VCC; - - CASE CT[2..0] IS - WHEN 0 => CT[2..0] = 1; - WHEN 1 => CT[2..0] = 2; - WHEN 2 => CT[2..0] = 4; - WHEN 3 => CT[2..0] = 4; - WHEN 4 => CT[2..0] = 5; - WHEN 5 => CT[2..0] = 6; - WHEN 6 => CT[2..0] = 0; - WHEN 7 => CT[2..0] = 0; - END CASE; - - -- for remove sinc jitter --- CT[5..3].ena = DFF(((CT0 & CT2) or (COPY_SINC_H & !CT4)),CLK42,,); - CT[5..3].ena = DFF((CT0 & CT2),CLK42,,); - CT[5..3] = CT[5..3]+1; -% - CASE CT[4..3] IS - WHEN 0 => CT[5..3] = CT[5..3]+1; - WHEN 1 => CT[5..3] = CT[5..3]+1; - WHEN 2 => CT[5..3] = CT[5..3]+1; - WHEN 3 => CT[5..3] = CT[5..3]+1; - END CASE; -% - CTH[].ena = DFF(((CT[5..2] == 15) & CT0),CLK42,,); - CTV[].ena = DFF(((CT[5..2] == 15) & CT0 & (CTH[] == 48)),CLK42,,); - - IF CTH[] == 55 THEN - CTH[] = GND; - ELSE - CTH[] = CTH[] + 1; - END IF; - - IF CTV[] == 319 THEN - CTV[] = GND; - ELSE - CTV[] = CTV[] + 1; - END IF; - - CTF[].clk = CTV8; - CTF[] = CTF[]+1; - --- ==== Video ========================================================== - - ZXS[] = ZX_PORT[5..0]; -- pages ZX Screens - ZX_SCREEN = ZX_PORT6; -- enable ZX Screen write - ZXA15 = ZX_PORT7; -- ZX A15' line - - SCR128 = DIR_PORT0; - --- WR_PIX = LCELL(TSN_W3); - WR_PIX = TSN_W3; - - DOUBLE.clk = CLK42; DOUBLE.ena = !E_WR; DOUBLE = DOUBLE_CAS; - VXA[].clk = CLK42; VXA[].ena = !E_WR; - - VXD0[].clk = CLK42; VXD0[].ena = !E_WRD; VDO0[] = VXD0[]; - VXD1[].clk = CLK42; VXD1[].ena = !E_WRD; VDO1[] = VXD1[]; - VXD2[].clk = CLK42; VXD2[].ena = !E_WRD; VDO2[] = VXD2[]; - VXD3[].clk = CLK42; VXD3[].ena = !E_WRD; VDO3[] = VXD3[]; - --- VXD0[] = D[]; --- VXD1[] = D[]; --- VXD2[] = D[]; --- VXD3[] = D[]; - - (VXD0[],VXD1[]) = MDI[]; - (VXD2[],VXD3[]) = MDI[]; - - BRD[] = DIR_PORT[7..5]; - - VCM[].clk = CLK42; - TSN_W3.clk = CLK42; - V_CST[].clk = CLK42; - V_WE.clk = CLK42; - V_WET[].clk = CLK42; - VLA[].clk = CLK42; - - SCR_ENA.clk = CLK42; - SCR_ENA.ena = !E_WR; - SCR_ENA.d = !(VAI19 or ZX_SCREEN); - - E_WRD = DFF(E_WR,CLK42,,); - E_WR = LCELL(WR or !(VAI19 or ZX_SCREEN) or !DFF(WR,CLK42,,)); --- E_WR = LCELL(WR or !DFF(WR,CLK42,,)); - --- **************************************************** - -IF MODE == "SPRINTER" GENERATE - --- VAI[19] - switch adress mode 1 - graf mode, 0 - spectrum mode - --- MXWE = DFF(((DFF(E_WR,CLK42,,) or SCR_ENA) & MXWE),CLK42,,V_WE); - MXWE = DFF(MXWE,CLK42,E_WR,V_WE); - - IF VAI[19] THEN - -- in graf mode all 256k(512k) range - VXA[] = VAI[]; - ELSE - -- in spectrum mode 8k/16k range pages - VXA[] = (GND,GND,VAI[7..0],ZXS[4..1],LCELL(ZXS0 xor ZXA15 xor VAI13),VAI[12..8]); - END IF; - --- BORD = DFF((MODE0[7..4] == 15),WR_PIC,,); --- BLANK = DFF((BORD & MODE03 & MODE02),WR_PIC,,); --- INTTX = DFF((BORD & MODE03 & MODE02 & MODE00),WR_PIC,,); - - BORD = DFF((MODE0[7..4] == 15),LWR_COL,,); - BLANK = DFF(((BORD & MODE03 & MODE02) or DIR_PORT4),LWR_COL,,); - INTTX = DFF((BORD & MODE03 & MODE02 & MODE00),LWR_COL,,); - - INTT = DFF(!(INTTX & (CTV[2..0] == 7)),CT5,,); - --- INTT = DFF((INTTX or DFF(INTTX,CT5,,)),CT5,,); --- INTT = DFF(!(BLANK & (CTV[2..0] == 7)),CLK42,,MODE0[0]); - - CASE CT[2..0] IS - WHEN B"110" => VCM[2..0].d = 5; -- 110 -> 101 6 -> 5 - WHEN B"000" => VCM[2..0].d = 1; -- 000 -> 001 0 -> 1 - WHEN B"001" => VCM[2..0].d = 4; -- 001 -> 100 1 -> 4 - WHEN B"010" => VCM[2..0].d = 3; -- 010 -> 011 2 -> 3 - WHEN B"100" => VCM[2..0].d = 2; -- 100 -> 010 4 -> 2 - WHEN B"101" => VCM[2..0].d = 0; -- 101 -> 000 5 -> 0 - END CASE; - - CASE VCM[1..0] IS - WHEN 0 => - VLA[].d = (BRVA[7..0],VCC,VCC,VCC,VCC,VCC,RBRVA[10..8],GND,GND); - V_CST[].d = (VCC,GND); - V_WE.d = VCC; - V_WEX.d = VCC; - -TSN_W3.d = X_MODE_BOND; -% - IF VCM2 THEN --- TSN_W3.d = X_MODE5; - TSN_W3.d = X_MODE_BOND; --- V_CST[].d = (VCC,X_MODE5); - ELSE - TSN_W3.d = X_MODE_BOND; --- V_CST[].d = (VCC,X_MODE_BOND); - END IF; -% - - WHEN 1 => - WR_PIC.d = !VCM2; - WR_COL.d = VCM2; - VLA[].d = SVA[]; - V_CST[].d = (VCC,GND); - V_WE.d = VCC; - V_WEX.d = VCC; - WHEN 2 => - VLA[].d = VXA[17..0]; - V_CST[].d = (!VXA18,VXA18) or MXWE; - V_WE.d = MXWE; - V_WEX.d = GND; - V_WET[].d = MXWE or !((!VXA1 & !VXA0),(!VXA1 & VXA0),(VXA1 & !VXA0),(VXA1 & VXA0)); - WHEN 3 => --- WR_PIC.d = X_MODE5; --- NEW 26.08.2022, fix bug with first column --- it was reproducing when changes mode 320 -> 640, like any 320px screen squares -> text mode squares - WR_PIC.d = MODE0[5]; - VLA[].d = (DIR_PORT3,CTH[5..0],CT5,VCC,VCC,CTV[8..3],GND,GND); - WR_MODE.d = !(CT[5..3] == B"111") & !(CT4 & CT3 & !MODE0[5]); - V_CST[].d = (VCC,GND); - V_WE.d = VCC; - V_WEX.d = VCC; - END CASE; - --- choose V-RAM komplect - - V_CST1.prn = GND; --- V_CS0.clrn = GND; - V_CST0.prn = (LCELL(DFF(GND,!CLK42,,!V_CST0))); - V_CS1 = VCC; --- V_CS0 = LCELL(V_CST0); - - V_CSX0 = LCELL(!CLK42); - V_CSX1 = LCELL(V_CSX0); - V_CSX2 = LCELL(V_CSX1 & V_CSX0); - V_CSX3 = LCELL(V_CSX2); - --- V_CS0 = V_CSX3; - V_CS0 = GND; - --- ===================== - - SVA[].clk = CLK42; - SVA[9..6] = MODE0[3..0]; --- RSVA[].clk = CLK42; - (SVA[12..10],SVA[5..0]) = RSVA[]; - --- M_CTV[2..0].clk = CLK42; --- M_CT[5..3].clk = CLK42; - M_CTV[2..0] = (!MODE2[2] & CTV[2..0]) or MODE2[2] & (MODE2[1],CTV[2..1]); - M_CT[5..3] = (!MODE2[2] & (CT[5],!CT[4..3])) or MODE2[2] & (MODE2[0],!CT[5..4]); - - CASE (!VCM2,MODE0[4]) IS --- CASE (!VCM1,MODE0[4]) IS - WHEN B"X0" => - -- Graf adress -- - RSVA[] = (M_CTV[2..0],MODE1[2..0],M_CT[5..3]); - SVA[17..13] = MODE1[7..3]; - --- SVA[12..10] = CTV[2..0]; --- SVA[5..0] = (MODE1[2..0],CT5,!CT[4..3]); - WHEN B"01" => - -- ZX-atr adress -- - RSVA[] = (MODE2[2..0],SCR128,VCC,VCC,GND,!MODE0[7..6]); - SVA[17..13] = MODE2[7..3]; - --- SVA[12..10] = MODE2[2..0]; --- SVA[5..0] = (SCR128,VCC,VCC,GND,!MODE0[7..6]); - WHEN B"11" => - -- ZX-pic adress -- - RSVA[] = (MODE1[2..0],SCR128,MODE0[7..6],CTV2,!CTV1,!CTV0); - SVA[17..13] = MODE1[7..3]; - --- SVA[12..10] = MODE1[2..0]; --- SVA[5..0] = (SCR128,MODE0[7..6],CTV2,!CTV1,!CTV0); - END CASE; - --- X_MODE_BOND = LCELL(LCELL(DCOL[7..4] == 15) & LCELL(DCOL[3..0] == 15) & DFF((MODE0[7] & MODE0[5] & !MODE0[4]),LWR_COL,VCC,VCC)); - X_MODE_BOND = GND; - --- LD_PIC = LCELL((MODE0[5] & DFF((CT[5..3] == B"000"),CLK42,,)) or (!MODE0[5] & DFF((CT[4..2] == B"000"),CLK42,,))); - LD_PIC = LCELL((MODE0[5] & DFF((CT[5..3] == B"000"),CLK42,,)) or (!MODE0[5] & DFF((CT[4..2] == B"000"),CLK42,,))); - - --- CASE (DFF(VLA1,!CLK42,,),DFF(VLA0,!CLK42,,)) IS - --- D_PIC0_[].clk = !CLK42; --- D_PIC1_[].clk = !CLK42; --- D_PIC2_[].clk = !CLK42; --- D_PIC3_[].clk = !CLK42; - --- PIC_CLK = LCELL(LCELL(CLK42)); - PIC_CLK = !CLK42; - - D_PIC0_[].clk = PIC_CLK; - D_PIC1_[].clk = PIC_CLK; - D_PIC2_[].clk = PIC_CLK; - D_PIC3_[].clk = PIC_CLK; - - D_PIC0_[] = VDM0[]; - D_PIC1_[] = VDM1[]; - D_PIC2_[] = VDM2[]; - D_PIC3_[] = VDM3[]; - - CASE (DFF(VLA1,CLK42,,),DFF(VLA0,CLK42,,)) IS - WHEN 0 => D_PICX_[] = D_PIC0_[]; - WHEN 1 => D_PICX_[] = D_PIC1_[]; - WHEN 2 => D_PICX_[] = D_PIC2_[]; - WHEN 3 => D_PICX_[] = D_PIC3_[]; - END CASE; - - MODE0[].ena = VCC; - MODE1[].ena = VCC; - MODE2[].ena = VCC; - MODE0[].clk = LWR_MODE; - MODE1[].clk = LWR_MODE; - MODE2[].clk = LWR_MODE; - MODE0[].d = VDM3[]; - MODE1[].d = VDM2[]; - MODE2[].d = VDM1[]; - LWR_MODE = LCELL(LCELL(WR_MODE)); -% - MODE0[].ena = LWR_MODE; - MODE1[].ena = LWR_MODE; - MODE2[].ena = LWR_MODE; - MODE0[].clk = CLK42; - MODE1[].clk = CLK42; - MODE2[].clk = CLK42; - MODE0[].d = D_PIC3_[]; - MODE1[].d = D_PIC2_[]; - MODE2[].d = D_PIC1_[]; - LWR_MODE = DFF(!WR_MODE,CLK42,,); -% - X_MODE7 = DFF(MODE0[7],LWR_COL,,); - X_MODE6 = DFF(MODE0[6],LWR_COL,,); - X_MODE5 = DFF(MODE0[5],LWR_COL,,); - X_MODE4 = DFF(MODE0[4],LWR_COL,,); - - VAO[] = VLA[17..2]; - - WR_PIC.clk = CLK42; - WR_COL.clk = CLK42; - WR_MODE.clk = CLK42; - --- LWR_PIC = LCELL(LCELL(WR_PIC)); --- LWR_COL = LCELL(LCELL(WR_COL)); --- LWR_PIC = LCELL(WR_PIC); --- LWR_COL = LCELL(WR_COL); - LWR_PIC = DFF(WR_PIC,CLK42,,); - LWR_COL = DFF(WR_COL,CLK42,,); - --- D_PIC0[].ena = VCC; --- D_PIC0[].clk = (LWR_PIC); - D_PIC0[].ena = !LWR_PIC; - D_PIC0[].clk = CLK42; - - - - - IF LD_PIC THEN --- D_PIC0[] = D_PIC0_[]; - D_PIC0[] = D_PICX_[]; - ELSE - D_PIC0[] = (D_PIC0[6..0],GND); - END IF; - - --- DCOL[].clk = (LWR_COL); - DCOL[].ena = !LWR_COL; - DCOL[].clk = CLK42; - - IF DFF((MODE0[7..4] == 15),WR_PIC,,) THEN - DCOL[].d = (B"00",BRD[2..0],BRD[2..0]); - ELSE --- DCOL[].d = D_PIC0_[]; - DCOL[].d = D_PICX_[]; - END IF; - - DCOL[].clrn = !BLANK; - - BRVA[].clk = CLK42; - BRVA[].clrn = !MS_POINT; - BRVA[].prn = !MS_POINT2; - --- MODE0[4] - graph / text --- MODE0[5] - 320 / 640 resolution - --- CASE (LCELL(X_MODE4 or X_MODE5),CT2) IS - CASE (DFF((MODE0[4] or MODE0[5]),LWR_COL,,),CT2) IS - WHEN B"1X" => BRVA[7..0] = DCOL[]; - WHEN B"01" => BRVA[7..0] = (B"0000",DCOL[7..4]); - WHEN B"00" => BRVA[7..0] = (B"0000",DCOL[3..0]); - END CASE; - --- BRVA[10..8] = (x_mode4,RBRVA[9..8]); - RBRVA[].clk = CLK42; - - CASE (BORD,X_MODE4) IS - WHEN B"X0" => RBRVA[10..8].d = (GND,X_MODE[7..6]); - WHEN B"X1" => RBRVA[10..8].d = (VCC,(CTF4 & !BLANK),D_PIC0[7]); - END CASE; - - RBRVA[9..8].clrn = !BORD; - RBRVA[10].prn = !BORD; - - CASE (RBRVA[9..8],BRVA7) IS - WHEN 0,1,4,7 => ZX_COL[] = (BRVA[6],BRVA[5..3]); - WHEN 2,3,6,5 => ZX_COL[] = (BRVA[6],BRVA[2..0]); - END CASE; - --- V_WET[].prn = LCELL(DFF(GND,!CLK42,,!V_WE)); --- V_WE.prn = LCELL(DFF(GND,!CLK42,,!V_WE)); - - V_WE_R = DFF(GND,!CLK42,,!V_WE); - V_WE.prn = V_WE_R; - V_WET[].prn = V_WE_R; - --- V_WR[] = LCELL(V_WE) or !((!VXA1 & !VXA0),(!VXA1 & VXA0),(VXA1 & !VXA0),(VXA1 & VXA0)); - --- V_WR[] = (V_WE) or !( - - V_WEX.clk = CLK42; --- V_WEX.d = V_WE; --- V_WEX.prn = (DFF(GND,CLK42,,!V_WEX)); - - - - - V_WEMMM = LCELL(V_WE); --- V_WEMMN = LCELL(V_WEMMM); -- bios ok, fn ok, fnf1 failed, zx almost ok --- V_WEMMO = LCELL(V_WEMMN); -- green arts --- V_WEMMP = LCELL(V_WEMMO); -- blue + pink arts --- V_WEMMR = LCELL(V_WEMMP); -- no F1 issue, but red arts (fix by finger, not enough capacity??) --- V_WEMMS = LCELL(V_WEMMR); --- V_WEMMT = LCELL(V_WEMMS); --- V_WEMMU = LCELL(V_WEMMT); --- V_WEMMV = LCELL(V_WEMMU); --- V_WEMMW = LCELL(V_WEMMV); --- V_WEMMX = LCELL(V_WEMMW); --- V_WEMMY = LCELL(V_WEMMX); --- V_WEMMZ = LCELL(V_WEMMY); - - V_WRM = LCELL(V_WE or V_WEMMM); - - --- V_WRM = LCELL(V_WEMMN or V_WEMMM); --- V_WRM2 = LCELL(V_WEMMN or V_WEMMM); --- V_WRM2 = LCELL(V_WEMMR); --- V_WRM = LCELL(V_WEMMM or V_WEMMN); --- V_WRM2 = LCELL(V_WEMMM or V_WEMMN); - - V_WEM = (V_WE); - --- V_WEM2 = LCELL(V_WE); --- V_WEM = LCELL(V_WEMMM & V_WEMMN); --- V_WEM2 = LCELL(V_WEMMM & V_WEMMO); - ---- LWR_COL = DFF(WR_COL,CLK42,,); - F_WR = ((LCELL(LCELL(LCELL(DFF(VCC,V_WE,,)))))); ---- F_WR = DFF(V_WE,CLK42,,); --- V_WEMMZ = LCELL(CLK42); - V_EN3 = (DFF(!(!VXA1 & (!VXA0 or DOUBLE)), CLK42, F_WR,)); - V_EN2 = (DFF(!(!VXA1 & (VXA0 or DOUBLE)), CLK42, F_WR,)); - V_EN1 = (DFF(!(VXA1 & (!VXA0 or DOUBLE)), CLK42, F_WR,)); - V_EN0 = (DFF(!(VXA1 & (VXA0 or DOUBLE)), CLK42, F_WR,)); - - --- V_WR_3 = LCELL(V_WRM or V_EN3); --- V_WR_2 = LCELL(V_WRM or V_EN2); --- V_WR_1 = LCELL(V_WRM or V_EN1); --- V_WR_0 = LCELL(V_WRM or V_EN0); - V_WR_3 = (LCELL(LCELL(LCELL(V_WRM or V_EN3)))); - V_WR_2 = (LCELL(LCELL(LCELL(V_WRM or V_EN2)))); - V_WR_1 = (LCELL(LCELL(LCELL(V_WRM or V_EN1)))); - V_WR_0 = (LCELL(LCELL(LCELL(V_WRM or V_EN0)))); - - V_WEY3 = LCELL(V_WE or V_EN3); - V_WEY2 = LCELL(V_WE or V_EN2); - V_WEY1 = LCELL(V_WE or V_EN1); - V_WEY0 = LCELL(V_WE or V_EN0); - - V_WR[] = V_WR_[]; -- V_WR0-3 - V_WEN[] = V_WEY[]; -- VD0-3 - - - - - -% - V_WEMMM = LCELL(V_WE); - V_WEMMN = LCELL(V_WEMMM); - V_WEMMO = LCELL(V_WEMMN); - V_WEMM = LCELL(V_WEMMO); - - V_WRM = LCELL(V_WEMMN & V_WEMMM); - V_WRM2 = LCELL(V_WEMMN & V_WEMMM); - - V_WEM = LCELL(V_WEMMM & V_WEMMO); - V_WEM2 = LCELL(V_WEMMM & V_WEMMO); - - V_EN3 = DFF(!(!VXA1 & (!VXA0 or DOUBLE)),CLK42,F_WR,); - V_EN2 = DFF(!(!VXA1 & (VXA0 or DOUBLE)) ,CLK42,F_WR,); - V_EN1 = DFF(!(VXA1 & (!VXA0 or DOUBLE)) ,CLK42,F_WR,); - V_EN0 = DFF(!(VXA1 & (VXA0 or DOUBLE)) ,CLK42,F_WR,); - - F_WR = DFF(VCC,V_WE,,); - - V_WR_3 = V_WRM or V_EN3; - V_WR_2 = V_WRM2 or V_EN2; - V_WR_1 = V_WRM or V_EN1; - V_WR_0 = V_WRM or V_EN0; - - V_WEY3 = V_WEM or V_EN3; - V_WEY2 = V_WEM2 or V_EN2; - V_WEY1 = V_WEM or V_EN1; - V_WEY0 = V_WEM or V_EN0; - - V_WR[] = V_WR_[]; - V_WEN[] = V_WEY[]; -% - - - - - --- CLK84 = LCELL(CLK42 xor CLK84_X); --- CLK84_X = DFF(!CLK84_X,CLK84,,); --- CLK84_Y = CLK84; - -END GENERATE; -- end "sprinter" mode - - -END; diff --git a/src/altera/acex/k30/VIDEO2_T1.TDF b/src/altera/acex/k30/VIDEO2_T1.TDF deleted file mode 100644 index 8e3bb3e..0000000 --- a/src/altera/acex/k30/VIDEO2_T1.TDF +++ /dev/null @@ -1,708 +0,0 @@ - - TITLE "Video-controller"; - -INCLUDE "lpm_ram_dp"; - -PARAMETERS - ( - MODE = "SPRINTER", - MOUSE = "NO", - HOR_PLACE = H"50", - VER_PLACE = H"91" -- 122h/2 - ); - -SUBDESIGN video2 - ( - CLK42 : INPUT; - - CT[5..0] : OUTPUT; - CTH[5..0] : OUTPUT; - CTV[8..0] : OUTPUT; - CTF[6..0] : OUTPUT; - - BLANK : OUTPUT; - - START_UP : INPUT; - COPY_SINC_H : INPUT; - COPY_SINC_V : INPUT; - - WR : INPUT; - - VAI[19..0] : INPUT; -- input screen adress - - VAO[15..0] : OUTPUT; - - D[7..0] : INPUT; - MDI[15..0] : INPUT; - - VDO0[7..0] : OUTPUT; - VDO1[7..0] : OUTPUT; - VDO2[7..0] : OUTPUT; - VDO3[7..0] : OUTPUT; - - VDM0[7..0] : INPUT; - VDM1[7..0] : INPUT; - VDM2[7..0] : INPUT; - VDM3[7..0] : INPUT; - - V_WR[3..0] : OUTPUT; - V_WEN[3..0] : OUTPUT; - - V_CS[1..0] : OUTPUT; - WR_PIX : OUTPUT; - --- ZX_COLOR[3..0] : OUTPUT; - - ZX_PORT[7..0] : INPUT; - DIR_PORT[7..0] : INPUT; - -% - bit0 - Spectrum SCREEN Switch - bit1 - Spectrum Adress MODE - bit2 - Write to Spectrum Screen OFF - bit3 - MODE page 0/1 - bit4 - MODE on/off screen - - bit7..5 - Border -% - - INTT : OUTPUT; - - DOUBLE_CAS : INPUT; - - MOUSE_X[9..0] : INPUT; - MOUSE_Y[9..0] : INPUT; - - - ) -VARIABLE - - CLK84 : NODE; - CLK84_X : NODE; - CLK84_Y : NODE; - - ZX_COLOR[3..0] : NODE; - - CT[5..0] : DFFE; - CTH[5..0] : DFFE; - CTV[8..0] : DFFE; - CTF[6..0] : DFF; - - VXA[19..0] : DFFE; - - VXD0[7..0] : DFFE; - VXD1[7..0] : DFFE; - VXD2[7..0] : DFFE; - VXD3[7..0] : DFFE; - - E_WR : NODE; - E_WRD : NODE; - - BLANK : NODE; - BORD : NODE; --- INTT_T : NODE; - INTTX : NODE; - - VLA[17..0] : DFF; --- SVA[17..0] : NODE; - SVA[17..0] : DFF; --- RSVA[8..0] : LCELL; - RSVA[8..0] : NODE; --- RSVA[8..0] : DFF; - - V_CST[1..0] : DFF; - VCM[2..0] : DFF; - TSN_W3 : DFF; - V_WE : DFF; - V_WEX : DFF; - - V_WEM : NODE; - V_WEM1 : NODE; - V_WEM2 : NODE; - V_WEM3 : NODE; - V_WRM : NODE; - V_WRM1 : NODE; - V_WRM2 : NODE; - V_WRM3 : NODE; - - V_WEMM : NODE; - V_WEMMM : NODE; - V_WEMMN : NODE; - V_WEMMO : NODE; - V_WEMMP : NODE; - V_WEMMQ : NODE; - V_WEMMR : NODE; - V_WEMMS : NODE; - V_WEMMT : NODE; - V_WEMMU : NODE; - V_WEMMV : NODE; - V_WEMMW : NODE; - V_WEMMX : NODE; - V_WEMMY : NODE; - V_WEMMZ : NODE; - - V_WET[3..0] : DFF; - - D_PIC0[7..0] : DFFE; --- D_PIC0_[7..0] : LCELL; - - D_PIC0_[7..0] : DFFE; - D_PIC1_[7..0] : DFFE; - D_PIC2_[7..0] : DFFE; - D_PIC3_[7..0] : DFFE; - - D_PICX_[7..0] : NODE; - - LWR_PIC : NODE; - LWR_COL : NODE; - - WR_PIC : DFF; - WR_COL : DFF; - LD_PIC : NODE; - - RBRVA[10..8]: DFF; - BRVA[7..0] : DFF; - DCOL[7..0] : DFFE; - - MXWE : NODE; --- MXCE : NODE; - - AX128 : NODE; - - BRD[2..0] : NODE; - - ZX_COL[3..0] : LCELL; - - ZXA15 : NODE; - ZXS[5..0] : NODE; - ZX_SCREEN : NODE; - SCR128 : NODE; - - MODE0[7..0] : DFFE; - MODE1[7..0] : DFFE; - MODE2[7..0] : DFFE; --- MODE3[7..0] : DFF; - - WR_MODE : DFF; - LWR_MODE : NODE; - X_MODE[7..4]: NODE; - X_MODE_BOND : NODE; - --- M_CTV[2..0] : DFF; --- M_CT[5..3] : DFF; - M_CTV[2..0] : LCELL; - M_CT[5..3] : LCELL; - - DOUBLE : DFFE; - - PIC_CLK : NODE; - - MS_X[9..0] : DFF; - MS_Y[9..0] : DFF; - - MS_POINT : NODE; - MS_POINT2 : NODE; - MS_PNT : NODE; - - MS_DAT : LPM_RAM_DP WITH (LPM_WIDTH=16,LPM_WIDTHAD=8,LPM_FILE="MOUSE.MIF"); - - SCR_ENA : DFFE; - V_WR_[3..0] : LCELL; - V_WEY[3..0] : LCELL; - - V_WE_R : NODE; - - V_CSX[3..0] : NODE; - - V_EN[3..0] : NODE; - - F_WR : NODE; - -BEGIN - - DEFAULTS - WR_MODE.d = VCC; -- WR_MODE2.d = VCC; -- WR_MODE2X.d = VCC; - V_CST[].d = VCC; V_WR[] = VCC; TSN_W3.d = VCC; - V_WE.d = VCC; WR_COL.d = VCC; WR_PIC.d = VCC; - V_WET[].d = VCC; - END DEFAULTS; - - ZX_COLOR[] = ZX_COL[]; - --- === MOUSE counters ======== - - MS_X[].clk = !CT1; - CASE LCELL(CTH[5..2] == 12) IS - WHEN 0 => MS_X[] = MS_X[] + 1; - WHEN 1 => MS_X[] = (!MOUSE_X[9..0]); - END CASE; - - MS_Y[].clk = !CTH5; - CASE LCELL(CTV8 & !CTV5 & CTV4) IS - WHEN 0 => MS_Y[] = MS_Y[] + 1; - WHEN 1 => MS_Y[] = (GND,!MOUSE_Y[8..0]); - END CASE; - - MS_PNT = DFF(((MS_X[] == B"100000XXXX") & (MS_Y[] == B"100000XXXX")),CLK42,,); - - MS_DAT.wren = GND; - MS_DAT.data[] = GND; - MS_DAT.wraddress[] = GND; - MS_DAT.wrclock = CLK42; - MS_DAT.wrclken = GND; - MS_DAT.rden = VCC; - MS_DAT.rdaddress[] = (MS_Y[3..0],MS_X[3..0]); - MS_DAT.rdclock = CLK42; - MS_DAT.rdclken = VCC; - - IF MOUSE == "NO" GENERATE - MS_POINT = GND; - MS_POINT2 = GND; - ELSE GENERATE - MS_POINT = DFF((MS_PNT & MS_DAT.q0),CLK42,,); - MS_POINT2 = DFF((MS_PNT & MS_DAT.q1),CLK42,,); - END GENERATE; - --- === Sinc-counts GENERATOR ============================================ - --- CT[].clrn = START_UP; - --- (,CTH[5..0].clrn,CT[5].clrn) = !COPY_SINC_H or HOR_PLACE; --- (,CTH[5..0].prn ,CT[5].prn ) = !COPY_SINC_H or !HOR_PLACE; - --- CTV[].clrn = !COPY_SINC_V or VER_PLACE; --- CTV[].prn = !COPY_SINC_V or !VER_PLACE; - - CT[5].clrn = !COPY_SINC_H; - - -- set CTH to 50 (32h) - CTH[0].clrn = !COPY_SINC_H; - CTH[1].prn = !COPY_SINC_H; - CTH[2].clrn = !COPY_SINC_H; - CTH[3].clrn = !COPY_SINC_H; - CTH[4].prn = !COPY_SINC_H; - CTH[5].prn = !COPY_SINC_H; - - -- set CTV to 122h - CTV[0].clrn = !COPY_SINC_V; - CTV[1].prn = !COPY_SINC_V; - CTV[3..2].clrn = !COPY_SINC_V; - - CTV[4].clrn = !COPY_SINC_V; - CTV[5].prn = !COPY_SINC_V; - CTV[7..6].clrn = !COPY_SINC_V; - CTV[8].prn = !COPY_SINC_V; - - CT[5..0].clk = CLK42; - CTH[5..0].clk = CLK42; - CTV[8..0].clk = CLK42; - - CT[2..0].ena = VCC; - CASE CT[2..0] IS - WHEN 0 => CT[2..0] = 1; - WHEN 1 => CT[2..0] = 2; - WHEN 2 => CT[2..0] = 4; - WHEN 3 => CT[2..0] = 4; - WHEN 4 => CT[2..0] = 5; - WHEN 5 => CT[2..0] = 6; - WHEN 6 => CT[2..0] = 0; - WHEN 7 => CT[2..0] = 0; - END CASE; - -- for remove sinc jitter --- CT[5..3].ena = DFF(((CT0 & CT2) or (COPY_SINC_H & !CT4)),CLK42,,); - CT[5..3].ena = DFF((CT0 & CT2),CLK42,,); - CT[5..3] = CT[5..3]+1; -% - CASE CT[4..3] IS - WHEN 0 => CT[5..3] = CT[5..3]+1; - WHEN 1 => CT[5..3] = CT[5..3]+1; - WHEN 2 => CT[5..3] = CT[5..3]+1; - WHEN 3 => CT[5..3] = CT[5..3]+1; - END CASE; -% - CTH[].ena = DFF(((CT[5..2] == 15) & CT0),CLK42,,); - CTV[].ena = DFF(((CT[5..2] == 15) & CT0 & (CTH[] == 48)),CLK42,,); - - IF CTH[] == 55 THEN - CTH[] = GND; - ELSE - CTH[] = CTH[] + 1; - END IF; - - IF CTV[] == 319 THEN - CTV[] = GND; - ELSE - CTV[] = CTV[] + 1; - END IF; - - CTF[].clk = CTV8; - CTF[] = CTF[]+1; - --- ==== Video ========================================================== - - ZXS[] = ZX_PORT[5..0]; -- pages ZX Screens - ZX_SCREEN = ZX_PORT6; -- enable ZX Screen write - ZXA15 = ZX_PORT7; -- ZX A15' line - - SCR128 = DIR_PORT0; - --- WR_PIX = LCELL(TSN_W3); - WR_PIX = (TSN_W3); - - DOUBLE.clk = CLK42; DOUBLE.ena = !E_WR; DOUBLE = DOUBLE_CAS; - VXA[].clk = CLK42; VXA[].ena = !E_WR; - - VXD0[].clk = CLK42; VXD0[].ena = !E_WRD; VDO0[] = VXD0[]; - VXD1[].clk = CLK42; VXD1[].ena = !E_WRD; VDO1[] = VXD1[]; - VXD2[].clk = CLK42; VXD2[].ena = !E_WRD; VDO2[] = VXD2[]; - VXD3[].clk = CLK42; VXD3[].ena = !E_WRD; VDO3[] = VXD3[]; - --- VXD0[] = D[]; --- VXD1[] = D[]; --- VXD2[] = D[]; --- VXD3[] = D[]; - - (VXD0[],VXD1[]) = MDI[]; - (VXD2[],VXD3[]) = MDI[]; - - BRD[] = DIR_PORT[7..5]; - - VCM[].clk = CLK42; - TSN_W3.clk = CLK42; - V_CST[].clk = CLK42; - V_WE.clk = CLK42; - V_WET[].clk = CLK42; - VLA[].clk = CLK42; - - SCR_ENA.clk = CLK42; - SCR_ENA.ena = !E_WR; - SCR_ENA.d = !(VAI19 or ZX_SCREEN); - - E_WRD = DFF(E_WR,CLK42,,); - E_WR = LCELL(WR or !(VAI19 or ZX_SCREEN) or !DFF(WR,CLK42,,)); --- E_WR = LCELL(WR or !DFF(WR,CLK42,,)); - --- **************************************************** - -IF MODE == "SPRINTER" GENERATE - --- VAI[19] - switch adress mode 1 - graf mode, 0 - spectrum mode - --- MXWE = DFF(((DFF(E_WR,CLK42,,) or SCR_ENA) & MXWE),CLK42,,V_WE); - MXWE = DFF(MXWE,CLK42,E_WR,V_WE); - - IF VAI[19] THEN - -- in graf mode all 256k(512k) range - VXA[] = VAI[]; - ELSE - -- in spectrum mode 8k/16k range pages - VXA[] = (GND,GND,VAI[7..0],ZXS[4..1],LCELL(ZXS0 xor ZXA15 xor VAI13),VAI[12..8]); - END IF; - --- BORD = DFF((MODE0[7..4] == 15),WR_PIC,,); --- BLANK = DFF((BORD & MODE03 & MODE02),WR_PIC,,); --- INTTX = DFF((BORD & MODE03 & MODE02 & MODE00),WR_PIC,,); - - BORD = DFF((MODE0[7..4] == 15),LWR_COL,,); - BLANK = DFF(((BORD & MODE03 & MODE02) or DIR_PORT4),LWR_COL,,); - INTTX = DFF((BORD & MODE03 & MODE02 & MODE00),LWR_COL,,); - - INTT = DFF(!(INTTX & (CTV[2..0] == 7)),CT5,,); - --- INTT = DFF((INTTX or DFF(INTTX,CT5,,)),CT5,,); --- INTT = DFF(!(BLANK & (CTV[2..0] == 7)),CLK42,,MODE0[0]); - - CASE CT[2..0] IS - WHEN B"110" => VCM[2..0].d = 5; -- 101 - WHEN B"000" => VCM[2..0].d = 1; -- 001 - WHEN B"001" => VCM[2..0].d = 4; -- 100 - WHEN B"010" => VCM[2..0].d = 3; -- 011 - WHEN B"100" => VCM[2..0].d = 2; -- 010 - WHEN B"101" => VCM[2..0].d = 0; -- 000 - END CASE; - - CASE VCM[1..0] IS - WHEN 0 => - VLA[].d = (BRVA[7..0],VCC,VCC,VCC,VCC,VCC,RBRVA[10..8],GND,GND); - V_CST[].d = (VCC,GND); - V_WE.d = VCC; - V_WEX.d = VCC; - IF VCM2 THEN --- TSN_W3.d = X_MODE5; - TSN_W3.d = X_MODE_BOND; --- V_CST[].d = (VCC,X_MODE5); - ELSE - TSN_W3.d = X_MODE_BOND; --- V_CST[].d = (VCC,X_MODE_BOND); - END IF; - WHEN 1 => - WR_PIC.d = !VCM2; - WR_COL.d = VCM2; - VLA[].d = SVA[]; - V_CST[].d = (VCC,GND); - V_WE.d = VCC; - V_WEX.d = VCC; - WHEN 2 => - VLA[].d = VXA[17..0]; - V_CST[].d = (!VXA18,VXA18) or MXWE; - V_WE.d = MXWE; - V_WEX.d = GND; - V_WET[].d = MXWE or !((!VXA1 & !VXA0),(!VXA1 & VXA0),(VXA1 & !VXA0),(VXA1 & VXA0)); - WHEN 3 => - WR_PIC.d = X_MODE5; - VLA[].d = (DIR_PORT3,CTH[5..0],CT5,VCC,VCC,CTV[8..3],GND,GND); - WR_MODE.d = !(CT[5..3] == B"111") & !(CT4 & CT3 & !MODE0[5]); - V_CST[].d = (VCC,GND); - V_WE.d = VCC; - V_WEX.d = VCC; - END CASE; - --- choose V-RAM komplect - - V_CST1.prn = GND; --- V_CS0.clrn = GND; - V_CST0.prn = (LCELL(DFF(GND,!CLK42,,!V_CST0))); - V_CS1 = VCC; --- V_CS0 = LCELL(V_CST0); - - V_CSX0 = LCELL(!CLK42); - V_CSX1 = LCELL(V_CSX0); - V_CSX2 = LCELL(V_CSX1 & V_CSX0); - V_CSX3 = LCELL(V_CSX2); - --- V_CS0 = V_CSX3; - V_CS0 = GND; - --- ===================== - - SVA[].clk = CLK42; - SVA[9..6] = MODE0[3..0]; --- RSVA[].clk = CLK42; - (SVA[12..10],SVA[5..0]) = RSVA[]; - --- M_CTV[2..0].clk = CLK42; --- M_CT[5..3].clk = CLK42; - M_CTV[2..0] = (!MODE2[2] & CTV[2..0]) or MODE2[2] & (MODE2[1],CTV[2..1]); - M_CT[5..3] = (!MODE2[2] & (CT[5],!CT[4..3])) or MODE2[2] & (MODE2[0],!CT[5..4]); - - CASE (!VCM2,MODE0[4]) IS --- CASE (!VCM1,MODE0[4]) IS - WHEN B"X0" => - -- Graf adress -- - RSVA[] = (M_CTV[2..0],MODE1[2..0],M_CT[5..3]); - SVA[17..13] = MODE1[7..3]; - --- SVA[12..10] = CTV[2..0]; --- SVA[5..0] = (MODE1[2..0],CT5,!CT[4..3]); - WHEN B"01" => - -- ZX-atr adress -- - RSVA[] = (MODE2[2..0],SCR128,VCC,VCC,GND,!MODE0[7..6]); - SVA[17..13] = MODE2[7..3]; - --- SVA[12..10] = MODE2[2..0]; --- SVA[5..0] = (SCR128,VCC,VCC,GND,!MODE0[7..6]); - WHEN B"11" => - -- ZX-pic adress -- - RSVA[] = (MODE1[2..0],SCR128,MODE0[7..6],CTV2,!CTV1,!CTV0); - SVA[17..13] = MODE1[7..3]; - --- SVA[12..10] = MODE1[2..0]; --- SVA[5..0] = (SCR128,MODE0[7..6],CTV2,!CTV1,!CTV0); - END CASE; - --- X_MODE_BOND = LCELL(LCELL(DCOL[7..4] == 15) & LCELL(DCOL[3..0] == 15) & DFF((MODE0[7] & MODE0[5] & !MODE0[4]),LWR_COL,VCC,VCC)); - X_MODE_BOND = GND; - --- LD_PIC = LCELL((MODE0[5] & DFF((CT[5..3] == B"000"),CLK42,,)) or (!MODE0[5] & DFF((CT[4..2] == B"000"),CLK42,,))); - LD_PIC = LCELL((MODE0[5] & DFF((CT[5..3] == B"000"),CLK42,,)) or (!MODE0[5] & DFF((CT[4..2] == B"000"),CLK42,,))); - --- CASE (DFF(VLA1,!CLK42,,),DFF(VLA0,!CLK42,,)) IS - --- D_PIC0_[].clk = !CLK42; --- D_PIC1_[].clk = !CLK42; --- D_PIC2_[].clk = !CLK42; --- D_PIC3_[].clk = !CLK42; - --- PIC_CLK = LCELL(LCELL(CLK42)); - PIC_CLK = !CLK42; - - D_PIC0_[].clk = PIC_CLK; - D_PIC1_[].clk = PIC_CLK; - D_PIC2_[].clk = PIC_CLK; - D_PIC3_[].clk = PIC_CLK; - - D_PIC0_[] = VDM0[]; - D_PIC1_[] = VDM1[]; - D_PIC2_[] = VDM2[]; - D_PIC3_[] = VDM3[]; - - CASE (DFF(VLA1,CLK42,,),DFF(VLA0,CLK42,,)) IS - WHEN 0 => D_PICX_[] = D_PIC0_[]; - WHEN 1 => D_PICX_[] = D_PIC1_[]; - WHEN 2 => D_PICX_[] = D_PIC2_[]; - WHEN 3 => D_PICX_[] = D_PIC3_[]; - END CASE; - - MODE0[].ena = VCC; - MODE1[].ena = VCC; - MODE2[].ena = VCC; - MODE0[].clk = LWR_MODE; - MODE1[].clk = LWR_MODE; - MODE2[].clk = LWR_MODE; - MODE0[].d = VDM3[]; - MODE1[].d = VDM2[]; - MODE2[].d = VDM1[]; - LWR_MODE = LCELL(LCELL(WR_MODE)); -% - MODE0[].ena = LWR_MODE; - MODE1[].ena = LWR_MODE; - MODE2[].ena = LWR_MODE; - MODE0[].clk = CLK42; - MODE1[].clk = CLK42; - MODE2[].clk = CLK42; - MODE0[].d = D_PIC3_[]; - MODE1[].d = D_PIC2_[]; - MODE2[].d = D_PIC1_[]; - LWR_MODE = DFF(!WR_MODE,CLK42,,); -% - X_MODE7 = DFF(MODE0[7],LWR_COL,,); - X_MODE6 = DFF(MODE0[6],LWR_COL,,); - X_MODE5 = DFF(MODE0[5],LWR_COL,,); - X_MODE4 = DFF(MODE0[4],LWR_COL,,); - - VAO[] = VLA[17..2]; - - WR_PIC.clk = CLK42; - WR_COL.clk = CLK42; - WR_MODE.clk = CLK42; - --- LWR_PIC = LCELL(LCELL(WR_PIC)); --- LWR_COL = LCELL(LCELL(WR_COL)); --- LWR_PIC = LCELL(WR_PIC); --- LWR_COL = LCELL(WR_COL); - LWR_PIC = DFF(WR_PIC,CLK42,,); - LWR_COL = DFF(WR_COL,CLK42,,); - --- D_PIC0[].ena = VCC; --- D_PIC0[].clk = (LWR_PIC); - D_PIC0[].ena = !LWR_PIC; - D_PIC0[].clk = CLK42; - - IF LD_PIC THEN --- D_PIC0[] = D_PIC0_[]; - D_PIC0[] = D_PICX_[]; - ELSE - D_PIC0[] = (D_PIC0[6..0],GND); - END IF; - --- DCOL[].clk = (LWR_COL); - DCOL[].ena = !LWR_COL; - DCOL[].clk = CLK42; - - IF DFF((MODE0[7..4] == 15),WR_PIC,,) THEN - DCOL[].d = (B"00",BRD[2..0],BRD[2..0]); - ELSE --- DCOL[].d = D_PIC0_[]; - DCOL[].d = D_PICX_[]; - END IF; - - DCOL[].clrn = !BLANK; - - BRVA[].clk = CLK42; - BRVA[].clrn = !MS_POINT; - BRVA[].prn = !MS_POINT2; - --- CASE (LCELL(X_MODE4 or X_MODE5),CT2) IS - CASE (DFF((MODE0[4] or MODE0[5]),LWR_COL,,),CT2) IS - WHEN B"1X" => BRVA[7..0] = DCOL[]; - WHEN B"01" => BRVA[7..0] = (B"0000",DCOL[7..4]); - WHEN B"00" => BRVA[7..0] = (B"0000",DCOL[3..0]); - END CASE; - --- BRVA[10..8] = (x_mode4,RBRVA[9..8]); - RBRVA[].clk = CLK42; - - CASE (BORD,X_MODE4) IS - WHEN B"X0" => RBRVA[10..8].d = (GND,X_MODE[7..6]); - WHEN B"X1" => RBRVA[10..8].d = (VCC,(CTF4 & !BLANK),D_PIC0[7]); - END CASE; - - RBRVA[9..8].clrn = !BORD; - RBRVA[10].prn = !BORD; - - CASE (RBRVA[9..8],BRVA7) IS - WHEN 0,1,4,7 => ZX_COL[] = (BRVA[6],BRVA[5..3]); - WHEN 2,3,6,5 => ZX_COL[] = (BRVA[6],BRVA[2..0]); - END CASE; - --- V_WET[].prn = LCELL(DFF(GND,!CLK42,,!V_WE)); --- V_WE.prn = LCELL(DFF(GND,!CLK42,,!V_WE)); - - V_WE_R = DFF(GND,!CLK42,,!V_WE); - V_WE.prn = V_WE_R; - V_WET[].prn = V_WE_R; - --- V_WR[] = LCELL(V_WE) or !((!VXA1 & !VXA0),(!VXA1 & VXA0),(VXA1 & !VXA0),(VXA1 & VXA0)); - --- V_WR[] = (V_WE) or !( - - V_WEX.clk = CLK42; --- V_WEX.d = V_WE; --- V_WEX.prn = (DFF(GND,CLK42,,!V_WEX)); - - --- V_WE_R1 = LCELL(V_WE); --- V_WEMMM = LCELL(V_WE_R1); - - V_WEMMM = LCELL(V_WE); - V_WEMMN = LCELL(V_WEMMM); -- bios ok, fn ok, fnf1 failed, zx almost ok - V_WEMMO = LCELL(V_WEMMN); -- green arts - V_WEMMP = LCELL(V_WEMMO); -- blue + pink arts - V_WEMMR = LCELL(V_WEMMP); -- no F1 issue, but red arts (fix by finger, not enough capacity??) - V_WEMMS = LCELL(V_WEMMR); --- V_WEMMT = LCELL(V_WEMMS); --- V_WEMMU = LCELL(V_WEMMT); --- V_WEMMV = LCELL(V_WEMMU); --- V_WEMMW = LCELL(V_WEMMV); --- V_WEMMX = LCELL(V_WEMMW); --- V_WEMMY = LCELL(V_WEMMX); --- V_WEMMZ = LCELL(V_WEMMY); - - V_WRM = LCELL(V_WEMMN or V_WEMMM); --- V_WRM2 = LCELL(V_WEMMR); --- V_WRM = LCELL(V_WEMMM or V_WEMMN); --- V_WRM2 = LCELL(V_WEMMM or V_WEMMN); - - V_WEM = LCELL(V_WE); --- V_WEM2 = LCELL(V_WE); --- V_WEM = LCELL(V_WEMMM & V_WEMMN); --- V_WEM2 = LCELL(V_WEMMM & V_WEMMO); - - F_WR = DFF(VCC,V_WE,,); - V_EN3 = DFF(!(!VXA1 & (!VXA0 or DOUBLE)), CLK42, F_WR,); - V_EN2 = DFF(!(!VXA1 & (VXA0 or DOUBLE)), CLK42, F_WR,); - V_EN1 = DFF(!(VXA1 & (!VXA0 or DOUBLE)), CLK42, F_WR,); - V_EN0 = DFF(!(VXA1 & (VXA0 or DOUBLE)), CLK42, F_WR,); - - - V_WR_3 = (V_WRM or V_EN3); - V_WR_2 = (V_WRM or V_EN2); - V_WR_1 = (V_WRM or V_EN1); - V_WR_0 = (V_WRM or V_EN0); - - V_WEY3 = V_WEM or V_EN3; - V_WEY2 = V_WEM or V_EN2; - V_WEY1 = V_WEM or V_EN1; - V_WEY0 = V_WEM or V_EN0; - - V_WR[] = V_WR_[]; - V_WEN[] = V_WEY[]; - --- CLK84 = LCELL(CLK42 xor CLK84_X); --- CLK84_X = DFF(!CLK84_X,CLK84,,); --- CLK84_Y = CLK84; - -END GENERATE; -- end "sprinter" mode - - -END; diff --git a/src/altera/acex/k30/VIDEO2_T2.TDF b/src/altera/acex/k30/VIDEO2_T2.TDF deleted file mode 100644 index 61f62e3..0000000 --- a/src/altera/acex/k30/VIDEO2_T2.TDF +++ /dev/null @@ -1,773 +0,0 @@ - - TITLE "Video-controller"; - -INCLUDE "lpm_ram_dp"; - -PARAMETERS - ( - MODE = "SPRINTER", - MOUSE = "NO", - HOR_PLACE = H"50", - VER_PLACE = H"91" -- 122h/2 - ); - -SUBDESIGN video2 - ( - CLK42 : INPUT; - - CT[5..0] : OUTPUT; - CTH[5..0] : OUTPUT; - CTV[8..0] : OUTPUT; - CTF[6..0] : OUTPUT; - - BLANK : OUTPUT; - - START_UP : INPUT; - COPY_SINC_H : INPUT; - COPY_SINC_V : INPUT; - - WR : INPUT; - - VAI[19..0] : INPUT; -- input screen adress - - VAO[15..0] : OUTPUT; - - D[7..0] : INPUT; - MDI[15..0] : INPUT; - - VDO0[7..0] : OUTPUT; - VDO1[7..0] : OUTPUT; - VDO2[7..0] : OUTPUT; - VDO3[7..0] : OUTPUT; - - VDM0[7..0] : INPUT; - VDM1[7..0] : INPUT; - VDM2[7..0] : INPUT; - VDM3[7..0] : INPUT; - - V_WR[3..0] : OUTPUT; - V_WEN[3..0] : OUTPUT; - - V_CS[1..0] : OUTPUT; - WR_PIX : OUTPUT; - --- ZX_COLOR[3..0] : OUTPUT; - - ZX_PORT[7..0] : INPUT; - DIR_PORT[7..0] : INPUT; - -% - bit0 - Spectrum SCREEN Switch - bit1 - Spectrum Adress MODE - bit2 - Write to Spectrum Screen OFF - bit3 - MODE page 0/1 - bit4 - MODE on/off screen - - bit7..5 - Border -% - - INTT : OUTPUT; - - DOUBLE_CAS : INPUT; - - MOUSE_X[9..0] : INPUT; - MOUSE_Y[9..0] : INPUT; - - - ) -VARIABLE - --- CLK84 : NODE; --- CLK84_X : NODE; --- CLK84_Y : NODE; - - ZX_COLOR[3..0] : NODE; - - CT[5..0] : DFFE; - CTH[5..0] : DFFE; - CTV[8..0] : DFFE; - CTF[6..0] : DFF; - - VXA[19..0] : DFFE; - - VXD0[7..0] : DFFE; - VXD1[7..0] : DFFE; - VXD2[7..0] : DFFE; - VXD3[7..0] : DFFE; - - E_WR : NODE; - E_WRD : NODE; - - BLANK : NODE; - BORD : NODE; --- INTT_T : NODE; - INTTX : NODE; - - VLA[17..0] : DFF; --- SVA[17..0] : NODE; - SVA[17..0] : DFF; --- RSVA[8..0] : LCELL; - RSVA[8..0] : NODE; --- RSVA[8..0] : DFF; - - V_CST[1..0] : DFF; - VCM[2..0] : DFF; - TSN_W3 : DFF; - V_WE : DFF; - V_WEX : DFF; - - V_WEM : NODE; - V_WEM2 : NODE; - V_WRM : NODE; - V_WRM2 : NODE; -% - V_WEMM : NODE; - V_WEMMM : NODE; - V_WEMMN : NODE; - V_WEMMO : NODE; -% - V_WEMM : NODE; - V_WEMMM : NODE; - V_WEMMN : NODE; - V_WEMMO : NODE; - V_WEMMP : NODE; - V_WEMMQ : NODE; - V_WEMMR : NODE; - V_WEMMS : NODE; - V_WEMMT : NODE; - V_WEMMU : NODE; - V_WEMMV : NODE; - V_WEMMW : NODE; - V_WEMMX : NODE; - V_WEMMY : NODE; - V_WEMMZ : NODE; - - - - V_WET[3..0] : DFF; - - D_PIC0[7..0] : DFFE; --- D_PIC0_[7..0] : LCELL; - - D_PIC0_[7..0] : DFFE; - D_PIC1_[7..0] : DFFE; - D_PIC2_[7..0] : DFFE; - D_PIC3_[7..0] : DFFE; - - D_PICX_[7..0] : NODE; - - LWR_PIC : NODE; - LWR_COL : NODE; - - WR_PIC : DFF; - WR_COL : DFF; - LD_PIC : NODE; -MXL: NODE; -MXR: NODE; - - RBRVA[10..8]: DFF; - BRVA[7..0] : DFF; - DCOL[7..0] : DFFE; - - MXWE : NODE; --- MXCE : NODE; - - AX128 : NODE; - - BRD[2..0] : NODE; - - ZX_COL[3..0] : LCELL; - - ZXA15 : NODE; - ZXS[5..0] : NODE; - ZX_SCREEN : NODE; - SCR128 : NODE; - - MODE0[7..0] : DFFE; - MODE1[7..0] : DFFE; - MODE2[7..0] : DFFE; --- MODE3[7..0] : DFF; - - WR_MODE : DFF; - LWR_MODE : NODE; - X_MODE[7..4]: NODE; - X_MODE_BOND : NODE; - --- M_CTV[2..0] : DFF; --- M_CT[5..3] : DFF; - M_CTV[2..0] : LCELL; - M_CT[5..3] : LCELL; - - DOUBLE : DFFE; - - PIC_CLK : NODE; - - MS_X[9..0] : DFF; - MS_Y[9..0] : DFF; - - MS_POINT : NODE; - MS_POINT2 : NODE; - MS_PNT : NODE; - - MS_DAT : LPM_RAM_DP WITH (LPM_WIDTH=16,LPM_WIDTHAD=8,LPM_FILE="MOUSE.MIF"); - - SCR_ENA : DFFE; - V_WR_[3..0] : LCELL; - V_WEY[3..0] : LCELL; - - V_WE_R : NODE; - - V_CSX[3..0] : NODE; - - V_EN[3..0] : NODE; - - F_WR : NODE; - -BEGIN - - DEFAULTS - WR_MODE.d = VCC; -- WR_MODE2.d = VCC; -- WR_MODE2X.d = VCC; - V_CST[].d = VCC; V_WR[] = VCC; TSN_W3.d = VCC; - V_WE.d = VCC; WR_COL.d = VCC; WR_PIC.d = VCC; - V_WET[].d = VCC; - END DEFAULTS; - - ZX_COLOR[] = ZX_COL[]; - --- === MOUSE counters ======== - - MS_X[].clk = !CT1; - CASE LCELL(CTH[5..2] == 12) IS - WHEN 0 => MS_X[] = MS_X[] + 1; - WHEN 1 => MS_X[] = (!MOUSE_X[9..0]); - END CASE; - - MS_Y[].clk = !CTH5; - CASE LCELL(CTV8 & !CTV5 & CTV4) IS - WHEN 0 => MS_Y[] = MS_Y[] + 1; - WHEN 1 => MS_Y[] = (GND,!MOUSE_Y[8..0]); - END CASE; - - MS_PNT = DFF(((MS_X[] == B"100000XXXX") & (MS_Y[] == B"100000XXXX")),CLK42,,); - - MS_DAT.wren = GND; - MS_DAT.data[] = GND; - MS_DAT.wraddress[] = GND; - MS_DAT.wrclock = CLK42; - MS_DAT.wrclken = GND; - MS_DAT.rden = VCC; - MS_DAT.rdaddress[] = (MS_Y[3..0],MS_X[3..0]); - MS_DAT.rdclock = CLK42; - MS_DAT.rdclken = VCC; - - IF MOUSE == "NO" GENERATE - MS_POINT = GND; - MS_POINT2 = GND; - ELSE GENERATE - MS_POINT = DFF((MS_PNT & MS_DAT.q0),CLK42,,); - MS_POINT2 = DFF((MS_PNT & MS_DAT.q1),CLK42,,); - END GENERATE; - --- === Sinc-counts GENERATOR ============================================ - --- CT[].clrn = START_UP; - --- (,CTH[5..0].clrn,CT[5].clrn) = !COPY_SINC_H or HOR_PLACE; --- (,CTH[5..0].prn ,CT[5].prn ) = !COPY_SINC_H or !HOR_PLACE; - --- CTV[].clrn = !COPY_SINC_V or VER_PLACE; --- CTV[].prn = !COPY_SINC_V or !VER_PLACE; - - CT[5].clrn = !COPY_SINC_H; - - -- set CTH to 50 (32h) - CTH[0].clrn = !COPY_SINC_H; - CTH[1].prn = !COPY_SINC_H; - CTH[2].clrn = !COPY_SINC_H; - CTH[3].clrn = !COPY_SINC_H; - CTH[4].prn = !COPY_SINC_H; - CTH[5].prn = !COPY_SINC_H; - - -- set CTV to 122h - CTV[0].clrn = !COPY_SINC_V; - CTV[1].prn = !COPY_SINC_V; - CTV[3..2].clrn = !COPY_SINC_V; - - CTV[4].clrn = !COPY_SINC_V; - CTV[5].prn = !COPY_SINC_V; - CTV[7..6].clrn = !COPY_SINC_V; - CTV[8].prn = !COPY_SINC_V; - - CT[5..0].clk = CLK42; - CTH[5..0].clk = CLK42; - CTV[8..0].clk = CLK42; - - CT[2..0].ena = VCC; - - CASE CT[2..0] IS - WHEN 0 => CT[2..0] = 1; - WHEN 1 => CT[2..0] = 2; - WHEN 2 => CT[2..0] = 4; - WHEN 3 => CT[2..0] = 4; - WHEN 4 => CT[2..0] = 5; - WHEN 5 => CT[2..0] = 6; - WHEN 6 => CT[2..0] = 0; - WHEN 7 => CT[2..0] = 0; - END CASE; - - -- for remove sinc jitter --- CT[5..3].ena = DFF(((CT0 & CT2) or (COPY_SINC_H & !CT4)),CLK42,,); - CT[5..3].ena = DFF((CT0 & CT2),CLK42,,); - CT[5..3] = CT[5..3]+1; -% - CASE CT[4..3] IS - WHEN 0 => CT[5..3] = CT[5..3]+1; - WHEN 1 => CT[5..3] = CT[5..3]+1; - WHEN 2 => CT[5..3] = CT[5..3]+1; - WHEN 3 => CT[5..3] = CT[5..3]+1; - END CASE; -% - CTH[].ena = DFF(((CT[5..2] == 15) & CT0),CLK42,,); - CTV[].ena = DFF(((CT[5..2] == 15) & CT0 & (CTH[] == 48)),CLK42,,); - - IF CTH[] == 55 THEN - CTH[] = GND; - ELSE - CTH[] = CTH[] + 1; - END IF; - - IF CTV[] == 319 THEN - CTV[] = GND; - ELSE - CTV[] = CTV[] + 1; - END IF; - - CTF[].clk = CTV8; - CTF[] = CTF[]+1; - --- ==== Video ========================================================== - - ZXS[] = ZX_PORT[5..0]; -- pages ZX Screens - ZX_SCREEN = ZX_PORT6; -- enable ZX Screen write - ZXA15 = ZX_PORT7; -- ZX A15' line - - SCR128 = DIR_PORT0; - --- WR_PIX = LCELL(TSN_W3); - WR_PIX = (TSN_W3); - - DOUBLE.clk = CLK42; DOUBLE.ena = !E_WR; DOUBLE = DOUBLE_CAS; - VXA[].clk = CLK42; VXA[].ena = !E_WR; - - VXD0[].clk = CLK42; VXD0[].ena = !E_WRD; VDO0[] = VXD0[]; - VXD1[].clk = CLK42; VXD1[].ena = !E_WRD; VDO1[] = VXD1[]; - VXD2[].clk = CLK42; VXD2[].ena = !E_WRD; VDO2[] = VXD2[]; - VXD3[].clk = CLK42; VXD3[].ena = !E_WRD; VDO3[] = VXD3[]; - --- VXD0[] = D[]; --- VXD1[] = D[]; --- VXD2[] = D[]; --- VXD3[] = D[]; - - (VXD0[],VXD1[]) = MDI[]; - (VXD2[],VXD3[]) = MDI[]; - - BRD[] = DIR_PORT[7..5]; - - VCM[].clk = CLK42; - TSN_W3.clk = CLK42; - V_CST[].clk = CLK42; - V_WE.clk = CLK42; - V_WET[].clk = CLK42; - VLA[].clk = CLK42; - - SCR_ENA.clk = CLK42; - SCR_ENA.ena = !E_WR; - SCR_ENA.d = !(VAI19 or ZX_SCREEN); - - E_WRD = DFF(E_WR,CLK42,,); - E_WR = LCELL(WR or !(VAI19 or ZX_SCREEN) or !DFF(WR,CLK42,,)); --- E_WR = LCELL(WR or !DFF(WR,CLK42,,)); - --- **************************************************** - -IF MODE == "SPRINTER" GENERATE - --- VAI[19] - switch adress mode 1 - graf mode, 0 - spectrum mode - --- MXWE = DFF(((DFF(E_WR,CLK42,,) or SCR_ENA) & MXWE),CLK42,,V_WE); - MXWE = DFF(MXWE,CLK42,E_WR,V_WE); - - IF VAI[19] THEN - -- in graf mode all 256k(512k) range - VXA[] = VAI[]; - ELSE - -- in spectrum mode 8k/16k range pages - VXA[] = (GND,GND,VAI[7..0],ZXS[4..1],LCELL(ZXS0 xor ZXA15 xor VAI13),VAI[12..8]); - END IF; - --- BORD = DFF((MODE0[7..4] == 15),WR_PIC,,); --- BLANK = DFF((BORD & MODE03 & MODE02),WR_PIC,,); --- INTTX = DFF((BORD & MODE03 & MODE02 & MODE00),WR_PIC,,); - - BORD = DFF((MODE0[7..4] == 15),LWR_COL,,); - BLANK = DFF(((BORD & MODE03 & MODE02) or DIR_PORT4),LWR_COL,,); - INTTX = DFF((BORD & MODE03 & MODE02 & MODE00),LWR_COL,,); - - INTT = DFF(!(INTTX & (CTV[2..0] == 7)),CT5,,); - --- INTT = DFF((INTTX or DFF(INTTX,CT5,,)),CT5,,); --- INTT = DFF(!(BLANK & (CTV[2..0] == 7)),CLK42,,MODE0[0]); - - CASE CT[2..0] IS - WHEN B"110" => VCM[2..0].d = 5; -- 110 -> 101 6 -> 5 - WHEN B"000" => VCM[2..0].d = 1; -- 000 -> 001 0 -> 1 - WHEN B"001" => VCM[2..0].d = 4; -- 001 -> 100 1 -> 4 - WHEN B"010" => VCM[2..0].d = 3; -- 010 -> 011 2 -> 3 - WHEN B"100" => VCM[2..0].d = 2; -- 100 -> 010 4 -> 2 - WHEN B"101" => VCM[2..0].d = 0; -- 101 -> 000 5 -> 0 - END CASE; - - CASE VCM[1..0] IS - WHEN 0 => - VLA[].d = (BRVA[7..0],VCC,VCC,VCC,VCC,VCC,RBRVA[10..8],GND,GND); - V_CST[].d = (VCC,GND); - V_WE.d = VCC; - V_WEX.d = VCC; - IF VCM2 THEN --- TSN_W3.d = X_MODE5; - TSN_W3.d = X_MODE_BOND; --- V_CST[].d = (VCC,X_MODE5); - ELSE - TSN_W3.d = X_MODE_BOND; --- V_CST[].d = (VCC,X_MODE_BOND); - END IF; - WHEN 1 => - WR_PIC.d = !VCM2; - WR_COL.d = VCM2; - VLA[].d = SVA[]; - V_CST[].d = (VCC,GND); - V_WE.d = VCC; - V_WEX.d = VCC; - WHEN 2 => - VLA[].d = VXA[17..0]; - V_CST[].d = (!VXA18,VXA18) or MXWE; - V_WE.d = MXWE; - V_WEX.d = GND; - V_WET[].d = MXWE or !((!VXA1 & !VXA0),(!VXA1 & VXA0),(VXA1 & !VXA0),(VXA1 & VXA0)); - WHEN 3 => --- WR_PIC.d = X_MODE5; --- NEW 26.08.2022, fix bug with first column --- it was reproducing when changes mode 320 -> 640, like any 320px screen squares -> text mode squares - WR_PIC.d = MODE0[5]; - VLA[].d = (DIR_PORT3,CTH[5..0],CT5,VCC,VCC,CTV[8..3],GND,GND); - WR_MODE.d = !(CT[5..3] == B"111") & !(CT4 & CT3 & !MODE0[5]); - V_CST[].d = (VCC,GND); - V_WE.d = VCC; - V_WEX.d = VCC; - END CASE; - --- choose V-RAM komplect - - V_CST1.prn = GND; --- V_CS0.clrn = GND; - V_CST0.prn = (LCELL(DFF(GND,!CLK42,,!V_CST0))); - V_CS1 = VCC; --- V_CS0 = LCELL(V_CST0); - - V_CSX0 = LCELL(!CLK42); - V_CSX1 = LCELL(V_CSX0); - V_CSX2 = LCELL(V_CSX1 & V_CSX0); - V_CSX3 = LCELL(V_CSX2); - --- V_CS0 = V_CSX3; - V_CS0 = GND; - --- ===================== - - SVA[].clk = CLK42; - SVA[9..6] = MODE0[3..0]; --- RSVA[].clk = CLK42; - (SVA[12..10],SVA[5..0]) = RSVA[]; - --- M_CTV[2..0].clk = CLK42; --- M_CT[5..3].clk = CLK42; - M_CTV[2..0] = (!MODE2[2] & CTV[2..0]) or MODE2[2] & (MODE2[1],CTV[2..1]); - M_CT[5..3] = (!MODE2[2] & (CT[5],!CT[4..3])) or MODE2[2] & (MODE2[0],!CT[5..4]); - - CASE (!VCM2,MODE0[4]) IS --- CASE (!VCM1,MODE0[4]) IS - WHEN B"X0" => - -- Graf adress -- - RSVA[] = (M_CTV[2..0],MODE1[2..0],M_CT[5..3]); - SVA[17..13] = MODE1[7..3]; - --- SVA[12..10] = CTV[2..0]; --- SVA[5..0] = (MODE1[2..0],CT5,!CT[4..3]); - WHEN B"01" => - -- ZX-atr adress -- - RSVA[] = (MODE2[2..0],SCR128,VCC,VCC,GND,!MODE0[7..6]); - SVA[17..13] = MODE2[7..3]; - --- SVA[12..10] = MODE2[2..0]; --- SVA[5..0] = (SCR128,VCC,VCC,GND,!MODE0[7..6]); - WHEN B"11" => - -- ZX-pic adress -- - RSVA[] = (MODE1[2..0],SCR128,MODE0[7..6],CTV2,!CTV1,!CTV0); - SVA[17..13] = MODE1[7..3]; - --- SVA[12..10] = MODE1[2..0]; --- SVA[5..0] = (SCR128,MODE0[7..6],CTV2,!CTV1,!CTV0); - END CASE; - --- X_MODE_BOND = LCELL(LCELL(DCOL[7..4] == 15) & LCELL(DCOL[3..0] == 15) & DFF((MODE0[7] & MODE0[5] & !MODE0[4]),LWR_COL,VCC,VCC)); - X_MODE_BOND = GND; - --- LD_PIC = LCELL((MODE0[5] & DFF((CT[5..3] == B"000"),CLK42,,)) or (!MODE0[5] & DFF((CT[4..2] == B"000"),CLK42,,))); --- LD_PIC = LCELL((MODE0[5] & DFF((CT[5..3] == B"000"),CLK42,,)) or (!MODE0[5] & DFF((CT[4..2] == B"000"),CLK42,,))); - LD_PIC = LCELL((MODE0[5] & DFF((CT[5..2] == B"0000"),CLK42,,)) or (!MODE0[5] & DFF((CT[4..2] == B"000"),CLK42,,))); - - --- CASE (DFF(VLA1,!CLK42,,),DFF(VLA0,!CLK42,,)) IS - --- D_PIC0_[].clk = !CLK42; --- D_PIC1_[].clk = !CLK42; --- D_PIC2_[].clk = !CLK42; --- D_PIC3_[].clk = !CLK42; - --- PIC_CLK = LCELL(LCELL(CLK42)); - PIC_CLK = !CLK42; - - D_PIC0_[].clk = PIC_CLK; - D_PIC1_[].clk = PIC_CLK; - D_PIC2_[].clk = PIC_CLK; - D_PIC3_[].clk = PIC_CLK; - - D_PIC0_[] = VDM0[]; - D_PIC1_[] = VDM1[]; - D_PIC2_[] = VDM2[]; - D_PIC3_[] = VDM3[]; - - CASE (DFF(VLA1,CLK42,,),DFF(VLA0,CLK42,,)) IS - WHEN 0 => D_PICX_[] = D_PIC0_[]; - WHEN 1 => D_PICX_[] = D_PIC1_[]; - WHEN 2 => D_PICX_[] = D_PIC2_[]; - WHEN 3 => D_PICX_[] = D_PIC3_[]; - END CASE; - - MODE0[].ena = VCC; - MODE1[].ena = VCC; - MODE2[].ena = VCC; - MODE0[].clk = LWR_MODE; - MODE1[].clk = LWR_MODE; - MODE2[].clk = LWR_MODE; - MODE0[].d = VDM3[]; - MODE1[].d = VDM2[]; - MODE2[].d = VDM1[]; - LWR_MODE = LCELL(LCELL(WR_MODE)); -% - MODE0[].ena = LWR_MODE; - MODE1[].ena = LWR_MODE; - MODE2[].ena = LWR_MODE; - MODE0[].clk = CLK42; - MODE1[].clk = CLK42; - MODE2[].clk = CLK42; - MODE0[].d = D_PIC3_[]; - MODE1[].d = D_PIC2_[]; - MODE2[].d = D_PIC1_[]; - LWR_MODE = DFF(!WR_MODE,CLK42,,); -% - X_MODE7 = DFF(MODE0[7],LWR_COL,,); - X_MODE6 = DFF(MODE0[6],LWR_COL,,); - X_MODE5 = DFF(MODE0[5],LWR_COL,,); - X_MODE4 = DFF(MODE0[4],LWR_COL,,); - - VAO[] = VLA[17..2]; - - WR_PIC.clk = CLK42; - WR_COL.clk = CLK42; - WR_MODE.clk = CLK42; - --- LWR_PIC = LCELL(LCELL(WR_PIC)); --- LWR_COL = LCELL(LCELL(WR_COL)); --- LWR_PIC = LCELL(WR_PIC); --- LWR_COL = LCELL(WR_COL); - LWR_PIC = DFF(WR_PIC,CLK42,,); - LWR_COL = DFF(WR_COL,CLK42,,); - --- D_PIC0[].ena = VCC; --- D_PIC0[].clk = (LWR_PIC); - D_PIC0[].ena = !LWR_PIC; - D_PIC0[].clk = CLK42; - - - - - IF LD_PIC THEN --- D_PIC0[] = D_PIC0_[]; - D_PIC0[] = D_PICX_[]; - ELSE - D_PIC0[] = (D_PIC0[6..0],GND); - END IF; - - --- DCOL[].clk = (LWR_COL); - DCOL[].ena = !LWR_COL; - DCOL[].clk = CLK42; - - IF DFF((MODE0[7..4] == 15),WR_PIC,,) THEN - DCOL[].d = (B"00",BRD[2..0],BRD[2..0]); - ELSE --- DCOL[].d = D_PIC0_[]; - DCOL[].d = D_PICX_[]; - END IF; - - DCOL[].clrn = !BLANK; - - BRVA[].clk = CLK42; - BRVA[].clrn = !MS_POINT; - BRVA[].prn = !MS_POINT2; - --- MODE0[4] - graph / text --- MODE0[5] - 320 / 640 resolution - --- CASE (LCELL(X_MODE4 or X_MODE5),CT2) IS - CASE (DFF((MODE0[4] or MODE0[5]),LWR_COL,,),CT2) IS - WHEN B"1X" => BRVA[7..0] = DCOL[]; - WHEN B"01" => BRVA[7..0] = (B"0000",DCOL[7..4]); - WHEN B"00" => BRVA[7..0] = (B"0000",DCOL[3..0]); - END CASE; - --- BRVA[10..8] = (x_mode4,RBRVA[9..8]); - RBRVA[].clk = CLK42; - - CASE (BORD,X_MODE4) IS - WHEN B"X0" => RBRVA[10..8].d = (GND,X_MODE[7..6]); - WHEN B"X1" => RBRVA[10..8].d = (VCC,(CTF4 & !BLANK),D_PIC0[7]); - END CASE; - - RBRVA[9..8].clrn = !BORD; - RBRVA[10].prn = !BORD; - - CASE (RBRVA[9..8],BRVA7) IS - WHEN 0,1,4,7 => ZX_COL[] = (BRVA[6],BRVA[5..3]); - WHEN 2,3,6,5 => ZX_COL[] = (BRVA[6],BRVA[2..0]); - END CASE; - --- V_WET[].prn = LCELL(DFF(GND,!CLK42,,!V_WE)); --- V_WE.prn = LCELL(DFF(GND,!CLK42,,!V_WE)); - - V_WE_R = DFF(GND,!CLK42,,!V_WE); - V_WE.prn = V_WE_R; - V_WET[].prn = V_WE_R; - --- V_WR[] = LCELL(V_WE) or !((!VXA1 & !VXA0),(!VXA1 & VXA0),(VXA1 & !VXA0),(VXA1 & VXA0)); - --- V_WR[] = (V_WE) or !( - - V_WEX.clk = CLK42; --- V_WEX.d = V_WE; --- V_WEX.prn = (DFF(GND,CLK42,,!V_WEX)); - - - - - V_WEMMM = LCELL(V_WE); - V_WEMMN = LCELL(V_WEMMM); -- bios ok, fn ok, fnf1 failed, zx almost ok - V_WEMMO = LCELL(V_WEMMN); -- green arts - V_WEMMP = LCELL(V_WEMMO); -- blue + pink arts - V_WEMMR = LCELL(V_WEMMP); -- no F1 issue, but red arts (fix by finger, not enough capacity??) - V_WEMMS = LCELL(V_WEMMR); --- V_WEMMT = LCELL(V_WEMMS); --- V_WEMMU = LCELL(V_WEMMT); --- V_WEMMV = LCELL(V_WEMMU); --- V_WEMMW = LCELL(V_WEMMV); --- V_WEMMX = LCELL(V_WEMMW); --- V_WEMMY = LCELL(V_WEMMX); --- V_WEMMZ = LCELL(V_WEMMY); - - V_WRM = LCELL(V_WE or V_WEMMM); --- V_WRM = LCELL(V_WEMMN or V_WEMMM); --- V_WRM2 = LCELL(V_WEMMN or V_WEMMM); --- V_WRM2 = LCELL(V_WEMMR); --- V_WRM = LCELL(V_WEMMM or V_WEMMN); --- V_WRM2 = LCELL(V_WEMMM or V_WEMMN); - - V_WEM = (V_WE); --- V_WEM2 = LCELL(V_WE); --- V_WEM = LCELL(V_WEMMM & V_WEMMN); --- V_WEM2 = LCELL(V_WEMMM & V_WEMMO); - - F_WR = DFF(VCC,V_WE,,); - V_EN3 = DFF(!(!VXA1 & (!VXA0 or DOUBLE)), CLK42, F_WR,); - V_EN2 = DFF(!(!VXA1 & (VXA0 or DOUBLE)), CLK42, F_WR,); - V_EN1 = DFF(!(VXA1 & (!VXA0 or DOUBLE)), CLK42, F_WR,); - V_EN0 = DFF(!(VXA1 & (VXA0 or DOUBLE)), CLK42, F_WR,); - - --- V_WR_3 = LCELL(V_WRM or V_EN3); --- V_WR_2 = LCELL(V_WRM or V_EN2); --- V_WR_1 = LCELL(V_WRM or V_EN1); --- V_WR_0 = LCELL(V_WRM or V_EN0); - V_WR_3 = LCELL(LCELL(LCELL(V_WRM or V_EN3))); - V_WR_2 = LCELL(LCELL(LCELL(V_WRM or V_EN2))); - V_WR_1 = LCELL(LCELL(LCELL(V_WRM or V_EN1))); - V_WR_0 = LCELL(LCELL(LCELL(V_WRM or V_EN0))); - - V_WEY3 = LCELL(V_WEM or V_EN3); - V_WEY2 = LCELL(V_WEM or V_EN2); - V_WEY1 = LCELL(V_WEM or V_EN1); - V_WEY0 = LCELL(V_WEM or V_EN0); - - V_WR[] = V_WR_[]; -- V_WR0-3 - V_WEN[] = V_WEY[]; -- VD0-3 - - - - - -% - V_WEMMM = LCELL(V_WE); - V_WEMMN = LCELL(V_WEMMM); - V_WEMMO = LCELL(V_WEMMN); - V_WEMM = LCELL(V_WEMMO); - - V_WRM = LCELL(V_WEMMN & V_WEMMM); - V_WRM2 = LCELL(V_WEMMN & V_WEMMM); - - V_WEM = LCELL(V_WEMMM & V_WEMMO); - V_WEM2 = LCELL(V_WEMMM & V_WEMMO); - - V_EN3 = DFF(!(!VXA1 & (!VXA0 or DOUBLE)),CLK42,F_WR,); - V_EN2 = DFF(!(!VXA1 & (VXA0 or DOUBLE)) ,CLK42,F_WR,); - V_EN1 = DFF(!(VXA1 & (!VXA0 or DOUBLE)) ,CLK42,F_WR,); - V_EN0 = DFF(!(VXA1 & (VXA0 or DOUBLE)) ,CLK42,F_WR,); - - F_WR = DFF(VCC,V_WE,,); - - V_WR_3 = V_WRM or V_EN3; - V_WR_2 = V_WRM2 or V_EN2; - V_WR_1 = V_WRM or V_EN1; - V_WR_0 = V_WRM or V_EN0; - - V_WEY3 = V_WEM or V_EN3; - V_WEY2 = V_WEM2 or V_EN2; - V_WEY1 = V_WEM or V_EN1; - V_WEY0 = V_WEM or V_EN0; - - V_WR[] = V_WR_[]; - V_WEN[] = V_WEY[]; -% - - - - - --- CLK84 = LCELL(CLK42 xor CLK84_X); --- CLK84_X = DFF(!CLK84_X,CLK84,,); --- CLK84_Y = CLK84; - -END GENERATE; -- end "sprinter" mode - - -END; diff --git a/src/altera/acex/k30/VIDEO2_T2_51mhz.TDF b/src/altera/acex/k30/VIDEO2_T2_51mhz.TDF deleted file mode 100644 index baba4fa..0000000 --- a/src/altera/acex/k30/VIDEO2_T2_51mhz.TDF +++ /dev/null @@ -1,783 +0,0 @@ - - TITLE "Video-controller"; - -INCLUDE "lpm_ram_dp"; - -PARAMETERS - ( - MODE = "SPRINTER", - MOUSE = "NO", - HOR_PLACE = H"50", - VER_PLACE = H"91" -- 122h/2 - ); - -SUBDESIGN video2 - ( - CLK42 : INPUT; - - CT[5..0] : OUTPUT; - CTH[5..0] : OUTPUT; - CTV[8..0] : OUTPUT; - CTF[6..0] : OUTPUT; - - BLANK : OUTPUT; - - START_UP : INPUT; - COPY_SINC_H : INPUT; - COPY_SINC_V : INPUT; - - WR : INPUT; - - VAI[19..0] : INPUT; -- input screen adress - - VAO[15..0] : OUTPUT; - - D[7..0] : INPUT; - MDI[15..0] : INPUT; - - VDO0[7..0] : OUTPUT; - VDO1[7..0] : OUTPUT; - VDO2[7..0] : OUTPUT; - VDO3[7..0] : OUTPUT; - - VDM0[7..0] : INPUT; - VDM1[7..0] : INPUT; - VDM2[7..0] : INPUT; - VDM3[7..0] : INPUT; - - V_WR[3..0] : OUTPUT; - V_WEN[3..0] : OUTPUT; - - V_CS[1..0] : OUTPUT; - WR_PIX : OUTPUT; - --- ZX_COLOR[3..0] : OUTPUT; - - ZX_PORT[7..0] : INPUT; - DIR_PORT[7..0] : INPUT; - -% - bit0 - Spectrum SCREEN Switch - bit1 - Spectrum Adress MODE - bit2 - Write to Spectrum Screen OFF - bit3 - MODE page 0/1 - bit4 - MODE on/off screen - - bit7..5 - Border -% - - INTT : OUTPUT; - - DOUBLE_CAS : INPUT; - - MOUSE_X[9..0] : INPUT; - MOUSE_Y[9..0] : INPUT; - - - ) -VARIABLE - --- CLK84 : NODE; --- CLK84_X : NODE; --- CLK84_Y : NODE; - - ZX_COLOR[3..0] : NODE; - - CT[5..0] : DFFE; - CTH[5..0] : DFFE; - CTV[8..0] : DFFE; - CTF[6..0] : DFF; - - VXA[19..0] : DFFE; - - VXD0[7..0] : DFFE; - VXD1[7..0] : DFFE; - VXD2[7..0] : DFFE; - VXD3[7..0] : DFFE; - - E_WR : NODE; - E_WRD : NODE; - - BLANK : NODE; - BORD : NODE; --- INTT_T : NODE; - INTTX : NODE; - - VLA[17..0] : DFF; --- SVA[17..0] : NODE; - SVA[17..0] : DFF; --- RSVA[8..0] : LCELL; - RSVA[8..0] : NODE; --- RSVA[8..0] : DFF; - - V_CST[1..0] : DFF; - VCM[2..0] : DFF; - TSN_W3 : DFF; - V_WE : DFF; - V_WEX : DFF; - - V_WEM : NODE; - V_WEM2 : NODE; - V_WRM : NODE; - V_WRM2 : NODE; -% - V_WEMM : NODE; - V_WEMMM : NODE; - V_WEMMN : NODE; - V_WEMMO : NODE; -% - V_WEMM : NODE; - V_WEMMM : NODE; - V_WEMMN : NODE; - V_WEMMO : NODE; - V_WEMMP : NODE; - V_WEMMQ : NODE; - V_WEMMR : NODE; - V_WEMMS : NODE; - V_WEMMT : NODE; - V_WEMMU : NODE; - V_WEMMV : NODE; - V_WEMMW : NODE; - V_WEMMX : NODE; - V_WEMMY : NODE; - V_WEMMZ : NODE; - - - - V_WET[3..0] : DFF; - - D_PIC0[7..0] : DFFE; --- D_PIC0_[7..0] : LCELL; - - D_PIC0_[7..0] : DFFE; - D_PIC1_[7..0] : DFFE; - D_PIC2_[7..0] : DFFE; - D_PIC3_[7..0] : DFFE; - - D_PICX_[7..0] : NODE; - - LWR_PIC : NODE; - LWR_COL : NODE; - - WR_PIC : DFF; - WR_COL : DFF; - LD_PIC : NODE; -MXL: NODE; -MXR: NODE; - - RBRVA[10..8]: DFF; - BRVA[7..0] : DFF; - DCOL[7..0] : DFFE; - - MXWE : NODE; --- MXCE : NODE; - - AX128 : NODE; - - BRD[2..0] : NODE; - - ZX_COL[3..0] : LCELL; - - ZXA15 : NODE; - ZXS[5..0] : NODE; - ZX_SCREEN : NODE; - SCR128 : NODE; - - MODE0[7..0] : DFFE; - MODE1[7..0] : DFFE; - MODE2[7..0] : DFFE; --- MODE3[7..0] : DFF; - - WR_MODE : DFF; - LWR_MODE : NODE; - X_MODE[7..4]: NODE; - X_MODE_BOND : NODE; - --- M_CTV[2..0] : DFF; --- M_CT[5..3] : DFF; - M_CTV[2..0] : LCELL; - M_CT[5..3] : LCELL; - - DOUBLE : DFFE; - - PIC_CLK : NODE; - - MS_X[9..0] : DFF; - MS_Y[9..0] : DFF; - - MS_POINT : NODE; - MS_POINT2 : NODE; - MS_PNT : NODE; - - MS_DAT : LPM_RAM_DP WITH (LPM_WIDTH=16,LPM_WIDTHAD=8,LPM_FILE="MOUSE.MIF"); - - SCR_ENA : DFFE; - V_WR_[3..0] : LCELL; - V_WEY[3..0] : LCELL; - - V_WE_R : NODE; - - V_CSX[3..0] : NODE; - - V_EN[3..0] : NODE; - - F_WR : NODE; - -BEGIN - - DEFAULTS - WR_MODE.d = VCC; -- WR_MODE2.d = VCC; -- WR_MODE2X.d = VCC; - V_CST[].d = VCC; V_WR[] = VCC; TSN_W3.d = VCC; - V_WE.d = VCC; WR_COL.d = VCC; WR_PIC.d = VCC; - V_WET[].d = VCC; - END DEFAULTS; - - ZX_COLOR[] = ZX_COL[]; - --- === MOUSE counters ======== - - MS_X[].clk = !CT1; - CASE LCELL(CTH[5..2] == 12) IS - WHEN 0 => MS_X[] = MS_X[] + 1; - WHEN 1 => MS_X[] = (!MOUSE_X[9..0]); - END CASE; - - MS_Y[].clk = !CTH5; - CASE LCELL(CTV8 & !CTV5 & CTV4) IS - WHEN 0 => MS_Y[] = MS_Y[] + 1; - WHEN 1 => MS_Y[] = (GND,!MOUSE_Y[8..0]); - END CASE; - - MS_PNT = DFF(((MS_X[] == B"100000XXXX") & (MS_Y[] == B"100000XXXX")),CLK42,,); - - MS_DAT.wren = GND; - MS_DAT.data[] = GND; - MS_DAT.wraddress[] = GND; - MS_DAT.wrclock = CLK42; - MS_DAT.wrclken = GND; - MS_DAT.rden = VCC; - MS_DAT.rdaddress[] = (MS_Y[3..0],MS_X[3..0]); - MS_DAT.rdclock = CLK42; - MS_DAT.rdclken = VCC; - - IF MOUSE == "NO" GENERATE - MS_POINT = GND; - MS_POINT2 = GND; - ELSE GENERATE - MS_POINT = DFF((MS_PNT & MS_DAT.q0),CLK42,,); - MS_POINT2 = DFF((MS_PNT & MS_DAT.q1),CLK42,,); - END GENERATE; - --- === Sinc-counts GENERATOR ============================================ - --- CT[].clrn = START_UP; - --- (,CTH[5..0].clrn,CT[5].clrn) = !COPY_SINC_H or HOR_PLACE; --- (,CTH[5..0].prn ,CT[5].prn ) = !COPY_SINC_H or !HOR_PLACE; - --- CTV[].clrn = !COPY_SINC_V or VER_PLACE; --- CTV[].prn = !COPY_SINC_V or !VER_PLACE; - - CT[5].clrn = !COPY_SINC_H; - - -- set CTH to 50 (32h) - CTH[0].clrn = !COPY_SINC_H; - CTH[1].prn = !COPY_SINC_H; - CTH[2].clrn = !COPY_SINC_H; - CTH[3].clrn = !COPY_SINC_H; - CTH[4].prn = !COPY_SINC_H; - CTH[5].prn = !COPY_SINC_H; - - -- set CTV to 122h - CTV[0].clrn = !COPY_SINC_V; - CTV[1].prn = !COPY_SINC_V; - CTV[3..2].clrn = !COPY_SINC_V; - - CTV[4].clrn = !COPY_SINC_V; - CTV[5].prn = !COPY_SINC_V; - CTV[7..6].clrn = !COPY_SINC_V; - CTV[8].prn = !COPY_SINC_V; - - CT[5..0].clk = CLK42; - CTH[5..0].clk = CLK42; - CTV[8..0].clk = CLK42; - - CT[2..0].ena = VCC; - - CASE CT[2..0] IS - WHEN 0 => CT[2..0] = 1; - WHEN 1 => CT[2..0] = 2; - WHEN 2 => CT[2..0] = 4; - WHEN 3 => CT[2..0] = 4; - WHEN 4 => CT[2..0] = 5; - WHEN 5 => CT[2..0] = 6; - WHEN 6 => CT[2..0] = 0; - WHEN 7 => CT[2..0] = 0; - END CASE; - - -- for remove sinc jitter --- CT[5..3].ena = DFF(((CT0 & CT2) or (COPY_SINC_H & !CT4)),CLK42,,); - CT[5..3].ena = DFF((CT0 & CT2),CLK42,,); - CT[5..3] = CT[5..3]+1; -% - CASE CT[4..3] IS - WHEN 0 => CT[5..3] = CT[5..3]+1; - WHEN 1 => CT[5..3] = CT[5..3]+1; - WHEN 2 => CT[5..3] = CT[5..3]+1; - WHEN 3 => CT[5..3] = CT[5..3]+1; - END CASE; -% - CTH[].ena = DFF(((CT[5..2] == 15) & CT0),CLK42,,); - CTV[].ena = DFF(((CT[5..2] == 15) & CT0 & (CTH[] == 48)),CLK42,,); - - IF CTH[] == 55 THEN - CTH[] = GND; - ELSE - CTH[] = CTH[] + 1; - END IF; - - IF CTV[] == 319 THEN - CTV[] = GND; - ELSE - CTV[] = CTV[] + 1; - END IF; - - CTF[].clk = CTV8; - CTF[] = CTF[]+1; - --- ==== Video ========================================================== - - ZXS[] = ZX_PORT[5..0]; -- pages ZX Screens - ZX_SCREEN = ZX_PORT6; -- enable ZX Screen write - ZXA15 = ZX_PORT7; -- ZX A15' line - - SCR128 = DIR_PORT0; - --- WR_PIX = LCELL(TSN_W3); - WR_PIX = TSN_W3; - - DOUBLE.clk = CLK42; DOUBLE.ena = !E_WR; DOUBLE = DOUBLE_CAS; - VXA[].clk = CLK42; VXA[].ena = !E_WR; - - VXD0[].clk = CLK42; VXD0[].ena = !E_WRD; VDO0[] = VXD0[]; - VXD1[].clk = CLK42; VXD1[].ena = !E_WRD; VDO1[] = VXD1[]; - VXD2[].clk = CLK42; VXD2[].ena = !E_WRD; VDO2[] = VXD2[]; - VXD3[].clk = CLK42; VXD3[].ena = !E_WRD; VDO3[] = VXD3[]; - --- VXD0[] = D[]; --- VXD1[] = D[]; --- VXD2[] = D[]; --- VXD3[] = D[]; - - (VXD0[],VXD1[]) = MDI[]; - (VXD2[],VXD3[]) = MDI[]; - - BRD[] = DIR_PORT[7..5]; - - VCM[].clk = CLK42; - TSN_W3.clk = CLK42; - V_CST[].clk = CLK42; - V_WE.clk = CLK42; - V_WET[].clk = CLK42; - VLA[].clk = CLK42; - - SCR_ENA.clk = CLK42; - SCR_ENA.ena = !E_WR; - SCR_ENA.d = !(VAI19 or ZX_SCREEN); - - E_WRD = DFF(E_WR,CLK42,,); - E_WR = LCELL(WR or !(VAI19 or ZX_SCREEN) or !DFF(WR,CLK42,,)); --- E_WR = LCELL(WR or !DFF(WR,CLK42,,)); - --- **************************************************** - -IF MODE == "SPRINTER" GENERATE - --- VAI[19] - switch adress mode 1 - graf mode, 0 - spectrum mode - --- MXWE = DFF(((DFF(E_WR,CLK42,,) or SCR_ENA) & MXWE),CLK42,,V_WE); - MXWE = DFF(MXWE,CLK42,E_WR,V_WE); - - IF VAI[19] THEN - -- in graf mode all 256k(512k) range - VXA[] = VAI[]; - ELSE - -- in spectrum mode 8k/16k range pages - VXA[] = (GND,GND,VAI[7..0],ZXS[4..1],LCELL(ZXS0 xor ZXA15 xor VAI13),VAI[12..8]); - END IF; - --- BORD = DFF((MODE0[7..4] == 15),WR_PIC,,); --- BLANK = DFF((BORD & MODE03 & MODE02),WR_PIC,,); --- INTTX = DFF((BORD & MODE03 & MODE02 & MODE00),WR_PIC,,); - - BORD = DFF((MODE0[7..4] == 15),LWR_COL,,); - BLANK = DFF(((BORD & MODE03 & MODE02) or DIR_PORT4),LWR_COL,,); - INTTX = DFF((BORD & MODE03 & MODE02 & MODE00),LWR_COL,,); - - INTT = DFF(!(INTTX & (CTV[2..0] == 7)),CT5,,); - --- INTT = DFF((INTTX or DFF(INTTX,CT5,,)),CT5,,); --- INTT = DFF(!(BLANK & (CTV[2..0] == 7)),CLK42,,MODE0[0]); - - CASE CT[2..0] IS - WHEN B"110" => VCM[2..0].d = 5; -- 110 -> 101 6 -> 5 - WHEN B"000" => VCM[2..0].d = 1; -- 000 -> 001 0 -> 1 - WHEN B"001" => VCM[2..0].d = 4; -- 001 -> 100 1 -> 4 - WHEN B"010" => VCM[2..0].d = 3; -- 010 -> 011 2 -> 3 - WHEN B"100" => VCM[2..0].d = 2; -- 100 -> 010 4 -> 2 - WHEN B"101" => VCM[2..0].d = 0; -- 101 -> 000 5 -> 0 - END CASE; - - CASE VCM[1..0] IS - WHEN 0 => - VLA[].d = (BRVA[7..0],VCC,VCC,VCC,VCC,VCC,RBRVA[10..8],GND,GND); - V_CST[].d = (VCC,GND); - V_WE.d = VCC; - V_WEX.d = VCC; - -TSN_W3.d = X_MODE_BOND; -% - IF VCM2 THEN --- TSN_W3.d = X_MODE5; - TSN_W3.d = X_MODE_BOND; --- V_CST[].d = (VCC,X_MODE5); - ELSE - TSN_W3.d = X_MODE_BOND; --- V_CST[].d = (VCC,X_MODE_BOND); - END IF; -% - - WHEN 1 => - WR_PIC.d = !VCM2; - WR_COL.d = VCM2; - VLA[].d = SVA[]; - V_CST[].d = (VCC,GND); - V_WE.d = VCC; - V_WEX.d = VCC; - WHEN 2 => - VLA[].d = VXA[17..0]; - V_CST[].d = (!VXA18,VXA18) or MXWE; - V_WE.d = MXWE; - V_WEX.d = GND; - V_WET[].d = MXWE or !((!VXA1 & !VXA0),(!VXA1 & VXA0),(VXA1 & !VXA0),(VXA1 & VXA0)); - WHEN 3 => --- WR_PIC.d = X_MODE5; --- NEW 26.08.2022, fix bug with first column --- it was reproducing when changes mode 320 -> 640, like any 320px screen squares -> text mode squares - WR_PIC.d = MODE0[5]; - VLA[].d = (DIR_PORT3,CTH[5..0],CT5,VCC,VCC,CTV[8..3],GND,GND); - WR_MODE.d = !(CT[5..3] == B"111") & !(CT4 & CT3 & !MODE0[5]); - V_CST[].d = (VCC,GND); - V_WE.d = VCC; - V_WEX.d = VCC; - END CASE; - --- choose V-RAM komplect - - V_CST1.prn = GND; --- V_CS0.clrn = GND; - V_CST0.prn = (LCELL(DFF(GND,!CLK42,,!V_CST0))); - V_CS1 = VCC; --- V_CS0 = LCELL(V_CST0); - - V_CSX0 = LCELL(!CLK42); - V_CSX1 = LCELL(V_CSX0); - V_CSX2 = LCELL(V_CSX1 & V_CSX0); - V_CSX3 = LCELL(V_CSX2); - --- V_CS0 = V_CSX3; - V_CS0 = GND; - --- ===================== - - SVA[].clk = CLK42; - SVA[9..6] = MODE0[3..0]; --- RSVA[].clk = CLK42; - (SVA[12..10],SVA[5..0]) = RSVA[]; - --- M_CTV[2..0].clk = CLK42; --- M_CT[5..3].clk = CLK42; - M_CTV[2..0] = (!MODE2[2] & CTV[2..0]) or MODE2[2] & (MODE2[1],CTV[2..1]); - M_CT[5..3] = (!MODE2[2] & (CT[5],!CT[4..3])) or MODE2[2] & (MODE2[0],!CT[5..4]); - - CASE (!VCM2,MODE0[4]) IS --- CASE (!VCM1,MODE0[4]) IS - WHEN B"X0" => - -- Graf adress -- - RSVA[] = (M_CTV[2..0],MODE1[2..0],M_CT[5..3]); - SVA[17..13] = MODE1[7..3]; - --- SVA[12..10] = CTV[2..0]; --- SVA[5..0] = (MODE1[2..0],CT5,!CT[4..3]); - WHEN B"01" => - -- ZX-atr adress -- - RSVA[] = (MODE2[2..0],SCR128,VCC,VCC,GND,!MODE0[7..6]); - SVA[17..13] = MODE2[7..3]; - --- SVA[12..10] = MODE2[2..0]; --- SVA[5..0] = (SCR128,VCC,VCC,GND,!MODE0[7..6]); - WHEN B"11" => - -- ZX-pic adress -- - RSVA[] = (MODE1[2..0],SCR128,MODE0[7..6],CTV2,!CTV1,!CTV0); - SVA[17..13] = MODE1[7..3]; - --- SVA[12..10] = MODE1[2..0]; --- SVA[5..0] = (SCR128,MODE0[7..6],CTV2,!CTV1,!CTV0); - END CASE; - --- X_MODE_BOND = LCELL(LCELL(DCOL[7..4] == 15) & LCELL(DCOL[3..0] == 15) & DFF((MODE0[7] & MODE0[5] & !MODE0[4]),LWR_COL,VCC,VCC)); - X_MODE_BOND = GND; - --- LD_PIC = LCELL((MODE0[5] & DFF((CT[5..3] == B"000"),CLK42,,)) or (!MODE0[5] & DFF((CT[4..2] == B"000"),CLK42,,))); - LD_PIC = LCELL((MODE0[5] & DFF((CT[5..3] == B"000"),CLK42,,)) or (!MODE0[5] & DFF((CT[4..2] == B"000"),CLK42,,))); - - --- CASE (DFF(VLA1,!CLK42,,),DFF(VLA0,!CLK42,,)) IS - --- D_PIC0_[].clk = !CLK42; --- D_PIC1_[].clk = !CLK42; --- D_PIC2_[].clk = !CLK42; --- D_PIC3_[].clk = !CLK42; - --- PIC_CLK = LCELL(LCELL(CLK42)); - PIC_CLK = !CLK42; - - D_PIC0_[].clk = PIC_CLK; - D_PIC1_[].clk = PIC_CLK; - D_PIC2_[].clk = PIC_CLK; - D_PIC3_[].clk = PIC_CLK; - - D_PIC0_[] = VDM0[]; - D_PIC1_[] = VDM1[]; - D_PIC2_[] = VDM2[]; - D_PIC3_[] = VDM3[]; - - CASE (DFF(VLA1,CLK42,,),DFF(VLA0,CLK42,,)) IS - WHEN 0 => D_PICX_[] = D_PIC0_[]; - WHEN 1 => D_PICX_[] = D_PIC1_[]; - WHEN 2 => D_PICX_[] = D_PIC2_[]; - WHEN 3 => D_PICX_[] = D_PIC3_[]; - END CASE; - - MODE0[].ena = VCC; - MODE1[].ena = VCC; - MODE2[].ena = VCC; - MODE0[].clk = LWR_MODE; - MODE1[].clk = LWR_MODE; - MODE2[].clk = LWR_MODE; - MODE0[].d = VDM3[]; - MODE1[].d = VDM2[]; - MODE2[].d = VDM1[]; - LWR_MODE = LCELL(LCELL(WR_MODE)); -% - MODE0[].ena = LWR_MODE; - MODE1[].ena = LWR_MODE; - MODE2[].ena = LWR_MODE; - MODE0[].clk = CLK42; - MODE1[].clk = CLK42; - MODE2[].clk = CLK42; - MODE0[].d = D_PIC3_[]; - MODE1[].d = D_PIC2_[]; - MODE2[].d = D_PIC1_[]; - LWR_MODE = DFF(!WR_MODE,CLK42,,); -% - X_MODE7 = DFF(MODE0[7],LWR_COL,,); - X_MODE6 = DFF(MODE0[6],LWR_COL,,); - X_MODE5 = DFF(MODE0[5],LWR_COL,,); - X_MODE4 = DFF(MODE0[4],LWR_COL,,); - - VAO[] = VLA[17..2]; - - WR_PIC.clk = CLK42; - WR_COL.clk = CLK42; - WR_MODE.clk = CLK42; - --- LWR_PIC = LCELL(LCELL(WR_PIC)); --- LWR_COL = LCELL(LCELL(WR_COL)); --- LWR_PIC = LCELL(WR_PIC); --- LWR_COL = LCELL(WR_COL); - LWR_PIC = DFF(WR_PIC,CLK42,,); - LWR_COL = DFF(WR_COL,CLK42,,); - --- D_PIC0[].ena = VCC; --- D_PIC0[].clk = (LWR_PIC); - D_PIC0[].ena = !LWR_PIC; - D_PIC0[].clk = CLK42; - - - - - IF LD_PIC THEN --- D_PIC0[] = D_PIC0_[]; - D_PIC0[] = D_PICX_[]; - ELSE - D_PIC0[] = (D_PIC0[6..0],GND); - END IF; - - --- DCOL[].clk = (LWR_COL); - DCOL[].ena = !LWR_COL; - DCOL[].clk = CLK42; - - IF DFF((MODE0[7..4] == 15),WR_PIC,,) THEN - DCOL[].d = (B"00",BRD[2..0],BRD[2..0]); - ELSE --- DCOL[].d = D_PIC0_[]; - DCOL[].d = D_PICX_[]; - END IF; - - DCOL[].clrn = !BLANK; - - BRVA[].clk = CLK42; - BRVA[].clrn = !MS_POINT; - BRVA[].prn = !MS_POINT2; - --- MODE0[4] - graph / text --- MODE0[5] - 320 / 640 resolution - --- CASE (LCELL(X_MODE4 or X_MODE5),CT2) IS - CASE (DFF((MODE0[4] or MODE0[5]),LWR_COL,,),CT2) IS - WHEN B"1X" => BRVA[7..0] = DCOL[]; - WHEN B"01" => BRVA[7..0] = (B"0000",DCOL[7..4]); - WHEN B"00" => BRVA[7..0] = (B"0000",DCOL[3..0]); - END CASE; - --- BRVA[10..8] = (x_mode4,RBRVA[9..8]); - RBRVA[].clk = CLK42; - - CASE (BORD,X_MODE4) IS - WHEN B"X0" => RBRVA[10..8].d = (GND,X_MODE[7..6]); - WHEN B"X1" => RBRVA[10..8].d = (VCC,(CTF4 & !BLANK),D_PIC0[7]); - END CASE; - - RBRVA[9..8].clrn = !BORD; - RBRVA[10].prn = !BORD; - - CASE (RBRVA[9..8],BRVA7) IS - WHEN 0,1,4,7 => ZX_COL[] = (BRVA[6],BRVA[5..3]); - WHEN 2,3,6,5 => ZX_COL[] = (BRVA[6],BRVA[2..0]); - END CASE; - --- V_WET[].prn = LCELL(DFF(GND,!CLK42,,!V_WE)); --- V_WE.prn = LCELL(DFF(GND,!CLK42,,!V_WE)); - - V_WE_R = DFF(GND,!CLK42,,!V_WE); - V_WE.prn = V_WE_R; - V_WET[].prn = V_WE_R; - --- V_WR[] = LCELL(V_WE) or !((!VXA1 & !VXA0),(!VXA1 & VXA0),(VXA1 & !VXA0),(VXA1 & VXA0)); - --- V_WR[] = (V_WE) or !( - - V_WEX.clk = CLK42; --- V_WEX.d = V_WE; --- V_WEX.prn = (DFF(GND,CLK42,,!V_WEX)); - - - - - V_WEMMM = LCELL(V_WE); --- V_WEMMN = LCELL(V_WEMMM); -- bios ok, fn ok, fnf1 failed, zx almost ok --- V_WEMMO = LCELL(V_WEMMN); -- green arts --- V_WEMMP = LCELL(V_WEMMO); -- blue + pink arts --- V_WEMMR = LCELL(V_WEMMP); -- no F1 issue, but red arts (fix by finger, not enough capacity??) --- V_WEMMS = LCELL(V_WEMMR); --- V_WEMMT = LCELL(V_WEMMS); --- V_WEMMU = LCELL(V_WEMMT); --- V_WEMMV = LCELL(V_WEMMU); --- V_WEMMW = LCELL(V_WEMMV); --- V_WEMMX = LCELL(V_WEMMW); --- V_WEMMY = LCELL(V_WEMMX); --- V_WEMMZ = LCELL(V_WEMMY); - - V_WRM = LCELL(V_WE or V_WEMMM); - - --- V_WRM = LCELL(V_WEMMN or V_WEMMM); --- V_WRM2 = LCELL(V_WEMMN or V_WEMMM); --- V_WRM2 = LCELL(V_WEMMR); --- V_WRM = LCELL(V_WEMMM or V_WEMMN); --- V_WRM2 = LCELL(V_WEMMM or V_WEMMN); - - V_WEM = (V_WE); - --- V_WEM2 = LCELL(V_WE); --- V_WEM = LCELL(V_WEMMM & V_WEMMN); --- V_WEM2 = LCELL(V_WEMMM & V_WEMMO); - ---- LWR_COL = DFF(WR_COL,CLK42,,); - F_WR = (LCELL(LCELL(LCELL(LCELL(DFF(VCC,V_WE,,)))))); ---- F_WR = DFF(V_WE,CLK42,,); - V_WEMMZ = LCELL(CLK42); - V_EN3 = (DFF(!(!VXA1 & LCELL(!VXA0 or DOUBLE)), V_WEMMZ, F_WR,)); - V_EN2 = (DFF(!(!VXA1 & LCELL(VXA0 or DOUBLE)), V_WEMMZ, F_WR,)); - V_EN1 = (DFF(!(VXA1 & LCELL(!VXA0 or DOUBLE)), V_WEMMZ, F_WR,)); - V_EN0 = (DFF(!(VXA1 & LCELL(VXA0 or DOUBLE)), V_WEMMZ, F_WR,)); - - --- V_WR_3 = LCELL(V_WRM or V_EN3); --- V_WR_2 = LCELL(V_WRM or V_EN2); --- V_WR_1 = LCELL(V_WRM or V_EN1); --- V_WR_0 = LCELL(V_WRM or V_EN0); - V_WR_3 = LCELL(LCELL(LCELL(LCELL(V_WE or V_EN3)))); - V_WR_2 = LCELL(LCELL(LCELL(LCELL(V_WE or V_EN2)))); - V_WR_1 = LCELL(LCELL(LCELL(LCELL(V_WE or V_EN1)))); - V_WR_0 = LCELL(LCELL(LCELL(LCELL(V_WE or V_EN0)))); - - V_WEY3 = LCELL(V_WE or V_EN3); - V_WEY2 = LCELL(V_WE or V_EN2); - V_WEY1 = LCELL(V_WE or V_EN1); - V_WEY0 = LCELL(V_WE or V_EN0); - - V_WR[] = V_WR_[]; -- V_WR0-3 - V_WEN[] = V_WEY[]; -- VD0-3 - - - - - -% - V_WEMMM = LCELL(V_WE); - V_WEMMN = LCELL(V_WEMMM); - V_WEMMO = LCELL(V_WEMMN); - V_WEMM = LCELL(V_WEMMO); - - V_WRM = LCELL(V_WEMMN & V_WEMMM); - V_WRM2 = LCELL(V_WEMMN & V_WEMMM); - - V_WEM = LCELL(V_WEMMM & V_WEMMO); - V_WEM2 = LCELL(V_WEMMM & V_WEMMO); - - V_EN3 = DFF(!(!VXA1 & (!VXA0 or DOUBLE)),CLK42,F_WR,); - V_EN2 = DFF(!(!VXA1 & (VXA0 or DOUBLE)) ,CLK42,F_WR,); - V_EN1 = DFF(!(VXA1 & (!VXA0 or DOUBLE)) ,CLK42,F_WR,); - V_EN0 = DFF(!(VXA1 & (VXA0 or DOUBLE)) ,CLK42,F_WR,); - - F_WR = DFF(VCC,V_WE,,); - - V_WR_3 = V_WRM or V_EN3; - V_WR_2 = V_WRM2 or V_EN2; - V_WR_1 = V_WRM or V_EN1; - V_WR_0 = V_WRM or V_EN0; - - V_WEY3 = V_WEM or V_EN3; - V_WEY2 = V_WEM2 or V_EN2; - V_WEY1 = V_WEM or V_EN1; - V_WEY0 = V_WEM or V_EN0; - - V_WR[] = V_WR_[]; - V_WEN[] = V_WEY[]; -% - - - - - --- CLK84 = LCELL(CLK42 xor CLK84_X); --- CLK84_X = DFF(!CLK84_X,CLK84,,); --- CLK84_Y = CLK84; - -END GENERATE; -- end "sprinter" mode - - -END; diff --git a/src/altera/acex/k30/VIDEO2_T2_dip_stable.TDF b/src/altera/acex/k30/VIDEO2_T2_dip_stable.TDF deleted file mode 100644 index ea1e862..0000000 --- a/src/altera/acex/k30/VIDEO2_T2_dip_stable.TDF +++ /dev/null @@ -1,783 +0,0 @@ - - TITLE "Video-controller"; - -INCLUDE "lpm_ram_dp"; - -PARAMETERS - ( - MODE = "SPRINTER", - MOUSE = "NO", - HOR_PLACE = H"50", - VER_PLACE = H"91" -- 122h/2 - ); - -SUBDESIGN video2 - ( - CLK42 : INPUT; - - CT[5..0] : OUTPUT; - CTH[5..0] : OUTPUT; - CTV[8..0] : OUTPUT; - CTF[6..0] : OUTPUT; - - BLANK : OUTPUT; - - START_UP : INPUT; - COPY_SINC_H : INPUT; - COPY_SINC_V : INPUT; - - WR : INPUT; - - VAI[19..0] : INPUT; -- input screen adress - - VAO[15..0] : OUTPUT; - - D[7..0] : INPUT; - MDI[15..0] : INPUT; - - VDO0[7..0] : OUTPUT; - VDO1[7..0] : OUTPUT; - VDO2[7..0] : OUTPUT; - VDO3[7..0] : OUTPUT; - - VDM0[7..0] : INPUT; - VDM1[7..0] : INPUT; - VDM2[7..0] : INPUT; - VDM3[7..0] : INPUT; - - V_WR[3..0] : OUTPUT; - V_WEN[3..0] : OUTPUT; - - V_CS[1..0] : OUTPUT; - WR_PIX : OUTPUT; - --- ZX_COLOR[3..0] : OUTPUT; - - ZX_PORT[7..0] : INPUT; - DIR_PORT[7..0] : INPUT; - -% - bit0 - Spectrum SCREEN Switch - bit1 - Spectrum Adress MODE - bit2 - Write to Spectrum Screen OFF - bit3 - MODE page 0/1 - bit4 - MODE on/off screen - - bit7..5 - Border -% - - INTT : OUTPUT; - - DOUBLE_CAS : INPUT; - - MOUSE_X[9..0] : INPUT; - MOUSE_Y[9..0] : INPUT; - - - ) -VARIABLE - --- CLK84 : NODE; --- CLK84_X : NODE; --- CLK84_Y : NODE; - - ZX_COLOR[3..0] : NODE; - - CT[5..0] : DFFE; - CTH[5..0] : DFFE; - CTV[8..0] : DFFE; - CTF[6..0] : DFF; - - VXA[19..0] : DFFE; - - VXD0[7..0] : DFFE; - VXD1[7..0] : DFFE; - VXD2[7..0] : DFFE; - VXD3[7..0] : DFFE; - - E_WR : NODE; - E_WRD : NODE; - - BLANK : NODE; - BORD : NODE; --- INTT_T : NODE; - INTTX : NODE; - - VLA[17..0] : DFF; --- SVA[17..0] : NODE; - SVA[17..0] : DFF; --- RSVA[8..0] : LCELL; - RSVA[8..0] : NODE; --- RSVA[8..0] : DFF; - - V_CST[1..0] : DFF; - VCM[2..0] : DFF; - TSN_W3 : DFF; - V_WE : DFF; - V_WEX : DFF; - - V_WEM : NODE; - V_WEM2 : NODE; - V_WRM : NODE; - V_WRM2 : NODE; -% - V_WEMM : NODE; - V_WEMMM : NODE; - V_WEMMN : NODE; - V_WEMMO : NODE; -% - V_WEMM : NODE; - V_WEMMM : NODE; - V_WEMMN : NODE; - V_WEMMO : NODE; - V_WEMMP : NODE; - V_WEMMQ : NODE; - V_WEMMR : NODE; - V_WEMMS : NODE; - V_WEMMT : NODE; - V_WEMMU : NODE; - V_WEMMV : NODE; - V_WEMMW : NODE; - V_WEMMX : NODE; - V_WEMMY : NODE; - V_WEMMZ : NODE; - - - - V_WET[3..0] : DFF; - - D_PIC0[7..0] : DFFE; --- D_PIC0_[7..0] : LCELL; - - D_PIC0_[7..0] : DFFE; - D_PIC1_[7..0] : DFFE; - D_PIC2_[7..0] : DFFE; - D_PIC3_[7..0] : DFFE; - - D_PICX_[7..0] : NODE; - - LWR_PIC : NODE; - LWR_COL : NODE; - - WR_PIC : DFF; - WR_COL : DFF; - LD_PIC : NODE; -MXL: NODE; -MXR: NODE; - - RBRVA[10..8]: DFF; - BRVA[7..0] : DFF; - DCOL[7..0] : DFFE; - - MXWE : NODE; --- MXCE : NODE; - - AX128 : NODE; - - BRD[2..0] : NODE; - - ZX_COL[3..0] : LCELL; - - ZXA15 : NODE; - ZXS[5..0] : NODE; - ZX_SCREEN : NODE; - SCR128 : NODE; - - MODE0[7..0] : DFFE; - MODE1[7..0] : DFFE; - MODE2[7..0] : DFFE; --- MODE3[7..0] : DFF; - - WR_MODE : DFF; - LWR_MODE : NODE; - X_MODE[7..4]: NODE; - X_MODE_BOND : NODE; - --- M_CTV[2..0] : DFF; --- M_CT[5..3] : DFF; - M_CTV[2..0] : LCELL; - M_CT[5..3] : LCELL; - - DOUBLE : DFFE; - - PIC_CLK : NODE; - - MS_X[9..0] : DFF; - MS_Y[9..0] : DFF; - - MS_POINT : NODE; - MS_POINT2 : NODE; - MS_PNT : NODE; - - MS_DAT : LPM_RAM_DP WITH (LPM_WIDTH=16,LPM_WIDTHAD=8,LPM_FILE="MOUSE.MIF"); - - SCR_ENA : DFFE; - V_WR_[3..0] : LCELL; - V_WEY[3..0] : LCELL; - - V_WE_R : NODE; - - V_CSX[3..0] : NODE; - - V_EN[3..0] : NODE; - - F_WR : NODE; - -BEGIN - - DEFAULTS - WR_MODE.d = VCC; -- WR_MODE2.d = VCC; -- WR_MODE2X.d = VCC; - V_CST[].d = VCC; V_WR[] = VCC; TSN_W3.d = VCC; - V_WE.d = VCC; WR_COL.d = VCC; WR_PIC.d = VCC; - V_WET[].d = VCC; - END DEFAULTS; - - ZX_COLOR[] = ZX_COL[]; - --- === MOUSE counters ======== - - MS_X[].clk = !CT1; - CASE LCELL(CTH[5..2] == 12) IS - WHEN 0 => MS_X[] = MS_X[] + 1; - WHEN 1 => MS_X[] = (!MOUSE_X[9..0]); - END CASE; - - MS_Y[].clk = !CTH5; - CASE LCELL(CTV8 & !CTV5 & CTV4) IS - WHEN 0 => MS_Y[] = MS_Y[] + 1; - WHEN 1 => MS_Y[] = (GND,!MOUSE_Y[8..0]); - END CASE; - - MS_PNT = DFF(((MS_X[] == B"100000XXXX") & (MS_Y[] == B"100000XXXX")),CLK42,,); - - MS_DAT.wren = GND; - MS_DAT.data[] = GND; - MS_DAT.wraddress[] = GND; - MS_DAT.wrclock = CLK42; - MS_DAT.wrclken = GND; - MS_DAT.rden = VCC; - MS_DAT.rdaddress[] = (MS_Y[3..0],MS_X[3..0]); - MS_DAT.rdclock = CLK42; - MS_DAT.rdclken = VCC; - - IF MOUSE == "NO" GENERATE - MS_POINT = GND; - MS_POINT2 = GND; - ELSE GENERATE - MS_POINT = DFF((MS_PNT & MS_DAT.q0),CLK42,,); - MS_POINT2 = DFF((MS_PNT & MS_DAT.q1),CLK42,,); - END GENERATE; - --- === Sinc-counts GENERATOR ============================================ - --- CT[].clrn = START_UP; - --- (,CTH[5..0].clrn,CT[5].clrn) = !COPY_SINC_H or HOR_PLACE; --- (,CTH[5..0].prn ,CT[5].prn ) = !COPY_SINC_H or !HOR_PLACE; - --- CTV[].clrn = !COPY_SINC_V or VER_PLACE; --- CTV[].prn = !COPY_SINC_V or !VER_PLACE; - - CT[5].clrn = !COPY_SINC_H; - - -- set CTH to 50 (32h) - CTH[0].clrn = !COPY_SINC_H; - CTH[1].prn = !COPY_SINC_H; - CTH[2].clrn = !COPY_SINC_H; - CTH[3].clrn = !COPY_SINC_H; - CTH[4].prn = !COPY_SINC_H; - CTH[5].prn = !COPY_SINC_H; - - -- set CTV to 122h - CTV[0].clrn = !COPY_SINC_V; - CTV[1].prn = !COPY_SINC_V; - CTV[3..2].clrn = !COPY_SINC_V; - - CTV[4].clrn = !COPY_SINC_V; - CTV[5].prn = !COPY_SINC_V; - CTV[7..6].clrn = !COPY_SINC_V; - CTV[8].prn = !COPY_SINC_V; - - CT[5..0].clk = CLK42; - CTH[5..0].clk = CLK42; - CTV[8..0].clk = CLK42; - - CT[2..0].ena = VCC; - - CASE CT[2..0] IS - WHEN 0 => CT[2..0] = 1; - WHEN 1 => CT[2..0] = 2; - WHEN 2 => CT[2..0] = 4; - WHEN 3 => CT[2..0] = 4; - WHEN 4 => CT[2..0] = 5; - WHEN 5 => CT[2..0] = 6; - WHEN 6 => CT[2..0] = 0; - WHEN 7 => CT[2..0] = 0; - END CASE; - - -- for remove sinc jitter --- CT[5..3].ena = DFF(((CT0 & CT2) or (COPY_SINC_H & !CT4)),CLK42,,); - CT[5..3].ena = DFF((CT0 & CT2),CLK42,,); - CT[5..3] = CT[5..3]+1; -% - CASE CT[4..3] IS - WHEN 0 => CT[5..3] = CT[5..3]+1; - WHEN 1 => CT[5..3] = CT[5..3]+1; - WHEN 2 => CT[5..3] = CT[5..3]+1; - WHEN 3 => CT[5..3] = CT[5..3]+1; - END CASE; -% - CTH[].ena = DFF(((CT[5..2] == 15) & CT0),CLK42,,); - CTV[].ena = DFF(((CT[5..2] == 15) & CT0 & (CTH[] == 48)),CLK42,,); - - IF CTH[] == 55 THEN - CTH[] = GND; - ELSE - CTH[] = CTH[] + 1; - END IF; - - IF CTV[] == 319 THEN - CTV[] = GND; - ELSE - CTV[] = CTV[] + 1; - END IF; - - CTF[].clk = CTV8; - CTF[] = CTF[]+1; - --- ==== Video ========================================================== - - ZXS[] = ZX_PORT[5..0]; -- pages ZX Screens - ZX_SCREEN = ZX_PORT6; -- enable ZX Screen write - ZXA15 = ZX_PORT7; -- ZX A15' line - - SCR128 = DIR_PORT0; - --- WR_PIX = LCELL(TSN_W3); - WR_PIX = TSN_W3; - - DOUBLE.clk = CLK42; DOUBLE.ena = !E_WR; DOUBLE = DOUBLE_CAS; - VXA[].clk = CLK42; VXA[].ena = !E_WR; - - VXD0[].clk = CLK42; VXD0[].ena = !E_WRD; VDO0[] = VXD0[]; - VXD1[].clk = CLK42; VXD1[].ena = !E_WRD; VDO1[] = VXD1[]; - VXD2[].clk = CLK42; VXD2[].ena = !E_WRD; VDO2[] = VXD2[]; - VXD3[].clk = CLK42; VXD3[].ena = !E_WRD; VDO3[] = VXD3[]; - --- VXD0[] = D[]; --- VXD1[] = D[]; --- VXD2[] = D[]; --- VXD3[] = D[]; - - (VXD0[],VXD1[]) = MDI[]; - (VXD2[],VXD3[]) = MDI[]; - - BRD[] = DIR_PORT[7..5]; - - VCM[].clk = CLK42; - TSN_W3.clk = CLK42; - V_CST[].clk = CLK42; - V_WE.clk = CLK42; - V_WET[].clk = CLK42; - VLA[].clk = CLK42; - - SCR_ENA.clk = CLK42; - SCR_ENA.ena = !E_WR; - SCR_ENA.d = !(VAI19 or ZX_SCREEN); - - E_WRD = DFF(E_WR,CLK42,,); - E_WR = LCELL(WR or !(VAI19 or ZX_SCREEN) or !DFF(WR,CLK42,,)); --- E_WR = LCELL(WR or !DFF(WR,CLK42,,)); - --- **************************************************** - -IF MODE == "SPRINTER" GENERATE - --- VAI[19] - switch adress mode 1 - graf mode, 0 - spectrum mode - --- MXWE = DFF(((DFF(E_WR,CLK42,,) or SCR_ENA) & MXWE),CLK42,,V_WE); - MXWE = DFF(MXWE,CLK42,E_WR,V_WE); - - IF VAI[19] THEN - -- in graf mode all 256k(512k) range - VXA[] = VAI[]; - ELSE - -- in spectrum mode 8k/16k range pages - VXA[] = (GND,GND,VAI[7..0],ZXS[4..1],LCELL(ZXS0 xor ZXA15 xor VAI13),VAI[12..8]); - END IF; - --- BORD = DFF((MODE0[7..4] == 15),WR_PIC,,); --- BLANK = DFF((BORD & MODE03 & MODE02),WR_PIC,,); --- INTTX = DFF((BORD & MODE03 & MODE02 & MODE00),WR_PIC,,); - - BORD = DFF((MODE0[7..4] == 15),LWR_COL,,); - BLANK = DFF(((BORD & MODE03 & MODE02) or DIR_PORT4),LWR_COL,,); - INTTX = DFF((BORD & MODE03 & MODE02 & MODE00),LWR_COL,,); - - INTT = DFF(!(INTTX & (CTV[2..0] == 7)),CT5,,); - --- INTT = DFF((INTTX or DFF(INTTX,CT5,,)),CT5,,); --- INTT = DFF(!(BLANK & (CTV[2..0] == 7)),CLK42,,MODE0[0]); - - CASE CT[2..0] IS - WHEN B"110" => VCM[2..0].d = 5; -- 110 -> 101 6 -> 5 - WHEN B"000" => VCM[2..0].d = 1; -- 000 -> 001 0 -> 1 - WHEN B"001" => VCM[2..0].d = 4; -- 001 -> 100 1 -> 4 - WHEN B"010" => VCM[2..0].d = 3; -- 010 -> 011 2 -> 3 - WHEN B"100" => VCM[2..0].d = 2; -- 100 -> 010 4 -> 2 - WHEN B"101" => VCM[2..0].d = 0; -- 101 -> 000 5 -> 0 - END CASE; - - CASE VCM[1..0] IS - WHEN 0 => - VLA[].d = (BRVA[7..0],VCC,VCC,VCC,VCC,VCC,RBRVA[10..8],GND,GND); - V_CST[].d = (VCC,GND); - V_WE.d = VCC; - V_WEX.d = VCC; - -TSN_W3.d = X_MODE_BOND; -% - IF VCM2 THEN --- TSN_W3.d = X_MODE5; - TSN_W3.d = X_MODE_BOND; --- V_CST[].d = (VCC,X_MODE5); - ELSE - TSN_W3.d = X_MODE_BOND; --- V_CST[].d = (VCC,X_MODE_BOND); - END IF; -% - - WHEN 1 => - WR_PIC.d = !VCM2; - WR_COL.d = VCM2; - VLA[].d = SVA[]; - V_CST[].d = (VCC,GND); - V_WE.d = VCC; - V_WEX.d = VCC; - WHEN 2 => - VLA[].d = VXA[17..0]; - V_CST[].d = (!VXA18,VXA18) or MXWE; - V_WE.d = MXWE; - V_WEX.d = GND; - V_WET[].d = MXWE or !((!VXA1 & !VXA0),(!VXA1 & VXA0),(VXA1 & !VXA0),(VXA1 & VXA0)); - WHEN 3 => --- WR_PIC.d = X_MODE5; --- NEW 26.08.2022, fix bug with first column --- it was reproducing when changes mode 320 -> 640, like any 320px screen squares -> text mode squares - WR_PIC.d = MODE0[5]; - VLA[].d = (DIR_PORT3,CTH[5..0],CT5,VCC,VCC,CTV[8..3],GND,GND); - WR_MODE.d = !(CT[5..3] == B"111") & !(CT4 & CT3 & !MODE0[5]); - V_CST[].d = (VCC,GND); - V_WE.d = VCC; - V_WEX.d = VCC; - END CASE; - --- choose V-RAM komplect - - V_CST1.prn = GND; --- V_CS0.clrn = GND; - V_CST0.prn = (LCELL(DFF(GND,!CLK42,,!V_CST0))); - V_CS1 = VCC; --- V_CS0 = LCELL(V_CST0); - - V_CSX0 = LCELL(!CLK42); - V_CSX1 = LCELL(V_CSX0); - V_CSX2 = LCELL(V_CSX1 & V_CSX0); - V_CSX3 = LCELL(V_CSX2); - --- V_CS0 = V_CSX3; - V_CS0 = GND; - --- ===================== - - SVA[].clk = CLK42; - SVA[9..6] = MODE0[3..0]; --- RSVA[].clk = CLK42; - (SVA[12..10],SVA[5..0]) = RSVA[]; - --- M_CTV[2..0].clk = CLK42; --- M_CT[5..3].clk = CLK42; - M_CTV[2..0] = (!MODE2[2] & CTV[2..0]) or MODE2[2] & (MODE2[1],CTV[2..1]); - M_CT[5..3] = (!MODE2[2] & (CT[5],!CT[4..3])) or MODE2[2] & (MODE2[0],!CT[5..4]); - - CASE (!VCM2,MODE0[4]) IS --- CASE (!VCM1,MODE0[4]) IS - WHEN B"X0" => - -- Graf adress -- - RSVA[] = (M_CTV[2..0],MODE1[2..0],M_CT[5..3]); - SVA[17..13] = MODE1[7..3]; - --- SVA[12..10] = CTV[2..0]; --- SVA[5..0] = (MODE1[2..0],CT5,!CT[4..3]); - WHEN B"01" => - -- ZX-atr adress -- - RSVA[] = (MODE2[2..0],SCR128,VCC,VCC,GND,!MODE0[7..6]); - SVA[17..13] = MODE2[7..3]; - --- SVA[12..10] = MODE2[2..0]; --- SVA[5..0] = (SCR128,VCC,VCC,GND,!MODE0[7..6]); - WHEN B"11" => - -- ZX-pic adress -- - RSVA[] = (MODE1[2..0],SCR128,MODE0[7..6],CTV2,!CTV1,!CTV0); - SVA[17..13] = MODE1[7..3]; - --- SVA[12..10] = MODE1[2..0]; --- SVA[5..0] = (SCR128,MODE0[7..6],CTV2,!CTV1,!CTV0); - END CASE; - --- X_MODE_BOND = LCELL(LCELL(DCOL[7..4] == 15) & LCELL(DCOL[3..0] == 15) & DFF((MODE0[7] & MODE0[5] & !MODE0[4]),LWR_COL,VCC,VCC)); - X_MODE_BOND = GND; - --- LD_PIC = LCELL((MODE0[5] & DFF((CT[5..3] == B"000"),CLK42,,)) or (!MODE0[5] & DFF((CT[4..2] == B"000"),CLK42,,))); - LD_PIC = LCELL((MODE0[5] & DFF((CT[5..3] == B"000"),CLK42,,)) or (!MODE0[5] & DFF((CT[4..2] == B"000"),CLK42,,))); - - --- CASE (DFF(VLA1,!CLK42,,),DFF(VLA0,!CLK42,,)) IS - --- D_PIC0_[].clk = !CLK42; --- D_PIC1_[].clk = !CLK42; --- D_PIC2_[].clk = !CLK42; --- D_PIC3_[].clk = !CLK42; - --- PIC_CLK = LCELL(LCELL(CLK42)); - PIC_CLK = !CLK42; - - D_PIC0_[].clk = PIC_CLK; - D_PIC1_[].clk = PIC_CLK; - D_PIC2_[].clk = PIC_CLK; - D_PIC3_[].clk = PIC_CLK; - - D_PIC0_[] = VDM0[]; - D_PIC1_[] = VDM1[]; - D_PIC2_[] = VDM2[]; - D_PIC3_[] = VDM3[]; - - CASE (DFF(VLA1,CLK42,,),DFF(VLA0,CLK42,,)) IS - WHEN 0 => D_PICX_[] = D_PIC0_[]; - WHEN 1 => D_PICX_[] = D_PIC1_[]; - WHEN 2 => D_PICX_[] = D_PIC2_[]; - WHEN 3 => D_PICX_[] = D_PIC3_[]; - END CASE; - - MODE0[].ena = VCC; - MODE1[].ena = VCC; - MODE2[].ena = VCC; - MODE0[].clk = LWR_MODE; - MODE1[].clk = LWR_MODE; - MODE2[].clk = LWR_MODE; - MODE0[].d = VDM3[]; - MODE1[].d = VDM2[]; - MODE2[].d = VDM1[]; - LWR_MODE = LCELL(LCELL(WR_MODE)); -% - MODE0[].ena = LWR_MODE; - MODE1[].ena = LWR_MODE; - MODE2[].ena = LWR_MODE; - MODE0[].clk = CLK42; - MODE1[].clk = CLK42; - MODE2[].clk = CLK42; - MODE0[].d = D_PIC3_[]; - MODE1[].d = D_PIC2_[]; - MODE2[].d = D_PIC1_[]; - LWR_MODE = DFF(!WR_MODE,CLK42,,); -% - X_MODE7 = DFF(MODE0[7],LWR_COL,,); - X_MODE6 = DFF(MODE0[6],LWR_COL,,); - X_MODE5 = DFF(MODE0[5],LWR_COL,,); - X_MODE4 = DFF(MODE0[4],LWR_COL,,); - - VAO[] = VLA[17..2]; - - WR_PIC.clk = CLK42; - WR_COL.clk = CLK42; - WR_MODE.clk = CLK42; - --- LWR_PIC = LCELL(LCELL(WR_PIC)); --- LWR_COL = LCELL(LCELL(WR_COL)); --- LWR_PIC = LCELL(WR_PIC); --- LWR_COL = LCELL(WR_COL); - LWR_PIC = DFF(WR_PIC,CLK42,,); - LWR_COL = DFF(WR_COL,CLK42,,); - --- D_PIC0[].ena = VCC; --- D_PIC0[].clk = (LWR_PIC); - D_PIC0[].ena = !LWR_PIC; - D_PIC0[].clk = CLK42; - - - - - IF LD_PIC THEN --- D_PIC0[] = D_PIC0_[]; - D_PIC0[] = D_PICX_[]; - ELSE - D_PIC0[] = (D_PIC0[6..0],GND); - END IF; - - --- DCOL[].clk = (LWR_COL); - DCOL[].ena = !LWR_COL; - DCOL[].clk = CLK42; - - IF DFF((MODE0[7..4] == 15),WR_PIC,,) THEN - DCOL[].d = (B"00",BRD[2..0],BRD[2..0]); - ELSE --- DCOL[].d = D_PIC0_[]; - DCOL[].d = D_PICX_[]; - END IF; - - DCOL[].clrn = !BLANK; - - BRVA[].clk = CLK42; - BRVA[].clrn = !MS_POINT; - BRVA[].prn = !MS_POINT2; - --- MODE0[4] - graph / text --- MODE0[5] - 320 / 640 resolution - --- CASE (LCELL(X_MODE4 or X_MODE5),CT2) IS - CASE (DFF((MODE0[4] or MODE0[5]),LWR_COL,,),CT2) IS - WHEN B"1X" => BRVA[7..0] = DCOL[]; - WHEN B"01" => BRVA[7..0] = (B"0000",DCOL[7..4]); - WHEN B"00" => BRVA[7..0] = (B"0000",DCOL[3..0]); - END CASE; - --- BRVA[10..8] = (x_mode4,RBRVA[9..8]); - RBRVA[].clk = CLK42; - - CASE (BORD,X_MODE4) IS - WHEN B"X0" => RBRVA[10..8].d = (GND,X_MODE[7..6]); - WHEN B"X1" => RBRVA[10..8].d = (VCC,(CTF4 & !BLANK),D_PIC0[7]); - END CASE; - - RBRVA[9..8].clrn = !BORD; - RBRVA[10].prn = !BORD; - - CASE (RBRVA[9..8],BRVA7) IS - WHEN 0,1,4,7 => ZX_COL[] = (BRVA[6],BRVA[5..3]); - WHEN 2,3,6,5 => ZX_COL[] = (BRVA[6],BRVA[2..0]); - END CASE; - --- V_WET[].prn = LCELL(DFF(GND,!CLK42,,!V_WE)); --- V_WE.prn = LCELL(DFF(GND,!CLK42,,!V_WE)); - - V_WE_R = DFF(GND,!CLK42,,!V_WE); - V_WE.prn = V_WE_R; - V_WET[].prn = V_WE_R; - --- V_WR[] = LCELL(V_WE) or !((!VXA1 & !VXA0),(!VXA1 & VXA0),(VXA1 & !VXA0),(VXA1 & VXA0)); - --- V_WR[] = (V_WE) or !( - - V_WEX.clk = CLK42; --- V_WEX.d = V_WE; --- V_WEX.prn = (DFF(GND,CLK42,,!V_WEX)); - - - - - V_WEMMM = LCELL(V_WE); --- V_WEMMN = LCELL(V_WEMMM); -- bios ok, fn ok, fnf1 failed, zx almost ok --- V_WEMMO = LCELL(V_WEMMN); -- green arts --- V_WEMMP = LCELL(V_WEMMO); -- blue + pink arts --- V_WEMMR = LCELL(V_WEMMP); -- no F1 issue, but red arts (fix by finger, not enough capacity??) --- V_WEMMS = LCELL(V_WEMMR); --- V_WEMMT = LCELL(V_WEMMS); --- V_WEMMU = LCELL(V_WEMMT); --- V_WEMMV = LCELL(V_WEMMU); --- V_WEMMW = LCELL(V_WEMMV); --- V_WEMMX = LCELL(V_WEMMW); --- V_WEMMY = LCELL(V_WEMMX); --- V_WEMMZ = LCELL(V_WEMMY); - - V_WRM = LCELL(V_WE or V_WEMMM); - - --- V_WRM = LCELL(V_WEMMN or V_WEMMM); --- V_WRM2 = LCELL(V_WEMMN or V_WEMMM); --- V_WRM2 = LCELL(V_WEMMR); --- V_WRM = LCELL(V_WEMMM or V_WEMMN); --- V_WRM2 = LCELL(V_WEMMM or V_WEMMN); - - V_WEM = (V_WE); - --- V_WEM2 = LCELL(V_WE); --- V_WEM = LCELL(V_WEMMM & V_WEMMN); --- V_WEM2 = LCELL(V_WEMMM & V_WEMMO); - ---- LWR_COL = DFF(WR_COL,CLK42,,); - F_WR = ((LCELL(LCELL(LCELL(DFF(VCC,V_WE,,)))))); ---- F_WR = DFF(V_WE,CLK42,,); --- V_WEMMZ = LCELL(CLK42); - V_EN3 = (DFF(!(!VXA1 & (!VXA0 or DOUBLE)), CLK42, F_WR,)); - V_EN2 = (DFF(!(!VXA1 & (VXA0 or DOUBLE)), CLK42, F_WR,)); - V_EN1 = (DFF(!(VXA1 & (!VXA0 or DOUBLE)), CLK42, F_WR,)); - V_EN0 = (DFF(!(VXA1 & (VXA0 or DOUBLE)), CLK42, F_WR,)); - - --- V_WR_3 = LCELL(V_WRM or V_EN3); --- V_WR_2 = LCELL(V_WRM or V_EN2); --- V_WR_1 = LCELL(V_WRM or V_EN1); --- V_WR_0 = LCELL(V_WRM or V_EN0); - V_WR_3 = (LCELL(LCELL(LCELL(V_WRM or V_EN3)))); - V_WR_2 = (LCELL(LCELL(LCELL(V_WRM or V_EN2)))); - V_WR_1 = (LCELL(LCELL(LCELL(V_WRM or V_EN1)))); - V_WR_0 = (LCELL(LCELL(LCELL(V_WRM or V_EN0)))); - - V_WEY3 = LCELL(V_WE or V_EN3); - V_WEY2 = LCELL(V_WE or V_EN2); - V_WEY1 = LCELL(V_WE or V_EN1); - V_WEY0 = LCELL(V_WE or V_EN0); - - V_WR[] = V_WR_[]; -- V_WR0-3 - V_WEN[] = V_WEY[]; -- VD0-3 - - - - - -% - V_WEMMM = LCELL(V_WE); - V_WEMMN = LCELL(V_WEMMM); - V_WEMMO = LCELL(V_WEMMN); - V_WEMM = LCELL(V_WEMMO); - - V_WRM = LCELL(V_WEMMN & V_WEMMM); - V_WRM2 = LCELL(V_WEMMN & V_WEMMM); - - V_WEM = LCELL(V_WEMMM & V_WEMMO); - V_WEM2 = LCELL(V_WEMMM & V_WEMMO); - - V_EN3 = DFF(!(!VXA1 & (!VXA0 or DOUBLE)),CLK42,F_WR,); - V_EN2 = DFF(!(!VXA1 & (VXA0 or DOUBLE)) ,CLK42,F_WR,); - V_EN1 = DFF(!(VXA1 & (!VXA0 or DOUBLE)) ,CLK42,F_WR,); - V_EN0 = DFF(!(VXA1 & (VXA0 or DOUBLE)) ,CLK42,F_WR,); - - F_WR = DFF(VCC,V_WE,,); - - V_WR_3 = V_WRM or V_EN3; - V_WR_2 = V_WRM2 or V_EN2; - V_WR_1 = V_WRM or V_EN1; - V_WR_0 = V_WRM or V_EN0; - - V_WEY3 = V_WEM or V_EN3; - V_WEY2 = V_WEM2 or V_EN2; - V_WEY1 = V_WEM or V_EN1; - V_WEY0 = V_WEM or V_EN0; - - V_WR[] = V_WR_[]; - V_WEN[] = V_WEY[]; -% - - - - - --- CLK84 = LCELL(CLK42 xor CLK84_X); --- CLK84_X = DFF(!CLK84_X,CLK84,,); --- CLK84_Y = CLK84; - -END GENERATE; -- end "sprinter" mode - - -END; diff --git a/src/altera/acex/k30_make.bat b/src/altera/acex/k30_make.bat deleted file mode 100644 index cce458e..0000000 --- a/src/altera/acex/k30_make.bat +++ /dev/null @@ -1,5 +0,0 @@ -C: -cd "C:\users\tolik\Documents\SP_Projects\ASM\GIT\SP_Core\Build\acex\tmp\" -"C:\Program Files (x86)\MAXPLUS2\MAXPLUS2.EXE" -compile SP2_ACEX >> compile.log -transttf.exe SP2_ACEX.ttf ..\STREAM.BIN -exit \ No newline at end of file diff --git a/src/altera/make_altera.cmd b/src/altera/make_altera.cmd deleted file mode 100644 index 4499121..0000000 --- a/src/altera/make_altera.cmd +++ /dev/null @@ -1,10 +0,0 @@ -@echo off - -cd acex -call make.cmd - -cd ..\max -call make.cmd - -cd .. - diff --git a/src/altera/max/7064/SP2_MAX.ACF b/src/altera/max/7064/SP2_MAX.ACF deleted file mode 100644 index 40052de..0000000 --- a/src/altera/max/7064/SP2_MAX.ACF +++ /dev/null @@ -1,653 +0,0 @@ --- --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. --- -CHIP SP2_MAX -BEGIN - DEVICE = EPM7064STC100-10; - |GND65 : INPUT_PIN = 65; - |GND33 : INPUT_PIN = 33; - |/CONF_X : BIDIR_PIN = 54; - |10K_D0 : OUTPUT_PIN = 58; - |CLKZZ : BIDIR_PIN = 32; - |10K_CLK : OUTPUT_PIN = 56; - |XHD2_CS2 : OUTPUT_PIN = 83; - |XHD2_CS1 : OUTPUT_PIN = 81; - |XHD1_CS2 : OUTPUT_PIN = 80; - |XHD1_CS1 : OUTPUT_PIN = 79; - |XHD_WR : OUTPUT_PIN = 75; - |XHD_RES : OUTPUT_PIN = 71; - |XHD_RD : OUTPUT_PIN = 76; - |WR_PDOS : OUTPUT_PIN = 8; - |/WG_WR : OUTPUT_PIN = 93; - |/WG_RD : OUTPUT_PIN = 97; - |WDAT : OUTPUT_PIN = 98; - |TG42_OUT : OUTPUT_PIN = 85; - |TG42_BUF : OUTPUT_PIN = 36; - |SINC_2 : OUTPUT_PIN = 19; - |SINC_1 : OUTPUT_PIN = 20; - |SINC_V : OUTPUT_PIN = 64; - |SINC_H : OUTPUT_PIN = 68; - |SINC : OUTPUT_PIN = 67; - |QDAT : OUTPUT_PIN = 16; - |HD_DIR : OUTPUT_PIN = 48; - |HD_CS : OUTPUT_PIN = 52; - |FDAT : OUTPUT_PIN = 14; - |DENS_X : OUTPUT_PIN = 96; - |CMOS_DWR : OUTPUT_PIN = 100; - |CMOS_DRD : OUTPUT_PIN = 99; - |CMOS_AS : OUTPUT_PIN = 6; - |CLK14 : OUTPUT_PIN = 31; - |CLK_WG : OUTPUT_PIN = 13; - |BEEP : OUTPUT_PIN = 84; - |AUD : OUTPUT_PIN = 35; - |XHR_RDY : INPUT_PIN = 88; - |XA2 : INPUT_PIN = 23; - |XA1 : INPUT_PIN = 21; - |XA0 : INPUT_PIN = 17; - |XACS : INPUT_PIN = 37; - |WSTB : INPUT_PIN = 10; - |WR_CNF : INPUT_PIN = 57; - |WD : INPUT_PIN = 9; - |VGA_IN : INPUT_PIN = 61; - |TR43 : INPUT_PIN = 12; - |TG42_IN : INPUT_PIN = 87; - |STE : INPUT_PIN = 94; - |SR : INPUT_PIN = 29; - |SL : INPUT_PIN = 30; - |SINC_IN : INPUT_PIN = 69; - |RSTB : INPUT_PIN = 25; - |RDAT : INPUT_PIN = 92; - |PW_GOOD : INPUT_PIN = 90; - |HDD_C3 : INPUT_PIN = 40; - |HDD_C2 : INPUT_PIN = 41; - |HDD_C1 : INPUT_PIN = 42; - |HDD_C0 : INPUT_PIN = 47; - |FDD_C2 : INPUT_PIN = 46; - |FDD_C1 : INPUT_PIN = 45; - |FDD_C0 : INPUT_PIN = 44; - |EPM_RES : INPUT_PIN = 89; - |D0 : INPUT_PIN = 60; -END; - -DEFAULT_DEVICES -BEGIN - AUTO_DEVICE = EPM7256SQC208-7; - AUTO_DEVICE = EPM7256SRC208-7; - AUTO_DEVICE = EPM7192SQC160-7; - AUTO_DEVICE = EPM7160SQC160-6; - AUTO_DEVICE = EPM7160STC100-6; - AUTO_DEVICE = EPM7160SLC84-6; - AUTO_DEVICE = EPM7128SQC160-6; - AUTO_DEVICE = EPM7128STC100-6; - AUTO_DEVICE = EPM7128SQC100-6; - AUTO_DEVICE = EPM7128SLC84-6; - AUTO_DEVICE = EPM7064STC100-5; - AUTO_DEVICE = EPM7064SLC84-5; - AUTO_DEVICE = EPM7064STC44-5; - AUTO_DEVICE = EPM7064SLC44-5; - AUTO_DEVICE = EPM7032STC44-5; - AUTO_DEVICE = EPM7032SLC44-5; - ASK_BEFORE_ADDING_EXTRA_DEVICES = ON; -END; - -TIMING_POINT -BEGIN - DEVICE_FOR_TIMING_SYNTHESIS = EPM7064STC100-10; - FREQUENCY = 100MHz; - MAINTAIN_STABLE_SYNTHESIS = OFF; - CUT_ALL_CLEAR_PRESET = ON; - CUT_ALL_BIDIR = ON; -END; - -IGNORED_ASSIGNMENTS -BEGIN - FIT_IGNORE_TIMING = ON; - DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF; - IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF; - IGNORE_DEVICE_ASSIGNMENTS = OFF; - IGNORE_LC_ASSIGNMENTS = OFF; - IGNORE_PIN_ASSIGNMENTS = OFF; - IGNORE_CHIP_ASSIGNMENTS = OFF; - IGNORE_TIMING_ASSIGNMENTS = OFF; - IGNORE_LOGIC_OPTION_ASSIGNMENTS = OFF; - IGNORE_CLIQUE_ASSIGNMENTS = OFF; -END; - -LOGIC_OPTIONS -BEGIN - |LR_T1 : TURBO_BIT = ON; - |LR_T0 : TURBO_BIT = ON; - |CLK_WG : TURBO_BIT = ON; - |TG42_BUF : STYLE = WYSIWYG; - |TG42_OUT : STYLE = WYSIWYG; - |XHD_RD : TURBO_BIT = OFF; - |XHD_RES : TURBO_BIT = OFF; - |XHD_WR : TURBO_BIT = OFF; - |XHD1_CS1 : TURBO_BIT = OFF; - |XHD1_CS2 : TURBO_BIT = OFF; - |XHD2_CS1 : TURBO_BIT = OFF; - |XHD2_CS2 : TURBO_BIT = OFF; - |10K_CLK : TURBO_BIT = OFF; - |10K_D0 : TURBO_BIT = OFF; - |REG_P0 : TURBO_BIT = ON; - |REG_P1 : TURBO_BIT = ON; - |REG_P2 : TURBO_BIT = ON; - |TG42_BUF : TURBO_BIT = ON; - |TG42_OUT : TURBO_BIT = ON; - |STWG0 : TURBO_BIT = ON; - |STWG1 : TURBO_BIT = ON; - |STWG2 : TURBO_BIT = ON; - |XCT0 : TURBO_BIT = ON; - |XCT1 : TURBO_BIT = ON; -END; - -GLOBAL_PROJECT_DEVICE_OPTIONS -BEGIN - MULTIVOLT_IO = OFF; - SECURITY_BIT = ON; - MAX7000B_ENABLE_VREFB = OFF; - MAX7000B_ENABLE_VREFA = OFF; - MAX7000B_VCCIO_IOBANK2 = 3.3V; - MAX7000B_VCCIO_IOBANK1 = 3.3V; - CONFIG_EPROM_PULLUP_RESISTOR = ON; - CONFIG_EPROM_USER_CODE = FFFFFFFF; - FLEX_CONFIGURATION_EPROM = AUTO; - MAX7000AE_ENABLE_JTAG = ON; - MAX7000AE_USER_CODE = FFFFFFFF; - FLEX6000_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX10KA_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = ON; - FLEX10K_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX6000_ENABLE_JTAG = OFF; - CONFIG_SCHEME_FLEX_6000 = PASSIVE_SERIAL; - MAX7000S_ENABLE_JTAG = ON; - FLEX10K_ENABLE_LOCK_OUTPUT = OFF; - MAX7000S_USER_CODE = FFFF; - CONFIG_SCHEME_10K = PASSIVE_SERIAL; - FLEX10K_JTAG_USER_CODE = 7F; - ENABLE_INIT_DONE_OUTPUT = OFF; - ENABLE_CHIP_WIDE_OE = OFF; - ENABLE_CHIP_WIDE_RESET = OFF; - nCEO = UNRESERVED; - CLKUSR = UNRESERVED; - ADD17 = UNRESERVED; - ADD16 = UNRESERVED; - ADD15 = UNRESERVED; - ADD14 = UNRESERVED; - ADD13 = UNRESERVED; - ADD0_TO_ADD12 = UNRESERVED; - SDOUT = RESERVED_DRIVES_OUT; - RDCLK = UNRESERVED; - RDYnBUSY = UNRESERVED; - nWS_nRS_nCS_CS = UNRESERVED; - DATA1_TO_DATA7 = UNRESERVED; - DATA0 = RESERVED_TRI_STATED; - FLEX8000_ENABLE_JTAG = OFF; - CONFIG_SCHEME = ACTIVE_SERIAL; - DISABLE_TIME_OUT = OFF; - ENABLE_DCLK_OUTPUT = OFF; - RELEASE_CLEARS = OFF; - AUTO_RESTART = OFF; - USER_CLOCK = OFF; - RESERVED_PINS_PERCENT = 0; - RESERVED_LCELLS_PERCENT = 0; -END; - -GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS -BEGIN - STYLE = NORMAL; - AUTO_GLOBAL_CLEAR = OFF; - AUTO_GLOBAL_CLOCK = OFF; - DEVICE_FAMILY = MAX7000S; - MULTI_LEVEL_SYNTHESIS_MAX9000 = ON; - AUTO_IMPLEMENT_IN_EAB = OFF; - AUTO_OPEN_DRAIN_PINS = ON; - ONE_HOT_STATE_MACHINE_ENCODING = OFF; - AUTO_REGISTER_PACKING = OFF; - AUTO_FAST_IO = OFF; - AUTO_GLOBAL_OE = ON; - AUTO_GLOBAL_PRESET = ON; - MULTI_LEVEL_SYNTHESIS_MAX5000_7000 = OFF; - OPTIMIZE_FOR_SPEED = 5; -END; - -COMPILER_PROCESSING_CONFIGURATION -BEGIN - FITTER_SETTINGS = ADVANCED; - USE_QUARTUS_FITTER = OFF; - PRESERVE_ALL_NODE_NAME_SYNONYMS = OFF; - SMART_RECOMPILE = OFF; - GENERATE_AHDL_TDO_FILE = OFF; - RPT_FILE_USER_ASSIGNMENTS = ON; - RPT_FILE_LCELL_INTERCONNECT = ON; - RPT_FILE_HIERARCHY = ON; - RPT_FILE_EQUATIONS = ON; - LINKED_SNF_EXTRACTOR = OFF; - OPTIMIZE_TIMING_SNF = OFF; - TIMING_SNF_EXTRACTOR = ON; - FUNCTIONAL_SNF_EXTRACTOR = OFF; - DESIGN_DOCTOR_RULES = EPLD; - DESIGN_DOCTOR = OFF; -END; - -COMPILER_INTERFACES_CONFIGURATION -BEGIN - NETLIST_OUTPUT_TIME_SCALE = 0.1ns; - EDIF_INPUT_SHOW_LMF_MAPPING_MESSAGES = OFF; - EDIF_BUS_DELIMITERS = []; - EDIF_FLATTEN_BUS = OFF; - EDIF_OUTPUT_FORCE_0NS_DELAYS = OFF; - EDIF_OUTPUT_INCLUDE_SPECIAL_PRIM = OFF; - EDIF_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - EDIF_OUTPUT_DELAY_CONSTRUCTS = EDO_FILE; - EDIF_OUTPUT_USE_EDC = OFF; - EDIF_INPUT_USE_LMF2 = OFF; - EDIF_INPUT_USE_LMF1 = OFF; - EDIF_OUTPUT_GND = GND; - EDIF_OUTPUT_VCC = VCC; - EDIF_INPUT_GND = GND; - EDIF_INPUT_VCC = VCC; - EDIF_OUTPUT_EDC_FILE = *.edc; - EDIF_INPUT_LMF2 = *.lmf; - EDIF_INPUT_LMF1 = *.lmf; - VHDL_GENERATE_CONFIGURATION_DECLARATION = OFF; - VHDL_OUTPUT_DELAY_CONSTRUCTS = VHO_FILE; - VERILOG_OUTPUT_DELAY_CONSTRUCTS = VO_FILE; - VHDL_FLATTEN_BUS = OFF; - VERILOG_FLATTEN_BUS = OFF; - EDIF_TRUNCATE_HIERARCHY_PATH = OFF; - VHDL_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - VHDL_WRITER_VERSION = VHDL87; - VHDL_READER_VERSION = VHDL87; - SYNOPSYS_MAPPING_EFFORT = MEDIUM; - SYNOPSYS_BOUNDARY_OPTIMIZATION = OFF; - SYNOPSYS_HIERARCHICAL_COMPILATION = ON; - SYNOPSYS_DESIGNWARE = OFF; - SYNOPSYS_COMPILER = DESIGN; - USE_SYNOPSYS_SYNTHESIS = OFF; - VHDL_NETLIST_WRITER = OFF; - VERILOG_NETLIST_WRITER = OFF; - XNF_GENERATE_AHDL_TDX_FILE = ON; - XNF_TRANSLATE_INTERNAL_NODE_NAMES = ON; - XNF_EMULATE_TRI_STATE_BUSES = INTERNAL_LOGIC; - EDIF_OUTPUT_VERSION = 200; - EDIF_NETLIST_WRITER = OFF; -END; - -CUSTOM_DESIGN_DOCTOR_RULES -BEGIN - MASTER_RESET = OFF; - EXPANDER_NETWORKS = ON; - RACE_CONDITIONS = ON; - DELAY_CHAINS = ON; - ASYNCHRONOUS_INPUTS = ON; - PRESET_CLEAR_NETWORKS = ON; - STATIC_HAZARDS_AFTER_SYNTHESIS = OFF; - STATIC_HAZARDS_BEFORE_SYNTHESIS = ON; - MULTI_CLOCK_NETWORKS = ON; - MULTI_LEVEL_CLOCKS = ON; - GATED_CLOCKS = ON; - RIPPLE_CLOCKS = ON; -END; - -SIMULATOR_CONFIGURATION -BEGIN - END_TIME = 25.0us; - BIDIR_PIN = STRONG; - START_TIME = 0.0ns; - GLITCH_TIME = 0.0ns; - GLITCH = OFF; - OSCILLATION_TIME = 0.0ns; - OSCILLATION = OFF; - CHECK_OUTPUTS = OFF; - SETUP_HOLD = OFF; - USE_DEVICE = OFF; -END; - -TIMING_ANALYZER_CONFIGURATION -BEGIN - ANALYSIS_MODE = REGISTERED_PERFORMANCE; - CUT_OFF_RAM_REGISTERED_WE_PATHS = OFF; - LIST_PATH_FREQUENCY = 10MHz; - LIST_PATH_COUNT = 10; - REGISTERED_PERFORMANCE_OPTIONS = NUMBER_OF_PATHS; - INCLUDE_PATHS_LESS_THAN_VALUE = 214.7483647ms; - INCLUDE_PATHS_LESS_THAN = OFF; - INCLUDE_PATHS_GREATER_THAN_VALUE = 0.0ns; - INCLUDE_PATHS_GREATER_THAN = OFF; - DELAY_MATRIX_OPTIONS = SHOW_ALL_PATHS; - CELL_WIDTH = 18; - LIST_ONLY_LONGEST_PATH = ON; - CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; - CUT_OFF_IO_PIN_FEEDBACK = ON; - AUTO_RECALCULATE = OFF; -END; - -OTHER_CONFIGURATION -BEGIN - LAST_MAXPLUS2_VERSION = 10.0; - ROW_PINS_LCELL_INSERT = ON; - CARRY_OUT_PINS_LCELL_INSERT = OFF; - NORMAL_LCELL_INSERT = ON; - EXPLICIT_FAMILY = 1; - FLEX_10K_52_COLUMNS = 40; - DEFAULT_9K_EXP_PER_LCELL = 1/2; - LOCAL_INTERCONNECT_PER_LAB_PERCENT = 100; - LCELLS_PER_ROW_PERCENT = 100; - FAN_IN_PER_LCELL_PERCENT = 100; - EXP_PER_LCELL_PERCENT = 100; - ROW_PINS_PERCENT = 50; - ORIGINAL_MAXPLUS2_VERSION = 9.6; - COMPILER_DATA = "1,1,0,1,0,0,0,1,1,1,1,0,1,1,1"; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX7000 -BEGIN - TURBO_BIT = ON; - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.FLEX8000 -BEGIN - CARRY_CHAIN_LENGTH = 32; - CASCADE_CHAIN_LENGTH = 2; - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - IGNORE_SOFT_BUFFERS = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX7000 -BEGIN - TURBO_BIT = ON; - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = ON; - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = ON; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.FLEX8000 -BEGIN - CARRY_CHAIN_LENGTH = 32; - CASCADE_CHAIN_LENGTH = 2; - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = AUTO; - CASCADE_CHAIN = AUTO; - MINIMIZATION = FULL; - IGNORE_SOFT_BUFFERS = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = MANUAL; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = MANUAL; -END; - diff --git a/src/altera/max/7064/sp2_max.tdf b/src/altera/max/7064/sp2_max.tdf deleted file mode 100644 index b24582c..0000000 --- a/src/altera/max/7064/sp2_max.tdf +++ /dev/null @@ -1,499 +0,0 @@ - -TITLE "SINC_controller"; - -PARAMETERS - ( - G_MODE = 1, -- 1 on LCELL, 0 - on EXP - - NUM = "NO", - NUMBER1 = B"00100000X", -- 0 - sinc - NUMBER2 = B"00110111X", -- 7 - NUMBER3 = B"01001101X", -- D - NUMBER4 = B"01010010X", -- 2 - NUMBER5 = B"00100000X", -- - NUMBER6 = B"00100000X", -- - NUMBER7 = B"00100000X" -- - ); - -SUBDESIGN SP2_MAX - ( - - TG42_IN : INPUT; - TG42_OUT : OUTPUT; - TG42_BUF : OUTPUT; - CLKZZ : BIDIR; - CLK14 : OUTPUT; - - AUD : OUTPUT; -- clk for timers - BEEP : OUTPUT; - - CMOS_DRD : OUTPUT; - CMOS_AS : OUTPUT; - CMOS_DWR : OUTPUT; - - WR_PDOS : OUTPUT; - WD : INPUT; - WSTB : INPUT; - SR,SL : INPUT; - RSTB : INPUT; - TR43 : INPUT; - CLK_WG : OUTPUT; - FDAT : OUTPUT; - QDAT : OUTPUT; - RDAT : INPUT; - /WG_WR : OUTPUT; - /WG_RD : OUTPUT; - STE : INPUT; - DENS_X : OUTPUT; - WDAT : OUTPUT; - - --- XA[2..0] : BIDIR; - XA[2..0] : INPUT; - XACS : INPUT; --- SINC_1 : OUTPUT; - SINC_1 : BIDIR; - SINC_2 : BIDIR; - - HDD_C[3..0] : INPUT; - FDD_C[2..0] : INPUT; - - HD_DIR : OUTPUT; - HD_CS : OUTPUT; - - /CONF_X : BIDIR; - 10K_CLK : OUTPUT; - WR_CNF : INPUT; - 10K_D0 : OUTPUT; - D0 : INPUT; - - VGA_IN : INPUT; --- WR_COL : INPUT; - SINC_V : OUTPUT; - SINC_H : OUTPUT; - SINC : OUTPUT; - SINC_IN : INPUT; - - XHD_RES : OUTPUT; - XHD_WR : OUTPUT; - XHD_RD : OUTPUT; - - XHD1_CS[2..1] : OUTPUT; - XHD2_CS[2..1] : OUTPUT; - XHR_RDY : INPUT; - - EPM_RES : INPUT; - PW_GOOD : INPUT; - - UNUSED65 : INPUT; -- was GND65, hack for 3000 family - UNUSED33 : INPUT; -- was GND33, hack for 3000 family - UNUSED1 : INPUT; - UNUSED2 : INPUT; - UNUSED5 : INPUT; - UNUSED7 : INPUT; - UNUSED22 : INPUT; - UNUSED24 : INPUT; - UNUSED27 : INPUT; - UNUSED28 : INPUT; - UNUSED49 : INPUT; - UNUSED50 : INPUT; - UNUSED53 : INPUT; - UNUSED55 : INPUT; - UNUSED63 : INPUT; - UNUSED70 : INPUT; - UNUSED72 : INPUT; - UNUSED77 : INPUT; - UNUSED78 : INPUT; - - - - ) -VARIABLE - - XCT[2..0] : DFF; - CNF_ON : NODE; - CNF_OFF : NODE; - - CLK42 : NODE; - - CT[3..0] : DFF; - CTH[5..0] : DFF; - CTV[8..0] : DFFE; - - SINC_HT : DFF; - SINC_VT : DFFE; - - TURBING : NODE; - FDD_1440 : NODE; - NFDD_1440 : NODE; - - CT_WG : NODE; - CT_WG1 : NODE; - - STWG[2..0] : DFF; - CLK_PRC : NODE; - WGR[4..0] : DFF; - RDAT_X : NODE; - - REG_P[2..0] : DFF; - - /RESET : NODE; - - - S144,S720 : NODE; - - SHDD1,SHDD2 : NODE; - THDD : NODE; - NTHDD : NODE; - - NO_HDD : NODE; - - S320,S312 : NODE; - T320 : NODE; - NT320 : NODE; - - SOFT_RESET : NODE; - SOFT_RESET2 : NODE; - - HDD_CLK : NODE; - - LR_T[1..0] : DFF; - - EXP_X : NODE; - EXP_Y : NODE; - - CTV8M : DFF; - - CTV8C : NODE; - - FN_NUM : NODE; - -BEGIN - - /RESET = DFF((EPM_RES & XHD_RES),!CT3,SOFT_RESET,); - --- /RESET = (EXP(!EPM_RES & EXP(EXP(EXP(EPM_RES)))) & SOFT_RESET); - - EXP_X = EXP(TG42_IN); - EXP_Y = EXP(TG42_IN); - - IF (G_MODE == 0) GENERATE - TG42_OUT = LCELL(EXP_X); - ELSE GENERATE - TG42_OUT = LCELL(TG42_BUF); - END GENERATE; - - TG42_BUF = LCELL(!TG42_IN); - - CLK42 = TG42_IN; - --- CT[].clk = CLK14; - CT[].clk = XCT1; - CT[] = CT[] + 1; - --- === horizontal sinc ===== - - CTH[].clk = !CT3; - SINC_HT.clk = !CT3; - - IF !((CTH[] == B"XXXX11") & SINC_HT) THEN - CTH[] = CTH[] + 1; - ELSE - CTH[] = GND; - END IF; - --- SINC_1 = CTH5; - SINC_1 = TRI(CTH5,VCC); - SINC_2 = TRI(CTV8,VCC); - - SINC_HT.d = (CTH[] == B"1101XX"); - - SINC_H = SINC_HT; - --- === vertical sinc ======= - --- CTV[].clk = !CT3; --- SINC_VT.clk = !CT3; - - CTV[].clk = SINC_HT; - SINC_VT.clk = SINC_HT; - - CTV8M.clk = SINC_HT; - --- CTV[].ena = (CTH[] == B"110111"); --- SINC_VT.ena = (CTH[] == B"110111"); - CTV[].ena = VCC; - SINC_VT.ena = VCC; - --- IF (CTV[] == B"100111111") THEN - - IF (NUM == "YES") GENERATE - - FN_NUM =( - (CTV[8..0] == NUMBER1) or - (CTV[8..0] == NUMBER2) or - (CTV[8..0] == NUMBER3) or - (CTV[8..0] == NUMBER4) or - (CTV[8..0] == NUMBER5) or - (CTV[8..0] == NUMBER6) or - (CTV[8..0] == NUMBER7) - ) & !NO_HDD; - - ELSE GENERATE - - FN_NUM = GND; - - END GENERATE; - - - IF EXP((CTV[] == B"XXXXXXX11") & SINC_VT) THEN - - (CTV[8..0]) = ((CTV[8..0]) + 1) xor (CTV8M,B"00000000"); - CTV8M = FN_NUM; - - ELSE - CTV[7..0] = GND; - CTV8M = GND; - CTV8 = GND; - END IF; - - SINC_VT.d = ((CTV[8..0] == B"1001111XX") or ((CTV[8..0] == B"1001101XX")) & NT320); - - SINC_V = SINC_VT; - - SINC = SINC_V xor SINC_H; - --- ============================= - --- ========================================= --- divide by 6 - - XCT[].clk = (TG42_IN xor !XCT1); - XCT[].d = XCT[] + 1; - --- CLKZZ = 14 MHz - - CLKZZ = TRI(XCT1,CNF_OFF); - CLK14 = DFF(!CLK14,XCT0,,); - --- test exists - --- CNF_OFF = EXP(CNF_ON & /RESET); --- CNF_ON = EXP(CNF_OFF & XACS); - - CNF_OFF = DFF(GND,GND,XACS,/RESET); - CNF_ON = !CNF_OFF; - --- ========================================= - --- ======== FDD controller ================== - - TURBING = EXP(EXP(TURBING & !WSTB & !RSTB) & !STE & NFDD_1440); --- TURBING = GND; - - CT_WG = TFF(VCC,(XCT1 xor (CT_WG & TURBING)),,); - - STWG[].clk = (CT_WG xor STWG2); - STWG[].d = STWG[] + 1; - - CLK_WG = STWG2; - --- CLK_PRC = STWG0; - CLK_PRC = CT_WG; - - CT_WG1 = EXP(EXP(XCT1 & FDD_1440) & EXP(CT0 & NFDD_1440)); - - WGR[].clk = CT_WG1; - - IF !FDAT THEN - TABLE WGR[3..0] => WGR[3..0].d; - 0 => 4; 1 => 5; 2 => 4; 3 => 5; - 4 => 6; 5 => 7; 6 => 8; 7 => 8; - 8 => 9; 9 => 9; 10 => 10; 11 => 11; - 12 => 12; 13 => 13; 14 => 14; 15 => 15; - END TABLE; - WGR4.d = WGR4; - ELSE - IF WGR[3..0] == 0 THEN - WGR[3..0].d = 3; - WGR4.d = WGR4; - ELSE - WGR[].d = WGR[] + 1; - END IF; - END IF; - - QDAT = WGR4; - RDAT_X = EXP(EXP(RDAT_X & EXP(!RDAT & !CT_WG1)) & EXP(RDAT & !CT_WG1)); --- FDAT = DFF((RDAT_X or !DFF(RDAT_X,CT_WG1,,)),CT_WG1,,); - FDAT = DFF((RDAT_X or EXP(DFF(RDAT_X,CT_WG1,,))),CT_WG1,,); --- ========================================================== --- now not complete! - - AUD = CT3; - BEEP = GND; - --- /CONF_X = TRI(GND,!/RESET); - - /CONF_X = OPNDRN(/RESET); - --- 10K_CLK = WR_CNF; -- now not protect! - - 10K_CLK = DFF((WR_CNF & CNF_OFF) or ((HDD_C0 or FDD_C2) & CNF_ON),CLK42,,); - - 10K_D0 = DFFE(D0,10K_CLK,S720,(S144 & /RESET),CNF_OFF); - - DENS_X = VCC; - --- === now NOT PRECOMP! ===== - --- WDAT = WD; - - WDAT = REG_P2; - - REG_P[].clk = !CLK_PRC; - --- CASE WD IS --- WHEN 1 => REG_P[].d = (GND,SL,!(SL or SR),SR); --- WHEN 0 => REG_P[].d = (EXP(EXP(REG_P2)),REG_P[1..0],GND); --- END CASE; - --- CASE (DFF(WD,CLK_WG,,),DFF((SL & TR43),CLK_WG,,),DFF((SR & TR43),CLK_WG,,)) IS - - LR_T[].clk = STWG2; --- LR_T[].clk = CLK_WG; - - LR_T[].d = ((WD & !(SL & TR43)),(WD & !(SR & TR43))); - - CASE LR_T[] IS - WHEN 0 => REG_P[1..0] = (REG_P[1..0] - 1) & EXP(REG_P[1..0] == 0); - REG_P[2] = EXP(EXP(REG_P[1..0] == 1)); --- REG_P[2] = (REG_P[1..0] == 1); - WHEN 1 => REG_P[1..0] = 1; REG_P[2] = GND; - WHEN 2 => REG_P[1..0] = 3; REG_P[2] = GND; - WHEN 3 => REG_P[1..0] = 2; REG_P[2] = GND; - END CASE; -% - CASE (WD,DFF((SL & TR43),CLK_WG,,),DFF((SR & TR43),CLK_WG,,)) IS - WHEN B"0XX" => REG_P[1..0] = (REG_P[1..0] - 1) & EXP(REG_P[1..0] == 0); - WHEN B"100" => REG_P[1..0] = 2; - WHEN B"110" => REG_P[1..0] = 1; - WHEN B"101" => REG_P[1..0] = 3; - WHEN B"111" => REG_P[1..0] = 2; - END CASE; -% - -% - CASE WD IS - WHEN 0 => REG_P[3] = EXP(EXP(REG_P[1..0] == 1)); - WHEN 1 => REG_P[3] = GND; - END CASE; -% - --- === Port Controls ==================================== -% - FDD_C0 - 0 - WG93 / 1 - kmps/ p_dos - FDD_C1 - 0 - write / 1 - read - FDD_C2 - 0 - no / 1 - CS_WG/ strobe - - HDD_C0 - strobe - HDD_C[2..1] = 00 - SYS_FN, 01 - SYS_FN, 10 - HDD1/2, 11 - CMOS - HDD_C3 - 0 - HD_CS1, 1 HD_CS3 / 0 CMOS_DAT, 1 - CMOS_ADR - - HDD_C[3..0] = 0001, FDD_C[2..1] = 00; -> FDD_C0 = 1/0 -> set 1.44/720 - HDD_C[3..0] = 1001, FDD_C[2..1] = 00; -> FDD_C0 = 1/0 -> set 320/312 lines - HDD_C[3..0] = 0011, FDD_C[2..1] = 00; -> FDD_C0 = 1/0 -> set HDD1/HDD2 - HDD_C[3..0] = 1011, FDD_C[2..1] = 00; -> FDD_C0 = 0 -> soft_reset! - HDD_C[3..0] = X101, FDD_C[2..1] = XX; -> HDD1/2 rd/wr - -% - - SOFT_RESET = !((HDD_C[] == B"1011") & (FDD_C[] == B"000")); - SOFT_RESET2 = !((HDD_C[] == B"1011") & (FDD_C[] == B"001")); - --- FDD switch - --- NFDD_1440 = EXP(FDD_1440 & S720 & /RESET); --- FDD_1440 = EXP(NFDD_1440 & S144); - FDD_1440 = 10K_D0; - NFDD_1440 = !10K_D0; - - S144 = EXP((HDD_C[] == B"0001") & (FDD_C[] == B"001")); - S720 = EXP((HDD_C[] == B"0001") & (FDD_C[] == B"000")); - --- Screen Switch - - T320 = EXP(NT320 & S320 & /RESET); - NT320 = EXP(T320 & S312); - - S312 = EXP((HDD_C[] == B"1001") & (FDD_C[] == B"001")); - S320 = EXP((HDD_C[] == B"1001") & (FDD_C[] == B"000")); - --- HDD Switch - --- THDD = EXP(NTHDD & SHDD2 & /RESET); --- NTHDD = EXP(THDD & SHDD1); - - THDD = EXP(NTHDD & NO_HDD & SHDD2 & /RESET & SOFT_RESET2); - NTHDD = EXP(THDD & NO_HDD & SHDD1 & /RESET & SOFT_RESET2); - NO_HDD = EXP(NTHDD & THDD & SHDD1 & SHDD2); - - SHDD2 = EXP((HDD_C[] == B"0011") & (FDD_C[] == B"001")); - SHDD1 = EXP((HDD_C[] == B"0011") & (FDD_C[] == B"000")); - --- Control signals - - WR_PDOS = DFF(!((HDD_C[] == 0) & (FDD_C[] == B"X01")),HDD_CLK,,FDD_C2); - /WG_WR = DFF(!((HDD_C[] == 0) & (FDD_C[] == B"X00")),HDD_CLK,,FDD_C2); - /WG_RD = DFF(!((HDD_C[] == 0) & (FDD_C[] == B"X10")),HDD_CLK,,FDD_C2); - - CMOS_DWR = DFF(!((HDD_C[] == B"1110") & (FDD_C[] == B"X01")),HDD_CLK,,FDD_C2); - CMOS_AS =!DFF(!((HDD_C[] == B"0110") & (FDD_C[] == B"X01")),HDD_CLK,,FDD_C2); - CMOS_DRD = DFF(!((HDD_C[] == B"1110") & (FDD_C[] == B"X10")),HDD_CLK,,FDD_C2); - --- HD_DIR = !HDD_C1; -- ???????????? - HD_DIR = XHD_RD; - --- HD_CS = GND; --- HD_CS = CTV8M; - HD_CS = (CTV8M and /RESET); - - --- HD_CS = !/RESET; - --- XHD_RES = VCC; - --- XHD_RES = DFF(PW_GOOD,SINC_V,,); - XHD_RES = DFF(PW_GOOD,SINC_V,EPM_RES,); - --- XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1),CLK42,,); --- XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1),CLK42,,); - --- HDD_CLK = EXP(EXP(HDD_C0)); - HDD_CLK = 10K_CLK; - --- XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1 or !HDD_CLK),CLK42,,HDD_C0); --- XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1 or !HDD_CLK),CLK42,,HDD_C0); --- XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1),HDD_CLK,,HDD_C0); --- XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1),HDD_CLK,,HDD_C0); - XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1),HDD_CLK,,(HDD_C0 and /RESET)); - XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1),HDD_CLK,,(HDD_C0 and /RESET)); - --- XHD1_CS1 = DFF(!((HDD_C[] == B"010X") & NTHDD),CLK42,,); --- XHD1_CS2 = DFF(!((HDD_C[] == B"110X") & NTHDD),CLK42,,); - --- XHD2_CS1 = DFF(!((HDD_C[] == B"010X") & THDD),CLK42,,); --- XHD2_CS2 = DFF(!((HDD_C[] == B"110X") & THDD),CLK42,,); - --- XHD1_CS1 = DFF((!(HDD_C[] == B"010X") or THDD),CLK42,,); --- XHD1_CS2 = DFF((!(HDD_C[] == B"110X") or THDD),CLK42,,); - XHD1_CS1 = DFF((!(HDD_C[] == B"010X") or THDD),CLK42,,/RESET); - XHD1_CS2 = DFF((!(HDD_C[] == B"110X") or THDD),CLK42,,/RESET); - --- XHD2_CS1 = DFF((!(HDD_C[] == B"010X") or NTHDD),CLK42,,); --- XHD2_CS2 = DFF((!(HDD_C[] == B"110X") or NTHDD),CLK42,,); - XHD2_CS1 = DFF((!(HDD_C[] == B"010X") or NTHDD),CLK42,,/RESET); - XHD2_CS2 = DFF((!(HDD_C[] == B"110X") or NTHDD),CLK42,,/RESET); - - -END; - diff --git a/src/altera/max/7128/SP2_MAX.ACF b/src/altera/max/7128/SP2_MAX.ACF deleted file mode 100644 index 689ae3e..0000000 --- a/src/altera/max/7128/SP2_MAX.ACF +++ /dev/null @@ -1,699 +0,0 @@ --- --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. --- -CHIP SP2_MAX -BEGIN - DEVICE = EPM7128STC100-10; - |UNUSED1: INPUT_PIN = 1; -- 7064 N.C. - |UNUSED2: INPUT_PIN = 2; -- 7064 N.C. --- |VCCIO --- |#TDI - |UNUSED5: INPUT_PIN = 5; -- 7064 N.C. - |CMOS_AS : OUTPUT_PIN = 6; - |UNUSED7: INPUT_PIN = 7; -- 7064 N.C. - |WR_PDOS : OUTPUT_PIN = 8; - |WD : INPUT_PIN = 9; - - |WSTB : INPUT_PIN = 10; --- |GND - |TR43 : INPUT_PIN = 12; - |CLK_WG : OUTPUT_PIN = 13; - |FDAT : OUTPUT_PIN = 14; --- |#TMS - |QDAT : OUTPUT_PIN = 16; - |XA0 : INPUT_PIN = 17; --- |VCCIO - |SINC_2 : OUTPUT_PIN = 19; - - |SINC_1 : OUTPUT_PIN = 20; - |XA1 : INPUT_PIN = 21; - |UNUSED22: INPUT_PIN = 22; -- 7064 N.C. - |XA2 : INPUT_PIN = 23; - |UNUSED24: INPUT_PIN = 24; -- 7064 N.C. - |RSTB : INPUT_PIN = 25; --- |GND - |UNUSED27: INPUT_PIN = 27; -- 7064 N.C. - |UNUSED28: INPUT_PIN = 28; -- 7064 N.C. - |SR : INPUT_PIN = 29; - - |SL : INPUT_PIN = 30; - |CLK14 : OUTPUT_PIN = 31; - |CLKZZ : BIDIR_PIN = 32; - |UNUSED33 : INPUT_PIN = 33; -- be careful! at 3000 family the pin 33 is GND --- |VCCIO - |AUD : OUTPUT_PIN = 35; - |TG42_BUF : OUTPUT_PIN = 36; - |XACS : INPUT_PIN = 37; --- |GND --- |VCCINT - - |HDD_C3 : INPUT_PIN = 40; - |HDD_C2 : INPUT_PIN = 41; - |HDD_C1 : INPUT_PIN = 42; --- |GND - |FDD_C0 : INPUT_PIN = 44; - |FDD_C1 : INPUT_PIN = 45; - |FDD_C2 : INPUT_PIN = 46; - |HDD_C0 : INPUT_PIN = 47; - |HD_DIR : OUTPUT_PIN = 48; - |UNUSED49: INPUT_PIN = 49; -- 7064 N.C. - - |UNUSED50: INPUT_PIN = 50; -- 7064 N.C. --- |VCCIO - |HD_CS : OUTPUT_PIN = 52; - |UNUSED53 : INPUT_PIN = 53; -- 7064 N.C. - |/CONF_X : BIDIR_PIN = 54; - |UNUSED55: INPUT_PIN = 55; -- 7064 N.C. - |10K_CLK : OUTPUT_PIN = 56; - |WR_CNF : INPUT_PIN = 57; - |10K_D0 : OUTPUT_PIN = 58; --- |GND - - |D0 : INPUT_PIN = 60; - |VGA_IN : INPUT_PIN = 61; --- |#TCK - |UNUSED63: INPUT_PIN = 63; - |SINC_V : OUTPUT_PIN = 64; - |UNUSED65 : INPUT_PIN = 65; -- be careful! at 3000 family the pin 33 is GND --- |VCCIO - |SINC : OUTPUT_PIN = 67; - |SINC_H : OUTPUT_PIN = 68; - |SINC_IN : INPUT_PIN = 69; - - |UNUSED70: INPUT_PIN = 70; -- 7064 N.C. - |XHD_RES : OUTPUT_PIN = 71; - |UNUSED72: INPUT_PIN = 72; -- 7064 N.C. --- |#TDO --- |GND - |XHD_WR : OUTPUT_PIN = 75; - |XHD_RD : OUTPUT_PIN = 76; - |UNUSED77: INPUT_PIN = 77; -- 7064 N.C. - |UNUSED78 : INPUT_PIN = 78; -- 7064 N.C. - |XHD1_CS1 : OUTPUT_PIN = 79; - - |XHD1_CS2 : OUTPUT_PIN = 80; - |XHD2_CS1 : OUTPUT_PIN = 81; --- |VCCIO - |XHD2_CS2 : OUTPUT_PIN = 83; - |BEEP : OUTPUT_PIN = 84; - |TG42_OUT : OUTPUT_PIN = 85; --- |GND - |TG42_IN : INPUT_PIN = 87; - |XHR_RDY : INPUT_PIN = 88; - |EPM_RES : INPUT_PIN = 89; - - |PW_GOOD : INPUT_PIN = 90; --- |VCCINT - |RDAT : INPUT_PIN = 92; - |/WG_WR : OUTPUT_PIN = 93; - |STE : INPUT_PIN = 94; --- |GND - |DENS_X : OUTPUT_PIN = 96; - |/WG_RD : OUTPUT_PIN = 97; - |WDAT : OUTPUT_PIN = 98; - |CMOS_DRD : OUTPUT_PIN = 99; - |CMOS_DWR : OUTPUT_PIN = 100; -END; - -DEFAULT_DEVICES -BEGIN - AUTO_DEVICE = EPM7256SQC208-7; - AUTO_DEVICE = EPM7256SRC208-7; - AUTO_DEVICE = EPM7192SQC160-7; - AUTO_DEVICE = EPM7160SQC160-6; - AUTO_DEVICE = EPM7160STC100-6; - AUTO_DEVICE = EPM7160SLC84-6; - AUTO_DEVICE = EPM7128SQC160-6; - AUTO_DEVICE = EPM7128STC100-6; - AUTO_DEVICE = EPM7128SQC100-6; - AUTO_DEVICE = EPM7128SLC84-6; - AUTO_DEVICE = EPM7064STC100-5; - AUTO_DEVICE = EPM7064SLC84-5; - AUTO_DEVICE = EPM7064STC44-5; - AUTO_DEVICE = EPM7064SLC44-5; - AUTO_DEVICE = EPM7032STC44-5; - AUTO_DEVICE = EPM7032SLC44-5; - ASK_BEFORE_ADDING_EXTRA_DEVICES = ON; -END; - -TIMING_POINT -BEGIN - DEVICE_FOR_TIMING_SYNTHESIS = EPM7128STC100-10; - FREQUENCY = 100MHz; - MAINTAIN_STABLE_SYNTHESIS = OFF; - CUT_ALL_CLEAR_PRESET = ON; - CUT_ALL_BIDIR = ON; -END; - -IGNORED_ASSIGNMENTS -BEGIN - FIT_IGNORE_TIMING = ON; - DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF; - IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF; - IGNORE_DEVICE_ASSIGNMENTS = OFF; - IGNORE_LC_ASSIGNMENTS = OFF; - IGNORE_PIN_ASSIGNMENTS = OFF; - IGNORE_CHIP_ASSIGNMENTS = OFF; - IGNORE_TIMING_ASSIGNMENTS = OFF; - IGNORE_LOGIC_OPTION_ASSIGNMENTS = OFF; - IGNORE_CLIQUE_ASSIGNMENTS = OFF; -END; - -LOGIC_OPTIONS -BEGIN - |LR_T1 : TURBO_BIT = ON; - |LR_T0 : TURBO_BIT = ON; - |CLK_WG : TURBO_BIT = ON; - |TG42_BUF : STYLE = WYSIWYG; - |TG42_OUT : STYLE = WYSIWYG; - |XHD_RD : TURBO_BIT = OFF; - |XHD_RES : TURBO_BIT = OFF; - |XHD_WR : TURBO_BIT = OFF; - |XHD1_CS1 : TURBO_BIT = OFF; - |XHD1_CS2 : TURBO_BIT = OFF; - |XHD2_CS1 : TURBO_BIT = OFF; - |XHD2_CS2 : TURBO_BIT = OFF; - |10K_CLK : TURBO_BIT = OFF; - |10K_D0 : TURBO_BIT = OFF; - |REG_P0 : TURBO_BIT = ON; - |REG_P1 : TURBO_BIT = ON; - |REG_P2 : TURBO_BIT = ON; - |TG42_BUF : TURBO_BIT = ON; - |TG42_OUT : TURBO_BIT = ON; - |STWG0 : TURBO_BIT = ON; - |STWG1 : TURBO_BIT = ON; - |STWG2 : TURBO_BIT = ON; - |XCT0 : TURBO_BIT = ON; - |XCT1 : TURBO_BIT = ON; -END; - -GLOBAL_PROJECT_DEVICE_OPTIONS -BEGIN - MULTIVOLT_IO = OFF; - SECURITY_BIT = ON; - MAX7000B_ENABLE_VREFB = OFF; - MAX7000B_ENABLE_VREFA = OFF; - MAX7000B_VCCIO_IOBANK2 = 3.3V; - MAX7000B_VCCIO_IOBANK1 = 3.3V; - CONFIG_EPROM_PULLUP_RESISTOR = ON; - CONFIG_EPROM_USER_CODE = FFFFFFFF; - FLEX_CONFIGURATION_EPROM = AUTO; - MAX7000AE_ENABLE_JTAG = ON; - MAX7000AE_USER_CODE = FFFFFFFF; - FLEX6000_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX10KA_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = ON; - FLEX10K_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX6000_ENABLE_JTAG = OFF; - CONFIG_SCHEME_FLEX_6000 = PASSIVE_SERIAL; - MAX7000S_ENABLE_JTAG = ON; - FLEX10K_ENABLE_LOCK_OUTPUT = OFF; - MAX7000S_USER_CODE = FFFF; - CONFIG_SCHEME_10K = PASSIVE_SERIAL; - FLEX10K_JTAG_USER_CODE = 7F; - ENABLE_INIT_DONE_OUTPUT = OFF; - ENABLE_CHIP_WIDE_OE = OFF; - ENABLE_CHIP_WIDE_RESET = OFF; - nCEO = UNRESERVED; - CLKUSR = UNRESERVED; - ADD17 = UNRESERVED; - ADD16 = UNRESERVED; - ADD15 = UNRESERVED; - ADD14 = UNRESERVED; - ADD13 = UNRESERVED; - ADD0_TO_ADD12 = UNRESERVED; - SDOUT = RESERVED_DRIVES_OUT; - RDCLK = UNRESERVED; - RDYnBUSY = UNRESERVED; - nWS_nRS_nCS_CS = UNRESERVED; - DATA1_TO_DATA7 = UNRESERVED; - DATA0 = RESERVED_TRI_STATED; - FLEX8000_ENABLE_JTAG = OFF; - CONFIG_SCHEME = ACTIVE_SERIAL; - DISABLE_TIME_OUT = OFF; - ENABLE_DCLK_OUTPUT = OFF; - RELEASE_CLEARS = OFF; - AUTO_RESTART = OFF; - USER_CLOCK = OFF; - RESERVED_PINS_PERCENT = 0; - RESERVED_LCELLS_PERCENT = 0; -END; - -GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS -BEGIN - STYLE = NORMAL; - AUTO_GLOBAL_CLEAR = OFF; - AUTO_GLOBAL_CLOCK = OFF; - DEVICE_FAMILY = MAX7000S; - MULTI_LEVEL_SYNTHESIS_MAX9000 = ON; - AUTO_IMPLEMENT_IN_EAB = OFF; - AUTO_OPEN_DRAIN_PINS = ON; - ONE_HOT_STATE_MACHINE_ENCODING = OFF; - AUTO_REGISTER_PACKING = OFF; - AUTO_FAST_IO = OFF; - AUTO_GLOBAL_OE = ON; - AUTO_GLOBAL_PRESET = ON; - MULTI_LEVEL_SYNTHESIS_MAX5000_7000 = OFF; - OPTIMIZE_FOR_SPEED = 5; -END; - -COMPILER_PROCESSING_CONFIGURATION -BEGIN - FITTER_SETTINGS = ADVANCED; - USE_QUARTUS_FITTER = OFF; - PRESERVE_ALL_NODE_NAME_SYNONYMS = OFF; - SMART_RECOMPILE = OFF; - GENERATE_AHDL_TDO_FILE = OFF; - RPT_FILE_USER_ASSIGNMENTS = ON; - RPT_FILE_LCELL_INTERCONNECT = ON; - RPT_FILE_HIERARCHY = ON; - RPT_FILE_EQUATIONS = ON; - LINKED_SNF_EXTRACTOR = OFF; - OPTIMIZE_TIMING_SNF = OFF; - TIMING_SNF_EXTRACTOR = ON; - FUNCTIONAL_SNF_EXTRACTOR = OFF; - DESIGN_DOCTOR_RULES = EPLD; - DESIGN_DOCTOR = OFF; -END; - -COMPILER_INTERFACES_CONFIGURATION -BEGIN - NETLIST_OUTPUT_TIME_SCALE = 0.1ns; - EDIF_INPUT_SHOW_LMF_MAPPING_MESSAGES = OFF; - EDIF_BUS_DELIMITERS = []; - EDIF_FLATTEN_BUS = OFF; - EDIF_OUTPUT_FORCE_0NS_DELAYS = OFF; - EDIF_OUTPUT_INCLUDE_SPECIAL_PRIM = OFF; - EDIF_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - EDIF_OUTPUT_DELAY_CONSTRUCTS = EDO_FILE; - EDIF_OUTPUT_USE_EDC = OFF; - EDIF_INPUT_USE_LMF2 = OFF; - EDIF_INPUT_USE_LMF1 = OFF; - EDIF_OUTPUT_GND = GND; - EDIF_OUTPUT_VCC = VCC; - EDIF_INPUT_GND = GND; - EDIF_INPUT_VCC = VCC; - EDIF_OUTPUT_EDC_FILE = *.edc; - EDIF_INPUT_LMF2 = *.lmf; - EDIF_INPUT_LMF1 = *.lmf; - VHDL_GENERATE_CONFIGURATION_DECLARATION = OFF; - VHDL_OUTPUT_DELAY_CONSTRUCTS = VHO_FILE; - VERILOG_OUTPUT_DELAY_CONSTRUCTS = VO_FILE; - VHDL_FLATTEN_BUS = OFF; - VERILOG_FLATTEN_BUS = OFF; - EDIF_TRUNCATE_HIERARCHY_PATH = OFF; - VHDL_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - VHDL_WRITER_VERSION = VHDL87; - VHDL_READER_VERSION = VHDL87; - SYNOPSYS_MAPPING_EFFORT = MEDIUM; - SYNOPSYS_BOUNDARY_OPTIMIZATION = OFF; - SYNOPSYS_HIERARCHICAL_COMPILATION = ON; - SYNOPSYS_DESIGNWARE = OFF; - SYNOPSYS_COMPILER = DESIGN; - USE_SYNOPSYS_SYNTHESIS = OFF; - VHDL_NETLIST_WRITER = OFF; - VERILOG_NETLIST_WRITER = OFF; - XNF_GENERATE_AHDL_TDX_FILE = ON; - XNF_TRANSLATE_INTERNAL_NODE_NAMES = ON; - XNF_EMULATE_TRI_STATE_BUSES = INTERNAL_LOGIC; - EDIF_OUTPUT_VERSION = 200; - EDIF_NETLIST_WRITER = OFF; -END; - -CUSTOM_DESIGN_DOCTOR_RULES -BEGIN - MASTER_RESET = OFF; - EXPANDER_NETWORKS = ON; - RACE_CONDITIONS = ON; - DELAY_CHAINS = ON; - ASYNCHRONOUS_INPUTS = ON; - PRESET_CLEAR_NETWORKS = ON; - STATIC_HAZARDS_AFTER_SYNTHESIS = OFF; - STATIC_HAZARDS_BEFORE_SYNTHESIS = ON; - MULTI_CLOCK_NETWORKS = ON; - MULTI_LEVEL_CLOCKS = ON; - GATED_CLOCKS = ON; - RIPPLE_CLOCKS = ON; -END; - -SIMULATOR_CONFIGURATION -BEGIN - END_TIME = 25.0us; - BIDIR_PIN = STRONG; - START_TIME = 0.0ns; - GLITCH_TIME = 0.0ns; - GLITCH = OFF; - OSCILLATION_TIME = 0.0ns; - OSCILLATION = OFF; - CHECK_OUTPUTS = OFF; - SETUP_HOLD = OFF; - USE_DEVICE = OFF; -END; - -TIMING_ANALYZER_CONFIGURATION -BEGIN - ANALYSIS_MODE = REGISTERED_PERFORMANCE; - CUT_OFF_RAM_REGISTERED_WE_PATHS = OFF; - LIST_PATH_FREQUENCY = 10MHz; - LIST_PATH_COUNT = 10; - REGISTERED_PERFORMANCE_OPTIONS = NUMBER_OF_PATHS; - INCLUDE_PATHS_LESS_THAN_VALUE = 214.7483647ms; - INCLUDE_PATHS_LESS_THAN = OFF; - INCLUDE_PATHS_GREATER_THAN_VALUE = 0.0ns; - INCLUDE_PATHS_GREATER_THAN = OFF; - DELAY_MATRIX_OPTIONS = SHOW_ALL_PATHS; - CELL_WIDTH = 18; - LIST_ONLY_LONGEST_PATH = ON; - CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; - CUT_OFF_IO_PIN_FEEDBACK = ON; - AUTO_RECALCULATE = OFF; -END; - -OTHER_CONFIGURATION -BEGIN - LAST_MAXPLUS2_VERSION = 10.0; - ROW_PINS_LCELL_INSERT = ON; - CARRY_OUT_PINS_LCELL_INSERT = OFF; - NORMAL_LCELL_INSERT = ON; - EXPLICIT_FAMILY = 1; - FLEX_10K_52_COLUMNS = 40; - DEFAULT_9K_EXP_PER_LCELL = 1/2; - LOCAL_INTERCONNECT_PER_LAB_PERCENT = 100; - LCELLS_PER_ROW_PERCENT = 100; - FAN_IN_PER_LCELL_PERCENT = 100; - EXP_PER_LCELL_PERCENT = 100; - ROW_PINS_PERCENT = 50; - ORIGINAL_MAXPLUS2_VERSION = 9.6; - COMPILER_DATA = "1,1,0,1,0,0,0,1,1,1,1,0,1,1,1"; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX7000 -BEGIN - TURBO_BIT = ON; - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.FLEX8000 -BEGIN - CARRY_CHAIN_LENGTH = 32; - CASCADE_CHAIN_LENGTH = 2; - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - IGNORE_SOFT_BUFFERS = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX7000 -BEGIN - TURBO_BIT = ON; - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = ON; - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = ON; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.FLEX8000 -BEGIN - CARRY_CHAIN_LENGTH = 32; - CASCADE_CHAIN_LENGTH = 2; - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = AUTO; - CASCADE_CHAIN = AUTO; - MINIMIZATION = FULL; - IGNORE_SOFT_BUFFERS = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = MANUAL; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = MANUAL; -END; - diff --git a/src/altera/max/7128/sp2_max.tdf b/src/altera/max/7128/sp2_max.tdf deleted file mode 100644 index b24582c..0000000 --- a/src/altera/max/7128/sp2_max.tdf +++ /dev/null @@ -1,499 +0,0 @@ - -TITLE "SINC_controller"; - -PARAMETERS - ( - G_MODE = 1, -- 1 on LCELL, 0 - on EXP - - NUM = "NO", - NUMBER1 = B"00100000X", -- 0 - sinc - NUMBER2 = B"00110111X", -- 7 - NUMBER3 = B"01001101X", -- D - NUMBER4 = B"01010010X", -- 2 - NUMBER5 = B"00100000X", -- - NUMBER6 = B"00100000X", -- - NUMBER7 = B"00100000X" -- - ); - -SUBDESIGN SP2_MAX - ( - - TG42_IN : INPUT; - TG42_OUT : OUTPUT; - TG42_BUF : OUTPUT; - CLKZZ : BIDIR; - CLK14 : OUTPUT; - - AUD : OUTPUT; -- clk for timers - BEEP : OUTPUT; - - CMOS_DRD : OUTPUT; - CMOS_AS : OUTPUT; - CMOS_DWR : OUTPUT; - - WR_PDOS : OUTPUT; - WD : INPUT; - WSTB : INPUT; - SR,SL : INPUT; - RSTB : INPUT; - TR43 : INPUT; - CLK_WG : OUTPUT; - FDAT : OUTPUT; - QDAT : OUTPUT; - RDAT : INPUT; - /WG_WR : OUTPUT; - /WG_RD : OUTPUT; - STE : INPUT; - DENS_X : OUTPUT; - WDAT : OUTPUT; - - --- XA[2..0] : BIDIR; - XA[2..0] : INPUT; - XACS : INPUT; --- SINC_1 : OUTPUT; - SINC_1 : BIDIR; - SINC_2 : BIDIR; - - HDD_C[3..0] : INPUT; - FDD_C[2..0] : INPUT; - - HD_DIR : OUTPUT; - HD_CS : OUTPUT; - - /CONF_X : BIDIR; - 10K_CLK : OUTPUT; - WR_CNF : INPUT; - 10K_D0 : OUTPUT; - D0 : INPUT; - - VGA_IN : INPUT; --- WR_COL : INPUT; - SINC_V : OUTPUT; - SINC_H : OUTPUT; - SINC : OUTPUT; - SINC_IN : INPUT; - - XHD_RES : OUTPUT; - XHD_WR : OUTPUT; - XHD_RD : OUTPUT; - - XHD1_CS[2..1] : OUTPUT; - XHD2_CS[2..1] : OUTPUT; - XHR_RDY : INPUT; - - EPM_RES : INPUT; - PW_GOOD : INPUT; - - UNUSED65 : INPUT; -- was GND65, hack for 3000 family - UNUSED33 : INPUT; -- was GND33, hack for 3000 family - UNUSED1 : INPUT; - UNUSED2 : INPUT; - UNUSED5 : INPUT; - UNUSED7 : INPUT; - UNUSED22 : INPUT; - UNUSED24 : INPUT; - UNUSED27 : INPUT; - UNUSED28 : INPUT; - UNUSED49 : INPUT; - UNUSED50 : INPUT; - UNUSED53 : INPUT; - UNUSED55 : INPUT; - UNUSED63 : INPUT; - UNUSED70 : INPUT; - UNUSED72 : INPUT; - UNUSED77 : INPUT; - UNUSED78 : INPUT; - - - - ) -VARIABLE - - XCT[2..0] : DFF; - CNF_ON : NODE; - CNF_OFF : NODE; - - CLK42 : NODE; - - CT[3..0] : DFF; - CTH[5..0] : DFF; - CTV[8..0] : DFFE; - - SINC_HT : DFF; - SINC_VT : DFFE; - - TURBING : NODE; - FDD_1440 : NODE; - NFDD_1440 : NODE; - - CT_WG : NODE; - CT_WG1 : NODE; - - STWG[2..0] : DFF; - CLK_PRC : NODE; - WGR[4..0] : DFF; - RDAT_X : NODE; - - REG_P[2..0] : DFF; - - /RESET : NODE; - - - S144,S720 : NODE; - - SHDD1,SHDD2 : NODE; - THDD : NODE; - NTHDD : NODE; - - NO_HDD : NODE; - - S320,S312 : NODE; - T320 : NODE; - NT320 : NODE; - - SOFT_RESET : NODE; - SOFT_RESET2 : NODE; - - HDD_CLK : NODE; - - LR_T[1..0] : DFF; - - EXP_X : NODE; - EXP_Y : NODE; - - CTV8M : DFF; - - CTV8C : NODE; - - FN_NUM : NODE; - -BEGIN - - /RESET = DFF((EPM_RES & XHD_RES),!CT3,SOFT_RESET,); - --- /RESET = (EXP(!EPM_RES & EXP(EXP(EXP(EPM_RES)))) & SOFT_RESET); - - EXP_X = EXP(TG42_IN); - EXP_Y = EXP(TG42_IN); - - IF (G_MODE == 0) GENERATE - TG42_OUT = LCELL(EXP_X); - ELSE GENERATE - TG42_OUT = LCELL(TG42_BUF); - END GENERATE; - - TG42_BUF = LCELL(!TG42_IN); - - CLK42 = TG42_IN; - --- CT[].clk = CLK14; - CT[].clk = XCT1; - CT[] = CT[] + 1; - --- === horizontal sinc ===== - - CTH[].clk = !CT3; - SINC_HT.clk = !CT3; - - IF !((CTH[] == B"XXXX11") & SINC_HT) THEN - CTH[] = CTH[] + 1; - ELSE - CTH[] = GND; - END IF; - --- SINC_1 = CTH5; - SINC_1 = TRI(CTH5,VCC); - SINC_2 = TRI(CTV8,VCC); - - SINC_HT.d = (CTH[] == B"1101XX"); - - SINC_H = SINC_HT; - --- === vertical sinc ======= - --- CTV[].clk = !CT3; --- SINC_VT.clk = !CT3; - - CTV[].clk = SINC_HT; - SINC_VT.clk = SINC_HT; - - CTV8M.clk = SINC_HT; - --- CTV[].ena = (CTH[] == B"110111"); --- SINC_VT.ena = (CTH[] == B"110111"); - CTV[].ena = VCC; - SINC_VT.ena = VCC; - --- IF (CTV[] == B"100111111") THEN - - IF (NUM == "YES") GENERATE - - FN_NUM =( - (CTV[8..0] == NUMBER1) or - (CTV[8..0] == NUMBER2) or - (CTV[8..0] == NUMBER3) or - (CTV[8..0] == NUMBER4) or - (CTV[8..0] == NUMBER5) or - (CTV[8..0] == NUMBER6) or - (CTV[8..0] == NUMBER7) - ) & !NO_HDD; - - ELSE GENERATE - - FN_NUM = GND; - - END GENERATE; - - - IF EXP((CTV[] == B"XXXXXXX11") & SINC_VT) THEN - - (CTV[8..0]) = ((CTV[8..0]) + 1) xor (CTV8M,B"00000000"); - CTV8M = FN_NUM; - - ELSE - CTV[7..0] = GND; - CTV8M = GND; - CTV8 = GND; - END IF; - - SINC_VT.d = ((CTV[8..0] == B"1001111XX") or ((CTV[8..0] == B"1001101XX")) & NT320); - - SINC_V = SINC_VT; - - SINC = SINC_V xor SINC_H; - --- ============================= - --- ========================================= --- divide by 6 - - XCT[].clk = (TG42_IN xor !XCT1); - XCT[].d = XCT[] + 1; - --- CLKZZ = 14 MHz - - CLKZZ = TRI(XCT1,CNF_OFF); - CLK14 = DFF(!CLK14,XCT0,,); - --- test exists - --- CNF_OFF = EXP(CNF_ON & /RESET); --- CNF_ON = EXP(CNF_OFF & XACS); - - CNF_OFF = DFF(GND,GND,XACS,/RESET); - CNF_ON = !CNF_OFF; - --- ========================================= - --- ======== FDD controller ================== - - TURBING = EXP(EXP(TURBING & !WSTB & !RSTB) & !STE & NFDD_1440); --- TURBING = GND; - - CT_WG = TFF(VCC,(XCT1 xor (CT_WG & TURBING)),,); - - STWG[].clk = (CT_WG xor STWG2); - STWG[].d = STWG[] + 1; - - CLK_WG = STWG2; - --- CLK_PRC = STWG0; - CLK_PRC = CT_WG; - - CT_WG1 = EXP(EXP(XCT1 & FDD_1440) & EXP(CT0 & NFDD_1440)); - - WGR[].clk = CT_WG1; - - IF !FDAT THEN - TABLE WGR[3..0] => WGR[3..0].d; - 0 => 4; 1 => 5; 2 => 4; 3 => 5; - 4 => 6; 5 => 7; 6 => 8; 7 => 8; - 8 => 9; 9 => 9; 10 => 10; 11 => 11; - 12 => 12; 13 => 13; 14 => 14; 15 => 15; - END TABLE; - WGR4.d = WGR4; - ELSE - IF WGR[3..0] == 0 THEN - WGR[3..0].d = 3; - WGR4.d = WGR4; - ELSE - WGR[].d = WGR[] + 1; - END IF; - END IF; - - QDAT = WGR4; - RDAT_X = EXP(EXP(RDAT_X & EXP(!RDAT & !CT_WG1)) & EXP(RDAT & !CT_WG1)); --- FDAT = DFF((RDAT_X or !DFF(RDAT_X,CT_WG1,,)),CT_WG1,,); - FDAT = DFF((RDAT_X or EXP(DFF(RDAT_X,CT_WG1,,))),CT_WG1,,); --- ========================================================== --- now not complete! - - AUD = CT3; - BEEP = GND; - --- /CONF_X = TRI(GND,!/RESET); - - /CONF_X = OPNDRN(/RESET); - --- 10K_CLK = WR_CNF; -- now not protect! - - 10K_CLK = DFF((WR_CNF & CNF_OFF) or ((HDD_C0 or FDD_C2) & CNF_ON),CLK42,,); - - 10K_D0 = DFFE(D0,10K_CLK,S720,(S144 & /RESET),CNF_OFF); - - DENS_X = VCC; - --- === now NOT PRECOMP! ===== - --- WDAT = WD; - - WDAT = REG_P2; - - REG_P[].clk = !CLK_PRC; - --- CASE WD IS --- WHEN 1 => REG_P[].d = (GND,SL,!(SL or SR),SR); --- WHEN 0 => REG_P[].d = (EXP(EXP(REG_P2)),REG_P[1..0],GND); --- END CASE; - --- CASE (DFF(WD,CLK_WG,,),DFF((SL & TR43),CLK_WG,,),DFF((SR & TR43),CLK_WG,,)) IS - - LR_T[].clk = STWG2; --- LR_T[].clk = CLK_WG; - - LR_T[].d = ((WD & !(SL & TR43)),(WD & !(SR & TR43))); - - CASE LR_T[] IS - WHEN 0 => REG_P[1..0] = (REG_P[1..0] - 1) & EXP(REG_P[1..0] == 0); - REG_P[2] = EXP(EXP(REG_P[1..0] == 1)); --- REG_P[2] = (REG_P[1..0] == 1); - WHEN 1 => REG_P[1..0] = 1; REG_P[2] = GND; - WHEN 2 => REG_P[1..0] = 3; REG_P[2] = GND; - WHEN 3 => REG_P[1..0] = 2; REG_P[2] = GND; - END CASE; -% - CASE (WD,DFF((SL & TR43),CLK_WG,,),DFF((SR & TR43),CLK_WG,,)) IS - WHEN B"0XX" => REG_P[1..0] = (REG_P[1..0] - 1) & EXP(REG_P[1..0] == 0); - WHEN B"100" => REG_P[1..0] = 2; - WHEN B"110" => REG_P[1..0] = 1; - WHEN B"101" => REG_P[1..0] = 3; - WHEN B"111" => REG_P[1..0] = 2; - END CASE; -% - -% - CASE WD IS - WHEN 0 => REG_P[3] = EXP(EXP(REG_P[1..0] == 1)); - WHEN 1 => REG_P[3] = GND; - END CASE; -% - --- === Port Controls ==================================== -% - FDD_C0 - 0 - WG93 / 1 - kmps/ p_dos - FDD_C1 - 0 - write / 1 - read - FDD_C2 - 0 - no / 1 - CS_WG/ strobe - - HDD_C0 - strobe - HDD_C[2..1] = 00 - SYS_FN, 01 - SYS_FN, 10 - HDD1/2, 11 - CMOS - HDD_C3 - 0 - HD_CS1, 1 HD_CS3 / 0 CMOS_DAT, 1 - CMOS_ADR - - HDD_C[3..0] = 0001, FDD_C[2..1] = 00; -> FDD_C0 = 1/0 -> set 1.44/720 - HDD_C[3..0] = 1001, FDD_C[2..1] = 00; -> FDD_C0 = 1/0 -> set 320/312 lines - HDD_C[3..0] = 0011, FDD_C[2..1] = 00; -> FDD_C0 = 1/0 -> set HDD1/HDD2 - HDD_C[3..0] = 1011, FDD_C[2..1] = 00; -> FDD_C0 = 0 -> soft_reset! - HDD_C[3..0] = X101, FDD_C[2..1] = XX; -> HDD1/2 rd/wr - -% - - SOFT_RESET = !((HDD_C[] == B"1011") & (FDD_C[] == B"000")); - SOFT_RESET2 = !((HDD_C[] == B"1011") & (FDD_C[] == B"001")); - --- FDD switch - --- NFDD_1440 = EXP(FDD_1440 & S720 & /RESET); --- FDD_1440 = EXP(NFDD_1440 & S144); - FDD_1440 = 10K_D0; - NFDD_1440 = !10K_D0; - - S144 = EXP((HDD_C[] == B"0001") & (FDD_C[] == B"001")); - S720 = EXP((HDD_C[] == B"0001") & (FDD_C[] == B"000")); - --- Screen Switch - - T320 = EXP(NT320 & S320 & /RESET); - NT320 = EXP(T320 & S312); - - S312 = EXP((HDD_C[] == B"1001") & (FDD_C[] == B"001")); - S320 = EXP((HDD_C[] == B"1001") & (FDD_C[] == B"000")); - --- HDD Switch - --- THDD = EXP(NTHDD & SHDD2 & /RESET); --- NTHDD = EXP(THDD & SHDD1); - - THDD = EXP(NTHDD & NO_HDD & SHDD2 & /RESET & SOFT_RESET2); - NTHDD = EXP(THDD & NO_HDD & SHDD1 & /RESET & SOFT_RESET2); - NO_HDD = EXP(NTHDD & THDD & SHDD1 & SHDD2); - - SHDD2 = EXP((HDD_C[] == B"0011") & (FDD_C[] == B"001")); - SHDD1 = EXP((HDD_C[] == B"0011") & (FDD_C[] == B"000")); - --- Control signals - - WR_PDOS = DFF(!((HDD_C[] == 0) & (FDD_C[] == B"X01")),HDD_CLK,,FDD_C2); - /WG_WR = DFF(!((HDD_C[] == 0) & (FDD_C[] == B"X00")),HDD_CLK,,FDD_C2); - /WG_RD = DFF(!((HDD_C[] == 0) & (FDD_C[] == B"X10")),HDD_CLK,,FDD_C2); - - CMOS_DWR = DFF(!((HDD_C[] == B"1110") & (FDD_C[] == B"X01")),HDD_CLK,,FDD_C2); - CMOS_AS =!DFF(!((HDD_C[] == B"0110") & (FDD_C[] == B"X01")),HDD_CLK,,FDD_C2); - CMOS_DRD = DFF(!((HDD_C[] == B"1110") & (FDD_C[] == B"X10")),HDD_CLK,,FDD_C2); - --- HD_DIR = !HDD_C1; -- ???????????? - HD_DIR = XHD_RD; - --- HD_CS = GND; --- HD_CS = CTV8M; - HD_CS = (CTV8M and /RESET); - - --- HD_CS = !/RESET; - --- XHD_RES = VCC; - --- XHD_RES = DFF(PW_GOOD,SINC_V,,); - XHD_RES = DFF(PW_GOOD,SINC_V,EPM_RES,); - --- XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1),CLK42,,); --- XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1),CLK42,,); - --- HDD_CLK = EXP(EXP(HDD_C0)); - HDD_CLK = 10K_CLK; - --- XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1 or !HDD_CLK),CLK42,,HDD_C0); --- XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1 or !HDD_CLK),CLK42,,HDD_C0); --- XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1),HDD_CLK,,HDD_C0); --- XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1),HDD_CLK,,HDD_C0); - XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1),HDD_CLK,,(HDD_C0 and /RESET)); - XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1),HDD_CLK,,(HDD_C0 and /RESET)); - --- XHD1_CS1 = DFF(!((HDD_C[] == B"010X") & NTHDD),CLK42,,); --- XHD1_CS2 = DFF(!((HDD_C[] == B"110X") & NTHDD),CLK42,,); - --- XHD2_CS1 = DFF(!((HDD_C[] == B"010X") & THDD),CLK42,,); --- XHD2_CS2 = DFF(!((HDD_C[] == B"110X") & THDD),CLK42,,); - --- XHD1_CS1 = DFF((!(HDD_C[] == B"010X") or THDD),CLK42,,); --- XHD1_CS2 = DFF((!(HDD_C[] == B"110X") or THDD),CLK42,,); - XHD1_CS1 = DFF((!(HDD_C[] == B"010X") or THDD),CLK42,,/RESET); - XHD1_CS2 = DFF((!(HDD_C[] == B"110X") or THDD),CLK42,,/RESET); - --- XHD2_CS1 = DFF((!(HDD_C[] == B"010X") or NTHDD),CLK42,,); --- XHD2_CS2 = DFF((!(HDD_C[] == B"110X") or NTHDD),CLK42,,); - XHD2_CS1 = DFF((!(HDD_C[] == B"010X") or NTHDD),CLK42,,/RESET); - XHD2_CS2 = DFF((!(HDD_C[] == B"110X") or NTHDD),CLK42,,/RESET); - - -END; - diff --git a/src/altera/max/7128_make.bat b/src/altera/max/7128_make.bat deleted file mode 100644 index c03174c..0000000 --- a/src/altera/max/7128_make.bat +++ /dev/null @@ -1,4 +0,0 @@ -C: -cd "C:\users\tolik\Documents\SP_Projects\ASM\GIT\SP_Core\Build\MAX\tmp\" -"C:\Program Files (x86)\MAXPLUS2\MAXPLUS2.EXE" -compile SP2_MAX >> compile.log -exit \ No newline at end of file diff --git a/src/altera/max/SP2_MAX.TDF b/src/altera/max/SP2_MAX.TDF deleted file mode 100644 index b24582c..0000000 --- a/src/altera/max/SP2_MAX.TDF +++ /dev/null @@ -1,499 +0,0 @@ - -TITLE "SINC_controller"; - -PARAMETERS - ( - G_MODE = 1, -- 1 on LCELL, 0 - on EXP - - NUM = "NO", - NUMBER1 = B"00100000X", -- 0 - sinc - NUMBER2 = B"00110111X", -- 7 - NUMBER3 = B"01001101X", -- D - NUMBER4 = B"01010010X", -- 2 - NUMBER5 = B"00100000X", -- - NUMBER6 = B"00100000X", -- - NUMBER7 = B"00100000X" -- - ); - -SUBDESIGN SP2_MAX - ( - - TG42_IN : INPUT; - TG42_OUT : OUTPUT; - TG42_BUF : OUTPUT; - CLKZZ : BIDIR; - CLK14 : OUTPUT; - - AUD : OUTPUT; -- clk for timers - BEEP : OUTPUT; - - CMOS_DRD : OUTPUT; - CMOS_AS : OUTPUT; - CMOS_DWR : OUTPUT; - - WR_PDOS : OUTPUT; - WD : INPUT; - WSTB : INPUT; - SR,SL : INPUT; - RSTB : INPUT; - TR43 : INPUT; - CLK_WG : OUTPUT; - FDAT : OUTPUT; - QDAT : OUTPUT; - RDAT : INPUT; - /WG_WR : OUTPUT; - /WG_RD : OUTPUT; - STE : INPUT; - DENS_X : OUTPUT; - WDAT : OUTPUT; - - --- XA[2..0] : BIDIR; - XA[2..0] : INPUT; - XACS : INPUT; --- SINC_1 : OUTPUT; - SINC_1 : BIDIR; - SINC_2 : BIDIR; - - HDD_C[3..0] : INPUT; - FDD_C[2..0] : INPUT; - - HD_DIR : OUTPUT; - HD_CS : OUTPUT; - - /CONF_X : BIDIR; - 10K_CLK : OUTPUT; - WR_CNF : INPUT; - 10K_D0 : OUTPUT; - D0 : INPUT; - - VGA_IN : INPUT; --- WR_COL : INPUT; - SINC_V : OUTPUT; - SINC_H : OUTPUT; - SINC : OUTPUT; - SINC_IN : INPUT; - - XHD_RES : OUTPUT; - XHD_WR : OUTPUT; - XHD_RD : OUTPUT; - - XHD1_CS[2..1] : OUTPUT; - XHD2_CS[2..1] : OUTPUT; - XHR_RDY : INPUT; - - EPM_RES : INPUT; - PW_GOOD : INPUT; - - UNUSED65 : INPUT; -- was GND65, hack for 3000 family - UNUSED33 : INPUT; -- was GND33, hack for 3000 family - UNUSED1 : INPUT; - UNUSED2 : INPUT; - UNUSED5 : INPUT; - UNUSED7 : INPUT; - UNUSED22 : INPUT; - UNUSED24 : INPUT; - UNUSED27 : INPUT; - UNUSED28 : INPUT; - UNUSED49 : INPUT; - UNUSED50 : INPUT; - UNUSED53 : INPUT; - UNUSED55 : INPUT; - UNUSED63 : INPUT; - UNUSED70 : INPUT; - UNUSED72 : INPUT; - UNUSED77 : INPUT; - UNUSED78 : INPUT; - - - - ) -VARIABLE - - XCT[2..0] : DFF; - CNF_ON : NODE; - CNF_OFF : NODE; - - CLK42 : NODE; - - CT[3..0] : DFF; - CTH[5..0] : DFF; - CTV[8..0] : DFFE; - - SINC_HT : DFF; - SINC_VT : DFFE; - - TURBING : NODE; - FDD_1440 : NODE; - NFDD_1440 : NODE; - - CT_WG : NODE; - CT_WG1 : NODE; - - STWG[2..0] : DFF; - CLK_PRC : NODE; - WGR[4..0] : DFF; - RDAT_X : NODE; - - REG_P[2..0] : DFF; - - /RESET : NODE; - - - S144,S720 : NODE; - - SHDD1,SHDD2 : NODE; - THDD : NODE; - NTHDD : NODE; - - NO_HDD : NODE; - - S320,S312 : NODE; - T320 : NODE; - NT320 : NODE; - - SOFT_RESET : NODE; - SOFT_RESET2 : NODE; - - HDD_CLK : NODE; - - LR_T[1..0] : DFF; - - EXP_X : NODE; - EXP_Y : NODE; - - CTV8M : DFF; - - CTV8C : NODE; - - FN_NUM : NODE; - -BEGIN - - /RESET = DFF((EPM_RES & XHD_RES),!CT3,SOFT_RESET,); - --- /RESET = (EXP(!EPM_RES & EXP(EXP(EXP(EPM_RES)))) & SOFT_RESET); - - EXP_X = EXP(TG42_IN); - EXP_Y = EXP(TG42_IN); - - IF (G_MODE == 0) GENERATE - TG42_OUT = LCELL(EXP_X); - ELSE GENERATE - TG42_OUT = LCELL(TG42_BUF); - END GENERATE; - - TG42_BUF = LCELL(!TG42_IN); - - CLK42 = TG42_IN; - --- CT[].clk = CLK14; - CT[].clk = XCT1; - CT[] = CT[] + 1; - --- === horizontal sinc ===== - - CTH[].clk = !CT3; - SINC_HT.clk = !CT3; - - IF !((CTH[] == B"XXXX11") & SINC_HT) THEN - CTH[] = CTH[] + 1; - ELSE - CTH[] = GND; - END IF; - --- SINC_1 = CTH5; - SINC_1 = TRI(CTH5,VCC); - SINC_2 = TRI(CTV8,VCC); - - SINC_HT.d = (CTH[] == B"1101XX"); - - SINC_H = SINC_HT; - --- === vertical sinc ======= - --- CTV[].clk = !CT3; --- SINC_VT.clk = !CT3; - - CTV[].clk = SINC_HT; - SINC_VT.clk = SINC_HT; - - CTV8M.clk = SINC_HT; - --- CTV[].ena = (CTH[] == B"110111"); --- SINC_VT.ena = (CTH[] == B"110111"); - CTV[].ena = VCC; - SINC_VT.ena = VCC; - --- IF (CTV[] == B"100111111") THEN - - IF (NUM == "YES") GENERATE - - FN_NUM =( - (CTV[8..0] == NUMBER1) or - (CTV[8..0] == NUMBER2) or - (CTV[8..0] == NUMBER3) or - (CTV[8..0] == NUMBER4) or - (CTV[8..0] == NUMBER5) or - (CTV[8..0] == NUMBER6) or - (CTV[8..0] == NUMBER7) - ) & !NO_HDD; - - ELSE GENERATE - - FN_NUM = GND; - - END GENERATE; - - - IF EXP((CTV[] == B"XXXXXXX11") & SINC_VT) THEN - - (CTV[8..0]) = ((CTV[8..0]) + 1) xor (CTV8M,B"00000000"); - CTV8M = FN_NUM; - - ELSE - CTV[7..0] = GND; - CTV8M = GND; - CTV8 = GND; - END IF; - - SINC_VT.d = ((CTV[8..0] == B"1001111XX") or ((CTV[8..0] == B"1001101XX")) & NT320); - - SINC_V = SINC_VT; - - SINC = SINC_V xor SINC_H; - --- ============================= - --- ========================================= --- divide by 6 - - XCT[].clk = (TG42_IN xor !XCT1); - XCT[].d = XCT[] + 1; - --- CLKZZ = 14 MHz - - CLKZZ = TRI(XCT1,CNF_OFF); - CLK14 = DFF(!CLK14,XCT0,,); - --- test exists - --- CNF_OFF = EXP(CNF_ON & /RESET); --- CNF_ON = EXP(CNF_OFF & XACS); - - CNF_OFF = DFF(GND,GND,XACS,/RESET); - CNF_ON = !CNF_OFF; - --- ========================================= - --- ======== FDD controller ================== - - TURBING = EXP(EXP(TURBING & !WSTB & !RSTB) & !STE & NFDD_1440); --- TURBING = GND; - - CT_WG = TFF(VCC,(XCT1 xor (CT_WG & TURBING)),,); - - STWG[].clk = (CT_WG xor STWG2); - STWG[].d = STWG[] + 1; - - CLK_WG = STWG2; - --- CLK_PRC = STWG0; - CLK_PRC = CT_WG; - - CT_WG1 = EXP(EXP(XCT1 & FDD_1440) & EXP(CT0 & NFDD_1440)); - - WGR[].clk = CT_WG1; - - IF !FDAT THEN - TABLE WGR[3..0] => WGR[3..0].d; - 0 => 4; 1 => 5; 2 => 4; 3 => 5; - 4 => 6; 5 => 7; 6 => 8; 7 => 8; - 8 => 9; 9 => 9; 10 => 10; 11 => 11; - 12 => 12; 13 => 13; 14 => 14; 15 => 15; - END TABLE; - WGR4.d = WGR4; - ELSE - IF WGR[3..0] == 0 THEN - WGR[3..0].d = 3; - WGR4.d = WGR4; - ELSE - WGR[].d = WGR[] + 1; - END IF; - END IF; - - QDAT = WGR4; - RDAT_X = EXP(EXP(RDAT_X & EXP(!RDAT & !CT_WG1)) & EXP(RDAT & !CT_WG1)); --- FDAT = DFF((RDAT_X or !DFF(RDAT_X,CT_WG1,,)),CT_WG1,,); - FDAT = DFF((RDAT_X or EXP(DFF(RDAT_X,CT_WG1,,))),CT_WG1,,); --- ========================================================== --- now not complete! - - AUD = CT3; - BEEP = GND; - --- /CONF_X = TRI(GND,!/RESET); - - /CONF_X = OPNDRN(/RESET); - --- 10K_CLK = WR_CNF; -- now not protect! - - 10K_CLK = DFF((WR_CNF & CNF_OFF) or ((HDD_C0 or FDD_C2) & CNF_ON),CLK42,,); - - 10K_D0 = DFFE(D0,10K_CLK,S720,(S144 & /RESET),CNF_OFF); - - DENS_X = VCC; - --- === now NOT PRECOMP! ===== - --- WDAT = WD; - - WDAT = REG_P2; - - REG_P[].clk = !CLK_PRC; - --- CASE WD IS --- WHEN 1 => REG_P[].d = (GND,SL,!(SL or SR),SR); --- WHEN 0 => REG_P[].d = (EXP(EXP(REG_P2)),REG_P[1..0],GND); --- END CASE; - --- CASE (DFF(WD,CLK_WG,,),DFF((SL & TR43),CLK_WG,,),DFF((SR & TR43),CLK_WG,,)) IS - - LR_T[].clk = STWG2; --- LR_T[].clk = CLK_WG; - - LR_T[].d = ((WD & !(SL & TR43)),(WD & !(SR & TR43))); - - CASE LR_T[] IS - WHEN 0 => REG_P[1..0] = (REG_P[1..0] - 1) & EXP(REG_P[1..0] == 0); - REG_P[2] = EXP(EXP(REG_P[1..0] == 1)); --- REG_P[2] = (REG_P[1..0] == 1); - WHEN 1 => REG_P[1..0] = 1; REG_P[2] = GND; - WHEN 2 => REG_P[1..0] = 3; REG_P[2] = GND; - WHEN 3 => REG_P[1..0] = 2; REG_P[2] = GND; - END CASE; -% - CASE (WD,DFF((SL & TR43),CLK_WG,,),DFF((SR & TR43),CLK_WG,,)) IS - WHEN B"0XX" => REG_P[1..0] = (REG_P[1..0] - 1) & EXP(REG_P[1..0] == 0); - WHEN B"100" => REG_P[1..0] = 2; - WHEN B"110" => REG_P[1..0] = 1; - WHEN B"101" => REG_P[1..0] = 3; - WHEN B"111" => REG_P[1..0] = 2; - END CASE; -% - -% - CASE WD IS - WHEN 0 => REG_P[3] = EXP(EXP(REG_P[1..0] == 1)); - WHEN 1 => REG_P[3] = GND; - END CASE; -% - --- === Port Controls ==================================== -% - FDD_C0 - 0 - WG93 / 1 - kmps/ p_dos - FDD_C1 - 0 - write / 1 - read - FDD_C2 - 0 - no / 1 - CS_WG/ strobe - - HDD_C0 - strobe - HDD_C[2..1] = 00 - SYS_FN, 01 - SYS_FN, 10 - HDD1/2, 11 - CMOS - HDD_C3 - 0 - HD_CS1, 1 HD_CS3 / 0 CMOS_DAT, 1 - CMOS_ADR - - HDD_C[3..0] = 0001, FDD_C[2..1] = 00; -> FDD_C0 = 1/0 -> set 1.44/720 - HDD_C[3..0] = 1001, FDD_C[2..1] = 00; -> FDD_C0 = 1/0 -> set 320/312 lines - HDD_C[3..0] = 0011, FDD_C[2..1] = 00; -> FDD_C0 = 1/0 -> set HDD1/HDD2 - HDD_C[3..0] = 1011, FDD_C[2..1] = 00; -> FDD_C0 = 0 -> soft_reset! - HDD_C[3..0] = X101, FDD_C[2..1] = XX; -> HDD1/2 rd/wr - -% - - SOFT_RESET = !((HDD_C[] == B"1011") & (FDD_C[] == B"000")); - SOFT_RESET2 = !((HDD_C[] == B"1011") & (FDD_C[] == B"001")); - --- FDD switch - --- NFDD_1440 = EXP(FDD_1440 & S720 & /RESET); --- FDD_1440 = EXP(NFDD_1440 & S144); - FDD_1440 = 10K_D0; - NFDD_1440 = !10K_D0; - - S144 = EXP((HDD_C[] == B"0001") & (FDD_C[] == B"001")); - S720 = EXP((HDD_C[] == B"0001") & (FDD_C[] == B"000")); - --- Screen Switch - - T320 = EXP(NT320 & S320 & /RESET); - NT320 = EXP(T320 & S312); - - S312 = EXP((HDD_C[] == B"1001") & (FDD_C[] == B"001")); - S320 = EXP((HDD_C[] == B"1001") & (FDD_C[] == B"000")); - --- HDD Switch - --- THDD = EXP(NTHDD & SHDD2 & /RESET); --- NTHDD = EXP(THDD & SHDD1); - - THDD = EXP(NTHDD & NO_HDD & SHDD2 & /RESET & SOFT_RESET2); - NTHDD = EXP(THDD & NO_HDD & SHDD1 & /RESET & SOFT_RESET2); - NO_HDD = EXP(NTHDD & THDD & SHDD1 & SHDD2); - - SHDD2 = EXP((HDD_C[] == B"0011") & (FDD_C[] == B"001")); - SHDD1 = EXP((HDD_C[] == B"0011") & (FDD_C[] == B"000")); - --- Control signals - - WR_PDOS = DFF(!((HDD_C[] == 0) & (FDD_C[] == B"X01")),HDD_CLK,,FDD_C2); - /WG_WR = DFF(!((HDD_C[] == 0) & (FDD_C[] == B"X00")),HDD_CLK,,FDD_C2); - /WG_RD = DFF(!((HDD_C[] == 0) & (FDD_C[] == B"X10")),HDD_CLK,,FDD_C2); - - CMOS_DWR = DFF(!((HDD_C[] == B"1110") & (FDD_C[] == B"X01")),HDD_CLK,,FDD_C2); - CMOS_AS =!DFF(!((HDD_C[] == B"0110") & (FDD_C[] == B"X01")),HDD_CLK,,FDD_C2); - CMOS_DRD = DFF(!((HDD_C[] == B"1110") & (FDD_C[] == B"X10")),HDD_CLK,,FDD_C2); - --- HD_DIR = !HDD_C1; -- ???????????? - HD_DIR = XHD_RD; - --- HD_CS = GND; --- HD_CS = CTV8M; - HD_CS = (CTV8M and /RESET); - - --- HD_CS = !/RESET; - --- XHD_RES = VCC; - --- XHD_RES = DFF(PW_GOOD,SINC_V,,); - XHD_RES = DFF(PW_GOOD,SINC_V,EPM_RES,); - --- XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1),CLK42,,); --- XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1),CLK42,,); - --- HDD_CLK = EXP(EXP(HDD_C0)); - HDD_CLK = 10K_CLK; - --- XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1 or !HDD_CLK),CLK42,,HDD_C0); --- XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1 or !HDD_CLK),CLK42,,HDD_C0); --- XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1),HDD_CLK,,HDD_C0); --- XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1),HDD_CLK,,HDD_C0); - XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1),HDD_CLK,,(HDD_C0 and /RESET)); - XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1),HDD_CLK,,(HDD_C0 and /RESET)); - --- XHD1_CS1 = DFF(!((HDD_C[] == B"010X") & NTHDD),CLK42,,); --- XHD1_CS2 = DFF(!((HDD_C[] == B"110X") & NTHDD),CLK42,,); - --- XHD2_CS1 = DFF(!((HDD_C[] == B"010X") & THDD),CLK42,,); --- XHD2_CS2 = DFF(!((HDD_C[] == B"110X") & THDD),CLK42,,); - --- XHD1_CS1 = DFF((!(HDD_C[] == B"010X") or THDD),CLK42,,); --- XHD1_CS2 = DFF((!(HDD_C[] == B"110X") or THDD),CLK42,,); - XHD1_CS1 = DFF((!(HDD_C[] == B"010X") or THDD),CLK42,,/RESET); - XHD1_CS2 = DFF((!(HDD_C[] == B"110X") or THDD),CLK42,,/RESET); - --- XHD2_CS1 = DFF((!(HDD_C[] == B"010X") or NTHDD),CLK42,,); --- XHD2_CS2 = DFF((!(HDD_C[] == B"110X") or NTHDD),CLK42,,); - XHD2_CS1 = DFF((!(HDD_C[] == B"010X") or NTHDD),CLK42,,/RESET); - XHD2_CS2 = DFF((!(HDD_C[] == B"110X") or NTHDD),CLK42,,/RESET); - - -END; - diff --git a/src/altera/max/SP2_MAX_7128.pof b/src/altera/max/SP2_MAX_7128.pof deleted file mode 100644 index 7cc9468c9c1b4e8b0c80eefdca6928f251b1e3e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7980 zcmeHMO=w(I6do%PX+Wr5WG8`ARQ$~TIbfI7uE-IAHtT%X2u=!G|)Iymydq23)kdbd^IJGgIT?`ZF9dq)rLs~+gB zl%Fm4KHpdA@7q!?mrLtP8-UopduX7t<+(ktZmX2b&s55#2SvPR$1B^0->DvWf3!LR z8|zD5&}Uy8N?$$(MktwM3H@J4k-k8S$kykNJ5d&V&u<$Qk+@Or)@EZiRv6xZElvtuB_s-JyMCj*^^T(~@+YnsUfR;&L)g$9=Ox zq9p33m#*@zojy-Kk9z~xwswajsb+1^VlYIJ0^1P^q;5)hTmz}oBYe7Aq+Z`^Of)M3 z$p!8qD3K}|W8V4={)C<^4{JSC~t>920x%%YiF ztwm*+&{&mFEiOqAy0auVU>X<^o)Vr1(+U%* z7zNZyV6iboc`O!>Y~S1H8CnWJf0pKXHas9GvFp61g&Wn+b#O=h?7pKkTTa@1_?O zk*R{c&)w<@*mm%>;XC8I((ZFy#qdCJnkG1qB)2SjR5vd^jcqiDn+gV*SM)M0dP9$t>FeW~g|B|cqrY_4jg_$+>CMOxcD8HKtN4`65 z`EireJgLi312}l?G6+s&Tgm-=W7y&fVa`xzw=1*G+dS>hRuW`qZlolxZ#K8pdAlL9 z&cawRDtPKGgX#ODt9GVmYSY*+-Pex{UhA5l>RDKa#fKm9;_UH-?$_V_0Xw7H=f6L? z&^`8Z_s+>DDx1GJd-T|&d*0f0b@Iu|=1XUe9@{wf_RBjb2mk77{Ma+Kark2Q)yctc z9*60Lby&dKpX|piyi?iHb6vHIJqzoxc=H@~u3=#@eFtB{gu02qIzc#(O_S&Bj4F@(#1^QM9X0 z<0j4P1LJ1vP<XrgIYt3)(itLp KSpIMQUGKj}oAgis diff --git a/src/altera/max/clean.bat b/src/altera/max/clean.bat deleted file mode 100644 index 4496ad1..0000000 --- a/src/altera/max/clean.bat +++ /dev/null @@ -1,28 +0,0 @@ -@echo off - -del *.txt -del *.bak -del *.cnf -del *.db? - -del *.hif -del *.mmf -del *.mtf -del *.mtb -del *.hex -del *.ndb -del *.pin -del *.pof -del *.snf -del *.fit -del *.jam -del *.jbc -del *.log -del *.rpt - -del *.SCF -del *.ACF -rem del *.TDF -del *.INC -del *.MIF - diff --git a/src/altera/max/compile.log b/src/altera/max/compile.log deleted file mode 100644 index d1f3d16..0000000 --- a/src/altera/max/compile.log +++ /dev/null @@ -1,214 +0,0 @@ -07.09.2022 00:27: [2/2] ALTERA MAX-7128 STREAM -7128\SP2_MAX.ACF -஢ 䠩: 1. - -********************************************************************** -MAX+plus II -Version 10.0 9/14/2000 -Copyright (c) 1988-2000 Altera Corporation. All rights reserved. - -This material is made available for use under a license from Altera -and its use is subject to all conditions and restrictions provided -by the license agreement. U.S. and foreign patents apply to the -software program and the semiconductor components which are programmed -using the software program. - -This program, these components, and the system comprising both -are covered by one or more of the following U.S. patents: - -6,097,211; 6,094,064; 6,091,258; 6,091,102; 6,085,317; 6,084,427; -6,081,449; 6,080,204; 6,078,521; 6,076,179; 6,075,380; 6,072,358; -6,072,332; 6,069,487; 6,066,960; 6,064,599; 6,060,903; 6,058,452; -6,057,707; 6,052,755; 6,052,309; 6,052,327; 6,049,223; 6,049,225; -6,045,252; 6,043,676; 6,040,712; 6,038,171; 6,037,829; 6,034,857; -6,034,540; 6,034,536; 6,032,159; 6,031,763; 6,031,391; 6,029,236; -6,028,809; 6,028,808; 6,028,787; 6,026,226; 6,025,737; 6,023,439; -6,020,760; 6,020,759; 6,020,758; 6,018,490; 6,018,476; 6,014,334; -6,011,744; 6,011,730; 6,011,406; 6,005,379; 5,999,016; 5,999,015; -5,998,295; 5,996,039; 5,986,470; 5,986,465; 5,983,277; 5,982,195; -5,978,476; 5,977,793; 5,977,791; 5,968,161; 5,970,255; 5,966,597; -5,963,565; 5,969,051; 5,963,069; 5,963,049; 5,959,891; 5,953;537; -5,949,991; 5,949,710; 5,949,250; 5,949,239; 5,954,751; 5,943,267; -5,942,914; 5,940,852; 5,939,790; 5,936,425; 5,926,036; 5,925,904; -5,923,567; 5,915,756; 5,915,017; 5,909,450; 5,909,375; 5,909,126; -5,905,675; 5,904,524; 5,900,743; 5,898,628; 5,898,318; 5,894,228; -5,893,088; 5,892,683; 5,883,526; 5,880,725; 5,880,597; 5,880,596; -5,878,250; 5,875,112; 5,873,113; 5,872,529; 5,872,463; 5,870,410; -5,869,980; 5,869,979; 5,861,760; 5,859,544; 5,859,542; 5,850,365; -5,850,152; 5,850,151; 5,848,005; 5,847,617; 5,845,385; 5,844,854; -RE35,977; 5,838,628; 5,838,584; 5,835,998; 5,834,849; 5,828,229; -5,825,197; 5,821,787: 5,821,773; 5,821,771; 5,815,726; 5,815,024; -5,815,003; 5,812,479; 5,812,450; 5,809,281; 5,809,034; 5,805,516; -5,802,540; 5,801,541; 5,796,267; 5,793,246; 5,790,469; 5,787,009; -5,771,264; 5,768,562; 5,768,372; 5,767,734; 5,764,583; 5,764,569; -5,764,080; 5,764,079; 5,761,099; 5,760,624; 5,757,207; 5,757,070; -5,744,991; 5,744,383; 5,740,110; 5,732,020; 5,729,495; 5,717,901; -5,705,939; 5,699,020; 5,699,312; 5,696,455; 5,693,540; 5,694,058; -5,691,653; 5,689,195; 5,668,771; 5,680,061; 5,672,985; 5,670,895; -5,659,717; 5,650,734; 5,649,163; 5,642,262; 5,642,082; 5,633,830; -5,631,576; 5,621,312; 5,614,840; 5,612,642; 5,608,337; 5,606,276; -5,606,266; 5,604,453; 5,598,109; 5,598,108; 5,592,106; 5,592,102; -5,590,305; 5,583,749; 5,581,501; 5,574,893; 5,572,717; 5,572,148; -5,572,067; 5,570,040; 5,567,177; 5,565,793; 5,563,592; 5,561,757; -5,557,217; 5,555,214; 5,550,842; 5,550,782; 5,548,552; 5,548,228; -5,543,732; 5,543,730; 5,541,530; 5,537,295; 5,537,057; 5,525,917; -5,525,827; 5,523,706; 5,523,247; 5,517,186; 5,498,975; 5,495,182; -5,493,526; 5,493,519; 5,490,266; 5,488,586; 5,487,143; 5,486,775; -5,485,103; 5,485,102; 5,483,178; 5,477,474; 5,473,266; 5,463,328, -5,444,394; 5,438,295; 5,436,575; 5,436,574; 5,434,514; 5,432,467; -5,414,312; 5,399,922; 5,384,499; 5,376,844; 5,371,422; 5,369,314; -5,359,243; 5,359,242; 5,353,248; 5,352,940; 5,309,046; 5,350,954; -5,349,255; 5,341,308; 5,341,048; 5,341,044; 5,329,487; 5,317,210; -5,315,172; 5,301,416; 5,294,975; 5,285,153; 5,280,203; 5,274,581; -5,272,368; 5,268,598; 5,266,037; 5,260,611; 5,260,610; 5,258,668; -5,247,478; 5,247,477; 5,243,233; 5,241,224; 5,237,219; 5,220,533; -5,220,214; 5,200,920; 5,187,392; 5,166,604; 5,162,680; 5,144,167; -5,138,576; 5,128,565; 5,121,006; 5,111,423; 5,097,208; 5,091,661; -5,066,873; 5,045,772; 4,969,121; 4,930,107; 4,930,098; 4,930,097; -4,912,342; 4,903,223; 4,899,070; 4,899,067; 4,871,930; 4,864,161; -4,831,573; 4,785,423; 4,774,421; 4,713,792; 4,677,318; 4,617,479; -4,609,986; 4,020,469; Additional patents are pending. - -Altera Corporation acknowledges the trademarks of other organizations -for their respective products or services mentioned in this software. - -********************************************************************** -Compiling project f:\sprinter\src\altera\max\sp2_max .... - -**** Compiler Netlist Extractor **** - -Processing . -- 0% done -Warning: Line 106, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "UNUSED78" was declared but never used -Warning: Line 52, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "XA2" was declared but never used -Warning: Line 167, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "CTV8C" was declared but never used -Warning: Line 89, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "UNUSED33" was declared but never used -Warning: Line 52, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "XA1" was declared but never used -Warning: Line 93, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "UNUSED7" was declared but never used -Warning: Line 83, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "XHR_RDY" was declared but never used -Warning: Line 52, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "XA0" was declared but never used -Warning: Line 103, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "UNUSED70" was declared but never used -Warning: Line 101, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "UNUSED55" was declared but never used -Warning: Line 92, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "UNUSED5" was declared but never used -Warning: Line 162, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "EXP_X" was declared but never used -Warning: Line 94, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "UNUSED22" was declared but never used -Warning: Line 91, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "UNUSED2" was declared but never used -Warning: Line 98, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "UNUSED49" was declared but never used -Warning: Line 104, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "UNUSED72" was declared but never used -Warning: Line 163, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "EXP_Y" was declared but never used -Warning: Line 100, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "UNUSED53" was declared but never used -Warning: Line 70, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "VGA_IN" was declared but never used -Warning: Line 95, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "UNUSED24" was declared but never used -Warning: Line 99, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "UNUSED50" was declared but never used -Warning: Line 88, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "UNUSED65" was declared but never used -Warning: Line 90, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "UNUSED1" was declared but never used -Warning: Line 105, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "UNUSED77" was declared but never used -Warning: Line 75, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "SINC_IN" was declared but never used -Warning: Line 102, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "UNUSED63" was declared but never used -Warning: Line 96, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "UNUSED27" was declared but never used -Warning: Line 97, File f:\sprinter\src\altera\max\sp2_max.tdf: -Symbolic name "UNUSED28" was declared but never used -Processing .. -- 100% done -Warning: Timing requirement assignments influence compilation only for FLEX 6000, FLEX 8000, and FLEX 10K devices. However, the Compiler will check whether it can meet your timing requirements. - -**** Database Builder **** - -Processing . -- 0% done -Processing .. -- 100% done - -**** Logic Synthesizer **** - -Processing . -- 0% done -Warning: Flipflop 'CTV8M' stuck at GND -Warning: No Clock transition on flipflop 'CNF_OFF' -Warning: Primitive 'BEEP' is stuck at GND -Warning: Primitive 'DENS_X' is stuck at VCC -Warning: Primitive 'HD_CS' is stuck at GND -Info: NOT Gate Push-Back has occurred on some registers -- if the power-up condition is crucial to the operation of the circuit, use the asynchronous Clear/Preset on the register to ensure proper operation -Processing .. -- 100% done - -**** Partitioner **** - -Processing . -- 0% done -Warning: Project has user pin or logic cell assignments, but has never been compiled before. For best fitting results, let the Compiler choose the first set of assignments instead. -Info: Reserved unused input pin 'XA2' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'XA1' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'XA0' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'VGA_IN' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'SINC_IN' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'XHR_RDY' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED65' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED33' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED1' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED2' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED5' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED7' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED22' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED24' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED27' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED28' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED49' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED50' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED53' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED55' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED63' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED70' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED72' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED77' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED78' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Processing .. -- 100% done - -**** Fitter **** - -Processing . -- 0% done -Info: Chip 'SP2_MAX' in device 'EPM7128STC100-10' has less than 20% of pins available for future logic changes -- if your project is likely to change, Altera recommends using a larger device -Processing .. -- 100% done - -**** Timing SNF Extractor **** - -Processing . -- 0% done -Processing .. -- 100% done -Warning: Found ripple clock -- warning messages and Report File information on tco, tsu, and fmax may be inaccurate -Info: One or more paths have been found between registers controlled by different clocks -- can't calculate fmax for those paths -Warning: Can't provide fmax of 100.00 MHz on Clock pin "RSTB". Current fmax is 43.47 MHz. -Warning: Can't provide fmax of 100.00 MHz on Clock pin "STE". Current fmax is 43.47 MHz. -Warning: Can't provide fmax of 100.00 MHz on Clock pin "TG42_IN". Current fmax is 27.02 MHz. -Warning: Can't provide fmax of 100.00 MHz on Clock pin "WSTB". Current fmax is 43.47 MHz. -Info: Found a total of 4 timing assignments that were not implemented -Project compilation was successful - 0 errors - 39 warnings - 㤠 F:\Sprinter\src\altera\max\*.txt - 㤠 F:\Sprinter\src\altera\max\*.bak - 㤠 F:\Sprinter\src\altera\max\*.db? - 㤠 F:\Sprinter\src\altera\max\*.mtb - 㤠 F:\Sprinter\src\altera\max\*.hex - 㤠 F:\Sprinter\src\altera\max\*.SCF - 㤠 F:\Sprinter\src\altera\max\*.INC - 㤠 F:\Sprinter\src\altera\max\*.MIF diff --git a/src/altera/max/make.cmd b/src/altera/max/make.cmd deleted file mode 100644 index faeff7e..0000000 --- a/src/altera/max/make.cmd +++ /dev/null @@ -1,46 +0,0 @@ -@echo off -@echo off -set BIN=..\..\bin\ -set LOG=compile.log -for /F %%i in ('date /t') do set mydate=%%i -for /F %%i in ('time /t') do set mytime=%%i -set mydt=%mydate% %mytime% - -set CHIP=7128 - -echo 0. [2/2] ALTERA MAX-%CHIP% STREAM -echo %mydt%: [2/2] ALTERA MAX-%CHIP% STREAM > %LOG% - -if exist SP2_MAX_%CHIP%.pof goto quit - -copy %CHIP%\*.ACF .\*.* >> %LOG% 2>&1 - -C:\MAXPLUS2\MAXPLUS2.EXE -compile SP2_MAX >> %LOG% - -del *.txt >> %LOG% 2>&1 -del *.bak >> %LOG% 2>&1 -del *.cnf >> %LOG% 2>&1 -del *.db? >> %LOG% 2>&1 - -del *.hif >> %LOG% 2>&1 -del *.mmf >> %LOG% 2>&1 -del *.mtf >> %LOG% 2>&1 -del *.mtb >> %LOG% 2>&1 -del *.hex >> %LOG% 2>&1 -del *.ndb >> %LOG% 2>&1 -del *.pin >> %LOG% 2>&1 -rem del *.pof >> %LOG% 2>&1 -del *.snf >> %LOG% 2>&1 -del *.fit >> %LOG% 2>&1 -del *.jam >> %LOG% 2>&1 -del *.jbc >> %LOG% 2>&1 - -del *.SCF >> %LOG% 2>&1 -del *.ACF >> %LOG% 2>&1 -rem del *.TDF >> %LOG% 2>&1 -del *.INC >> %LOG% 2>&1 -del *.MIF >> %LOG% 2>&1 - -ren SP2_MAX.pof SP2_MAX_%CHIP%.pof >> %LOG% 2>&1 - -:quit diff --git a/src/altera/max/sp2_max.rpt b/src/altera/max/sp2_max.rpt deleted file mode 100644 index 92b7c72..0000000 --- a/src/altera/max/sp2_max.rpt +++ /dev/null @@ -1,1585 +0,0 @@ -Project Information f:\sprinter\src\altera\max\sp2_max.rpt - -MAX+plus II Compiler Report File -Version 10.0 9/14/2000 -Compiled: 09/07/2022 00:27:59 - -Copyright (C) 1988-2000 Altera Corporation -Any megafunction design, and related net list (encrypted or decrypted), -support information, device programming or simulation file, and any other -associated documentation or information provided by Altera or a partner -under Altera's Megafunction Partnership Program may be used only to -program PLD devices (but not masked PLD devices) from Altera. Any other -use of such megafunction design, net list, support information, device -programming or simulation file, or any other related documentation or -information is prohibited for any other purpose, including, but not -limited to modification, reverse engineering, de-compiling, or use with -any other silicon devices, unless such use is explicitly licensed under -a separate agreement with Altera or a megafunction partner. Title to -the intellectual property, including patents, copyrights, trademarks, -trade secrets, or maskworks, embodied in any such megafunction design, -net list, support information, device programming or simulation file, or -any other related documentation or information provided by Altera or a -megafunction partner, remains with Altera, the megafunction partner, or -their respective licensors. No other licenses, including any licenses -needed under any third party's intellectual property, are provided herein. - - - -***** Project compilation was successful - - -SINC_controller - - -** DEVICE SUMMARY ** - -Chip/ Input Output Bidir Shareable -POF Device Pins Pins Pins LCs Expanders % Utilized - -SP2_MAX EPM7128STC100-10 46 30 4 64 40 50 % - -User Pins: 46 30 4 - - - -Project Information f:\sprinter\src\altera\max\sp2_max.rpt - -** PROJECT COMPILATION MESSAGES ** - -Warning: Line 106, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "UNUSED78" was declared but never used -Warning: Line 52, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "XA2" was declared but never used -Warning: Line 167, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "CTV8C" was declared but never used -Warning: Line 89, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "UNUSED33" was declared but never used -Warning: Line 52, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "XA1" was declared but never used -Warning: Line 93, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "UNUSED7" was declared but never used -Warning: Line 83, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "XHR_RDY" was declared but never used -Warning: Line 52, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "XA0" was declared but never used -Warning: Line 103, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "UNUSED70" was declared but never used -Warning: Line 101, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "UNUSED55" was declared but never used -Warning: Line 92, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "UNUSED5" was declared but never used -Warning: Line 162, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "EXP_X" was declared but never used -Warning: Line 94, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "UNUSED22" was declared but never used -Warning: Line 91, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "UNUSED2" was declared but never used -Warning: Line 98, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "UNUSED49" was declared but never used -Warning: Line 104, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "UNUSED72" was declared but never used -Warning: Line 163, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "EXP_Y" was declared but never used -Warning: Line 100, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "UNUSED53" was declared but never used -Warning: Line 70, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "VGA_IN" was declared but never used -Warning: Line 95, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "UNUSED24" was declared but never used -Warning: Line 99, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "UNUSED50" was declared but never used -Warning: Line 88, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "UNUSED65" was declared but never used -Warning: Line 90, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "UNUSED1" was declared but never used -Warning: Line 105, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "UNUSED77" was declared but never used -Warning: Line 75, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "SINC_IN" was declared but never used -Warning: Line 102, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "UNUSED63" was declared but never used -Warning: Line 96, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "UNUSED27" was declared but never used -Warning: Line 97, File f:\sprinter\src\altera\max\sp2_max.tdf: - Symbolic name "UNUSED28" was declared but never used -Warning: Flipflop 'CTV8M' stuck at GND -Warning: No Clock transition on flipflop 'CNF_OFF' -Warning: Primitive 'BEEP' is stuck at GND -Warning: Primitive 'DENS_X' is stuck at VCC -Warning: Primitive 'HD_CS' is stuck at GND -Warning: Project has user pin or logic cell assignments, but has never been compiled before. For best fitting results, let the Compiler choose the first set of assignments instead. -Info: Reserved unused input pin 'XA2' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'XA1' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'XA0' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'VGA_IN' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'SINC_IN' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'XHR_RDY' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED65' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED33' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED1' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED2' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED5' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED7' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED22' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED24' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED27' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED28' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED49' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED50' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED53' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED55' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED63' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED70' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED72' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED77' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board -Info: Reserved unused input pin 'UNUSED78' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board - - -** PROJECT TIMING MESSAGES ** - -Warning: Found ripple clock -- warning messages and Report File information on tco, tsu, and fmax may be inaccurate -Warning: Can't provide fmax of 100.00 MHz on Clock pin "RSTB". Current fmax is 43.47 MHz. -Warning: Can't provide fmax of 100.00 MHz on Clock pin "STE". Current fmax is 43.47 MHz. -Warning: Can't provide fmax of 100.00 MHz on Clock pin "TG42_IN". Current fmax is 27.02 MHz. -Warning: Can't provide fmax of 100.00 MHz on Clock pin "WSTB". Current fmax is 43.47 MHz. - - -Project Information f:\sprinter\src\altera\max\sp2_max.rpt - -** PIN/LOCATION/CHIP ASSIGNMENTS ** - - Actual - User Assignments -Assignments (if different) Node Name - -SP2_MAX@35 AUD -SP2_MAX@84 BEEP -SP2_MAX@13 CLK_WG -SP2_MAX@32 CLKZZ -SP2_MAX@31 CLK14 -SP2_MAX@6 CMOS_AS -SP2_MAX@99 CMOS_DRD -SP2_MAX@100 CMOS_DWR -SP2_MAX@54 /CONF_X -SP2_MAX@96 DENS_X -SP2_MAX@60 D0 -SP2_MAX@89 EPM_RES -SP2_MAX@14 FDAT -SP2_MAX@44 FDD_C0 -SP2_MAX@45 FDD_C1 -SP2_MAX@46 FDD_C2 -SP2_MAX@52 HD_CS -SP2_MAX@47 HDD_C0 -SP2_MAX@42 HDD_C1 -SP2_MAX@41 HDD_C2 -SP2_MAX@40 HDD_C3 -SP2_MAX@48 HD_DIR -SP2_MAX@90 PW_GOOD -SP2_MAX@16 QDAT -SP2_MAX@92 RDAT -SP2_MAX@25 RSTB -SP2_MAX@67 SINC -SP2_MAX@68 SINC_H -SP2_MAX@69 SINC_IN -SP2_MAX@64 SINC_V -SP2_MAX@20 SINC_1 -SP2_MAX@19 SINC_2 -SP2_MAX@30 SL -SP2_MAX@29 SR -SP2_MAX@94 STE -SP2_MAX@36 TG42_BUF -SP2_MAX@87 TG42_IN -SP2_MAX@85 TG42_OUT -SP2_MAX@12 TR43 -SP2_MAX@1 UNUSED1 -SP2_MAX@2 UNUSED2 -SP2_MAX@5 UNUSED5 -SP2_MAX@7 UNUSED7 -SP2_MAX@22 UNUSED22 -SP2_MAX@24 UNUSED24 -SP2_MAX@27 UNUSED27 -SP2_MAX@28 UNUSED28 -SP2_MAX@33 UNUSED33 -SP2_MAX@49 UNUSED49 -SP2_MAX@50 UNUSED50 -SP2_MAX@53 UNUSED53 -SP2_MAX@55 UNUSED55 -SP2_MAX@63 UNUSED63 -SP2_MAX@65 UNUSED65 -SP2_MAX@70 UNUSED70 -SP2_MAX@72 UNUSED72 -SP2_MAX@77 UNUSED77 -SP2_MAX@78 UNUSED78 -SP2_MAX@61 VGA_IN -SP2_MAX@9 WD -SP2_MAX@98 WDAT -SP2_MAX@97 /WG_RD -SP2_MAX@93 /WG_WR -SP2_MAX@57 WR_CNF -SP2_MAX@8 WR_PDOS -SP2_MAX@10 WSTB -SP2_MAX@37 XACS -SP2_MAX@17 XA0 -SP2_MAX@21 XA1 -SP2_MAX@23 XA2 -SP2_MAX@76 XHD_RD -SP2_MAX@71 XHD_RES -SP2_MAX@75 XHD_WR -SP2_MAX@79 XHD1_CS1 -SP2_MAX@80 XHD1_CS2 -SP2_MAX@81 XHD2_CS1 -SP2_MAX@83 XHD2_CS2 -SP2_MAX@88 XHR_RDY -SP2_MAX@56 10K_CLK -SP2_MAX@58 10K_D0 - - -Device-Specific Information: f:\sprinter\src\altera\max\sp2_max.rpt -SP2_MAX - -***** Logic for device 'SP2_MAX' compiled without errors. - - - - -Device: EPM7128STC100-10 - -Device Options: - Turbo Bit = ON - Security Bit = ON - Enable JTAG Support = ON - User Code = ffff - MultiVolt I/O = OFF - - - -Device-Specific Information: f:\sprinter\src\altera\max\sp2_max.rpt -SP2_MAX - -** ERROR SUMMARY ** - -Info: Chip 'SP2_MAX' in device 'EPM7128STC100-10' has less than 20% of pins available for future logic changes -- if your project is likely to change, Altera recommends using a larger device - C C T X X X X U U - M M P E X T G H H H H N N - O O / D / V W P H G 4 D D D D U U X - S S W E W C _ M R 4 2 2 V 2 1 1 S S H - _ _ W G N G R C G _ _ 2 _ B _ C _ _ _ E E D - D D D _ S G S _ D I O R R _ G O E C C C C C D D _ - W R A R _ N T W A N O E D I N U E S I S S S 7 7 R - R D T D X D E R T T D S Y N D T P 2 O 1 2 1 8 7 D - ----------------------------------------------------_ - / 100 98 96 94 92 90 88 86 84 82 80 78 76 |_ - / 99 97 95 93 91 89 87 85 83 81 79 77 | - UNUSED1 | 1 75 | XHD_WR - UNUSED2 | 2 74 | GND - VCCIO | 3 73 | #TDO - #TDI | 4 72 | UNUSED72 - UNUSED5 | 5 71 | XHD_RES - CMOS_AS | 6 70 | UNUSED70 - UNUSED7 | 7 69 | SINC_IN - WR_PDOS | 8 68 | SINC_H - WD | 9 67 | SINC - WSTB | 10 66 | VCCIO - GND | 11 65 | UNUSED65 - TR43 | 12 64 | SINC_V - CLK_WG | 13 EPM7128STC100-10 63 | UNUSED63 - FDAT | 14 62 | #TCK - #TMS | 15 61 | VGA_IN - QDAT | 16 60 | D0 - XA0 | 17 59 | GND - VCCIO | 18 58 | 10K_D0 - SINC_2 | 19 57 | WR_CNF - SINC_1 | 20 56 | 10K_CLK - XA1 | 21 55 | UNUSED55 -UNUSED22 | 22 54 | /CONF_X - XA2 | 23 53 | UNUSED53 -UNUSED24 | 24 52 | HD_CS - RSTB | 25 51 | VCCIO - | 27 29 31 33 35 37 39 41 43 45 47 49 _| - \ 26 28 30 32 34 36 38 40 42 44 46 48 50 | - \----------------------------------------------------- - G U U S S C C U V A T X G V H H H G F F F H H U U - N N N R L L L N C U G A N C D D D N D D D D D N N - D U U K K U C D 4 C D C D D D D D D D D _ U U - S S 1 Z S I 2 S I _ _ _ _ _ _ _ D S S - E E 4 Z E O _ N C C C C C C C I E E - D D D B T 3 2 1 0 1 2 0 R D D - 2 2 3 U 4 5 - 7 8 3 F 9 0 - - -N.C. = No Connect. This pin has no internal connection to the device. -VCCINT = Dedicated power pin, which MUST be connected to VCC (5.0 volts). -VCCIO = Dedicated power pin, which MUST be connected to VCC (5.0 volts). -GND = Dedicated ground pin or unused dedicated input, which MUST be connected to GND. -RESERVED = Unused I/O pin, which MUST be left unconnected. - -^ = Dedicated configuration pin. -+ = Reserved configuration pin, which is tri-stated during user mode. -* = Reserved configuration pin, which drives out in user mode. -PDn = Power Down pin. -@ = Special-purpose pin. -# = JTAG Boundary-Scan Testing/In-System Programming or Configuration Pin. The JTAG inputs TMS and TDI should be tied to VCC and TCK should be tied to GND when not in use. -& = JTAG pin used for I/O. When used as user I/O, JTAG pins must be kept stable before and during configuration. JTAG pin stability prevents accidental loading of JTAG instructions. - - -Device-Specific Information: f:\sprinter\src\altera\max\sp2_max.rpt -SP2_MAX - -** RESOURCE USAGE ** - - Shareable External -Logic Array Block Logic Cells I/O Pins Expanders Interconnect - -A: LC1 - LC16 6/16( 37%) 10/10(100%) 2/16( 12%) 13/36( 36%) -B: LC17 - LC32 14/16( 87%) 10/10(100%) 11/16( 68%) 28/36( 77%) -C: LC33 - LC48 16/16(100%) 10/10(100%) 6/16( 37%) 26/36( 72%) -D: LC49 - LC64 6/16( 37%) 10/10(100%) 2/16( 12%) 6/36( 16%) -E: LC65 - LC80 2/16( 12%) 10/10(100%) 6/16( 37%) 12/36( 33%) -F: LC81 - LC96 4/16( 25%) 10/10(100%) 3/16( 18%) 17/36( 47%) -G: LC97 - LC112 8/16( 50%) 10/10(100%) 5/16( 31%) 31/36( 86%) -H: LC113 - LC128 8/16( 50%) 10/10(100%) 7/16( 43%) 11/36( 30%) - - -Total dedicated input pins used: 4/4 (100%) -Total I/O pins used: 80/80 (100%) -Total logic cells used: 64/128 ( 50%) -Total shareable expanders used: 40/128 ( 31%) -Total Turbo logic cells used: 55/128 ( 42%) -Total shareable expanders not available (n/a): 2/128 ( 1%) -Average fan-in: 5.73 -Total fan-in: 367 - -Total input pins required: 46 -Total fast input logic cells required: 0 -Total output pins required: 30 -Total bidirectional pins required: 4 -Total reserved pins required 4 -Total logic cells required: 64 -Total flipflops required: 58 -Total product terms required: 222 -Total logic cells lending parallel expanders: 0 -Total shareable expanders in database: 35 - -Synthesized logic cells: 0/ 128 ( 0%) - - - -Device-Specific Information: f:\sprinter\src\altera\max\sp2_max.rpt -SP2_MAX - -** INPUTS ** - - Shareable - Expanders Fan-In Fan-Out - Pin LC LAB Primitive Code Total Shared n/a INP FBK OUT FBK Name - 32 56 D BIDIR 2 2 0 1 2 4 10 CLKZZ - 54 85 F OPNDRN 0 0 0 8 2 9 1 /CONF_X - 60 (93) (F) INPUT 0 0 0 0 0 1 0 D0 - 89 - - INPUT 0 0 0 0 0 2 0 EPM_RES - 44 (70) (E) INPUT 0 0 0 0 0 13 0 FDD_C0 - 45 (72) (E) INPUT 0 0 0 0 0 16 0 FDD_C1 - 46 (73) (E) INPUT 0 0 0 0 0 14 0 FDD_C2 - 47 (75) (E) INPUT 0 0 0 0 0 17 0 HDD_C0 - 42 (69) (E) INPUT 0 0 0 0 0 16 0 HDD_C1 - 41 (67) (E) INPUT 0 0 0 0 0 16 0 HDD_C2 - 40 (65) (E) INPUT 0 0 0 0 0 13 0 HDD_C3 - 90 - - INPUT 0 0 0 0 0 1 0 PW_GOOD - 92 (16) (A) INPUT 0 0 0 0 0 1 1 RDAT - 25 (33) (C) INPUT 0 0 0 0 0 0 1 RSTB - 69 (105) (G) INPUT 0 0 0 0 0 0 0 SINC_IN - 20 41 C BIDIR 0 0 0 0 8 2 0 SINC_1 - 19 43 C BIDIR 2 1 0 0 11 2 0 SINC_2 - 30 (59) (D) INPUT 0 0 0 0 0 0 1 SL - 29 (61) (D) INPUT 0 0 0 0 0 0 1 SR - 94 (13) (A) INPUT 0 0 0 0 0 0 1 STE - 87 - - INPUT 0 0 0 0 0 7 1 TG42_IN - 12 (21) (B) INPUT 0 0 0 0 0 0 2 TR43 - 1 (3) (A) INPUT 0 0 0 0 0 0 0 UNUSED1 - 2 (1) (A) INPUT 0 0 0 0 0 0 0 UNUSED2 - 5 (30) (B) INPUT 0 0 0 0 0 0 0 UNUSED5 - 7 (27) (B) INPUT 0 0 0 0 0 0 0 UNUSED7 - 22 (38) (C) INPUT 0 0 0 0 0 0 0 UNUSED22 - 24 (35) (C) INPUT 0 0 0 0 0 0 0 UNUSED24 - 27 (64) (D) INPUT 0 0 0 0 0 0 0 UNUSED27 - 28 (62) (D) INPUT 0 0 0 0 0 0 0 UNUSED28 - 33 (54) (D) INPUT 0 0 0 0 0 0 0 UNUSED33 - 49 (78) (E) INPUT 0 0 0 0 0 0 0 UNUSED49 - 50 (80) (E) INPUT 0 0 0 0 0 0 0 UNUSED50 - 53 (83) (F) INPUT 0 0 0 0 0 0 0 UNUSED53 - 55 (86) (F) INPUT 0 0 0 0 0 0 0 UNUSED55 - 63 (97) (G) INPUT 0 0 0 0 0 0 0 UNUSED63 - 65 (101) (G) INPUT 0 0 0 0 0 0 0 UNUSED65 - 70 (107) (G) INPUT 0 0 0 0 0 0 0 UNUSED70 - 72 (110) (G) INPUT 0 0 0 0 0 0 0 UNUSED72 - 77 (117) (H) INPUT 0 0 0 0 0 0 0 UNUSED77 - 78 (118) (H) INPUT 0 0 0 0 0 0 0 UNUSED78 - 61 (94) (F) INPUT 0 0 0 0 0 0 0 VGA_IN - 9 (24) (B) INPUT 0 0 0 0 0 0 2 WD - 57 (89) (F) INPUT 0 0 0 0 0 1 0 WR_CNF - 10 (22) (B) INPUT 0 0 0 0 0 0 1 WSTB - 37 (49) (D) INPUT 0 0 0 0 0 0 1 XACS - 17 (45) (C) INPUT 0 0 0 0 0 0 0 XA0 - 21 (40) (C) INPUT 0 0 0 0 0 0 0 XA1 - 23 (37) (C) INPUT 0 0 0 0 0 0 0 XA2 - 88 - - INPUT 0 0 0 0 0 0 0 XHR_RDY - - -Code: - -s = Synthesized pin or logic cell -t = Turbo logic cell -+ = Synchronous flipflop -/ = Slow slew-rate output -! = NOT gate push-back -r = Fitter-inserted logic cell - - -Device-Specific Information: f:\sprinter\src\altera\max\sp2_max.rpt -SP2_MAX - -** OUTPUTS ** - - Shareable - Expanders Fan-In Fan-Out - Pin LC LAB Primitive Code Total Shared n/a INP FBK OUT FBK Name - 35 53 D FF t 0 0 0 0 4 3 5 AUD - 84 126 H OUTPUT t 0 0 0 0 0 0 0 BEEP - 13 19 B FF t 2 2 0 0 4 1 4 CLK_WG - 32 56 D TRI/FF t 2 2 0 1 2 4 10 CLKZZ - 31 57 D FF t 0 0 0 0 1 0 0 CLK14 - 6 29 B FF t ! 0 0 0 7 1 0 0 CMOS_AS - 99 6 A FF t 0 0 0 7 1 0 0 CMOS_DRD - 100 5 A FF t 0 0 0 7 1 0 0 CMOS_DWR - 54 85 F OPNDRN/FF t 0 0 0 8 2 9 1 /CONF_X - 96 11 A OUTPUT t 0 0 0 0 0 0 0 DENS_X - 14 17 B FF t 8 7 0 1 4 1 4 FDAT - 52 81 F OUTPUT t 0 0 0 0 0 0 0 HD_CS - 48 77 E FF t 1 1 0 4 2 0 0 HD_DIR - 16 46 C FF t 3 3 0 0 8 0 0 QDAT - 67 102 G OUTPUT t 0 0 0 0 2 0 0 SINC - 68 104 G FF t 0 0 0 0 5 4 11 SINC_H - 64 99 G FF t 4 0 0 7 9 3 8 SINC_V - 20 41 C TRI/FF t 0 0 0 0 8 2 0 SINC_1 - 19 43 C TRI/FF t 2 1 0 0 11 2 0 SINC_2 - 36 51 D OUTPUT t 0 0 0 1 0 1 0 TG42_BUF - 85 128 H OUTPUT t 0 0 0 0 1 0 0 TG42_OUT - 98 8 A FF t 2 0 0 0 5 0 0 WDAT - 97 9 A FF t 0 0 0 7 1 0 0 /WG_RD - 93 14 A FF t 0 0 0 7 1 0 0 /WG_WR - 8 25 B FF t 0 0 0 7 1 0 0 WR_PDOS - 76 115 H FF 1 1 0 4 2 0 0 XHD_RD - 71 109 G FF 0 0 0 2 1 1 0 XHD_RES - 75 113 H FF 1 1 0 4 2 0 0 XHD_WR - 79 120 H FF 6 6 0 8 1 0 0 XHD1_CS1 - 80 121 H FF 6 6 0 8 1 0 0 XHD1_CS2 - 81 123 H FF 6 6 0 8 1 0 0 XHD2_CS1 - 83 125 H FF 6 6 0 8 1 0 0 XHD2_CS2 - 56 88 F FF 0 0 0 4 1 10 0 10K_CLK - 58 91 F FF 3 0 1 8 4 3 6 10K_D0 - - -Code: - -s = Synthesized pin or logic cell -t = Turbo logic cell -+ = Synchronous flipflop -/ = Slow slew-rate output -! = NOT gate push-back -r = Fitter-inserted logic cell - - -Device-Specific Information: f:\sprinter\src\altera\max\sp2_max.rpt -SP2_MAX - -** BURIED LOGIC ** - - Shareable - Expanders Fan-In Fan-Out - Pin LC LAB Primitive Code Total Shared n/a INP FBK OUT FBK Name - (12) 21 B DFFE t 0 0 0 1 1 2 0 CNF_OFF - (21) 40 C TFFE t 0 0 0 0 1 1 4 CTH0 - - 39 C TFFE t 0 0 0 0 2 1 3 CTH1 - (17) 45 C TFFE t 0 0 0 0 5 2 3 CTH2 - (24) 35 C TFFE t 0 0 0 0 6 2 2 CTH3 - (23) 37 C TFFE t 0 0 0 0 7 2 1 CTH4 - (69) 105 G DFFE t 1 1 0 0 4 1 8 CTV0 - - 103 G DFFE t 1 1 0 0 4 1 8 CTV1 - (22) 38 C DFFE t 1 1 0 0 5 2 6 CTV2 - - 36 C TFFE t 1 1 0 0 6 2 5 CTV3 - - 34 C TFFE t 1 1 0 0 7 2 4 CTV4 - - 47 C TFFE t 1 1 0 0 8 2 3 CTV5 - (15) 48 C TFFE t 1 1 0 0 9 2 2 CTV6 - - 44 C TFFE t 1 1 0 0 10 2 1 CTV7 - (40) 65 E TFFE t 5 0 0 3 3 2 5 CT_WG - - 23 B TFFE t 0 0 0 0 1 3 7 CT0 - - 20 B TFFE t 0 0 0 0 2 1 1 CT1 - - 58 D TFFE t 0 0 0 0 3 1 0 CT2 - - 98 G DFFE t 0 0 0 3 1 1 2 LR_T0 - (65) 101 G DFFE t 0 0 0 3 1 1 2 LR_T1 - - 26 B DFFE t 1 1 0 0 5 1 2 REG_P0 - (10) 22 B DFFE t 1 1 0 0 5 1 2 REG_P1 - (7) 27 B TFFE t 2 2 0 0 2 1 1 STWG0 - (5) 30 B TFFE t 2 2 0 0 3 1 0 STWG1 - - 42 C TFFE t 3 3 0 0 8 1 4 WGR0 - (25) 33 C TFFE t 4 3 1 0 8 1 4 WGR1 - - 28 B TFFE t 3 3 0 0 8 1 4 WGR2 - (4) 32 B TFFE t 3 3 0 0 8 1 4 WGR3 - (37) 49 D TFFE t 2 2 0 1 1 2 0 XCT0 - (9) 24 B DFFE t 7 7 0 1 3 1 0 :197 - - -Code: - -s = Synthesized pin or logic cell -t = Turbo logic cell -+ = Synchronous flipflop -/ = Slow slew-rate output -! = NOT gate push-back -r = Fitter-inserted logic cell - - -Device-Specific Information: f:\sprinter\src\altera\max\sp2_max.rpt -SP2_MAX - -** LOGIC CELL INTERCONNECTIONS ** - -Logic Array Block 'A': - - Logic cells placed in LAB 'A' - +----------- LC6 CMOS_DRD - | +--------- LC5 CMOS_DWR - | | +------- LC11 DENS_X - | | | +----- LC8 WDAT - | | | | +--- LC9 /WG_RD - | | | | | +- LC14 /WG_WR - | | | | | | - | | | | | | Other LABs fed by signals - | | | | | | that feed LAB 'A' -LC | | | | | | | A B C D E F G H | Logic cells that feed LAB 'A': - -Pin -89 -> - - - - - - | - - - - - * * - | <-- EPM_RES -44 -> * * - - * * | * * - - - * * * | <-- FDD_C0 -45 -> * * - - * * | * * - - * * * * | <-- FDD_C1 -46 -> * * - - * * | * * - - - * * * | <-- FDD_C2 -47 -> * * - - * * | * * - - * * * * | <-- HDD_C0 -42 -> * * - - * * | * * - - * * * * | <-- HDD_C1 -41 -> * * - - * * | * * - - * * * * | <-- HDD_C2 -40 -> * * - - * * | * * - - - * * * | <-- HDD_C3 -90 -> - - - - - - | - - - - - - * - | <-- PW_GOOD -87 -> - - - - - - | - - - * - * - * | <-- TG42_IN -88 -> - - - - - - | - - - - - - - - | <-- XHR_RDY -LC65 -> - - - * - - | * * - - * - - - | <-- CT_WG -LC98 -> - - - * - - | * * - - - - - - | <-- LR_T0 -LC101-> - - - * - - | * * - - - - - - | <-- LR_T1 -LC26 -> - - - * - - | * * - - - - - - | <-- REG_P0 -LC22 -> - - - * - - | * * - - - - - - | <-- REG_P1 -LC88 -> * * - - * * | * * - - * * - * | <-- 10K_CLK - - -* = The logic cell or pin is an input to the logic cell (or LAB) through the PIA. -- = The logic cell or pin is not an input to the logic cell (or LAB). - - -Device-Specific Information: f:\sprinter\src\altera\max\sp2_max.rpt -SP2_MAX - -** LOGIC CELL INTERCONNECTIONS ** - -Logic Array Block 'B': - - Logic cells placed in LAB 'B' - +--------------------------- LC19 CLK_WG - | +------------------------- LC29 CMOS_AS - | | +----------------------- LC21 CNF_OFF - | | | +--------------------- LC23 CT0 - | | | | +------------------- LC20 CT1 - | | | | | +----------------- LC17 FDAT - | | | | | | +--------------- LC26 REG_P0 - | | | | | | | +------------- LC22 REG_P1 - | | | | | | | | +----------- LC27 STWG0 - | | | | | | | | | +--------- LC30 STWG1 - | | | | | | | | | | +------- LC28 WGR2 - | | | | | | | | | | | +----- LC32 WGR3 - | | | | | | | | | | | | +--- LC25 WR_PDOS - | | | | | | | | | | | | | +- LC24 :197 - | | | | | | | | | | | | | | - | | | | | | | | | | | | | | Other LABs fed by signals - | | | | | | | | | | | | | | that feed LAB 'B' -LC | | | | | | | | | | | | | | | A B C D E F G H | Logic cells that feed LAB 'B': -LC19 -> * - - - - - - - * * - - - - | - * - - - - * - | <-- CLK_WG -LC23 -> - - - * * * - - - - * * - * | - * * * - - - - | <-- CT0 -LC17 -> - - - - - - - - - - * * - - | - * * - - - - - | <-- FDAT -LC26 -> - - - - - - * * - - - - - - | * * - - - - - - | <-- REG_P0 -LC22 -> - - - - - - * * - - - - - - | * * - - - - - - | <-- REG_P1 -LC27 -> * - - - - - - - * * - - - - | - * - - - - - - | <-- STWG0 -LC30 -> * - - - - - - - - * - - - - | - * - - - - - - | <-- STWG1 -LC28 -> - - - - - - - - - - * * - - | - * * - - - - - | <-- WGR2 -LC32 -> - - - - - - - - - - * * - - | - * * - - - - - | <-- WGR3 -LC24 -> - - - - - * - - - - - - - - | - * - - - - - - | <-- :197 - -Pin -89 -> - - - - - - - - - - - - - - | - - - - - * * - | <-- EPM_RES -44 -> - * - - - - - - - - - - * - | * * - - - * * * | <-- FDD_C0 -45 -> - * - - - - - - - - - - * - | * * - - * * * * | <-- FDD_C1 -46 -> - * - - - - - - - - - - * - | * * - - - * * * | <-- FDD_C2 -47 -> - * - - - - - - - - - - * - | * * - - * * * * | <-- HDD_C0 -42 -> - * - - - - - - - - - - * - | * * - - * * * * | <-- HDD_C1 -41 -> - * - - - - - - - - - - * - | * * - - * * * * | <-- HDD_C2 -40 -> - * - - - - - - - - - - * - | * * - - - * * * | <-- HDD_C3 -90 -> - - - - - - - - - - - - - - | - - - - - - * - | <-- PW_GOOD -92 -> - - - - - * - - - - - - - * | - * - - - - - - | <-- RDAT -87 -> - - - - - - - - - - - - - - | - - - * - * - * | <-- TG42_IN -37 -> - - * - - - - - - - - - - - | - * - - - - - - | <-- XACS -88 -> - - - - - - - - - - - - - - | - - - - - - - - | <-- XHR_RDY -LC56 -> - - - * * * - - - - * * - * | - * * * * - - - | <-- CLKZZ -LC85 -> - - * - - - - - - - - - - - | - * - - * * * * | <-- /CONF_X -LC65 -> * - - - - - * * * * - - - - | * * - - * - - - | <-- CT_WG -LC98 -> - - - - - - * * - - - - - - | * * - - - - - - | <-- LR_T0 -LC101-> - - - - - - * * - - - - - - | * * - - - - - - | <-- LR_T1 -LC42 -> - - - - - - - - - - * * - - | - * * - - - - - | <-- WGR0 -LC33 -> - - - - - - - - - - * * - - | - * * - - - - - | <-- WGR1 -LC88 -> - * - - - - - - - - - - * - | * * - - * * - * | <-- 10K_CLK -LC91 -> - - - - - * - - - - * * - * | - * * - * * - - | <-- 10K_D0 - - -* = The logic cell or pin is an input to the logic cell (or LAB) through the PIA. -- = The logic cell or pin is not an input to the logic cell (or LAB). - - -Device-Specific Information: f:\sprinter\src\altera\max\sp2_max.rpt -SP2_MAX - -** LOGIC CELL INTERCONNECTIONS ** - -Logic Array Block 'C': - - Logic cells placed in LAB 'C' - +------------------------------- LC40 CTH0 - | +----------------------------- LC39 CTH1 - | | +--------------------------- LC45 CTH2 - | | | +------------------------- LC35 CTH3 - | | | | +----------------------- LC37 CTH4 - | | | | | +--------------------- LC38 CTV2 - | | | | | | +------------------- LC36 CTV3 - | | | | | | | +----------------- LC34 CTV4 - | | | | | | | | +--------------- LC47 CTV5 - | | | | | | | | | +------------- LC48 CTV6 - | | | | | | | | | | +----------- LC44 CTV7 - | | | | | | | | | | | +--------- LC46 QDAT - | | | | | | | | | | | | +------- LC41 SINC_1 - | | | | | | | | | | | | | +----- LC43 SINC_2 - | | | | | | | | | | | | | | +--- LC42 WGR0 - | | | | | | | | | | | | | | | +- LC33 WGR1 - | | | | | | | | | | | | | | | | - | | | | | | | | | | | | | | | | Other LABs fed by signals - | | | | | | | | | | | | | | | | that feed LAB 'C' -LC | | | | | | | | | | | | | | | | | A B C D E F G H | Logic cells that feed LAB 'C': -LC40 -> * * * * * - - - - - - - * - - - | - - * - - - - - | <-- CTH0 -LC39 -> - * * * * - - - - - - - * - - - | - - * - - - - - | <-- CTH1 -LC45 -> - - * * * - - - - - - - * - - - | - - * - - - * - | <-- CTH2 -LC35 -> - - - * * - - - - - - - * - - - | - - * - - - * - | <-- CTH3 -LC37 -> - - - - * - - - - - - - * - - - | - - * - - - * - | <-- CTH4 -LC38 -> - - - - - * * * * * * - - * - - | - - * - - - * - | <-- CTV2 -LC36 -> - - - - - - * * * * * - - * - - | - - * - - - * - | <-- CTV3 -LC34 -> - - - - - - - * * * * - - * - - | - - * - - - * - | <-- CTV4 -LC47 -> - - - - - - - - * * * - - * - - | - - * - - - * - | <-- CTV5 -LC48 -> - - - - - - - - - * * - - * - - | - - * - - - * - | <-- CTV6 -LC44 -> - - - - - - - - - - * - - * - - | - - * - - - * - | <-- CTV7 -LC41 -> - - - - - - - - - - - - * - - - | - - * - - - * - | <-- SINC_1 -LC43 -> - - - - - - - - - - - - - * - - | - - * - - - * - | <-- SINC_2 -LC42 -> - - - - - - - - - - - * - - * * | - * * - - - - - | <-- WGR0 -LC33 -> - - - - - - - - - - - * - - * * | - * * - - - - - | <-- WGR1 - -Pin -89 -> - - - - - - - - - - - - - - - - | - - - - - * * - | <-- EPM_RES -90 -> - - - - - - - - - - - - - - - - | - - - - - - * - | <-- PW_GOOD -87 -> - - - - - - - - - - - - - - - - | - - - * - * - * | <-- TG42_IN -88 -> - - - - - - - - - - - - - - - - | - - - - - - - - | <-- XHR_RDY -LC53 -> * * * * * - - - - - - - * - - - | - - * - - * * - | <-- AUD -LC56 -> - - - - - - - - - - - * - - * * | - * * * * - - - | <-- CLKZZ -LC105-> - - - - - * * * * * * - - * - - | - - * - - - * - | <-- CTV0 -LC103-> - - - - - * * * * * * - - * - - | - - * - - - * - | <-- CTV1 -LC23 -> - - - - - - - - - - - * - - * * | - * * * - - - - | <-- CT0 -LC17 -> - - - - - - - - - - - * - - * * | - * * - - - - - | <-- FDAT -LC104-> - - * * * * * * * * * - * * - - | - - * - - - * - | <-- SINC_H -LC99 -> - - - - - * * * * * * - - * - - | - - * - - - * - | <-- SINC_V -LC28 -> - - - - - - - - - - - * - - * * | - * * - - - - - | <-- WGR2 -LC32 -> - - - - - - - - - - - * - - * * | - * * - - - - - | <-- WGR3 -LC91 -> - - - - - - - - - - - * - - * * | - * * - * * - - | <-- 10K_D0 - - -* = The logic cell or pin is an input to the logic cell (or LAB) through the PIA. -- = The logic cell or pin is not an input to the logic cell (or LAB). - - -Device-Specific Information: f:\sprinter\src\altera\max\sp2_max.rpt -SP2_MAX - -** LOGIC CELL INTERCONNECTIONS ** - -Logic Array Block 'D': - - Logic cells placed in LAB 'D' - +----------- LC53 AUD - | +--------- LC56 CLKZZ - | | +------- LC57 CLK14 - | | | +----- LC58 CT2 - | | | | +--- LC51 TG42_BUF - | | | | | +- LC49 XCT0 - | | | | | | - | | | | | | Other LABs fed by signals - | | | | | | that feed LAB 'D' -LC | | | | | | | A B C D E F G H | Logic cells that feed LAB 'D': -LC56 -> * * - * - * | - * * * * - - - | <-- CLKZZ -LC58 -> * - - * - - | - - - * - - - - | <-- CT2 -LC49 -> - * * - - * | - - - * - - - - | <-- XCT0 - -Pin -89 -> - - - - - - | - - - - - * * - | <-- EPM_RES -90 -> - - - - - - | - - - - - - * - | <-- PW_GOOD -87 -> - * - - * * | - - - * - * - * | <-- TG42_IN -88 -> - - - - - - | - - - - - - - - | <-- XHR_RDY -LC23 -> * - - * - - | - * * * - - - - | <-- CT0 -LC20 -> * - - * - - | - - - * - - - - | <-- CT1 - - -* = The logic cell or pin is an input to the logic cell (or LAB) through the PIA. -- = The logic cell or pin is not an input to the logic cell (or LAB). - - -Device-Specific Information: f:\sprinter\src\altera\max\sp2_max.rpt -SP2_MAX - -** LOGIC CELL INTERCONNECTIONS ** - -Logic Array Block 'E': - - Logic cells placed in LAB 'E' - +--- LC65 CT_WG - | +- LC77 HD_DIR - | | - | | Other LABs fed by signals - | | that feed LAB 'E' -LC | | | A B C D E F G H | Logic cells that feed LAB 'E': -LC65 -> * - | * * - - * - - - | <-- CT_WG - -Pin -89 -> - - | - - - - - * * - | <-- EPM_RES -45 -> - * | * * - - * * * * | <-- FDD_C1 -47 -> - * | * * - - * * * * | <-- HDD_C0 -42 -> - * | * * - - * * * * | <-- HDD_C1 -41 -> - * | * * - - * * * * | <-- HDD_C2 -90 -> - - | - - - - - - * - | <-- PW_GOOD -25 -> * - | - - - - * - - - | <-- RSTB -94 -> * - | - - - - * - - - | <-- STE -87 -> - - | - - - * - * - * | <-- TG42_IN -10 -> * - | - - - - * - - - | <-- WSTB -88 -> - - | - - - - - - - - | <-- XHR_RDY -LC56 -> * - | - * * * * - - - | <-- CLKZZ -LC85 -> - * | - * - - * * * * | <-- /CONF_X -LC88 -> - * | * * - - * * - * | <-- 10K_CLK -LC91 -> * - | - * * - * * - - | <-- 10K_D0 - - -* = The logic cell or pin is an input to the logic cell (or LAB) through the PIA. -- = The logic cell or pin is not an input to the logic cell (or LAB). - - -Device-Specific Information: f:\sprinter\src\altera\max\sp2_max.rpt -SP2_MAX - -** LOGIC CELL INTERCONNECTIONS ** - -Logic Array Block 'F': - - Logic cells placed in LAB 'F' - +------- LC85 /CONF_X - | +----- LC81 HD_CS - | | +--- LC88 10K_CLK - | | | +- LC91 10K_D0 - | | | | - | | | | Other LABs fed by signals - | | | | that feed LAB 'F' -LC | | | | | A B C D E F G H | Logic cells that feed LAB 'F': -LC85 -> - - - * | - * - - * * * * | <-- /CONF_X -LC88 -> - - - * | * * - - * * - * | <-- 10K_CLK -LC91 -> - - - * | - * * - * * - - | <-- 10K_D0 - -Pin -60 -> - - - * | - - - - - * - - | <-- D0 -89 -> * - - - | - - - - - * * - | <-- EPM_RES -44 -> * - - * | * * - - - * * * | <-- FDD_C0 -45 -> * - - * | * * - - * * * * | <-- FDD_C1 -46 -> * - * * | * * - - - * * * | <-- FDD_C2 -47 -> * - * * | * * - - * * * * | <-- HDD_C0 -42 -> * - - * | * * - - * * * * | <-- HDD_C1 -41 -> * - - * | * * - - * * * * | <-- HDD_C2 -40 -> * - - * | * * - - - * * * | <-- HDD_C3 -90 -> - - - - | - - - - - - * - | <-- PW_GOOD -87 -> - - * - | - - - * - * - * | <-- TG42_IN -57 -> - - * - | - - - - - * - - | <-- WR_CNF -88 -> - - - - | - - - - - - - - | <-- XHR_RDY -LC53 -> * - - - | - - * - - * * - | <-- AUD -LC21 -> - - * * | - - - - - * - - | <-- CNF_OFF -LC109-> * - - - | - - - - - * - - | <-- XHD_RES - - -* = The logic cell or pin is an input to the logic cell (or LAB) through the PIA. -- = The logic cell or pin is not an input to the logic cell (or LAB). - - -Device-Specific Information: f:\sprinter\src\altera\max\sp2_max.rpt -SP2_MAX - -** LOGIC CELL INTERCONNECTIONS ** - -Logic Array Block 'G': - - Logic cells placed in LAB 'G' - +--------------- LC105 CTV0 - | +------------- LC103 CTV1 - | | +----------- LC98 LR_T0 - | | | +--------- LC101 LR_T1 - | | | | +------- LC102 SINC - | | | | | +----- LC104 SINC_H - | | | | | | +--- LC99 SINC_V - | | | | | | | +- LC109 XHD_RES - | | | | | | | | - | | | | | | | | Other LABs fed by signals - | | | | | | | | that feed LAB 'G' -LC | | | | | | | | | A B C D E F G H | Logic cells that feed LAB 'G': -LC105-> * * - - - - - - | - - * - - - * - | <-- CTV0 -LC103-> * * - - - - - - | - - * - - - * - | <-- CTV1 -LC104-> * * - - * - * - | - - * - - - * - | <-- SINC_H -LC99 -> * * - - * - - * | - - * - - - * - | <-- SINC_V - -Pin -89 -> - - - - - - - * | - - - - - * * - | <-- EPM_RES -44 -> - - - - - - * - | * * - - - * * * | <-- FDD_C0 -45 -> - - - - - - * - | * * - - * * * * | <-- FDD_C1 -46 -> - - - - - - * - | * * - - - * * * | <-- FDD_C2 -47 -> - - - - - - * - | * * - - * * * * | <-- HDD_C0 -42 -> - - - - - - * - | * * - - * * * * | <-- HDD_C1 -41 -> - - - - - - * - | * * - - * * * * | <-- HDD_C2 -40 -> - - - - - - * - | * * - - - * * * | <-- HDD_C3 -90 -> - - - - - - - * | - - - - - - * - | <-- PW_GOOD -30 -> - - - * - - - - | - - - - - - * - | <-- SL -29 -> - - * - - - - - | - - - - - - * - | <-- SR -87 -> - - - - - - - - | - - - * - * - * | <-- TG42_IN -12 -> - - * * - - - - | - - - - - - * - | <-- TR43 -9 -> - - * * - - - - | - - - - - - * - | <-- WD -88 -> - - - - - - - - | - - - - - - - - | <-- XHR_RDY -LC53 -> - - - - - * - - | - - * - - * * - | <-- AUD -LC19 -> - - * * - - - - | - * - - - - * - | <-- CLK_WG -LC85 -> - - - - - - * - | - * - - * * * * | <-- /CONF_X -LC45 -> - - - - - * - - | - - * - - - * - | <-- CTH2 -LC35 -> - - - - - * - - | - - * - - - * - | <-- CTH3 -LC37 -> - - - - - * - - | - - * - - - * - | <-- CTH4 -LC38 -> - - - - - - * - | - - * - - - * - | <-- CTV2 -LC36 -> - - - - - - * - | - - * - - - * - | <-- CTV3 -LC34 -> - - - - - - * - | - - * - - - * - | <-- CTV4 -LC47 -> - - - - - - * - | - - * - - - * - | <-- CTV5 -LC48 -> - - - - - - * - | - - * - - - * - | <-- CTV6 -LC44 -> - - - - - - * - | - - * - - - * - | <-- CTV7 -LC41 -> - - - - - * - - | - - * - - - * - | <-- SINC_1 -LC43 -> - - - - - - * - | - - * - - - * - | <-- SINC_2 - - -* = The logic cell or pin is an input to the logic cell (or LAB) through the PIA. -- = The logic cell or pin is not an input to the logic cell (or LAB). - - -Device-Specific Information: f:\sprinter\src\altera\max\sp2_max.rpt -SP2_MAX - -** LOGIC CELL INTERCONNECTIONS ** - -Logic Array Block 'H': - - Logic cells placed in LAB 'H' - +--------------- LC126 BEEP - | +------------- LC128 TG42_OUT - | | +----------- LC115 XHD_RD - | | | +--------- LC113 XHD_WR - | | | | +------- LC120 XHD1_CS1 - | | | | | +----- LC121 XHD1_CS2 - | | | | | | +--- LC123 XHD2_CS1 - | | | | | | | +- LC125 XHD2_CS2 - | | | | | | | | - | | | | | | | | Other LABs fed by signals - | | | | | | | | that feed LAB 'H' -LC | | | | | | | | | A B C D E F G H | Logic cells that feed LAB 'H': - -Pin -89 -> - - - - - - - - | - - - - - * * - | <-- EPM_RES -44 -> - - - - * * * * | * * - - - * * * | <-- FDD_C0 -45 -> - - * * * * * * | * * - - * * * * | <-- FDD_C1 -46 -> - - - - * * * * | * * - - - * * * | <-- FDD_C2 -47 -> - - * * * * * * | * * - - * * * * | <-- HDD_C0 -42 -> - - * * * * * * | * * - - * * * * | <-- HDD_C1 -41 -> - - * * * * * * | * * - - * * * * | <-- HDD_C2 -40 -> - - - - * * * * | * * - - - * * * | <-- HDD_C3 -90 -> - - - - - - - - | - - - - - - * - | <-- PW_GOOD -87 -> - - - - * * * * | - - - * - * - * | <-- TG42_IN -88 -> - - - - - - - - | - - - - - - - - | <-- XHR_RDY -LC85 -> - - * * * * * * | - * - - * * * * | <-- /CONF_X -LC51 -> - * - - - - - - | - - - - - - - * | <-- TG42_BUF -LC88 -> - - * * - - - - | * * - - * * - * | <-- 10K_CLK - - -* = The logic cell or pin is an input to the logic cell (or LAB) through the PIA. -- = The logic cell or pin is not an input to the logic cell (or LAB). - - -Device-Specific Information: f:\sprinter\src\altera\max\sp2_max.rpt -SP2_MAX - -** EQUATIONS ** - -D0 : INPUT; -EPM_RES : INPUT; -FDD_C0 : INPUT; -FDD_C1 : INPUT; -FDD_C2 : INPUT; -HDD_C0 : INPUT; -HDD_C1 : INPUT; -HDD_C2 : INPUT; -HDD_C3 : INPUT; -PW_GOOD : INPUT; -RDAT : INPUT; -RSTB : INPUT; -SINC_IN : INPUT; -SL : INPUT; -SR : INPUT; -STE : INPUT; -TG42_IN : INPUT; -TR43 : INPUT; -UNUSED1 : INPUT; -UNUSED2 : INPUT; -UNUSED5 : INPUT; -UNUSED7 : INPUT; -UNUSED22 : INPUT; -UNUSED24 : INPUT; -UNUSED27 : INPUT; -UNUSED28 : INPUT; -UNUSED33 : INPUT; -UNUSED49 : INPUT; -UNUSED50 : INPUT; -UNUSED53 : INPUT; -UNUSED55 : INPUT; -UNUSED63 : INPUT; -UNUSED65 : INPUT; -UNUSED70 : INPUT; -UNUSED72 : INPUT; -UNUSED77 : INPUT; -UNUSED78 : INPUT; -VGA_IN : INPUT; -WD : INPUT; -WR_CNF : INPUT; -WSTB : INPUT; -XACS : INPUT; -XA0 : INPUT; -XA1 : INPUT; -XA2 : INPUT; -XHR_RDY : INPUT; - --- Node name is 'AUD' = 'CT3' from file "sp2_max.tdf" line 119, column 4 --- Equation name is 'AUD', location is LC053, type is output. - AUD = TFFE( _EQ001, XCT1, VCC, VCC, VCC); - _EQ001 = CT0 & CT1 & CT2; - --- Node name is 'BEEP' --- Equation name is 'BEEP', location is LC126, type is output. - BEEP = LCELL( GND $ GND); - --- Node name is 'CLK_WG' = 'STWG2' from file "sp2_max.tdf" line 133, column 6 --- Equation name is 'CLK_WG', location is LC019, type is output. - CLK_WG = TFFE( _EQ002, _EQ003, VCC, VCC, VCC); - _EQ002 = STWG0 & STWG1; - _EQ003 = _X001 & _X002; - _X001 = EXP(!CLK_WG & !CT_WG); - _X002 = EXP( CLK_WG & CT_WG); - --- Node name is 'CLKZZ' = 'XCT1' from file "sp2_max.tdf" line 113, column 5 --- Equation name is 'CLKZZ', location is LC056, type is bidir. -CLKZZ = TRI(XCT1, CNF_OFF); -XCT1 = TFFE( XCT0, _EQ004, VCC, VCC, VCC); - _EQ004 = _X003 & _X004; - _X003 = EXP(!TG42_IN & XCT1); - _X004 = EXP( TG42_IN & !XCT1); - --- Node name is 'CLK14' = ':183' from file "sp2_max.tdf" line 277, column 11 --- Equation name is 'CLK14', type is output - CLK14 = TFFE( VCC, XCT0, VCC, VCC, VCC); - --- Node name is 'CMOS_AS' = ':219' from file "sp2_max.tdf" line 450, column 13 --- Equation name is 'CMOS_AS', type is output -CMOS_AS = _LC029~NOT; -_LC029~NOT = DFFE( _EQ005 $ GND, 10K_CLK, FDD_C2, VCC, VCC); - _EQ005 = FDD_C0 & !FDD_C1 & !HDD_C0 & HDD_C1 & HDD_C2 & !HDD_C3; - --- Node name is 'CMOS_DRD' = ':220' from file "sp2_max.tdf" line 451, column 13 --- Equation name is 'CMOS_DRD', type is output - CMOS_DRD = DFFE( _EQ006 $ VCC, 10K_CLK, VCC, FDD_C2, VCC); - _EQ006 = !FDD_C0 & FDD_C1 & !HDD_C0 & HDD_C1 & HDD_C2 & HDD_C3; - --- Node name is 'CMOS_DWR' = ':218' from file "sp2_max.tdf" line 449, column 13 --- Equation name is 'CMOS_DWR', type is output - CMOS_DWR = DFFE( _EQ007 $ VCC, 10K_CLK, VCC, FDD_C2, VCC); - _EQ007 = FDD_C0 & !FDD_C1 & !HDD_C0 & HDD_C1 & HDD_C2 & HDD_C3; - --- Node name is 'CNF_OFF' from file "sp2_max.tdf" line 284, column 12 --- Equation name is 'CNF_OFF', location is LC021, type is buried. -CNF_OFF = DFFE( GND $ GND, GND, XACS, /CONF_X, VCC); - --- Node name is 'CTH0' from file "sp2_max.tdf" line 120, column 5 --- Equation name is 'CTH0', location is LC040, type is buried. -CTH0 = TFFE( VCC, !AUD, VCC, VCC, VCC); - --- Node name is 'CTH1' from file "sp2_max.tdf" line 120, column 5 --- Equation name is 'CTH1', location is LC039, type is buried. -CTH1 = TFFE( CTH0, !AUD, VCC, VCC, VCC); - --- Node name is 'CTH2' from file "sp2_max.tdf" line 120, column 5 --- Equation name is 'CTH2', location is LC045, type is buried. -CTH2 = TFFE( _EQ008, !AUD, VCC, VCC, VCC); - _EQ008 = CTH0 & CTH1 & !CTH2 & !SINC_H - # CTH0 & CTH1 & CTH2; - --- Node name is 'CTH3' from file "sp2_max.tdf" line 120, column 5 --- Equation name is 'CTH3', location is LC035, type is buried. -CTH3 = TFFE( _EQ009, !AUD, VCC, VCC, VCC); - _EQ009 = CTH0 & CTH1 & CTH2 & !CTH3 & !SINC_H - # CTH0 & CTH1 & CTH2 & CTH3 - # CTH0 & CTH1 & CTH3 & SINC_H; - --- Node name is 'CTH4' from file "sp2_max.tdf" line 120, column 5 --- Equation name is 'CTH4', location is LC037, type is buried. -CTH4 = TFFE( _EQ010, !AUD, VCC, VCC, VCC); - _EQ010 = CTH0 & CTH1 & CTH2 & CTH3 & !CTH4 & !SINC_H - # CTH0 & CTH1 & CTH2 & CTH3 & CTH4 - # CTH0 & CTH1 & CTH4 & SINC_H; - --- Node name is 'CTV0' from file "sp2_max.tdf" line 121, column 5 --- Equation name is 'CTV0', location is LC105, type is buried. -CTV0 = DFFE( _EQ011 $ GND, SINC_H, VCC, VCC, VCC); - _EQ011 = !CTV0 & _X005; - _X005 = EXP( CTV0 & CTV1 & SINC_V); - --- Node name is 'CTV1' from file "sp2_max.tdf" line 121, column 5 --- Equation name is 'CTV1', location is LC103, type is buried. -CTV1 = DFFE( _EQ012 $ GND, SINC_H, VCC, VCC, VCC); - _EQ012 = !CTV0 & CTV1 & _X005 - # CTV0 & !CTV1 & _X005; - _X005 = EXP( CTV0 & CTV1 & SINC_V); - --- Node name is 'CTV2' from file "sp2_max.tdf" line 121, column 5 --- Equation name is 'CTV2', location is LC038, type is buried. -CTV2 = DFFE( _EQ013 $ GND, SINC_H, VCC, VCC, VCC); - _EQ013 = CTV0 & CTV1 & !CTV2 & _X005 - # !CTV0 & CTV2 & _X005 - # !CTV1 & CTV2 & _X005; - _X005 = EXP( CTV0 & CTV1 & SINC_V); - --- Node name is 'CTV3' from file "sp2_max.tdf" line 121, column 5 --- Equation name is 'CTV3', location is LC036, type is buried. -CTV3 = TFFE( _EQ014, SINC_H, VCC, VCC, VCC); - _EQ014 = CTV0 & CTV1 & CTV2 & !CTV3 & _X005 - # CTV0 & CTV1 & CTV2 & CTV3 - # CTV0 & CTV1 & CTV3 & SINC_V; - _X005 = EXP( CTV0 & CTV1 & SINC_V); - --- Node name is 'CTV4' from file "sp2_max.tdf" line 121, column 5 --- Equation name is 'CTV4', location is LC034, type is buried. -CTV4 = TFFE( _EQ015, SINC_H, VCC, VCC, VCC); - _EQ015 = CTV0 & CTV1 & CTV2 & CTV3 & !CTV4 & _X005 - # CTV0 & CTV1 & CTV2 & CTV3 & CTV4 - # CTV0 & CTV1 & CTV4 & SINC_V; - _X005 = EXP( CTV0 & CTV1 & SINC_V); - --- Node name is 'CTV5' from file "sp2_max.tdf" line 121, column 5 --- Equation name is 'CTV5', location is LC047, type is buried. -CTV5 = TFFE( _EQ016, SINC_H, VCC, VCC, VCC); - _EQ016 = CTV0 & CTV1 & CTV2 & CTV3 & CTV4 & !CTV5 & _X005 - # CTV0 & CTV1 & CTV2 & CTV3 & CTV4 & CTV5 - # CTV0 & CTV1 & CTV5 & SINC_V; - _X005 = EXP( CTV0 & CTV1 & SINC_V); - --- Node name is 'CTV6' from file "sp2_max.tdf" line 121, column 5 --- Equation name is 'CTV6', location is LC048, type is buried. -CTV6 = TFFE( _EQ017, SINC_H, VCC, VCC, VCC); - _EQ017 = CTV0 & CTV1 & CTV2 & CTV3 & CTV4 & CTV5 & !CTV6 & _X005 - # CTV0 & CTV1 & CTV2 & CTV3 & CTV4 & CTV5 & CTV6 - # CTV0 & CTV1 & CTV6 & SINC_V; - _X005 = EXP( CTV0 & CTV1 & SINC_V); - --- Node name is 'CTV7' from file "sp2_max.tdf" line 121, column 5 --- Equation name is 'CTV7', location is LC044, type is buried. -CTV7 = TFFE( _EQ018, SINC_H, VCC, VCC, VCC); - _EQ018 = CTV0 & CTV1 & CTV2 & CTV3 & CTV4 & CTV5 & CTV6 & !CTV7 & - _X005 - # CTV0 & CTV1 & CTV2 & CTV3 & CTV4 & CTV5 & CTV6 & CTV7 - # CTV0 & CTV1 & CTV7 & SINC_V; - _X005 = EXP( CTV0 & CTV1 & SINC_V); - --- Node name is 'CT_WG' from file "sp2_max.tdf" line 294, column 11 --- Equation name is 'CT_WG', location is LC065, type is buried. -CT_WG = TFFE( VCC, _EQ019, VCC, VCC, VCC); - _EQ019 = _X006 & _X007 & _X008; - _X006 = EXP(!CT_WG & !XCT1); - _X007 = EXP( CT_WG & XCT1 & _X009); - _X008 = EXP(!STE & !XCT1 & _X010 & !10K_D0); - _X009 = EXP(!STE & _X010 & !10K_D0); - _X010 = EXP(!RSTB & !WSTB & _X009); - --- Node name is 'CT0' from file "sp2_max.tdf" line 119, column 4 --- Equation name is 'CT0', location is LC023, type is buried. -CT0 = TFFE( VCC, XCT1, VCC, VCC, VCC); - --- Node name is 'CT1' from file "sp2_max.tdf" line 119, column 4 --- Equation name is 'CT1', location is LC020, type is buried. -CT1 = TFFE( CT0, XCT1, VCC, VCC, VCC); - --- Node name is 'CT2' from file "sp2_max.tdf" line 119, column 4 --- Equation name is 'CT2', location is LC058, type is buried. -CT2 = TFFE( _EQ020, XCT1, VCC, VCC, VCC); - _EQ020 = CT0 & CT1; - --- Node name is 'DENS_X' --- Equation name is 'DENS_X', location is LC011, type is output. - DENS_X = LCELL( GND $ VCC); - --- Node name is 'FDAT' = ':195' from file "sp2_max.tdf" line 328, column 9 --- Equation name is 'FDAT', type is output - FDAT = DFFE( _EQ021 $ VCC, _EQ022, VCC, VCC, VCC); - _EQ021 = _LC024 & _X011 & _X012; - _X011 = EXP( RDAT & _X013 & _X014); - _X012 = EXP( _X015 & _X016); - _X013 = EXP( CT0 & !10K_D0); - _X014 = EXP( XCT1 & 10K_D0); - _X015 = EXP(!RDAT & _X013 & _X014); - _X016 = EXP( _X012 & _X017); - _X017 = EXP( RDAT & _X013 & _X014); - _EQ022 = _X018; - _X018 = EXP( _X013 & _X014); - _X013 = EXP( CT0 & !10K_D0); - _X014 = EXP( XCT1 & 10K_D0); - --- Node name is 'HD_CS' --- Equation name is 'HD_CS', location is LC081, type is output. - HD_CS = LCELL( GND $ GND); - --- Node name is 'HD_DIR' = ':223' from file "sp2_max.tdf" line 479, column 27 --- Equation name is 'HD_DIR', type is output - HD_DIR = DFFE( _EQ023 $ VCC, 10K_CLK, VCC, !_EQ024, VCC); - _EQ023 = FDD_C1 & HDD_C0 & !HDD_C1 & HDD_C2; - _EQ024 = _X019; - _X019 = EXP( /CONF_X & HDD_C0); - --- Node name is 'LR_T0' from file "sp2_max.tdf" line 160, column 6 --- Equation name is 'LR_T0', location is LC098, type is buried. -LR_T0 = DFFE( _EQ025 $ WD, CLK_WG, VCC, VCC, VCC); - _EQ025 = SR & TR43 & WD; - --- Node name is 'LR_T1' from file "sp2_max.tdf" line 160, column 6 --- Equation name is 'LR_T1', location is LC101, type is buried. -LR_T1 = DFFE( _EQ026 $ WD, CLK_WG, VCC, VCC, VCC); - _EQ026 = SL & TR43 & WD; - --- Node name is 'QDAT' = 'WGR4' from file "sp2_max.tdf" line 135, column 5 --- Equation name is 'QDAT', location is LC046, type is output. - QDAT = TFFE( _EQ027, _EQ028, VCC, VCC, VCC); - _EQ027 = FDAT & WGR0 & WGR1 & WGR2 & WGR3; - _EQ028 = _X018; - _X018 = EXP( _X013 & _X014); - _X013 = EXP( CT0 & !10K_D0); - _X014 = EXP( XCT1 & 10K_D0); - --- Node name is 'REG_P0' from file "sp2_max.tdf" line 138, column 7 --- Equation name is 'REG_P0', location is LC026, type is buried. -REG_P0 = DFFE( _EQ029 $ LR_T0, !CT_WG, VCC, VCC, VCC); - _EQ029 = !LR_T0 & !LR_T1 & !REG_P0 & _X020 - # LR_T1; - _X020 = EXP(!REG_P0 & !REG_P1); - --- Node name is 'REG_P1' from file "sp2_max.tdf" line 138, column 7 --- Equation name is 'REG_P1', location is LC022, type is buried. -REG_P1 = DFFE( _EQ030 $ LR_T1, !CT_WG, VCC, VCC, VCC); - _EQ030 = !LR_T0 & !LR_T1 & REG_P0 & REG_P1 & _X020 - # !LR_T0 & !LR_T1 & !REG_P0 & !REG_P1 & _X020; - _X020 = EXP(!REG_P0 & !REG_P1); - --- Node name is 'SINC' --- Equation name is 'SINC', location is LC102, type is output. - SINC = LCELL( SINC_V $ SINC_H); - --- Node name is 'SINC_H' = 'SINC_HT' from file "sp2_max.tdf" line 123, column 2 --- Equation name is 'SINC_H', location is LC104, type is output. - SINC_H = DFFE( _EQ031 $ GND, !AUD, VCC, VCC, VCC); - _EQ031 = CTH2 & !CTH3 & CTH4 & SINC_1; - --- Node name is 'SINC_V' = 'SINC_VT' from file "sp2_max.tdf" line 124, column 2 --- Equation name is 'SINC_V', location is LC099, type is output. - SINC_V = DFFE( _EQ032 $ GND, SINC_H, VCC, VCC, VCC); - _EQ032 = CTV2 & !CTV3 & CTV4 & CTV5 & !CTV6 & !CTV7 & SINC_2 & _X021 - # CTV2 & CTV3 & CTV4 & CTV5 & !CTV6 & !CTV7 & SINC_2; - _X021 = EXP( _X022 & _X023); - _X022 = EXP( FDD_C0 & !FDD_C1 & !FDD_C2 & HDD_C0 & !HDD_C1 & !HDD_C2 & - HDD_C3); - _X023 = EXP( /CONF_X & _X021 & _X024); - _X024 = EXP(!FDD_C0 & !FDD_C1 & !FDD_C2 & HDD_C0 & !HDD_C1 & !HDD_C2 & - HDD_C3); - --- Node name is 'SINC_1' = 'CTH5' from file "sp2_max.tdf" line 120, column 5 --- Equation name is 'SINC_1', location is LC041, type is bidir. -SINC_1 = TRI(CTH5, VCC); -CTH5 = TFFE( _EQ033, !AUD, VCC, VCC, VCC); - _EQ033 = CTH0 & CTH1 & CTH2 & CTH3 & CTH4 & !SINC_H & !SINC_1 - # CTH0 & CTH1 & CTH2 & CTH3 & CTH4 & SINC_1 - # CTH0 & CTH1 & SINC_H & SINC_1; - --- Node name is 'SINC_2' = 'CTV8' from file "sp2_max.tdf" line 121, column 5 --- Equation name is 'SINC_2', location is LC043, type is bidir. -SINC_2 = TRI(CTV8, VCC); -CTV8 = DFFE( _EQ034 $ GND, SINC_H, VCC, VCC, VCC); - _EQ034 = CTV0 & CTV1 & CTV2 & CTV3 & CTV4 & CTV5 & CTV6 & CTV7 & - !SINC_2 & _X005 - # SINC_2 & _X005 & _X025; - _X005 = EXP( CTV0 & CTV1 & SINC_V); - _X025 = EXP( CTV0 & CTV1 & CTV2 & CTV3 & CTV4 & CTV5 & CTV6 & CTV7); - --- Node name is 'STWG0' from file "sp2_max.tdf" line 133, column 6 --- Equation name is 'STWG0', location is LC027, type is buried. -STWG0 = TFFE( VCC, _EQ035, VCC, VCC, VCC); - _EQ035 = _X001 & _X002; - _X001 = EXP(!CLK_WG & !CT_WG); - _X002 = EXP( CLK_WG & CT_WG); - --- Node name is 'STWG1' from file "sp2_max.tdf" line 133, column 6 --- Equation name is 'STWG1', location is LC030, type is buried. -STWG1 = TFFE( STWG0, _EQ036, VCC, VCC, VCC); - _EQ036 = _X001 & _X002; - _X001 = EXP(!CLK_WG & !CT_WG); - _X002 = EXP( CLK_WG & CT_WG); - --- Node name is 'TG42_BUF' = ':178' from file "sp2_max.tdf" line 186, column 13 --- Equation name is 'TG42_BUF', type is output - TG42_BUF = LCELL(!TG42_IN $ GND); - --- Node name is 'TG42_OUT' = ':177' from file "sp2_max.tdf" line 183, column 14 --- Equation name is 'TG42_OUT', type is output - TG42_OUT = LCELL( TG42_BUF $ GND); - --- Node name is 'WDAT' = 'REG_P2' from file "sp2_max.tdf" line 138, column 7 --- Equation name is 'WDAT', location is LC008, type is output. - WDAT = DFFE( _EQ037 $ GND, !CT_WG, VCC, VCC, VCC); - _EQ037 = !LR_T0 & !LR_T1 & _X026; - _X026 = EXP( _X027); - _X027 = EXP( REG_P0 & !REG_P1); - --- Node name is 'WGR0' from file "sp2_max.tdf" line 135, column 5 --- Equation name is 'WGR0', location is LC042, type is buried. -WGR0 = TFFE( _EQ038, _EQ039, VCC, VCC, VCC); - _EQ038 = WGR0 & WGR1 & WGR2 & !WGR3 - # !WGR0 & !WGR1 & !WGR2 & WGR3 - # FDAT; - _EQ039 = _X018; - _X018 = EXP( _X013 & _X014); - _X013 = EXP( CT0 & !10K_D0); - _X014 = EXP( XCT1 & 10K_D0); - --- Node name is 'WGR1' from file "sp2_max.tdf" line 135, column 5 --- Equation name is 'WGR1', location is LC033, type is buried. -WGR1 = TFFE( _EQ040, _EQ041, VCC, VCC, VCC); - _EQ040 = FDAT & !WGR0 & !WGR1 & !WGR2 & !WGR3 - # !FDAT & !WGR1 & WGR2 & !WGR3 - # !FDAT & WGR1 & !WGR3 - # FDAT & WGR0; - _EQ041 = _X018; - _X018 = EXP( _X013 & _X014); - _X013 = EXP( CT0 & !10K_D0); - _X014 = EXP( XCT1 & 10K_D0); - --- Node name is 'WGR2' from file "sp2_max.tdf" line 135, column 5 --- Equation name is 'WGR2', location is LC028, type is buried. -WGR2 = TFFE( _EQ042, _EQ043, VCC, VCC, VCC); - _EQ042 = !FDAT & WGR1 & WGR2 & !WGR3 - # FDAT & WGR0 & WGR1 - # !FDAT & !WGR2 & !WGR3; - _EQ043 = _X018; - _X018 = EXP( _X013 & _X014); - _X013 = EXP( CT0 & !10K_D0); - _X014 = EXP( XCT1 & 10K_D0); - --- Node name is 'WGR3' from file "sp2_max.tdf" line 135, column 5 --- Equation name is 'WGR3', location is LC032, type is buried. -WGR3 = TFFE( _EQ044, _EQ045, VCC, VCC, VCC); - _EQ044 = FDAT & WGR0 & WGR1 & WGR2 & WGR3 - # WGR0 & WGR1 & WGR2 & !WGR3 - # !FDAT & WGR1 & WGR2 & !WGR3; - _EQ045 = _X018; - _X018 = EXP( _X013 & _X014); - _X013 = EXP( CT0 & !10K_D0); - _X014 = EXP( XCT1 & 10K_D0); - --- Node name is 'WR_PDOS' = ':215' from file "sp2_max.tdf" line 445, column 13 --- Equation name is 'WR_PDOS', type is output - WR_PDOS = DFFE( _EQ046 $ VCC, 10K_CLK, VCC, FDD_C2, VCC); - _EQ046 = FDD_C0 & !FDD_C1 & !HDD_C0 & !HDD_C1 & !HDD_C2 & !HDD_C3; - --- Node name is 'XCT0' from file "sp2_max.tdf" line 113, column 5 --- Equation name is 'XCT0', location is LC049, type is buried. -XCT0 = TFFE( VCC, _EQ047, VCC, VCC, VCC); - _EQ047 = _X003 & _X004; - _X003 = EXP(!TG42_IN & XCT1); - _X004 = EXP( TG42_IN & !XCT1); - --- Node name is 'XHD_RD' = '~223~1' from file "sp2_max.tdf" line 479, column 27 --- Equation name is 'XHD_RD', location is LC115, type is output. - XHD_RD = DFFE( _EQ023 $ VCC, 10K_CLK, VCC, !_EQ024, VCC); - --- Node name is 'XHD_RES' = ':221' from file "sp2_max.tdf" line 466, column 27 --- Equation name is 'XHD_RES', type is output - XHD_RES = DFFE( PW_GOOD $ GND, SINC_V, EPM_RES, VCC, VCC); - --- Node name is 'XHD_WR' = ':222' from file "sp2_max.tdf" line 478, column 27 --- Equation name is 'XHD_WR', type is output - XHD_WR = DFFE( _EQ048 $ VCC, 10K_CLK, VCC, !_EQ049, VCC); - _EQ048 = !FDD_C1 & HDD_C0 & !HDD_C1 & HDD_C2; - _EQ049 = _X019; - _X019 = EXP( /CONF_X & HDD_C0); - --- Node name is 'XHD1_CS1' = ':224' from file "sp2_max.tdf" line 489, column 20 --- Equation name is 'XHD1_CS1', type is output - XHD1_CS1 = DFFE( _EQ050 $ VCC, TG42_IN, VCC, /CONF_X, VCC); - _EQ050 = /CONF_X & !HDD_C1 & HDD_C2 & !HDD_C3 & _X028 & _X029 & _X030 & - _X031; - _X028 = EXP( /CONF_X & _X029 & _X030 & _X032 & _X033); - _X029 = EXP( FDD_C0 & !FDD_C1 & !FDD_C2 & HDD_C0 & HDD_C1 & !HDD_C2 & - HDD_C3); - _X030 = EXP( _X028 & _X031 & _X032 & _X033); - _X031 = EXP( FDD_C0 & !FDD_C1 & !FDD_C2 & HDD_C0 & HDD_C1 & !HDD_C2 & - !HDD_C3); - _X032 = EXP( /CONF_X & _X028 & _X029 & _X030 & _X031); - _X033 = EXP(!FDD_C0 & !FDD_C1 & !FDD_C2 & HDD_C0 & HDD_C1 & !HDD_C2 & - !HDD_C3); - --- Node name is 'XHD1_CS2' = ':225' from file "sp2_max.tdf" line 490, column 20 --- Equation name is 'XHD1_CS2', type is output - XHD1_CS2 = DFFE( _EQ051 $ VCC, TG42_IN, VCC, /CONF_X, VCC); - _EQ051 = /CONF_X & !HDD_C1 & HDD_C2 & HDD_C3 & _X028 & _X029 & _X030 & - _X031; - _X028 = EXP( /CONF_X & _X029 & _X030 & _X032 & _X033); - _X029 = EXP( FDD_C0 & !FDD_C1 & !FDD_C2 & HDD_C0 & HDD_C1 & !HDD_C2 & - HDD_C3); - _X030 = EXP( _X028 & _X031 & _X032 & _X033); - _X031 = EXP( FDD_C0 & !FDD_C1 & !FDD_C2 & HDD_C0 & HDD_C1 & !HDD_C2 & - !HDD_C3); - _X032 = EXP( /CONF_X & _X028 & _X029 & _X030 & _X031); - _X033 = EXP(!FDD_C0 & !FDD_C1 & !FDD_C2 & HDD_C0 & HDD_C1 & !HDD_C2 & - !HDD_C3); - --- Node name is 'XHD2_CS1' = ':226' from file "sp2_max.tdf" line 494, column 20 --- Equation name is 'XHD2_CS1', type is output - XHD2_CS1 = DFFE( _EQ052 $ VCC, TG42_IN, VCC, /CONF_X, VCC); - _EQ052 = /CONF_X & !HDD_C1 & HDD_C2 & !HDD_C3 & _X029 & _X030 & _X032 & - _X033; - _X029 = EXP( FDD_C0 & !FDD_C1 & !FDD_C2 & HDD_C0 & HDD_C1 & !HDD_C2 & - HDD_C3); - _X030 = EXP( _X028 & _X031 & _X032 & _X033); - _X032 = EXP( /CONF_X & _X028 & _X029 & _X030 & _X031); - _X033 = EXP(!FDD_C0 & !FDD_C1 & !FDD_C2 & HDD_C0 & HDD_C1 & !HDD_C2 & - !HDD_C3); - _X028 = EXP( /CONF_X & _X029 & _X030 & _X032 & _X033); - _X031 = EXP( FDD_C0 & !FDD_C1 & !FDD_C2 & HDD_C0 & HDD_C1 & !HDD_C2 & - !HDD_C3); - --- Node name is 'XHD2_CS2' = ':227' from file "sp2_max.tdf" line 495, column 20 --- Equation name is 'XHD2_CS2', type is output - XHD2_CS2 = DFFE( _EQ053 $ VCC, TG42_IN, VCC, /CONF_X, VCC); - _EQ053 = /CONF_X & !HDD_C1 & HDD_C2 & HDD_C3 & _X029 & _X030 & _X032 & - _X033; - _X029 = EXP( FDD_C0 & !FDD_C1 & !FDD_C2 & HDD_C0 & HDD_C1 & !HDD_C2 & - HDD_C3); - _X030 = EXP( _X028 & _X031 & _X032 & _X033); - _X032 = EXP( /CONF_X & _X028 & _X029 & _X030 & _X031); - _X033 = EXP(!FDD_C0 & !FDD_C1 & !FDD_C2 & HDD_C0 & HDD_C1 & !HDD_C2 & - !HDD_C3); - _X028 = EXP( /CONF_X & _X029 & _X030 & _X032 & _X033); - _X031 = EXP( FDD_C0 & !FDD_C1 & !FDD_C2 & HDD_C0 & HDD_C1 & !HDD_C2 & - !HDD_C3); - --- Node name is '10K_CLK' = ':199' from file "sp2_max.tdf" line 341, column 13 --- Equation name is '10K_CLK', type is output - 10K_CLK = DFFE( _EQ054 $ !CNF_OFF, TG42_IN, VCC, VCC, VCC); - _EQ054 = !CNF_OFF & !FDD_C2 & !HDD_C0 - # CNF_OFF & WR_CNF; - --- Node name is '10K_D0' = ':200' from file "sp2_max.tdf" line 343, column 12 --- Equation name is '10K_D0', type is output - 10K_D0 = DFFE( _EQ055 $ GND, 10K_CLK, !_EQ056, !_EQ057, VCC); - _EQ055 = CNF_OFF & D0 - # !CNF_OFF & 10K_D0; - _EQ056 = !FDD_C0 & !FDD_C1 & !FDD_C2 & HDD_C0 & !HDD_C1 & !HDD_C2 & - !HDD_C3; - _EQ057 = _X034; - _X034 = EXP( /CONF_X & _X035); - _X035 = EXP( FDD_C0 & !FDD_C1 & !FDD_C2 & HDD_C0 & !HDD_C1 & !HDD_C2 & - !HDD_C3); - --- Node name is '/CONF_X' = '/RESET' from file "sp2_max.tdf" line 173, column 12 --- Equation name is '/CONF_X', location is LC085, type is bidir. -/CONF_X = OPNDRN(/RESET); -/RESET = DFFE( _EQ058 $ GND, !AUD, !_EQ059, VCC, VCC); - _EQ058 = EPM_RES & XHD_RES; - _EQ059 = !FDD_C0 & !FDD_C1 & !FDD_C2 & HDD_C0 & HDD_C1 & !HDD_C2 & - HDD_C3; - --- Node name is '/WG_RD' = ':217' from file "sp2_max.tdf" line 447, column 12 --- Equation name is '/WG_RD', type is output - /WG_RD = DFFE( _EQ060 $ VCC, 10K_CLK, VCC, FDD_C2, VCC); - _EQ060 = !FDD_C0 & FDD_C1 & !HDD_C0 & !HDD_C1 & !HDD_C2 & !HDD_C3; - --- Node name is '/WG_WR' = ':216' from file "sp2_max.tdf" line 446, column 12 --- Equation name is '/WG_WR', type is output - /WG_WR = DFFE( _EQ061 $ VCC, 10K_CLK, VCC, FDD_C2, VCC); - _EQ061 = !FDD_C0 & !FDD_C1 & !HDD_C0 & !HDD_C1 & !HDD_C2 & !HDD_C3; - --- Node name is ':197' from file "sp2_max.tdf" line 328, column 28 --- Equation name is '_LC024', type is buried -_LC024 = DFFE( _EQ062 $ GND, _EQ063, VCC, VCC, VCC); - _EQ062 = _X016; - _X016 = EXP( _X012 & _X017); - _X012 = EXP( _X015 & _X016); - _X017 = EXP( RDAT & _X013 & _X014); - _X015 = EXP(!RDAT & _X013 & _X014); - _X013 = EXP( CT0 & !10K_D0); - _X014 = EXP( XCT1 & 10K_D0); - _EQ063 = _X018; - _X018 = EXP( _X013 & _X014); - _X013 = EXP( CT0 & !10K_D0); - _X014 = EXP( XCT1 & 10K_D0); - - - --- Shareable expanders that are duplicated in multiple LABs: --- _X005 occurs in LABs C, G --- _X013 occurs in LABs B, C --- _X014 occurs in LABs B, C --- _X018 occurs in LABs B, C --- _X019 occurs in LABs E, H - - - - -Project Information f:\sprinter\src\altera\max\sp2_max.rpt - -** TIMING ASSIGNMENTS ** - - -INFORMATION: One or more paths have been found between register controlled by different clocks--can't calculate fmax for those paths - - User Actual -Type Location Assignment Value Status Critical Path - -fmax 100.00 MHz 43.47 MHz Failed RSTB to register STWG2.Q to register STWG0.Q -fmax 100.00 MHz 43.47 MHz Failed STE to register STWG2.Q to register STWG0.Q -fmax 100.00 MHz 27.02 MHz Failed TG42_IN to register SINC_HT.Q to register /RESET.Q -fmax 100.00 MHz 43.47 MHz Failed WSTB to register STWG2.Q to register STWG0.Q - - -Project Information f:\sprinter\src\altera\max\sp2_max.rpt - -** COMPILATION SETTINGS & TIMES ** - -Processing Menu Commands ------------------------- - -Design Doctor = off - -Logic Synthesis: - - Synthesis Type Used = Standard - - Default Synthesis Style = NORMAL - - Logic option settings in 'NORMAL' style for 'MAX7000S' family - - DECOMPOSE_GATES = on - DUPLICATE_LOGIC_EXTRACTION = on - MINIMIZATION = full - MULTI_LEVEL_FACTORING = on - NOT_GATE_PUSH_BACK = on - PARALLEL_EXPANDERS = off - REDUCE_LOGIC = on - REFACTORIZATION = on - REGISTER_OPTIMIZATION = on - RESYNTHESIZE_NETWORK = on - SLOW_SLEW_RATE = off - SOFT_BUFFER_INSERTION = on - SUBFACTOR_EXTRACTION = on - TURBO_BIT = on - XOR_SYNTHESIS = on - IGNORE_SOFT_BUFFERS = off - USE_LPM_FOR_AHDL_OPERATORS = off - - Other logic synthesis settings: - - Automatic Global Clock = off - Automatic Global Clear = off - Automatic Global Preset = on - Automatic Global Output Enable = on - Automatic Fast I/O = off - Automatic Register Packing = off - Automatic Open-Drain Pins = on - Automatic Implement in EAB = off - One-Hot State Machine Encoding = off - Optimize = 5 - -Default Timing Specifications: - - fmax = 100MHz - -Cut All Bidir Feedback Timing Paths = on -Cut All Clear & Preset Timing Paths = on - -Ignore Timing Assignments = off - -Functional SNF Extractor = off - -Linked SNF Extractor = off -Timing SNF Extractor = on -Optimize Timing SNF = off -Generate AHDL TDO File = off -Fitter Settings = ADVANCED -Smart Recompile = off -Total Recompile = off - -Interfaces Menu Commands ------------------------- - -EDIF Netlist Writer = off -Verilog Netlist Writer = off -VHDL Netlist Writer = off - -Compilation Times ------------------ - - Compiler Netlist Extractor 00:00:00 - Database Builder 00:00:00 - Logic Synthesizer 00:00:00 - Partitioner 00:00:00 - Fitter 00:00:00 - Timing SNF Extractor 00:00:01 - Assembler 00:00:00 - -------------------------- -------- - Total Time 00:00:01 - - -Memory Allocated ------------------ - -Peak memory allocated during compilation = 3,543K diff --git a/src/altera/quartus/acex/ACCELER.ACF b/src/altera/quartus/acex/ACCELER.ACF deleted file mode 100644 index 5480845..0000000 --- a/src/altera/quartus/acex/ACCELER.ACF +++ /dev/null @@ -1,568 +0,0 @@ --- --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. --- -CHIP acceler -BEGIN - DEVICE = EP1K30QC208-3; -END; - -DEFAULT_DEVICES -BEGIN - AUTO_DEVICE = EP1K100FC484-1; - AUTO_DEVICE = EP1K100FC256-1; - AUTO_DEVICE = EP1K100QC208-1; - AUTO_DEVICE = EP1K50FC484-1; - AUTO_DEVICE = EP1K50FC256-1; - AUTO_DEVICE = EP1K50QC208-1; - AUTO_DEVICE = EP1K50TC144-1; - AUTO_DEVICE = EP1K30FC256-1; - AUTO_DEVICE = EP1K30QC208-1; - AUTO_DEVICE = EP1K30TC144-1; - ASK_BEFORE_ADDING_EXTRA_DEVICES = ON; -END; - -TIMING_POINT -BEGIN - DEVICE_FOR_TIMING_SYNTHESIS = EP1K30QC208-3; - FREQUENCY = 200MHz; - MAINTAIN_STABLE_SYNTHESIS = OFF; - CUT_ALL_CLEAR_PRESET = ON; - CUT_ALL_BIDIR = ON; -END; - -IGNORED_ASSIGNMENTS -BEGIN - FIT_IGNORE_TIMING = OFF; - DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF; - IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF; - IGNORE_DEVICE_ASSIGNMENTS = OFF; - IGNORE_LC_ASSIGNMENTS = OFF; - IGNORE_PIN_ASSIGNMENTS = OFF; - IGNORE_CHIP_ASSIGNMENTS = OFF; - IGNORE_TIMING_ASSIGNMENTS = OFF; - IGNORE_LOGIC_OPTION_ASSIGNMENTS = OFF; - IGNORE_CLIQUE_ASSIGNMENTS = OFF; -END; - -GLOBAL_PROJECT_DEVICE_OPTIONS -BEGIN - MAX7000B_ENABLE_VREFB = OFF; - MAX7000B_ENABLE_VREFA = OFF; - MAX7000B_VCCIO_IOBANK2 = 3.3V; - MAX7000B_VCCIO_IOBANK1 = 3.3V; - CONFIG_EPROM_PULLUP_RESISTOR = ON; - CONFIG_EPROM_USER_CODE = FFFFFFFF; - FLEX_CONFIGURATION_EPROM = AUTO; - MAX7000AE_ENABLE_JTAG = ON; - MAX7000AE_USER_CODE = FFFFFFFF; - FLEX6000_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX10KA_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = ON; - FLEX10K_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX6000_ENABLE_JTAG = OFF; - CONFIG_SCHEME_FLEX_6000 = PASSIVE_SERIAL; - MULTIVOLT_IO = OFF; - MAX7000S_ENABLE_JTAG = ON; - FLEX10K_ENABLE_LOCK_OUTPUT = OFF; - MAX7000S_USER_CODE = FFFF; - CONFIG_SCHEME_10K = PASSIVE_SERIAL; - FLEX10K_JTAG_USER_CODE = 7F; - ENABLE_INIT_DONE_OUTPUT = OFF; - ENABLE_CHIP_WIDE_OE = OFF; - ENABLE_CHIP_WIDE_RESET = OFF; - nCEO = UNRESERVED; - CLKUSR = UNRESERVED; - ADD17 = UNRESERVED; - ADD16 = UNRESERVED; - ADD15 = UNRESERVED; - ADD14 = UNRESERVED; - ADD13 = UNRESERVED; - ADD0_TO_ADD12 = UNRESERVED; - SDOUT = RESERVED_DRIVES_OUT; - RDCLK = UNRESERVED; - RDYnBUSY = UNRESERVED; - nWS_nRS_nCS_CS = UNRESERVED; - DATA1_TO_DATA7 = UNRESERVED; - DATA0 = RESERVED_TRI_STATED; - FLEX8000_ENABLE_JTAG = OFF; - CONFIG_SCHEME = ACTIVE_SERIAL; - DISABLE_TIME_OUT = OFF; - ENABLE_DCLK_OUTPUT = OFF; - RELEASE_CLEARS = OFF; - AUTO_RESTART = OFF; - USER_CLOCK = OFF; - SECURITY_BIT = OFF; - RESERVED_PINS_PERCENT = 0; - RESERVED_LCELLS_PERCENT = 0; -END; - -GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS -BEGIN - STYLE = FAST; - DEVICE_FAMILY = ACEX1K; - MULTI_LEVEL_SYNTHESIS_MAX9000 = ON; - AUTO_IMPLEMENT_IN_EAB = OFF; - AUTO_OPEN_DRAIN_PINS = ON; - ONE_HOT_STATE_MACHINE_ENCODING = OFF; - AUTO_REGISTER_PACKING = OFF; - AUTO_FAST_IO = OFF; - AUTO_GLOBAL_OE = ON; - AUTO_GLOBAL_PRESET = ON; - AUTO_GLOBAL_CLEAR = ON; - AUTO_GLOBAL_CLOCK = ON; - MULTI_LEVEL_SYNTHESIS_MAX5000_7000 = OFF; - OPTIMIZE_FOR_SPEED = 5; -END; - -COMPILER_PROCESSING_CONFIGURATION -BEGIN - USE_QUARTUS_FITTER = ON; - PRESERVE_ALL_NODE_NAME_SYNONYMS = OFF; - FITTER_SETTINGS = NORMAL; - SMART_RECOMPILE = OFF; - GENERATE_AHDL_TDO_FILE = OFF; - RPT_FILE_USER_ASSIGNMENTS = ON; - RPT_FILE_LCELL_INTERCONNECT = ON; - RPT_FILE_HIERARCHY = ON; - RPT_FILE_EQUATIONS = ON; - LINKED_SNF_EXTRACTOR = OFF; - OPTIMIZE_TIMING_SNF = OFF; - TIMING_SNF_EXTRACTOR = ON; - FUNCTIONAL_SNF_EXTRACTOR = OFF; - DESIGN_DOCTOR_RULES = EPLD; - DESIGN_DOCTOR = OFF; -END; - -COMPILER_INTERFACES_CONFIGURATION -BEGIN - NETLIST_OUTPUT_TIME_SCALE = 0.1ns; - EDIF_INPUT_SHOW_LMF_MAPPING_MESSAGES = OFF; - EDIF_BUS_DELIMITERS = []; - EDIF_FLATTEN_BUS = OFF; - EDIF_OUTPUT_FORCE_0NS_DELAYS = OFF; - EDIF_OUTPUT_INCLUDE_SPECIAL_PRIM = OFF; - EDIF_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - EDIF_OUTPUT_DELAY_CONSTRUCTS = EDO_FILE; - EDIF_OUTPUT_USE_EDC = OFF; - EDIF_INPUT_USE_LMF2 = OFF; - EDIF_INPUT_USE_LMF1 = OFF; - EDIF_OUTPUT_GND = GND; - EDIF_OUTPUT_VCC = VCC; - EDIF_INPUT_GND = GND; - EDIF_INPUT_VCC = VCC; - EDIF_OUTPUT_EDC_FILE = *.edc; - EDIF_INPUT_LMF2 = *.lmf; - EDIF_INPUT_LMF1 = *.lmf; - VHDL_GENERATE_CONFIGURATION_DECLARATION = OFF; - VHDL_OUTPUT_DELAY_CONSTRUCTS = VHO_FILE; - VERILOG_OUTPUT_DELAY_CONSTRUCTS = VO_FILE; - VHDL_FLATTEN_BUS = OFF; - VERILOG_FLATTEN_BUS = OFF; - EDIF_TRUNCATE_HIERARCHY_PATH = OFF; - VHDL_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - VHDL_WRITER_VERSION = VHDL87; - VHDL_READER_VERSION = VHDL87; - SYNOPSYS_MAPPING_EFFORT = MEDIUM; - SYNOPSYS_BOUNDARY_OPTIMIZATION = OFF; - SYNOPSYS_HIERARCHICAL_COMPILATION = ON; - SYNOPSYS_DESIGNWARE = OFF; - SYNOPSYS_COMPILER = DESIGN; - USE_SYNOPSYS_SYNTHESIS = OFF; - VHDL_NETLIST_WRITER = OFF; - VERILOG_NETLIST_WRITER = OFF; - XNF_GENERATE_AHDL_TDX_FILE = ON; - XNF_TRANSLATE_INTERNAL_NODE_NAMES = ON; - XNF_EMULATE_TRI_STATE_BUSES = INTERNAL_LOGIC; - EDIF_OUTPUT_VERSION = 200; - EDIF_NETLIST_WRITER = OFF; -END; - -CUSTOM_DESIGN_DOCTOR_RULES -BEGIN - MASTER_RESET = OFF; - EXPANDER_NETWORKS = ON; - RACE_CONDITIONS = ON; - DELAY_CHAINS = ON; - ASYNCHRONOUS_INPUTS = ON; - PRESET_CLEAR_NETWORKS = ON; - STATIC_HAZARDS_AFTER_SYNTHESIS = OFF; - STATIC_HAZARDS_BEFORE_SYNTHESIS = ON; - MULTI_CLOCK_NETWORKS = ON; - MULTI_LEVEL_CLOCKS = ON; - GATED_CLOCKS = ON; - RIPPLE_CLOCKS = ON; -END; - -SIMULATOR_CONFIGURATION -BEGIN - END_TIME = 5.0us; - BIDIR_PIN = STRONG; - START_TIME = 0.0ns; - GLITCH_TIME = 0.0ns; - GLITCH = OFF; - OSCILLATION_TIME = 0.0ns; - OSCILLATION = OFF; - CHECK_OUTPUTS = OFF; - SETUP_HOLD = OFF; - USE_DEVICE = OFF; -END; - -TIMING_ANALYZER_CONFIGURATION -BEGIN - ANALYSIS_MODE = REGISTERED_PERFORMANCE; - CUT_OFF_RAM_REGISTERED_WE_PATHS = OFF; - LIST_PATH_FREQUENCY = 10MHz; - LIST_PATH_COUNT = 10; - REGISTERED_PERFORMANCE_OPTIONS = NUMBER_OF_PATHS; - INCLUDE_PATHS_LESS_THAN_VALUE = 214.7483647ms; - INCLUDE_PATHS_LESS_THAN = OFF; - INCLUDE_PATHS_GREATER_THAN_VALUE = 0.0ns; - INCLUDE_PATHS_GREATER_THAN = OFF; - DELAY_MATRIX_OPTIONS = SHOW_ALL_PATHS; - CELL_WIDTH = 18; - LIST_ONLY_LONGEST_PATH = ON; - CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; - CUT_OFF_IO_PIN_FEEDBACK = ON; - AUTO_RECALCULATE = OFF; -END; - -OTHER_CONFIGURATION -BEGIN - LAST_MAXPLUS2_VERSION = 10.0; - ROW_PINS_LCELL_INSERT = ON; - CARRY_OUT_PINS_LCELL_INSERT = OFF; - NORMAL_LCELL_INSERT = ON; - EXPLICIT_FAMILY = 1; - FLEX_10K_52_COLUMNS = 40; - DEFAULT_9K_EXP_PER_LCELL = 1/2; - LOCAL_INTERCONNECT_PER_LAB_PERCENT = 100; - LCELLS_PER_ROW_PERCENT = 100; - FAN_IN_PER_LCELL_PERCENT = 100; - EXP_PER_LCELL_PERCENT = 100; - ROW_PINS_PERCENT = 50; - ORIGINAL_MAXPLUS2_VERSION = 9.6; - COMPILER_DATA = "1,1,0,1,0,0,0,1,1,1,1,0,1,1,1"; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = ON; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.FLEX8000 -BEGIN - CARRY_CHAIN_LENGTH = 32; - CASCADE_CHAIN_LENGTH = 2; - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = AUTO; - CASCADE_CHAIN = AUTO; - MINIMIZATION = FULL; - IGNORE_SOFT_BUFFERS = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = MANUAL; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = MANUAL; -END; - diff --git a/src/altera/quartus/acex/ACCELER.INC b/src/altera/quartus/acex/ACCELER.INC deleted file mode 100644 index 8610479..0000000 --- a/src/altera/quartus/acex/ACCELER.INC +++ /dev/null @@ -1,26 +0,0 @@ --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. - --- MAX+plus II Include File --- Version 10.0 9/14/2000 --- Created: Fri Jan 25 12:59:19 2002 - -FUNCTION acceler (clk42, /reset, ct[2..0], ras, cas, clk_z80, mc_end, mc_begin, mc_type, mc_write, ai[15..0], di[7..0], /io, /rd, /wr, /mr, /rf, /m1, /iom, dcp[7..0], mdi[15..0], acc_ena, hddr[7..0], hdd_flip) - RETURNS (continue, ao[15..0], do[7..0], mdo[15..0], md[7..0], g_line[7..0], glisser, acc_on, double_cas, acc_dir[7..0]); diff --git a/src/altera/quartus/acex/ACCELER.TDF b/src/altera/quartus/acex/ACCELER.TDF deleted file mode 100644 index 45ccc00..0000000 --- a/src/altera/quartus/acex/ACCELER.TDF +++ /dev/null @@ -1,374 +0,0 @@ - - TITLE "ACCELERATOR"; - -INCLUDE "lpm_ram_dp"; - -SUBDESIGN acceler - ( - CLK42 : INPUT; - /RESET : INPUT; - CT[2..0] : INPUT; - - RAS : INPUT; - CAS : INPUT; - CLK_Z80 : INPUT; - - CONTINUE : OUTPUT; - - MC_END : INPUT; - MC_BEGIN : INPUT; - MC_TYPE : INPUT; - MC_WRITE : INPUT; --- MCA[1..0] : INPUT; - - AI[15..0] : INPUT; - DI[7..0] : INPUT; - - AO[15..0] : OUTPUT; - DO[7..0] : OUTPUT; - - /IO : INPUT; - /RD : INPUT; - /WR : INPUT; - /MR : INPUT; - /RF : INPUT; - /M1 : INPUT; - /IOM : INPUT; - - DCP[7..0] : INPUT; - - MDI[15..0] : INPUT; - MDO[15..0] : OUTPUT; - MD[7..0] : OUTPUT; - - G_LINE[7..0]: OUTPUT; - - GLISSER : OUTPUT; - - ACC_ON : OUTPUT; - - ACC_ENA : INPUT; - - DOUBLE_CAS : OUTPUT; - - HDDR[7..0] : INPUT; - HDD_FLIP : INPUT; - - ACC_DIR[7..0] : OUTPUT; - - ) -VARIABLE - - RAM : LPM_RAM_DP WITH (LPM_WIDTH=16,LPM_WIDTHAD=8); - - DO[7..0] : DFFE; - MDO[15..0] : DFFE; - - PRF_CMD : DFFE; - ED_CMD : DFFE; - CB_CMD : DFFE; - ID_CMD : DFFE; - IN_OUT_CMD : DFFE; - - CORRECT_1F : NODE; - - ACC_BLK : DFF; - - RETI : DFFE; - RETN : DFFE; - - AA[15..0] : DFFE; - - RGACC[7..0] : DFFE; - AGR[7..0] : DFFE; - ACC_CNT[7..0] : DFFE; - - START_ACC : NODE; - ACC_END : DFFE; - FN_ACC[2..0]: DFFE; - ACC_MODE[3..0] : DFFE; - - MD[7..0] : LCELL; - XMD[7..0] : DFF; - XMDH[7..0] : DFF; - - ACC_DIR[7..0] : LCELL; - - /M1M : NODE; - - ACC_GO : NODE; - ACC_GO_1 : NODE; - - RAM_WR : NODE; - - STATE_EI : DFFE; - --- HDDR[7..0] : DFFE; - - XAGR[7..0] : DFFE; - AAGR[9..0] : DFFE; - XCNT[7..0] : DFFE; - ALT_ACC : NODE; - - RAM_ADR[7..0] : NODE; - ACC_C : NODE; - WR_C7 : NODE; - - XCNT_AGR[15..0] : NODE; - - MDOX[7..0] : DFF; - MDOY[7..0] : DFF; - - GLISS_R : DFF; - - ACC_TIME : NODE; - -BEGIN - - ACC_ON = ACC_DIR0; - - /M1M = DFF(!/M1,CLK_Z80,/RESET,); - - PRF_CMD.clk = /MR; - PRF_CMD.ena = /M1M; - PRF_CMD.d = (DI[] == B"11XX1XX1") & - ((DI[] == B"XX00X01X") or -- CB - (DI[] == B"XX01X10X") or -- DD - (DI[] == B"XX10X10X") or -- ED - (DI[] == B"XX11X10X")); -- FD - --- === interrupt === 0 - disable; 1 - enable - - STATE_EI.clk = /MR; - STATE_EI.ena = /M1M & !PRF_CMD & (DI[] == B"1111X011"); - STATE_EI.d = DI3; - --- RETI comand - - ED_CMD.clk = /MR; - ED_CMD.ena = /M1M; - ED_CMD.d = (DI[] == H"ED"); - - RETI.clk = /MR; - RETI.ena = /M1M; - RETI.d = ED_CMD & (DI[] == H"4D"); - --- "1" on the RETI triger is the end of interupt sycle. - - RETN.clk = /MR; - RETN.ena = /M1M; - RETN.d = ED_CMD & (DI[] == H"45"); - --- The end of NMI sycle. - - ACC_BLK.clk = /M1; - ACC_BLK.d = DFF(((/IO & ACC_BLK) or (!ACC_BLK & RETI)),CLK_Z80,,); - ACC_BLK.prn = /RESET & ACC_MODE3; - - CB_CMD.clk = /MR; - ID_CMD.clk = /MR; - CB_CMD.ena = /M1M; - ID_CMD.ena = /M1M; - - CB_CMD.d = (DI[] == H"CB"); - ID_CMD.d = (DI[] == B"11X11101"); - - IN_OUT_CMD.clk = /MR; - IN_OUT_CMD.ena = /M1M; - IN_OUT_CMD.d = (DI[] == B"1101X011") & !PRF_CMD; -- D3/DB - IN_OUT_CMD.clrn = /IO; - - CORRECT_1F = LCELL(IN_OUT_CMD & (DO[] == H"1F") & !/MR & !/RD); - DO[4..3].clrn = !CORRECT_1F; - - ACC_GO = DFFE((CAS or START_ACC),CLK42,,(!/MR & /M1),CT1); - ACC_GO_1 = DFF(ACC_GO,CLK42,,); - --- == accelerator number == - - RGACC[].clk = /MR; - RGACC[].ena = DFF((/M1 & /RF & ACC_DIR3),CLK_Z80,,); - RGACC[].d = DI[]; - --- == accelerator grafic line == - - AGR[].clk = CLK42; - AGR[].ena = !DFF((/IOM or /WR or !DFF((DCP[] == B"1100X100"),CLK42,,)),CLK42,,) or - !(!ACC_DIR4 or ACC_GO or !ACC_GO_1); - - CASE DFF(START_ACC,CLK42,,) IS - WHEN 0 => AGR[].d = AGR[] + 1; - WHEN 1 => AGR[].d = DI[]; - END CASE; - - AGR[].clrn = /RESET; - - G_LINE[] = AGR[]; - --- == accelerator counter == - - ACC_C = (!ACC_GO & DFF(((CT0 & !/RD) or (CT1 & !/WR)),CLK42,,)); - ACC_CNT[].clk = CLK42; --- ACC_CNT[].ena = START_ACC or (ACC_C & ACC_DIR2); - ACC_CNT[].ena = LCELL(START_ACC or (ACC_C & ACC_DIR2)); - - CASE DFF(START_ACC,CLK42,,) IS - WHEN 1 => ACC_CNT[].d = RGACC[]; - WHEN 0 => ACC_CNT[].d = ACC_CNT[] - 1; - END CASE; - - WR_C7 = DFF((/IOM or DFF(!/IOM,CLK42,,) or /WR or DFF(!(DCP[] == B"1100X111"),CLK42,,)),CLK42,,); - ALT_ACC = DFF(VCC,WR_C7,/RESET,); - - (AAGR[].ena,XCNT[].ena,XAGR[].ena) = LCELL(!WR_C7 or (ACC_DIR1 & ACC_C)); - (AAGR[].clk,XCNT[].clk,XAGR[].clk) = CLK42; - - XCNT_AGR[15..0] = (XCNT[],XAGR[]) + (B"000000",AAGR[]); - - CASE !DFF(START_ACC,CLK42,,) IS - WHEN 1 => AAGR[].d = AAGR[]; - (XCNT[].d,XAGR[].d) = XCNT_AGR[15..0]; - WHEN 0 => AAGR[].d = (AI9,AI8,DI[]); - (XCNT[].d,XAGR[].d) = (B"00",AI[15..10],B"00000000"); - END CASE; - --- == accelerator dir == - - START_ACC = LCELL(LCELL(/MR or !/M1 or !/RF or !ACC_BLK) or (!ACC_DIR0 or MC_TYPE)); - - DOUBLE_CAS= LCELL(ACC_DIR6 & !START_ACC); - - ACC_END.clk = CLK42; - ACC_END.ena = !ACC_GO & ACC_GO_1; - ACC_END.prn = /M1; - ACC_END.d = (ACC_CNT[] == 1) or !ACC_DIR2; - - CONTINUE = ACC_END; - - CASE ACC_MODE[2..0] IS - WHEN 0 => ACC_DIR[] = B"00000000"; % LD B,B % - WHEN 1 => ACC_DIR[] = B"00100101"; % LD C,C % % fill by constant % - WHEN 2 => ACC_DIR[] = B"00001001"; % LD D,D % % load count accelerator % - WHEN 3 => ACC_DIR[] = B"00010101"; % LD E,E % % fill by constant VERTICAL % - WHEN 4 => ACC_DIR[] = B"01000001"; % LD H,H % % duble byte fn % - WHEN 5 => ACC_DIR[] = B"00100111"; % LD L,L % % copy line % - WHEN 6 => ACC_DIR[] = B"00000000"; % HALT % - WHEN 7 => ACC_DIR[] = B"00010111"; % LD A,A % % copy line VERTICAL % - END CASE; - --- == accelerator mode == - - ACC_MODE[].clk = /MR; - ACC_MODE[].ena = DFF((!/M1 & !PRF_CMD & - LCELL((DI[] == B"XXX00X00") or - (DI[] == B"XXX01X01") or - (DI[] == B"XXX10X10") or - (DI[] == B"XXX11X11")) & - LCELL((DI[] == B"010XX0XX") or - (DI[] == B"011XX1XX"))),CLK_Z80,,); - ACC_MODE[].d = (VCC,DI[2..0]); - ACC_MODE[2..0].clrn = /RESET & ACC_ENA; - ACC_MODE[3].clrn = /RESET & !DFF(ACC_MODE3,CLK_Z80,,); - --- == accelerator datas == - - CASE DFFE(AA0,CLK42,,,(CT2 & CT1)) IS - WHEN 0 => MD[] = MDI[7..0]; --- GLISSER = DFF((MDO[7..0] == H"FF"),CLK42,,); - WHEN 1 => MD[] = MDI[15..8]; --- GLISSER = DFF((MDO[15..8] == H"FF"),CLK42,,); - END CASE; - - GLISS_R.clk = CLK42; - CASE ACC_DIR1 IS - WHEN 0 => GLISS_R = LCELL(DI[] == H"FF"); - WHEN 1 => GLISS_R = LCELL(RAM.q[7..4] == H"F") & LCELL(RAM.q[3..0] == H"F"); - END CASE; - GLISSER = GLISS_R; - --- MDO[].clk = !CLK42; - MDO[].clk = CLK42; - - MDO[].ena = CAS; - - MDOX[].clk = CLK42; - MDOY[].clk = CLK42; - - CASE LCELL(MC_END & HDD_FLIP) IS - WHEN 0 => MDOX[7..0] = DI[]; - WHEN 1 => MDOX[7..0] = HDDR[]; - END CASE; - - CASE ACC_DIR6 IS - WHEN 0 => MDOY[7..0] = DI[]; - WHEN 1 => MDOY[7..0] = HDDR[]; - END CASE; - - CASE LCELL(/IO & ACC_DIR1) IS - WHEN 0 => MDO[].d = (MDOY[],MDOX[]); - WHEN 1 => MDO[].d = (RAM.q[7..0],RAM.q[7..0]); - END CASE; - - DO[].clk = DFF(MC_END,!CLK42,,); --- DO[].clk = !CLK42; - DO[].ena = VCC; --- DO[].ena = DFF(!MC_END,CLK42,,); - DO[].d = MD[]; - --- == accelerator functions == - - FN_ACC[].clk = /MR; - FN_ACC[].ena = /M1M; - FN_ACC[].d = LCELL(DI7 & !DI6 & !PRF_CMD) & !(DI[5..3]); - - XMDH[].clk = !CLK42; - XMDH[] = MDI[15..8]; - - XMD[].clk = !CLK42; - CASE FN_ACC[1..0] IS - WHEN 0 => - XMD[] = MD[]; % BE % - WHEN 1 => - XMD[] = MD[] or RAM.q[7..0]; % B6 % - WHEN 2 => - XMD[] = MD[] xor RAM.q[7..0]; % AE % - WHEN 3 => - XMD[] = MD[] & RAM.q[7..0]; % A6 % - END CASE; - - CASE ALT_ACC IS - WHEN 0 => RAM_ADR[] = ACC_CNT[]; - WHEN 1 => RAM_ADR[] = XCNT[]; - END CASE; - - ACC_TIME = LCELL((!ACC_END or !DFFE(ACC_END,CLK42,,,(CT1 & CT2)))); - --- RAM_WR = DFF((!/RD & (!ACC_GO & CT0) & ACC_TIME),CLK42,,); - RAM_WR = DFF((!/RD & (!ACC_GO & CT0) & ACC_DIR1),CLK42,,); - - RAM.wren = RAM_WR; - RAM.data[] = (XMD[],XMD[]); --- RAM.wraddress[] = ACC_CNT[]; - RAM.wraddress[] = RAM_ADR[]; - RAM.wrclock = CLK42; - RAM.wrclken = VCC; - RAM.rden = VCC; --- RAM.rdaddress[] = ACC_CNT[]; - RAM.rdaddress[] = RAM_ADR[]; - RAM.rdclock = CLK42; - RAM.rdclken = VCC; - - AA[].clk = CLK42; --- AA[].ena = START_ACC or (ACC_DIR5 & !ACC_GO & ACC_GO_1); - AA[].ena = LCELL(START_ACC or (ACC_DIR5 & !(CAS or START_ACC) & (ACC_GO or (ACC_GO_1 & ACC_DIR6)))); - - CASE DFF(START_ACC,CLK42,,) IS - WHEN 1 => AA[].d = AI[]; --- WHEN 0 => AA[].d = AA[] + (B"00000000000000",ACC_DIR6,!ACC_DIR6); - WHEN 0 => AA[].d = AA[] + 1; - END CASE; - - AO[] = (AA[15..0]); - -END; - diff --git a/src/altera/quartus/acex/AY.ACF b/src/altera/quartus/acex/AY.ACF deleted file mode 100644 index 2f068ab..0000000 --- a/src/altera/quartus/acex/AY.ACF +++ /dev/null @@ -1,578 +0,0 @@ --- --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. --- -CHIP ay -BEGIN - DEVICE = EP1K30QC208-3; -END; - -DEFAULT_DEVICES -BEGIN - AUTO_DEVICE = EP1K100FC484-1; - AUTO_DEVICE = EP1K100FC256-1; - AUTO_DEVICE = EP1K100QC208-1; - AUTO_DEVICE = EP1K50FC484-1; - AUTO_DEVICE = EP1K50FC256-1; - AUTO_DEVICE = EP1K50QC208-1; - AUTO_DEVICE = EP1K50TC144-1; - AUTO_DEVICE = EP1K30FC256-1; - AUTO_DEVICE = EP1K30QC208-1; - AUTO_DEVICE = EP1K30TC144-1; - AUTO_DEVICE = EP1K10FC256-1; - AUTO_DEVICE = EP1K10QC208-1; - AUTO_DEVICE = EP1K10TC144-1; - AUTO_DEVICE = EP1K10TC100-1; - ASK_BEFORE_ADDING_EXTRA_DEVICES = ON; -END; - -TIMING_POINT -BEGIN - DEVICE_FOR_TIMING_SYNTHESIS = EP1K30QC208-3; - FREQUENCY = 100MHz; - MAINTAIN_STABLE_SYNTHESIS = OFF; - CUT_ALL_CLEAR_PRESET = ON; - CUT_ALL_BIDIR = ON; -END; - -IGNORED_ASSIGNMENTS -BEGIN - FIT_IGNORE_TIMING = ON; - DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF; - IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF; - IGNORE_DEVICE_ASSIGNMENTS = OFF; - IGNORE_LC_ASSIGNMENTS = OFF; - IGNORE_PIN_ASSIGNMENTS = OFF; - IGNORE_CHIP_ASSIGNMENTS = OFF; - IGNORE_TIMING_ASSIGNMENTS = OFF; - IGNORE_LOGIC_OPTION_ASSIGNMENTS = OFF; - IGNORE_CLIQUE_ASSIGNMENTS = OFF; -END; - -GLOBAL_PROJECT_DEVICE_OPTIONS -BEGIN - MAX7000B_ENABLE_VREFB = OFF; - MAX7000B_ENABLE_VREFA = OFF; - MAX7000B_VCCIO_IOBANK2 = 3.3V; - MAX7000B_VCCIO_IOBANK1 = 3.3V; - CONFIG_EPROM_PULLUP_RESISTOR = ON; - CONFIG_EPROM_USER_CODE = FFFFFFFF; - FLEX_CONFIGURATION_EPROM = AUTO; - MAX7000AE_ENABLE_JTAG = ON; - MAX7000AE_USER_CODE = FFFFFFFF; - FLEX6000_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX10KA_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = ON; - FLEX10K_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX6000_ENABLE_JTAG = OFF; - CONFIG_SCHEME_FLEX_6000 = PASSIVE_SERIAL; - MULTIVOLT_IO = OFF; - MAX7000S_ENABLE_JTAG = ON; - FLEX10K_ENABLE_LOCK_OUTPUT = OFF; - MAX7000S_USER_CODE = FFFF; - CONFIG_SCHEME_10K = PASSIVE_SERIAL; - FLEX10K_JTAG_USER_CODE = 7F; - ENABLE_INIT_DONE_OUTPUT = OFF; - ENABLE_CHIP_WIDE_OE = OFF; - ENABLE_CHIP_WIDE_RESET = OFF; - nCEO = UNRESERVED; - CLKUSR = UNRESERVED; - ADD17 = UNRESERVED; - ADD16 = UNRESERVED; - ADD15 = UNRESERVED; - ADD14 = UNRESERVED; - ADD13 = UNRESERVED; - ADD0_TO_ADD12 = UNRESERVED; - SDOUT = RESERVED_DRIVES_OUT; - RDCLK = UNRESERVED; - RDYnBUSY = UNRESERVED; - nWS_nRS_nCS_CS = UNRESERVED; - DATA1_TO_DATA7 = UNRESERVED; - DATA0 = RESERVED_TRI_STATED; - FLEX8000_ENABLE_JTAG = OFF; - CONFIG_SCHEME = ACTIVE_SERIAL; - DISABLE_TIME_OUT = OFF; - ENABLE_DCLK_OUTPUT = OFF; - RELEASE_CLEARS = OFF; - AUTO_RESTART = OFF; - USER_CLOCK = OFF; - SECURITY_BIT = OFF; - RESERVED_PINS_PERCENT = 0; - RESERVED_LCELLS_PERCENT = 0; -END; - -GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS -BEGIN - MULTI_LEVEL_SYNTHESIS_MAX9000 = ON; - AUTO_IMPLEMENT_IN_EAB = OFF; - AUTO_OPEN_DRAIN_PINS = ON; - ONE_HOT_STATE_MACHINE_ENCODING = OFF; - AUTO_REGISTER_PACKING = OFF; - DEVICE_FAMILY = ACEX1K; - STYLE = NORMAL; - AUTO_FAST_IO = OFF; - AUTO_GLOBAL_OE = ON; - AUTO_GLOBAL_PRESET = ON; - AUTO_GLOBAL_CLEAR = ON; - AUTO_GLOBAL_CLOCK = ON; - MULTI_LEVEL_SYNTHESIS_MAX5000_7000 = OFF; - OPTIMIZE_FOR_SPEED = 5; -END; - -COMPILER_PROCESSING_CONFIGURATION -BEGIN - USE_QUARTUS_FITTER = ON; - PRESERVE_ALL_NODE_NAME_SYNONYMS = OFF; - FITTER_SETTINGS = NORMAL; - SMART_RECOMPILE = OFF; - GENERATE_AHDL_TDO_FILE = OFF; - RPT_FILE_USER_ASSIGNMENTS = ON; - RPT_FILE_LCELL_INTERCONNECT = ON; - RPT_FILE_HIERARCHY = ON; - RPT_FILE_EQUATIONS = ON; - LINKED_SNF_EXTRACTOR = OFF; - OPTIMIZE_TIMING_SNF = OFF; - TIMING_SNF_EXTRACTOR = ON; - FUNCTIONAL_SNF_EXTRACTOR = OFF; - DESIGN_DOCTOR_RULES = EPLD; - DESIGN_DOCTOR = OFF; -END; - -COMPILER_INTERFACES_CONFIGURATION -BEGIN - NETLIST_OUTPUT_TIME_SCALE = 0.1ns; - EDIF_INPUT_SHOW_LMF_MAPPING_MESSAGES = OFF; - EDIF_BUS_DELIMITERS = []; - EDIF_FLATTEN_BUS = OFF; - EDIF_OUTPUT_FORCE_0NS_DELAYS = OFF; - EDIF_OUTPUT_INCLUDE_SPECIAL_PRIM = OFF; - EDIF_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - EDIF_OUTPUT_DELAY_CONSTRUCTS = EDO_FILE; - EDIF_OUTPUT_USE_EDC = OFF; - EDIF_INPUT_USE_LMF2 = OFF; - EDIF_INPUT_USE_LMF1 = OFF; - EDIF_OUTPUT_GND = GND; - EDIF_OUTPUT_VCC = VCC; - EDIF_INPUT_GND = GND; - EDIF_INPUT_VCC = VCC; - EDIF_OUTPUT_EDC_FILE = *.edc; - EDIF_INPUT_LMF2 = *.lmf; - EDIF_INPUT_LMF1 = *.lmf; - VHDL_GENERATE_CONFIGURATION_DECLARATION = OFF; - VHDL_OUTPUT_DELAY_CONSTRUCTS = VHO_FILE; - VERILOG_OUTPUT_DELAY_CONSTRUCTS = VO_FILE; - VHDL_FLATTEN_BUS = OFF; - VERILOG_FLATTEN_BUS = OFF; - EDIF_TRUNCATE_HIERARCHY_PATH = OFF; - VHDL_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - VHDL_WRITER_VERSION = VHDL93; - VHDL_READER_VERSION = VHDL93; - SYNOPSYS_MAPPING_EFFORT = MEDIUM; - SYNOPSYS_BOUNDARY_OPTIMIZATION = OFF; - SYNOPSYS_HIERARCHICAL_COMPILATION = ON; - SYNOPSYS_DESIGNWARE = OFF; - SYNOPSYS_COMPILER = DESIGN; - USE_SYNOPSYS_SYNTHESIS = OFF; - VHDL_NETLIST_WRITER = OFF; - VERILOG_NETLIST_WRITER = OFF; - XNF_GENERATE_AHDL_TDX_FILE = ON; - XNF_TRANSLATE_INTERNAL_NODE_NAMES = ON; - XNF_EMULATE_TRI_STATE_BUSES = INTERNAL_LOGIC; - EDIF_OUTPUT_VERSION = 200; - EDIF_NETLIST_WRITER = OFF; -END; - -CUSTOM_DESIGN_DOCTOR_RULES -BEGIN - MASTER_RESET = OFF; - EXPANDER_NETWORKS = ON; - RACE_CONDITIONS = ON; - DELAY_CHAINS = ON; - ASYNCHRONOUS_INPUTS = ON; - PRESET_CLEAR_NETWORKS = ON; - STATIC_HAZARDS_AFTER_SYNTHESIS = OFF; - STATIC_HAZARDS_BEFORE_SYNTHESIS = ON; - MULTI_CLOCK_NETWORKS = ON; - MULTI_LEVEL_CLOCKS = ON; - GATED_CLOCKS = ON; - RIPPLE_CLOCKS = ON; -END; - -SIMULATOR_CONFIGURATION -BEGIN - BIDIR_PIN = STRONG; - END_TIME = 0.0ns; - START_TIME = 0.0ns; - GLITCH_TIME = 0.0ns; - GLITCH = OFF; - OSCILLATION_TIME = 0.0ns; - OSCILLATION = OFF; - CHECK_OUTPUTS = OFF; - SETUP_HOLD = OFF; - USE_DEVICE = OFF; -END; - -TIMING_ANALYZER_CONFIGURATION -BEGIN - ANALYSIS_MODE = REGISTERED_PERFORMANCE; - CUT_OFF_RAM_REGISTERED_WE_PATHS = OFF; - LIST_PATH_FREQUENCY = 10MHz; - LIST_PATH_COUNT = 10; - REGISTERED_PERFORMANCE_OPTIONS = NUMBER_OF_PATHS; - INCLUDE_PATHS_LESS_THAN_VALUE = 214.7483647ms; - INCLUDE_PATHS_LESS_THAN = OFF; - INCLUDE_PATHS_GREATER_THAN_VALUE = 0.0ns; - INCLUDE_PATHS_GREATER_THAN = OFF; - DELAY_MATRIX_OPTIONS = SHOW_ALL_PATHS; - CELL_WIDTH = 18; - LIST_ONLY_LONGEST_PATH = ON; - CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; - CUT_OFF_IO_PIN_FEEDBACK = ON; - AUTO_RECALCULATE = OFF; -END; - -OTHER_CONFIGURATION -BEGIN - ROW_PINS_LCELL_INSERT = ON; - CARRY_OUT_PINS_LCELL_INSERT = OFF; - NORMAL_LCELL_INSERT = ON; - EXPLICIT_FAMILY = 1; - LAST_MAXPLUS2_VERSION = 10.0; - FLEX_10K_52_COLUMNS = 40; - DEFAULT_9K_EXP_PER_LCELL = 1/2; - LOCAL_INTERCONNECT_PER_LAB_PERCENT = 100; - LCELLS_PER_ROW_PERCENT = 100; - FAN_IN_PER_LCELL_PERCENT = 100; - EXP_PER_LCELL_PERCENT = 100; - ROW_PINS_PERCENT = 50; - ORIGINAL_MAXPLUS2_VERSION = 10.0; - COMPILER_DATA = "1,1,0,1,0,0,0,1,1,1,1,0,1,1,1"; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = ON; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = AUTO; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = AUTO; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = MANUAL; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = MANUAL; -END; - diff --git a/src/altera/quartus/acex/AY.INC b/src/altera/quartus/acex/AY.INC deleted file mode 100644 index aec944a..0000000 --- a/src/altera/quartus/acex/AY.INC +++ /dev/null @@ -1,26 +0,0 @@ --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. - --- MAX+plus II Include File --- Version 10.0 9/14/2000 --- Created: Sat May 26 07:09:40 2001 - -FUNCTION ay (/reset, clk42, ay_t[8..0], ay_d_wr, ay_a_wr, d[7..0], beeper) - RETURNS (do[7..0], ay_ch_a[3..0], ay_ch_b[3..0], ay_ch_c[3..0], ay_ch_l[9..0], ay_ch_r[9..0], ay_ch_val); diff --git a/src/altera/quartus/acex/AY.MIF b/src/altera/quartus/acex/AY.MIF deleted file mode 100644 index 1ed1d5e..0000000 --- a/src/altera/quartus/acex/AY.MIF +++ /dev/null @@ -1,154 +0,0 @@ -DEPTH = 256; % Memory depth and width are required % -WIDTH = 8; % Enter a decimal number % - -ADDRESS_RADIX = HEX; % Address and value radixes are optional % -DATA_RADIX = BIN; % Enter BIN, DEC, HEX, or OCT; unless % - % otherwise specified, radixes = HEX % - --- Specify values for addresses, which can be single address or range - -CONTENT -BEGIN - [0..7F] : 00000000; - 0 : 00000000 00000000 - 00000000 00000000 - 00000000 00000000 - 00000000 11111111 - 00000000 00000000 - 00000000 00000000 - 00000000 00000000 - 00000000 00000000 - - 11111111 11111111 - 11111111 11111111 - 11111111 11111111 - 11111111 11111111 - 11111111 11111111 - 11111111 11111111 - 11111111 00000001 - 00000000 11111111 - ; - 1E : 00000000; - 1F : 11111111; - - 30 : 00000000 - 00000010 - 00000011 - 00000100 - 00000110 - 00001000 - 00001011 - 00010000 - 00010110 - 00100000 - 00101101 - 01000000 - 01011010 - 10000000 - 10110100 - 11111111; - - [80..FF]: 00000000; - -% - 000 - set CX, load & sub 1 - 001 - load - 010 - save, if NZ,reset CX - 011 - bit_out - 100 - load & sub 1 - 101 - load & sub C - 110 - if CX, save - 111 - read states /RESET, AY_F_RES -% - - 80 : - 00010000 -- set C,CX load reg10 & sub C - 01010000 -- save reg10 & reset CX if NZ - 10110001 -- load reg11 & sub C - 01010001 -- save reg11 & reset CX if NZ - - 00100000 -- set C load reg00 & sub C - 11010000 -- save reg10 if CX - 00100001 -- load reg01 & sub C - 11010001 -- save reg11 if CX - - 00101000 -- load reg08 - 01100001 -- set AY_OUT1 - - - 00010010 -- set C,CX load reg12 & sub C - 01010010 -- save reg12 & reset CX if NZ - 10110011 -- load reg13 & sub C - 01010011 -- save reg13 & reset CX if NZ - - 00100010 -- set C load reg02 & sub C - 11010010 -- save reg12 if CX - 00100011 -- load reg03 & reset CX if NZ - 11010011 -- save reg13 if CX - - 00101001 -- load reg09 - 01100010 -- set AY_OUT2 - - - 00010100 -- set C,CX load reg14 & sub C - 01010100 -- save reg14 & reset CX if NZ - 10110101 -- load reg15 & sub C - 01010101 -- save reg15 & reset CX if NZ - - 00100100 -- set C load reg04 & sub C - 11010100 -- save reg14 if CX - 00100101 -- load reg05 & reset CX if NZ - 11010101 -- save reg15 if CX - - 00101010 -- load reg0A - 01100011 -- set AY_OUT3 - - - 00010111 -- set C,CX load reg17 & dec 1 - 01010111 -- save reg17 & reset CX if NZ - 00100110 -- load reg06 dec 1 *********** - 11010111 -- save reg17 if CX - - 01100100 -- set AY_SH - 00000000 -- NOP - - 00011000 -- set C,CX load reg18 & sub C - 01011000 -- save reg18 & reset CX if NZ - 10111001 -- load reg19 & sub C - 01011001 -- save reg19 & reset CX if NZ - - 00101011 -- load reg0B & sub 1 - 11011000 -- save reg18 if CX - 00101100 -- load reg0C & sub C - 11011001 -- save reg19 if CX - - 01100101 -- set FORM_CLK - - 11100000 -- set CX = AY_F_RES - --- 00101011 -- load reg0B & sub 1 --- 11011000 -- save reg18 if CX --- 00101100 -- load reg0C & sub C --- 11011001 -- save reg19 if CX - - 11100001 -- set CX = /RESET - - 00111111 -- load reg1F - FF *********** - 11000111 -- save reg07 if CX - 00111110 -- load reg1E - 00 *********** - - 11001101 -- save reg0D if CX - 11001000 -- save reg08 if CX - 11001001 -- save reg09 if CX - 11001010 -- save reg0a if CX - - 00100111 -- load reg07 *********** - 01100110 -- set keys_bits - - 00101101 -- load reg0D *********** - 01100111 -- set keys_bits SET-FORM-bits - --- 01100000 -- set AY_OUT_ALL - - ; -END ; diff --git a/src/altera/quartus/acex/AY.TDF b/src/altera/quartus/acex/AY.TDF deleted file mode 100644 index c090bef..0000000 --- a/src/altera/quartus/acex/AY.TDF +++ /dev/null @@ -1,368 +0,0 @@ - - TITLE "AY-3-8910"; - -include "lpm_ram_dq"; -include "lpm_add_sub"; - -SUBDESIGN ay - ( - /RESET : INPUT; - CLK42 : INPUT; -- ⠪ 42 - AY_T[8..0] : INPUT; -- 譨 稪 ⠪⮢ - - AY_D_WR : INPUT; - AY_A_WR : INPUT; - - D[7..0] : INPUT; - DO[7..0] : OUTPUT; - - AY_CH_A[3..0] : OUTPUT; - AY_CH_B[3..0] : OUTPUT; - AY_CH_C[3..0] : OUTPUT; - - AY_CH_L[9..0] : OUTPUT; - AY_CH_R[9..0] : OUTPUT; - - AY_CH_VAL : OUTPUT; -- chanels data valid - BEEPER : INPUT; - - ) -VARIABLE - - BD[7..0] : DFFE; - BWR : DFFE; - AWR : DFFE; - - AY_DI[7..0] : NODE; - AY_DO[7..0] : NODE; - - AY_F_RES : NODE; - AY_F_R1 : NODE; - - AY_ADR[7..0] : DFF; - AY_AAX[1..0] : DFF; - - AY_X_[5..0] : DFFE; - AY_GF[3..0] : DFFE; - - AY_OUT[3..1] : DFFE; - AY_OUTS[3..1] : NODE; - - AY_CLK1 : NODE; - AY_SH[16..0] : DFFE; - AY_AA[3..0] : DFF; - AY_SH_Q : NODE; - - AY_ABLK : NODE; - AY_BBLK : NODE; - AY_AINV : NODE; - AY_BINV : NODE; - - AY_ADRX[7..0] : NODE; - AY_CCC[8..0] : DFF; - AY_AX[7..0] : NODE; - AY_C : DFFE; - AY_CX : DFFE; - AY_CXX : DFFE; - AY_WR : NODE; - AY_VA[3..0] : DFFE; - AY_VAR : DFFE; - AY_VX : DFFE; - - AY_DAT_WR : DFF; - AY_DAT[7..0] : DFFE; - - AY_DQ1[3..0] : DFFE; - AY_DQ2[3..0] : DFFE; - AY_DQ3[3..0] : DFFE; - - AY_DQX[3..0] : DFFE; - AY_OUTSX : NODE; - AY_CH_MIX : DFF; - - AY_AMP[3..0] : DFF; - - AY_DD[7..0] : DFFE; - - AY_CH_A[3..0] : DFF; - AY_CH_B[3..0] : DFF; - AY_CH_C[3..0] : DFF; - - AY_CH_CS[8..0] : DFF; - AY_CH_LX[10..0] : DFFE; - AY_CH_RX[10..0] : DFFE; - --- AY_CH_L[9..0] : DFF; --- AY_CH_R[9..0] : DFF; - - AY_CH_DIR[7..0] : DFFE; - - AY_OUTS1X : NODE; - AY_OUTS2X : NODE; - AY_OUTS3X : NODE; - - AY_OUTS1Y : NODE; --- AY_OUTS2Y : NODE; - AY_OUTS3Y : NODE; - -BEGIN - --- ====== AY8910 III version ========= - - BD[].clk = CLK42; - AWR.clk = CLK42; - BWR.clk = CLK42; - - BD[].ena = AY_CCC1; - BWR.ena = AY_CCC1; - AWR.ena = AY_CCC1; - - BD[7..5].clrn = !((AY_ADR[3..0] == B"00X1") or -- ch 1,2 - (AY_ADR[3..0] == B"0101") or -- ch 3 - (AY_ADR[3..0] == B"0110") -- ch shum - ); - BD4.clrn = !((AY_ADR[3..0] == B"00X1") or -- ch 1,2 - (AY_ADR[3..0] == B"0101") -- ch 3 - ); - - BD[] = D[]; - - AWR = AY_A_WR; --- BWR = (AY_D_WR or !(AY_ADR[5..4] == 0)); - BWR = AY_D_WR; - - AY_CH_DIR[].clk = AY_D_WR; - AY_CH_DIR[].ena = (AY_ADR[] == B"XXX10000"); - AY_CH_DIR[].d = D[]; - AY_CH_DIR[].clrn= /RESET; - - AY_CCC[].clk = CLK42; - AY_CCC[8..0].d = AY_T[]; - - (AY_AAX[].clk,AY_ADR[].clk) = AY_A_WR; - AY_ADR[].d = D[]; - - -- Write to 0D register - AY_AAX0.d = (D[3..0] == B"1101"); - -- Write to AMP registers 08,09,0A - AY_AAX1.d = (D[3..0] == B"1000") or (D[3..0] == B"1001") or (D[3..0] == B"1010"); - - -- reset signal for form generator --- AY_F_RES = DFF(VCC,DFF((!((AY_DO[7..5] == B"111") & AY_CCC1 & !AY_DO0) or AY_F_RES),CLK42,,),LCELL(!(AY_AAX0 or (AY_AAX1 & BD4)) or BWR),); - --- AY_F_R1 = DFF((!(AY_AAX0 or (AY_AAX1)) or BWR),CLK42,,); - AY_F_R1 = DFF((!AY_AAX0 or BWR),CLK42,,); - AY_F_RES = DFF(DFF(VCC,AY_CCC7,AY_F_R1,),AY_CCC7,AY_F_R1,); - - AY_X_[].prn = VCC; - --- AY_GF[3..0].clrn = /RESET; --- AY_GF[3..0].clk = AY_D_WR; --- AY_GF[3..0].ena = AY_ADR[] == B"XXXX1101"; --- AY_GF[3..0].d = D[3..0]; - - AY_DAT_WR.clk = CLK42; - - CASE AY_CCC[1..0] IS - WHEN B"00" => - AY_AX[] = (VCC,GND,AY_CCC[7..2]); -- CMD adress - AY_WR = GND; - AY_DI[] = AY_DAT[]; - - AY_DAT_WR = VCC; - - WHEN B"01" => - AY_AX[] = (B"0000",AY_ADR[3..0]); - AY_WR = !BWR; - AY_DI[] = BD[]; - - AY_DAT_WR = VCC; - - WHEN B"1X" => - AY_AX[] = (GND,GND,GND,AY_DO[4..0]); - AY_DAT_WR = AY_DO6; - AY_WR = !LCELL(!(AY_DO[7..5] == B"010") & - !((AY_DO[7..5] == B"110") & AY_CXX)); --- !((AY_DO[7..5] == B"110") & AY_CX)); - AY_DI[] = AY_DAT[]; - END CASE; - - AY_DD[].clk = CLK42; - AY_DD[].ena = !AY_CCC1 & !AY_CCC0; - AY_DD[] = AY_DO[]; - - AY_DO[] = lpm_ram_dq(AY_DI[],AY_AX[],AY_WR,CLK42,CLK42) - WITH (lpm_width=8,lpm_widthad=8,lpm_file="AY.MIF"); - --- AY_CX.prn = !DFF((((AY_DO[7..5] == B"00X") & AY_CCC1) & (!AY_DO5 or AY_C)),CLK42,,); - AY_CX.prn = !DFF(((AY_DO[7..5] == B"000") & AY_CCC1),CLK42,,); - AY_CXX.prn = !DFF(((AY_DO[7..5] == B"000") & AY_CCC1),CLK42,,); - AY_C.prn = VCC; - - AY_CX.clk = CLK42; - AY_CXX.clk = CLK42; - (AY_CXX.ena,AY_CX.ena) = DFF((((AY_DO[7..5] == B"010") or (AY_DO[7..5] == B"111")) & AY_CCC1),CLK42,,); - - IF DFF(((AY_DO[7..5] == B"010")),CLK42,,) THEN - AY_CX = (LCELL(AY_DAT[] == 0) & AY_CX); --- AY_CXX = (LCELL(AY_DAT[] == 0) & AY_CXX); --- AY_CX = (LCELL(AY_DAT[] == 0) & AY_CX) or (AY_C & DFF(AY_DO0,CLK42,,)); - AY_CXX = (LCELL(AY_DAT[] == 0) & AY_CXX) or (AY_C & DFF(AY_DO0,CLK42,,)); - ELSE - AY_CXX = DFF(((!/RESET & AY_DO0) or (!AY_F_RES & !AY_DO0)),CLK42,,); - AY_CX = DFF(((!/RESET & AY_DO0) or (!AY_F_RES & !AY_DO0)),CLK42,,); - END IF; - - (AY_C.clk,AY_DAT[].clk) = CLK42; - (AY_C.ena,AY_DAT[].ena) = !DFF(AY_DAT_WR,CLK42,,); - (AY_C,AY_DAT[]) = (GND,AY_DO[]) - (B"00000000",DFF((DFF(!AY_DO5,CLK42,,) or (AY_C & DFF(AY_DO7,CLK42,,))),CLK42,,)); - - AY_OUT[].clk = CLK42; - - AY_AMP[].clk = CLK42; - AY_AMP[] = ((AY_DAT[3..0] or AY_DAT[4]) & (AY_AA[] or !AY_DAT[4])); - - AY_DQ1[].clk = CLK42; - AY_OUTS1 = DFF(((AY_DO[7..0] == B"011XX001") & AY_CCC1),CLK42,,); - AY_OUT1.ena = AY_OUTS1; - AY_OUT1 = AY_CX xor AY_OUT1; - AY_DQ1[].ena = AY_OUTS1; - AY_DQ1[] = AY_AMP[] & LCELL((AY_OUT1 or AY_X_0) & (AY_X_3 or AY_SH0)); - - AY_DQ2[].clk = CLK42; - AY_OUTS2 = DFF(((AY_DO[7..0] == B"011XX010") & AY_CCC1),CLK42,,); - AY_OUT2.ena = AY_OUTS2; - AY_OUT2 = AY_CX xor AY_OUT2; - AY_DQ2[].ena = AY_OUTS2; - AY_DQ2[] = AY_AMP[] & LCELL((AY_OUT2 or AY_X_1) & (AY_X_4 or AY_SH0)); - - AY_DQ3[].clk = CLK42; - AY_OUTS3 = DFF(((AY_DO[7..0] == B"011XX011") & AY_CCC1),CLK42,,); - AY_OUT3.ena = AY_OUTS3; - AY_OUT3 = AY_CX xor AY_OUT3; - AY_DQ3[].ena = AY_OUTS3; - AY_DQ3[] = AY_AMP[] & LCELL((AY_OUT3 or AY_X_2) & (AY_X_5 or AY_SH0)); - - AY_OUTSX = DFF((((AY_DO[7..0] == B"011XX01X") or - (AY_DO[7..0] == B"011XX0X1")) & AY_CCC1),CLK42,,); - AY_DQX[].clk = CLK42; - AY_DQX[].ena = AY_OUTSX; - AY_DQX[] = AY_AMP[] & AY_CH_MIX; - - AY_DQX[].clrn = !AY_SH_Q; - AY_DQX[].prn = (B"0010") or !DFF((AY_SH_Q & BEEPER),CLK42,,); - - AY_CH_MIX.clk = CLK42; - CASE AY_DO[1..0] IS - WHEN 0,1 => AY_CH_MIX = LCELL((AY_OUT1 or AY_X_0) & (AY_X_3 or AY_SH0)); - WHEN 2 => AY_CH_MIX = LCELL((AY_OUT2 or AY_X_1) & (AY_X_4 or AY_SH0)); - WHEN 3 => AY_CH_MIX = LCELL((AY_OUT3 or AY_X_2) & (AY_X_5 or AY_SH0)); - END CASE; - - AY_SH_Q = DFF(((AY_DO[7..0] == B"011XX100") & AY_CCC1),CLK42,,); - - AY_SH[].clk = CLK42; - AY_SH[].prn = /RESET; - AY_SH[].ena = AY_SH_Q & AY_CXX; - AY_SH[] = ((AY_SH3 xor AY_SH0),AY_SH[16..1]); - - AY_VAR.clk = CLK42; - AY_VX.clk = CLK42; - AY_VA[].clk = CLK42; - - (AY_VAR.clrn,AY_VA[].clrn) = AY_F_RES; - AY_VX.clrn = AY_F_RES; - - (AY_VX.ena,AY_VA[].ena,AY_VAR.ena) = DFF(((AY_DO[7..0] == B"011XX101") & AY_CCC1 & !AY_BBLK & AY_CX),CLK42,,); - (AY_VX,AY_VA[],AY_VAR) = (AY_VX,AY_VA[],AY_VAR) + 1; - - AY_X_[].clk = CLK42; - AY_X_[].ena = DFF(((AY_DO[7..0] == B"011XX110") & AY_CCC1),CLK42,,); - AY_X_[] = AY_DAT[5..0]; - - AY_GF[].clk = CLK42; - AY_GF[].ena = DFF(((AY_DO[7..0] == B"011XX111") & AY_CCC1),CLK42,,); - AY_GF[] = AY_DAT[3..0]; - - -- block count when 1-st period end - AY_BBLK = DFF((AY_VX & (AY_GF0 or !AY_GF3)),CLK42,,); -- VA_COUNT_STOP - - -- set ALL ZERO when 1-st period end - AY_ABLK = DFF((!AY_GF3 & AY_VX),CLK42,,); - - -- inverse 2-nd-s periods - AY_BINV = DFF((AY_VX & ((AY_GF[] == B"1X10") or (AY_GF == B"1X01"))),CLK42,,); - - -- inverse ALL - AY_AINV = AY_GF2; - - AY_AA[].clrn= VCC; - AY_AA[].clk = CLK42; - AY_AA[].d = (AY_VA[] xor AY_BINV xor !AY_AINV) & !AY_ABLK; - -% - AY_AA[].clrn= VCC; - AY_AA[].prn = GND; - AY_AA[].clk = CLK42; - AY_AA[] = VCC; -% - - AY_CH_A[3..0].clk = AY_CCC7; - AY_CH_B[3..0].clk = AY_CCC7; - AY_CH_C[3..0].clk = AY_CCC7; - - AY_CH_A[3..0] = AY_DQ1[3..0]; - AY_CH_B[3..0] = AY_DQ2[3..0]; - AY_CH_C[3..0] = AY_DQ3[3..0]; - - DO[7..0] = AY_DD[]; - - AY_CH_CS[].clk = CLK42; - CASE AY_DQX[] IS - WHEN 15 => AY_CH_CS[] = 360 ; - WHEN 14 => AY_CH_CS[] = 255 ; - WHEN 13 => AY_CH_CS[] = 180 ; - WHEN 12 => AY_CH_CS[] = 127 ; - WHEN 11 => AY_CH_CS[] = 90 ; - WHEN 10 => AY_CH_CS[] = 64 ; - WHEN 9 => AY_CH_CS[] = 45 ; - WHEN 8 => AY_CH_CS[] = 32 ; - WHEN 7 => AY_CH_CS[] = 22 ; - WHEN 6 => AY_CH_CS[] = 16 ; - WHEN 5 => AY_CH_CS[] = 11 ; - WHEN 4 => AY_CH_CS[] = 8 ; - WHEN 3 => AY_CH_CS[] = 6 ; - WHEN 2 => AY_CH_CS[] = 4 ; - WHEN 1 => AY_CH_CS[] = 2 ; - WHEN 0 => AY_CH_CS[] = 0 ; - END CASE; - - AY_OUTS1X = DFF(AY_OUTS1,CLK42,,); - AY_OUTS2X = DFF((AY_OUTS2 or AY_SH_Q),CLK42,,); - AY_OUTS3X = DFF(AY_OUTS3,CLK42,,); - - AY_OUTS1Y = DFF(AY_OUTS1 or AY_OUTS1X,CLK42,,); --- AY_OUTS2Y = DFF(AY_OUTS2 or AY_OUTS2X,CLK42,,); - AY_OUTS3Y = DFF(AY_OUTS3 or AY_OUTS3X,CLK42,,); - - (AY_CH_LX[].clrn,AY_CH_RX[].clrn) = !DFF((AY_CCC[7..2] == 0),CLK42,,); - - (AY_CH_LX[],,) = LPM_ADD_SUB (,AY_CH_LX[],(B"00",AY_CH_CS[]),,,,) - WITH(LPM_WIDTH=11,LPM_REPRESENTATION="UNSIGNED"); - (AY_CH_RX[],,) = LPM_ADD_SUB (,AY_CH_RX[],(B"00",AY_CH_CS[]),,,,) - WITH (LPM_WIDTH=11,LPM_REPRESENTATION="UNSIGNED"); - - AY_CH_LX[].clk = CLK42; - AY_CH_RX[].clk = CLK42; - AY_CH_LX[].ena = DFF(DFF((AY_OUTS1 or AY_OUTS1Y or AY_OUTS2X or AY_OUTS2),CLK42,,),CLK42,,); - AY_CH_RX[].ena = DFF(DFF((AY_OUTS3 or AY_OUTS3Y or AY_OUTS2X or AY_OUTS2),CLK42,,),CLK42,,); - - AY_CH_VAL = DFF((AY_CCC[7..2] == B"111100"),CLK42,,); - --- AY_CH_L[].clk = AY_CH_VAL; --- AY_CH_R[].clk = AY_CH_VAL; - AY_CH_L[] = AY_CH_LX[10..1]; - AY_CH_R[] = AY_CH_RX[10..1]; - -END; - diff --git a/src/altera/quartus/acex/DCP.ACF b/src/altera/quartus/acex/DCP.ACF deleted file mode 100644 index b8616b1..0000000 --- a/src/altera/quartus/acex/DCP.ACF +++ /dev/null @@ -1,568 +0,0 @@ --- --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. --- -CHIP dcp -BEGIN - DEVICE = EP1K30FC256-3; -END; - -DEFAULT_DEVICES -BEGIN - AUTO_DEVICE = EP1K100FC484-1; - AUTO_DEVICE = EP1K100FC256-1; - AUTO_DEVICE = EP1K100QC208-1; - AUTO_DEVICE = EP1K50FC484-1; - AUTO_DEVICE = EP1K50FC256-1; - AUTO_DEVICE = EP1K50QC208-1; - AUTO_DEVICE = EP1K50TC144-1; - AUTO_DEVICE = EP1K30FC256-1; - AUTO_DEVICE = EP1K30QC208-1; - AUTO_DEVICE = EP1K30TC144-1; - ASK_BEFORE_ADDING_EXTRA_DEVICES = ON; -END; - -TIMING_POINT -BEGIN - DEVICE_FOR_TIMING_SYNTHESIS = EP1K30FC256-3; - FREQUENCY = 200MHz; - MAINTAIN_STABLE_SYNTHESIS = OFF; - CUT_ALL_CLEAR_PRESET = ON; - CUT_ALL_BIDIR = ON; -END; - -IGNORED_ASSIGNMENTS -BEGIN - FIT_IGNORE_TIMING = OFF; - DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF; - IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF; - IGNORE_DEVICE_ASSIGNMENTS = OFF; - IGNORE_LC_ASSIGNMENTS = OFF; - IGNORE_PIN_ASSIGNMENTS = OFF; - IGNORE_CHIP_ASSIGNMENTS = OFF; - IGNORE_TIMING_ASSIGNMENTS = OFF; - IGNORE_LOGIC_OPTION_ASSIGNMENTS = OFF; - IGNORE_CLIQUE_ASSIGNMENTS = OFF; -END; - -GLOBAL_PROJECT_DEVICE_OPTIONS -BEGIN - MAX7000B_ENABLE_VREFB = OFF; - MAX7000B_ENABLE_VREFA = OFF; - MAX7000B_VCCIO_IOBANK2 = 3.3V; - MAX7000B_VCCIO_IOBANK1 = 3.3V; - CONFIG_EPROM_PULLUP_RESISTOR = ON; - CONFIG_EPROM_USER_CODE = FFFFFFFF; - FLEX_CONFIGURATION_EPROM = AUTO; - MAX7000AE_ENABLE_JTAG = ON; - MAX7000AE_USER_CODE = FFFFFFFF; - FLEX6000_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX10KA_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = ON; - FLEX10K_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX6000_ENABLE_JTAG = OFF; - CONFIG_SCHEME_FLEX_6000 = PASSIVE_SERIAL; - MULTIVOLT_IO = OFF; - MAX7000S_ENABLE_JTAG = ON; - FLEX10K_ENABLE_LOCK_OUTPUT = OFF; - MAX7000S_USER_CODE = FFFF; - CONFIG_SCHEME_10K = PASSIVE_SERIAL; - FLEX10K_JTAG_USER_CODE = 7F; - ENABLE_INIT_DONE_OUTPUT = OFF; - ENABLE_CHIP_WIDE_OE = OFF; - ENABLE_CHIP_WIDE_RESET = OFF; - nCEO = UNRESERVED; - CLKUSR = UNRESERVED; - ADD17 = UNRESERVED; - ADD16 = UNRESERVED; - ADD15 = UNRESERVED; - ADD14 = UNRESERVED; - ADD13 = UNRESERVED; - ADD0_TO_ADD12 = UNRESERVED; - SDOUT = RESERVED_DRIVES_OUT; - RDCLK = UNRESERVED; - RDYnBUSY = UNRESERVED; - nWS_nRS_nCS_CS = UNRESERVED; - DATA1_TO_DATA7 = UNRESERVED; - DATA0 = RESERVED_TRI_STATED; - FLEX8000_ENABLE_JTAG = OFF; - CONFIG_SCHEME = ACTIVE_SERIAL; - DISABLE_TIME_OUT = OFF; - ENABLE_DCLK_OUTPUT = OFF; - RELEASE_CLEARS = OFF; - AUTO_RESTART = OFF; - USER_CLOCK = OFF; - SECURITY_BIT = OFF; - RESERVED_PINS_PERCENT = 0; - RESERVED_LCELLS_PERCENT = 0; -END; - -GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS -BEGIN - STYLE = FAST; - MULTI_LEVEL_SYNTHESIS_MAX9000 = ON; - AUTO_IMPLEMENT_IN_EAB = OFF; - AUTO_OPEN_DRAIN_PINS = ON; - ONE_HOT_STATE_MACHINE_ENCODING = OFF; - AUTO_REGISTER_PACKING = OFF; - DEVICE_FAMILY = ACEX1K; - AUTO_FAST_IO = OFF; - AUTO_GLOBAL_OE = ON; - AUTO_GLOBAL_PRESET = ON; - AUTO_GLOBAL_CLEAR = ON; - AUTO_GLOBAL_CLOCK = ON; - MULTI_LEVEL_SYNTHESIS_MAX5000_7000 = OFF; - OPTIMIZE_FOR_SPEED = 5; -END; - -COMPILER_PROCESSING_CONFIGURATION -BEGIN - USE_QUARTUS_FITTER = ON; - PRESERVE_ALL_NODE_NAME_SYNONYMS = OFF; - FITTER_SETTINGS = NORMAL; - SMART_RECOMPILE = OFF; - GENERATE_AHDL_TDO_FILE = OFF; - RPT_FILE_USER_ASSIGNMENTS = ON; - RPT_FILE_LCELL_INTERCONNECT = ON; - RPT_FILE_HIERARCHY = ON; - RPT_FILE_EQUATIONS = ON; - LINKED_SNF_EXTRACTOR = OFF; - OPTIMIZE_TIMING_SNF = OFF; - TIMING_SNF_EXTRACTOR = ON; - FUNCTIONAL_SNF_EXTRACTOR = OFF; - DESIGN_DOCTOR_RULES = EPLD; - DESIGN_DOCTOR = OFF; -END; - -COMPILER_INTERFACES_CONFIGURATION -BEGIN - NETLIST_OUTPUT_TIME_SCALE = 0.1ns; - EDIF_INPUT_SHOW_LMF_MAPPING_MESSAGES = OFF; - EDIF_BUS_DELIMITERS = []; - EDIF_FLATTEN_BUS = OFF; - EDIF_OUTPUT_FORCE_0NS_DELAYS = OFF; - EDIF_OUTPUT_INCLUDE_SPECIAL_PRIM = OFF; - EDIF_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - EDIF_OUTPUT_DELAY_CONSTRUCTS = EDO_FILE; - EDIF_OUTPUT_USE_EDC = OFF; - EDIF_INPUT_USE_LMF2 = OFF; - EDIF_INPUT_USE_LMF1 = OFF; - EDIF_OUTPUT_GND = GND; - EDIF_OUTPUT_VCC = VCC; - EDIF_INPUT_GND = GND; - EDIF_INPUT_VCC = VCC; - EDIF_OUTPUT_EDC_FILE = *.edc; - EDIF_INPUT_LMF2 = *.lmf; - EDIF_INPUT_LMF1 = *.lmf; - VHDL_GENERATE_CONFIGURATION_DECLARATION = OFF; - VHDL_OUTPUT_DELAY_CONSTRUCTS = VHO_FILE; - VERILOG_OUTPUT_DELAY_CONSTRUCTS = VO_FILE; - VHDL_FLATTEN_BUS = OFF; - VERILOG_FLATTEN_BUS = OFF; - EDIF_TRUNCATE_HIERARCHY_PATH = OFF; - VHDL_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - VHDL_WRITER_VERSION = VHDL87; - VHDL_READER_VERSION = VHDL87; - SYNOPSYS_MAPPING_EFFORT = MEDIUM; - SYNOPSYS_BOUNDARY_OPTIMIZATION = OFF; - SYNOPSYS_HIERARCHICAL_COMPILATION = ON; - SYNOPSYS_DESIGNWARE = OFF; - SYNOPSYS_COMPILER = DESIGN; - USE_SYNOPSYS_SYNTHESIS = OFF; - VHDL_NETLIST_WRITER = OFF; - VERILOG_NETLIST_WRITER = OFF; - XNF_GENERATE_AHDL_TDX_FILE = ON; - XNF_TRANSLATE_INTERNAL_NODE_NAMES = ON; - XNF_EMULATE_TRI_STATE_BUSES = INTERNAL_LOGIC; - EDIF_OUTPUT_VERSION = 200; - EDIF_NETLIST_WRITER = OFF; -END; - -CUSTOM_DESIGN_DOCTOR_RULES -BEGIN - MASTER_RESET = OFF; - EXPANDER_NETWORKS = ON; - RACE_CONDITIONS = ON; - DELAY_CHAINS = ON; - ASYNCHRONOUS_INPUTS = ON; - PRESET_CLEAR_NETWORKS = ON; - STATIC_HAZARDS_AFTER_SYNTHESIS = OFF; - STATIC_HAZARDS_BEFORE_SYNTHESIS = ON; - MULTI_CLOCK_NETWORKS = ON; - MULTI_LEVEL_CLOCKS = ON; - GATED_CLOCKS = ON; - RIPPLE_CLOCKS = ON; -END; - -SIMULATOR_CONFIGURATION -BEGIN - END_TIME = 5.0us; - BIDIR_PIN = STRONG; - START_TIME = 0.0ns; - GLITCH_TIME = 0.0ns; - GLITCH = OFF; - OSCILLATION_TIME = 0.0ns; - OSCILLATION = OFF; - CHECK_OUTPUTS = OFF; - SETUP_HOLD = OFF; - USE_DEVICE = OFF; -END; - -TIMING_ANALYZER_CONFIGURATION -BEGIN - ANALYSIS_MODE = REGISTERED_PERFORMANCE; - CUT_OFF_RAM_REGISTERED_WE_PATHS = OFF; - LIST_PATH_FREQUENCY = 10MHz; - LIST_PATH_COUNT = 10; - REGISTERED_PERFORMANCE_OPTIONS = NUMBER_OF_PATHS; - INCLUDE_PATHS_LESS_THAN_VALUE = 214.7483647ms; - INCLUDE_PATHS_LESS_THAN = OFF; - INCLUDE_PATHS_GREATER_THAN_VALUE = 0.0ns; - INCLUDE_PATHS_GREATER_THAN = OFF; - DELAY_MATRIX_OPTIONS = SHOW_ALL_PATHS; - CELL_WIDTH = 18; - LIST_ONLY_LONGEST_PATH = ON; - CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; - CUT_OFF_IO_PIN_FEEDBACK = ON; - AUTO_RECALCULATE = OFF; -END; - -OTHER_CONFIGURATION -BEGIN - LAST_MAXPLUS2_VERSION = 10.0; - EXPLICIT_FAMILY = 1; - ROW_PINS_LCELL_INSERT = ON; - CARRY_OUT_PINS_LCELL_INSERT = OFF; - NORMAL_LCELL_INSERT = ON; - FLEX_10K_52_COLUMNS = 40; - DEFAULT_9K_EXP_PER_LCELL = 1/2; - LOCAL_INTERCONNECT_PER_LAB_PERCENT = 100; - LCELLS_PER_ROW_PERCENT = 100; - FAN_IN_PER_LCELL_PERCENT = 100; - EXP_PER_LCELL_PERCENT = 100; - ROW_PINS_PERCENT = 50; - ORIGINAL_MAXPLUS2_VERSION = 9.6; - COMPILER_DATA = "1,1,0,1,0,0,0,1,1,1,1,0,1,1,1"; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = ON; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.FLEX8000 -BEGIN - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = AUTO; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = AUTO; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = MANUAL; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = MANUAL; -END; - diff --git a/src/altera/quartus/acex/DCP.INC b/src/altera/quartus/acex/DCP.INC deleted file mode 100644 index 12ce88f..0000000 --- a/src/altera/quartus/acex/DCP.INC +++ /dev/null @@ -1,27 +0,0 @@ --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. - --- MAX+plus II Include File --- Version 10.0 9/14/2000 --- Created: Thu Feb 07 21:14:23 2002 - -FUNCTION dcp (clk42, /reset, ct[2..0], continue, a[15..0], di[7..0], turbo_hand, /io, /rd, /wr, /mr, /rf, /m1, md[7..0], dos, refresh, g_line[9..0], test_r, acc_on, double_cas, blk_mem) - WITH (UPDATE) - RETURNS (/res, ras, cas, mc_end, mc_begin, mc_type, mc_write, do[7..0], ma[11..0], mca[1..0], clk_z80, turbo, /wait, /iom, /iomm, ra[17..14], page[11..0], type[3..0], cs_rom, cs_ram, v_ram, port, wr_dwg, wr_tm9, wr_awg, rd_kp11, kp11_mix, ga[9..0], graf, sp_scr, sp_sa, scr128, hdd_data, hdd_flip, ram, blk_r, pn4q, dcpp[7..0]); diff --git a/src/altera/quartus/acex/DCP.MIF b/src/altera/quartus/acex/DCP.MIF deleted file mode 100644 index aee8502..0000000 --- a/src/altera/quartus/acex/DCP.MIF +++ /dev/null @@ -1,119 +0,0 @@ -DEPTH = 256; % Memory depth and width are required % -WIDTH = 16; % Enter a decimal number % - -ADDRESS_RADIX = HEX; % Address and value radixes are optional % -DATA_RADIX = HEX; % Enter BIN, DEC, HEX, or OCT; unless % - % otherwise specified, radixes = HEX % - --- Specify values for addresses, which can be single address or range - -CONTENT -BEGIN - [0..FF] : 1000; - - 0 : 1040 % DCP PAGE %; - -% - MA[11..0] bit0 - WG_A5 - bit1 - WG_A6 - - bit2 - MUX_KP11, 0 - WG,CMOS 1 - KMPS,TM9 - bit3 - RD/WR 0 - WRITE 1 - READ - bit4 - CS_WG93 or WR_TM9 - - bit5 - HDD/CMOS strobe - bit6,7 - 00 - FDD/Scr switches - 01 - HDD Switch/ Reset - 10 - HDD1/HDD2 - 11 - CMOS - bit8 - HDD CS1/CS3 or CMOS data/adr - bit9,10,11 - HDD_A[2..0] -% - 10 : - 7018 % RD WG93 1F,0F % - 7019 % RD WG93 3F % - 701A % RD WG93 5F % - 701B % RD WG93 7F % - - 7017 % WR_PDOS FF % - 701F % RD_KEYS/ WR_A20 % - - 7023 % Set 720 % - 7027 % Set 1440 %; - --- 18 : --- 1000 % No_function % - --- 1B : 1000; % ISA_A20 WR % - - 1C : 71D8 % CMOS_DAT_RD %; - 1D : 70D4 % CMOS_ADR_WR %; - 1E : 71D4 % CMOS_DAT_WR %; - - 20 : - 60A8 % HD_CS1 ports % - 62A8 - 64A8 - 66A8 - 68A8 - 6AA8 - 6CA8 - 6EA8 - - 6DA8 % HD_CS3 3F6 port % - 6FA8 % HD_CS3 3F7 port % - - 7060 % Set HDD1 % - 7064 % Set HDD2 % - - 7120 % Set 320 Lines % - 7124 % Set 312 Lines % - - 7160 % Soft Reset % - 7164 % ??? %; - - - 30 : - 7000 % slot 1 ports % - 7001 % slot 2 ports % - 7002 % slot 1 mem % - 7003 % slot 2 mem % - ; - - 40 : 4000; % kb read % - - 52 : 3000; -- AY_D READ - - 58 : 5000; -- KEMPSTON-Mouse - - [80..FF]: C000; - - 88 : 2000; -- COVOX - 89 : 2000; -- COVOX-Mode - - 8C : 3000; -- AY_D READ - 8D : 2000; -- AY_A WRITE - 8E : 2000; -- AY_D WRITE - - 8F : 2000; -- port for ROM_WRITE - --- 80 : 7F 7F 7F 7F 7F 7F 7F 7F % KBD_DAT %; --- 90 : 7F % PORT FF %; - - 90 : 3030 3031 2032 2033 2034 2035 2036 2037 - 2038 2039 203A 203B 203C 203D 203E 203F; % RAM PAGES % - - B0 : 2020 2021 2022 2023 2024 2025 2026 2027 - 2028 2029 202A 202B 202C 202D 202E 202F; % RAM PAGES % - - [C0..CF]: 2000 % SYS PORTS COPYES %; - - D0 : 2010 2011 2012 2013 2014 2015 2016 2017 - 2018 2019 201A 201B 201C 201D 201E 201F; % RAM PAGES % - E0 : 2041 2041 2041 2041 2041 2041 2041 2041 - 2000 2005 2002 2041 20FF 2000 2000 2041; % ROM PAGES % --- E0 : 41 42 43 44 45 46 47 48 00 05 02 E0 F0 00 00 E8; % ROM PAGES % - F0 : 2000 2001 2002 2003 2004 2005 2006 2007 - 2008 2009 200A 200B 200C 200D 200E 200F; % RAM PAGES % - -END ; diff --git a/src/altera/quartus/acex/DCP.TDF b/src/altera/quartus/acex/DCP.TDF deleted file mode 100644 index d73e33f..0000000 --- a/src/altera/quartus/acex/DCP.TDF +++ /dev/null @@ -1,750 +0,0 @@ - - TITLE "DCP"; - -PARAMETERS - ( - UPDATE = 1 - ); - -INCLUDE "lpm_ram_dp"; --- INCLUDE "DC_PORT2"; - -SUBDESIGN dcp - ( - CLK42 : INPUT; - /RESET : INPUT; - - /RES : OUTPUT; - - CT[2..0] : INPUT; - - CONTINUE : INPUT; - RAS : OUTPUT; - CAS : OUTPUT; - MC_END : OUTPUT; - MC_BEGIN : OUTPUT; - MC_TYPE : OUTPUT; - MC_WRITE : OUTPUT; - - A[15..0] : INPUT; - DI[7..0] : INPUT; - DO[7..0] : OUTPUT; - MA[11..0] : OUTPUT; - MCA[1..0] : OUTPUT; - - TURBO_HAND : INPUT; - CLK_Z80 : OUTPUT; - TURBO : OUTPUT; - - /IO : INPUT; - /RD : INPUT; - /WR : INPUT; - /MR : INPUT; - /RF : INPUT; - /M1 : INPUT; - - /WAIT : OUTPUT; - /IOM : OUTPUT; - /IOMM : OUTPUT; - - MD[7..0] : INPUT; - RA[17..14] : OUTPUT; - PAGE[11..0] : OUTPUT; - - TYPE[3..0] : OUTPUT; - - CS_ROM : OUTPUT; - CS_RAM : OUTPUT; - V_RAM : OUTPUT; - PORT : OUTPUT; --- DOS : OUTPUT; - DOS : INPUT; - - WR_DWG : OUTPUT; - - WR_TM9 : OUTPUT; - WR_AWG : OUTPUT; - RD_KP11 : OUTPUT; - KP11_MIX : OUTPUT; - - REFRESH : INPUT; - - G_LINE[9..0]: INPUT; - GA[9..0] : OUTPUT; - GRAF : OUTPUT; - - SP_SCR : OUTPUT; - SP_SA : OUTPUT; - SCR128 : OUTPUT; - - TEST_R : INPUT; - - HDD_DATA : OUTPUT; - HDD_FLIP : OUTPUT; - RAM : OUTPUT; - BLK_R : OUTPUT; - - PN4Q : OUTPUT; - - ACC_ON : INPUT; -- asselerator state - 1 - present - - DCPP[7..0] : OUTPUT; - - DOUBLE_CAS : INPUT; - - BLK_MEM : INPUT; - - ) -VARIABLE - - CLK21 : NODE; - --- DC : DC_PORT2; - - CLK84 : NODE; - CLK42X : NODE; - - CTZ[1..0] : DFF; - --- CT[2..0] : DFF; - - MEM : LPM_RAM_DP WITH (LPM_WIDTH=16,LPM_WIDTHAD=8,LPM_FILE="DCP.MIF"); - - D[7..0] : NODE; - ADR8_MEM : NODE; - MEM_D[15..0]: NODE; - MEM_WR : NODE; - - DCP_CX : NODE; - SC_LCELL : NODE; - - PG3[5..0] : NODE; - PG0[5..0] : NODE; - MPGS[7..0] : LCELL; - PGS[7..0] : DFF; --- PGS[7..0] : NODE; - - PN[7..0] : DFFE; - SC[7..0] : DFFE; - SYS : DFFE; - CNF[7..0] : DFFE; - AROM16 : DFFE; - TB_SW : DFFE; - - CASH_ON : NODE; - NMI_ENA : NODE; - - DD[7..0] : DFFE; - STARTING : NODE; - --- DOS_ : NODE; --- DOS : NODE; --- DOS_ON_ : NODE; - - MC_RQ : NODE; - MC_END : DFFE; - MC_BEGIN : DFFE; - MC_TYPE : DFFE; - MC_WRITE : DFFE; - RAS : DFFE; - CAS : DFFE; - - MA_[11..0] : DFFE; - MCA[1..0] : DFFE; - - /IOM : DFFE; - /IOMM : DFFE; - /IOMX : DFFE; - /IOMY : DFFE; - - WT_CT[3..0] : DFFE; - W_TAB[3..0] : LCELL; - HDD_W[3..0] : NODE; - /IO_WAIT : NODE; - /MR_WAIT : NODE; - - MEM_RW : NODE; - IO_RW : NODE; - IO_RWM : NODE; - - MA_CT[1..0] : DFFE; - - WR_TM9 : DFFE; - RD_KP11 : DFFE; - - /RES : NODE; - - RFT : DFF; - RFC : DFFE; - - GRAF : DFFE; - GRAF_X : NODE; - GA[9..0] : LCELL; - - SP_SCR : LCELL; - SP_SA : LCELL; - - HDD_FLIP : DFFE; - /IOMZ : DFFE; - - HDD_DATA : NODE; - HDD_ENA : NODE; - - BLK_C : NODE; - /CASH : NODE; - - DCPP[7..0] : DFFE; - - PORTS_X : NODE; - - NO_IO_WAIT : NODE; - - DCP_RES : NODE; - - HDD_A[3..0] : DFF; - - X_ADR[11..0]: LCELL; - X_MA_[11..0]: LCELL; - - WR_AWGX : NODE; - - /IOWR : NODE; - - RA[17..14] : LCELL; - --- SPR_[1..0] : NODE; - SPR_[1..0] : LCELL; - - SYS_ENA : NODE; - -BEGIN - -% - DC.CLK42 = CLK42; - DC./RESET = /RESET; - - DC.A[15..0] = A[15..0]; - - DC./IO = /IO; - DC./WR = /WR; - DC./M1 = /M1; - --- DC./IOM; --- DC./IOMM; --- DC.DCP[7..0]; - - DC.DOS = DOS; - DC.CNF[1..0]= CNF[4..3]; - - DC.SYS = SYS; - --- DC.PORT_X; -% - - --- ============================================================== -% - CT[].clk = CLK42; - - IF CT1 THEN - CT[1..0] = GND; - CT2 = !CT2; - ELSE - CT[1..0] = CT[1..0]+1; - CT2 = CT2; - END IF; -% - - /RES = DFFE(VCC,CLK42,,,CT0); --- ============================================================== - --- TURBO = DFFE((TB_SW & TURBO_HAND),CLK42,,/RESET,CLK_Z80); - TURBO = DFF(DFFE((TB_SW & TURBO_HAND),CLK_Z80,,/RESET,!/RF),CLK42,,); - - CLK84 = CLK42 xor LCELL(CLK42X); - CLK42X = DFF(!CLK42X,CLK84,,); - - CTZ[].clk = CLK84 xor CTZ1; - CTZ[] = CTZ[]+1; - --- CLK_Z80 = CTZ1; - --- CLK_Z80 = DFF((!CLK21 & TURBO) or (TFF((CT2 & CT1),CLK42,,) & !TURBO),!CLK42,,); --- CLK_Z80 = DFF((CLK21 & TURBO) or (TFF((CT2 & CT1),CLK42,,) & !TURBO),!CLK42,,); - - CLK_Z80 = DFF((CLK21 & TURBO) or (TFF((!CT2 & CT1),CLK42,,) & !TURBO),!CLK42,,); --- CLK_Z80 = DFF((!CLK21 & TURBO) or (TFF((!CT2 & CT1),CLK42,,) & !TURBO),!CLK42,,); - --- ============================================================== - CLK21 = DFF((!CT0 xor CT2),CLK42,,); --- === Adress Multiplexer ======================================= - - MA_[].clk = CLK42; --- MA_[].ena = (CT2 xor CT0); - MA_[].ena = CLK21; - - WR_TM9.clk = CLK42; --- WR_TM9.ena = (CT2 xor CT0); - WR_TM9.ena = CLK21; - WR_TM9.prn = /RES; - - RD_KP11.clk = !CLK42; --- RD_KP11.ena = (CT2 xor CT0); - RD_KP11.ena = CLK21; - RD_KP11.prn = /RES; - RD_KP11.d = !(MA_CT[] == 0); - --- WR_AWGX = DFF((WR_TM9 or CLK21),!CLK42,,); - WR_AWGX = DFF(GND,!WR_TM9,,DFF(WR_AWGX,CLK42,,)); - --- WR_TM9 = (!MA_CT1 or (!IO_RW & !PORTS_X)); - WR_TM9 = (!MA_CT1 or (!/IO & !PORTS_X)); - - WR_AWG = WR_AWGX; - - KP11_MIX = TFF(VCC,RD_KP11,,); - - WR_DWG = !MC_BEGIN; --- WR_DWG = DFF(!MC_BEGIN,CLK42,,); --- WR_DWG = LCELL(!MC_BEGIN); - --- MA_CT[].ena = (CT2 xor CT0); - MA_CT[].ena = CLK21; - MA_CT[].clk = CLK42; - - IF !LCELL(CT2 & !CT1) THEN - MA_CT[] = MA_CT[]+1; - ELSE - MA_CT[] = GND; - END IF; - -% - MA_[11..0] bit0 - WG_A5 - bit1 - WG_A6 - bit2 - MUX_KP11, 0 - WG,CMOS 1 - KMPS,TM9 - bit3 - RD/WR 0 - WRITE 1 - READ - bit4 - CS_WG93 or WR_TM9 - bit5 - HDD/CMOS strobe - bit7,6 - 00 - not - 01 - ???? - 10 - HDD1/2 - 11 - CMOS - bit8 - HDD CS1/CS3 or CMOS data/adr - bit9,10,11 - HDD_A[2..0] -% - CASE A[15..14] IS - WHEN 0 => SP_SCR = GND; SP_SA = GND; - WHEN 1 => SP_SCR = !GRAF; SP_SA = GND; - WHEN 2 => SP_SCR = GND; SP_SA = PG3[1]; - WHEN 3 => SP_SCR = !GRAF & LCELL(PG3[] == B"1101X1"); SP_SA = PG3[1]; - END CASE; - - CASE GRAF IS - WHEN 0 => GA[] = (GND,GND,MEM.q[3..0],A[13..10]); --- WHEN 1 => GA[] = (VCC,(G_LINE[8..0] + (B"00000",A[13..10]))); - WHEN 1 => GA[] = (VCC,G_LINE[8..0]); - END CASE; - - CASE (IO_RW,MA_CT0) IS - WHEN 0 => X_ADR[] = (GND,CNF4,PN5,DOS,/WR,A15,A14,A[6..5],A13,A7,A[2]); - WHEN 1 => X_ADR[] = (GND,GND,CNF[4..3],B"01000000"); - WHEN 2 => X_ADR[] = (GND,GA3,GA[1..0],A[9..2]); - WHEN 3 => X_ADR[] = (GND,GND,GA[3..2],MEM.q[7..4],GA[7..4]); - END CASE; - - CASE IO_RW IS - WHEN 0 => X_MA_[] = (HDD_A[2..0],MEM.q[8..6],((MEM.q[5..4]) & (!/IOMZ,!/IOMY)),/WR,MEM.q2,A[6..5]); - WHEN 1 => X_MA_[] = (HDD_A[2..0],B"00000",/WR,VCC,A[6..5]); - END CASE; -% - CASE MA_CT1 IS --- WHEN 0 => MA_[] = X_ADR[]; - WHEN 0 => MA_[] = (GND,X_ADR[10..0]); - WHEN 1 => MA_[] = (HDD_A[2..0],X_MA_[8..4],/WR,X_MA_[3],A[6..5]); - END CASE; -% - - CASE (IO_RW,MA_CT1) IS - WHEN B"00" => - MA_[] = (X_ADR[11..0]); - WHEN B"01" => - MA_[] = (HDD_A[2..0],MEM.q[8..6],((MEM.q[5..4]) & (!/IOMZ,!/IOMY)),/WR,MEM.q2,A[6..5]); - WHEN B"10" => - MA_[] = (X_ADR[11..0]); - WHEN B"11" => - MA_[] = (HDD_A[2..0],B"00000",/WR,VCC,A[6..5]); - END CASE; - - MA[] = MA_[]; - - MCA[].ena = CT2 & CT1; - MCA[].clk = CLK42; - MCA[] = A[1..0]; -- adress for CAS - - HDD_A[].clk = CLK42; - CASE (A[14],A[2..0]) IS - WHEN 0 => HDD_A[] = 0; - WHEN 1 => HDD_A[] = 1; - WHEN 2 => HDD_A[] = 2; - WHEN 3 => HDD_A[] = 3; - WHEN 4 => HDD_A[] = 4; - WHEN 5 => HDD_A[] = 5; - WHEN 6 => HDD_A[] = 0; - WHEN 7 => HDD_A[] = 0; - WHEN 8 => HDD_A[] = 0; - WHEN 9 => HDD_A[] = 0; - WHEN 10 => HDD_A[] = 6; - WHEN 11 => HDD_A[] = 7; - WHEN 12 => HDD_A[] = 14; - WHEN 13 => HDD_A[] = 15; - WHEN 14 => HDD_A[] = 0; - WHEN 15 => HDD_A[] = 0; - END CASE; - - --- === Memory Sinchronizer ====================================== - - -% RF | MEM | RF - ____ | | _______ -/MR \__________/ - | | - _____| | _______ -MC_BEGIN \________/ - | |__ -MC_END ____________/ \_______ - ______ |__________ -MC_TYPE \_____/ - | | -RAS __ _ ___ __ - \__/|\__/ | \__/ - ____ _ __ -CAS \__/ | \__/|\__/ - | | - -% - --- MC_RQ = DFF(((/MR & DFF(/IO,CLK42,,)) or (/RD & /WR)),CLK42,,); - --- MC_RQ = DFF(((/MR & DFFE(GND,!CLK42,,!/IO,CT0)) or (/RD & /WR)),!CLK42,,); - --- MC_RQ = DFF((((/MR or !/RF) & DFF(/IO,CLK42,,/M1)) or (/RD & /WR)),CLK42,,); - --- MC_RQ = DFF((((/MR or !/RF) & IO_RW) or (/RD & /WR)),CLK42,,); - --- MC_RQ = DFF(((MEM_RW & IO_RW) or (/RD & /WR)),CLK42,,); - - MC_RQ = DFF(((MEM_RW & DFF(DFF(IO_RW,CLK42,,!/IO),CLK42,,!/IO)) or (/RD & /WR)),!CLK42,,); - - MC_BEGIN.clk= CLK42; - MC_BEGIN.ena= CT1 & CT2; - MC_BEGIN.d = MC_RQ; - MC_BEGIN.prn= !(/MR & /IO); - - MC_END.clk = CLK42; - MC_END.d = VCC; - MC_END.ena = (CT0 & CT2) & !MC_BEGIN & CONTINUE & !BLK_C; - MC_END.clrn = !(/MR & /IO); - - MC_TYPE.clk = CLK42; - MC_TYPE.ena = CT1 & CT2; - MC_TYPE.d = MC_RQ or MC_END; - MC_TYPE.prn = /RES; - - MC_WRITE.clk= CLK42; - MC_WRITE.ena= CT1 & CT2; - MC_WRITE.d = MC_RQ or CS_RAM or /WR or MC_END; - MC_WRITE.prn= /RES; - - RFT.clk = REFRESH; - RFT.d = GND; - RFT.prn = RFC; --- RFT.prn = VCC; - - RFC.clk = CLK42; - RFC.d = !MC_RQ or RFT; --- RFC.d = !MC_RQ; - RFC.ena = CT1 & CT2; - - RAS.ena = (!(CT1 or (CT0 xor MC_TYPE))) & (!MC_TYPE or !RFC); - CAS.ena = (!(CT1 or (CT0 xor !MC_TYPE))) & (!MC_TYPE or !RFC); --- RAS.ena = (!(CT1 or (CT0 xor MC_TYPE))); --- CAS.ena = (!(CT1 or (CT0 xor !MC_TYPE))); - - RAS.clk = CLK42; CAS.clk = CLK42; - RAS.d = CT2; CAS.d = CT2 or BLK_C; - - RAS.prn = /RES; - CAS.prn = /RES; --- CAS.prn = !BLK_C; - --- /MR_WAIT = (MEM_RW or /CASH or DFF(MC_END,CLK42,!/MR,)) or (!TURBO & !ACC_ON); --- /MR_WAIT = MC_END or LCELL(MEM_RW or /CASH or (!TURBO & !ACC_ON)); - - /MR_WAIT = LCELL(MC_END or MEM_RW or /CASH or (!TURBO & !ACC_ON)); - --- MEM_RW = LCELL(/MR or !/RF); - - -- anti gluk! - MEM_RW = DFF((!/RF or BLK_MEM),!/MR,,LCELL(MEM_RW or !/MR)); - IO_RWM = DFF(!/M1,!/IO,,LCELL(IO_RW or !/IO)); - - IO_RW = DFF(/IO,CLK42,,/M1); - - /IOMM.clk = CLK42; --- /IOMM.ena = CT0 xor CT2; - /IOMM.ena = CLK21; - /IOMM.d = IO_RW or !MC_END or DFF((WT_CT[] == 0),CLK42,,); - /IOMM.prn = /RES; - - /IOMX.clk = CLK42; --- /IOMX.ena = CT0 xor CT2; - /IOMX.ena = CLK21; - /IOMX.d = /IOMM; - /IOMX.prn = /RES; - - /IOMY.clk = CLK42; --- /IOMY.ena = CT0 xor CT2; - /IOMY.ena = CLK21; - /IOMY.d = /IOMX or !MC_END or DFF((WT_CT[] == B"000X"),CLK42,,); --- /IOMY.prn = /RES; - /IOMY.prn = PORTS_X; - - PORTS_X = DFF(((DCPP[7..4] == B"0010") or (DCPP[7..4] == B"0001")),CLK42,,); - - /IOMZ.clk = CLK42; --- /IOMZ.ena = CT0 xor CT2; - /IOMZ.ena = CLK21; - /IOMZ.d = (A8 xor /RD) or /IOMX or !MC_END or DFF((WT_CT[] == B"000X"),CLK42,,); - /IOMZ.prn = PORTS_X; - - HDD_DATA = DFF((HDD_ENA & DFF((MEM.q[11..8] == 0),CLK42,,) & PORTS_X),CLK42,,); - HDD_ENA = (MEM.q[7..5] == B"101"); - - HDD_FLIP.clk = /IOM; - HDD_FLIP.ena = HDD_ENA & DFF((DCPP[] == B"0010XXXX"),CLK42,,); - HDD_FLIP.d = !HDD_FLIP & (MEM.q[11..8] == 0); - HDD_FLIP.clrn = /RESET & DFF(GND,!DOUBLE_CAS,,HDD_FLIP); - - /IOM.clk = CLK42; --- /IOM.ena = CT0 xor CT2; - /IOM.ena = CLK21; - /IOM.d = (/IOMX & /IOM); - /IOM.prn = !/IO & /M1; - --- /IO_WAIT = LCELL(/IO or !/M1 or DFF(DFFE((WT_CT[] == 0),CLK42,,,CLK21),CLK42,,NO_IO_WAIT)); - - /IO_WAIT = LCELL(IO_RWM or DFF(DFFE((WT_CT[] == 0),CLK42,,,CLK21),CLK42,,NO_IO_WAIT)); - - NO_IO_WAIT = !DFF(((A[7..0] == B"111XX1XX") & !TURBO & DOS),CLK42,,); --- NO_IO_WAIT = TURBO; - - WT_CT[].clk = CLK42; --- WT_CT[].ena = (CT2 xor CT0); - WT_CT[].ena = CLK21; --- WT_CT[].ena = CT1; - WT_CT[].prn = MC_END; - - CASE (/IOM,DFF((WT_CT[] == 0),CLK42,,)) IS - WHEN B"1X" => WT_CT[].d = W_TAB[]; - WHEN B"00" => WT_CT[].d = WT_CT[]-1; - WHEN B"01" => WT_CT[].d = GND; - END CASE; - - CASE (TURBO,MEM.q[14..12]) IS - WHEN 0 => W_TAB[] = 2; WHEN 8 => W_TAB[] = 2; - WHEN 1 => W_TAB[] = 2; WHEN 9 => W_TAB[] = 2; - WHEN 2 => W_TAB[] = 1; WHEN 10 => W_TAB[] = 4; - WHEN 3 => W_TAB[] = 1; WHEN 11 => W_TAB[] = 4; - WHEN 4 => W_TAB[] = 1; WHEN 12 => W_TAB[] = 7; - WHEN 5 => W_TAB[] = 2; WHEN 13 => W_TAB[] = 7; --- WHEN 6 => W_TAB[] = 10; WHEN 14 => W_TAB[] = 10; - WHEN 6 => W_TAB[] = 7; WHEN 14 => W_TAB[] = 7; --- WHEN 6 => W_TAB[] = 13; WHEN 14 => W_TAB[] = 13; - WHEN 7 => W_TAB[] = 10; WHEN 15 => W_TAB[] = 10; - END CASE; - - CASE LCELL(MEM.q[11..8] == 0) IS - WHEN 0 => HDD_W[] = 10; -- registers wait - WHEN 1 => HDD_W[] = 4; -- datas wait - END CASE; - - /WAIT = (/IO_WAIT & /MR_WAIT); - - --- === Other Devicese CASHE, ISA, ROM... === - - V_RAM = PN2; -- for ORIGINAL Waits - -IF UPDATE == 1 GENERATE - -- all ROM/RAM switches in main .tdf - BLK_R = SC4; - -- all cashes in main .tdf - /CASH = GND; - -- cashe dir in main .tdf - CASH_ON = GND; -ELSE GENERATE - -- for blk wait - /CASH = DFF((MEM.q[7..4] == 15),!CLK42,BLK_R,); --- when BLK_R = 1 => Other Devices stay Active! - BLK_R = DFF( (LCELL((MEM.q7 & MEM.q6 & RAM) or - (MEM.q7 & LCELL(A14 & A15 & SC4))) & - !DFF(DFF(MC_RQ,CLK42,,!/MR),CLK42,,!/MR)),!CLK42,!/MR,); - CASH_ON = DFFE(A7,(/IO or /RD),/RESET,,DFF((DCPP[] == H"88"),CLK42,,)); -END GENERATE; - - RAM = !LCELL(A14 or A15 or (SC0 & SYS)); - - CS_ROM = LCELL(/MR or !RAM or !/RF); - CS_RAM = LCELL(/MR or RAM or !/RF); - --- ============================================== - --- graf screen enable for pages - - GRAF_X = LCELL(MEM.q[7..4] == B"0101"); - - GRAF.clk = CLK42; - GRAF.ena = (CT0 & CT2); - GRAF.d = GRAF_X; - - BLK_C = LCELL((GRAF_X xor GRAF) & !MC_TYPE); - ------------------------------------------ - - SCR128 = PN3; - - D[] = DI[]; - -- when not IO - reset DCPP! - - DCP_RES = DFF((STARTING & !/IO & /M1),CLK42,,); - - DCPP[].clk = CLK42; - DCPP[].ena = !DFF(MC_END,CLK42,,); - DCPP[].clrn = MC_END & DCP_RES; -- not in/out when START - DCPP[].d = MD[]; - --- DD[].clk = !CLK42; --- DD[].ena = !DFF(MC_END,!CLK42,,); - - DD[].clk = CLK42; - DD[].ena = !DFF(MC_END,CLK42,,); - DD[].clrn = MC_END & DCP_RES; - - CASE LCELL(MD[7..4] == 15) IS - WHEN 0 => DD[].d = MD[]; - WHEN 1 => DD[].d = (VCC,VCC,PG3[]); - END CASE; - --- === Port Decoder ============================================= - - DCP_CX = (DCPP[] == B"1100XXXX"); - SYS_ENA = DFF((DCP_CX & (DCPP[] == B"XXXXX110")),CLK42,,); - --- /IOWR = DFF((/WR or /IO),CLK42,,!/IO); - /IOWR = LCELL(/IO or /WR or !/M1); - - CNF[].ena = SYS_ENA; CNF[].d = (DI[] & DI2) or (CNF[] & !DI2); - AROM16.ena = SYS_ENA; AROM16.d = (DI0 & !DI1) or (AROM16 & DI1); - TB_SW.ena = SYS_ENA; TB_SW.d = (DI0 & DI1) or (TB_SW & !DI1); - SYS.ena = SYS_ENA; SYS.d = !A6; - - SC[].ena = DFF((DCP_CX & (DCPP[] == B"XXXXX000")),CLK42,,) ;SC[].d = DI[]; - PN[].ena = DFF((DCP_CX & (DCPP[] == B"XXXXX001")),CLK42,,) ;PN[].d = DI[]; - - TB_SW.clk = /IOWR; - AROM16.clk = /IOWR; - PN[].clk = /IOWR; - SC[].clk = /IOWR; - SYS.clk = /IOWR; - CNF[].clk = /IOWR; - - AROM16.clrn = /RESET; - TB_SW.prn = /RESET; - SYS.clrn = /RESET; - CNF[].clrn = /RESET; - - SC[].clrn = /RESET & !CNF6; -- Scorpion-OFF - - PN[5..0].clrn = /RESET & !CNF5; -- reset PN5 - PN[7..5].clrn = /RESET & CNF7; -- set Pentagon-512 - - PN4Q = PN4; - --- ==================================== - --- ********** Pages decoder *********** - --- ==================================== - - PG3[] = (!PN7,VCC,LCELL((SC4 & !CNF7) or (CNF7 & PN6)),PN[2..0]); - --- SC0,SC1,SYS,DOS,PN4,AROM16,CASH_ON,NMI_ENA - PG0[] = (VCC,GND, - LCELL(SC0 or !SYS or CASH_ON or !NMI_ENA), - LCELL(((AROM16 & !(SC0 & SYS)) or (CASH_ON & NMI_ENA))), - LCELL((SPR_1 & SC_LCELL) or !SYS or !NMI_ENA), - LCELL((SPR_0 & SC_LCELL) or !SYS or !NMI_ENA)); - --- SC_LCELL = LCELL(!(SC0 & SYS) & !CASH_ON); - SC_LCELL = (!(SC0 & SYS) & !CASH_ON); - - NMI_ENA = VCC; - - SPR_[] = !SC1 & (DOS,(PN4 or !DOS)); -- expansion/dos/basic128/basic48 - - CASE (TEST_R,SYS) IS - WHEN B"X0" => RA[] = (!AROM16,B"000"); -- system 0/1 - WHEN B"01" => RA[] = (!AROM16,GND,SPR_[]); -- expansion/dos/basic - WHEN B"11" => RA[] = (B"001",SPR_0); -- test - END CASE; - --- ==================================== - - CASE A[15..14] IS - WHEN 0 => MPGS[5..0] = PG0[]; - WHEN 1 => MPGS[5..0] = B"101001"; %H"E9"% - WHEN 2 => MPGS[5..0] = B"101010"; %H"EA"% - WHEN 3 => MPGS[5..0] = PG3[]; - END CASE; - MPGS[7..6] = VCC; - --- STARTING = DFF(GND,VCC,/RESET,(/IO or /RD)); - STARTING = LCELL(/RESET & (STARTING or !(/IO or /RD))); - - PGS[].clk = !CLK42; - CASE (LCELL(/IO & !(A14 & A15 & !STARTING)),MC_END) IS - WHEN B"1X" => PGS[] = (VCC,VCC,MPGS[5..0]); - WHEN B"01" => PGS[] = DD[]; - WHEN B"00" => PGS[] = GND; - END CASE; - - MEM_WR = DFFE((DCPP[7] & DCPP[6] & STARTING & DFF(DFF((MC_END & !/WR),CLK42,,),CLK42,,)),CLK42,!/IO,,CT1); - - ADR8_MEM = GND; - - CASE ADR8_MEM IS - WHEN 1 => MEM_D[] = (DI[],MEM.q[7..0]); DO[] = MEM.q[15..8]; - WHEN 0 => MEM_D[] = (MEM.q[15..8],DI[]); DO[] = MEM.q[7..0]; - END CASE; - - MEM.wren = MEM_WR; - MEM.data[] = MEM_D[]; - MEM.wraddress[] = PGS[]; - MEM.wrclock = CLK42; - MEM.wrclken = VCC; - MEM.rden = VCC; - MEM.rdaddress[] = PGS[]; - MEM.rdclock = CLK42; - MEM.rdclken = VCC; --- = MEM.q[]; - - PAGE[] = MEM.q[11..0]; - TYPE[] = MEM.q[15..12]; - - - PORT = !(MEM.q[15..12] == 0) or /IO or (/RD & /WR); - -END; - - diff --git a/src/altera/quartus/acex/KBD.ACF b/src/altera/quartus/acex/KBD.ACF deleted file mode 100644 index 6ef977a..0000000 --- a/src/altera/quartus/acex/KBD.ACF +++ /dev/null @@ -1,568 +0,0 @@ --- --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. --- -CHIP kbd -BEGIN - DEVICE = EP1K30QC208-3; -END; - -DEFAULT_DEVICES -BEGIN - AUTO_DEVICE = EP1K100FC484-1; - AUTO_DEVICE = EP1K100FC256-1; - AUTO_DEVICE = EP1K100QC208-1; - AUTO_DEVICE = EP1K50FC484-1; - AUTO_DEVICE = EP1K50FC256-1; - AUTO_DEVICE = EP1K50QC208-1; - AUTO_DEVICE = EP1K50TC144-1; - AUTO_DEVICE = EP1K30FC256-1; - AUTO_DEVICE = EP1K30QC208-1; - AUTO_DEVICE = EP1K30TC144-1; - ASK_BEFORE_ADDING_EXTRA_DEVICES = ON; -END; - -TIMING_POINT -BEGIN - DEVICE_FOR_TIMING_SYNTHESIS = EP1K30QC208-3; - FREQUENCY = 100MHz; - MAINTAIN_STABLE_SYNTHESIS = OFF; - CUT_ALL_CLEAR_PRESET = ON; - CUT_ALL_BIDIR = ON; -END; - -IGNORED_ASSIGNMENTS -BEGIN - FIT_IGNORE_TIMING = OFF; - DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF; - IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF; - IGNORE_DEVICE_ASSIGNMENTS = OFF; - IGNORE_LC_ASSIGNMENTS = OFF; - IGNORE_PIN_ASSIGNMENTS = OFF; - IGNORE_CHIP_ASSIGNMENTS = OFF; - IGNORE_TIMING_ASSIGNMENTS = OFF; - IGNORE_LOGIC_OPTION_ASSIGNMENTS = OFF; - IGNORE_CLIQUE_ASSIGNMENTS = OFF; -END; - -GLOBAL_PROJECT_DEVICE_OPTIONS -BEGIN - MAX7000B_ENABLE_VREFB = OFF; - MAX7000B_ENABLE_VREFA = OFF; - MAX7000B_VCCIO_IOBANK2 = 3.3V; - MAX7000B_VCCIO_IOBANK1 = 3.3V; - CONFIG_EPROM_PULLUP_RESISTOR = ON; - CONFIG_EPROM_USER_CODE = FFFFFFFF; - FLEX_CONFIGURATION_EPROM = AUTO; - MAX7000AE_ENABLE_JTAG = ON; - MAX7000AE_USER_CODE = FFFFFFFF; - FLEX6000_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX10KA_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = ON; - FLEX10K_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX6000_ENABLE_JTAG = OFF; - CONFIG_SCHEME_FLEX_6000 = PASSIVE_SERIAL; - MULTIVOLT_IO = OFF; - MAX7000S_ENABLE_JTAG = ON; - FLEX10K_ENABLE_LOCK_OUTPUT = OFF; - MAX7000S_USER_CODE = FFFF; - CONFIG_SCHEME_10K = PASSIVE_SERIAL; - FLEX10K_JTAG_USER_CODE = 7F; - ENABLE_INIT_DONE_OUTPUT = OFF; - ENABLE_CHIP_WIDE_OE = OFF; - ENABLE_CHIP_WIDE_RESET = OFF; - nCEO = UNRESERVED; - CLKUSR = UNRESERVED; - ADD17 = UNRESERVED; - ADD16 = UNRESERVED; - ADD15 = UNRESERVED; - ADD14 = UNRESERVED; - ADD13 = UNRESERVED; - ADD0_TO_ADD12 = UNRESERVED; - SDOUT = RESERVED_DRIVES_OUT; - RDCLK = UNRESERVED; - RDYnBUSY = UNRESERVED; - nWS_nRS_nCS_CS = UNRESERVED; - DATA1_TO_DATA7 = UNRESERVED; - DATA0 = RESERVED_TRI_STATED; - FLEX8000_ENABLE_JTAG = OFF; - CONFIG_SCHEME = ACTIVE_SERIAL; - DISABLE_TIME_OUT = OFF; - ENABLE_DCLK_OUTPUT = OFF; - RELEASE_CLEARS = OFF; - AUTO_RESTART = OFF; - USER_CLOCK = OFF; - SECURITY_BIT = OFF; - RESERVED_PINS_PERCENT = 0; - RESERVED_LCELLS_PERCENT = 0; -END; - -GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS -BEGIN - STYLE = FAST; - MULTI_LEVEL_SYNTHESIS_MAX9000 = ON; - AUTO_IMPLEMENT_IN_EAB = OFF; - AUTO_OPEN_DRAIN_PINS = ON; - ONE_HOT_STATE_MACHINE_ENCODING = OFF; - AUTO_REGISTER_PACKING = OFF; - DEVICE_FAMILY = ACEX1K; - AUTO_FAST_IO = OFF; - AUTO_GLOBAL_OE = ON; - AUTO_GLOBAL_PRESET = ON; - AUTO_GLOBAL_CLEAR = ON; - AUTO_GLOBAL_CLOCK = ON; - MULTI_LEVEL_SYNTHESIS_MAX5000_7000 = OFF; - OPTIMIZE_FOR_SPEED = 5; -END; - -COMPILER_PROCESSING_CONFIGURATION -BEGIN - USE_QUARTUS_FITTER = ON; - PRESERVE_ALL_NODE_NAME_SYNONYMS = OFF; - FITTER_SETTINGS = NORMAL; - SMART_RECOMPILE = OFF; - GENERATE_AHDL_TDO_FILE = OFF; - RPT_FILE_USER_ASSIGNMENTS = ON; - RPT_FILE_LCELL_INTERCONNECT = ON; - RPT_FILE_HIERARCHY = ON; - RPT_FILE_EQUATIONS = ON; - LINKED_SNF_EXTRACTOR = OFF; - OPTIMIZE_TIMING_SNF = OFF; - TIMING_SNF_EXTRACTOR = ON; - FUNCTIONAL_SNF_EXTRACTOR = OFF; - DESIGN_DOCTOR_RULES = EPLD; - DESIGN_DOCTOR = OFF; -END; - -COMPILER_INTERFACES_CONFIGURATION -BEGIN - NETLIST_OUTPUT_TIME_SCALE = 0.1ns; - EDIF_INPUT_SHOW_LMF_MAPPING_MESSAGES = OFF; - EDIF_BUS_DELIMITERS = []; - EDIF_FLATTEN_BUS = OFF; - EDIF_OUTPUT_FORCE_0NS_DELAYS = OFF; - EDIF_OUTPUT_INCLUDE_SPECIAL_PRIM = OFF; - EDIF_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - EDIF_OUTPUT_DELAY_CONSTRUCTS = EDO_FILE; - EDIF_OUTPUT_USE_EDC = OFF; - EDIF_INPUT_USE_LMF2 = OFF; - EDIF_INPUT_USE_LMF1 = OFF; - EDIF_OUTPUT_GND = GND; - EDIF_OUTPUT_VCC = VCC; - EDIF_INPUT_GND = GND; - EDIF_INPUT_VCC = VCC; - EDIF_OUTPUT_EDC_FILE = *.edc; - EDIF_INPUT_LMF2 = *.lmf; - EDIF_INPUT_LMF1 = *.lmf; - VHDL_GENERATE_CONFIGURATION_DECLARATION = OFF; - VHDL_OUTPUT_DELAY_CONSTRUCTS = VHO_FILE; - VERILOG_OUTPUT_DELAY_CONSTRUCTS = VO_FILE; - VHDL_FLATTEN_BUS = OFF; - VERILOG_FLATTEN_BUS = OFF; - EDIF_TRUNCATE_HIERARCHY_PATH = OFF; - VHDL_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - VHDL_WRITER_VERSION = VHDL87; - VHDL_READER_VERSION = VHDL87; - SYNOPSYS_MAPPING_EFFORT = MEDIUM; - SYNOPSYS_BOUNDARY_OPTIMIZATION = OFF; - SYNOPSYS_HIERARCHICAL_COMPILATION = ON; - SYNOPSYS_DESIGNWARE = OFF; - SYNOPSYS_COMPILER = DESIGN; - USE_SYNOPSYS_SYNTHESIS = OFF; - VHDL_NETLIST_WRITER = OFF; - VERILOG_NETLIST_WRITER = OFF; - XNF_GENERATE_AHDL_TDX_FILE = ON; - XNF_TRANSLATE_INTERNAL_NODE_NAMES = ON; - XNF_EMULATE_TRI_STATE_BUSES = INTERNAL_LOGIC; - EDIF_OUTPUT_VERSION = 200; - EDIF_NETLIST_WRITER = OFF; -END; - -CUSTOM_DESIGN_DOCTOR_RULES -BEGIN - MASTER_RESET = OFF; - EXPANDER_NETWORKS = ON; - RACE_CONDITIONS = ON; - DELAY_CHAINS = ON; - ASYNCHRONOUS_INPUTS = ON; - PRESET_CLEAR_NETWORKS = ON; - STATIC_HAZARDS_AFTER_SYNTHESIS = OFF; - STATIC_HAZARDS_BEFORE_SYNTHESIS = ON; - MULTI_CLOCK_NETWORKS = ON; - MULTI_LEVEL_CLOCKS = ON; - GATED_CLOCKS = ON; - RIPPLE_CLOCKS = ON; -END; - -SIMULATOR_CONFIGURATION -BEGIN - BIDIR_PIN = STRONG; - END_TIME = 0.0ns; - START_TIME = 0.0ns; - GLITCH_TIME = 0.0ns; - GLITCH = OFF; - OSCILLATION_TIME = 0.0ns; - OSCILLATION = OFF; - CHECK_OUTPUTS = OFF; - SETUP_HOLD = OFF; - USE_DEVICE = OFF; -END; - -TIMING_ANALYZER_CONFIGURATION -BEGIN - ANALYSIS_MODE = REGISTERED_PERFORMANCE; - CUT_OFF_RAM_REGISTERED_WE_PATHS = OFF; - LIST_PATH_FREQUENCY = 10MHz; - LIST_PATH_COUNT = 10; - REGISTERED_PERFORMANCE_OPTIONS = NUMBER_OF_PATHS; - INCLUDE_PATHS_LESS_THAN_VALUE = 214.7483647ms; - INCLUDE_PATHS_LESS_THAN = OFF; - INCLUDE_PATHS_GREATER_THAN_VALUE = 0.0ns; - INCLUDE_PATHS_GREATER_THAN = OFF; - DELAY_MATRIX_OPTIONS = SHOW_ALL_PATHS; - CELL_WIDTH = 18; - LIST_ONLY_LONGEST_PATH = ON; - CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; - CUT_OFF_IO_PIN_FEEDBACK = ON; - AUTO_RECALCULATE = OFF; -END; - -OTHER_CONFIGURATION -BEGIN - LAST_MAXPLUS2_VERSION = 10.0; - EXPLICIT_FAMILY = 1; - ROW_PINS_LCELL_INSERT = ON; - CARRY_OUT_PINS_LCELL_INSERT = OFF; - NORMAL_LCELL_INSERT = ON; - FLEX_10K_52_COLUMNS = 40; - DEFAULT_9K_EXP_PER_LCELL = 1/2; - LOCAL_INTERCONNECT_PER_LAB_PERCENT = 100; - LCELLS_PER_ROW_PERCENT = 100; - FAN_IN_PER_LCELL_PERCENT = 100; - EXP_PER_LCELL_PERCENT = 100; - ROW_PINS_PERCENT = 50; - ORIGINAL_MAXPLUS2_VERSION = 9.6; - COMPILER_DATA = "1,1,0,1,0,0,0,1,1,1,1,0,1,1,1"; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = ON; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.FLEX8000 -BEGIN - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = AUTO; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = AUTO; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = MANUAL; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = MANUAL; -END; - diff --git a/src/altera/quartus/acex/KBD.INC b/src/altera/quartus/acex/KBD.INC deleted file mode 100644 index a6b7f8d..0000000 --- a/src/altera/quartus/acex/KBD.INC +++ /dev/null @@ -1,26 +0,0 @@ --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. - --- MAX+plus II Include File --- Version 10.0 9/14/2000 --- Created: Thu May 03 21:43:31 2001 - -FUNCTION kbd (clk42, clk_k, kbd_cc, kbd_dd, /rf, /io, /iom, /m1, a[15..8], ena, int_ena) - RETURNS (kbo[7..0], kb_reset, kb_f12, kb_ctrl, kb_alt, kb_sh, int); diff --git a/src/altera/quartus/acex/KBD.TDF b/src/altera/quartus/acex/KBD.TDF deleted file mode 100644 index 20e40be..0000000 --- a/src/altera/quartus/acex/KBD.TDF +++ /dev/null @@ -1,180 +0,0 @@ - - TITLE "ZX-Keyboard"; - -INCLUDE "lpm_ram_dq"; - -SUBDESIGN kbd - ( - CLK42 : INPUT; -- full sinc 42MHz - CLK_K : INPUT; -- sinc input 15KHz - KBD_CC : INPUT; -- sinc KBD - KBD_DD : INPUT; -- data KBD - - /RF : INPUT; -- /rfsh - /IO : INPUT; -- /iorq - /IOM : INPUT; - /M1 : INPUT; - - A[15..8] : INPUT; - - KBO[7..0] : OUTPUT; -- output - - KB_RESET : OUTPUT; - - KB_F12 : OUTPUT; - KB_CTRL : OUTPUT; - KB_ALT : OUTPUT; - KB_SH : OUTPUT; - - ENA : INPUT; - INT_ENA : INPUT; - INT : OUTPUT; - ) -VARIABLE - - KB_CT[2..0] : DFF; - KB_D[10..0] : DFF; - KB_OFF : DFFE; - - KB_EXT : DFF; - KB_ALT : DFF; - KB_CTRL : DFF; - KB_SH : DFF; - - KB_CTRL_X : NODE; - KB_ALT_X : NODE; - KB_SH_X : NODE; - KB_XXX : NODE; - KB_RESET : DFF; - RXA[1..0] : DFFE; - - K_CLK : NODE; - KA[15..0] : NODE; - KB_MA[2..0] : DFF; - KB_MXA : NODE; - KDCA[2..0] : LCELL; - - KDD[7..0] : DFF; - KBD[5..0] : DFF; - KD[7..0] : NODE; - KDX[5..0] : DFF; - KDXX[5..0] : DFF; - WR_KBD : NODE; - KB_OFL : NODE; - -BEGIN - - INT = DFF((KB_CT[] == 0),CLK42,,INT_ENA); - --- KB_CT[].clk = DFF(CLK_K,CLK42,,); - KB_CT[].clk = CLK_K; - KB_CT[].prn = DFF(KBD_CC,CLK42,,); - - CASE KB_CT[] IS - WHEN 0 => KB_CT[].d = GND; - WHEN 1,2,3,4,5,6,7 => KB_CT[].d = KB_CT[] - 1; - END CASE; - - KB_D[].clk = DFF(!KBD_CC,CLK42,,); - KB_D[].d = (KBD_DD,KB_D[10..1]); - - KB_OFF.ena = !KB_EXT; - KB_OFF.clk = DFF((KB_CT[] == 0),CLK42,,); - KB_OFF.d = KB_D[] == B"XX11110000X"; - - KB_EXT.clk = DFF((KB_CT[] == 1),CLK42,,); - KB_EXT.d = KB_D[] == B"XX11100000X"; - - KB_CTRL.clk = !KB_CT2; - KB_ALT.clk = !KB_CT2; - KB_SH.clk = !KB_CT2; - - KB_CTRL_X = LCELL(KB_D[] == B"XXXXX1X100X"); - KB_ALT_X = LCELL(KB_D[] == B"XXXXX1X001X"); - KB_SH_X = LCELL(KB_D[] == B"XX0X01X0XXX") & - CASCADE((KB_D[] == B"XXX1XX1X01X") or (KB_D[] == B"XXX0XX0X10X")); - KB_XXX = LCELL(KB_D[] == B"XX000X0XXXX"); - - CASE KB_OFF IS - WHEN 0 => - KB_CTRL.d = (KB_CTRL_X & KB_XXX) or KB_CTRL; - KB_ALT.d = (KB_ALT_X & KB_XXX) or KB_ALT; - KB_SH.d = (KB_SH_X) or KB_SH; - WHEN 1 => - KB_CTRL.d = !(KB_CTRL_X & KB_XXX) & KB_CTRL; - KB_ALT.d = !(KB_ALT_X & KB_XXX) & KB_ALT; - KB_SH.d = !(KB_SH_X) & KB_SH; - END CASE; - - KB_F12 = DFF(!((KB_XXX & LCELL(KB_D[] == B"XXXXX0X111X")) & !KB_OFF), - !KB_CT2,,!(KB_CT[] == 1)); - - KB_RESET.clk = !KB_CT2; - KB_RESET.d = !(KB_ALT_X & (KB_D[] == B"XX011X0XXXX") & !KB_OFF & KB_CTRL & KB_ALT); - KB_RESET.prn = !DFF((KB_CT[] == 1),CLK42,,); - - K_CLK = DFF(/RF,CLK42,,); - - RXA[].ena = VCC; - RXA[].clk = K_CLK; - - CASE DFF((!(KB_CT[] == B"01X") & (RXA[] == 0)),CLK42,,) IS - WHEN B"1" => RXA[] = GND; - WHEN B"0" => RXA[] = (RXA0,!RXA1); - END CASE; - - CASE (DFF((/IO & (RXA[] == 0),CLK42,,)),LCELL(KDD7 & KDD6)) IS - WHEN B"0X" => KA[15..8] = (B"101",KDCA[],B"11"); - WHEN B"10" => KA[15..8] = (B"110000",KDD7,KDD6); - WHEN B"11" => KA[15..8] = KB_D[8..1]; - END CASE; - - KB_MA[].clk = CLK42; - KB_MA[].d = KB_MA[] + 1; - KB_MA[].clrn = !DFF(/IO,CLK42,,); - - KB_MXA = DFF(( (((KB_MA[] == 7) & A15) or ((KB_MA[] == 6) & A14)) - or (((KB_MA[] == 5) & A13) or ((KB_MA[] == 4) & A12)) - or (((KB_MA[] == 3) & A11) or ((KB_MA[] == 2) & A10)) - or (((KB_MA[] == 1) & A9 ) or ((KB_MA[] == 0) & A8 ))),CLK42,,); - - IF !DFF(/IO,CLK42,,) THEN - KDCA[] = KB_MA[]; - ELSE - KDCA[] = KDD[5..3]; - END IF; - - KDD[].clk = RXA0; - KDD[].d = KD[]; - KDD[7..6].prn = !KB_CT2; - - KDXX[].clk = RXA0; - KDXX[].d = !((KD[2..0] == 5),(KD[2..0] == 4), - (KD[2..0] == 3),(KD[2..0] == 2), - (KD[2..0] == 1),(KD[2..0] == 0)); - - KDX[].clk = RXA1; - - CASE KB_OFF IS - WHEN B"0" => KDX[].d = (KD[5..0] & KDXX[]); - WHEN B"1" => KDX[].d = (KD[5..0] or !KDXX[]); - END CASE; - --- ============================== - - WR_KBD = K_CLK or !DFF((KB_CT[] == 2),CLK42,,) or !(RXA[] == 3); - - KD[] = lpm_ram_dq((B"11",KDX[5..0]),KA[15..8],!WR_KBD,CLK42,) - WITH (lpm_width=8,lpm_widthad=8,lpm_file="KBD_INI2.MIF", - lpm_outdata="UNREGISTERED"); - - KBD[].clk = CLK42; - KBD[].prn = DFF(VCC,KB_MA2,(!/IO & ENA),); - --- KBD[].prn = DFF(!/IOM,CLK42,,); - KBD[].d = KBD[] & (KD[5..0] or KB_MXA); - - KBO[] = (VCC,VCC,KBD[]); - -END; - diff --git a/src/altera/quartus/acex/KBD_INI2.MIF b/src/altera/quartus/acex/KBD_INI2.MIF deleted file mode 100644 index 43e7390..0000000 --- a/src/altera/quartus/acex/KBD_INI2.MIF +++ /dev/null @@ -1,167 +0,0 @@ -DEPTH = 256; % Memory depth and width are required % -WIDTH = 8; % Enter a decimal number % - -ADDRESS_RADIX = HEX; % Address and value radixes are optional % -DATA_RADIX = BIN; % Enter BIN, DEC, HEX, or OCT; unless % - % otherwise specified, radixes = HEX % - --- Specify values for addresses, which can be single address or range - -CONTENT - BEGIN -[0..FF] : 11111111; -0 : - 11111111 % .. % - 00100001 % F9 % - 11111111 % .. % - 00011100 % F5 % - 00011010 % F3 % - 00011000 % F1 % - 00011001 % F2 % - 11111111 % F12 % - 11111111 % .. % - 00100000 % F10 % - - 00100010 % F8 % - 00100100 % F6 % - 00011011 % F4 % - 01011000 % Tab % - 10001000 % ~` % - 11111111 % .. % - 11111111 % .. % - 01111001 % Alt % - 11000000 % Left Shift % - 11111111 % .. % - - 11111001 % Ctrl % - 11010000 % 'Q' % - 11011000 % '1' % - 11111111 % .. % - 11111111 % .. % - 11111111 % .. % - 11000001 % 'Z' % - 11001001 % 'S' % - 11001000 % 'A' % - 11010001 % 'W' % - - 11011001 % '2' % - 01110000 % left WIN % - 11111111 % .. % - 11000011 % 'C' % - 11000010 % 'X' % - 11001010 % 'D' % - 11010010 % 'E' % - 11011011 % '4' % - 11011010 % '3' % - 10110000 % Right WIN % - - 11111111 % .. % - 11111000 % ' ' % - 11000100 % 'V' % - 11001011 % 'F' % - 11010100 % 'T' % - 11010011 % 'R' % - 11011100 % '5' % - 10111000 % Right Mouse % - 11111111 % .. % - 11111011 % 'N' % - - 11111100 % 'B' % - 11110100 % 'H' % - 11001100 % 'G' % - 11101100 % 'Y' % - 11100100 % '6' % - 11111111 % .. % - 11111111 % .. % - 11111111 % .. % - 11111010 % 'M' % - 11110011 % 'J' % - - 11101011 % 'U' % - 11100011 % '7' % - 11100010 % '8' % - 11111111 % .. % - 11111111 % .. % - 10111011 % ',' % - 11110010 % 'K' % - 11101010 % 'I' % - 11101001 % 'O' % - 11100000 % '0' % - - 11100001 % '9' % - 11111111 % .. % - 11111111 % .. % - 10111010 % '.' % - 10000100 % '/' % - 11110001 % 'L' % - 10101001 % ';' % - 11101000 % 'P' % - 10110011 % '-' % - 11111111 % .. % - - 11111111 % .. % - 11111111 % .. % - 10101000 % "'" % - 11111111 % .. % - 10101100 % '[' % - 10110001 % '=' % - 11111111 % .. % - 11111111 % .. % - 01011001 % Caps Lock % - 11000000 % Right SHIFT % - - 11110000 % ENTER % - 10101011 % ']' % - 11111111 % .. % - 10001010 % '\' % - 11111111 % .. % - 11111111 % .. % - 11111111 % .. % - 11111111 % .. % - 11111111 % .. % - 11111111 % .. % - - 11111111 % .. % - 11111111 % .. % - 01100000 % Back % - 11111111 % .. % - 11111111 % .. % - 10010010 % End % - 11111111 % .. % - 01011100 % <- % - 10010000 % Home % - 11111111 % .. % - - 11111111 % .. % - 11111111 % .. % - 10010001 % ins % - 01100001 % DEL % - 01100100 % Dn % - 10101010 % grey 5 ; ctrl + I % - 01100010 % -> % - 01100011 % Up % - 01111000 % ESC % - 00111111 % Num % - - 11111111 % F11 % - 10110010 % G+ % - 01011011 % PDn ; caps + 4 % - 10110011 % G- % - 10111100 % G* % - 01011010 % PUp ; caps + 3 % - 00000000 % Scrol Lock % - 11111111 % .. % - 11111111 % .. % - 11111111 % .. % - - 11111111 % .. % - 00100011 % F7 % ; -% !! DATA FOR CAPS !! % -C0 : - 11111101 % Function shift % - 11000000 % Left Shift % - 11111001 % Ctrl % - 11111111 ; % no shift % -END ; - - diff --git a/src/altera/quartus/acex/MOUSE.ACF b/src/altera/quartus/acex/MOUSE.ACF deleted file mode 100644 index ba8c48d..0000000 --- a/src/altera/quartus/acex/MOUSE.ACF +++ /dev/null @@ -1,571 +0,0 @@ --- --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. --- -CHIP mouse -BEGIN - DEVICE = EP1K30QC208-3; -END; - -DEFAULT_DEVICES -BEGIN - AUTO_DEVICE = EP1K100FC484-1; - AUTO_DEVICE = EP1K100FC256-1; - AUTO_DEVICE = EP1K100QC208-1; - AUTO_DEVICE = EP1K50FC484-1; - AUTO_DEVICE = EP1K50FC256-1; - AUTO_DEVICE = EP1K50QC208-1; - AUTO_DEVICE = EP1K50TC144-1; - AUTO_DEVICE = EP1K30FC256-1; - AUTO_DEVICE = EP1K30QC208-1; - AUTO_DEVICE = EP1K30TC144-1; - AUTO_DEVICE = EP1K10FC256-1; - AUTO_DEVICE = EP1K10QC208-1; - AUTO_DEVICE = EP1K10TC144-1; - AUTO_DEVICE = EP1K10TC100-1; - ASK_BEFORE_ADDING_EXTRA_DEVICES = ON; -END; - -TIMING_POINT -BEGIN - DEVICE_FOR_TIMING_SYNTHESIS = EP1K30QC208-3; - FREQUENCY = 200MHz; - MAINTAIN_STABLE_SYNTHESIS = OFF; - CUT_ALL_CLEAR_PRESET = ON; - CUT_ALL_BIDIR = ON; -END; - -IGNORED_ASSIGNMENTS -BEGIN - FIT_IGNORE_TIMING = OFF; - DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF; - IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF; - IGNORE_DEVICE_ASSIGNMENTS = OFF; - IGNORE_LC_ASSIGNMENTS = OFF; - IGNORE_PIN_ASSIGNMENTS = OFF; - IGNORE_CHIP_ASSIGNMENTS = OFF; - IGNORE_TIMING_ASSIGNMENTS = OFF; - IGNORE_LOGIC_OPTION_ASSIGNMENTS = OFF; - IGNORE_CLIQUE_ASSIGNMENTS = OFF; -END; - -GLOBAL_PROJECT_DEVICE_OPTIONS -BEGIN - MAX7000B_ENABLE_VREFB = OFF; - MAX7000B_ENABLE_VREFA = OFF; - MAX7000B_VCCIO_IOBANK2 = 3.3V; - MAX7000B_VCCIO_IOBANK1 = 3.3V; - CONFIG_EPROM_PULLUP_RESISTOR = ON; - CONFIG_EPROM_USER_CODE = FFFFFFFF; - FLEX_CONFIGURATION_EPROM = AUTO; - MAX7000AE_ENABLE_JTAG = ON; - MAX7000AE_USER_CODE = FFFFFFFF; - FLEX6000_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX10KA_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = ON; - FLEX10K_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX6000_ENABLE_JTAG = OFF; - CONFIG_SCHEME_FLEX_6000 = PASSIVE_SERIAL; - MULTIVOLT_IO = OFF; - MAX7000S_ENABLE_JTAG = ON; - FLEX10K_ENABLE_LOCK_OUTPUT = OFF; - MAX7000S_USER_CODE = FFFF; - CONFIG_SCHEME_10K = PASSIVE_SERIAL; - FLEX10K_JTAG_USER_CODE = 7F; - ENABLE_INIT_DONE_OUTPUT = OFF; - ENABLE_CHIP_WIDE_OE = OFF; - ENABLE_CHIP_WIDE_RESET = OFF; - nCEO = UNRESERVED; - CLKUSR = UNRESERVED; - ADD17 = UNRESERVED; - ADD16 = UNRESERVED; - ADD15 = UNRESERVED; - ADD14 = UNRESERVED; - ADD13 = UNRESERVED; - ADD0_TO_ADD12 = UNRESERVED; - SDOUT = RESERVED_DRIVES_OUT; - RDCLK = UNRESERVED; - RDYnBUSY = UNRESERVED; - nWS_nRS_nCS_CS = UNRESERVED; - DATA1_TO_DATA7 = UNRESERVED; - DATA0 = RESERVED_TRI_STATED; - FLEX8000_ENABLE_JTAG = OFF; - CONFIG_SCHEME = ACTIVE_SERIAL; - DISABLE_TIME_OUT = OFF; - ENABLE_DCLK_OUTPUT = OFF; - RELEASE_CLEARS = OFF; - AUTO_RESTART = OFF; - USER_CLOCK = OFF; - SECURITY_BIT = OFF; - RESERVED_PINS_PERCENT = 0; - RESERVED_LCELLS_PERCENT = 0; -END; - -GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS -BEGIN - STYLE = FAST; - MULTI_LEVEL_SYNTHESIS_MAX9000 = ON; - AUTO_IMPLEMENT_IN_EAB = OFF; - AUTO_OPEN_DRAIN_PINS = ON; - ONE_HOT_STATE_MACHINE_ENCODING = OFF; - AUTO_REGISTER_PACKING = OFF; - DEVICE_FAMILY = ACEX1K; - AUTO_FAST_IO = OFF; - AUTO_GLOBAL_OE = ON; - AUTO_GLOBAL_PRESET = ON; - AUTO_GLOBAL_CLEAR = ON; - AUTO_GLOBAL_CLOCK = ON; - MULTI_LEVEL_SYNTHESIS_MAX5000_7000 = OFF; - OPTIMIZE_FOR_SPEED = 5; -END; - -COMPILER_PROCESSING_CONFIGURATION -BEGIN - USE_QUARTUS_FITTER = ON; - PRESERVE_ALL_NODE_NAME_SYNONYMS = OFF; - FITTER_SETTINGS = NORMAL; - SMART_RECOMPILE = OFF; - GENERATE_AHDL_TDO_FILE = OFF; - RPT_FILE_USER_ASSIGNMENTS = ON; - RPT_FILE_LCELL_INTERCONNECT = ON; - RPT_FILE_HIERARCHY = ON; - RPT_FILE_EQUATIONS = ON; - LINKED_SNF_EXTRACTOR = OFF; - OPTIMIZE_TIMING_SNF = OFF; - TIMING_SNF_EXTRACTOR = ON; - FUNCTIONAL_SNF_EXTRACTOR = OFF; - DESIGN_DOCTOR_RULES = EPLD; - DESIGN_DOCTOR = OFF; -END; - -COMPILER_INTERFACES_CONFIGURATION -BEGIN - NETLIST_OUTPUT_TIME_SCALE = 0.1ns; - EDIF_INPUT_SHOW_LMF_MAPPING_MESSAGES = OFF; - EDIF_BUS_DELIMITERS = []; - EDIF_FLATTEN_BUS = OFF; - EDIF_OUTPUT_FORCE_0NS_DELAYS = OFF; - EDIF_OUTPUT_INCLUDE_SPECIAL_PRIM = OFF; - EDIF_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - EDIF_OUTPUT_DELAY_CONSTRUCTS = EDO_FILE; - EDIF_OUTPUT_USE_EDC = OFF; - EDIF_INPUT_USE_LMF2 = OFF; - EDIF_INPUT_USE_LMF1 = OFF; - EDIF_OUTPUT_GND = GND; - EDIF_OUTPUT_VCC = VCC; - EDIF_INPUT_GND = GND; - EDIF_INPUT_VCC = VCC; - EDIF_OUTPUT_EDC_FILE = *.edc; - EDIF_INPUT_LMF2 = *.lmf; - EDIF_INPUT_LMF1 = *.lmf; - VHDL_GENERATE_CONFIGURATION_DECLARATION = OFF; - VHDL_OUTPUT_DELAY_CONSTRUCTS = VHO_FILE; - VERILOG_OUTPUT_DELAY_CONSTRUCTS = VO_FILE; - VHDL_FLATTEN_BUS = OFF; - VERILOG_FLATTEN_BUS = OFF; - EDIF_TRUNCATE_HIERARCHY_PATH = OFF; - VHDL_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - VHDL_WRITER_VERSION = VHDL93; - VHDL_READER_VERSION = VHDL93; - SYNOPSYS_MAPPING_EFFORT = MEDIUM; - SYNOPSYS_BOUNDARY_OPTIMIZATION = OFF; - SYNOPSYS_HIERARCHICAL_COMPILATION = ON; - SYNOPSYS_DESIGNWARE = OFF; - SYNOPSYS_COMPILER = DESIGN; - USE_SYNOPSYS_SYNTHESIS = OFF; - VHDL_NETLIST_WRITER = OFF; - VERILOG_NETLIST_WRITER = OFF; - XNF_GENERATE_AHDL_TDX_FILE = ON; - XNF_TRANSLATE_INTERNAL_NODE_NAMES = ON; - XNF_EMULATE_TRI_STATE_BUSES = INTERNAL_LOGIC; - EDIF_OUTPUT_VERSION = 200; - EDIF_NETLIST_WRITER = OFF; -END; - -CUSTOM_DESIGN_DOCTOR_RULES -BEGIN - MASTER_RESET = OFF; - EXPANDER_NETWORKS = ON; - RACE_CONDITIONS = ON; - DELAY_CHAINS = ON; - ASYNCHRONOUS_INPUTS = ON; - PRESET_CLEAR_NETWORKS = ON; - STATIC_HAZARDS_AFTER_SYNTHESIS = OFF; - STATIC_HAZARDS_BEFORE_SYNTHESIS = ON; - MULTI_CLOCK_NETWORKS = ON; - MULTI_LEVEL_CLOCKS = ON; - GATED_CLOCKS = ON; - RIPPLE_CLOCKS = ON; -END; - -SIMULATOR_CONFIGURATION -BEGIN - END_TIME = 10.0us; - BIDIR_PIN = STRONG; - START_TIME = 0.0ns; - GLITCH_TIME = 0.0ns; - GLITCH = OFF; - OSCILLATION_TIME = 0.0ns; - OSCILLATION = OFF; - CHECK_OUTPUTS = OFF; - SETUP_HOLD = OFF; - USE_DEVICE = OFF; -END; - -TIMING_ANALYZER_CONFIGURATION -BEGIN - CUT_OFF_RAM_REGISTERED_WE_PATHS = OFF; - LIST_PATH_FREQUENCY = 10MHz; - LIST_PATH_COUNT = 10; - REGISTERED_PERFORMANCE_OPTIONS = NUMBER_OF_PATHS; - INCLUDE_PATHS_LESS_THAN_VALUE = 214.7483647ms; - INCLUDE_PATHS_LESS_THAN = OFF; - INCLUDE_PATHS_GREATER_THAN_VALUE = 0.0ns; - INCLUDE_PATHS_GREATER_THAN = OFF; - DELAY_MATRIX_OPTIONS = SHOW_ALL_PATHS; - CELL_WIDTH = 18; - LIST_ONLY_LONGEST_PATH = ON; - CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; - CUT_OFF_IO_PIN_FEEDBACK = ON; - AUTO_RECALCULATE = OFF; - ANALYSIS_MODE = DELAY_MATRIX; -END; - -OTHER_CONFIGURATION -BEGIN - EXPLICIT_FAMILY = 1; - ROW_PINS_LCELL_INSERT = ON; - CARRY_OUT_PINS_LCELL_INSERT = OFF; - NORMAL_LCELL_INSERT = ON; - LAST_MAXPLUS2_VERSION = 10.0; - FLEX_10K_52_COLUMNS = 40; - DEFAULT_9K_EXP_PER_LCELL = 1/2; - LOCAL_INTERCONNECT_PER_LAB_PERCENT = 100; - LCELLS_PER_ROW_PERCENT = 100; - FAN_IN_PER_LCELL_PERCENT = 100; - EXP_PER_LCELL_PERCENT = 100; - ROW_PINS_PERCENT = 50; - ORIGINAL_MAXPLUS2_VERSION = 10.0; - COMPILER_DATA = "1,1,0,1,0,0,0,1,1,1,1,0,1,1,1"; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = ON; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = AUTO; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = AUTO; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = MANUAL; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = MANUAL; -END; - diff --git a/src/altera/quartus/acex/MOUSE.INC b/src/altera/quartus/acex/MOUSE.INC deleted file mode 100644 index 580ab4b..0000000 --- a/src/altera/quartus/acex/MOUSE.INC +++ /dev/null @@ -1,26 +0,0 @@ --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. - --- MAX+plus II Include File --- Version 10.0 9/14/2000 --- Created: Sat Jun 16 17:49:35 2001 - -FUNCTION mouse (mouse_d, clk) - RETURNS (out_x[9..0], out_y[9..0], out_k[1..0], int); diff --git a/src/altera/quartus/acex/MOUSE.MIF b/src/altera/quartus/acex/MOUSE.MIF deleted file mode 100644 index c6f96ef..0000000 --- a/src/altera/quartus/acex/MOUSE.MIF +++ /dev/null @@ -1,65 +0,0 @@ -DEPTH = 256; % Memory depth and width are required % -WIDTH = 16; % Enter a decimal number % - -ADDRESS_RADIX = HEX; % Address and value radixes are optional % -DATA_RADIX = HEX; % Enter BIN, DEC, HEX, or OCT; unless % - % otherwise specified, radixes = HEX % - --- Specify values for addresses, which can be single address or range - -CONTENT -BEGIN - - [0..FF] : 0; - -% - 11 - 1211 - 122211 - 12222211 - 1222222211 - 122222222211 - 1222222211 - 12222221 - 12222221 - 121112221 - 11 12221 - 1 1221 - 111 - - - -% - - 00 : 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0; - 10 : 1 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0; - 20 : 1 2 2 2 1 1 0 0 0 0 0 0 0 0 0 0; - 30 : 1 2 2 2 2 2 1 1 0 0 0 0 0 0 0 0; - 40 : 1 2 2 2 2 2 2 2 1 1 0 0 0 0 0 0; - 50 : 1 2 2 2 2 2 2 2 2 2 1 1 0 0 0 0; - 60 : 1 2 2 2 2 2 2 2 1 1 0 0 0 0 0 0; - E0 : 1 2 2 2 2 2 2 1 0 0 0 0 0 0 0 0; - 70 : 1 2 2 2 2 2 2 1 0 0 0 0 0 0 0 0; - 80 : 1 2 1 1 1 2 2 2 1 0 0 0 0 0 0 0; - 90 : 1 1 0 0 0 1 2 2 2 1 0 0 0 0 0 0; - A0 : 1 0 0 0 0 0 1 2 2 1 0 0 0 0 0 0; - B0 : 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0; - C0 : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; - D0 : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; - E0 : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; - F0 : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; - -% - - 1110 0000 0000 0 00 0000 0000 0000 0000 - 1000 0000 0000 0100 0000 0100 0000 0000 - 1000 1100 1010 0000 1100 1110 0100 1010 - 1110 1010 1100 0100 1010 0100 1010 1100 - 0010 1010 1000 0100 1010 0100 1110 1000 - 0010 1100 1000 0100 1010 0100 1000 1000 - 1110 1000 1000 0100 1010 0010 0110 1000 - 0000 1000 0000 0000 0000 0000 0000 0000 - -% - -END; diff --git a/src/altera/quartus/acex/MOUSE.TDF b/src/altera/quartus/acex/MOUSE.TDF deleted file mode 100644 index bb5770d..0000000 --- a/src/altera/quartus/acex/MOUSE.TDF +++ /dev/null @@ -1,76 +0,0 @@ - - TITLE "Sp-Mouse"; - -INCLUDE "lpm_add_sub"; - -SUBDESIGN mouse - ( - MOUSE_D : INPUT; - CLK : INPUT; - OUT_X[9..0] : OUTPUT; - OUT_Y[9..0] : OUTPUT; - OUT_K[1..0] : OUTPUT; - INT : OUTPUT; - ) -VARIABLE - - SUM_X[9..0] : DFFE; - SUM_Y[9..0] : DFFE; - - CT[3..0] : DFF; - RG[9..0] : DFFE; - STATE[1..0] : DFFE; - RGK[5..0] : DFFE; - - MOUSE_IMP : NODE; - - DDX[7..0] : NODE; - DDY[7..0] : NODE; - -BEGIN - - CT[].clk = CLK; - - MOUSE_IMP = MOUSE_D xor !DFF(MOUSE_D,CLK,,); - - CT[].clrn = MOUSE_IMP; - - IF CT[] == 12 THEN - CT[] = GND; - ELSE - CT[] = CT[]+1; - END IF; - - RG[].clk = CLK; - RG[].ena = (CT[] == 4) or !RG0; - RG[].d = ((MOUSE_D,RG[9..1]) or !RG0); - RG[].prn = VCC; - - STATE[].ena = !RG0; - STATE[].clk = CLK; - - STATE[].d = (STATE0,RG7); - - RGK[].clk = CLK; - RGK[].ena = (RG7 & !RG0); - RGK[].d = RG[6..1]; - - DDX[] = (RGK[1..0],RG[6..1]); - DDY[] = (RGK[3..2],RG[6..1]); - - SUM_X[].ena = LCELL(!RG7 & (STATE[] == 1) & !RG0); - SUM_Y[].ena = LCELL(!RG7 & (STATE[] == 2) & !RG0); - - SUM_X[].clk = CLK; - SUM_Y[].clk = CLK; - - SUM_X[] = SUM_X[] + (DDX7,DDX7,DDX[]); - SUM_Y[] = SUM_Y[] + (DDY7,DDY7,DDY[]); - - OUT_X[] = SUM_X[]; - OUT_Y[] = SUM_Y[]; - OUT_K[] = RGK[5..4]; - - INT = DFF(((STATE[] == 2) & !RG0),CLK,,); - -END; diff --git a/src/altera/quartus/acex/SP2_ACEX.ACF b/src/altera/quartus/acex/SP2_ACEX.ACF deleted file mode 100644 index 063fc3a..0000000 --- a/src/altera/quartus/acex/SP2_ACEX.ACF +++ /dev/null @@ -1,1366 +0,0 @@ --- --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. --- -CHIP SP2_ACEX -BEGIN - DEVICE = EP1K30QC208-3; - |CASXE1 : LOCATION = LC8_B36; - |CASXE0 : LOCATION = LC7_B36; - |CASX_3 : LOCATION = LC6_B36; - |CASX_2 : LOCATION = LC2_B36; - |CASX_1 : LOCATION = LC5_B36; - |CASX_0 : LOCATION = LC1_B36; - "|video2:SVIDEO|V_WRM" : LOCATION = LC8_F18; - "|video2:SVIDEO|V_WEM2" : LOCATION = LC2_F20; - "|video2:SVIDEO|V_WE_R" : LOCATION = LC5_F11; - "|video2:SVIDEO|V_WEMMO" : LOCATION = LC3_F15; - "|video2:SVIDEO|V_WEM" : LOCATION = LC2_F18; - "|video2:SVIDEO|V_WRM2" : LOCATION = LC8_F20; - "|video2:SVIDEO|V_WEMMM" : LOCATION = LC3_F12; - "|video2:SVIDEO|V_WEMMN" : LOCATION = LC2_F12; - "|video2:SVIDEO|V_WE" : LOCATION = LC6_F12; - "|video2:SVIDEO|V_CSX2" : LOCATION = LC5_F4; - "|video2:SVIDEO|V_CSX1" : LOCATION = LC5_F5; - "|video2:SVIDEO|V_CSX0" : LOCATION = LC5_F3; - "|dcp:DECODE|WR_AWGX" : LOCATION = LC2_A15; - "|video2:SVIDEO|V_WEMM" : LOCATION = LC4_F17; - "|video2:SVIDEO|V_WEY2" : LOCATION = LC2_F19; - "|video2:SVIDEO|V_WEY3" : LOCATION = LC2_F14; - "|video2:SVIDEO|V_WEY1" : LOCATION = LC2_F16; - "|video2:SVIDEO|V_WEY0" : LOCATION = LC2_F17; - "|acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_0" : LOCATION = EAB_D; - "|acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_1" : LOCATION = EAB_D; - "|acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_2" : LOCATION = EAB_D; - "|acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_3" : LOCATION = EAB_D; - "|acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_4" : LOCATION = EAB_D; - "|acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_5" : LOCATION = EAB_D; - "|acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_6" : LOCATION = EAB_D; - "|acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_7" : LOCATION = EAB_D; - |V_WRX3 : LOCATION = LC1_F14; - |V_WRX1 : LOCATION = LC1_F16; - |V_WRX0 : LOCATION = LC1_F17; - "|video2:SVIDEO|V_WR_1" : LOCATION = LC8_F16; - "|video2:SVIDEO|V_WR_0" : LOCATION = LC8_F17; - "|ay:AY3|lpm_ram_dq:90|altram:sram|segment0_0" : LOCATION = EAB_E; - "|ay:AY3|lpm_ram_dq:90|altram:sram|segment0_1" : LOCATION = EAB_E; - "|ay:AY3|lpm_ram_dq:90|altram:sram|segment0_2" : LOCATION = EAB_E; - "|ay:AY3|lpm_ram_dq:90|altram:sram|segment0_3" : LOCATION = EAB_E; - "|ay:AY3|lpm_ram_dq:90|altram:sram|segment0_4" : LOCATION = EAB_E; - "|ay:AY3|lpm_ram_dq:90|altram:sram|segment0_5" : LOCATION = EAB_E; - "|ay:AY3|lpm_ram_dq:90|altram:sram|segment0_6" : LOCATION = EAB_E; - "|ay:AY3|lpm_ram_dq:90|altram:sram|segment0_7" : LOCATION = EAB_E; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_0" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_1" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_2" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_3" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_4" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_5" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_6" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_7" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_8" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_9" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_10" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_11" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_12" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_13" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_14" : LOCATION = EAB_C; - "|dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_15" : LOCATION = EAB_C; - "|kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_0" : LOCATION = EAB_B; - "|kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_1" : LOCATION = EAB_B; - "|kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_2" : LOCATION = EAB_B; - "|kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_3" : LOCATION = EAB_B; - "|kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_4" : LOCATION = EAB_B; - "|kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_5" : LOCATION = EAB_B; - "|kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_6" : LOCATION = EAB_B; - "|kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_7" : LOCATION = EAB_B; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_5" : LOCATION = EAB_A; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_6" : LOCATION = EAB_A; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_7" : LOCATION = EAB_A; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_8" : LOCATION = EAB_A; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_9" : LOCATION = EAB_A; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_10" : LOCATION = EAB_A; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_11" : LOCATION = EAB_A; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_12" : LOCATION = EAB_A; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_13" : LOCATION = EAB_A; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_14" : LOCATION = EAB_A; - "|lpm_ram_dp:CBL|altdpram:sram|segment0_15" : LOCATION = EAB_A; - |V_WRX2 : LOCATION = LC1_F19; - "|video2:SVIDEO|V_WR_2" : LOCATION = LC8_F19; - "|video2:SVIDEO|V_WR_3" : LOCATION = LC8_F14; - "|dcp:DECODE|:285" : LOCATION = LC2_A32; - |RASX_0 : LOCATION = LC2_A35; - |RASX_1 : LOCATION = LC2_A34; - |XA3 : BIDIR_PIN = 17; - |XA1 : BIDIR_PIN = 9; - |XA2 : BIDIR_PIN = 200; - |XA0 : BIDIR_PIN = 180; - |VD30 : BIDIR_PIN = 114; - |VD31 : BIDIR_PIN = 136; - |VD32 : BIDIR_PIN = 144; - |VD33 : BIDIR_PIN = 148; - |VD34 : BIDIR_PIN = 149; - |VD35 : BIDIR_PIN = 143; - |VD36 : BIDIR_PIN = 139; - |VD37 : BIDIR_PIN = 128; - |VD20 : BIDIR_PIN = 150; - |VD21 : BIDIR_PIN = 115; - |VD22 : BIDIR_PIN = 135; - |VD23 : BIDIR_PIN = 140; - |VD24 : BIDIR_PIN = 141; - |VD25 : BIDIR_PIN = 147; - |VD26 : BIDIR_PIN = 142; - |VD27 : BIDIR_PIN = 131; - |VD10 : BIDIR_PIN = 104; - |VD11 : BIDIR_PIN = 111; - |VD12 : BIDIR_PIN = 120; - |VD13 : BIDIR_PIN = 127; - |VD14 : BIDIR_PIN = 132; - |VD15 : BIDIR_PIN = 134; - |VD16 : BIDIR_PIN = 133; - |VD17 : BIDIR_PIN = 122; - |VD00 : BIDIR_PIN = 103; - |VD01 : BIDIR_PIN = 113; - |VD02 : BIDIR_PIN = 116; - |VD03 : BIDIR_PIN = 121; - |VD04 : BIDIR_PIN = 126; - |VD05 : BIDIR_PIN = 125; - |VD06 : BIDIR_PIN = 119; - |VD07 : BIDIR_PIN = 112; - |/RESET : BIDIR_PIN = 19; - |MD15 : BIDIR_PIN = 179; - |MD14 : BIDIR_PIN = 187; - |MD12 : BIDIR_PIN = 192; - |MD11 : BIDIR_PIN = 198; - |MD10 : BIDIR_PIN = 204; - |MD9 : BIDIR_PIN = 208; - |MD8 : BIDIR_PIN = 8; - |MD7 : BIDIR_PIN = 161; - |MD6 : BIDIR_PIN = 162; - |MD5 : BIDIR_PIN = 163; - |MD4 : BIDIR_PIN = 164; - |MD3 : BIDIR_PIN = 186; - |MD2 : BIDIR_PIN = 190; - |MD1 : BIDIR_PIN = 193; - |MD0 : BIDIR_PIN = 196; - |D7 : BIDIR_PIN = 61; - |D6 : BIDIR_PIN = 60; - |D5 : BIDIR_PIN = 58; - |D4 : BIDIR_PIN = 57; - |D3 : BIDIR_PIN = 56; - |D2 : BIDIR_PIN = 55; - |D1 : BIDIR_PIN = 54; - |D0 : BIDIR_PIN = 53; - |XACS : OUTPUT_PIN = 169; - |WR_DWG : OUTPUT_PIN = 11; - |WR_COL : OUTPUT_PIN = 157; - |WR_AWG : OUTPUT_PIN = 176; - |/WE : OUTPUT_PIN = 16; - |V_WR3 : OUTPUT_PIN = 88; - |V_WR2 : OUTPUT_PIN = 75; - |V_WR1 : OUTPUT_PIN = 85; - |V_WR0 : OUTPUT_PIN = 83; - |V_CS0 : OUTPUT_PIN = 101; - |V_CS1 : OUTPUT_PIN = 70; - |VA15 : OUTPUT_PIN = 71; - |VA14 : OUTPUT_PIN = 73; - |VA13 : OUTPUT_PIN = 87; - |VA12 : OUTPUT_PIN = 74; - |VA11 : OUTPUT_PIN = 95; - |VA10 : OUTPUT_PIN = 99; - |VA9 : OUTPUT_PIN = 93; - |VA4 : OUTPUT_PIN = 94; - |VA5 : OUTPUT_PIN = 92; - |VA8 : OUTPUT_PIN = 90; - |VA7 : OUTPUT_PIN = 86; - |VA6 : OUTPUT_PIN = 89; - |VA3 : OUTPUT_PIN = 96; - |VA2 : OUTPUT_PIN = 97; - |VA1 : OUTPUT_PIN = 100; - |VA0 : OUTPUT_PIN = 102; - |SXA : OUTPUT_PIN = 7; - |RDXA : OUTPUT_PIN = 173; - |RD_KMPS : OUTPUT_PIN = 10; - |RA17 : OUTPUT_PIN = 67; - |RA16 : OUTPUT_PIN = 68; - |RA15 : OUTPUT_PIN = 69; - |RA14 : OUTPUT_PIN = 65; - |RAS_1 : OUTPUT_PIN = 205; - |RAS_0 : OUTPUT_PIN = 207; - |MA14 : OUTPUT_PIN = 191; - |MA13 : OUTPUT_PIN = 195; - |MA12 : OUTPUT_PIN = 206; - |MA11 : OUTPUT_PIN = 199; - |MA10 : OUTPUT_PIN = 177; - |MA9 : OUTPUT_PIN = 203; - |MA8 : OUTPUT_PIN = 202; - |MA7 : OUTPUT_PIN = 197; - |MA6 : OUTPUT_PIN = 175; - |MA5 : OUTPUT_PIN = 174; - |MA4 : OUTPUT_PIN = 172; - |MA3 : OUTPUT_PIN = 170; - |MA2 : OUTPUT_PIN = 168; - |MA1 : OUTPUT_PIN = 167; - |MA0 : OUTPUT_PIN = 166; - |DAC_WS : OUTPUT_PIN = 159; - |DAC_DATA : OUTPUT_PIN = 158; - |DAC_BCK : OUTPUT_PIN = 160; - |CS_CASH : OUTPUT_PIN = 64; - |CS_ROM : OUTPUT_PIN = 63; - |CLKZ1 : OUTPUT_PIN = 62; - |CAS_3 : OUTPUT_PIN = 15; - |CAS_2 : OUTPUT_PIN = 13; - |CAS_1 : OUTPUT_PIN = 14; - |CAS_0 : OUTPUT_PIN = 12; - |/WAIT : BIDIR_PIN = 18; - |/RF : INPUT_PIN = 25; - |/M1 : INPUT_PIN = 24; - |/WR : INPUT_PIN = 79; - |TG42 : INPUT_PIN = 183; - |/RD : INPUT_PIN = 80; - |/IO : INPUT_PIN = 78; - |/MR : INPUT_PIN = 184; - |/HALT : INPUT_PIN = 182; - |A15 : INPUT_PIN = 47; - |A14 : INPUT_PIN = 46; - |A13 : INPUT_PIN = 45; - |A12 : INPUT_PIN = 44; - |A11 : INPUT_PIN = 41; - |A10 : INPUT_PIN = 40; - |A9 : INPUT_PIN = 39; - |A8 : INPUT_PIN = 38; - |A7 : INPUT_PIN = 37; - |A6 : INPUT_PIN = 36; - |A5 : INPUT_PIN = 31; - |A4 : INPUT_PIN = 30; - |A3 : INPUT_PIN = 29; - |A2 : INPUT_PIN = 28; - |A1 : INPUT_PIN = 27; - |A0 : INPUT_PIN = 26; - |MD13 : BIDIR_PIN = 189; -END; - -DEFAULT_DEVICES -BEGIN - AUTO_DEVICE = EP1K100FC484-1; - AUTO_DEVICE = EP1K100FC256-1; - AUTO_DEVICE = EP1K100QC208-1; - AUTO_DEVICE = EP1K50FC484-1; - AUTO_DEVICE = EP1K50FC256-1; - AUTO_DEVICE = EP1K50QC208-1; - AUTO_DEVICE = EP1K50TC144-1; - AUTO_DEVICE = EP1K30FC256-1; - AUTO_DEVICE = EP1K30QC208-1; - AUTO_DEVICE = EP1K30TC144-1; - ASK_BEFORE_ADDING_EXTRA_DEVICES = ON; -END; - -TIMING_POINT -BEGIN - DEVICE_FOR_TIMING_SYNTHESIS = EP1K30QC208-3; - FREQUENCY = 100MHz; - MAINTAIN_STABLE_SYNTHESIS = OFF; - CUT_ALL_CLEAR_PRESET = ON; - CUT_ALL_BIDIR = ON; -END; - -IGNORED_ASSIGNMENTS -BEGIN - FIT_IGNORE_TIMING = OFF; - DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF; - IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF; - IGNORE_DEVICE_ASSIGNMENTS = OFF; - IGNORE_LC_ASSIGNMENTS = OFF; - IGNORE_PIN_ASSIGNMENTS = OFF; - IGNORE_CHIP_ASSIGNMENTS = OFF; - IGNORE_TIMING_ASSIGNMENTS = OFF; - IGNORE_LOGIC_OPTION_ASSIGNMENTS = OFF; - IGNORE_CLIQUE_ASSIGNMENTS = OFF; -END; - -LOGIC_OPTIONS -BEGIN - |/wait : SLOW_SLEW_RATE = ON; - |wr_dwg : SLOW_SLEW_RATE = ON; - |wr_dwg : INCREASE_INPUT_DELAY = ON; - |wr_dwg : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |RDXA : FAST_IO = ON; - |SXA : FAST_IO = ON; - |VD00 : INCREASE_INPUT_DELAY = ON; - |VD01 : INCREASE_INPUT_DELAY = ON; - |VD02 : INCREASE_INPUT_DELAY = ON; - |VD03 : INCREASE_INPUT_DELAY = ON; - |VD04 : INCREASE_INPUT_DELAY = ON; - |VD05 : INCREASE_INPUT_DELAY = ON; - |VD06 : INCREASE_INPUT_DELAY = ON; - |VD07 : INCREASE_INPUT_DELAY = ON; - |VD10 : INCREASE_INPUT_DELAY = ON; - |VD11 : INCREASE_INPUT_DELAY = ON; - |VD12 : INCREASE_INPUT_DELAY = ON; - |VD13 : INCREASE_INPUT_DELAY = ON; - |VD14 : INCREASE_INPUT_DELAY = ON; - |VD15 : INCREASE_INPUT_DELAY = ON; - |VD16 : INCREASE_INPUT_DELAY = ON; - |VD17 : INCREASE_INPUT_DELAY = ON; - |VD20 : INCREASE_INPUT_DELAY = ON; - |VD21 : INCREASE_INPUT_DELAY = ON; - |VD22 : INCREASE_INPUT_DELAY = ON; - |VD23 : INCREASE_INPUT_DELAY = ON; - |VD24 : INCREASE_INPUT_DELAY = ON; - |VD25 : INCREASE_INPUT_DELAY = ON; - |VD26 : INCREASE_INPUT_DELAY = ON; - |VD27 : INCREASE_INPUT_DELAY = ON; - |VD30 : INCREASE_INPUT_DELAY = ON; - |VD31 : INCREASE_INPUT_DELAY = ON; - |VD32 : INCREASE_INPUT_DELAY = ON; - |VD33 : INCREASE_INPUT_DELAY = ON; - |VD34 : INCREASE_INPUT_DELAY = ON; - |VD35 : INCREASE_INPUT_DELAY = ON; - |VD36 : INCREASE_INPUT_DELAY = ON; - |VD37 : INCREASE_INPUT_DELAY = ON; - |RAS_0 : INCREASE_INPUT_DELAY = ON; - |RAS_1 : INCREASE_INPUT_DELAY = ON; - |CAS_0 : INCREASE_INPUT_DELAY = ON; - |CAS_0 : SLOW_SLEW_RATE = ON; - |CAS_1 : INCREASE_INPUT_DELAY = ON; - |CAS_1 : SLOW_SLEW_RATE = ON; - |CAS_2 : INCREASE_INPUT_DELAY = ON; - |CAS_2 : SLOW_SLEW_RATE = ON; - |CAS_3 : INCREASE_INPUT_DELAY = ON; - |CAS_3 : SLOW_SLEW_RATE = ON; - |RAS_0 : SLOW_SLEW_RATE = ON; - |RAS_1 : SLOW_SLEW_RATE = ON; - |XACS : INCREASE_INPUT_DELAY = ON; - |/wr : INCREASE_INPUT_DELAY = ON; - |/WE : INCREASE_INPUT_DELAY = ON; - |/wait : INCREASE_INPUT_DELAY = ON; - |VA0 : INCREASE_INPUT_DELAY = ON; - |VA1 : INCREASE_INPUT_DELAY = ON; - |VA2 : INCREASE_INPUT_DELAY = ON; - |VA3 : INCREASE_INPUT_DELAY = ON; - |VA4 : INCREASE_INPUT_DELAY = ON; - |VA5 : INCREASE_INPUT_DELAY = ON; - |VA6 : INCREASE_INPUT_DELAY = ON; - |VA7 : INCREASE_INPUT_DELAY = ON; - |VA8 : INCREASE_INPUT_DELAY = ON; - |VA9 : INCREASE_INPUT_DELAY = ON; - |VA10 : INCREASE_INPUT_DELAY = ON; - |VA11 : INCREASE_INPUT_DELAY = ON; - |VA12 : INCREASE_INPUT_DELAY = ON; - |VA13 : INCREASE_INPUT_DELAY = ON; - |VA14 : INCREASE_INPUT_DELAY = ON; - |VA15 : INCREASE_INPUT_DELAY = ON; - |/rf : INCREASE_INPUT_DELAY = ON; - |/reset : INCREASE_INPUT_DELAY = ON; - |/rd : INCREASE_INPUT_DELAY = ON; - |ra14 : INCREASE_INPUT_DELAY = ON; - |ra14 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ra15 : INCREASE_INPUT_DELAY = ON; - |ra15 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ra16 : INCREASE_INPUT_DELAY = ON; - |ra16 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ra17 : INCREASE_INPUT_DELAY = ON; - |ra17 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |/mr : INCREASE_INPUT_DELAY = ON; - |/m1 : INCREASE_INPUT_DELAY = ON; - |ma12 : INCREASE_INPUT_DELAY = ON; - |ma13 : INCREASE_INPUT_DELAY = ON; - |ma14 : INCREASE_INPUT_DELAY = ON; - |ma0 : INCREASE_INPUT_DELAY = ON; - |ma1 : INCREASE_INPUT_DELAY = ON; - |ma2 : INCREASE_INPUT_DELAY = ON; - |ma3 : INCREASE_INPUT_DELAY = ON; - |ma4 : INCREASE_INPUT_DELAY = ON; - |ma5 : INCREASE_INPUT_DELAY = ON; - |ma6 : INCREASE_INPUT_DELAY = ON; - |ma7 : INCREASE_INPUT_DELAY = ON; - |ma8 : INCREASE_INPUT_DELAY = ON; - |ma9 : INCREASE_INPUT_DELAY = ON; - |ma10 : INCREASE_INPUT_DELAY = ON; - |ma11 : INCREASE_INPUT_DELAY = ON; - |/io : INCREASE_INPUT_DELAY = ON; - |/HALT : INCREASE_INPUT_DELAY = ON; - |d0 : INCREASE_INPUT_DELAY = ON; - |d1 : INCREASE_INPUT_DELAY = ON; - |d2 : INCREASE_INPUT_DELAY = ON; - |d3 : INCREASE_INPUT_DELAY = ON; - |d4 : INCREASE_INPUT_DELAY = ON; - |d5 : INCREASE_INPUT_DELAY = ON; - |d6 : INCREASE_INPUT_DELAY = ON; - |d7 : INCREASE_INPUT_DELAY = ON; - |CS_CASH : PCI_IO = OFF; - |CS_CASH : INCREASE_INPUT_DELAY = ON; - |CS_CASH : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |cs_rom : PCI_IO = OFF; - |cs_rom : INCREASE_INPUT_DELAY = ON; - |cs_rom : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |a0 : INCREASE_INPUT_DELAY = ON; - |a1 : INCREASE_INPUT_DELAY = ON; - |a2 : INCREASE_INPUT_DELAY = ON; - |a3 : INCREASE_INPUT_DELAY = ON; - |a4 : INCREASE_INPUT_DELAY = ON; - |a5 : INCREASE_INPUT_DELAY = ON; - |a6 : INCREASE_INPUT_DELAY = ON; - |a7 : INCREASE_INPUT_DELAY = ON; - |A8 : INCREASE_INPUT_DELAY = ON; - |a9 : INCREASE_INPUT_DELAY = ON; - |A10 : INCREASE_INPUT_DELAY = ON; - |a11 : INCREASE_INPUT_DELAY = ON; - |A12 : INCREASE_INPUT_DELAY = ON; - |A13 : INCREASE_INPUT_DELAY = ON; - |A14 : INCREASE_INPUT_DELAY = ON; - |A15 : INCREASE_INPUT_DELAY = ON; - |md0 : INCREASE_INPUT_DELAY = ON; - |md1 : INCREASE_INPUT_DELAY = ON; - |md2 : INCREASE_INPUT_DELAY = ON; - |md3 : INCREASE_INPUT_DELAY = ON; - |md4 : INCREASE_INPUT_DELAY = ON; - |md5 : INCREASE_INPUT_DELAY = ON; - |md6 : INCREASE_INPUT_DELAY = ON; - |md7 : INCREASE_INPUT_DELAY = ON; - |md8 : INCREASE_INPUT_DELAY = ON; - |md9 : INCREASE_INPUT_DELAY = ON; - |md10 : INCREASE_INPUT_DELAY = ON; - |md11 : INCREASE_INPUT_DELAY = ON; - |md12 : INCREASE_INPUT_DELAY = ON; - |md13 : INCREASE_INPUT_DELAY = ON; - |md14 : INCREASE_INPUT_DELAY = ON; - |md15 : INCREASE_INPUT_DELAY = ON; - |wr_awg : SLOW_SLEW_RATE = OFF; - |XA0 : INCREASE_INPUT_DELAY = ON; - |XA1 : INCREASE_INPUT_DELAY = ON; - |XA2 : INCREASE_INPUT_DELAY = ON; - |XA3 : INCREASE_INPUT_DELAY = ON; - |ma0 : SLOW_SLEW_RATE = ON; - |ma1 : SLOW_SLEW_RATE = ON; - |ma2 : SLOW_SLEW_RATE = ON; - |ma3 : SLOW_SLEW_RATE = ON; - |ma4 : SLOW_SLEW_RATE = ON; - |ma5 : SLOW_SLEW_RATE = ON; - |ma6 : SLOW_SLEW_RATE = ON; - |ma7 : SLOW_SLEW_RATE = ON; - |ma8 : SLOW_SLEW_RATE = ON; - |ma9 : SLOW_SLEW_RATE = ON; - |ma10 : SLOW_SLEW_RATE = ON; - |ma11 : SLOW_SLEW_RATE = ON; - |VD00 : SLOW_SLEW_RATE = OFF; - |VD01 : SLOW_SLEW_RATE = OFF; - |VD02 : SLOW_SLEW_RATE = OFF; - |VD03 : SLOW_SLEW_RATE = OFF; - |VD04 : SLOW_SLEW_RATE = OFF; - |VD05 : SLOW_SLEW_RATE = OFF; - |VD06 : SLOW_SLEW_RATE = OFF; - |VD07 : SLOW_SLEW_RATE = OFF; - |VD10 : SLOW_SLEW_RATE = OFF; - |VD11 : SLOW_SLEW_RATE = OFF; - |VD12 : SLOW_SLEW_RATE = OFF; - |VD13 : SLOW_SLEW_RATE = OFF; - |VD14 : SLOW_SLEW_RATE = OFF; - |VD15 : SLOW_SLEW_RATE = OFF; - |VD16 : SLOW_SLEW_RATE = OFF; - |VD17 : SLOW_SLEW_RATE = OFF; - |VD20 : SLOW_SLEW_RATE = OFF; - |VD21 : SLOW_SLEW_RATE = OFF; - |VD22 : SLOW_SLEW_RATE = OFF; - |VD23 : SLOW_SLEW_RATE = OFF; - |VD24 : SLOW_SLEW_RATE = OFF; - |VD25 : SLOW_SLEW_RATE = OFF; - |VD26 : SLOW_SLEW_RATE = OFF; - |VD27 : SLOW_SLEW_RATE = OFF; - |VD30 : SLOW_SLEW_RATE = OFF; - |VD31 : SLOW_SLEW_RATE = OFF; - |VD32 : SLOW_SLEW_RATE = OFF; - |VD33 : SLOW_SLEW_RATE = OFF; - |VD34 : SLOW_SLEW_RATE = OFF; - |VD35 : SLOW_SLEW_RATE = OFF; - |VD36 : SLOW_SLEW_RATE = OFF; - |VD37 : SLOW_SLEW_RATE = OFF; - |VA0 : PCI_IO = OFF; - |VA1 : PCI_IO = OFF; - |VA2 : PCI_IO = OFF; - |VA3 : PCI_IO = OFF; - |VA4 : PCI_IO = OFF; - |VA6 : PCI_IO = OFF; - |VA5 : PCI_IO = OFF; - |VA7 : PCI_IO = OFF; - |VA8 : PCI_IO = OFF; - |VA9 : PCI_IO = OFF; - |VA10 : PCI_IO = OFF; - |VA11 : PCI_IO = OFF; - |VA12 : PCI_IO = OFF; - |VA13 : PCI_IO = OFF; - |VA14 : PCI_IO = OFF; - |VA15 : PCI_IO = OFF; - |VD00 : PCI_IO = OFF; - |VD01 : PCI_IO = OFF; - |VD02 : PCI_IO = OFF; - |VD03 : PCI_IO = OFF; - |VD04 : PCI_IO = OFF; - |VD05 : PCI_IO = OFF; - |VD06 : PCI_IO = OFF; - |VD07 : PCI_IO = OFF; - |VD10 : PCI_IO = OFF; - |VD11 : PCI_IO = OFF; - |VD12 : PCI_IO = OFF; - |VD13 : PCI_IO = OFF; - |VD14 : PCI_IO = OFF; - |VD15 : PCI_IO = OFF; - |VD16 : PCI_IO = OFF; - |VD17 : PCI_IO = OFF; - |VD20 : PCI_IO = OFF; - |VD21 : PCI_IO = OFF; - |VD22 : PCI_IO = OFF; - |VD23 : PCI_IO = OFF; - |VD24 : PCI_IO = OFF; - |VD25 : PCI_IO = OFF; - |VD26 : PCI_IO = OFF; - |VD27 : PCI_IO = OFF; - |VD30 : PCI_IO = OFF; - |VD31 : PCI_IO = OFF; - |VD32 : PCI_IO = OFF; - |VD33 : PCI_IO = OFF; - |VD34 : PCI_IO = OFF; - |VD35 : PCI_IO = OFF; - |VD36 : PCI_IO = OFF; - |VD37 : PCI_IO = OFF; - |WR_COL : SLOW_SLEW_RATE = ON; - |VA0 : SLOW_SLEW_RATE = ON; - |VA1 : SLOW_SLEW_RATE = ON; - |VA2 : SLOW_SLEW_RATE = ON; - |VA3 : SLOW_SLEW_RATE = ON; - |VA4 : SLOW_SLEW_RATE = ON; - |VA5 : SLOW_SLEW_RATE = ON; - |VA6 : SLOW_SLEW_RATE = ON; - |VA7 : SLOW_SLEW_RATE = ON; - |VA8 : SLOW_SLEW_RATE = ON; - |VA9 : SLOW_SLEW_RATE = ON; - |VA10 : SLOW_SLEW_RATE = ON; - |VA11 : SLOW_SLEW_RATE = ON; - |VA12 : SLOW_SLEW_RATE = ON; - |VA13 : SLOW_SLEW_RATE = ON; - |VA14 : SLOW_SLEW_RATE = ON; - |VA15 : SLOW_SLEW_RATE = ON; - |V_WR0 : SLOW_SLEW_RATE = OFF; - |V_WR1 : SLOW_SLEW_RATE = OFF; - |V_WR2 : SLOW_SLEW_RATE = OFF; - |V_WR3 : SLOW_SLEW_RATE = OFF; - |XA0 : SLOW_SLEW_RATE = ON; - |XA1 : SLOW_SLEW_RATE = ON; - |XA2 : SLOW_SLEW_RATE = ON; - |XA3 : SLOW_SLEW_RATE = ON; - |XACS : SLOW_SLEW_RATE = ON; - |/wait : PCI_IO = OFF; - |SXA : SLOW_SLEW_RATE = ON; - |/rf : PCI_IO = OFF; - |/reset : PCI_IO = OFF; - |RDXA : SLOW_SLEW_RATE = ON; - |/rd : PCI_IO = OFF; - |/m1 : PCI_IO = OFF; - |/mr : PCI_IO = OFF; - |/io : PCI_IO = OFF; - |/HALT : PCI_IO = OFF; - |/WE : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |/WE : SLOW_SLEW_RATE = ON; - |RAS_0 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |RAS_1 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |CAS_0 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |CAS_1 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |CAS_2 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |CAS_3 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma0 : PCI_IO = OFF; - |ma1 : FAST_IO = ON; - |ma2 : FAST_IO = ON; - |ma3 : FAST_IO = ON; - |ma4 : FAST_IO = ON; - |ma5 : FAST_IO = ON; - |ma6 : FAST_IO = ON; - |ma7 : FAST_IO = ON; - |ma8 : FAST_IO = ON; - |ma9 : FAST_IO = ON; - |ma10 : FAST_IO = ON; - |ma11 : FAST_IO = ON; - |ma1 : PCI_IO = OFF; - |ma2 : PCI_IO = OFF; - |ma3 : PCI_IO = OFF; - |ma4 : PCI_IO = OFF; - |ma5 : PCI_IO = OFF; - |ma6 : PCI_IO = OFF; - |ma7 : PCI_IO = OFF; - |ma8 : PCI_IO = OFF; - |ma9 : PCI_IO = OFF; - |ma10 : PCI_IO = OFF; - |ma11 : PCI_IO = OFF; - |ma12 : PCI_IO = OFF; - |ma12 : SLOW_SLEW_RATE = ON; - |ma13 : PCI_IO = OFF; - |ma13 : SLOW_SLEW_RATE = ON; - |ma14 : PCI_IO = OFF; - |ma14 : SLOW_SLEW_RATE = ON; - |SXA : PCI_IO = OFF; - |RDXA : PCI_IO = OFF; - |RDXA : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |/mr : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |/m1 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |/rd : SLOW_SLEW_RATE = ON; - |wr_awg : PCI_IO = OFF; - |wr_awg : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ra14 : PCI_IO = OFF; - |ra14 : SLOW_SLEW_RATE = ON; - |ra15 : PCI_IO = OFF; - |ra15 : SLOW_SLEW_RATE = ON; - |ra16 : PCI_IO = OFF; - |ra16 : SLOW_SLEW_RATE = ON; - |ra17 : PCI_IO = OFF; - |ra17 : SLOW_SLEW_RATE = ON; - |CS_CASH : SLOW_SLEW_RATE = ON; - |cs_rom : SLOW_SLEW_RATE = ON; - |/WE : PCI_IO = OFF; - |RAS_0 : PCI_IO = OFF; - |RAS_1 : PCI_IO = OFF; - |CAS_0 : PCI_IO = OFF; - |CAS_1 : PCI_IO = OFF; - |CAS_2 : PCI_IO = OFF; - |CAS_3 : PCI_IO = OFF; - |V_WR0 : PCI_IO = OFF; - |V_WR1 : PCI_IO = OFF; - |V_WR2 : PCI_IO = OFF; - |V_WR3 : PCI_IO = OFF; - |v_cs0 : PCI_IO = OFF; - |v_cs1 : PCI_IO = OFF; - |XACS : PCI_IO = OFF; - |/wr : PCI_IO = OFF; - |XA0 : PCI_IO = OFF; - |XA1 : PCI_IO = OFF; - |XA2 : PCI_IO = OFF; - |XA3 : PCI_IO = OFF; - |TG42 : PCI_IO = OFF; - |d0 : PCI_IO = OFF; - |d1 : PCI_IO = OFF; - |d2 : PCI_IO = OFF; - |d3 : PCI_IO = OFF; - |d4 : PCI_IO = OFF; - |d5 : PCI_IO = OFF; - |d6 : PCI_IO = OFF; - |d7 : PCI_IO = OFF; - |md0 : PCI_IO = OFF; - |md1 : PCI_IO = OFF; - |md2 : PCI_IO = OFF; - |md3 : PCI_IO = OFF; - |md4 : PCI_IO = OFF; - |md5 : PCI_IO = OFF; - |md6 : PCI_IO = OFF; - |md7 : PCI_IO = OFF; - |md8 : PCI_IO = OFF; - |md9 : PCI_IO = OFF; - |md10 : PCI_IO = OFF; - |md11 : PCI_IO = OFF; - |md12 : PCI_IO = OFF; - |md13 : PCI_IO = OFF; - |md14 : PCI_IO = OFF; - |md15 : PCI_IO = OFF; - |a0 : PCI_IO = OFF; - |a1 : PCI_IO = OFF; - |a2 : PCI_IO = OFF; - |a3 : PCI_IO = OFF; - |a4 : PCI_IO = OFF; - |a5 : PCI_IO = OFF; - |a6 : PCI_IO = OFF; - |A8 : PCI_IO = OFF; - |a7 : PCI_IO = OFF; - |A10 : PCI_IO = OFF; - |a9 : PCI_IO = OFF; - |a11 : PCI_IO = OFF; - |A12 : PCI_IO = OFF; - |A13 : PCI_IO = OFF; - |A14 : PCI_IO = OFF; - |A15 : PCI_IO = OFF; - |/reset : SLOW_SLEW_RATE = ON; - |/rf : SLOW_SLEW_RATE = ON; - |a0 : SLOW_SLEW_RATE = ON; - |a1 : SLOW_SLEW_RATE = ON; - |a2 : SLOW_SLEW_RATE = ON; - |a3 : SLOW_SLEW_RATE = ON; - |a4 : SLOW_SLEW_RATE = ON; - |a5 : SLOW_SLEW_RATE = ON; - |a6 : SLOW_SLEW_RATE = ON; - |a7 : SLOW_SLEW_RATE = ON; - |a8 : SLOW_SLEW_RATE = ON; - |a9 : SLOW_SLEW_RATE = ON; - |a10 : SLOW_SLEW_RATE = ON; - |a11 : SLOW_SLEW_RATE = ON; - |A12 : SLOW_SLEW_RATE = ON; - |A13 : SLOW_SLEW_RATE = ON; - |A14 : SLOW_SLEW_RATE = ON; - |A15 : SLOW_SLEW_RATE = ON; - |/mr : SLOW_SLEW_RATE = ON; - |/m1 : SLOW_SLEW_RATE = ON; - |/HALT : SLOW_SLEW_RATE = ON; - |/io : SLOW_SLEW_RATE = ON; - |d0 : SLOW_SLEW_RATE = ON; - |d1 : SLOW_SLEW_RATE = ON; - |d2 : SLOW_SLEW_RATE = ON; - |d3 : SLOW_SLEW_RATE = ON; - |d4 : SLOW_SLEW_RATE = ON; - |d5 : SLOW_SLEW_RATE = ON; - |d6 : SLOW_SLEW_RATE = ON; - |d7 : SLOW_SLEW_RATE = ON; - |DAC_BCK : SLOW_SLEW_RATE = ON; - |DAC_DATA : SLOW_SLEW_RATE = ON; - |DAC_WS : SLOW_SLEW_RATE = ON; - |WR_COL : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |WR_COL : FAST_IO = ON; - |v_cs0 : SLOW_SLEW_RATE = ON; - |v_cs1 : SLOW_SLEW_RATE = ON; - |ma0 : FAST_IO = ON; - |ma0 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma1 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma2 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma3 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma4 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma5 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma6 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma7 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma8 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma9 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma10 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma11 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma12 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma13 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |ma14 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md0 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md0 : SLOW_SLEW_RATE = ON; - |md1 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md1 : SLOW_SLEW_RATE = ON; - |md2 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md2 : SLOW_SLEW_RATE = ON; - |md3 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md3 : SLOW_SLEW_RATE = ON; - |md4 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md4 : SLOW_SLEW_RATE = ON; - |md5 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md5 : SLOW_SLEW_RATE = ON; - |md6 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md6 : SLOW_SLEW_RATE = ON; - |md7 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md7 : SLOW_SLEW_RATE = ON; - |md8 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md8 : SLOW_SLEW_RATE = ON; - |md9 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md9 : SLOW_SLEW_RATE = ON; - |md10 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md10 : SLOW_SLEW_RATE = ON; - |md11 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md11 : SLOW_SLEW_RATE = ON; - |md12 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md12 : SLOW_SLEW_RATE = ON; - |md13 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md13 : SLOW_SLEW_RATE = ON; - |md14 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md14 : SLOW_SLEW_RATE = ON; - |md15 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |md15 : SLOW_SLEW_RATE = ON; - "|video2:SVIDEO|SVA12" : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON; - "|video2:SVIDEO|SVA11" : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON; - "|video2:SVIDEO|SVA10" : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON; - "|video2:SVIDEO|SVA0" : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON; - "|video2:SVIDEO|SVA1" : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON; - "|video2:SVIDEO|SVA2" : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON; - "|video2:SVIDEO|SVA3" : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON; - "|video2:SVIDEO|SVA4" : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON; - "|video2:SVIDEO|SVA5" : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON; - |v_cs0 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |v_cs1 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD00 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD01 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD02 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD03 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD04 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD05 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD06 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD07 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD10 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD11 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD12 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD13 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD14 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD15 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD16 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD17 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD20 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD21 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD22 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD23 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD24 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD25 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD26 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD27 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD30 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD31 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD32 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD33 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD34 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD35 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD36 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VD37 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |CLKZ1 : SLOW_SLEW_RATE = OFF; - "|video2:SVIDEO|D_PIC00" : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - "|video2:SVIDEO|D_PIC01" : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - "|video2:SVIDEO|D_PIC02" : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - "|video2:SVIDEO|D_PIC03" : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - "|video2:SVIDEO|D_PIC04" : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - "|video2:SVIDEO|D_PIC05" : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - "|video2:SVIDEO|D_PIC06" : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - "|video2:SVIDEO|D_PIC07" : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA0 : FAST_IO = ON; - |VA1 : FAST_IO = ON; - |VA2 : FAST_IO = ON; - |VA3 : FAST_IO = ON; - |VA4 : FAST_IO = ON; - |VA5 : FAST_IO = ON; - |VA6 : FAST_IO = ON; - |VA7 : FAST_IO = ON; - |VA8 : FAST_IO = ON; - |VA9 : FAST_IO = ON; - |VA10 : FAST_IO = ON; - |VA11 : FAST_IO = ON; - |VA12 : FAST_IO = ON; - |VA13 : FAST_IO = ON; - |VA14 : FAST_IO = ON; - |VA15 : FAST_IO = ON; - |V_WR0 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |V_WR1 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |V_WR2 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |V_WR3 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA0 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA1 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA2 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA3 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA4 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA5 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA6 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA7 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA8 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA9 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA10 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA11 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA12 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA13 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA14 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; - |VA15 : INSERT_ADDITIONAL_LOGIC_CELL = OFF; -END; - -GLOBAL_PROJECT_DEVICE_OPTIONS -BEGIN - MULTIVOLT_IO = ON; - FLEX10KA_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - RELEASE_CLEARS = ON; - AUTO_RESTART = ON; - MAX7000B_ENABLE_VREFB = OFF; - MAX7000B_ENABLE_VREFA = OFF; - MAX7000B_VCCIO_IOBANK2 = 3.3V; - MAX7000B_VCCIO_IOBANK1 = 3.3V; - CONFIG_EPROM_PULLUP_RESISTOR = ON; - CONFIG_EPROM_USER_CODE = FFFFFFFF; - FLEX_CONFIGURATION_EPROM = AUTO; - MAX7000AE_ENABLE_JTAG = ON; - MAX7000AE_USER_CODE = FFFFFFFF; - FLEX6000_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX10K_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX6000_ENABLE_JTAG = OFF; - CONFIG_SCHEME_FLEX_6000 = PASSIVE_SERIAL; - MAX7000S_ENABLE_JTAG = ON; - FLEX10K_ENABLE_LOCK_OUTPUT = OFF; - MAX7000S_USER_CODE = FFFF; - CONFIG_SCHEME_10K = PASSIVE_SERIAL; - FLEX10K_JTAG_USER_CODE = 7F; - ENABLE_INIT_DONE_OUTPUT = OFF; - ENABLE_CHIP_WIDE_OE = OFF; - ENABLE_CHIP_WIDE_RESET = OFF; - nCEO = UNRESERVED; - CLKUSR = UNRESERVED; - ADD17 = UNRESERVED; - ADD16 = UNRESERVED; - ADD15 = UNRESERVED; - ADD14 = UNRESERVED; - ADD13 = UNRESERVED; - ADD0_TO_ADD12 = UNRESERVED; - SDOUT = RESERVED_DRIVES_OUT; - RDCLK = UNRESERVED; - RDYnBUSY = UNRESERVED; - nWS_nRS_nCS_CS = UNRESERVED; - DATA1_TO_DATA7 = UNRESERVED; - DATA0 = RESERVED_TRI_STATED; - FLEX8000_ENABLE_JTAG = OFF; - CONFIG_SCHEME = ACTIVE_SERIAL; - DISABLE_TIME_OUT = OFF; - ENABLE_DCLK_OUTPUT = OFF; - USER_CLOCK = OFF; - SECURITY_BIT = OFF; - RESERVED_PINS_PERCENT = 0; - RESERVED_LCELLS_PERCENT = 0; -END; - -GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS -BEGIN - STYLE = FAST; - OPTIMIZE_FOR_SPEED = 5; - DEVICE_FAMILY = ACEX1K; - MULTI_LEVEL_SYNTHESIS_MAX9000 = ON; - AUTO_IMPLEMENT_IN_EAB = OFF; - AUTO_OPEN_DRAIN_PINS = ON; - ONE_HOT_STATE_MACHINE_ENCODING = OFF; - AUTO_REGISTER_PACKING = OFF; - AUTO_FAST_IO = OFF; - AUTO_GLOBAL_OE = ON; - AUTO_GLOBAL_PRESET = ON; - AUTO_GLOBAL_CLEAR = ON; - AUTO_GLOBAL_CLOCK = ON; - MULTI_LEVEL_SYNTHESIS_MAX5000_7000 = OFF; -END; - -COMPILER_PROCESSING_CONFIGURATION -BEGIN - SMART_RECOMPILE = OFF; - FITTER_SETTINGS = CUSTOM; - USE_QUARTUS_FITTER = OFF; - DESIGN_DOCTOR_RULES = CUSTOM; - RPT_FILE_LCELL_INTERCONNECT = OFF; - RPT_FILE_HIERARCHY = OFF; - DESIGN_DOCTOR = OFF; - PRESERVE_ALL_NODE_NAME_SYNONYMS = OFF; - GENERATE_AHDL_TDO_FILE = OFF; - RPT_FILE_USER_ASSIGNMENTS = ON; - RPT_FILE_EQUATIONS = ON; - LINKED_SNF_EXTRACTOR = OFF; - OPTIMIZE_TIMING_SNF = OFF; - TIMING_SNF_EXTRACTOR = ON; - FUNCTIONAL_SNF_EXTRACTOR = OFF; -END; - -COMPILER_INTERFACES_CONFIGURATION -BEGIN - NETLIST_OUTPUT_TIME_SCALE = 0.1ns; - EDIF_INPUT_SHOW_LMF_MAPPING_MESSAGES = OFF; - EDIF_BUS_DELIMITERS = []; - EDIF_FLATTEN_BUS = OFF; - EDIF_OUTPUT_FORCE_0NS_DELAYS = OFF; - EDIF_OUTPUT_INCLUDE_SPECIAL_PRIM = OFF; - EDIF_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - EDIF_OUTPUT_DELAY_CONSTRUCTS = EDO_FILE; - EDIF_OUTPUT_USE_EDC = OFF; - EDIF_INPUT_USE_LMF2 = OFF; - EDIF_INPUT_USE_LMF1 = OFF; - EDIF_OUTPUT_GND = GND; - EDIF_OUTPUT_VCC = VCC; - EDIF_INPUT_GND = GND; - EDIF_INPUT_VCC = VCC; - EDIF_OUTPUT_EDC_FILE = *.edc; - EDIF_INPUT_LMF2 = *.lmf; - EDIF_INPUT_LMF1 = *.lmf; - VHDL_GENERATE_CONFIGURATION_DECLARATION = OFF; - VHDL_OUTPUT_DELAY_CONSTRUCTS = VHO_FILE; - VERILOG_OUTPUT_DELAY_CONSTRUCTS = VO_FILE; - VHDL_FLATTEN_BUS = OFF; - VERILOG_FLATTEN_BUS = OFF; - EDIF_TRUNCATE_HIERARCHY_PATH = OFF; - VHDL_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - VHDL_WRITER_VERSION = VHDL87; - VHDL_READER_VERSION = VHDL87; - SYNOPSYS_MAPPING_EFFORT = MEDIUM; - SYNOPSYS_BOUNDARY_OPTIMIZATION = OFF; - SYNOPSYS_HIERARCHICAL_COMPILATION = ON; - SYNOPSYS_DESIGNWARE = OFF; - SYNOPSYS_COMPILER = DESIGN; - USE_SYNOPSYS_SYNTHESIS = OFF; - VHDL_NETLIST_WRITER = OFF; - VERILOG_NETLIST_WRITER = OFF; - XNF_GENERATE_AHDL_TDX_FILE = ON; - XNF_TRANSLATE_INTERNAL_NODE_NAMES = ON; - XNF_EMULATE_TRI_STATE_BUSES = INTERNAL_LOGIC; - EDIF_OUTPUT_VERSION = 200; - EDIF_NETLIST_WRITER = OFF; -END; - -CUSTOM_DESIGN_DOCTOR_RULES -BEGIN - EXPANDER_NETWORKS = OFF; - ASYNCHRONOUS_INPUTS = OFF; - PRESET_CLEAR_NETWORKS = OFF; - MULTI_CLOCK_NETWORKS = OFF; - MASTER_RESET = OFF; - RACE_CONDITIONS = ON; - DELAY_CHAINS = ON; - STATIC_HAZARDS_AFTER_SYNTHESIS = OFF; - STATIC_HAZARDS_BEFORE_SYNTHESIS = ON; - MULTI_LEVEL_CLOCKS = ON; - GATED_CLOCKS = ON; - RIPPLE_CLOCKS = ON; -END; - -SIMULATOR_CONFIGURATION -BEGIN - END_TIME = 12.0us; - BIDIR_PIN = STRONG; - START_TIME = 0.0ns; - GLITCH_TIME = 0.0ns; - GLITCH = OFF; - OSCILLATION_TIME = 0.0ns; - OSCILLATION = OFF; - CHECK_OUTPUTS = OFF; - SETUP_HOLD = OFF; - USE_DEVICE = OFF; -END; - -TIMING_ANALYZER_CONFIGURATION -BEGIN - ANALYSIS_MODE = REGISTERED_PERFORMANCE; - CUT_OFF_RAM_REGISTERED_WE_PATHS = OFF; - LIST_PATH_FREQUENCY = 10MHz; - LIST_PATH_COUNT = 10; - REGISTERED_PERFORMANCE_OPTIONS = NUMBER_OF_PATHS; - INCLUDE_PATHS_LESS_THAN_VALUE = 214.7483647ms; - INCLUDE_PATHS_LESS_THAN = OFF; - INCLUDE_PATHS_GREATER_THAN_VALUE = 0.0ns; - INCLUDE_PATHS_GREATER_THAN = OFF; - DELAY_MATRIX_OPTIONS = SHOW_ALL_PATHS; - CELL_WIDTH = 18; - LIST_ONLY_LONGEST_PATH = ON; - CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; - CUT_OFF_IO_PIN_FEEDBACK = ON; - AUTO_RECALCULATE = OFF; -END; - -OTHER_CONFIGURATION -BEGIN - LAST_MAXPLUS2_VERSION = 10.0; - CARRY_OUT_PINS_LCELL_INSERT = ON; - ROW_PINS_LCELL_INSERT = ON; - NORMAL_LCELL_INSERT = ON; - EXPLICIT_FAMILY = 1; - FLEX_10K_52_COLUMNS = 40; - DEFAULT_9K_EXP_PER_LCELL = 1/2; - LOCAL_INTERCONNECT_PER_LAB_PERCENT = 100; - LCELLS_PER_ROW_PERCENT = 100; - FAN_IN_PER_LCELL_PERCENT = 100; - EXP_PER_LCELL_PERCENT = 100; - ROW_PINS_PERCENT = 50; - ORIGINAL_MAXPLUS2_VERSION = 9.6; - COMPILER_DATA = "1,1,0,1,0,0,0,1,1,1,1,0,1,1,1"; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.FLEX8000 -BEGIN - CARRY_CHAIN = AUTO; - CASCADE_CHAIN = AUTO; - SLOW_SLEW_RATE = ON; - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CASCADE_CHAIN_LENGTH = 2; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = ON; - TURBO_BIT = ON; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.FLEX8000 -BEGIN - USE_LPM_FOR_AHDL_OPERATORS = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - IGNORE_SOFT_BUFFERS = ON; - REGISTER_OPTIMIZATION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SLOW_SLEW_RATE = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - NOT_GATE_PUSH_BACK = ON; - SOFT_BUFFER_INSERTION = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - MINIMIZATION = FULL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = AUTO; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = AUTO; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = MANUAL; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = MANUAL; -END; - diff --git a/src/altera/quartus/acex/SP2_ACEX.TDF b/src/altera/quartus/acex/SP2_ACEX.TDF deleted file mode 100644 index dfa3d6e..0000000 --- a/src/altera/quartus/acex/SP2_ACEX.TDF +++ /dev/null @@ -1,1227 +0,0 @@ - - TITLE "Main"; - -PARAMETERS - ( - UPDATE = 1, -- 1 for UPDATE sheet - MODE = "SPRINTER", -- or MODE = "SPECTRUM" - NMI_ON = "OFF", -- "ON" - for use NMI - SCREEN_OFF = "NOT_USE" -- "USE" - for use screen on/off - ); - -INCLUDE "lpm_ram_dp"; -INCLUDE "kbd"; ---INCLUDE "video"; -INCLUDE "video2"; - -INCLUDE "dcp"; ---INCLUDE "dcp2"; - -INCLUDE "acceler"; -INCLUDE "ay"; -INCLUDE "mouse"; - -SUBDESIGN SP2_ACEX - ( - TG42 : INPUT; - CLKZ1 : OUTPUT; - - /WAIT : BIDIR; - /RESET : BIDIR; - /M1 : INPUT; - /RF : INPUT; - /IO : INPUT; - /WR : INPUT; - /RD : INPUT; - /HALT : INPUT; - /MR : INPUT; - A[15..0] : INPUT; - D[7..0] : BIDIR; - - CS_ROM : OUTPUT; - CS_CASH : OUTPUT; - RA[17..14] : OUTPUT; - - V_CS[1..0] : OUTPUT; - VA[15..0] : OUTPUT; - V_WR[3..0] : OUTPUT; - VD3[7..0] : BIDIR; - VD2[7..0] : BIDIR; - VD1[7..0] : BIDIR; - VD0[7..0] : BIDIR; - - WR_COL : OUTPUT; - - DAC_DATA : OUTPUT; - DAC_WS : OUTPUT; - DAC_BCK : OUTPUT; - - MD[15..0] : BIDIR; - MA[14..0] : OUTPUT; - RAS_[1..0] : OUTPUT; - CAS_[3..0] : OUTPUT; - /WE : OUTPUT; - - XACS : OUTPUT; -- ROM_WE - XA[3..0] : BIDIR; - SXA : OUTPUT; - - RDXA : OUTPUT; - WR_AWG : OUTPUT; - RD_KMPS : OUTPUT; - WR_DWG : OUTPUT; - - - - ) -VARIABLE - - MS : MOUSE; - KEYS : KBD; - SVIDEO : VIDEO2 WITH (MODE=MODE); - - DECODE : DCP WITH (UPDATE=UPDATE); --- DECODE : DCP2; - - ACC : ACCELER; - AY3 : AY; - - CBL : lpm_ram_dp WITH (lpm_width=16,lpm_widthad=8); - - CT[5..0] : NODE; - CTH[5..0] : NODE; - CTV[8..0] : NODE; - CTF[6..0] : NODE; - - CLK42 : NODE; - - DD[7..0] : NODE; - D_OUT : NODE; - RD_RAM : NODE; - - MCA[1..0] : NODE; - - DVD3[7..0] : NODE; - DVD2[7..0] : NODE; - DVD1[7..0] : NODE; - DVD0[7..0] : NODE; - - DMD[15..0] : NODE; - DMDX[7..0] : NODE; - - COPY_SINC_H : NODE; - COPY_SINC_V : NODE; - - START_UP : NODE; - - BLANK : NODE; - --- WGA[1..0] : NODE; -- to MA[1..0] / WR_AWG^ --- FDD_C[2..0] : NODE; -- to MA[4..2] / WR_AWG^ --- HDD_C[3..0] : NODE; -- to MA[8..5] / WR_AWG^ --- HD_A[2..0] : NODE; -- to MA[11..9] / WR_AWG^ - NMI_X : NODE; -- to MA12 / WR_AWG^ - INT_X : NODE; -- to MA13 / WR_AWG^ - TURBO : NODE; -- to MA14 / WR_AWG^ - KBD_CX : NODE; -- to XA0 / WR_AWG^ - KBD_DX : NODE; -- to XA1 / WR_AWG^ - TAPE_OUT : NODE; -- to XA2 / WR_AWG^ - - KBD_CC : NODE; -- from XA0 / SXA=0 / RD_XA=0 - KBD_DD : NODE; -- from XA1 / SXA=0 / RD_XA=0 - TAPE_IN : NODE; -- from XA2 / SXA=0 / RD_XA=0 - MOUSE_D : NODE; -- from XA3 / SXA=0 / RD_XA=0 - - FDD_CH : NODE; -- from XA0 / SXA=1 / RD_XA=0 - FDD_W : NODE; -- from XA1 / SXA=1 / RD_XA=0 - SINC_1 : NODE; -- from XA2 / SXA=1 / RD_XA=0 - SINC_2 : NODE; -- from XA3 / SXA=1 / RD_XA=0 - SINC_1M : NODE; - SINC_2M : NODE; - - WR_TM9 : NODE; - --- ==================== - TEST_SWITCH : NODE; - - T_SIGNAL : NODE; --- TEST_1 : LCELL; --- KTA[7..0] : LCELL; --- KTD[7..0] : DFF; --- KTT : LCELL; - - K_DATA[10..0] : NODE; - KEY_D[10..0] : DFF; - KEY_WRITE : NODE; - KD[7..0] : DFF; - K_XOR : NODE; - NEXT_K : NODE; - - RED[7..0] : NODE; - GREEN[7..0] : NODE; - BLUE[7..0] : NODE; - - BORDER[7..0] : DFFE; - KBD_BLK : NODE; - - DOS : NODE; - DOS_ : NODE; - - MDR[7..0] : NODE; - DCPP[7..0] : NODE; - - MDP[7..0] : DFFE; --- MDP[7..0] : LCELL; - - PDD[7..0] : LCELL; - WR_PORT : NODE; - - RGMOD[7..0] : DFFE; - - HDDR[7..0] : DFFE; - - GLISSER : NODE; - BLK_MR : NODE; - VIDEO_PG : NODE; - - AUDIO_CH : NODE; - - CBL_MODE : NODE; - CBL_STEREO : NODE; - CBL_MODE16 : NODE; - CBL_INT_ENA : NODE; - CBL_INT : NODE; - CBL_WR : NODE; - CBL_XX[7..0] : DFFE; - CBL_CNT[7..0] : DFF; - CBL_CTX[4..0] : DFFE; - CBL_WA[7..0] : DFFE; - CBL_WAE : NODE; - CBL_IND : NODE; - - CBL_TAB[4..0] : LCELL; - - CBL_R[15..0] : DFFE; - CBD[7..0] : DFFE; - - AUDIO_R[15..0] : DFFE; - - - /WAIT_ALL : NODE; - - BLK_MEM : NODE; - - SYS_ENA : NODE; - SYS_ENA2 : NODE; - - /SYS : NODE; - SYS_PG : NODE; - - CS_ISA : NODE; - - ISA_CASH : NODE; - ISA_A[3..0] : NODE; - - PRE_ISA : NODE; - PRE_ROM : NODE; - PRE_CASH : NODE; - - WAIT_ORIG : NODE; - WAIT_ROM : NODE; - WAIT_ROMX : NODE; - WT_R[2..0] : DFF; - --- BLK_WAIT : NODE; - - ISA_A20 : NODE; - CASH_ON : NODE; - BLK_MWR2 : NODE; - - ROM_RG[7..0]: DFFE; - ROM_WRITE_MODE : NODE; - - AY_CHS[15..0] : DFFE; - - SOFT_RESET : NODE; - SOFT_RES[1..0] : DFF; - - AY_FULL[10..0] : DFF; - - ALL_MODE[7..0] : DFFE; - - DOUBLE_CAS : NODE; - - XACS : DFF; - - KEMPS[7..0] : LCELL; - - KEY/KEMS[7..0] : LCELL; - AY/PORTS[7..0] : LCELL; - - V_WRXX[3..0]: LCELL; - V_WRX[3..0] : LCELL; --- V_WRX[3..0] : NODE; - - KEY_IO : NODE; - - /IOWR : NODE; - /IORD : NODE; - - RASX_[1..0] : NODE; - CASX_[3..0] : NODE; - CASXE[1..0] : NODE; - CAS_A : NODE; - --- ISA_CELL[1..0] : LCELL; - - T_RDXA : NODE; - - /WE_OUT : NODE; - - SINC_HOLD[8..0] : DFF; - - HOLD[7..0] : DFFE; - - CS_ROMT : NODE; - CS_CASHT : NODE; - - ISA_PORT[7..0] : DFFE; - -BEGIN - - CLK42 = TG42; - --- /RESET = TRI(GND,!DFF((KEYS.kb_reset & START_UP & SOFT_RESET),CLK42,,)); - -- start_up from SOFT_RESET - /RESET = TRI(GND,!DFF((KEYS.kb_reset & SOFT_RESET),CLK42,,)); - --- SOFT_RES[].prn = DFF((!DECODE.BLK_R or /WR or !(DECODE.PAGE[7..0] == H"A0")),CLK42,,); - - SOFT_RES[].clk = !CT4; - CASE SOFT_RES[] IS - WHEN 0,1 => SOFT_RES[] = GND; - WHEN 2 => SOFT_RES[] = 1; - WHEN 3 => SOFT_RES[] = 2; - END CASE; - SOFT_RESET = (SOFT_RES[] == 0); -- when no_Z - RESET! - --- ===== Spectrum-Ports =================== - - /IOWR = DFF((/WR or /IO),CLK42,,!/IO); - /IORD = DFF((/RD or /IO),CLK42,,!/IO); - - BORDER[].clk = /IOWR; - BORDER[].ena = DFF((DCPP[] == B"1100X010"),CLK42,,); -- C2/C8 - BORDER[].d = D[]; - --- ===== keyboard ========================= - --- ======================================== --- NEW 30.06.2022 --- KEYS.int_ena = ALL_MODE0; -- int in all keys --- KEYS.ena = !ALL_MODE0; -- ZX-Keyboard --- new bit3 in ALL_MODE, disables keyboard interruptions w/o accellerator affected - KEYS.int_ena = LCELL(ALL_MODE0 & ALL_MODE3); - KEYS.ena = VCC; -- ZX-Keyboard always enabled --- ======================================== - - KEYS.clk42 = CLK42; - KEYS.clk_k = DFF(CTH5,CLK42,,); - KEYS.kbd_cc = KBD_CC or !KBD_BLK; - KEYS.kbd_dd = KBD_DD; - - KD[].clk = CLK42; - NEXT_K = TFF(VCC,KEY_WRITE,,); - - CASE (NEXT_K) IS - WHEN 0 => KD[] = H"ED"; - WHEN 1 => KD[] = (B"00000",CTF[6..4]); - END CASE; - - K_XOR = !(KD7 xor KD6 xor KD5 xor KD4 xor KD3 xor KD2 xor KD1 xor KD0); - K_DATA[] = (VCC,K_XOR,KD[],GND); - - KEY_D[].clk = KBD_CC; - KEY_D[].d = (GND,KEY_D[10..1]); - - FOR i in 0 to 10 GENERATE - KEY_D[i].prn = K_DATA[i] or KEY_WRITE; - END GENERATE; - KEY_D[].clrn = /RESET; - - KEY_WRITE = DFF((!DFF(CTF1,CLK42,,) or CTF1),CLK42,,); - --- KBD_DX = KEY_D0; --- KBD_BLK = DFF(VCC,CTV7,KEY_WRITE,); - - KBD_BLK = VCC; - KBD_DX = GND; - --- ======================================== --- == Data Paths ========================== --- ======================================== - - MDP[].clk = DECODE./IOMM; - - CASE (DECODE.TYPE[0],(DECODE.HDD_FLIP & DECODE.HDD_DATA)) IS - WHEN B"00" => MDP[] = MD[7..0]; - WHEN B"01" => MDP[] = HDDR[7..0]; - WHEN B"1X" => MDP[] = MD[15..8]; - END CASE; - --- HDDR[].clk = DECODE./IOM; - - HDDR[].clk = LCELL(/WR & (/RD or DECODE./IOMM)); - HDDR[].ena = (DECODE.HDD_DATA & !DECODE./IOM); - - CASE DFF(/WR,DECODE.RAS,,) IS - WHEN 0 => HDDR[].d = D[]; - WHEN 1 => HDDR[].d = MD[15..8]; - END CASE; -% - CASE (DECODE.MC_END & DECODE.HDD_FLIP) IS - WHEN 0 => DMDX[] = (ACC.MDO[7..0]); - WHEN 1 => DMDX[] = (HDDR[]); - END CASE; -% - DMDX[] = (ACC.MDO[7..0]); - - ACC.HDDR[] = HDDR[]; - ACC.HDD_FLIP = DECODE.HDD_FLIP; - - CASE DECODE.TYPE0 IS - WHEN 0 => - KEY/KEMS[] = (LCELL((KEYS.kbo5 & !CBL_MODE) or (CBL_IND & CBL_MODE)),TAPE_IN,LCELL(CBL_MODE & CTV8),KEYS.kbo[4..0]); - AY/PORTS[] = DECODE.DO[]; - WHEN 1 => - KEY/KEMS[] = KEMPS[]; - AY/PORTS[] = AY3.DO[]; - END CASE; - - CASE DECODE.TYPE[2..1] IS - WHEN B"11" => PDD[] = MDP[]; - WHEN B"10" => PDD[] = KEY/KEMS[]; - WHEN B"01" => PDD[] = AY/PORTS[]; - WHEN B"00" => PDD[] = VCC; - END CASE; - - CASE /IO IS - WHEN 1 => DD[] = ACC.DO[]; - WHEN 0 => DD[] = PDD[]; - END CASE; - --- D_OUT = !(/IO or /RD or LCELL((DCPP[7..4] == 0) or (DCPP[7..4] == 3))) or RD_RAM; - D_OUT = !(/IORD or LCELL((DCPP[7..4] == 0) or (DCPP[7..4] == 3))) or RD_RAM; - - V_WRXX[] = !SVIDEO.V_WEN[]; - - V_WRX3 = !SVIDEO.V_WEN3; - V_WRX2 = !SVIDEO.V_WEN2; - V_WRX1 = !SVIDEO.V_WEN1; - V_WRX0 = !SVIDEO.V_WEN0; - - FOR i IN 0 TO 7 GENERATE - D[i] = TRI(DD[i],D_OUT); - VD3[i] = TRI(DVD3[i],V_WRX3); - VD2[i] = TRI(DVD2[i],V_WRX2); - VD1[i] = TRI(DVD1[i],V_WRX1); - VD0[i] = TRI(DVD0[i],V_WRX0); - MD[i] = TRI(DMDX[i],!/WE_OUT or WR_PORT); - MD[i+8] = TRI(ACC.MDO[i+8],!/WE_OUT or WR_PORT); --- MD[i+8] = TRI(DMDY[i],!/WE or WR_PORT); - END GENERATE; - --- ======================================== --- ======================================== --- ======================================== --- ======================================== -% -IF MODE == "SPECTRUM" GENERATE - - TEST_SWITCH = TFF((!KEYS.kb_sh & !KEYS.kb_ctrl),KEYS.kb_F12,,); - - CASE TEST_SWITCH IS - WHEN 0 => - KEYS./rf = /RF; - KEYS./io = /IO; - KEYS.a[15..8] = A[15..8]; - KEYS./iom = /IO; - - WHEN 1 => - - KEYS./rf = DFF((CT4 or CT5),CT2,,); - KEYS./io = DFF((CT4 or !CT5),CT2,,); - KEYS.a[15..8] = !KTA[]; - KEYS./iom = DFF((CT4 or !CT5),CT2,,); - - END CASE; - - CASE TEST_SWITCH IS - WHEN 0 => - RED[] = (SVIDEO.zx_color1 & (VCC,SVIDEO.zx_color3,B"000000")); - GREEN[] = (SVIDEO.zx_color2 & (VCC,SVIDEO.zx_color3,B"000000")); - BLUE[] = (SVIDEO.zx_color0 & (VCC,SVIDEO.zx_color3,B"000000")); - WHEN 1 => - RED[] = (CTH[4..0],CT[5..3]) & CTV[4] & BLANK & T_SIGNAL or TEST_1; - GREEN[] = (CTH[4..0],CT[5..3]) & CTV[5] & BLANK & T_SIGNAL or TEST_1; - BLUE[] = (CTH[4..0],CT[5..3]) & CTV[6] & BLANK & T_SIGNAL or TEST_1; - END CASE; - - DVD0[] = SVIDEO.vdo0[]; - DVD3[] = RED[]; - DVD2[] = GREEN[]; - DVD1[] = BLUE[]; - - V_WR0 = SVIDEO.v_wr0; - V_WR[3..1] = WR_COL; - - DECODE.TURBO_HAND = VCC; - --- ===== TEST CODES ============================================ - - KTD[].clk = DFF((CT4 or !CT5),CT2,,); - KTD[] = KEYS.kbo[]; - - KTA0 = (CTV[5..3] == 0); - KTA1 = (CTV[5..3] == 1); - KTA2 = (CTV[5..3] == 2); - KTA3 = (CTV[5..3] == 3); - KTA4 = (CTV[5..3] == 4); - KTA5 = (CTV[5..3] == 5); - KTA6 = (CTV[5..3] == 6); - KTA7 = (CTV[5..3] == 7); - - CASE CTH[2..0] IS - WHEN 0 => KTT = KTD0; - WHEN 1 => KTT = KTD1; - WHEN 2 => KTT = KTD2; - WHEN 3 => KTT = KTD3; - WHEN 4 => KTT = KTD4; - WHEN 5 => KTT = KTD5; - WHEN 6 => KTT = KTD6; - WHEN 7 => KTT = KTD7; - END CASE; - - T_SIGNAL = DFF(((!CTH5 or TAPE_IN) & (CTH5 or MOUSE_D) & KBD_CC),CLK42,,); - - CASE (CTH[5..3],CTV[8..6]) IS - WHEN B"1XXXXX" => TEST_1 = GND; - WHEN B"XXX100" => TEST_1 = GND; - WHEN B"XXXX11" => TEST_1 = GND; - WHEN B"000000" => TEST_1 = TFF(VCC,KEYS.kb_ctrl,,); - WHEN B"001000" => TEST_1 = GND; - WHEN B"010000" => TEST_1 = GND; - WHEN B"011000" => TEST_1 = KTT; - WHEN B"000001" => TEST_1 = TFF(VCC,KEYS.kb_alt,,); - WHEN B"001001" => TEST_1 = GND; - WHEN B"010001" => TEST_1 = GND; - WHEN B"011001" => TEST_1 = GND; - WHEN B"000010" => TEST_1 = TFF(VCC,KEYS.kb_sh,,); - WHEN B"001010" => TEST_1 = GND; - WHEN B"010010" => TEST_1 = GND; - WHEN B"011010" => TEST_1 = GND; - END CASE; - -ELSE GENERATE -% - TEST_SWITCH = TFF((!KEYS.kb_sh & !KEYS.kb_ctrl & !KEYS.kb_alt),KEYS.kb_F12,,/RESET); - - DECODE.TURBO_HAND = TEST_SWITCH; - - KEY_IO = DFFE((/IO or !/M1),CLK42,,,(CT1 & CT2)); - KEYS./rf = DFFE((CT2 or !KEY_IO),CLK42,,,CT0); - KEYS./iom = KEY_IO; - KEYS./io = KEY_IO; - KEYS./m1 = VCC; - - KEYS.a[15..8] = A[15..8]; - - DVD0[] = SVIDEO.vdo0[]; - DVD1[] = SVIDEO.vdo1[]; - DVD2[] = SVIDEO.vdo2[]; - DVD3[] = SVIDEO.vdo3[]; - - V_WR[3..0] = SVIDEO.V_WR[]; -% -END GENERATE; -% --- ===================================================== --- ===================================================== - - SYS_ENA = (!/SYS or ROM_RG4) or - (A[15..4] == B"001111111111") or - (A[15..4] == B"00000000000X"); - --- SYS_ENA2 = DFFE(SYS_ENA,/MR,,,/RF) & DFF((A[7..0] == B"0X111100"),CLK42,,); - SYS_ENA2 = DFF((A[7..0] == B"0X111100"),CLK42,,); - - ISA_PORT[].clk = /IOWR; - ISA_PORT[].d = D[]; - ISA_PORT[].ena = DECODE.BLK_R & DFF((DCPP[] == B"1111XXXX"),CLK42,,); - -IF (UPDATE == 1) GENERATE - - WAIT_ORIG = LCELL(/MR or CT5 or ALL_MODE2 or - LCELL((!(DECODE.V_RAM & (A14 & A15)) & !(A14 & !A15)) or TURBO)); - - - SOFT_RES[].prn = !DFF(DFF((LCELL(DECODE.BLK_R & A14 & A15) & - LCELL(DECODE.PAGE[7..4] == H"A")),CLK42,,),(/WR or /MR),/RESET,); - - -- /SYS=0 - system ROM on - /SYS = DFFE(!A6,/IOWR,/RESET,,SYS_ENA2); - - -- SYS_PG - system ROM0/ROM1 switch - SYS_PG = DFFE(D0,/IOWR,/RESET,!ROM_RG4,(SYS_ENA2 & !D1)); - - -- 0 - write A20 for ISA - ISA_A20 = (/IOWR or !DFF((DCPP[] == B"00011011"),CLK42,,)); -- 1B --- ISA_A20 = VCC; - - -- 1 - CASHE on IN A,(0FBh/07Bh) --- CASH_ON = DFFE(A7,/IORD,/RESET,,DFF((DCPP[] == H"88"),CLK42,,));-- 88 - CASH_ON = DFFE(A7,/IORD,/RESET,,DFF((A[7..0] == B"X1111011"),CLK42,,)); - - -- 0 - CS_ISA - - PRE_ISA = LCELL(!LCELL(ISA_PORT[] == B"1101XXXX") or !DECODE.BLK_R or !A14 or !A15); - PRE_ROM = LCELL(/SYS or A14 or A15 or CASH_ON); - PRE_CASH = LCELL(A14 or A15 or !CASH_ON); - --- BLK_WAIT = LCELL(LCELL(PRE_CASH or !PRE_ROM) or (/RD & /WR) or /MR); - - WAIT_ROMX = LCELL(CS_ROM & CS_ISA); - WAIT_ROM = (WAIT_ROMX or DFF((WT_R[] == 0),CLK42,!WAIT_ROMX,)); - WT_R[].clk = CLK42; - CASE (WAIT_ROMX,WT_R[]) IS - WHEN 0 => WT_R[] = 0; - WHEN B"0001" => WT_R[] = WT_R[] - 1; - WHEN B"001X" => WT_R[] = WT_R[] - 1; - WHEN B"01XX" => WT_R[] = WT_R[] - 1; - WHEN B"1XXX" => WT_R[] = 4; - END CASE; - - CS_ISA = DFF((!/RF or PRE_ISA),!/MR,,LCELL(CS_ISA or !/MR)); - CS_ROMT = DFF((!/RF or PRE_ROM or !PRE_CASH),!/MR,,LCELL(CS_ROMT or !/MR)); - CS_CASHT = DFF((!/RF or !PRE_ROM or PRE_CASH),!/MR,,LCELL(CS_CASHT or !/MR)); - - CS_ROM = CS_ROMT; - - CS_CASH = CS_CASHT & CS_ISA & ISA_A20; - --- CS_ROM = LCELL(LCELL(PRE_ROM or !PRE_CASH) or (/RD & /WR) or /MR); - --- CS_CASH = LCELL(LCELL(PRE_CASH or !PRE_ROM) or (/RD & /WR) or /MR) & --- CS_ISA & ISA_A20; - - CASE (PRE_ROM,PRE_CASH) IS - WHEN B"00" => ISA_A[] = B"1000"; -- error -> ISA - WHEN B"01" => ISA_A[] = ((ROM_RG3 xor !SYS_PG),ROM_RG[2..0]); -- ROM_ADRESS - WHEN B"10" => ISA_A[] = (B"01",ROM_RG[1..0]); -- CASHE_ADRESS - WHEN B"11" => ISA_A[] = (!PRE_ISA,GND,ISA_PORT[2..1]); -- for ISA_A20 - END CASE; - RA[] = ISA_A[3..0]; - - XACS.clk = !(/MR or /WR); - XACS.d = (!ROM_RG4 or A14 or A15); - XACS.prn = (XACS or (!/MR & ROM_RG4)); - --- XACS.clk = CLK42; --- XACS = (WAIT_ROM or /WR or A14 or A15); --- XACS.prn = !/MR & ROM_RG4; - - BLK_MEM = LCELL(!PRE_ROM or !PRE_CASH or !PRE_ISA); - - RD_RAM = !(/MR or /RD or BLK_MEM); - - BLK_MWR2 = DECODE.RAM or BLK_MEM; - - DECODE.BLK_MEM = BLK_MEM; - - ROM_RG[].clk = /IOWR; - ROM_RG[].d = D[]; - ROM_RG[].ena = DFF((DCPP[] == H"8F"),CLK42,,) or - (!/SYS & DFF((A[7..0] == B"01011100"),CLK42,,)); -- 5C - ROM_RG[].clrn = /RESET; - -ELSE GENERATE - - SOFT_RES[].prn = DFF((!DFF(DECODE.BLK_R,CLK42,,) or /WR or !(DECODE.PAGE[7..4] == H"A")),CLK42,,!/MR); - - WT_R[].clk = GND; - WT_R[] = 0; - - WAIT_ROM = VCC; - - DECODE.BLK_MEM = GND; - - BLK_MWR2 = DECODE.BLK_R; - - XACS.clk = CLK42; - CASE ROM_WRITE_MODE IS - WHEN 0 => - CS_ROM = ROM_RG[4] or !/RF or LCELL(DECODE.CS_ROM or /RD or (DECODE.BLK_R & !LCELL(DECODE.PAGE[7..4] == 14))); - XACS = VCC; - WHEN 1 => - CS_ROM = /MR or !/RF or DFF((/RD & /WR),CLK42,,); --- XACS = /MR or DFF((/WR or DECODE.MC_END),!CLK42,,); - XACS = /MR or DFF(/WR or !DFF(/WR,!CT2,,!/WR),!CT2,,!/WR); - END CASE; - --- CS_CASH = !DECODE.BLK_R or !(DECODE.PAGE[7..4] == 15); - --- CS for CASHE & ISA-Slots - - CS_CASH = (DFF(!(DECODE.PAGE[7..4] == B"11X1"),CLK42,,DECODE.BLK_R) & - --- CS for ISA_A20 signal - - LCELL(DECODE./IOM or /WR or !(DCPP[] == B"00011011")) -- 1B - - ); - --- Switcher for ISA/CASHE adress - - ISA_CASH = LCELL(DECODE.BLK_R & (DECODE.PAGE[7..4] == B"11X1")) or !/IOWR; - - CASE /IO IS - WHEN 0 => ISA_A[3..2] = B"00"; -- for Write to A20 port - ISA_A[1..0] = DECODE.PAGE[1..0]; -- ANY - - WHEN 1 => --- ISA_A[3..2] = B"10"; -- for ISA Slots - ISA_A[3..2] = (!DECODE.PAGE5,DECODE.PAGE5); - --- ISA_A[1..0] = DECODE.PAGE[1..0]; -- ISA select - ISA_A[1..0] = (DECODE.PAGE2,DECODE.PAGE1); -- ISA select - END CASE; - - RD_RAM = !(DECODE.CS_RAM or /RD or DECODE.BLK_R); - - CASE ROM_WRITE_MODE IS - WHEN 0 => - CASE (ISA_CASH,DECODE.RAM) IS - WHEN 0 => RA[] = (B"01",A[15..14]); -- for CASHE in RAM - WHEN 1 => RA[] = DECODE.RA[]; -- ROM Adresses - WHEN 2,3 => RA[] = ISA_A[3..0]; -- CASHE & ISA - END CASE; - WHEN 1 => - RA[] = ROM_RG[3..0]; - END CASE; - ROM_WRITE_MODE = DFF((ROM_RG[4] & !(A14 or A14)),CLK42,,); - - ROM_RG[].clk = /IOWR; - ROM_RG[].d = D[]; - ROM_RG[].ena = DFF((DCPP[] == H"8F"),CLK42,,); - ROM_RG[].clrn = /RESET; - -END GENERATE; - - --- ===================================================== --- ===================================================== - - RD_KMPS = DECODE./IOM or /RD or !(DECODE.TYPE[] == 7); - --- WR_PORT = !(/IO or DFF(!DECODE.MC_END,CLK42,,) or /WR) or !(DECODE.WR_DWG or /IO or /WR); - - WR_PORT = (!(/IO or /WR) & LCELL(DFF(DECODE.MC_TYPE,CLK42,,))); - --- WR_PORT = DFF((!(/IO or /WR) & DECODE.MC_TYPE),CLK42,,); - - WR_DWG = DECODE.WR_DWG; - --- (NMI_X,KBD_CX) = GND; - (KBD_CX) = GND; - - IF (NMI_ON == "ON") GENERATE - NMI_X = (!KEYS.kb_f12 & KEYS.kb_alt); - ELSE GENERATE - NMI_X = GND; - END GENERATE; - --- TFF(KEYS.kb_ctrl,KEYS.kb_f12,,); - --- INT_X = !DFF(GND,CTV8,,((/IO or /M1) & DFF(!INT_X,CTH3,,))); - --- INT_X = !DFF(GND,SVIDEO.INTT,,((/IO or /M1) & DFF(!INT_X,CTH3,,))); - --- INT_X = !DFF(GND,(SVIDEO.INTT & KEYS.int),,((/IO or /M1) & DFF(!INT_X,CTH3,,))); - INT_X = !DFF(GND,(SVIDEO.INTT & KEYS.int),,((/IO or /M1) & DFF(DFF(!INT_X,CTH2,,),CTH2,,))) - or !CBL_INT; - - TAPE_OUT = LCELL(BORDER3); - --- *************************************** - --- RDXA = LCELL(DECODE.RD_KP11); --- T_RDXA = DFF(GND,DECODE.RD_KP11,,DFF((T_RDXA),CLK42,,)); - --- WR_TM9 = !DFF(VCC,!CLK42,DECODE.WR_TM9,); --- WR_TM9 = LCELL(DFF(DECODE.RD_KP11,CLK42,,)); - --- RDXA = LCELL(CT2 or DFFE(!CT2,!CLK42,,,CT1)); - - RDXA = DFF(!((CT[2..0] == B"11X") or (CT[2..0] == 0)),CLK42,,); - --- T_RDXA = CT2; - T_RDXA = LCELL(RDXA); - --- WR_TM9 = DFF(CT2,!CLK42,,); - WR_TM9 = LCELL(CT2); - - --- SXA = TFF(VCC,T_RDXA,,); --- SXA = DFF((CT3 xor (CT2 & CT1)),CLK42,,); - SXA = DFF((CT3 xor CT2),CLK42,,); - --- WR_AWG = LCELL(LCELL(DECODE.WR_AWG)); --- WR_AWG = LCELL(DECODE.WR_AWG); - WR_AWG = DECODE.WR_AWG; - --- WR_AWG = DFF(DECODE.WR_AWG,CLK42,,); - --- SXA = DFF(DECODE.KP11_MIX,CLK42,,); - - XA0 = TRI(KBD_CX,WR_TM9); - XA1 = TRI(KBD_DX,WR_TM9); - XA2 = TRI(TAPE_OUT,WR_TM9); - XA3 = TRI(GND,GND); - - KBD_DD = DFFE(XA1,T_RDXA,,,!SXA); - KBD_CC = DFFE(XA0,T_RDXA,,,!SXA); - TAPE_IN = DFFE(XA2,T_RDXA,,,!SXA); - MOUSE_D = DFFE(XA3,T_RDXA,,,!SXA); - - FDD_CH = DFFE(XA1,T_RDXA,,,SXA); - FDD_W = DFFE(XA0,T_RDXA,,,SXA); - SINC_1 = DFFE(XA2,T_RDXA,DECODE./RES,,SXA); - SINC_2 = DFFE(XA3,T_RDXA,DECODE./RES,,SXA); - - SINC_HOLD[3..0].clk = CT4; - SINC_HOLD[8..4].clk = CTH5; - - SINC_1M = DFF(!(SINC_HOLD[3..0] == 15),CLK42,,); - - CASE !SINC_1 IS - WHEN 0 => SINC_HOLD[3..0] = HOLD[3..0]; - WHEN 1 => SINC_HOLD[3..0] = (SINC_HOLD[3..0] + 1) or !SINC_1M; - END CASE; - - SINC_2M = DFF(!(SINC_HOLD[8..4] == B"1111X"),CLK42,,); - --- CASE DFF((SINC_2 & DFF(SINC_2,CTV0,,)),CLK42,,) IS - - CASE SINC_2 IS - WHEN 1 => SINC_HOLD[8..4] = (HOLD[7..4],GND); - WHEN 0 => SINC_HOLD[8..4] = (SINC_HOLD[8..4] + 1) or !SINC_2M; - END CASE; - - COPY_SINC_H = DFF((!SINC_1M & DFF(SINC_1M,CLK42,,)),CLK42,,); - COPY_SINC_V = DFF((!SINC_2M & DFF(SINC_2M,CLK42,,)),CLK42,,); - --- COPY_SINC_H = DFF(DFF(!SINC_1 & DFF(SINC_1,!CLK42,,),!CLK42,,),CLK42,,); --- COPY_SINC_V = DFF(DFF(!SINC_2 & DFF(SINC_2,!CLK42,,),!CLK42,,),CLK42,,); - --- START_UP = DFFE(DFFE(DFFE(VCC,CLK42,,,COPY_SINC_H),CLK42,,,COPY_SINC_V),CLK42,,,COPY_SINC_V); - START_UP = DFFE(DFFE(DFFE(VCC,CLK42,,,COPY_SINC_H),CLK42,,,COPY_SINC_H),CLK42,,,COPY_SINC_H); - - HOLD[].clk = /IOWR; - HOLD[].ena = DFF((DCPP[] == B"11001011"),CLK42,,); -- CB - HOLD[].d = D[]; - - HOLD[2..0].prn = DECODE./RES; - HOLD[3].clrn = DECODE./RES; - HOLD[6..4].prn = DECODE./RES; - HOLD[7].clrn = DECODE./RES; - --- ===================================================== --- ===== DCP =========================================== --- ===================================================== - - DOS_ = (!((DECODE.PN4Q & A13 & A12) & (A[11..8] == B"1101")) & DOS) or (A14 or A15); - DOS = DFF(DOS_,!(/M1 or /MR),,/RESET); - DECODE.DOS = DOS; - - DECODE.REFRESH = CT4; - - DCPP[] = DECODE.DCPP[]; - - DECODE.CLK42 = CLK42; - DECODE./RESET = /RESET; - - DECODE.ACC_ON = ACC.ACC_ON; - - DECODE.CT[2..0] = CT[2..0]; - - RASX_[1..0] = (LCELL(DECODE.RAS),LCELL(DECODE.RAS)); - - RAS_[] = RASX_[]; - - MCA[] = DECODE.MCA[1..0]; - - DOUBLE_CAS = ACC.DOUBLE_CAS; - - CAS_A = LCELL(DECODE.CAS); --- CAS_A = (DECODE.CAS); - - CASXE0 = LCELL((MCA0 == 0) or ((MCA0 == 1) & DOUBLE_CAS)); - CASXE1 = LCELL((MCA0 == 1) or ((MCA0 == 0) & DOUBLE_CAS)); - - CASX_0 = LCELL(CAS_A or !((!MCA1 & CASXE0) or DECODE.MC_TYPE)); - CASX_1 = LCELL(CAS_A or !((!MCA1 & CASXE1) or DECODE.MC_TYPE)); - CASX_2 = LCELL(CAS_A or !(( MCA1 & CASXE0) or DECODE.MC_TYPE)); - CASX_3 = LCELL(CAS_A or !(( MCA1 & CASXE1) or DECODE.MC_TYPE)); - - CAS_[] = CASX_[]; - --- /WE = DFFE((/WE_OUT or DECODE.RAS),CLK42,,/RESET,); - /WE = DFFE((/WE_OUT or DECODE.RAS),CLK42,,/RESET,); - --- /WE = LCELL(DFFE((/WE_OUT or DECODE.RAS),CLK42,,/RESET,)); --- /WE = LCELL(/WE_OUT or CAS_A); - - /WE_OUT = LCELL(DECODE.MC_WRITE or BLK_MR or BLK_MWR2); - - DECODE.DOUBLE_CAS = DOUBLE_CAS; --- DECODE.A[15..0] = A[]; - DECODE.A[15..0] = ACC.AO[]; - DECODE.DI[7..0] = D[]; - - MA[11..0] = DECODE.MA[11..0]; - MA[14..12] = (!TURBO,INT_X,NMI_X); - - CLKZ1 = DECODE.CLK_Z80; - - TURBO = DECODE.TURBO; - - DECODE./IO = /IO; - DECODE./RD = /RD; - DECODE./WR = /WR; - DECODE./MR = /MR; - DECODE./RF = /RF; - DECODE./M1 = /M1; - - /WAIT_ALL = (DECODE./WAIT & WAIT_ROM & WAIT_ORIG); - --- /WAIT = TRI(DECODE./WAIT,LCELL(!(DECODE./WAIT & DFF(DECODE./WAIT,CLK42,,)))); - - /WAIT = TRI(/WAIT_ALL,LCELL(!/WAIT_ALL)); - - DECODE.TEST_R = TFF(KEYS.kb_ctrl,KEYS.kb_f12,,); - --- DECODE.MD[7..0] = ACC.MD[]; - DECODE.MD[7..0] = ACC.DO[]; - --- ===================================================== --- == Accelerator ====================================== --- ===================================================== - - ACC.ACC_ENA = ALL_MODE0; - - ACC.CLK42 = CLK42; - ACC./RESET = /RESET; - ACC.CT[2..0]= CT[2..0]; - ACC.CLK_Z80 = DECODE.CLK_Z80; - - ACC.RAS = DECODE.RAS; - ACC.CAS = DECODE.CAS; - - DECODE.CONTINUE = ACC.CONTINUE; --- DECODE.CONTINUE = VCC; - - ACC.MC_END = DECODE.MC_END; - ACC.MC_BEGIN= DECODE.MC_BEGIN; - ACC.MC_TYPE = DECODE.MC_TYPE; - ACC.MC_WRITE= DECODE.MC_WRITE; --- ACC.MCA[] = DECODE.MCA[]; - - ACC.AI[15..0] = A[]; - ACC.DI[7..0] = D[]; - - ACC./IO = /IO; - ACC./RD = /RD; - ACC./WR = /WR; - ACC./MR = /MR; - ACC./RF = /RF; - ACC./M1 = /M1; - ACC./IOM = DECODE./IOM; - - ACC.DCP[7..0] = DCPP[]; - - ACC.MDI[15..0] = MD[]; - --- ACC.MDO[15..0]; - --- ===================================================== --- ===== Graf-Mode ===================================== --- ===================================================== - - RGMOD[].clk = /IOWR; - RGMOD[].ena = DFF((DCPP[] == B"1100X101"),CLK42,,); --- (DCPP[] == B"1100X101"); - RGMOD[].d = D[]; - RGMOD[].clrn= /RESET; - - DECODE.G_LINE[] = (GND,GND,ACC.G_LINE[7..0]); - --- ===================================================== --- ===== VIDEO ========================================= --- ===================================================== - - VIDEO_PG = LCELL(DECODE.PAGE[7..4] == B"0101"); - BLK_MR = LCELL((VIDEO_PG & - (DECODE.PAGE2 or (DECODE.PAGE3 & ACC.GLISSER)))); - - GLISSER = LCELL(ACC.GLISSER & DECODE.PAGE[3] & VIDEO_PG); - - SVIDEO.clk42 = CLK42; - - CT[5..0] = SVIDEO.ct[5..0]; - CTH[5..0] = SVIDEO.cth[5..0]; - CTV[8..0] = SVIDEO.ctv[8..0]; - CTF[6..0] = SVIDEO.ctf[6..0]; - - BLANK = SVIDEO.blank; - - SVIDEO.start_up = VCC; - SVIDEO.copy_sinc_h = COPY_SINC_H; - SVIDEO.copy_sinc_v = COPY_SINC_V; - --- SVIDEO.wr = (DECODE.MC_WRITE or DECODE.CAS or GLISSER); --- SVIDEO.wr = DFF((DECODE.MC_WRITE or GLISSER or DECODE.RAS),CLK42,,/RESET); - SVIDEO.wr = DFF((DECODE.MC_WRITE or GLISSER or DECODE.CAS),!CLK42,,/RESET); - --- SVIDEO.vai[] = (DECODE.GA[],A[9..0]); - SVIDEO.vai[] = (DECODE.GA[],ACC.AO[9..0]); - - VA[] = SVIDEO.vao[]; - - SVIDEO.D[] = D[]; - SVIDEO.MDI[] = ACC.MDO[]; - SVIDEO.DOUBLE_CAS = DOUBLE_CAS; - - SVIDEO.VDM0[7..0] = VD0[]; - SVIDEO.VDM1[7..0] = VD1[]; - SVIDEO.VDM2[7..0] = VD2[]; - SVIDEO.VDM3[7..0] = VD3[]; - - V_CS[1..0] = SVIDEO.v_cs[]; - WR_COL = SVIDEO.WR_PIX; - --- ZX_COLOR[3..0] - - SVIDEO.ZX_PORT[5..0] = (ACC.G_LINE[5..0]); --- SVIDEO.ZX_PORT[7..6] = (DECODE.SP_SA,LCELL(DECODE.SP_SCR & !(A13 & !ACC.G_LINE7) & !ACC.G_LINE6)); - --- NEW 25.08.2022 --- disable zx adressing due accelerator is on - SVIDEO.ZX_PORT[7..6] = (DECODE.SP_SA,LCELL(DECODE.SP_SCR & !(A13 & !ACC.G_LINE7) & !ACC.G_LINE6 & !ALL_MODE0)); - - SVIDEO.DIR_PORT[0] = DECODE.SCR128; - - SVIDEO.DIR_PORT[3] = RGMOD0; - - IF (SCREEN_OFF == "USE") GENERATE - SVIDEO.DIR_PORT[4] = RGMOD1; -- 1 screen off, 0 - screen on - ELSE GENERATE - SVIDEO.DIR_PORT[4] = GND; -- 1 screen off, 0 - screen on - END GENERATE; - - SVIDEO.DIR_PORT[2..1] = GND; - SVIDEO.DIR_PORT[7..5] = BORDER[2..0]; --- SVIDEO.DIR_PORT[7..5] = MS.OUT_X[7..5]; - - SVIDEO.MOUSE_X[] = MS.OUT_X[]; - SVIDEO.MOUSE_Y[] = MS.OUT_Y[]; - -% - bit0 - Spectrum SCREEN Switch - bit1 - Spectrum Adress MODE - bit2 - Write to Spectrum Screen OFF - - bit7..5 - Border -% - --- ===================================================== - - ALL_MODE[7..0].clk = /IOWR; - ALL_MODE[7..0].ena = DFF((DCPP[] == B"11000011"),CLK42,,); -- C3 - ALL_MODE[].d = D[]; - ALL_MODE[].prn = /RESET; - --- ===================================================== --- === AUDIO OUT ======================================= --- ===================================================== - - DAC_DATA = DFFE(DFF(AUDIO_R15,CT2,,),!CT2,,,); - --- DAC_DATA = DFF(AUDIO_R15,CLK42,,); --- DAC_DATA = AUDIO_R15; - - DAC_WS = DFF(CTH1,CLK42,,); - DAC_BCK = DFF(CT2,CLK42,,); - - AUDIO_R[15..0].clk = CLK42; - AUDIO_R[15..0].ena = !CT2 & DFF(CT2,CLK42,,); - - AUDIO_CH = DFF(((CTH0,CT[5..3]) == 15),CT2,,); - - IF AUDIO_CH THEN - AUDIO_R[15..0].d = AY_CHS[15..0]; - ELSE - AUDIO_R[15..0].d = (AUDIO_R[14..0],GND); - END IF; - --- ====== COVOX ========== - - CBL_MODE = CBL_XX7; - CBL_STEREO = CBL_XX6; - CBL_MODE16 = CBL_XX5; - CBL_INT_ENA = CBL_XX4; - - CBL_INT = DFF(GND,!CBL_CNT6,,(CBL_INT_ENA & (/IO or /M1))); - - CBL_XX[].clk = /IOWR; - CBL_XX[].ena = DFF((DCPP[] == B"10001001"),CLK42,,); -- 89 - CBL_XX[] = D[]; - - CBL_CTX[].clk = !CTH1; - CBL_CNT[].clk = !CTH1; - - CASE CBL_XX[3..0] IS - WHEN 0 => CBL_TAB[] = 13; -- 16khz -- mono/stereo - WHEN 1 => CBL_TAB[] = 9; -- 22khz -- mono/stereo - WHEN 2 => CBL_TAB[] = 0; -- reserved - WHEN 3 => CBL_TAB[] = 0; -- reserved - WHEN 4 => CBL_TAB[] = 0; -- reserved - WHEN 5 => CBL_TAB[] = 0; -- reserved - WHEN 6 => CBL_TAB[] = 0; -- reserved - WHEN 7 => CBL_TAB[] = 0; -- reserved - - WHEN 8 => CBL_TAB[] = 27; -- 7.8125 KHz -- mono/stereo 8/16 bit - WHEN 9 => CBL_TAB[] = 19; -- 10.9375 KHz -- mono/stereo 8/16 bit - WHEN 10=> CBL_TAB[] = 13; -- 15.625 KHz -- mono/stereo 8/16 bit - WHEN 11=> CBL_TAB[] = 9; -- 21.875 KHz -- mono/stereo 8/16 bit - WHEN 12=> CBL_TAB[] = 6; -- 31.25 KHz -- mono/stereo 8/16 bit - WHEN 13=> CBL_TAB[] = 4; -- 43.75 KHz -- mono/stereo 8/16 bit - WHEN 14=> CBL_TAB[] = 3; -- 54.6875 KHz -- mono/stereo 8/16 bit - WHEN 15=> CBL_TAB[] = 1; -- 109.375 KHz -- mono/stereo 8/16 bit --- WHEN 15=> CBL_TAB[] = 0; -- (218.75)KHz -- stereo 110 only - END CASE; - - IF (CBL_CTX[] == 0) THEN - CBL_CTX[].d = CBL_TAB[]; - ELSE - CBL_CTX[].d = CBL_CTX[] - 1; - END IF; - - CASE (CBL_STEREO,LCELL(CBL_CTX[] == 0)) IS - WHEN 0,2 => CBL_CNT[].d = CBL_CNT[]; - WHEN 1 => CBL_CNT[].d = CBL_CNT[]+1; - WHEN 3 => CBL_CNT[].d = CBL_CNT[]+2; - END CASE; - - CBL_CNT[].clrn = CBL_MODE; - - CBL_IND = CBL_CNT7 xor CBL_WA7; - --- CBL_WR = DFF((DCPP[] == B"10001000"),CLK42,,) & !/IOWR; -- 88 - - CBL_WR = (DFF((DCPP[] == B"10001000"),CLK42,,) & !/IOWR) or - (DFF((DECODE.PAGE[7..0] == B"11111101"),CLK42,(CBL_INT_ENA & ACC.ACC_DIR1),) & - !DFF((DECODE.MC_WRITE or DECODE.CAS),CLK42,,/RESET)); - - - CBL_WAE = CBL_MODE16 & DFF(!CBL_WAE,!CBL_WR,,CBL_INT); - - CBL_WA[].clk = !CBL_WR; - CBL_WA[].ena = !CBL_WAE; - - CBL_WA[7].clrn = CBL_MODE & CBL_INT_ENA & (CBL_INT or !CBL_CNT7); - CBL_WA[7].prn = (CBL_INT or CBL_CNT7); - - CBL_WA[6..0].clrn = CBL_MODE & CBL_INT_ENA & CBL_INT; - - CBL_WA[].d = CBL_WA[] + 1; - - CBD[].clk = !CBL_WR; - CBD[].ena = CBL_WAE; --- CBD[].d = D[]; - CBD[].d = ACC.MDO[7..0]; - CBD[].clrn = CBL_MODE16; - - CBL.wren = (CBL_WR & !CBL_WAE); - --- CBL.data[] = ((D7 xor CBL_MODE16),D[6..0],CBD[]); - CBL.data[] = ((ACC.MDO15 xor CBL_MODE16),ACC.MDO[14..8],CBD[]); - - CBL.wraddress[] = ((!A[15..8]) & !CBL_INT_ENA) xor CBL_WA[]; - - CBL.wrclock = CLK42; - CBL.wrclken = VCC; - CBL.rden = VCC; - CBL.rdaddress[] = (CBL_CNT[7..1],LCELL((CBL_CNT0 & !CBL_STEREO) or (AUDIO_CH & CBL_STEREO))); - CBL.rdclock = CLK42; - CBL.rdclken = VCC; - - CBL_R[].ena = DFF((CBL_MODE or (CBL_WR)),CLK42,,); - - CBL_R[].CLK = CLK42; - CBL_R[15].prn = /RESET; - CBL_R[14..0].clrn = /RESET; - CASE CBL_MODE IS - WHEN 0 => CBL_R[] = (D[7..0],B"00000000"); - WHEN 1 => CBL_R[] = CBL.q[]; - END CASE; - --- ====== AY-3-8910 ======== - - AY3.CLK42 = CLK42; - - AY3./RESET = /RESET; - AY3.AY_T[8..0] = (CTH[2..0],CT[5..0]); - - AY3.AY_D_WR = DFF((DECODE./IOM or /WR) or !DFF((DCPP[] == H"91"),CLK42,,),CLK42,,); - AY3.AY_A_WR = DFF((DECODE./IOM or /WR) or !DFF((DCPP[] == H"90"),CLK42,,),CLK42,,); - - AY3.D[7..0] = D[]; - AY3.BEEPER = BORDER4; - --- AY3.DO[7..0] : OUTPUT; - --- AY3.AY_CH_A[3..0] : OUTPUT; --- AY3.AY_CH_B[3..0] : OUTPUT; --- AY3.AY_CH_C[3..0] : OUTPUT; - - AY_FULL[].clk = CLK42; - --- AY_CHS[].clk = !CTH0; - AY_CHS[].clk = !DFF((CTH1 & (CTH0 or !CT5)),CLK42,,); - AY_CHS[].ena = VCC; - --- AY_FULL[] = (GND,AY_CH_L[]) + (GND,AY_CH_R[]); - - CASE DFF(CTH0,CLK42,,) IS - WHEN 0 => AY_FULL[] = (AY3.AY_CH_L[],GND); - WHEN 1 => AY_FULL[] = (AY3.AY_CH_R[],GND); - END CASE; - --- AY_CHS[].d = (((GND,AY_FULL[]) + (VCC,CBL.q[15..5])),B"0000"); - --- AY_CHS[].d = (((GND,AY_FULL[]) + (VCC,CBL.q[15..8],B"000")),B"0000"); - AY_CHS[].d = (((GND,AY_FULL[]) + (VCC,CBL_R[15..5])),CBL_R[4..1]); - --- ===== MOUSE ========================= - - MS.clk = DFF(CTH5,CLK42,,); - MS.mouse_d = MOUSE_D; - - CASE (A10,A8) IS - WHEN 0,2 => KEMPS[] = (B"111111",!MS.OUT_K0,!MS.OUT_K1); - WHEN 1 => KEMPS[] = (MS.OUT_X[7..0]); - WHEN 3 => KEMPS[] = !(MS.OUT_Y[7..0]); - END CASE; - -END; - diff --git a/src/altera/quartus/acex/SP2_ACEX.flow.rpt b/src/altera/quartus/acex/SP2_ACEX.flow.rpt deleted file mode 100644 index 9c51df3..0000000 --- a/src/altera/quartus/acex/SP2_ACEX.flow.rpt +++ /dev/null @@ -1,103 +0,0 @@ -Flow report for SP2_ACEX -Sun Aug 28 15:25:51 2022 -Quartus II Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition - - ---------------------- -; Table of Contents ; ---------------------- - 1. Legal Notice - 2. Flow Summary - 3. Flow Settings - 4. Flow Non-Default Global Settings - 5. Flow Elapsed Time - 6. Flow OS Summary - 7. Flow Log - - - ----------------- -; Legal Notice ; ----------------- -Copyright (C) 1991-2009 Altera Corporation -Your use of Altera Corporation's design tools, logic functions -and other software and tools, and its AMPP partner logic -functions, and any output files from any of the foregoing -(including device programming or simulation files), and any -associated documentation or information are expressly subject -to the terms and conditions of the Altera Program License -Subscription Agreement, Altera MegaCore Function License -Agreement, or other applicable license agreement, including, -without limitation, that your use is for the sole purpose of -programming logic devices manufactured by Altera and sold by -Altera or its authorized distributors. Please refer to the -applicable agreement for further details. - - - -+------------------------------------------------------------------------+ -; Flow Summary ; -+-------------------------+----------------------------------------------+ -; Flow Status ; Flow Failed - Sun Aug 28 15:25:51 2022 ; -; Quartus II Version ; 9.0 Build 235 06/17/2009 SP 2 SJ Web Edition ; -; Revision Name ; SP2_ACEX ; -; Top-level Entity Name ; SP2_ACEX ; -; Family ; ACEX1K ; -; Device ; EP1K30QC208-3 ; -; Timing Models ; Final ; -; Met timing requirements ; N/A ; -+-------------------------+----------------------------------------------+ - - -+-----------------------------------------+ -; Flow Settings ; -+-------------------+---------------------+ -; Option ; Setting ; -+-------------------+---------------------+ -; Start date & time ; 08/28/2022 15:25:50 ; -; Main task ; Compilation ; -; Revision Name ; SP2_ACEX ; -+-------------------+---------------------+ - - -+--------------------------------------------------------------------------------------------------------------------+ -; Flow Non-Default Global Settings ; -+---------------------------------+-----------------------------+---------------+-------------+----------------------+ -; Assignment Name ; Value ; Default Value ; Entity Name ; Section Id ; -+---------------------------------+-----------------------------+---------------+-------------+----------------------+ -; COMPILER_SIGNATURE_ID ; 52243291855.166168955009032 ; -- ; -- ; -- ; -; CUT_OFF_READ_DURING_WRITE_PATHS ; Off ; On ; -- ; -- ; -; EDA_INPUT_GND_NAME ; Gnd ; -- ; -- ; eda_design_synthesis ; -; EDA_INPUT_VCC_NAME ; Vcc ; -- ; -- ; eda_design_synthesis ; -; EDA_SHOW_LMF_MAPPING_MESSAGES ; Off ; -- ; -- ; eda_design_synthesis ; -; EXCLUDE_TPD_PATHS_LESS_THAN ; 0 ns ; -- ; -- ; -- ; -; FMAX_REQUIREMENT ; 100 MHz ; -- ; -- ; -- ; -+---------------------------------+-----------------------------+---------------+-------------+----------------------+ - - -+--------------------------------------------------------------------------------------------------------------------------+ -; Flow Elapsed Time ; -+----------------------+--------------+-------------------------+---------------------+------------------------------------+ -; Module Name ; Elapsed Time ; Average Processors Used ; Peak Virtual Memory ; Total CPU Time (on all processors) ; -+----------------------+--------------+-------------------------+---------------------+------------------------------------+ -; Analysis & Synthesis ; 00:00:01 ; 1.0 ; 228 MB ; 00:00:01 ; -; Total ; 00:00:01 ; -- ; -- ; 00:00:01 ; -+----------------------+--------------+-------------------------+---------------------+------------------------------------+ - - -+---------------------------------------------------------------------------------------+ -; Flow OS Summary ; -+----------------------+------------------+---------------+------------+----------------+ -; Module Name ; Machine Hostname ; OS Name ; OS Version ; Processor type ; -+----------------------+------------------+---------------+------------+----------------+ -; Analysis & Synthesis ; DESKTOP-72JG930 ; Windows Vista ; 6.2 ; x86_64 ; -+----------------------+------------------+---------------+------------+----------------+ - - ------------- -; Flow Log ; ------------- -quartus_map --read_settings_files=on --write_settings_files=off SP2_ACEX -c SP2_ACEX - - - diff --git a/src/altera/quartus/acex/SP2_ACEX.map.rpt b/src/altera/quartus/acex/SP2_ACEX.map.rpt deleted file mode 100644 index 9a8db38..0000000 --- a/src/altera/quartus/acex/SP2_ACEX.map.rpt +++ /dev/null @@ -1,184 +0,0 @@ -Analysis & Synthesis report for SP2_ACEX -Sun Aug 28 15:25:51 2022 -Quartus II Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition - - ---------------------- -; Table of Contents ; ---------------------- - 1. Legal Notice - 2. Analysis & Synthesis Summary - 3. Analysis & Synthesis Settings - 4. Analysis & Synthesis Source Files Read - 5. Analysis & Synthesis Messages - - - ----------------- -; Legal Notice ; ----------------- -Copyright (C) 1991-2009 Altera Corporation -Your use of Altera Corporation's design tools, logic functions -and other software and tools, and its AMPP partner logic -functions, and any output files from any of the foregoing -(including device programming or simulation files), and any -associated documentation or information are expressly subject -to the terms and conditions of the Altera Program License -Subscription Agreement, Altera MegaCore Function License -Agreement, or other applicable license agreement, including, -without limitation, that your use is for the sole purpose of -programming logic devices manufactured by Altera and sold by -Altera or its authorized distributors. Please refer to the -applicable agreement for further details. - - - -+----------------------------------------------------------------------------+ -; Analysis & Synthesis Summary ; -+-----------------------------+----------------------------------------------+ -; Analysis & Synthesis Status ; Failed - Sun Aug 28 15:25:51 2022 ; -; Quartus II Version ; 9.0 Build 235 06/17/2009 SP 2 SJ Web Edition ; -; Revision Name ; SP2_ACEX ; -; Top-level Entity Name ; SP2_ACEX ; -; Family ; ACEX1K ; -+-----------------------------+----------------------------------------------+ - - -+----------------------------------------------------------------------------------------------+ -; Analysis & Synthesis Settings ; -+--------------------------------------------------------------+---------------+---------------+ -; Option ; Setting ; Default Value ; -+--------------------------------------------------------------+---------------+---------------+ -; Device ; EP1K30QC208-3 ; ; -; Top-level entity name ; SP2_ACEX ; SP2_ACEX ; -; Family name ; ACEX1K ; Stratix II ; -; Use smart compilation ; Off ; Off ; -; Create Debugging Nodes for IP Cores ; Off ; Off ; -; Preserve fewer node names ; On ; On ; -; Disable OpenCore Plus hardware evaluation ; Off ; Off ; -; Verilog Version ; Verilog_2001 ; Verilog_2001 ; -; VHDL Version ; VHDL93 ; VHDL93 ; -; State Machine Processing ; Auto ; Auto ; -; Safe State Machine ; Off ; Off ; -; Extract Verilog State Machines ; On ; On ; -; Extract VHDL State Machines ; On ; On ; -; Ignore Verilog initial constructs ; Off ; Off ; -; Iteration limit for constant Verilog loops ; 5000 ; 5000 ; -; Iteration limit for non-constant Verilog loops ; 250 ; 250 ; -; Add Pass-Through Logic to Inferred RAMs ; On ; On ; -; Parallel Synthesis ; Off ; Off ; -; NOT Gate Push-Back ; On ; On ; -; Power-Up Don't Care ; On ; On ; -; Remove Redundant Logic Cells ; Off ; Off ; -; Remove Duplicate Registers ; On ; On ; -; Ignore CARRY Buffers ; Off ; Off ; -; Ignore CASCADE Buffers ; Off ; Off ; -; Ignore GLOBAL Buffers ; Off ; Off ; -; Ignore ROW GLOBAL Buffers ; Off ; Off ; -; Ignore LCELL Buffers ; Off ; Off ; -; Ignore SOFT Buffers ; On ; On ; -; Limit AHDL Integers to 32 Bits ; Off ; Off ; -; Auto Implement in ROM ; Off ; Off ; -; Optimization Technique ; Area ; Area ; -; Carry Chain Length ; 32 ; 32 ; -; Cascade Chain Length ; 2 ; 2 ; -; Auto Carry Chains ; On ; On ; -; Auto Open-Drain Pins ; On ; On ; -; Auto ROM Replacement ; On ; On ; -; Auto RAM Replacement ; On ; On ; -; Auto Clock Enable Replacement ; On ; On ; -; Strict RAM Replacement ; Off ; Off ; -; Auto Resource Sharing ; Off ; Off ; -; Allow Any RAM Size For Recognition ; Off ; Off ; -; Allow Any ROM Size For Recognition ; Off ; Off ; -; Use LogicLock Constraints during Resource Balancing ; On ; On ; -; Ignore translate_off and synthesis_off directives ; Off ; Off ; -; Show Parameter Settings Tables in Synthesis Report ; On ; On ; -; HDL message level ; Level2 ; Level2 ; -; Suppress Register Optimization Related Messages ; Off ; Off ; -; Number of Removed Registers Reported in Synthesis Report ; 100 ; 100 ; -; Number of Inverted Registers Reported in Synthesis Report ; 100 ; 100 ; -; Block Design Naming ; Auto ; Auto ; -; Synthesis Effort ; Auto ; Auto ; -; Shift Register Replacement - Allow Asynchronous Clear Signal ; On ; On ; -; Analysis & Synthesis Message Level ; Medium ; Medium ; -+--------------------------------------------------------------+---------------+---------------+ - - -+----------------------------------------------------------------------------------------------------------------------------------------------+ -; Analysis & Synthesis Source Files Read ; -+----------------------------------+-----------------+-----------------------+-----------------------------------------------------------------+ -; File Name with User-Entered Path ; Used in Netlist ; File Type ; File Name with Absolute Path ; -+----------------------------------+-----------------+-----------------------+-----------------------------------------------------------------+ -; SP2_ACEX.tdf ; yes ; Auto-Found AHDL File ; C:/Sprinter/src/altera/quartus/acex/SP2_ACEX.tdf ; -; lpm_ram_dp.inc ; yes ; Auto-Found AHDL File ; c:/altera/90sp2/quartus/libraries/megafunctions/lpm_ram_dp.inc ; -; kbd.inc ; yes ; Auto-Found AHDL File ; C:/Sprinter/src/altera/quartus/acex/kbd.inc ; -; video2.inc ; yes ; Auto-Found AHDL File ; C:/Sprinter/src/altera/quartus/acex/video2.inc ; -; dcp.inc ; yes ; Auto-Found AHDL File ; C:/Sprinter/src/altera/quartus/acex/dcp.inc ; -; acceler.inc ; yes ; Auto-Found AHDL File ; C:/Sprinter/src/altera/quartus/acex/acceler.inc ; -; ay.inc ; yes ; Auto-Found AHDL File ; C:/Sprinter/src/altera/quartus/acex/ay.inc ; -; mouse.inc ; yes ; Auto-Found AHDL File ; C:/Sprinter/src/altera/quartus/acex/mouse.inc ; -; MOUSE.tdf ; yes ; Auto-Found AHDL File ; C:/Sprinter/src/altera/quartus/acex/MOUSE.tdf ; -; lpm_add_sub.inc ; yes ; Auto-Found AHDL File ; c:/altera/90sp2/quartus/libraries/megafunctions/lpm_add_sub.inc ; -; kbd.tdf ; yes ; Auto-Found AHDL File ; C:/Sprinter/src/altera/quartus/acex/kbd.tdf ; -; lpm_ram_dq.inc ; yes ; Auto-Found AHDL File ; c:/altera/90sp2/quartus/libraries/megafunctions/lpm_ram_dq.inc ; -; lpm_ram_dq.tdf ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/lpm_ram_dq.tdf ; -; altram.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/altram.inc ; -; lpm_mux.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/lpm_mux.inc ; -; lpm_decode.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/lpm_decode.inc ; -; aglobal90.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/aglobal90.inc ; -; altram.tdf ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/altram.tdf ; -; memmodes.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/others/maxplus2/memmodes.inc ; -; altsyncram.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/altsyncram.inc ; -; altqpram.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/altqpram.inc ; -+----------------------------------+-----------------+-----------------------+-----------------------------------------------------------------+ - - -+-------------------------------+ -; Analysis & Synthesis Messages ; -+-------------------------------+ -Info: ******************************************************************* -Info: Running Quartus II Analysis & Synthesis - Info: Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition - Info: Processing started: Sun Aug 28 15:25:50 2022 -Info: Command: quartus_map --read_settings_files=on --write_settings_files=off SP2_ACEX -c SP2_ACEX -Warning: Using design file SP2_ACEX.tdf, which is not specified as a design file for the current project, but contains definitions for 1 design units and 1 entities in project - Info: Found entity 1: SP2_ACEX -Info: Elaborating entity "SP2_ACEX" for the top level hierarchy -Warning: Variable or input pin "DMD" is defined but never used -Warning: Variable or input pin "T_SIGNAL" is defined but never used -Warning: Variable or input pin "RED" is defined but never used -Warning: Variable or input pin "GREEN" is defined but never used -Warning: Variable or input pin "BLUE" is defined but never used -Warning: Variable or input pin "MDR" is defined but never used -Warning: Variable or input pin "ISA_CASH" is defined but never used -Warning: Variable or input pin "ROM_WRITE_MODE" is defined but never used -Warning: Variable or input pin "/HALT" is defined but never used -Warning: Using design file MOUSE.tdf, which is not specified as a design file for the current project, but contains definitions for 1 design units and 1 entities in project - Info: Found entity 1: mouse -Info: Elaborating entity "MOUSE" for hierarchy "MOUSE:MS" -Warning: Variable or input pin "KB_OFL" is defined but never used -Warning: Using design file kbd.tdf, which is not specified as a design file for the current project, but contains definitions for 1 design units and 1 entities in project - Info: Found entity 1: kbd -Info: Elaborating entity "kbd" for hierarchy "kbd:KEYS" -Warning: Variable or input pin "/IOM" is defined but never used -Warning: Variable or input pin "/M1" is defined but never used -Info: Elaborating entity "lpm_ram_dq" for hierarchy "kbd:KEYS|lpm_ram_dq:$00021" -Info: Elaborated megafunction instantiation "kbd:KEYS|lpm_ram_dq:$00021" -Info: Instantiated megafunction "kbd:KEYS|lpm_ram_dq:$00021" with the following parameter: - Info: Parameter "LPM_WIDTH" = "8" - Info: Parameter "LPM_WIDTHAD" = "8" - Info: Parameter "LPM_FILE" = "KBD_INI2.MIF" - Info: Parameter "LPM_OUTDATA" = "UNREGISTERED" -Info: Elaborating entity "altram" for hierarchy "kbd:KEYS|lpm_ram_dq:$00021|altram:sram" -Error: Memory Initialization File or Hexadecimal (Intel-Format) File "KBD_INI2.MIF" contains illegal syntax at line 13 File: C:/Sprinter/src/altera/quartus/acex/KBD_INI2.MIF Line: 13 -Critical Warning: Can't read Memory Initialization File or Hexadecimal (Intel-Format) File KBD_INI2.MIF -- setting all initial values to 0 -Error: Can't elaborate user hierarchy "kbd:KEYS|lpm_ram_dq:$00021|altram:sram" File: c:/altera/90sp2/quartus/libraries/megafunctions/lpm_ram_dq.tdf Line: 101 -Info: Elaborated megafunction instantiation "kbd:KEYS|lpm_ram_dq:$00021|altram:sram", which is child of megafunction instantiation "kbd:KEYS|lpm_ram_dq:$00021" -Error: Quartus II Analysis & Synthesis was unsuccessful. 2 errors, 16 warnings - Error: Peak virtual memory: 228 megabytes - Error: Processing ended: Sun Aug 28 15:25:51 2022 - Error: Elapsed time: 00:00:01 - Error: Total CPU time (on all processors): 00:00:01 - - diff --git a/src/altera/quartus/acex/SP2_ACEX.map.summary b/src/altera/quartus/acex/SP2_ACEX.map.summary deleted file mode 100644 index 38ca8c9..0000000 --- a/src/altera/quartus/acex/SP2_ACEX.map.summary +++ /dev/null @@ -1,5 +0,0 @@ -Analysis & Synthesis Status : Failed - Sun Aug 28 15:25:51 2022 -Quartus II Version : 9.0 Build 235 06/17/2009 SP 2 SJ Web Edition -Revision Name : SP2_ACEX -Top-level Entity Name : SP2_ACEX -Family : ACEX1K diff --git a/src/altera/quartus/acex/SP2_ACEX.qpf b/src/altera/quartus/acex/SP2_ACEX.qpf deleted file mode 100644 index 4abdd48..0000000 --- a/src/altera/quartus/acex/SP2_ACEX.qpf +++ /dev/null @@ -1,30 +0,0 @@ -# -------------------------------------------------------------------------- # -# -# Copyright (C) 1991-2009 Altera Corporation -# Your use of Altera Corporation's design tools, logic functions -# and other software and tools, and its AMPP partner logic -# functions, and any output files from any of the foregoing -# (including device programming or simulation files), and any -# associated documentation or information are expressly subject -# to the terms and conditions of the Altera Program License -# Subscription Agreement, Altera MegaCore Function License -# Agreement, or other applicable license agreement, including, -# without limitation, that your use is for the sole purpose of -# programming logic devices manufactured by Altera and sold by -# Altera or its authorized distributors. Please refer to the -# applicable agreement for further details. -# -# -------------------------------------------------------------------------- # -# -# Quartus II -# Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition -# Date created = 03:32:05 August 28, 2022 -# -# -------------------------------------------------------------------------- # - -QUARTUS_VERSION = "9.0" -DATE = "03:32:05 August 28, 2022" - -# Revisions - -PROJECT_REVISION = "SP2_ACEX" diff --git a/src/altera/quartus/acex/SP2_ACEX.qsf b/src/altera/quartus/acex/SP2_ACEX.qsf deleted file mode 100644 index 19dbb7b..0000000 --- a/src/altera/quartus/acex/SP2_ACEX.qsf +++ /dev/null @@ -1,1918 +0,0 @@ -# -------------------------------------------------------------------------- # -# -# Copyright (C) 1991-2009 Altera Corporation -# Your use of Altera Corporation's design tools, logic functions -# and other software and tools, and its AMPP partner logic -# functions, and any output files from any of the foregoing -# (including device programming or simulation files), and any -# associated documentation or information are expressly subject -# to the terms and conditions of the Altera Program License -# Subscription Agreement, Altera MegaCore Function License -# Agreement, or other applicable license agreement, including, -# without limitation, that your use is for the sole purpose of -# programming logic devices manufactured by Altera and sold by -# Altera or its authorized distributors. Please refer to the -# applicable agreement for further details. -# -# -------------------------------------------------------------------------- # -# -# Quartus II -# Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition -# Date created = 03:32:05 August 28, 2022 -# -# -------------------------------------------------------------------------- # -# -# Notes: -# -# 1) The default values for assignments are stored in the file: -# SP2_ACEX_assignment_defaults.qdf -# If this file doesn't exist, see file: -# assignment_defaults.qdf -# -# 2) Altera recommends that you do not modify this file. This -# file is updated automatically by the Quartus II software -# and any changes you make may be lost or overwritten. -# -# -------------------------------------------------------------------------- # - - -set_global_assignment -name FAMILY ACEX1K -set_global_assignment -name DEVICE "EP1K30QC208-3" -set_global_assignment -name TOP_LEVEL_ENTITY SP2_ACEX -set_global_assignment -name ORIGINAL_QUARTUS_VERSION "9.0 SP2" -set_global_assignment -name PROJECT_CREATION_TIME_DATE "03:32:05 AUGUST 28, 2022" -set_global_assignment -name LAST_QUARTUS_VERSION "9.0 SP2" -set_location_assignment LC8_B36 -to CASXE1 -set_location_assignment LC8_B36 -to CASXE[1] -set_location_assignment LC7_B36 -to CASXE0 -set_location_assignment LC7_B36 -to CASXE[0] -set_location_assignment LC6_B36 -to CASX_3 -set_location_assignment LC6_B36 -to CASX_[3] -set_location_assignment LC2_B36 -to CASX_2 -set_location_assignment LC2_B36 -to CASX_[2] -set_location_assignment LC5_B36 -to CASX_1 -set_location_assignment LC5_B36 -to CASX_[1] -set_location_assignment LC1_B36 -to CASX_0 -set_location_assignment LC1_B36 -to CASX_[0] -set_location_assignment LC8_F18 -to "video2:SVIDEO|V_WRM" -set_location_assignment LC2_F20 -to "video2:SVIDEO|V_WEM2" -set_location_assignment LC2_F20 -to "video2:SVIDEO|V_WEM[2]" -set_location_assignment LC5_F11 -to "video2:SVIDEO|V_WE_R" -set_location_assignment LC3_F15 -to "video2:SVIDEO|V_WEMMO" -set_location_assignment LC2_F18 -to "video2:SVIDEO|V_WEM" -set_location_assignment LC8_F20 -to "video2:SVIDEO|V_WRM2" -set_location_assignment LC8_F20 -to "video2:SVIDEO|V_WRM[2]" -set_location_assignment LC3_F12 -to "video2:SVIDEO|V_WEMMM" -set_location_assignment LC2_F12 -to "video2:SVIDEO|V_WEMMN" -set_location_assignment LC6_F12 -to "video2:SVIDEO|V_WE" -set_location_assignment LC5_F4 -to "video2:SVIDEO|V_CSX2" -set_location_assignment LC5_F4 -to "video2:SVIDEO|V_CSX[2]" -set_location_assignment LC5_F5 -to "video2:SVIDEO|V_CSX1" -set_location_assignment LC5_F5 -to "video2:SVIDEO|V_CSX[1]" -set_location_assignment LC5_F3 -to "video2:SVIDEO|V_CSX0" -set_location_assignment LC5_F3 -to "video2:SVIDEO|V_CSX[0]" -set_location_assignment LC2_A15 -to "dcp:DECODE|WR_AWGX" -set_location_assignment LC4_F17 -to "video2:SVIDEO|V_WEMM" -set_location_assignment LC2_F19 -to "video2:SVIDEO|V_WEY2" -set_location_assignment LC2_F19 -to "video2:SVIDEO|V_WEY[2]" -set_location_assignment LC2_F14 -to "video2:SVIDEO|V_WEY3" -set_location_assignment LC2_F14 -to "video2:SVIDEO|V_WEY[3]" -set_location_assignment LC2_F16 -to "video2:SVIDEO|V_WEY1" -set_location_assignment LC2_F16 -to "video2:SVIDEO|V_WEY[1]" -set_location_assignment LC2_F17 -to "video2:SVIDEO|V_WEY0" -set_location_assignment LC2_F17 -to "video2:SVIDEO|V_WEY[0]" -set_location_assignment EAB_D -to "acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_0" -set_location_assignment EAB_D -to "acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment[0][0]" -set_location_assignment EAB_D -to "acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_1" -set_location_assignment EAB_D -to "acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment[0][1]" -set_location_assignment EAB_D -to "acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_2" -set_location_assignment EAB_D -to "acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment[0][2]" -set_location_assignment EAB_D -to "acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_3" -set_location_assignment EAB_D -to "acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment[0][3]" -set_location_assignment EAB_D -to "acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_4" -set_location_assignment EAB_D -to "acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment[0][4]" -set_location_assignment EAB_D -to "acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_5" -set_location_assignment EAB_D -to "acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment[0][5]" -set_location_assignment EAB_D -to "acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_6" -set_location_assignment EAB_D -to "acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment[0][6]" -set_location_assignment EAB_D -to "acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment0_7" -set_location_assignment EAB_D -to "acceler:ACC|lpm_ram_dp:RAM|altdpram:sram|segment[0][7]" -set_location_assignment LC1_F14 -to V_WRX3 -set_location_assignment LC1_F14 -to V_WRX[3] -set_location_assignment LC1_F16 -to V_WRX1 -set_location_assignment LC1_F16 -to V_WRX[1] -set_location_assignment LC1_F17 -to V_WRX0 -set_location_assignment LC1_F17 -to V_WRX[0] -set_location_assignment LC8_F16 -to "video2:SVIDEO|V_WR_1" -set_location_assignment LC8_F16 -to "video2:SVIDEO|V_WR_[1]" -set_location_assignment LC8_F17 -to "video2:SVIDEO|V_WR_0" -set_location_assignment LC8_F17 -to "video2:SVIDEO|V_WR_[0]" -set_location_assignment EAB_E -to "ay:AY3|lpm_ram_dq:90|altram:sram|segment0_0" -set_location_assignment EAB_E -to "ay:AY[3]|lpm_ram_dq:90|altram:sram|segment[0][0]" -set_location_assignment EAB_E -to "ay:AY3|lpm_ram_dq:90|altram:sram|segment0_1" -set_location_assignment EAB_E -to "ay:AY[3]|lpm_ram_dq:90|altram:sram|segment[0][1]" -set_location_assignment EAB_E -to "ay:AY3|lpm_ram_dq:90|altram:sram|segment0_2" -set_location_assignment EAB_E -to "ay:AY[3]|lpm_ram_dq:90|altram:sram|segment[0][2]" -set_location_assignment EAB_E -to "ay:AY3|lpm_ram_dq:90|altram:sram|segment0_3" -set_location_assignment EAB_E -to "ay:AY[3]|lpm_ram_dq:90|altram:sram|segment[0][3]" -set_location_assignment EAB_E -to "ay:AY3|lpm_ram_dq:90|altram:sram|segment0_4" -set_location_assignment EAB_E -to "ay:AY[3]|lpm_ram_dq:90|altram:sram|segment[0][4]" -set_location_assignment EAB_E -to "ay:AY3|lpm_ram_dq:90|altram:sram|segment0_5" -set_location_assignment EAB_E -to "ay:AY[3]|lpm_ram_dq:90|altram:sram|segment[0][5]" -set_location_assignment EAB_E -to "ay:AY3|lpm_ram_dq:90|altram:sram|segment0_6" -set_location_assignment EAB_E -to "ay:AY[3]|lpm_ram_dq:90|altram:sram|segment[0][6]" -set_location_assignment EAB_E -to "ay:AY3|lpm_ram_dq:90|altram:sram|segment0_7" -set_location_assignment EAB_E -to "ay:AY[3]|lpm_ram_dq:90|altram:sram|segment[0][7]" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_0" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment[0][0]" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_1" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment[0][1]" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_2" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment[0][2]" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_3" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment[0][3]" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_4" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment[0][4]" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_5" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment[0][5]" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_6" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment[0][6]" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_7" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment[0][7]" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_8" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment[0][8]" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_9" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment[0][9]" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_10" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment[0][10]" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_11" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment[0][11]" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_12" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment[0][12]" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_13" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment[0][13]" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_14" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment[0][14]" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment0_15" -set_location_assignment EAB_C -to "dcp:DECODE|lpm_ram_dp:MEM|altdpram:sram|segment[0][15]" -set_location_assignment EAB_B -to "kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_0" -set_location_assignment EAB_B -to "kbd:KEYS|lpm_ram_dq:59|altram:sram|segment[0][0]" -set_location_assignment EAB_B -to "kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_1" -set_location_assignment EAB_B -to "kbd:KEYS|lpm_ram_dq:59|altram:sram|segment[0][1]" -set_location_assignment EAB_B -to "kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_2" -set_location_assignment EAB_B -to "kbd:KEYS|lpm_ram_dq:59|altram:sram|segment[0][2]" -set_location_assignment EAB_B -to "kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_3" -set_location_assignment EAB_B -to "kbd:KEYS|lpm_ram_dq:59|altram:sram|segment[0][3]" -set_location_assignment EAB_B -to "kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_4" -set_location_assignment EAB_B -to "kbd:KEYS|lpm_ram_dq:59|altram:sram|segment[0][4]" -set_location_assignment EAB_B -to "kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_5" -set_location_assignment EAB_B -to "kbd:KEYS|lpm_ram_dq:59|altram:sram|segment[0][5]" -set_location_assignment EAB_B -to "kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_6" -set_location_assignment EAB_B -to "kbd:KEYS|lpm_ram_dq:59|altram:sram|segment[0][6]" -set_location_assignment EAB_B -to "kbd:KEYS|lpm_ram_dq:59|altram:sram|segment0_7" -set_location_assignment EAB_B -to "kbd:KEYS|lpm_ram_dq:59|altram:sram|segment[0][7]" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment0_5" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment[0][5]" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment0_6" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment[0][6]" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment0_7" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment[0][7]" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment0_8" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment[0][8]" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment0_9" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment[0][9]" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment0_10" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment[0][10]" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment0_11" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment[0][11]" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment0_12" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment[0][12]" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment0_13" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment[0][13]" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment0_14" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment[0][14]" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment0_15" -set_location_assignment EAB_A -to "lpm_ram_dp:CBL|altdpram:sram|segment[0][15]" -set_location_assignment LC1_F19 -to V_WRX2 -set_location_assignment LC1_F19 -to V_WRX[2] -set_location_assignment LC8_F19 -to "video2:SVIDEO|V_WR_2" -set_location_assignment LC8_F19 -to "video2:SVIDEO|V_WR_[2]" -set_location_assignment LC8_F14 -to "video2:SVIDEO|V_WR_3" -set_location_assignment LC8_F14 -to "video2:SVIDEO|V_WR_[3]" -set_location_assignment LC2_A32 -to "dcp:DECODE|285" -set_location_assignment LC2_A35 -to RASX_0 -set_location_assignment LC2_A35 -to RASX_[0] -set_location_assignment LC2_A34 -to RASX_1 -set_location_assignment LC2_A34 -to RASX_[1] -set_location_assignment PIN_17 -to XA3 -set_location_assignment PIN_17 -to XA[3] -set_location_assignment PIN_9 -to XA1 -set_location_assignment PIN_9 -to XA[1] -set_location_assignment PIN_200 -to XA2 -set_location_assignment PIN_200 -to XA[2] -set_location_assignment PIN_180 -to XA0 -set_location_assignment PIN_180 -to XA[0] -set_location_assignment PIN_114 -to VD30 -set_location_assignment PIN_114 -to VD[30] -set_location_assignment PIN_136 -to VD31 -set_location_assignment PIN_136 -to VD[31] -set_location_assignment PIN_144 -to VD32 -set_location_assignment PIN_144 -to VD[32] -set_location_assignment PIN_148 -to VD33 -set_location_assignment PIN_148 -to VD[33] -set_location_assignment PIN_149 -to VD34 -set_location_assignment PIN_149 -to VD[34] -set_location_assignment PIN_143 -to VD35 -set_location_assignment PIN_143 -to VD[35] -set_location_assignment PIN_139 -to VD36 -set_location_assignment PIN_139 -to VD[36] -set_location_assignment PIN_128 -to VD37 -set_location_assignment PIN_128 -to VD[37] -set_location_assignment PIN_150 -to VD20 -set_location_assignment PIN_150 -to VD[20] -set_location_assignment PIN_115 -to VD21 -set_location_assignment PIN_115 -to VD[21] -set_location_assignment PIN_135 -to VD22 -set_location_assignment PIN_135 -to VD[22] -set_location_assignment PIN_140 -to VD23 -set_location_assignment PIN_140 -to VD[23] -set_location_assignment PIN_141 -to VD24 -set_location_assignment PIN_141 -to VD[24] -set_location_assignment PIN_147 -to VD25 -set_location_assignment PIN_147 -to VD[25] -set_location_assignment PIN_142 -to VD26 -set_location_assignment PIN_142 -to VD[26] -set_location_assignment PIN_131 -to VD27 -set_location_assignment PIN_131 -to VD[27] -set_location_assignment PIN_104 -to VD10 -set_location_assignment PIN_104 -to VD[10] -set_location_assignment PIN_111 -to VD11 -set_location_assignment PIN_111 -to VD[11] -set_location_assignment PIN_120 -to VD12 -set_location_assignment PIN_120 -to VD[12] -set_location_assignment PIN_127 -to VD13 -set_location_assignment PIN_127 -to VD[13] -set_location_assignment PIN_132 -to VD14 -set_location_assignment PIN_132 -to VD[14] -set_location_assignment PIN_134 -to VD15 -set_location_assignment PIN_134 -to VD[15] -set_location_assignment PIN_133 -to VD16 -set_location_assignment PIN_133 -to VD[16] -set_location_assignment PIN_122 -to VD17 -set_location_assignment PIN_122 -to VD[17] -set_location_assignment PIN_103 -to VD00 -set_location_assignment PIN_103 -to VD[00] -set_location_assignment PIN_113 -to VD01 -set_location_assignment PIN_113 -to VD[01] -set_location_assignment PIN_116 -to VD02 -set_location_assignment PIN_116 -to VD[02] -set_location_assignment PIN_121 -to VD03 -set_location_assignment PIN_121 -to VD[03] -set_location_assignment PIN_126 -to VD04 -set_location_assignment PIN_126 -to VD[04] -set_location_assignment PIN_125 -to VD05 -set_location_assignment PIN_125 -to VD[05] -set_location_assignment PIN_119 -to VD06 -set_location_assignment PIN_119 -to VD[06] -set_location_assignment PIN_112 -to VD07 -set_location_assignment PIN_112 -to VD[07] -set_location_assignment PIN_19 -to /RESET -set_location_assignment PIN_179 -to MD15 -set_location_assignment PIN_179 -to MD[15] -set_location_assignment PIN_187 -to MD14 -set_location_assignment PIN_187 -to MD[14] -set_location_assignment PIN_192 -to MD12 -set_location_assignment PIN_192 -to MD[12] -set_location_assignment PIN_198 -to MD11 -set_location_assignment PIN_198 -to MD[11] -set_location_assignment PIN_204 -to MD10 -set_location_assignment PIN_204 -to MD[10] -set_location_assignment PIN_208 -to MD9 -set_location_assignment PIN_208 -to MD[9] -set_location_assignment PIN_8 -to MD8 -set_location_assignment PIN_8 -to MD[8] -set_location_assignment PIN_161 -to MD7 -set_location_assignment PIN_161 -to MD[7] -set_location_assignment PIN_162 -to MD6 -set_location_assignment PIN_162 -to MD[6] -set_location_assignment PIN_163 -to MD5 -set_location_assignment PIN_163 -to MD[5] -set_location_assignment PIN_164 -to MD4 -set_location_assignment PIN_164 -to MD[4] -set_location_assignment PIN_186 -to MD3 -set_location_assignment PIN_186 -to MD[3] -set_location_assignment PIN_190 -to MD2 -set_location_assignment PIN_190 -to MD[2] -set_location_assignment PIN_193 -to MD1 -set_location_assignment PIN_193 -to MD[1] -set_location_assignment PIN_196 -to MD0 -set_location_assignment PIN_196 -to MD[0] -set_location_assignment PIN_61 -to D7 -set_location_assignment PIN_61 -to D[7] -set_location_assignment PIN_60 -to D6 -set_location_assignment PIN_60 -to D[6] -set_location_assignment PIN_58 -to D5 -set_location_assignment PIN_58 -to D[5] -set_location_assignment PIN_57 -to D4 -set_location_assignment PIN_57 -to D[4] -set_location_assignment PIN_56 -to D3 -set_location_assignment PIN_56 -to D[3] -set_location_assignment PIN_55 -to D2 -set_location_assignment PIN_55 -to D[2] -set_location_assignment PIN_54 -to D1 -set_location_assignment PIN_54 -to D[1] -set_location_assignment PIN_53 -to D0 -set_location_assignment PIN_53 -to D[0] -set_location_assignment PIN_169 -to XACS -set_location_assignment PIN_11 -to WR_DWG -set_location_assignment PIN_157 -to WR_COL -set_location_assignment PIN_176 -to WR_AWG -set_location_assignment PIN_16 -to /WE -set_location_assignment PIN_88 -to V_WR3 -set_location_assignment PIN_88 -to V_WR[3] -set_location_assignment PIN_75 -to V_WR2 -set_location_assignment PIN_75 -to V_WR[2] -set_location_assignment PIN_85 -to V_WR1 -set_location_assignment PIN_85 -to V_WR[1] -set_location_assignment PIN_83 -to V_WR0 -set_location_assignment PIN_83 -to V_WR[0] -set_location_assignment PIN_101 -to V_CS0 -set_location_assignment PIN_101 -to V_CS[0] -set_location_assignment PIN_70 -to V_CS1 -set_location_assignment PIN_70 -to V_CS[1] -set_location_assignment PIN_71 -to VA15 -set_location_assignment PIN_71 -to VA[15] -set_location_assignment PIN_73 -to VA14 -set_location_assignment PIN_73 -to VA[14] -set_location_assignment PIN_87 -to VA13 -set_location_assignment PIN_87 -to VA[13] -set_location_assignment PIN_74 -to VA12 -set_location_assignment PIN_74 -to VA[12] -set_location_assignment PIN_95 -to VA11 -set_location_assignment PIN_95 -to VA[11] -set_location_assignment PIN_99 -to VA10 -set_location_assignment PIN_99 -to VA[10] -set_location_assignment PIN_93 -to VA9 -set_location_assignment PIN_93 -to VA[9] -set_location_assignment PIN_94 -to VA4 -set_location_assignment PIN_94 -to VA[4] -set_location_assignment PIN_92 -to VA5 -set_location_assignment PIN_92 -to VA[5] -set_location_assignment PIN_90 -to VA8 -set_location_assignment PIN_90 -to VA[8] -set_location_assignment PIN_86 -to VA7 -set_location_assignment PIN_86 -to VA[7] -set_location_assignment PIN_89 -to VA6 -set_location_assignment PIN_89 -to VA[6] -set_location_assignment PIN_96 -to VA3 -set_location_assignment PIN_96 -to VA[3] -set_location_assignment PIN_97 -to VA2 -set_location_assignment PIN_97 -to VA[2] -set_location_assignment PIN_100 -to VA1 -set_location_assignment PIN_100 -to VA[1] -set_location_assignment PIN_102 -to VA0 -set_location_assignment PIN_102 -to VA[0] -set_location_assignment PIN_7 -to SXA -set_location_assignment PIN_173 -to RDXA -set_location_assignment PIN_10 -to RD_KMPS -set_location_assignment PIN_67 -to RA17 -set_location_assignment PIN_67 -to RA[17] -set_location_assignment PIN_68 -to RA16 -set_location_assignment PIN_68 -to RA[16] -set_location_assignment PIN_69 -to RA15 -set_location_assignment PIN_69 -to RA[15] -set_location_assignment PIN_65 -to RA14 -set_location_assignment PIN_65 -to RA[14] -set_location_assignment PIN_205 -to RAS_1 -set_location_assignment PIN_205 -to RAS_[1] -set_location_assignment PIN_207 -to RAS_0 -set_location_assignment PIN_207 -to RAS_[0] -set_location_assignment PIN_191 -to MA14 -set_location_assignment PIN_191 -to MA[14] -set_location_assignment PIN_195 -to MA13 -set_location_assignment PIN_195 -to MA[13] -set_location_assignment PIN_206 -to MA12 -set_location_assignment PIN_206 -to MA[12] -set_location_assignment PIN_199 -to MA11 -set_location_assignment PIN_199 -to MA[11] -set_location_assignment PIN_177 -to MA10 -set_location_assignment PIN_177 -to MA[10] -set_location_assignment PIN_203 -to MA9 -set_location_assignment PIN_203 -to MA[9] -set_location_assignment PIN_202 -to MA8 -set_location_assignment PIN_202 -to MA[8] -set_location_assignment PIN_197 -to MA7 -set_location_assignment PIN_197 -to MA[7] -set_location_assignment PIN_175 -to MA6 -set_location_assignment PIN_175 -to MA[6] -set_location_assignment PIN_174 -to MA5 -set_location_assignment PIN_174 -to MA[5] -set_location_assignment PIN_172 -to MA4 -set_location_assignment PIN_172 -to MA[4] -set_location_assignment PIN_170 -to MA3 -set_location_assignment PIN_170 -to MA[3] -set_location_assignment PIN_168 -to MA2 -set_location_assignment PIN_168 -to MA[2] -set_location_assignment PIN_167 -to MA1 -set_location_assignment PIN_167 -to MA[1] -set_location_assignment PIN_166 -to MA0 -set_location_assignment PIN_166 -to MA[0] -set_location_assignment PIN_159 -to DAC_WS -set_location_assignment PIN_158 -to DAC_DATA -set_location_assignment PIN_160 -to DAC_BCK -set_location_assignment PIN_64 -to CS_CASH -set_location_assignment PIN_63 -to CS_ROM -set_location_assignment PIN_62 -to CLKZ1 -set_location_assignment PIN_62 -to CLKZ[1] -set_location_assignment PIN_15 -to CAS_3 -set_location_assignment PIN_15 -to CAS_[3] -set_location_assignment PIN_13 -to CAS_2 -set_location_assignment PIN_13 -to CAS_[2] -set_location_assignment PIN_14 -to CAS_1 -set_location_assignment PIN_14 -to CAS_[1] -set_location_assignment PIN_12 -to CAS_0 -set_location_assignment PIN_12 -to CAS_[0] -set_location_assignment PIN_18 -to /WAIT -set_location_assignment PIN_25 -to /RF -set_location_assignment PIN_24 -to /M1 -set_location_assignment PIN_24 -to /M[1] -set_location_assignment PIN_79 -to /WR -set_location_assignment PIN_183 -to TG42 -set_location_assignment PIN_183 -to TG[42] -set_location_assignment PIN_80 -to /RD -set_location_assignment PIN_78 -to /IO -set_location_assignment PIN_184 -to /MR -set_location_assignment PIN_182 -to /HALT -set_location_assignment PIN_47 -to A15 -set_location_assignment PIN_47 -to A[15] -set_location_assignment PIN_46 -to A14 -set_location_assignment PIN_46 -to A[14] -set_location_assignment PIN_45 -to A13 -set_location_assignment PIN_45 -to A[13] -set_location_assignment PIN_44 -to A12 -set_location_assignment PIN_44 -to A[12] -set_location_assignment PIN_41 -to A11 -set_location_assignment PIN_41 -to A[11] -set_location_assignment PIN_40 -to A10 -set_location_assignment PIN_40 -to A[10] -set_location_assignment PIN_39 -to A9 -set_location_assignment PIN_39 -to A[9] -set_location_assignment PIN_38 -to A8 -set_location_assignment PIN_38 -to A[8] -set_location_assignment PIN_37 -to A7 -set_location_assignment PIN_37 -to A[7] -set_location_assignment PIN_36 -to A6 -set_location_assignment PIN_36 -to A[6] -set_location_assignment PIN_31 -to A5 -set_location_assignment PIN_31 -to A[5] -set_location_assignment PIN_30 -to A4 -set_location_assignment PIN_30 -to A[4] -set_location_assignment PIN_29 -to A3 -set_location_assignment PIN_29 -to A[3] -set_location_assignment PIN_28 -to A2 -set_location_assignment PIN_28 -to A[2] -set_location_assignment PIN_27 -to A1 -set_location_assignment PIN_27 -to A[1] -set_location_assignment PIN_26 -to A0 -set_location_assignment PIN_26 -to A[0] -set_location_assignment PIN_189 -to MD13 -set_location_assignment PIN_189 -to MD[13] -set_global_assignment -name FMAX_REQUIREMENT "100 MHz" -set_global_assignment -name CUT_OFF_CLEAR_AND_PRESET_PATHS ON -set_global_assignment -name CUT_OFF_IO_PIN_FEEDBACK ON -set_instance_assignment -name SLOW_SLEW_RATE ON -to /wait -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to wr_dwg -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to wr_dwg -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to wr_dwg -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to wr_dwg -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to RDXA -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to RDXA -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SXA -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to SXA -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD00 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD00 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[00] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[00] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD01 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD01 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[01] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[01] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD02 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD02 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[02] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[02] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD03 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD03 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[03] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[03] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD04 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD04 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[04] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[04] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD05 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD05 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[05] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[05] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD06 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD06 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[06] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[06] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD07 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD07 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[07] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[07] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD10 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD10 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[10] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[10] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD11 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD11 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[11] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[11] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD12 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD12 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[12] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[12] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD13 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD13 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[13] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[13] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD14 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD14 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[14] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[14] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD15 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD15 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[15] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[15] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD16 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD16 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[16] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[16] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD17 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD17 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[17] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[17] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD20 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD20 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[20] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[20] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD21 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD21 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[21] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[21] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD22 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD22 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[22] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[22] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD23 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD23 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[23] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[23] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD24 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD24 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[24] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[24] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD25 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD25 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[25] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[25] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD26 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD26 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[26] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[26] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD27 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD27 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[27] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[27] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD30 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD30 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[30] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[30] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD31 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD31 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[31] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[31] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD32 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD32 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[32] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[32] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD33 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD33 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[33] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[33] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD34 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD34 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[34] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[34] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD35 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD35 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[35] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[35] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD36 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD36 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[36] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[36] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD37 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD37 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[37] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VD[37] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to RAS_0 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to RAS_0 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to RAS_[0] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to RAS_[0] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to RAS_1 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to RAS_1 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to RAS_[1] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to RAS_[1] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to CAS_0 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to CAS_0 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to CAS_[0] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to CAS_[0] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to CAS_0 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to CAS_[0] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to CAS_1 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to CAS_1 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to CAS_[1] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to CAS_[1] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to CAS_1 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to CAS_[1] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to CAS_2 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to CAS_2 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to CAS_[2] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to CAS_[2] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to CAS_2 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to CAS_[2] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to CAS_3 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to CAS_3 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to CAS_[3] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to CAS_[3] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to CAS_3 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to CAS_[3] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to RAS_0 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to RAS_[0] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to RAS_1 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to RAS_[1] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to XACS -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to XACS -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /wr -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /wr -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /WE -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /WE -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /wait -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /wait -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA0 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA0 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[0] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[0] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA1 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA1 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[1] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[1] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA2 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA2 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[2] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[2] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA3 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA3 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[3] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[3] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA4 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA4 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[4] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[4] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA5 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA5 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[5] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[5] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA6 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA6 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[6] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[6] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA7 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA7 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[7] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[7] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA8 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA8 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[8] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[8] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA9 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA9 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[9] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[9] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA10 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA10 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[10] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[10] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA11 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA11 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[11] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[11] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA12 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA12 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[12] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[12] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA13 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA13 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[13] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[13] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA14 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA14 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[14] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[14] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA15 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA15 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[15] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to VA[15] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /rf -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /rf -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /reset -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /reset -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /rd -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /rd -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ra14 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ra14 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ra[14] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ra[14] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ra14 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ra[14] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ra15 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ra15 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ra[15] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ra[15] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ra15 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ra[15] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ra16 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ra16 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ra[16] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ra[16] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ra16 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ra[16] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ra17 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ra17 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ra[17] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ra[17] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ra17 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ra[17] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /mr -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /mr -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /m1 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /m1 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /m[1] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /m[1] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma12 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma12 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[12] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[12] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma13 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma13 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[13] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[13] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma14 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma14 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[14] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[14] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma0 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma0 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[0] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[0] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma1 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma1 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[1] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[1] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma2 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma2 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[2] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[2] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma3 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma3 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[3] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[3] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma4 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma4 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[4] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[4] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma5 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma5 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[5] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[5] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma6 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma6 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[6] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[6] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma7 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma7 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[7] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[7] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma8 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma8 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[8] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[8] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma9 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma9 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[9] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[9] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma10 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma10 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[10] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[10] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma11 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma11 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[11] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to ma[11] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /io -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /io -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /HALT -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to /HALT -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d0 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d0 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d[0] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d[0] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d1 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d1 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d[1] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d[1] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d2 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d2 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d[2] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d[2] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d3 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d3 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d[3] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d[3] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d4 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d4 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d[4] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d[4] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d5 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d5 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d[5] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d[5] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d6 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d6 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d[6] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d[6] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d7 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d7 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d[7] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to d[7] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to CS_CASH -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to CS_CASH -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to CS_CASH -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to CS_CASH -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to cs_rom -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to cs_rom -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to cs_rom -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to cs_rom -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a0 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a0 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a[0] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a[0] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a1 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a1 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a[1] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a[1] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a2 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a2 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a[2] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a[2] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a3 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a3 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a[3] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a[3] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a4 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a4 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a[4] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a[4] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a5 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a5 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a[5] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a[5] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a6 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a6 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a[6] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a[6] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a7 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a7 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a[7] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a[7] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A8 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A8 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A[8] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A[8] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a9 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a9 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a[9] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a[9] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A10 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A10 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A[10] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A[10] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a11 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a11 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a[11] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to a[11] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A12 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A12 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A[12] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A[12] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A13 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A13 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A[13] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A[13] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A14 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A14 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A[14] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A[14] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A15 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A15 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A[15] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to A[15] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md0 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md0 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[0] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[0] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md1 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md1 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[1] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[1] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md2 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md2 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[2] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[2] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md3 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md3 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[3] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[3] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md4 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md4 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[4] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[4] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md5 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md5 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[5] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[5] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md6 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md6 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[6] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[6] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md7 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md7 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[7] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[7] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md8 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md8 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[8] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[8] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md9 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md9 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[9] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[9] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md10 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md10 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[10] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[10] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md11 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md11 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[11] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[11] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md12 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md12 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[12] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[12] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md13 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md13 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[13] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[13] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md14 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md14 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[14] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[14] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md15 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md15 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[15] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to md[15] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to wr_awg -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to XA0 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to XA0 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to XA[0] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to XA[0] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to XA1 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to XA1 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to XA[1] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to XA[1] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to XA2 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to XA2 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to XA[2] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to XA[2] -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to XA3 -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to XA3 -entity sp2_acex -set_instance_assignment -name FLEX6K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to XA[3] -entity sp2_acex -set_instance_assignment -name FLEX10K_DECREASE_INPUT_DELAY_TO_INTERNAL_CELLS OFF -to XA[3] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma0 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma[0] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma1 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma[1] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma2 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma[2] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma3 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma[3] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma4 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma[4] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma5 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma[5] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma6 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma[6] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma7 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma[7] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma8 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma[8] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma9 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma[9] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma10 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma[10] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma11 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma[11] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD00 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[00] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD01 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[01] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD02 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[02] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD03 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[03] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD04 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[04] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD05 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[05] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD06 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[06] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD07 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[07] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD10 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[10] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD11 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[11] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD12 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[12] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD13 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[13] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD14 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[14] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD15 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[15] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD16 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[16] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD17 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[17] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD20 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[20] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD21 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[21] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD22 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[22] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD23 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[23] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD24 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[24] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD25 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[25] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD26 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[26] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD27 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[27] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD30 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[30] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD31 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[31] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD32 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[32] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD33 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[33] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD34 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[34] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD35 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[35] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD36 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[36] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD37 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to VD[37] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA0 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA[0] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA1 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA[1] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA2 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA[2] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA3 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA[3] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA4 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA[4] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA6 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA[6] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA5 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA[5] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA7 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA[7] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA8 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA[8] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA9 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA[9] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA10 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA[10] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA11 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA[11] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA12 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA[12] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA13 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA[13] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA14 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA[14] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA15 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VA[15] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD00 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[00] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD01 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[01] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD02 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[02] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD03 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[03] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD04 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[04] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD05 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[05] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD06 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[06] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD07 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[07] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD10 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[10] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD11 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[11] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD12 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[12] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD13 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[13] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD14 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[14] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD15 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[15] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD16 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[16] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD17 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[17] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD20 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[20] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD21 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[21] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD22 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[22] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD23 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[23] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD24 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[24] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD25 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[25] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD26 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[26] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD27 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[27] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD30 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[30] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD31 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[31] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD32 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[32] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD33 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[33] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD34 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[34] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD35 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[35] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD36 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[36] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD37 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to VD[37] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to WR_COL -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA0 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA[0] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA1 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA[1] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA2 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA[2] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA3 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA[3] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA4 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA[4] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA5 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA[5] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA6 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA[6] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA7 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA[7] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA8 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA[8] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA9 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA[9] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA10 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA[10] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA11 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA[11] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA12 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA[12] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA13 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA[13] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA14 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA[14] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA15 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to VA[15] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to V_WR0 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to V_WR[0] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to V_WR1 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to V_WR[1] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to V_WR2 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to V_WR[2] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to V_WR3 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to V_WR[3] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to XA0 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to XA[0] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to XA1 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to XA[1] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to XA2 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to XA[2] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to XA3 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to XA[3] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to XACS -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to /wait -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to SXA -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to /rf -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to /reset -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to RDXA -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to /rd -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to /m1 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to /m[1] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to /mr -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to /io -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to /HALT -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to /WE -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to /WE -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to RAS_0 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to RAS_[0] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to RAS_1 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to RAS_[1] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to CAS_0 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to CAS_[0] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to CAS_1 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to CAS_[1] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to CAS_2 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to CAS_[2] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to CAS_3 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to CAS_[3] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma0 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma[0] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma1 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma1 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma[1] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma[1] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma2 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma2 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma[2] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma[2] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma3 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma3 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma[3] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma[3] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma4 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma4 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma[4] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma[4] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma5 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma5 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma[5] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma[5] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma6 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma6 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma[6] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma[6] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma7 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma7 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma[7] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma[7] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma8 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma8 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma[8] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma[8] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma9 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma9 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma[9] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma[9] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma10 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma10 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma[10] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma[10] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma11 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma11 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma[11] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma[11] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma1 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma[1] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma2 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma[2] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma3 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma[3] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma4 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma[4] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma5 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma[5] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma6 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma[6] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma7 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma[7] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma8 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma[8] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma9 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma[9] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma10 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma[10] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma11 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma[11] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma12 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma[12] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma12 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma[12] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma13 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma[13] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma13 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma[13] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma14 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ma[14] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma14 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ma[14] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to SXA -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to RDXA -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to RDXA -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to /mr -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to /m1 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to /m[1] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to /rd -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to wr_awg -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to wr_awg -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ra14 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ra[14] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ra14 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ra[14] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ra15 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ra[15] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ra15 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ra[15] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ra16 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ra[16] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ra16 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ra[16] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ra17 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to ra[17] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ra17 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to ra[17] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to CS_CASH -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to cs_rom -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to /WE -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to RAS_0 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to RAS_[0] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to RAS_1 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to RAS_[1] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to CAS_0 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to CAS_[0] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to CAS_1 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to CAS_[1] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to CAS_2 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to CAS_[2] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to CAS_3 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to CAS_[3] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to V_WR0 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to V_WR[0] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to V_WR1 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to V_WR[1] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to V_WR2 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to V_WR[2] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to V_WR3 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to V_WR[3] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to v_cs0 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to v_cs[0] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to v_cs1 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to v_cs[1] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to XACS -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to /wr -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to XA0 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to XA[0] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to XA1 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to XA[1] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to XA2 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to XA[2] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to XA3 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to XA[3] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to TG42 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to TG[42] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to d0 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to d[0] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to d1 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to d[1] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to d2 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to d[2] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to d3 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to d[3] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to d4 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to d[4] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to d5 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to d[5] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to d6 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to d[6] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to d7 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to d[7] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md0 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md[0] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md1 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md[1] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md2 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md[2] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md3 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md[3] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md4 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md[4] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md5 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md[5] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md6 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md[6] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md7 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md[7] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md8 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md[8] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md9 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md[9] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md10 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md[10] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md11 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md[11] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md12 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md[12] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md13 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md[13] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md14 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md[14] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md15 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to md[15] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to a0 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to a[0] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to a1 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to a[1] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to a2 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to a[2] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to a3 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to a[3] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to a4 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to a[4] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to a5 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to a[5] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to a6 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to a[6] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to A8 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to A[8] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to a7 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to a[7] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to A10 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to A[10] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to a9 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to a[9] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to a11 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to a[11] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to A12 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to A[12] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to A13 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to A[13] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to A14 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to A[14] -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to A15 -entity sp2_acex -set_instance_assignment -name PCI_IO OFF -to A[15] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to /reset -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to /rf -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a0 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a[0] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a1 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a[1] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a2 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a[2] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a3 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a[3] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a4 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a[4] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a5 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a[5] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a6 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a[6] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a7 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a[7] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a8 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a[8] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a9 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a[9] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a10 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a[10] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a11 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to a[11] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to A12 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to A[12] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to A13 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to A[13] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to A14 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to A[14] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to A15 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to A[15] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to /mr -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to /m1 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to /m[1] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to /HALT -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to /io -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to d0 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to d[0] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to d1 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to d[1] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to d2 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to d[2] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to d3 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to d[3] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to d4 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to d[4] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to d5 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to d[5] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to d6 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to d[6] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to d7 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to d[7] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to DAC_BCK -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to DAC_DATA -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to DAC_WS -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to WR_COL -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to WR_COL -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to WR_COL -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to v_cs0 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to v_cs[0] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to v_cs1 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to v_cs[1] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma0 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma0 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to ma[0] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to ma[0] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma0 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma[0] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma1 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma[1] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma2 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma[2] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma3 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma[3] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma4 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma[4] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma5 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma[5] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma6 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma[6] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma7 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma[7] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma8 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma[8] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma9 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma[9] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma10 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma[10] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma11 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma[11] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma12 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma[12] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma13 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma[13] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma14 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to ma[14] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md0 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md[0] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md0 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md[0] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md1 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md[1] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md1 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md[1] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md2 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md[2] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md2 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md[2] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md3 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md[3] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md3 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md[3] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md4 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md[4] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md4 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md[4] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md5 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md[5] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md5 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md[5] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md6 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md[6] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md6 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md[6] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md7 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md[7] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md7 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md[7] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md8 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md[8] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md8 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md[8] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md9 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md[9] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md9 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md[9] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md10 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md[10] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md10 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md[10] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md11 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md[11] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md11 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md[11] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md12 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md[12] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md12 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md[12] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md13 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md[13] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md13 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md[13] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md14 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md[14] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md14 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md[14] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md15 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to md[15] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md15 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE ON -to md[15] -entity sp2_acex -set_instance_assignment -name IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL ON -to "video2:SVIDEO|SVA12" -entity sp2_acex -set_instance_assignment -name IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL ON -to "video2:SVIDEO|SVA[12]" -entity sp2_acex -set_instance_assignment -name IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL ON -to "video2:SVIDEO|SVA11" -entity sp2_acex -set_instance_assignment -name IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL ON -to "video2:SVIDEO|SVA[11]" -entity sp2_acex -set_instance_assignment -name IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL ON -to "video2:SVIDEO|SVA10" -entity sp2_acex -set_instance_assignment -name IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL ON -to "video2:SVIDEO|SVA[10]" -entity sp2_acex -set_instance_assignment -name IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL ON -to "video2:SVIDEO|SVA0" -entity sp2_acex -set_instance_assignment -name IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL ON -to "video2:SVIDEO|SVA[0]" -entity sp2_acex -set_instance_assignment -name IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL ON -to "video2:SVIDEO|SVA1" -entity sp2_acex -set_instance_assignment -name IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL ON -to "video2:SVIDEO|SVA[1]" -entity sp2_acex -set_instance_assignment -name IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL ON -to "video2:SVIDEO|SVA2" -entity sp2_acex -set_instance_assignment -name IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL ON -to "video2:SVIDEO|SVA[2]" -entity sp2_acex -set_instance_assignment -name IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL ON -to "video2:SVIDEO|SVA3" -entity sp2_acex -set_instance_assignment -name IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL ON -to "video2:SVIDEO|SVA[3]" -entity sp2_acex -set_instance_assignment -name IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL ON -to "video2:SVIDEO|SVA4" -entity sp2_acex -set_instance_assignment -name IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL ON -to "video2:SVIDEO|SVA[4]" -entity sp2_acex -set_instance_assignment -name IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL ON -to "video2:SVIDEO|SVA5" -entity sp2_acex -set_instance_assignment -name IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL ON -to "video2:SVIDEO|SVA[5]" -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to v_cs0 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to v_cs[0] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to v_cs1 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to v_cs[1] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD00 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[00] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD01 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[01] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD02 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[02] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD03 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[03] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD04 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[04] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD05 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[05] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD06 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[06] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD07 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[07] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD10 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[10] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD11 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[11] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD12 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[12] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD13 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[13] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD14 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[14] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD15 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[15] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD16 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[16] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD17 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[17] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD20 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[20] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD21 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[21] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD22 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[22] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD23 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[23] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD24 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[24] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD25 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[25] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD26 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[26] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD27 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[27] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD30 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[30] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD31 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[31] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD32 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[32] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD33 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[33] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD34 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[34] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD35 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[35] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD36 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[36] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD37 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VD[37] -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to CLKZ1 -entity sp2_acex -set_instance_assignment -name SLOW_SLEW_RATE OFF -to CLKZ[1] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to "video2:SVIDEO|D_PIC00" -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to "video2:SVIDEO|D_PIC[00]" -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to "video2:SVIDEO|D_PIC01" -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to "video2:SVIDEO|D_PIC[01]" -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to "video2:SVIDEO|D_PIC02" -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to "video2:SVIDEO|D_PIC[02]" -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to "video2:SVIDEO|D_PIC03" -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to "video2:SVIDEO|D_PIC[03]" -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to "video2:SVIDEO|D_PIC04" -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to "video2:SVIDEO|D_PIC[04]" -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to "video2:SVIDEO|D_PIC05" -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to "video2:SVIDEO|D_PIC[05]" -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to "video2:SVIDEO|D_PIC06" -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to "video2:SVIDEO|D_PIC[06]" -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to "video2:SVIDEO|D_PIC07" -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to "video2:SVIDEO|D_PIC[07]" -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA0 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA0 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA[0] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA[0] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA1 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA1 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA[1] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA[1] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA2 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA2 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA[2] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA[2] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA3 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA3 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA[3] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA[3] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA4 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA4 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA[4] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA[4] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA5 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA5 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA[5] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA[5] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA6 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA6 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA[6] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA[6] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA7 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA7 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA[7] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA[7] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA8 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA8 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA[8] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA[8] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA9 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA9 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA[9] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA[9] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA10 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA10 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA[10] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA[10] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA11 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA11 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA[11] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA[11] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA12 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA12 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA[12] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA[12] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA13 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA13 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA[13] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA[13] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA14 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA14 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA[14] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA[14] -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA15 -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA15 -entity sp2_acex -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to VA[15] -entity sp2_acex -set_instance_assignment -name FAST_INPUT_REGISTER ON -to VA[15] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to V_WR0 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to V_WR[0] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to V_WR1 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to V_WR[1] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to V_WR2 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to V_WR[2] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to V_WR3 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to V_WR[3] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA0 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA[0] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA1 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA[1] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA2 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA[2] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA3 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA[3] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA4 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA[4] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA5 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA[5] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA6 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA[6] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA7 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA[7] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA8 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA[8] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA9 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA[9] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA10 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA[10] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA11 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA[11] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA12 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA[12] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA13 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA[13] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA14 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA[14] -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA15 -entity sp2_acex -set_instance_assignment -name INSERT_ADDITIONAL_LOGIC_CELL OFF -to VA[15] -entity sp2_acex -set_global_assignment -name FLEX10K_DEVICE_IO_STANDARD LVTTL/LVCMOS -set_global_assignment -name FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE OFF -set_global_assignment -name RELEASE_CLEARS_BEFORE_TRI_STATES ON -set_global_assignment -name AUTO_RESTART_CONFIGURATION ON -set_global_assignment -name ENABLE_VREFB_PIN OFF -set_global_assignment -name ENABLE_VREFA_PIN OFF -set_global_assignment -name MAX7000B_VCCIO_IOBANK2 3.3V -set_global_assignment -name MAX7000B_VCCIO_IOBANK1 3.3V -set_global_assignment -name DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE OFF -set_global_assignment -name FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE OFF -set_global_assignment -name ENABLE_JTAG_BST_SUPPORT OFF -set_global_assignment -name FLEX6K_CONFIGURATION_SCHEME "PASSIVE SERIAL" -set_global_assignment -name FLEX10K_ENABLE_LOCK_OUTPUT OFF -set_global_assignment -name FLEX10K_CONFIGURATION_SCHEME "PASSIVE SERIAL" -set_global_assignment -name FLEX10K_JTAG_USER_CODE 7F -set_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFF -set_global_assignment -name ENABLE_DEVICE_WIDE_OE OFF -set_global_assignment -name ENABLE_DEVICE_WIDE_RESET OFF -set_global_assignment -name RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name RESERVE_RDYNBUSY_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name USER_START_UP_CLOCK OFF -set_global_assignment -name SECURITY_BIT OFF -set_global_assignment -name FLEX6K_OPTIMIZATION_TECHNIQUE AREA -set_global_assignment -name FLEX10K_OPTIMIZATION_TECHNIQUE AREA -set_global_assignment -name AUTO_IMPLEMENT_IN_ROM OFF -set_global_assignment -name AUTO_OPEN_DRAIN_PINS ON -set_global_assignment -name STATE_MACHINE_PROCESSING AUTO -set_global_assignment -name AUTO_PACKED_REGISTERS OFF -set_global_assignment -name AUTO_FAST_INPUT_REGISTERS OFF -set_global_assignment -name AUTO_FAST_OUTPUT_REGISTERS OFF -set_global_assignment -name AUTO_GLOBAL_OE ON -set_global_assignment -name AUTO_GLOBAL_REGISTER_CONTROLS ON -set_global_assignment -name AUTO_GLOBAL_CLOCK ON -set_global_assignment -name SMART_RECOMPILE OFF -set_global_assignment -name SAVE_DISK_SPACE ON -set_global_assignment -name SIMULATION_MODE TIMING -set_global_assignment -name EDA_SHOW_LMF_MAPPING_MESSAGES OFF -section_id eda_design_synthesis -set_global_assignment -name EDA_INPUT_GND_NAME GND -section_id eda_design_synthesis -set_global_assignment -name EDA_INPUT_VCC_NAME VCC -section_id eda_design_synthesis -set_global_assignment -name END_TIME "12 us" -set_global_assignment -name START_TIME "0 ns" -set_global_assignment -name GLITCH_INTERVAL "0 ns" -set_global_assignment -name GLITCH_DETECTION OFF -set_global_assignment -name CHECK_OUTPUTS OFF -set_global_assignment -name SETUP_HOLD_DETECTION OFF -set_global_assignment -name CUT_OFF_READ_DURING_WRITE_PATHS OFF -set_global_assignment -name NUMBER_OF_SOURCES_PER_DESTINATION_TO_REPORT 10 -set_global_assignment -name EXCLUDE_TPD_PATHS_LESS_THAN "0 ns" -set_global_assignment -name AUTO_LCELL_INSERTION ON -entity sp2_acex \ No newline at end of file diff --git a/src/altera/quartus/acex/SP2_ACEX.qws b/src/altera/quartus/acex/SP2_ACEX.qws deleted file mode 100644 index f0c6eaa..0000000 --- a/src/altera/quartus/acex/SP2_ACEX.qws +++ /dev/null @@ -1,18 +0,0 @@ -[ProjectWorkspace] -ptn_Child1=Frames -[ProjectWorkspace.Frames] -ptn_Child1=ChildFrames -[ProjectWorkspace.Frames.ChildFrames] -ptn_Child1=Document-0 -ptn_Child2=Document-1 -ptn_Child3=Document-2 -[ProjectWorkspace.Frames.ChildFrames.Document-2] -ptn_Child1=ViewFrame-0 -[ProjectWorkspace.Frames.ChildFrames.Document-2.ViewFrame-0] -DocPathName=KBD_INI2.MIF -DocumentCLSID={0b720e69-67da-11d0-bf4f-0000c08cb0c0} -IsChildFrameDetached=False -IsActiveChildFrame=True -ptn_Child1=StateMap -[ProjectWorkspace.Frames.ChildFrames.Document-2.ViewFrame-0.StateMap] -AFC_IN_REPORT=False diff --git a/src/altera/quartus/acex/VIDEO2.ACF b/src/altera/quartus/acex/VIDEO2.ACF deleted file mode 100644 index 57d4f1c..0000000 --- a/src/altera/quartus/acex/VIDEO2.ACF +++ /dev/null @@ -1,588 +0,0 @@ --- --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. --- -CHIP video2 -BEGIN - DEVICE = AUTO; -END; - -DEFAULT_DEVICES -BEGIN - ASK_BEFORE_ADDING_EXTRA_DEVICES = ON; - AUTO_DEVICE = EP1K30TC144-1; - AUTO_DEVICE = EP1K30QC208-1; - AUTO_DEVICE = EP1K30FC256-1; - AUTO_DEVICE = EP1K50TC144-1; - AUTO_DEVICE = EP1K50QC208-1; - AUTO_DEVICE = EP1K50FC256-1; - AUTO_DEVICE = EP1K50FC484-1; - AUTO_DEVICE = EP1K100QC208-1; - AUTO_DEVICE = EP1K100FC256-1; - AUTO_DEVICE = EP1K100FC484-1; -END; - -TIMING_POINT -BEGIN - MAINTAIN_STABLE_SYNTHESIS = ON; - DEVICE_FOR_TIMING_SYNTHESIS = EP1K30FC256-3; - CUT_ALL_BIDIR = ON; - CUT_ALL_CLEAR_PRESET = ON; - FREQUENCY = 200MHz; -END; - -IGNORED_ASSIGNMENTS -BEGIN - IGNORE_CLIQUE_ASSIGNMENTS = OFF; - IGNORE_LOGIC_OPTION_ASSIGNMENTS = OFF; - IGNORE_TIMING_ASSIGNMENTS = OFF; - IGNORE_CHIP_ASSIGNMENTS = OFF; - IGNORE_PIN_ASSIGNMENTS = OFF; - IGNORE_LC_ASSIGNMENTS = OFF; - IGNORE_DEVICE_ASSIGNMENTS = OFF; - IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF; - DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF; - FIT_IGNORE_TIMING = OFF; -END; - -LOGIC_OPTIONS -BEGIN - |VAO15 : FAST_IO = ON; - |VAO14 : FAST_IO = ON; - |VAO13 : FAST_IO = ON; - |VAO12 : FAST_IO = ON; - |VAO11 : FAST_IO = ON; - |VAO10 : FAST_IO = ON; - |VAO9 : FAST_IO = ON; - |VAO8 : FAST_IO = ON; - |VAO7 : FAST_IO = ON; - |VAO6 : FAST_IO = ON; - |VAO5 : FAST_IO = ON; - |VAO4 : FAST_IO = ON; - |VAO3 : FAST_IO = ON; - |VAO2 : FAST_IO = ON; - |VAO1 : FAST_IO = ON; - |VAO0 : FAST_IO = ON; -END; - -GLOBAL_PROJECT_DEVICE_OPTIONS -BEGIN - RESERVED_LCELLS_PERCENT = 0; - RESERVED_PINS_PERCENT = 0; - SECURITY_BIT = OFF; - USER_CLOCK = OFF; - AUTO_RESTART = OFF; - RELEASE_CLEARS = OFF; - ENABLE_DCLK_OUTPUT = OFF; - DISABLE_TIME_OUT = OFF; - CONFIG_SCHEME = ACTIVE_SERIAL; - FLEX8000_ENABLE_JTAG = OFF; - DATA0 = RESERVED_TRI_STATED; - DATA1_TO_DATA7 = UNRESERVED; - nWS_nRS_nCS_CS = UNRESERVED; - RDYnBUSY = UNRESERVED; - RDCLK = UNRESERVED; - SDOUT = RESERVED_DRIVES_OUT; - ADD0_TO_ADD12 = UNRESERVED; - ADD13 = UNRESERVED; - ADD14 = UNRESERVED; - ADD15 = UNRESERVED; - ADD16 = UNRESERVED; - ADD17 = UNRESERVED; - CLKUSR = UNRESERVED; - nCEO = UNRESERVED; - ENABLE_CHIP_WIDE_RESET = OFF; - ENABLE_CHIP_WIDE_OE = OFF; - ENABLE_INIT_DONE_OUTPUT = OFF; - FLEX10K_JTAG_USER_CODE = 7F; - CONFIG_SCHEME_10K = PASSIVE_SERIAL; - MAX7000S_USER_CODE = FFFF; - FLEX10K_ENABLE_LOCK_OUTPUT = OFF; - MAX7000S_ENABLE_JTAG = ON; - MULTIVOLT_IO = OFF; - CONFIG_SCHEME_FLEX_6000 = PASSIVE_SERIAL; - FLEX6000_ENABLE_JTAG = OFF; - FLEX10K_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX10KA_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = ON; - FLEX6000_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - MAX7000AE_USER_CODE = FFFFFFFF; - MAX7000AE_ENABLE_JTAG = ON; - FLEX_CONFIGURATION_EPROM = AUTO; - CONFIG_EPROM_USER_CODE = FFFFFFFF; - CONFIG_EPROM_PULLUP_RESISTOR = ON; - MAX7000B_VCCIO_IOBANK1 = 3.3V; - MAX7000B_VCCIO_IOBANK2 = 3.3V; - MAX7000B_ENABLE_VREFA = OFF; - MAX7000B_ENABLE_VREFB = OFF; -END; - -GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS -BEGIN - OPTIMIZE_FOR_SPEED = 5; - MULTI_LEVEL_SYNTHESIS_MAX5000_7000 = OFF; - AUTO_GLOBAL_CLOCK = ON; - AUTO_GLOBAL_CLEAR = ON; - AUTO_GLOBAL_PRESET = ON; - AUTO_GLOBAL_OE = ON; - AUTO_FAST_IO = OFF; - DEVICE_FAMILY = ACEX1K; - AUTO_REGISTER_PACKING = OFF; - ONE_HOT_STATE_MACHINE_ENCODING = OFF; - AUTO_OPEN_DRAIN_PINS = ON; - AUTO_IMPLEMENT_IN_EAB = OFF; - MULTI_LEVEL_SYNTHESIS_MAX9000 = ON; - STYLE = FAST; -END; - -COMPILER_PROCESSING_CONFIGURATION -BEGIN - USE_QUARTUS_FITTER = ON; - DESIGN_DOCTOR = OFF; - DESIGN_DOCTOR_RULES = EPLD; - FUNCTIONAL_SNF_EXTRACTOR = OFF; - TIMING_SNF_EXTRACTOR = ON; - OPTIMIZE_TIMING_SNF = OFF; - LINKED_SNF_EXTRACTOR = OFF; - RPT_FILE_EQUATIONS = ON; - RPT_FILE_HIERARCHY = ON; - RPT_FILE_LCELL_INTERCONNECT = ON; - RPT_FILE_USER_ASSIGNMENTS = ON; - GENERATE_AHDL_TDO_FILE = OFF; - SMART_RECOMPILE = OFF; - FITTER_SETTINGS = NORMAL; - PRESERVE_ALL_NODE_NAME_SYNONYMS = OFF; -END; - -COMPILER_INTERFACES_CONFIGURATION -BEGIN - EDIF_NETLIST_WRITER = OFF; - EDIF_OUTPUT_VERSION = 200; - XNF_EMULATE_TRI_STATE_BUSES = INTERNAL_LOGIC; - XNF_TRANSLATE_INTERNAL_NODE_NAMES = ON; - XNF_GENERATE_AHDL_TDX_FILE = ON; - VERILOG_NETLIST_WRITER = OFF; - VHDL_NETLIST_WRITER = OFF; - USE_SYNOPSYS_SYNTHESIS = OFF; - SYNOPSYS_COMPILER = DESIGN; - SYNOPSYS_DESIGNWARE = OFF; - SYNOPSYS_HIERARCHICAL_COMPILATION = ON; - SYNOPSYS_BOUNDARY_OPTIMIZATION = OFF; - SYNOPSYS_MAPPING_EFFORT = MEDIUM; - VHDL_READER_VERSION = VHDL87; - VHDL_WRITER_VERSION = VHDL87; - VERILOG_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - VERILOG_TRUNCATE_HIERARCHY_PATH = OFF; - VHDL_TRUNCATE_HIERARCHY_PATH = OFF; - EDIF_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_FLATTEN_BUS = OFF; - VHDL_FLATTEN_BUS = OFF; - VERILOG_OUTPUT_DELAY_CONSTRUCTS = VO_FILE; - VHDL_OUTPUT_DELAY_CONSTRUCTS = VHO_FILE; - VHDL_GENERATE_CONFIGURATION_DECLARATION = OFF; - EDIF_INPUT_LMF1 = *.lmf; - EDIF_INPUT_LMF2 = *.lmf; - EDIF_OUTPUT_EDC_FILE = *.edc; - EDIF_INPUT_VCC = VCC; - EDIF_INPUT_GND = GND; - EDIF_OUTPUT_VCC = VCC; - EDIF_OUTPUT_GND = GND; - EDIF_INPUT_USE_LMF1 = OFF; - EDIF_INPUT_USE_LMF2 = OFF; - EDIF_OUTPUT_USE_EDC = OFF; - EDIF_OUTPUT_DELAY_CONSTRUCTS = EDO_FILE; - EDIF_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - EDIF_OUTPUT_INCLUDE_SPECIAL_PRIM = OFF; - EDIF_OUTPUT_FORCE_0NS_DELAYS = OFF; - EDIF_FLATTEN_BUS = OFF; - EDIF_BUS_DELIMITERS = []; - EDIF_INPUT_SHOW_LMF_MAPPING_MESSAGES = OFF; - NETLIST_OUTPUT_TIME_SCALE = 0.1ns; -END; - -CUSTOM_DESIGN_DOCTOR_RULES -BEGIN - RIPPLE_CLOCKS = ON; - GATED_CLOCKS = ON; - MULTI_LEVEL_CLOCKS = ON; - MULTI_CLOCK_NETWORKS = ON; - STATIC_HAZARDS_BEFORE_SYNTHESIS = ON; - STATIC_HAZARDS_AFTER_SYNTHESIS = OFF; - PRESET_CLEAR_NETWORKS = ON; - ASYNCHRONOUS_INPUTS = ON; - DELAY_CHAINS = ON; - RACE_CONDITIONS = ON; - EXPANDER_NETWORKS = ON; - MASTER_RESET = OFF; -END; - -SIMULATOR_CONFIGURATION -BEGIN - CHECK_OUTPUTS = OFF; - USE_DEVICE = OFF; - SETUP_HOLD = OFF; - OSCILLATION = OFF; - OSCILLATION_TIME = 0.0ns; - GLITCH = OFF; - GLITCH_TIME = 0.0ns; - START_TIME = 0.0ns; - BIDIR_PIN = STRONG; - END_TIME = 10.0us; -END; - -TIMING_ANALYZER_CONFIGURATION -BEGIN - ANALYSIS_MODE = REGISTERED_PERFORMANCE; - AUTO_RECALCULATE = OFF; - CUT_OFF_IO_PIN_FEEDBACK = ON; - CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; - LIST_ONLY_LONGEST_PATH = ON; - CELL_WIDTH = 18; - DELAY_MATRIX_OPTIONS = SHOW_ALL_PATHS; - INCLUDE_PATHS_GREATER_THAN = OFF; - INCLUDE_PATHS_GREATER_THAN_VALUE = 0.0ns; - INCLUDE_PATHS_LESS_THAN = OFF; - INCLUDE_PATHS_LESS_THAN_VALUE = 214.7483647ms; - REGISTERED_PERFORMANCE_OPTIONS = NUMBER_OF_PATHS; - LIST_PATH_COUNT = 10; - LIST_PATH_FREQUENCY = 10MHz; - CUT_OFF_RAM_REGISTERED_WE_PATHS = OFF; -END; - -OTHER_CONFIGURATION -BEGIN - LAST_MAXPLUS2_VERSION = 10.0; - EXPLICIT_FAMILY = 1; - COMPILER_DATA = "1,1,0,1,0,0,0,1,1,1,1,0,1,1,1"; - ORIGINAL_MAXPLUS2_VERSION = 9.6; - ROW_PINS_PERCENT = 50; - EXP_PER_LCELL_PERCENT = 100; - FAN_IN_PER_LCELL_PERCENT = 100; - LCELLS_PER_ROW_PERCENT = 100; - LOCAL_INTERCONNECT_PER_LAB_PERCENT = 100; - DEFAULT_9K_EXP_PER_LCELL = 1/2; - FLEX_10K_52_COLUMNS = 40; - NORMAL_LCELL_INSERT = ON; - CARRY_OUT_PINS_LCELL_INSERT = OFF; - ROW_PINS_LCELL_INSERT = ON; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX5000 -BEGIN - CASCADE_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CARRY_CHAIN_LENGTH = -1; - MINIMIZATION = FULL; - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = ON; - TURBO_BIT = OFF; - PARALLEL_EXPANDERS = OFF; - IGNORE_SOFT_BUFFERS = OFF; - FAST_IO = OFF; - SOFT_BUFFER_INSERTION = ON; - DECOMPOSE_GATES = ON; - REDUCE_LOGIC = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = ON; - SUBFACTOR_EXTRACTION = ON; - MULTI_LEVEL_FACTORING = ON; - RESYNTHESIZE_NETWORK = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - REGISTER_OPTIMIZATION = ON; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX7000 -BEGIN - CASCADE_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CARRY_CHAIN_LENGTH = -1; - MINIMIZATION = FULL; - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = ON; - TURBO_BIT = ON; - PARALLEL_EXPANDERS = OFF; - IGNORE_SOFT_BUFFERS = OFF; - FAST_IO = OFF; - SOFT_BUFFER_INSERTION = ON; - DECOMPOSE_GATES = ON; - REDUCE_LOGIC = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = ON; - SUBFACTOR_EXTRACTION = ON; - MULTI_LEVEL_FACTORING = ON; - RESYNTHESIZE_NETWORK = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - REGISTER_OPTIMIZATION = ON; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.CLASSIC -BEGIN - CASCADE_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CARRY_CHAIN_LENGTH = -1; - MINIMIZATION = FULL; - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = OFF; - TURBO_BIT = ON; - PARALLEL_EXPANDERS = OFF; - IGNORE_SOFT_BUFFERS = OFF; - FAST_IO = OFF; - SOFT_BUFFER_INSERTION = ON; - DECOMPOSE_GATES = ON; - REDUCE_LOGIC = OFF; - DUPLICATE_LOGIC_EXTRACTION = OFF; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = OFF; - SUBFACTOR_EXTRACTION = OFF; - MULTI_LEVEL_FACTORING = OFF; - RESYNTHESIZE_NETWORK = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - REGISTER_OPTIMIZATION = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.FLEX8000 -BEGIN - CASCADE_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = 2; - CARRY_CHAIN = IGNORE; - CARRY_CHAIN_LENGTH = 32; - MINIMIZATION = FULL; - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = OFF; - TURBO_BIT = OFF; - PARALLEL_EXPANDERS = OFF; - IGNORE_SOFT_BUFFERS = ON; - SOFT_BUFFER_INSERTION = ON; - DECOMPOSE_GATES = ON; - REDUCE_LOGIC = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = ON; - SUBFACTOR_EXTRACTION = ON; - MULTI_LEVEL_FACTORING = ON; - RESYNTHESIZE_NETWORK = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - REGISTER_OPTIMIZATION = ON; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX5000 -BEGIN - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = ON; - TURBO_BIT = OFF; - PARALLEL_EXPANDERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - IGNORE_SOFT_BUFFERS = OFF; - FAST_IO = OFF; - MINIMIZATION = FULL; - CASCADE_CHAIN = IGNORE; - CARRY_CHAIN = IGNORE; - SOFT_BUFFER_INSERTION = ON; - DECOMPOSE_GATES = ON; - REDUCE_LOGIC = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = OFF; - SUBFACTOR_EXTRACTION = OFF; - MULTI_LEVEL_FACTORING = ON; - RESYNTHESIZE_NETWORK = ON; - REGISTER_OPTIMIZATION = ON; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX7000 -BEGIN - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = ON; - TURBO_BIT = ON; - PARALLEL_EXPANDERS = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - IGNORE_SOFT_BUFFERS = OFF; - FAST_IO = OFF; - MINIMIZATION = FULL; - CASCADE_CHAIN = IGNORE; - CARRY_CHAIN = IGNORE; - SOFT_BUFFER_INSERTION = ON; - DECOMPOSE_GATES = ON; - REDUCE_LOGIC = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = OFF; - SUBFACTOR_EXTRACTION = OFF; - MULTI_LEVEL_FACTORING = ON; - RESYNTHESIZE_NETWORK = ON; - REGISTER_OPTIMIZATION = ON; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.CLASSIC -BEGIN - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = OFF; - TURBO_BIT = ON; - PARALLEL_EXPANDERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - IGNORE_SOFT_BUFFERS = OFF; - FAST_IO = OFF; - MINIMIZATION = FULL; - CASCADE_CHAIN = IGNORE; - CARRY_CHAIN = IGNORE; - SOFT_BUFFER_INSERTION = ON; - DECOMPOSE_GATES = ON; - REDUCE_LOGIC = OFF; - DUPLICATE_LOGIC_EXTRACTION = OFF; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = OFF; - SUBFACTOR_EXTRACTION = OFF; - MULTI_LEVEL_FACTORING = OFF; - RESYNTHESIZE_NETWORK = ON; - REGISTER_OPTIMIZATION = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.FLEX8000 -BEGIN - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = OFF; - TURBO_BIT = OFF; - PARALLEL_EXPANDERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - IGNORE_SOFT_BUFFERS = ON; - MINIMIZATION = FULL; - CASCADE_CHAIN = AUTO; - CARRY_CHAIN = AUTO; - SOFT_BUFFER_INSERTION = ON; - DECOMPOSE_GATES = ON; - REDUCE_LOGIC = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = ON; - SUBFACTOR_EXTRACTION = ON; - MULTI_LEVEL_FACTORING = ON; - RESYNTHESIZE_NETWORK = ON; - REGISTER_OPTIMIZATION = ON; - CASCADE_CHAIN_LENGTH = 2; - CARRY_CHAIN_LENGTH = 32; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX5000 -BEGIN - CASCADE_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CARRY_CHAIN_LENGTH = -1; - MINIMIZATION = PARTIAL; - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = OFF; - TURBO_BIT = OFF; - PARALLEL_EXPANDERS = OFF; - IGNORE_SOFT_BUFFERS = OFF; - FAST_IO = OFF; - SOFT_BUFFER_INSERTION = OFF; - DECOMPOSE_GATES = OFF; - REDUCE_LOGIC = OFF; - DUPLICATE_LOGIC_EXTRACTION = OFF; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = OFF; - SUBFACTOR_EXTRACTION = OFF; - MULTI_LEVEL_FACTORING = OFF; - RESYNTHESIZE_NETWORK = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - REGISTER_OPTIMIZATION = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX7000 -BEGIN - CASCADE_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CARRY_CHAIN_LENGTH = -1; - MINIMIZATION = PARTIAL; - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = OFF; - TURBO_BIT = ON; - PARALLEL_EXPANDERS = OFF; - IGNORE_SOFT_BUFFERS = OFF; - FAST_IO = OFF; - SOFT_BUFFER_INSERTION = OFF; - DECOMPOSE_GATES = OFF; - REDUCE_LOGIC = OFF; - DUPLICATE_LOGIC_EXTRACTION = OFF; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = OFF; - SUBFACTOR_EXTRACTION = OFF; - MULTI_LEVEL_FACTORING = OFF; - RESYNTHESIZE_NETWORK = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - REGISTER_OPTIMIZATION = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.CLASSIC -BEGIN - CASCADE_CHAIN = IGNORE; - CASCADE_CHAIN_LENGTH = -1; - CARRY_CHAIN = IGNORE; - CARRY_CHAIN_LENGTH = -1; - MINIMIZATION = PARTIAL; - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = OFF; - TURBO_BIT = ON; - PARALLEL_EXPANDERS = OFF; - IGNORE_SOFT_BUFFERS = OFF; - FAST_IO = OFF; - SOFT_BUFFER_INSERTION = OFF; - DECOMPOSE_GATES = ON; - REDUCE_LOGIC = OFF; - DUPLICATE_LOGIC_EXTRACTION = OFF; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = OFF; - SUBFACTOR_EXTRACTION = OFF; - MULTI_LEVEL_FACTORING = OFF; - RESYNTHESIZE_NETWORK = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - REGISTER_OPTIMIZATION = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.FLEX8000 -BEGIN - CASCADE_CHAIN = MANUAL; - CASCADE_CHAIN_LENGTH = 2; - CARRY_CHAIN = MANUAL; - CARRY_CHAIN_LENGTH = 32; - MINIMIZATION = PARTIAL; - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = OFF; - TURBO_BIT = OFF; - PARALLEL_EXPANDERS = OFF; - IGNORE_SOFT_BUFFERS = ON; - SOFT_BUFFER_INSERTION = ON; - DECOMPOSE_GATES = OFF; - REDUCE_LOGIC = OFF; - DUPLICATE_LOGIC_EXTRACTION = OFF; - NOT_GATE_PUSH_BACK = ON; - REFACTORIZATION = OFF; - SUBFACTOR_EXTRACTION = OFF; - MULTI_LEVEL_FACTORING = OFF; - RESYNTHESIZE_NETWORK = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - REGISTER_OPTIMIZATION = OFF; -END; - diff --git a/src/altera/quartus/acex/VIDEO2.INC b/src/altera/quartus/acex/VIDEO2.INC deleted file mode 100644 index 1c5f796..0000000 --- a/src/altera/quartus/acex/VIDEO2.INC +++ /dev/null @@ -1,27 +0,0 @@ --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. - --- MAX+plus II Include File --- Version 10.0 9/14/2000 --- Created: Mon Nov 19 00:36:42 2001 - -FUNCTION video2 (clk42, start_up, copy_sinc_h, copy_sinc_v, wr, vai[19..0], d[7..0], mdi[15..0], vdm0[7..0], vdm1[7..0], vdm2[7..0], vdm3[7..0], zx_port[7..0], dir_port[7..0], double_cas, mouse_x[9..0], mouse_y[9..0]) - WITH (MODE, MOUSE) - RETURNS (ct[5..0], cth[5..0], ctv[8..0], ctf[6..0], blank, vao[15..0], vdo0[7..0], vdo1[7..0], vdo2[7..0], vdo3[7..0], v_wr[3..0], v_wen[3..0], v_cs[1..0], wr_pix, intt); diff --git a/src/altera/quartus/acex/VIDEO2.TDF b/src/altera/quartus/acex/VIDEO2.TDF deleted file mode 100644 index c5b0fc4..0000000 --- a/src/altera/quartus/acex/VIDEO2.TDF +++ /dev/null @@ -1,692 +0,0 @@ - - TITLE "Video-controller"; - -INCLUDE "lpm_ram_dp"; - -PARAMETERS - ( - MODE = "SPRINTER", - MOUSE = "NO", - HOR_PLACE = H"50", - VER_PLACE = H"91" -- 122h/2 - ); - -SUBDESIGN video2 - ( - CLK42 : INPUT; - - CT[5..0] : OUTPUT; - CTH[5..0] : OUTPUT; - CTV[8..0] : OUTPUT; - CTF[6..0] : OUTPUT; - - BLANK : OUTPUT; - - START_UP : INPUT; - COPY_SINC_H : INPUT; - COPY_SINC_V : INPUT; - - WR : INPUT; - - VAI[19..0] : INPUT; -- input screen adress - - VAO[15..0] : OUTPUT; - - D[7..0] : INPUT; - MDI[15..0] : INPUT; - - VDO0[7..0] : OUTPUT; - VDO1[7..0] : OUTPUT; - VDO2[7..0] : OUTPUT; - VDO3[7..0] : OUTPUT; - - VDM0[7..0] : INPUT; - VDM1[7..0] : INPUT; - VDM2[7..0] : INPUT; - VDM3[7..0] : INPUT; - - V_WR[3..0] : OUTPUT; - V_WEN[3..0] : OUTPUT; - - V_CS[1..0] : OUTPUT; - WR_PIX : OUTPUT; - --- ZX_COLOR[3..0] : OUTPUT; - - ZX_PORT[7..0] : INPUT; - DIR_PORT[7..0] : INPUT; - -% - bit0 - Spectrum SCREEN Switch - bit1 - Spectrum Adress MODE - bit2 - Write to Spectrum Screen OFF - bit3 - MODE page 0/1 - bit4 - MODE on/off screen - - bit7..5 - Border -% - - INTT : OUTPUT; - - DOUBLE_CAS : INPUT; - - MOUSE_X[9..0] : INPUT; - MOUSE_Y[9..0] : INPUT; - - - ) -VARIABLE - --- CLK84 : NODE; --- CLK84_X : NODE; --- CLK84_Y : NODE; - - ZX_COLOR[3..0] : NODE; - - CT[5..0] : DFFE; - CTH[5..0] : DFFE; - CTV[8..0] : DFFE; - CTF[6..0] : DFF; - - VXA[19..0] : DFFE; - - VXD0[7..0] : DFFE; - VXD1[7..0] : DFFE; - VXD2[7..0] : DFFE; - VXD3[7..0] : DFFE; - - E_WR : NODE; - E_WRD : NODE; - - BLANK : NODE; - BORD : NODE; --- INTT_T : NODE; - INTTX : NODE; - - VLA[17..0] : DFF; --- SVA[17..0] : NODE; - SVA[17..0] : DFF; --- RSVA[8..0] : LCELL; - RSVA[8..0] : NODE; --- RSVA[8..0] : DFF; - - V_CST[1..0] : DFF; - VCM[2..0] : DFF; - TSN_W3 : DFF; - V_WE : DFF; - V_WEX : DFF; - - V_WEM : NODE; - V_WEM2 : NODE; - V_WRM : NODE; - V_WRM2 : NODE; - - V_WEMM : NODE; - V_WEMMM : NODE; - V_WEMMN : NODE; - V_WEMMO : NODE; - V_WET[3..0] : DFF; - - D_PIC0[7..0] : DFFE; --- D_PIC0_[7..0] : LCELL; - - D_PIC0_[7..0] : DFFE; - D_PIC1_[7..0] : DFFE; - D_PIC2_[7..0] : DFFE; - D_PIC3_[7..0] : DFFE; - - D_PICX_[7..0] : NODE; - - LWR_PIC : NODE; - LWR_COL : NODE; - - WR_PIC : DFF; - WR_COL : DFF; - LD_PIC : NODE; -MXL: NODE; -MXR: NODE; - - RBRVA[10..8]: DFF; - BRVA[7..0] : DFF; - DCOL[7..0] : DFFE; - - MXWE : NODE; --- MXCE : NODE; - - AX128 : NODE; - - BRD[2..0] : NODE; - - ZX_COL[3..0] : LCELL; - - ZXA15 : NODE; - ZXS[5..0] : NODE; - ZX_SCREEN : NODE; - SCR128 : NODE; - - MODE0[7..0] : DFFE; - MODE1[7..0] : DFFE; - MODE2[7..0] : DFFE; --- MODE3[7..0] : DFF; - - WR_MODE : DFF; - LWR_MODE : NODE; - X_MODE[7..4]: NODE; - X_MODE_BOND : NODE; - --- M_CTV[2..0] : DFF; --- M_CT[5..3] : DFF; - M_CTV[2..0] : LCELL; - M_CT[5..3] : LCELL; - - DOUBLE : DFFE; - - PIC_CLK : NODE; - - MS_X[9..0] : DFF; - MS_Y[9..0] : DFF; - - MS_POINT : NODE; - MS_POINT2 : NODE; - MS_PNT : NODE; - - MS_DAT : LPM_RAM_DP WITH (LPM_WIDTH=16,LPM_WIDTHAD=8,LPM_FILE="MOUSE.MIF"); - - SCR_ENA : DFFE; - V_WR_[3..0] : LCELL; - V_WEY[3..0] : LCELL; - - V_WE_R : NODE; - - V_CSX[3..0] : NODE; - - V_EN[3..0] : NODE; - - F_WR : NODE; - -BEGIN - - DEFAULTS - WR_MODE.d = VCC; -- WR_MODE2.d = VCC; -- WR_MODE2X.d = VCC; - V_CST[].d = VCC; V_WR[] = VCC; TSN_W3.d = VCC; - V_WE.d = VCC; WR_COL.d = VCC; WR_PIC.d = VCC; - V_WET[].d = VCC; - END DEFAULTS; - - ZX_COLOR[] = ZX_COL[]; - --- === MOUSE counters ======== - - MS_X[].clk = !CT1; - CASE LCELL(CTH[5..2] == 12) IS - WHEN 0 => MS_X[] = MS_X[] + 1; - WHEN 1 => MS_X[] = (!MOUSE_X[9..0]); - END CASE; - - MS_Y[].clk = !CTH5; - CASE LCELL(CTV8 & !CTV5 & CTV4) IS - WHEN 0 => MS_Y[] = MS_Y[] + 1; - WHEN 1 => MS_Y[] = (GND,!MOUSE_Y[8..0]); - END CASE; - - MS_PNT = DFF(((MS_X[] == B"100000XXXX") & (MS_Y[] == B"100000XXXX")),CLK42,,); - - MS_DAT.wren = GND; - MS_DAT.data[] = GND; - MS_DAT.wraddress[] = GND; - MS_DAT.wrclock = CLK42; - MS_DAT.wrclken = GND; - MS_DAT.rden = VCC; - MS_DAT.rdaddress[] = (MS_Y[3..0],MS_X[3..0]); - MS_DAT.rdclock = CLK42; - MS_DAT.rdclken = VCC; - - IF MOUSE == "NO" GENERATE - MS_POINT = GND; - MS_POINT2 = GND; - ELSE GENERATE - MS_POINT = DFF((MS_PNT & MS_DAT.q0),CLK42,,); - MS_POINT2 = DFF((MS_PNT & MS_DAT.q1),CLK42,,); - END GENERATE; - --- === Sinc-counts GENERATOR ============================================ - --- CT[].clrn = START_UP; - --- (,CTH[5..0].clrn,CT[5].clrn) = !COPY_SINC_H or HOR_PLACE; --- (,CTH[5..0].prn ,CT[5].prn ) = !COPY_SINC_H or !HOR_PLACE; - --- CTV[].clrn = !COPY_SINC_V or VER_PLACE; --- CTV[].prn = !COPY_SINC_V or !VER_PLACE; - - CT[5].clrn = !COPY_SINC_H; - - -- set CTH to 50 (32h) - CTH[0].clrn = !COPY_SINC_H; - CTH[1].prn = !COPY_SINC_H; - CTH[2].clrn = !COPY_SINC_H; - CTH[3].clrn = !COPY_SINC_H; - CTH[4].prn = !COPY_SINC_H; - CTH[5].prn = !COPY_SINC_H; - - -- set CTV to 122h - CTV[0].clrn = !COPY_SINC_V; - CTV[1].prn = !COPY_SINC_V; - CTV[3..2].clrn = !COPY_SINC_V; - - CTV[4].clrn = !COPY_SINC_V; - CTV[5].prn = !COPY_SINC_V; - CTV[7..6].clrn = !COPY_SINC_V; - CTV[8].prn = !COPY_SINC_V; - - CT[5..0].clk = CLK42; - CTH[5..0].clk = CLK42; - CTV[8..0].clk = CLK42; - - CT[2..0].ena = VCC; - - CASE CT[2..0] IS - WHEN 0 => CT[2..0] = 1; - WHEN 1 => CT[2..0] = 2; - WHEN 2 => CT[2..0] = 4; - WHEN 3 => CT[2..0] = 4; - WHEN 4 => CT[2..0] = 5; - WHEN 5 => CT[2..0] = 6; - WHEN 6 => CT[2..0] = 0; - WHEN 7 => CT[2..0] = 0; - END CASE; - - -- for remove sinc jitter --- CT[5..3].ena = DFF(((CT0 & CT2) or (COPY_SINC_H & !CT4)),CLK42,,); - CT[5..3].ena = DFF((CT0 & CT2),CLK42,,); - CT[5..3] = CT[5..3]+1; -% - CASE CT[4..3] IS - WHEN 0 => CT[5..3] = CT[5..3]+1; - WHEN 1 => CT[5..3] = CT[5..3]+1; - WHEN 2 => CT[5..3] = CT[5..3]+1; - WHEN 3 => CT[5..3] = CT[5..3]+1; - END CASE; -% - CTH[].ena = DFF(((CT[5..2] == 15) & CT0),CLK42,,); - CTV[].ena = DFF(((CT[5..2] == 15) & CT0 & (CTH[] == 48)),CLK42,,); - - IF CTH[] == 55 THEN - CTH[] = GND; - ELSE - CTH[] = CTH[] + 1; - END IF; - - IF CTV[] == 319 THEN - CTV[] = GND; - ELSE - CTV[] = CTV[] + 1; - END IF; - - CTF[].clk = CTV8; - CTF[] = CTF[]+1; - --- ==== Video ========================================================== - - ZXS[] = ZX_PORT[5..0]; -- pages ZX Screens - ZX_SCREEN = ZX_PORT6; -- enable ZX Screen write - ZXA15 = ZX_PORT7; -- ZX A15' line - - SCR128 = DIR_PORT0; - --- WR_PIX = LCELL(TSN_W3); - WR_PIX = (TSN_W3); - - DOUBLE.clk = CLK42; DOUBLE.ena = !E_WR; DOUBLE = DOUBLE_CAS; - VXA[].clk = CLK42; VXA[].ena = !E_WR; - - VXD0[].clk = CLK42; VXD0[].ena = !E_WRD; VDO0[] = VXD0[]; - VXD1[].clk = CLK42; VXD1[].ena = !E_WRD; VDO1[] = VXD1[]; - VXD2[].clk = CLK42; VXD2[].ena = !E_WRD; VDO2[] = VXD2[]; - VXD3[].clk = CLK42; VXD3[].ena = !E_WRD; VDO3[] = VXD3[]; - --- VXD0[] = D[]; --- VXD1[] = D[]; --- VXD2[] = D[]; --- VXD3[] = D[]; - - (VXD0[],VXD1[]) = MDI[]; - (VXD2[],VXD3[]) = MDI[]; - - BRD[] = DIR_PORT[7..5]; - - VCM[].clk = CLK42; - TSN_W3.clk = CLK42; - V_CST[].clk = CLK42; - V_WE.clk = CLK42; - V_WET[].clk = CLK42; - VLA[].clk = CLK42; - - SCR_ENA.clk = CLK42; - SCR_ENA.ena = !E_WR; - SCR_ENA.d = !(VAI19 or ZX_SCREEN); - - E_WRD = DFF(E_WR,CLK42,,); - E_WR = LCELL(WR or !(VAI19 or ZX_SCREEN) or !DFF(WR,CLK42,,)); --- E_WR = LCELL(WR or !DFF(WR,CLK42,,)); - --- **************************************************** - -IF MODE == "SPRINTER" GENERATE - --- VAI[19] - switch adress mode 1 - graf mode, 0 - spectrum mode - --- MXWE = DFF(((DFF(E_WR,CLK42,,) or SCR_ENA) & MXWE),CLK42,,V_WE); - MXWE = DFF(MXWE,CLK42,E_WR,V_WE); - - IF VAI[19] THEN - -- in graf mode all 256k(512k) range - VXA[] = VAI[]; - ELSE - -- in spectrum mode 8k/16k range pages - VXA[] = (GND,GND,VAI[7..0],ZXS[4..1],LCELL(ZXS0 xor ZXA15 xor VAI13),VAI[12..8]); - END IF; - --- BORD = DFF((MODE0[7..4] == 15),WR_PIC,,); --- BLANK = DFF((BORD & MODE03 & MODE02),WR_PIC,,); --- INTTX = DFF((BORD & MODE03 & MODE02 & MODE00),WR_PIC,,); - - BORD = DFF((MODE0[7..4] == 15),LWR_COL,,); - BLANK = DFF(((BORD & MODE03 & MODE02) or DIR_PORT4),LWR_COL,,); - INTTX = DFF((BORD & MODE03 & MODE02 & MODE00),LWR_COL,,); - - INTT = DFF(!(INTTX & (CTV[2..0] == 7)),CT5,,); - --- INTT = DFF((INTTX or DFF(INTTX,CT5,,)),CT5,,); --- INTT = DFF(!(BLANK & (CTV[2..0] == 7)),CLK42,,MODE0[0]); - - CASE CT[2..0] IS - WHEN B"110" => VCM[2..0].d = 5; -- 110 -> 101 6 -> 5 - WHEN B"000" => VCM[2..0].d = 1; -- 000 -> 001 0 -> 1 - WHEN B"001" => VCM[2..0].d = 4; -- 001 -> 100 1 -> 4 - WHEN B"010" => VCM[2..0].d = 3; -- 010 -> 011 2 -> 3 - WHEN B"100" => VCM[2..0].d = 2; -- 100 -> 010 4 -> 2 - WHEN B"101" => VCM[2..0].d = 0; -- 101 -> 000 5 -> 0 - END CASE; - - CASE VCM[1..0] IS - WHEN 0 => - VLA[].d = (BRVA[7..0],VCC,VCC,VCC,VCC,VCC,RBRVA[10..8],GND,GND); - V_CST[].d = (VCC,GND); - V_WE.d = VCC; - V_WEX.d = VCC; - IF VCM2 THEN --- TSN_W3.d = X_MODE5; - TSN_W3.d = X_MODE_BOND; --- V_CST[].d = (VCC,X_MODE5); - ELSE - TSN_W3.d = X_MODE_BOND; --- V_CST[].d = (VCC,X_MODE_BOND); - END IF; - WHEN 1 => - WR_PIC.d = !VCM2; - WR_COL.d = VCM2; - VLA[].d = SVA[]; - V_CST[].d = (VCC,GND); - V_WE.d = VCC; - V_WEX.d = VCC; - WHEN 2 => - VLA[].d = VXA[17..0]; - V_CST[].d = (!VXA18,VXA18) or MXWE; - V_WE.d = MXWE; - V_WEX.d = GND; - V_WET[].d = MXWE or !((!VXA1 & !VXA0),(!VXA1 & VXA0),(VXA1 & !VXA0),(VXA1 & VXA0)); - WHEN 3 => --- WR_PIC.d = X_MODE5; --- NEW 26.08.2022, fix bug with first column --- it was reproducing when changes mode 320 -> 640, like any 320px screen squares -> text mode squares - WR_PIC.d = MODE0[5]; - VLA[].d = (DIR_PORT3,CTH[5..0],CT5,VCC,VCC,CTV[8..3],GND,GND); - WR_MODE.d = !(CT[5..3] == B"111") & !(CT4 & CT3 & !MODE0[5]); - V_CST[].d = (VCC,GND); - V_WE.d = VCC; - V_WEX.d = VCC; - END CASE; - --- choose V-RAM komplect - - V_CST1.prn = GND; --- V_CS0.clrn = GND; - V_CST0.prn = (LCELL(DFF(GND,!CLK42,,!V_CST0))); - V_CS1 = VCC; --- V_CS0 = LCELL(V_CST0); - - V_CSX0 = LCELL(!CLK42); - V_CSX1 = LCELL(V_CSX0); - V_CSX2 = LCELL(V_CSX1 & V_CSX0); - V_CSX3 = LCELL(V_CSX2); - --- V_CS0 = V_CSX3; - V_CS0 = GND; - --- ===================== - - SVA[].clk = CLK42; - SVA[9..6] = MODE0[3..0]; --- RSVA[].clk = CLK42; - (SVA[12..10],SVA[5..0]) = RSVA[]; - --- M_CTV[2..0].clk = CLK42; --- M_CT[5..3].clk = CLK42; - M_CTV[2..0] = (!MODE2[2] & CTV[2..0]) or MODE2[2] & (MODE2[1],CTV[2..1]); - M_CT[5..3] = (!MODE2[2] & (CT[5],!CT[4..3])) or MODE2[2] & (MODE2[0],!CT[5..4]); - - CASE (!VCM2,MODE0[4]) IS --- CASE (!VCM1,MODE0[4]) IS - WHEN B"X0" => - -- Graf adress -- - RSVA[] = (M_CTV[2..0],MODE1[2..0],M_CT[5..3]); - SVA[17..13] = MODE1[7..3]; - --- SVA[12..10] = CTV[2..0]; --- SVA[5..0] = (MODE1[2..0],CT5,!CT[4..3]); - WHEN B"01" => - -- ZX-atr adress -- - RSVA[] = (MODE2[2..0],SCR128,VCC,VCC,GND,!MODE0[7..6]); - SVA[17..13] = MODE2[7..3]; - --- SVA[12..10] = MODE2[2..0]; --- SVA[5..0] = (SCR128,VCC,VCC,GND,!MODE0[7..6]); - WHEN B"11" => - -- ZX-pic adress -- - RSVA[] = (MODE1[2..0],SCR128,MODE0[7..6],CTV2,!CTV1,!CTV0); - SVA[17..13] = MODE1[7..3]; - --- SVA[12..10] = MODE1[2..0]; --- SVA[5..0] = (SCR128,MODE0[7..6],CTV2,!CTV1,!CTV0); - END CASE; - --- X_MODE_BOND = LCELL(LCELL(DCOL[7..4] == 15) & LCELL(DCOL[3..0] == 15) & DFF((MODE0[7] & MODE0[5] & !MODE0[4]),LWR_COL,VCC,VCC)); - X_MODE_BOND = GND; - --- LD_PIC = LCELL((MODE0[5] & DFF((CT[5..3] == B"000"),CLK42,,)) or (!MODE0[5] & DFF((CT[4..2] == B"000"),CLK42,,))); --- LD_PIC = LCELL((MODE0[5] & DFF((CT[5..3] == B"000"),CLK42,,)) or (!MODE0[5] & DFF((CT[4..2] == B"000"),CLK42,,))); - LD_PIC = LCELL((MODE0[5] & DFF((CT[5..2] == B"0000"),CLK42,,)) or (!MODE0[5] & DFF((CT[4..2] == B"000"),CLK42,,))); - - --- CASE (DFF(VLA1,!CLK42,,),DFF(VLA0,!CLK42,,)) IS - --- D_PIC0_[].clk = !CLK42; --- D_PIC1_[].clk = !CLK42; --- D_PIC2_[].clk = !CLK42; --- D_PIC3_[].clk = !CLK42; - --- PIC_CLK = LCELL(LCELL(CLK42)); - PIC_CLK = !CLK42; - - D_PIC0_[].clk = PIC_CLK; - D_PIC1_[].clk = PIC_CLK; - D_PIC2_[].clk = PIC_CLK; - D_PIC3_[].clk = PIC_CLK; - - D_PIC0_[] = VDM0[]; - D_PIC1_[] = VDM1[]; - D_PIC2_[] = VDM2[]; - D_PIC3_[] = VDM3[]; - - CASE (DFF(VLA1,CLK42,,),DFF(VLA0,CLK42,,)) IS - WHEN 0 => D_PICX_[] = D_PIC0_[]; - WHEN 1 => D_PICX_[] = D_PIC1_[]; - WHEN 2 => D_PICX_[] = D_PIC2_[]; - WHEN 3 => D_PICX_[] = D_PIC3_[]; - END CASE; - - MODE0[].ena = VCC; - MODE1[].ena = VCC; - MODE2[].ena = VCC; - MODE0[].clk = LWR_MODE; - MODE1[].clk = LWR_MODE; - MODE2[].clk = LWR_MODE; - MODE0[].d = VDM3[]; - MODE1[].d = VDM2[]; - MODE2[].d = VDM1[]; - LWR_MODE = LCELL(LCELL(WR_MODE)); -% - MODE0[].ena = LWR_MODE; - MODE1[].ena = LWR_MODE; - MODE2[].ena = LWR_MODE; - MODE0[].clk = CLK42; - MODE1[].clk = CLK42; - MODE2[].clk = CLK42; - MODE0[].d = D_PIC3_[]; - MODE1[].d = D_PIC2_[]; - MODE2[].d = D_PIC1_[]; - LWR_MODE = DFF(!WR_MODE,CLK42,,); -% - X_MODE7 = DFF(MODE0[7],LWR_COL,,); - X_MODE6 = DFF(MODE0[6],LWR_COL,,); - X_MODE5 = DFF(MODE0[5],LWR_COL,,); - X_MODE4 = DFF(MODE0[4],LWR_COL,,); - - VAO[] = VLA[17..2]; - - WR_PIC.clk = CLK42; - WR_COL.clk = CLK42; - WR_MODE.clk = CLK42; - --- LWR_PIC = LCELL(LCELL(WR_PIC)); --- LWR_COL = LCELL(LCELL(WR_COL)); --- LWR_PIC = LCELL(WR_PIC); --- LWR_COL = LCELL(WR_COL); - LWR_PIC = DFF(WR_PIC,CLK42,,); - LWR_COL = DFF(WR_COL,CLK42,,); - --- D_PIC0[].ena = VCC; --- D_PIC0[].clk = (LWR_PIC); - D_PIC0[].ena = !LWR_PIC; - D_PIC0[].clk = CLK42; - - - - - IF LD_PIC THEN --- D_PIC0[] = D_PIC0_[]; - D_PIC0[] = D_PICX_[]; - ELSE - D_PIC0[] = (D_PIC0[6..0],GND); - END IF; - - --- DCOL[].clk = (LWR_COL); - DCOL[].ena = !LWR_COL; - DCOL[].clk = CLK42; - - IF DFF((MODE0[7..4] == 15),WR_PIC,,) THEN - DCOL[].d = (B"00",BRD[2..0],BRD[2..0]); - ELSE --- DCOL[].d = D_PIC0_[]; - DCOL[].d = D_PICX_[]; - END IF; - - DCOL[].clrn = !BLANK; - - BRVA[].clk = CLK42; - BRVA[].clrn = !MS_POINT; - BRVA[].prn = !MS_POINT2; - --- MODE0[4] - graph / text --- MODE0[5] - 320 / 640 resolution - --- CASE (LCELL(X_MODE4 or X_MODE5),CT2) IS - CASE (DFF((MODE0[4] or MODE0[5]),LWR_COL,,),CT2) IS - WHEN B"1X" => BRVA[7..0] = DCOL[]; - WHEN B"01" => BRVA[7..0] = (B"0000",DCOL[7..4]); - WHEN B"00" => BRVA[7..0] = (B"0000",DCOL[3..0]); - END CASE; - --- BRVA[10..8] = (x_mode4,RBRVA[9..8]); - RBRVA[].clk = CLK42; - - CASE (BORD,X_MODE4) IS - WHEN B"X0" => RBRVA[10..8].d = (GND,X_MODE[7..6]); - WHEN B"X1" => RBRVA[10..8].d = (VCC,(CTF4 & !BLANK),D_PIC0[7]); - END CASE; - - RBRVA[9..8].clrn = !BORD; - RBRVA[10].prn = !BORD; - - CASE (RBRVA[9..8],BRVA7) IS - WHEN 0,1,4,7 => ZX_COL[] = (BRVA[6],BRVA[5..3]); - WHEN 2,3,6,5 => ZX_COL[] = (BRVA[6],BRVA[2..0]); - END CASE; - --- V_WET[].prn = LCELL(DFF(GND,!CLK42,,!V_WE)); --- V_WE.prn = LCELL(DFF(GND,!CLK42,,!V_WE)); - - V_WE_R = DFF(GND,!CLK42,,!V_WE); - V_WE.prn = V_WE_R; - V_WET[].prn = V_WE_R; - --- V_WR[] = LCELL(V_WE) or !((!VXA1 & !VXA0),(!VXA1 & VXA0),(VXA1 & !VXA0),(VXA1 & VXA0)); - --- V_WR[] = (V_WE) or !( - - V_WEX.clk = CLK42; --- V_WEX.d = V_WE; --- V_WEX.prn = (DFF(GND,CLK42,,!V_WEX)); - - - V_WEMMM = LCELL(V_WE); - V_WEMMN = LCELL(V_WEMMM); - V_WEMMO = LCELL(V_WEMMN); - V_WEMM = LCELL(V_WEMMO); - - V_WRM = LCELL(V_WEMMN & V_WEMMM); - V_WRM2 = LCELL(V_WEMMN & V_WEMMM); - - V_WEM = LCELL(V_WEMMM & V_WEMMO); - V_WEM2 = LCELL(V_WEMMM & V_WEMMO); - - V_EN3 = DFF(!(!VXA1 & (!VXA0 or DOUBLE)),CLK42,F_WR,); - V_EN2 = DFF(!(!VXA1 & (VXA0 or DOUBLE)) ,CLK42,F_WR,); - V_EN1 = DFF(!(VXA1 & (!VXA0 or DOUBLE)) ,CLK42,F_WR,); - V_EN0 = DFF(!(VXA1 & (VXA0 or DOUBLE)) ,CLK42,F_WR,); - - F_WR = DFF(VCC,V_WE,,); - - V_WR_3 = V_WRM or V_EN3; - V_WR_2 = V_WRM2 or V_EN2; - V_WR_1 = V_WRM or V_EN1; - V_WR_0 = V_WRM or V_EN0; - - V_WEY3 = V_WEM or V_EN3; - V_WEY2 = V_WEM2 or V_EN2; - V_WEY1 = V_WEM or V_EN1; - V_WEY0 = V_WEM or V_EN0; - - V_WR[] = V_WR_[]; - V_WEN[] = V_WEY[]; - --- CLK84 = LCELL(CLK42 xor CLK84_X); --- CLK84_X = DFF(!CLK84_X,CLK84,,); --- CLK84_Y = CLK84; - -END GENERATE; -- end "sprinter" mode - - -END; diff --git a/src/altera/quartus/acex/db/SP2_ACEX.(0).cnf.cdb b/src/altera/quartus/acex/db/SP2_ACEX.(0).cnf.cdb deleted file mode 100644 index eafe8db5d3ed3488ca7e0cfb1692e65cddfa8e95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49382 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

^T)??c=kBs6`9=RHumm!|p!?FAX;=44d`5{ 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 DX|jc~ diff --git a/src/altera/quartus/acex/db/SP2_ACEX.(0).cnf.hdb b/src/altera/quartus/acex/db/SP2_ACEX.(0).cnf.hdb deleted file mode 100644 index 3ec6d5fa25073d2def22fd92e67495e76e682baf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5893 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 diff --git a/src/altera/quartus/acex/db/SP2_ACEX.(1).cnf.hdb b/src/altera/quartus/acex/db/SP2_ACEX.(1).cnf.hdb deleted file mode 100644 index e3a0cf0cb25aeb5c9fd7d3a50ae6561db4d698aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 931 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 G_x}TZE9`&( diff --git a/src/altera/quartus/acex/db/SP2_ACEX.(2).cnf.hdb b/src/altera/quartus/acex/db/SP2_ACEX.(2).cnf.hdb deleted file mode 100644 index b1c337a027ddf957f2e40f96fefaf2402a767124..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1789 zcmV@6CZt@fW000000L}#f000000N4Ql z000000R094000000C)lHS4)o@MG$s)zh4(PPQv2`$vB&A;sf;T^jN#{E3yqcl7&XQ zvJ)&4v+*Vz;mDEyz!`}f=lleYoH=pl{aos+>Kb=@yoL=Z0*RK!UG;Uny1J@od~|el zbYHDj`<-SyH;Mj@=Kr7nb`GATbNrRg@uUx_)n1|J7t;MVK0i}jh!NuOIO+(a#3iP}GZNTz^E+bl7h@ zFli6ru(eeTwxODJ6A0~ehXs*9h;$O^5DrPyK0&i>HnRpXy=L=qVZmkj@G%jBlOlI< zkeecR-Ur)7?!4!D4j27AVHX7@;C^TeyH#`&C)mjo_H9$ypk(6R{V|JkT3R+2k({mX z_6tfLr{olw#CTe!8sZQ)4k)J|=|Efp6$7MnnFj?>R7z`Zl!q4`PO+0H;9Hd~=nBl} z&@C(PyW=pe)g@m|mU3OfO{lb3%*!>!F++_`LLoGp(paKo`>an>4gN&ZkUHCmOS0co zl5|1xX(&c@1yXD0rE?e+Tu zjxMuG09~p=n^ovy6}nJ`HmcD1DkS?0f{^V6P!PS|9N45*fZQHH(5Nnbl=%czVPb!AJHnDQcgpc0EA2FEw;L_GGo9HbQ0y*&Vwn3y z+NeApYe!N@J|cDGBT_~_B30xgQbax?HRK}_osURpiqM@h3Vi_yeE|u50SSEp34HXu$JOKyRLZh?eufrM^>gl>U|TfL>>x9lOCtK$G#YEeinwJ4ya76l~E16$%9 zMI~=ff8TsR^WCnQV1zHt0NH>RidxE#r7o<%F0Q~ffuZ};WRNB{Yq0jE6_S^$SX_xt zu5>@TctvzEM;AzO909`qe5B6rs^=)y>jyWA`QD9Ue3QeiSHh_COH5w#2pi2sA6FoK zi*e=c7qem@!&wUu&JMmO(8zehVi+Zu!T%qIvGOYYAQlYsC9UYHi3OAu{Gt*t42}es z7KZtpbiQ#GjecA4%JB@gtizzZb(kQ~U4>~jpZZZBZ(8>PRW_~W4GU>3n{?9U3NDSYb7~!_@Sz3yL;l@BH^v&_wt?|`2 zh}_+q&!)3$jp(ht`E+mp`XqX99!+Nlw{JxU(^+%||7p%d)5B;yxjLOq#?d~l%qH(o z=F#oL$#|1Y9HaSieERV88ddBK)+3sEJWs#7L)*-YH@p3;nf0@7n%Sb;vl-Tr9Hbf# zmn+TsqIn&vf3}lOye68zu@PJs^iMRRiN{Izp?Wl}PJG#3RS>38Y1V7-YVCkbh`Ed`M&f zRJ96w#Y~8i5>VCrKw1ijog9N*BjP*89@6CZrm0C00000051ao000000MP*e z0000006_!*000000C)lHSj%n`F%)%pBVYqN${!#hNNGW=rf5b#+2|ocYu^oen($eenUz4Bp*oBX}9{VCpVuC-VYvB)#;XbnYe0{sKzUAmK8ClN5u=BD%WA+wry&iqQT?7%KW1vL)E}RlLe8jo2;`1_DjPj( z$9P`Qbx9n9jhHNE%YQ-k6^G!PeBMW6)^IAbMDWYMYFyYSxl;xODG@RkJplVQod13 z7AfN@G%630N(7XZw_-InZsO|2}pyKI=eW<2fI6lxWY74zEN-C z1S{%6QYww2)Y;!RAU?n`$k7*Ke2>e93n0507ctDVz$!eD)PeLMjP?(44f5Tjzng`XK^Z7vf>WUsvDExPdQ!w>E z()Ph)@6Wd)2De_b=H>dN|DIP;za}PFcG`loH{Jb~cFR7_3AfntdG5OHwtZ{LT6lVs zyE|Kc{FJ@@l<{G`P0kJAi>9+?f<0R{mRSI2wQ6nIQnKEK*#f~3eynan#! zn8NrJB_%8xZD#!3x9;GcmahAlJ+0X%CE)?XWPzoN9L!GCd{_8?q2b4b6AUY| zM89>-Jd;o=6mWHoLljrXT$$!r@>R!L^&GtCP2 h4Tn61Ivm;Bceu4InEmc@_@)WGGFKE{gCg+%e*nUs+}!{G diff --git a/src/altera/quartus/acex/db/SP2_ACEX.cbx.xml b/src/altera/quartus/acex/db/SP2_ACEX.cbx.xml deleted file mode 100644 index 5f721b8..0000000 --- a/src/altera/quartus/acex/db/SP2_ACEX.cbx.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/altera/quartus/acex/db/SP2_ACEX.cmp.rdb b/src/altera/quartus/acex/db/SP2_ACEX.cmp.rdb deleted file mode 100644 index b3eee15cb7815b73d4e4b71a9b91cbbb0c9b3a21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3549 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 Xz(OBIN&L2~+w5S+fRq3L00960wzIc$ diff --git a/src/altera/quartus/acex/db/SP2_ACEX.db_info b/src/altera/quartus/acex/db/SP2_ACEX.db_info deleted file mode 100644 index 85d27e7..0000000 --- a/src/altera/quartus/acex/db/SP2_ACEX.db_info +++ /dev/null @@ -1,3 +0,0 @@ -Quartus_Version = Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition -Version_Index = 167832322 -Creation_Time = Sun Aug 28 03:32:05 2022 diff --git a/src/altera/quartus/acex/db/SP2_ACEX.eco.cdb b/src/altera/quartus/acex/db/SP2_ACEX.eco.cdb deleted file mode 100644 index 4dfce696ad552d94da6931c7554174497fc9bf5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175 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 diff --git a/src/altera/quartus/acex/db/SP2_ACEX.map.qmsg b/src/altera/quartus/acex/db/SP2_ACEX.map.qmsg deleted file mode 100644 index f131c0c..0000000 --- a/src/altera/quartus/acex/db/SP2_ACEX.map.qmsg +++ /dev/null @@ -1,30 +0,0 @@ -{ "Info" "IQEXE_SEPARATOR" "" "Info: *******************************************************************" { } { } 3 0 "*******************************************************************" 0 0 "" 0 -1} -{ "Info" "IQEXE_START_BANNER_PRODUCT" "Analysis & Synthesis Quartus II " "Info: Running Quartus II Analysis & Synthesis" { { "Info" "IQEXE_START_BANNER_VERSION" "Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition " "Info: Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition" { } { } 0 0 "%1!s!" 0 0 "" 0 -1} { "Info" "IQEXE_START_BANNER_TIME" "Sun Aug 28 15:25:50 2022 " "Info: Processing started: Sun Aug 28 15:25:50 2022" { } { } 0 0 "Processing started: %1!s!" 0 0 "" 0 -1} } { } 4 0 "Running %2!s! %1!s!" 0 0 "" 0 -1} -{ "Info" "IQEXE_START_BANNER_COMMANDLINE" "quartus_map --read_settings_files=on --write_settings_files=off SP2_ACEX -c SP2_ACEX " "Info: Command: quartus_map --read_settings_files=on --write_settings_files=off SP2_ACEX -c SP2_ACEX" { } { } 0 0 "Command: %1!s!" 0 0 "" 0 -1} -{ "Warning" "WSGN_SEARCH_FILE" "SP2_ACEX.tdf 1 1 " "Warning: Using design file SP2_ACEX.tdf, which is not specified as a design file for the current project, but contains definitions for 1 design units and 1 entities in project" { { "Info" "ISGN_ENTITY_NAME" "1 SP2_ACEX " "Info: Found entity 1: SP2_ACEX" { } { { "SP2_ACEX.tdf" "" { Text "C:/Sprinter/src/altera/quartus/acex/SP2_ACEX.tdf" 24 1 0 } } } 0 0 "Found entity %1!d!: %2!s!" 0 0 "" 0 -1} } { } 0 0 "Using design file %1!s!, which is not specified as a design file for the current project, but contains definitions for %2!llu! design units and %3!llu! entities in project" 0 0 "" 0 -1} -{ "Info" "ISGN_START_ELABORATION_TOP" "SP2_ACEX " "Info: Elaborating entity \"SP2_ACEX\" for the top level hierarchy" { } { } 0 0 "Elaborating entity \"%1!s!\" for the top level hierarchy" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "DMD " "Warning: Variable or input pin \"DMD\" is defined but never used" { } { { "SP2_ACEX.tdf" "" { Text "C:/Sprinter/src/altera/quartus/acex/SP2_ACEX.tdf" 109 5 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "T_SIGNAL " "Warning: Variable or input pin \"T_SIGNAL\" is defined but never used" { } { { "SP2_ACEX.tdf" "" { Text "C:/Sprinter/src/altera/quartus/acex/SP2_ACEX.tdf" 147 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "RED " "Warning: Variable or input pin \"RED\" is defined but never used" { } { { "SP2_ACEX.tdf" "" { Text "C:/Sprinter/src/altera/quartus/acex/SP2_ACEX.tdf" 160 5 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "GREEN " "Warning: Variable or input pin \"GREEN\" is defined but never used" { } { { "SP2_ACEX.tdf" "" { Text "C:/Sprinter/src/altera/quartus/acex/SP2_ACEX.tdf" 161 7 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "BLUE " "Warning: Variable or input pin \"BLUE\" is defined but never used" { } { { "SP2_ACEX.tdf" "" { Text "C:/Sprinter/src/altera/quartus/acex/SP2_ACEX.tdf" 162 6 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "MDR " "Warning: Variable or input pin \"MDR\" is defined but never used" { } { { "SP2_ACEX.tdf" "" { Text "C:/Sprinter/src/altera/quartus/acex/SP2_ACEX.tdf" 170 5 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "ISA_CASH " "Warning: Variable or input pin \"ISA_CASH\" is defined but never used" { } { { "SP2_ACEX.tdf" "" { Text "C:/Sprinter/src/altera/quartus/acex/SP2_ACEX.tdf" 222 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "ROM_WRITE_MODE " "Warning: Variable or input pin \"ROM_WRITE_MODE\" is defined but never used" { } { { "SP2_ACEX.tdf" "" { Text "C:/Sprinter/src/altera/quartus/acex/SP2_ACEX.tdf" 241 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "/HALT " "Warning: Variable or input pin \"/HALT\" is defined but never used" { } { { "SP2_ACEX.tdf" "" { Text "C:/Sprinter/src/altera/quartus/acex/SP2_ACEX.tdf" 36 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WSGN_SEARCH_FILE" "MOUSE.tdf 1 1 " "Warning: Using design file MOUSE.tdf, which is not specified as a design file for the current project, but contains definitions for 1 design units and 1 entities in project" { { "Info" "ISGN_ENTITY_NAME" "1 mouse " "Info: Found entity 1: mouse" { } { { "MOUSE.tdf" "" { Text "C:/Sprinter/src/altera/quartus/acex/MOUSE.tdf" 6 1 0 } } } 0 0 "Found entity %1!d!: %2!s!" 0 0 "" 0 -1} } { } 0 0 "Using design file %1!s!, which is not specified as a design file for the current project, but contains definitions for %2!llu! design units and %3!llu! entities in project" 0 0 "" 0 -1} -{ "Info" "ISGN_START_ELABORATION_HIERARCHY" "MOUSE MOUSE:MS " "Info: Elaborating entity \"MOUSE\" for hierarchy \"MOUSE:MS\"" { } { { "SP2_ACEX.tdf" "MS" { Text "C:/Sprinter/src/altera/quartus/acex/SP2_ACEX.tdf" 79 2 0 } } } 0 0 "Elaborating entity \"%1!s!\" for hierarchy \"%2!s!\"" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "KB_OFL " "Warning: Variable or input pin \"KB_OFL\" is defined but never used" { } { { "kbd.tdf" "" { Text "C:/Sprinter/src/altera/quartus/acex/kbd.tdf" 63 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WSGN_SEARCH_FILE" "kbd.tdf 1 1 " "Warning: Using design file kbd.tdf, which is not specified as a design file for the current project, but contains definitions for 1 design units and 1 entities in project" { { "Info" "ISGN_ENTITY_NAME" "1 kbd " "Info: Found entity 1: kbd" { } { { "kbd.tdf" "" { Text "C:/Sprinter/src/altera/quartus/acex/kbd.tdf" 6 1 0 } } } 0 0 "Found entity %1!d!: %2!s!" 0 0 "" 0 -1} } { } 0 0 "Using design file %1!s!, which is not specified as a design file for the current project, but contains definitions for %2!llu! design units and %3!llu! entities in project" 0 0 "" 0 -1} -{ "Info" "ISGN_START_ELABORATION_HIERARCHY" "kbd kbd:KEYS " "Info: Elaborating entity \"kbd\" for hierarchy \"kbd:KEYS\"" { } { { "SP2_ACEX.tdf" "KEYS" { Text "C:/Sprinter/src/altera/quartus/acex/SP2_ACEX.tdf" 80 2 0 } } } 0 0 "Elaborating entity \"%1!s!\" for hierarchy \"%2!s!\"" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "/IOM " "Warning: Variable or input pin \"/IOM\" is defined but never used" { } { { "kbd.tdf" "" { Text "C:/Sprinter/src/altera/quartus/acex/kbd.tdf" 15 2 0 } } { "SP2_ACEX.tdf" "" { Text "C:/Sprinter/src/altera/quartus/acex/SP2_ACEX.tdf" 80 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "/M1 " "Warning: Variable or input pin \"/M1\" is defined but never used" { } { { "kbd.tdf" "" { Text "C:/Sprinter/src/altera/quartus/acex/kbd.tdf" 16 2 0 } } { "SP2_ACEX.tdf" "" { Text "C:/Sprinter/src/altera/quartus/acex/SP2_ACEX.tdf" 80 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Info" "ISGN_START_ELABORATION_HIERARCHY" "lpm_ram_dq kbd:KEYS\|lpm_ram_dq:\$00021 " "Info: Elaborating entity \"lpm_ram_dq\" for hierarchy \"kbd:KEYS\|lpm_ram_dq:\$00021\"" { } { { "kbd.tdf" "\$00021" { Text "C:/Sprinter/src/altera/quartus/acex/kbd.tdf" 167 9 0 } } } 0 0 "Elaborating entity \"%1!s!\" for hierarchy \"%2!s!\"" 0 0 "" 0 -1} -{ "Info" "ISGN_ELABORATION_HEADER" "kbd:KEYS\|lpm_ram_dq:\$00021 " "Info: Elaborated megafunction instantiation \"kbd:KEYS\|lpm_ram_dq:\$00021\"" { } { { "kbd.tdf" "" { Text "C:/Sprinter/src/altera/quartus/acex/kbd.tdf" 167 9 0 } } } 0 0 "Elaborated megafunction instantiation \"%1!s!\"" 0 0 "" 0 -1} -{ "Info" "ISGN_MEGAFN_PARAM_TOP" "kbd:KEYS\|lpm_ram_dq:\$00021 " "Info: Instantiated megafunction \"kbd:KEYS\|lpm_ram_dq:\$00021\" with the following parameter:" { { "Info" "ISGN_MEGAFN_PARAM_SUB" "LPM_WIDTH 8 " "Info: Parameter \"LPM_WIDTH\" = \"8\"" { } { } 0 0 "Parameter \"%1!s!\" = \"%2!s!\"" 0 0 "" 0 -1} { "Info" "ISGN_MEGAFN_PARAM_SUB" "LPM_WIDTHAD 8 " "Info: Parameter \"LPM_WIDTHAD\" = \"8\"" { } { } 0 0 "Parameter \"%1!s!\" = \"%2!s!\"" 0 0 "" 0 -1} { "Info" "ISGN_MEGAFN_PARAM_SUB" "LPM_FILE KBD_INI2.MIF " "Info: Parameter \"LPM_FILE\" = \"KBD_INI2.MIF\"" { } { } 0 0 "Parameter \"%1!s!\" = \"%2!s!\"" 0 0 "" 0 -1} { "Info" "ISGN_MEGAFN_PARAM_SUB" "LPM_OUTDATA UNREGISTERED " "Info: Parameter \"LPM_OUTDATA\" = \"UNREGISTERED\"" { } { } 0 0 "Parameter \"%1!s!\" = \"%2!s!\"" 0 0 "" 0 -1} } { { "kbd.tdf" "" { Text "C:/Sprinter/src/altera/quartus/acex/kbd.tdf" 167 9 0 } } } 0 0 "Instantiated megafunction \"%1!s!\" with the following parameter:" 0 0 "" 0 -1} -{ "Info" "ISGN_START_ELABORATION_HIERARCHY" "altram kbd:KEYS\|lpm_ram_dq:\$00021\|altram:sram " "Info: Elaborating entity \"altram\" for hierarchy \"kbd:KEYS\|lpm_ram_dq:\$00021\|altram:sram\"" { } { { "lpm_ram_dq.tdf" "sram" { Text "c:/altera/90sp2/quartus/libraries/megafunctions/lpm_ram_dq.tdf" 101 6 0 } } } 0 0 "Elaborating entity \"%1!s!\" for hierarchy \"%2!s!\"" 0 0 "" 0 -1} -{ "Error" "EMIO_MIO_INVALID_LINE" "KBD_INI2.MIF 13 " "Error: Memory Initialization File or Hexadecimal (Intel-Format) File \"KBD_INI2.MIF\" contains illegal syntax at line 13" { } { { "C:/Sprinter/src/altera/quartus/acex/KBD_INI2.MIF" "" { Text "C:/Sprinter/src/altera/quartus/acex/KBD_INI2.MIF" 13 -1 0 } } } 0 0 "Memory Initialization File or Hexadecimal (Intel-Format) File \"%1!s!\" contains illegal syntax at line %2!d!" 0 0 "" 0 -1} -{ "Critical Warning" "WCDB_CDB_CANT_READ_CONTENT_FILE" "KBD_INI2.MIF " "Critical Warning: Can't read Memory Initialization File or Hexadecimal (Intel-Format) File KBD_INI2.MIF -- setting all initial values to 0" { } { { "altram.tdf" "" { Text "c:/altera/90sp2/quartus/libraries/megafunctions/altram.tdf" 178 13 0 } } } 1 0 "Can't read Memory Initialization File or Hexadecimal (Intel-Format) File %1!s! -- setting all initial values to 0" 0 0 "" 0 -1} -{ "Error" "ESGN_USER_HIER_ELABORATION_FAILURE" "kbd:KEYS\|lpm_ram_dq:\$00021\|altram:sram " "Error: Can't elaborate user hierarchy \"kbd:KEYS\|lpm_ram_dq:\$00021\|altram:sram\"" { } { { "lpm_ram_dq.tdf" "sram" { Text "c:/altera/90sp2/quartus/libraries/megafunctions/lpm_ram_dq.tdf" 101 6 0 } } } 0 0 "Can't elaborate user hierarchy \"%1!s!\"" 0 0 "" 0 -1} -{ "Info" "ISGN_MEGAFN_DESCENDANT" "kbd:KEYS\|lpm_ram_dq:\$00021\|altram:sram kbd:KEYS\|lpm_ram_dq:\$00021 " "Info: Elaborated megafunction instantiation \"kbd:KEYS\|lpm_ram_dq:\$00021\|altram:sram\", which is child of megafunction instantiation \"kbd:KEYS\|lpm_ram_dq:\$00021\"" { } { { "lpm_ram_dq.tdf" "" { Text "c:/altera/90sp2/quartus/libraries/megafunctions/lpm_ram_dq.tdf" 101 6 0 } } { "kbd.tdf" "" { Text "C:/Sprinter/src/altera/quartus/acex/kbd.tdf" 167 9 0 } } } 0 0 "Elaborated megafunction instantiation \"%1!s!\", which is child of megafunction instantiation \"%2!s!\"" 0 0 "" 0 -1} -{ "Error" "EQEXE_ERROR_COUNT" "Analysis & Synthesis 2 s 16 s Quartus II " "Error: Quartus II Analysis & Synthesis was unsuccessful. 2 errors, 16 warnings" { { "Error" "EQEXE_END_PEAK_VSIZE_MEMORY" "228 " "Error: Peak virtual memory: 228 megabytes" { } { } 0 0 "Peak virtual memory: %1!s! megabytes" 0 0 "" 0 -1} { "Error" "EQEXE_END_BANNER_TIME" "Sun Aug 28 15:25:51 2022 " "Error: Processing ended: Sun Aug 28 15:25:51 2022" { } { } 0 0 "Processing ended: %1!s!" 0 0 "" 0 -1} { "Error" "EQEXE_ELAPSED_TIME" "00:00:01 " "Error: Elapsed time: 00:00:01" { } { } 0 0 "Elapsed time: %1!s!" 0 0 "" 0 -1} { "Error" "EQEXE_ELAPSED_CPU_TIME" "00:00:01 " "Error: Total CPU time (on all processors): 00:00:01" { } { } 0 0 "Total CPU time (on all processors): %1!s!" 0 0 "" 0 -1} } { } 0 0 "%6!s! %1!s! was unsuccessful. %2!d! error%3!s!, %4!d! warning%5!s!" 0 0 "" 0 -1} diff --git a/src/altera/quartus/acex/db/SP2_ACEX.sld_design_entry.sci b/src/altera/quartus/acex/db/SP2_ACEX.sld_design_entry.sci deleted file mode 100644 index 100facaf0161bfdd2e8a88d185c85a9ed1a3057b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168 zcmd;QU|?9w&B%}kg!VvoSZYymW`3T6rJjL;Q)y;Sih_}`se*x-zM;9kk%57wLU3wP zS!QyoLO^12wt|sDu$Mx3YLbF$N@fXAn*h)R5U7Pv3`S6T1(dE}{Pq9;|9UnR5dZ&w tAoutw29_R&GrUI*o}2ekZ{5Lp@9LH-^^`TZNJ@kpP+?{kp27xJ3IK24FNgpD diff --git a/src/altera/quartus/acex/db/SP2_ACEX.tis_db_list.ddb b/src/altera/quartus/acex/db/SP2_ACEX.tis_db_list.ddb deleted file mode 100644 index 322a503a558ee8866bf3b0310f65a09616c1788b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188 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 diff --git a/src/altera/quartus/max/db/sp2_max.(0).cnf.hdb b/src/altera/quartus/max/db/sp2_max.(0).cnf.hdb deleted file mode 100644 index 1e1366a626b1d209fb8b4852799aeb3b72d68036..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3057 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 diff --git a/src/altera/quartus/max/db/sp2_max.(10).cnf.cdb b/src/altera/quartus/max/db/sp2_max.(10).cnf.cdb deleted file mode 100644 index 1434fe6a1c9e06825d5f67b56215ab50c8dafeb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 987 zcmd;QU|?9w&B%}kg!VvoSZYymW`3T6rJjL;Q)y;Sih_}`se*x-zM;9kk%57wLU3wP zS!QyoLO^12wt|sDu$Mx3YLbF$N@fXATa_Hp2q1XL1fkm*A@pr#2wlPWW~R5_VFQ7- z;CoI^PEEYlDtZ^nx9?rS?jV%ZPy;VYNxKc z()YH;!nj_>zw@!hyo-fmEC=@?u`qX@C#=RrrH}zyE zuYR%Tp7`>U;%>9HaV$KjW^%JdZ1#mTVXGXc>Ao*EavbiFTcCRT-(_YF8{38h7}UF} z8;cI`=dU~aL0`EoxA14~l(_wKW_)<=eoR-CiMt%~DpVrGBn>bA&t0_OvtnqO8A=%};sy zVp-9NE~_UOBMdgqNL#kj|1?v?*G%)ssixn!ePgBGIsUz};8sZF*QK)sp9)V|{baiS zEg9SMmFq6H@0?W}{P19qaJ$x&8J3qRb?2}Qw zX;_q-d*p(3nh8_Wg4IF%OS*U`|D2#c<4lju!IZuyoNAj@{S9WCS2msGIVJ4#EXZ<( zW?!$1)GPJ06D*$^LK1$LbnIDkuinCy*=o}-rWQGyiBo4vopzM6Q}C6aFpb~iHv5vt z%$L40zLcC0!f3RGqjq9o$Kgd~Th@BdpJjjTcKFYGJfYE!owvR6)=IJc58*qxV#xtT z{Rm~@!`AcKG^`hKZOeY8l~?Iuqqo?XXGvR3-}=`Z*DB90>bsNOtv3Dlb*)=shDAjY zcIRIG117%z|0@`U5|SC11Qc109DG;zv2LBB-MoW}AJ^3>I!@$$SZ^fZs3jqDK!urE zcmkVdX<1Sp( z=eTe7m-5XUjAk&XI!Le>h*mX;+{%efIddq1Ib;Dt5GzZd!x`Qq=ic>w{O1?9?wsQ5 zNp`b~8ka~!98fu;tgwwkK-uQ;!+#qpv^0|Ne{ETD7Hf}I(*z=P4NRva)hC`ZH&Ym^Rcr3nkYYxu>hHi!=P-gr8 F9{|7ht8V}R diff --git a/src/altera/quartus/max/db/sp2_max.(10).cnf.hdb b/src/altera/quartus/max/db/sp2_max.(10).cnf.hdb deleted file mode 100644 index 014ef938bde56568bdf81261c9af4f97a37d078a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 611 zcmV-p0-XI1000233jqLb0B!(300011WpZ@6CZgc|x000000A>LI000000C@ob z000000Am6G000000C)kkQ_Bj%Knzq-6h#n^euVfIJnhM=2fc|D?E}P8!P<}aSu<<0 zw8DB37t%~-wwY$zrfHfMXtgMwgnx+&^>|Q^&p`hg#htWoapPyf{xU_pkC0qW;Q@t*rIcvja06)%^MihHs zwi6oD2WcvoYBm5fd?BVL`_`$MXAL0&V*YHCXd%6I9 x=jjHt<8OzLJG(U}u1=2LJ#7|Nkrt{+j>* diff --git a/src/altera/quartus/max/db/sp2_max.(11).cnf.cdb b/src/altera/quartus/max/db/sp2_max.(11).cnf.cdb deleted file mode 100644 index fe0c89f7f3c75a644c36f9b4e72bea83bd91fada..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 582 zcmd;QU|?9w&B%}kg!VvoSZYymW`3T6rJjL;Q)y;Sih_}`se*x-zM;9kk%57wLU3wP zS!QyoLO^12wt|sDu$Mx3YLbF$N@fXA+gf&@5kSz&2%%k}v>OwIU%_}M)RXU!0Z)me zLd%i(8*&Hi1=?2?EMn?>dZzyesFS#K#d7EIkS^G2|Bp;U5D=LIRH zqPBCl9+XWl4Lx!=cykAPEtC3J!C3_}Wn0Xg>mPof-TeASnaR~pVy>$#Tz6ZzF1K(s zH)jotYbucHnSAuIpUtVwN7o#HQf3-hrmKDA8>A5S6cBlUxe=cy(S0X*CZ;tor$HB$BgJe2S9E?j5d-(V0 zg-8B7P5!Ucn^XQ)JAV577+|>k|6jow{O1?9 z?wsQ5Np`b~8d4({WI4z&CJHLJRUA8f+4O|riJQuwUf$U|d!~d#-F3#K3EBc(Hh=R= S-|s!lBi74!3KXyZ{{sN51Mma@ diff --git a/src/altera/quartus/max/db/sp2_max.(11).cnf.hdb b/src/altera/quartus/max/db/sp2_max.(11).cnf.hdb deleted file mode 100644 index 1e4026d0171c4708b6821267b7037e1c83dfe8aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 506 zcmd;QU|?9w&B%}kg!VvoSZYymW`3T6rJjL;Q)y;Sih_}`se*x-zM;9kk%57wLU3wP zS!QyoLO^12wt|sDu$Mx3YLbF$N@fXAn>QoS2q5?ep%^Nm{9jPIf-xo_ny=Y_=k{!U zzJsh~Z0mwV1v-khG&;FGakub3Ga{{OFF6iP^DU@B7(V|tWOzQ01g zKK;0Wf4#zCV~Zyx@7F2!D2Vd#B}{5;%vk=`r)4W~WECfA9R+x%0Ya zgNUI4M}ubvyGujP{e<$C_~yB`F}1Sx5!YTj-)Vd!RktF^UwpxPo4XBVe{wHgVPKVH oWep{t$l}E%YxbOE{AWL(98HlV!~HYgdaBpq%ShY(|EG)l=tu*Ho&((@)(Yw7YL>@A_&D?)w|MJ+Y z6?I<@Mjm71>`~mS_^9Ok?I!@$$SZ^fZs3jqDK!urEcmkVdX<1|(QI pv#fTpo4dQ*SeW_5dn<=C-HT3K{vY=Jp7ogo?c@d{Q0)Bw4*=)?#gPC2 diff --git a/src/altera/quartus/max/db/sp2_max.(12).cnf.hdb b/src/altera/quartus/max/db/sp2_max.(12).cnf.hdb deleted file mode 100644 index 258f5db52e768be6c346e3f27c4aa7873d66642f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 503 zcmd;QU|?9w&B%}kg!VvoSZYymW`3T6rJjL;Q)y;Sih_}`se*x-zM;9kk%57wLU3wP zS!QyoLO^12wt|sDu$Mx3YLbF$N@fXAn>QoS2q5?kp%^Nm{O?e@f-xo_ny=Y_N7^|j zUZ#n=fNfons6Ypo3P=0>&6`7mwzzE)vJP8wt@^$G3Z@@Peub_78vRzh@3lPo`o`+z zrb&4U*L2Gs6(--6YFRn^y}-4++j9$C^V{ZKd+BBVB zhuo3Aa#ad{*q@%2@7yL-{WwMXSX@@-Z+W2e{{OFF6iP^DU@B7(V|tWOzQ01gKK;0W zf4#zCV~Zyx@7F2!D2Vd#B}{5;%vk=`r)4W~WECfA9R+x%0YagNUI4 zM}ubvyGujP{e<$C_~yB`F}1Sx5!YTj-)Vd!RktF^UwpxPo4XBVe{wHgVPKVHWep{t$l}E%YxbOE{AWL(98HlV!~HY%>4fk0MrD?p#T5? diff --git a/src/altera/quartus/max/db/sp2_max.(2).cnf.cdb b/src/altera/quartus/max/db/sp2_max.(2).cnf.cdb deleted file mode 100644 index 51ce8fea97052fe5614718494959c34e249f93f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2929 zcmV-%3y$;;000233jqLb0B!(300011WpZ@6CZp~K!000000B{Nb000000JH%B z000000C5Wd000000C)lHT-l2rMG*fIjrVPQx`lGdI1%J^3Fp>Qn`AIvA&Cc5K-`8zh!Od7Nqy zW_LyitU#RV5O&?YZSFp0!)OT3-P1Go2A#u^EO7Gk+jj=}(e%@cQ`2*^^Q{rskW({r zQ`_2_;36w>!Dv-*@*Q0;-`NH8U0lEpvu$eU)TW8eZM~R5Om>G@)g5AWcZfCJA=Y+> zSl1n5eRqfrtsyv!Pv51+Cl1hYsv6f#AimeX@JtLr54863rGUQEmjbNUr!n&_GR!Ib12(D#$__KU+hGhyfM% z@!M9ROh~;_@r1vR;E=xQmG4IIo02Na_Grd4y+anML!MJ}CFfCNX7*UsfITg9QCXb)p;&0~410XyyaKq`g{(dAuZAIJcw@A_umFygHF~ zCCXXvR}C&{tl!B>V@$k)I$z}LsQsejh`mBZ`yuVPW)MK~EHk$4Cf=QZf+mnIT zq>WJZlf_u5w5Ao`3)w0; zZmEEulY>m9t(04iODF1SB8Ry;(#JZoe$Us~N?l-!WSi=|hQcaQCvC0sEBUNWmc7`Z zO?uh1e;x~8U5hqhpOz&3`vu=lY-gS4v$Xvo@KBEJ#gvUD@ynf*h+n>V(MfbYt90qS z)`h)fv99wJ?L=-ld{i1FN!P26Y^t?7$w>U z`Gof}dpVu}yH(%rR31jnbDmFH$zwZ{wGV z89dGmTlXbv=O}&2&dW_@$#-^UeVS=1OK#gQdfD=^@_6~`HndYwUwaC%E%S!XOBu(~ zm&@Wm{~DU%ko6PyfFJ2=k1Jg|uXS;~uQ9SYGJfqY&;yJExxV(O*HbkQXdME^xNRzX z19*%4`G~6H!z!=q$bE;_pVcw`FhI;2yjxJm2OHKg13~6Z$jH2ymeWI7N--auJiE z1$~IKNsrp?**Y+KGbMe`16Rqgi{8`x%G@W1(f^ zwiRWGE;o6i$?n#WxIvzp-L_?G^k+~hJ4lIP*N;Sf5;itq8^OjN&HI=`bwl@JRxN4; zXZ8||Uu*3cd%nqS^0y4>U|l!mqqZ;QzO8kF0Y z`#=rs;Xs`1mjpw!?!X?-^vJ%CqdW#RLDbU?RzdBPW+3G+TIn01LUfQ*Do zTIhe(iYqGT1BdLT9@7$8F8W5HQKn3e0eCEFbTto3t^Iti^2>=reXff9NXj0F z2opa@`~>uGa8e+hYbU6x6u8PKB-j=uFa z0m~(f2=33HcQ5B7OL2S@B_hyTUZm3sG6({^#6LTo*c>3hIV6juh7gn8Ay##VSlu0B zO?Qa3-67U>hgjboVncU`jU6DkG)Vs_x_x*GMwj>$j4lBx7+oS%FuH`OVCWeAy`am# zgt5kdR61B`MhzJnc*mh(Zn)r!Esm2#BaW86Nk1UZp$3;b+^dr<`k)GPmz&e;WbOD( zy|kBeN}X)c$0t09<(yL|%m3X=SDAV*Z754#o%qa!BbWGfdZD&ZFPE`(vY01xvfPDm z;ZIpPP-fnyBE5_$nT|_OWxkS7F#UOiDc}(m$M#8 zpL@Ubekt%k5|@Q3j~@l`Y$B$oPmHCqcsky+{c6F0xq1kDBypR$8&wh$$9ca3*yF^j z!nz;2IL%e@EOr{-w_{njupIXlxcC-}%Q`L#(P|52*B73Kwyfm4xrV+6IDEq`7mp}- zRK+*Ty!cL-v@$zbz7cdpTXeCUIJ|hIbP#ub+fs#7M|&L@^o`ic<1PA5+d6;~ql5r( zCm_66tv4ef|8P4L912M8vM-T_Be!;9fT^6uP5vY1rAPq9w*~KY7*xfP2 z6=p%@8}$}Wu%aHQQjpR7s7n1^TqmqvynqX=!UL+V6G#i7sPhkT4f5Tjzng`Pp#>;m zf>WU3M!$T7&-Bl79oy_=aBKw+f=#JnhqJpFHV@4ds!U;q@20b)KBSr<1q^SssH*%?5g b;RD2|Vc_iV>omh<5eo-{H&h+~00960BPx;g diff --git a/src/altera/quartus/max/db/sp2_max.(2).cnf.hdb b/src/altera/quartus/max/db/sp2_max.(2).cnf.hdb deleted file mode 100644 index 1437590898fc0e35f8cfdb8d0ba5a3f28e72a5c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmV+b1ONOF000233jqLb0B!(300011WpZ@6CZifW`00000009C3000000C@ob z0000000093000000C)ksQ_D`nFc1XF^MK&Mm0v)-sW|xn{RxCBH%TSb;IvIDev=R3 z#0BvTJL`-I!iWp7lH=Lg$!@&s)OB6YiEYbz6a3$6S?az@-Ppo+ZOM9(_;0S~=FG^C z`bl0SqZI|Ce&!UpszI}HTHLrLiP|Ke>Rx6QG&U(*Ss{VV3!5TTHj=WDltEHblG@5H ziZr=$3$jh{T2joaj_lb)v$?cy2?mI#!(mCn&IHtQ1out)A7pow zeJXk@BP3zE__rzBkfLj-EM{=Z5P?282-6G!_P=sAC3il)?#pF!RW{wJ(&0M*00960 zcmWb%V*mnnAQl4RV0XWGAAe`Z5Kn&~!!tPKbnmVsj35;Z4q%djfeA><05M2ufNM}N zP?4)&NPKWekf)z}Jdha_nH*`{!~#|hAsHAXfIOJ_zOKQ+j_$4yrLOU7mV-=WVBi3g z3=C>OS`>&u=DP>^hX%xlLxFA3)(G3B(|SLtG<5&`tO0D_O|KAPZChvK{~c0RR6tdrH#) diff --git a/src/altera/quartus/max/db/sp2_max.(3).cnf.cdb b/src/altera/quartus/max/db/sp2_max.(3).cnf.cdb deleted file mode 100644 index 442c1b6fb0597cdb952570cd5480f5155a2ba21a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2493 zcmV;u2}1S{000233jqLb0B!(300011WpZ@6CZnH!H000000K5nQ000000JH%B z000000KEwS000000C)lHoau@kMHI(x;=Z8bzCsWL^@C(4J1F!6_y!@w$xH&lVMd(< zzj>d-7x9}Shyizv;6e=UJBo@L*Np#P-8#2V*X`|gC(b0?lAfxrbI$*4Rn^tiH?FU* zubp~a*3@{UM!6WE5`~5 zI8ZE22*;mTT7BBtFdae&_u}$Xxz6>eEC}*zhmYm*)9ELQ3yZ5OYn>5D2+%!+5ukexBS7~gMu6^Fi~zek&*BKMr!TdSR;}8|mD$wG4R@9P;Y-(hanxcsT{ z_hMX|(s2k)c8Be*x1Y91L-I>Im5cqQa(_s$N)DRfD&@9DedzQBIUU_(^!<{ovxbSi zUWT?#!iQH^_+WBk%i#3|+U@Gc?{^YhX!y4oXygz3ZjAPLAAD{6_(+B28(=685f1NJxfW?}){+jsUW1Y%btjpxg z_cDDJ>ngeXqkZXoGE8hw^YDMr9+h5Bw4?oltJEg9?9@mWFUy|)-SlMDh?hRqc2FCmND_Qiz*g}0* z;cny~>lXGj$$ldqFAo2klC6_t%gPtRR8BIrwjy_%7g8HNZRCDS^bsHYW9_Q56?J0k zWb3U6yMj(^ZHg;=sZRRdZIP1;RrVhF$NaEjbLC|8nV9)D_ZCN6>+zj3o|nZVy%AA= z-78b*GhMGcUB2yg>1+HDp$T2ZL(qWBpHs3kotLjfJx${-wG*9fWxtc&u@Pz@`>OP+ zyK%f<>jl-uPRVC=_F}8B3p(M~b=!xi4UCseW?PQ#_l}(==ZDrvje!jGoMMmxx z#_7c_>*MsX@@l`B8TA)3n0*z;&PTC!vYBhESqNc5D`FPq3U`TI9WB=<^l+w;a~Jh} zDcki;rVKmj%Q1zO(2AI%SCy=ap#FrG>(iLaw9aOCOz;c_yrXD;IxNFQPIJAKMqI!w zlY^!?Q%Td5sKl(Y1k(`S7{yXDpqXj89_c#`?hf z>-hj0FiuFQ!?rbbHY9#j?>wBFKpUQr{8xPOu+RQ!>v<2Jm?btZ_Yk}rYGBWeNq@J-QL74^Qyat5BrpHE; zI!hG!Tjp|n-ZioPEX0bfmLYrJC4%$>}z7H z81#9V^CKfrf0XhcCc~Vw=Wp+@->i#6T5p`%IeUJv06XWv+9y@B=VxWGGpE0;W6zJg zVXtu2+s4xV+z7EQaInP%rHL(WZ<^RzqA747^*|#VB{36dIC9|FEug0>93xLG7DP4k z;vR^3XKXQzw^mq8zv)W_8NO9C{llY9H2oend|FF&abM@d`Jl1Yk1?Gvhe^g%m>{U* zCiRm)wy#w=5?hvTZ*4hXJQCM?6L95XKwQBTeek{7u+XMxfQFxxKeLTHdbRN`6cCU$ z1hl|l2poomAC>12;$DZvN=t~j1HB>U`$O#L53#d9#IF7jyZb}z=?}5DKg7Ns5ImAb zKQ!+?whW`s_%w_@1Jp43j8MbqGeix;kJ0!O0GsgxraYfwc>uCf=o4E8(N+!GR&-1< zv0P|v9>z5dnGD`C*=-P9L9ecibr}9SS*_EBf~;1#@LX$>ahb)XBm!Bn zFJE=}3Rd#s9M~C4RpV(I+6kT~vFI@vw*B!|ZyAGUM^B2N%3!9 z12M8vM-T_Be!;9fT^6uP5vY1rAPq9w*~KY7*xfP26=p%@8}$}Wu%aHQQjpR7s7n1^ zTqmqvynqX=!UL+V6G#i7sPhkT4f5Tjzng`PArmNJf>WUK5Pc6W^Tck*&|4q2D<*%TzgzyR?M#N!|~$YTi4czC)7IR-g9K+K0C>*D5Sp11ltI|C>xe1I4=44nOaoo2W!V&P!0gvtW| H00960LPp;t diff --git a/src/altera/quartus/max/db/sp2_max.(3).cnf.hdb b/src/altera/quartus/max/db/sp2_max.(3).cnf.hdb deleted file mode 100644 index f1db55d0992bde94cc3da1c7bd06a1671167e948..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 760 zcmV@6CZWsjs000000Qvy{000000C@ob z000000Qdp`000000C)ksQ^`)lFc4+mBm@Ued<0^Z5GNm?KY>u?Y!Yg4+S(Pr$%k;_ z0Afw&P4Yr2(gPA=Bxl~dc^=zir!32IL2O^fm*D>xYqHj-tkpHJmpvIDlK;!`UY`^7 zv3{Hv@nBuSpr1NLF4Sl;Op1HADp?!nWA#1_(AcB-Ss%Fuess`gW+ zS3nuA0l2;j(zprW>g+<*RMB)Z=D=x8;bJz24OYi0hM^pWJZ=chtchc5r7M+^KS} z*sHt3_AA}^E0ssL2|9AlsU}FFR zb|4l4;$U~bcpraf#}H3{Aj2~_UEt`YGbo~}WTLCzkL@d5rpA@QDm zZvNcd>l9c)Dj5X8B*X(EK(=qNJHoHQ&K|D5jvp-R^&##+b`3vNv8M~rcb;xQJN~w4 qYJh@_fdS@0kRL$dBniYIgF{>+LeNe3=_^^t26ipTdH?_b0RR8U`aJ&t diff --git a/src/altera/quartus/max/db/sp2_max.(4).cnf.cdb b/src/altera/quartus/max/db/sp2_max.(4).cnf.cdb deleted file mode 100644 index 9953e278177a21430c7f14b04e588c9ba69d2ed2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1547 zcmV+m2K4z4000233jqLb0B!(300011WpZ@6CZf+a^000000Ote%000000Pz6; z0000001E~H000000C)lHSUYbMK@dLken`;Kk|G^V!lOxbfjE!?6WK{+A*9R z&OpY!8OXRlwTzl$(`@#rm8Z99tvtO=Yvt)}S}SL_DO}pCZ|`b{n#8?$6{?L!rMFkJ zA|~_lOVps;%`abGO;sYxk97=DeecPN9Tk z_e>=uyK5>T*?m(9$?lwdvh~hhKkJia5bnHac3bVvzLvo;;&l+PW&B| zL~>3n;Bxqy%~G7v8JlB{;6kRgTV!R@l;%ysM{s9sr)`io>elc^MfNw-aZl!qX3XRa zW@s0P3V|}EbQPTR{|fB~qW1gIzUGgy+kZ#ngJov>7G^S!Y4|H_LmM2|m~H6`(MEr` z!#}_cG}L?bPPe&)z8MrD{IC4qm8v^1&UZ+Ss|Vp74z%Gd?{bpSSFG6z-FPe_PCHY9Gj(l)7Bk{5C+n#_5)l z4PQ5$0u@q6K$=1eOHYrDC!{YW>8nm3BhQK^A8cd;#uFCt(MJ4d=*fqs8`nt$oWr=< z?)SE~Tm7Z*t*_F2*{`&#{pN1{pwepf$Q}T%NZNSF1&lrt`#9HekAY3U*OFKChpyhx z(bxyTSjl&%S96>WIXEN5XakhAZ zCT1nSzVU<}x4`Vm3(2peLyzDIsjor1InJQn)N0UfhBIh4v8r@s6C4waA~>FPQV9+L z;Sf6dJa7WgdHn=DQ8TA;FS%~vp1@e}?T{mT?^!DqVX)1pNX)G?XcaK_NlR3r!|zZtQNg)m zLA@HkV`+HIT?wy*7*Jgadsj$|@XKiv`9q@h8LoGI%^H!sqiDj#Vt_I*_XU^GtC~UB zhze6o$dBD(K0_RVM`7BmFkuB4{0ULd#p$Rz@xl{i&EP?636^f%RHW%%qzP_b!~((0 ztENn@?_duu$OV|NnRa5@2Hh0uCS+0^(qIzj!~_5FgLrka$2}pyKI=eW<2fI6lxWY74zEN-C0xRl4QYww2)Y;!RAU?n`$k7*Ke2>e93n050 z7@6CZf67l000000NVio000000C@ob z000000N4Tm000000C)kUQ%g?6Fc1y@uMnJoo`3^%C=tI@kXqepCMp_eITpaxJ}- z92DrT#?>J$QtP~#7T8j@R+Bw&%DSGInCgHCXPT+?*i!Y>AJJMr8duu-=?v*wtJ;|% zt;QXPq`a!NIYB1UI&?~?uhhW-L1}$68kc?;c=POYE4``IEHBIEGEGs^xmo^SM&D{F zgNK$|R1AjU*?6;HB3jwgHBB2@ewDw0rqW3 zDu7fR;1z*DE{FtTQ7AA=&ObzW@LL|NnRa5@2Hh0(Kx40^(qIzjz;iXU7mve;~s%IOKHit|N>f6$}nw zl7WEct8Zm_6>GN_%+zs!`0XEgJr!w z#2v`4;fE^rbOHL#(+z0H-xf^`P>?Y&z&r@@11Ov%ff!_Ph-*X$y6HZBB@5XY1c53* K)&l?l0RR6%k2T8x diff --git a/src/altera/quartus/max/db/sp2_max.(5).cnf.cdb b/src/altera/quartus/max/db/sp2_max.(5).cnf.cdb deleted file mode 100644 index 32ae2a16eac32670e5019616e68364c623294650..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1858 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 MG7&%w00030|7FjF_y7O^ diff --git a/src/altera/quartus/max/db/sp2_max.(6).cnf.hdb b/src/altera/quartus/max/db/sp2_max.(6).cnf.hdb deleted file mode 100644 index 771d3dd612d844b272d7e6b2b15eb6ef0266a9a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 598 zcmV-c0;&BE000233jqLb0B!(300011WpZ@6CZuSBI0000009XM4000000C@ob z0000009FD3000000C)kEQp*a$Fc4Hx5JeD=euVfsdFsil2fc}unzkS;?>d0G~RraWToCaE8AXO}oEKv}Y1u$|f0rlb}-!FH}$+k(`5od=C5_NduTXiOut ziX)*hv(Pj*%92}sKTF-U2EYfvyyk*i-wd~isRr=NQ~ zkQo%29BJId0#*(o85lT$Jec{uuED{M?yeA}uJLP@gG^*#-~f{h4E#V^6o^6Qy9fD) z2E>O%20&G-uvg4v2CI{Rss1;kE{!LAYU9-gj2jzP{Ik?{fkK_T&;es2EU-0Kur z!HNZ-T0qu`0I_edJHoHQ&K|D5jvp-R^&##+b`8iyAjO_8K;L<~0qywPqNxE2G6n{i k2SJ8{!buW{L25%>BSO$k_vtHH$i~16Q~|Oc00030{}}7@;Q#;t diff --git a/src/altera/quartus/max/db/sp2_max.(7).cnf.cdb b/src/altera/quartus/max/db/sp2_max.(7).cnf.cdb deleted file mode 100644 index d6b2c31ff2609cbf0514490381b21480e2c7a29a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 885 zcmV-*1B(0)000233jqLb0B!(300011WpZ@6CZuAoX000000Eq$s000000EYnp z000000CfWZ000000C)lHm|0H4Fc5}a7J-mJyzz=SLAL|s9;ia7^Z|iViNY&A85{v| z1RfC=U~ib;TkOOH$4(IvnaXuMp8SqJFPS#WvTQ+Rk1_U1^|A`dYr9`#tV5qo>FH4Y zL1UwSryA~6e35NXnVqJG-4SofFGQN=qtJ_1=tnCIq7{Zw3gZGv%z|w{k%U4VNhrjT zghCuiD1?)w<;%wBXC}Bh7}xpj7ioTfy=lPklk_;h9lOc4s#(OYn@z7SjV;w-i!h1s zm7t#@d?{#&@U@^N!WRQ1#x_pOMcox{o5r>mY*f_z1j&**ntLvvMo8!!< zb^_n6I`GlRjW8x=Sl(k@wP6+xzWjW-74CF3f!F0P_}Z{P3gpJvT-bPp$JEWL32gf` zChNk%gzH`FXCm$6NhJFgGIDc zICrd}yxNJ1JC6X{4pVj?jqiJ8<^ zBs2Ak6#T#q3}IVTc#_i{UGKwzjv{!7kN{6{O!y^{UK1kyCPW5Jhzt#p9GPGNRxTqZ ziOUb)GWyh5*kzC66iSrOQR5NhW3*x56At7K+d>-7J5o}H(+IBwCGJ~eH~PjNP%P3P z-}t(5cwLaqeM;%XputLig2Crw1R<%8v%0?k00960cmWb%V*mmWAq2$1?tbxpt|302 z!6EUkej!1T4dH(>7(pr+9Ka+40~3%2DRp*niVt>o3~_~NsC=W|!U0y)gQS!nRjI#= z>x9*d7jS}ActF*u0cimgb^al)LB5;xceAiEC;=r*a4Pf!DYV(T$e4ve9jHhFs?Zup za|5xnyJNh+lb5S=$hxG@rd(iI7N{DKM?h>5AVzq`!_zg$G052?^6A{Yo0%9ue%AqF zUKB;1{{e7KgxGZ8}2M4PUP+ky4w^OK_n`_X@6CZuSBI0000009XM4000000C@ob z0000009FD3000000C)kEQp*a$Fc4Hx5JeD=euVfsdFsil2fc}unzkS;?>d0G~RraWToCaE8AXO}oEKv}Y1u$|f0rlb}-!FH}$+k(`5od=C5_NduTXiOut ziX)*hv(Pj*%92}sKTF-U2EYfvyyk*i-wd~isRr=NQ~ zkQo%29BJId0#*(o85lT$Jec{uuED{M?yeA}uJLP@gG^*#-~f{h4E#V^6o^6Qy9fD) z2E>O%20&G-uvg4v2CI{Rss1;kE{!LAYU9-gj2jzP{Ik?{fkK_T&;es2EU-0Kur z!HNZ-T0qu`0I_edJHoHQ&K|D5jvp-R^&##+b`8iyAjO_8K;L<~0qywPqNxE2G6n{i k2SJ8{!buW{L25%>BSO$k_vtHH$i~16Q~|Oc00030{}}7@;Q#;t diff --git a/src/altera/quartus/max/db/sp2_max.(8).cnf.cdb b/src/altera/quartus/max/db/sp2_max.(8).cnf.cdb deleted file mode 100644 index 7f64e902a7c7024c1a48b1e3f34a3f7357a45e05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5548 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 diff --git a/src/altera/quartus/max/db/sp2_max.(8).cnf.hdb b/src/altera/quartus/max/db/sp2_max.(8).cnf.hdb deleted file mode 100644 index f093a654fe5dd443c0044b65368ba643cd02e13e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1243 zcmV<11SI@6CZq*F{000000Nw)t000000C@ob z000000NVrr000000C)l9R?CXiKos@;ej(yx>qbP7ab{GQh16`^3hGX!P15NwOp_Ez zw|b#jxXQZ-fK0A$hUeJ?j9JlCw9C-K@Lg4ey4a&wAR$hGuytjfE4dPzf6W^?sbh;?_Y#8ilkBuSwgWwxo3sUfn*(4vR>1<;5iVn+r{vr=gG( zMQVsK5!Y9mCwHIqkvjwA_5j%&AR7Z@eSq8&M9!zx*lZk;9Yh4A7ZH$NL_m5G0qI2q zq!$qo7m=?AkTr?1y(vD(Or=63(&)wnWu+6Pz#9aE#!XfG6lESPS9^5xHli4FF^P*z z%5=(a@jJr)uU5m~0L8-J0b+5xB@(q00_WA6@Az#cmk_R?O9+?462g@?>a&qk-+lW| zJEG^bBYI9dqWh+WU8B1%cpf58_IwT#_D>V`D--^b8U8VIJFq8G-eD8JKZm)Fp9*D- zqQcxzk6iX1Ylw1~x1oXOK=^YbOcc&5plZ?F!y1iTqCUe780INnpVa{7&d;aN08J}v zAp2pw1mW+MD1}JbTR*F<(WyF?Qu(wM=79s;2#tc@9F2}&&|C~ffcM+0ICIKod^*72D>Bt8tm-h>g)KyvR)tJ4rJHx zLlt|v0Db4_2DIaEi>3xB$QT%49t0T*3MWY*1{oaU8WDnSx=&xpLN*3RpbC)n00000 F|NjF&IX3_R diff --git a/src/altera/quartus/max/db/sp2_max.(9).cnf.cdb b/src/altera/quartus/max/db/sp2_max.(9).cnf.cdb deleted file mode 100644 index fc923b1229ef27a0c6d229e373c24eddf89781fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 987 zcmd;QU|?9w&B%}kg!VvoSZYymW`3T6rJjL;Q)y;Sih_}`se*x-zM;9kk%57wLU3wP zS!QyoLO^12wt|sDu$Mx3YLbF$N@fXATa_Hp2q1XL1fkm*A@pr#2wlPWX6A0c!v-R4 z!S9@$oSIsBIX8a4XZpTTtHq0*#Y>e-yVj_JMNCcXUSn_e;h%4BY@BSe#ZE3tbGg^s z8|T`K&&eNOexy*w|D^?I(}U@!QY|yAZuxC*THrQ+?vkZ$Px;S^J~f}35qDhtrkU*H z)i2iE6JLH(+-;T_|H6Z6CO2EeW?x7Xw#spu?)zdRM{|$d0@d69E;Do3*ft!%px#y8 zSa5(pZ{67s`burSg+Ftr#O_6cVP>~aZRrp#u-UcWc-r(0)fvpZhNJs z75Y4#pjvuj@y3KC!?QlY^QW9}>}rdQtP%BR#drk~W0 z-(p!c?_t3zC^gXhOfAy{MDJ&12^Kx9xKKmIiiC}G?S@AYdTIliTj1o(q zP03Gg-Rf9aekOy3#W8%ToQJ5i+Gj<7gPD?*O($he3j3sa&r2}M|HLv`a*FzlGfRsM zf@QKhO|JN#nZWskapi%smjacMd;b^ou$82IW#zD~P|`Lwoz`qp<1oukL05jlHhz!e z>`PuVUouu$$&`{I_)BTAK)dVPjOeL$ruA#Kum7}Ha@Dpbq3u)eM49sZTPZUs(6iAw zZiAazTe%HyV3~tx&h;yycZ%j$#JJ6t@ZjAk6MsE9+THA-%+Bj#zIxx+hi*BW{N%}o znmJehvNJIJ|6jo&vpzm#v@U^Ih4)j@*AK(wk!%9%q6%pnUHf>>Ds9nSC`Irpyb<3GQ+b>|dc zPqLd`)VM?<;(*E#Wrb}V0?IazAHI}&BJt#n;LnnG_s;t8DC~dDV5r}v@6CZgc|x000000A>LI000000C@ob z000000Am6G000000C)kkQ_Bj%Knzq-6h#n^euVfIJnhM=2fc|D?E}P8!P<}aSu<<0 zw8DB37t%~-wwY$zrfHfMXtgMwgnx+&^>|Q^&p`hg#htWoapPyf{xU_pkC0qW;Q@t*rIcvja06)%^MihHs zwi6oD2WcvoYBm5fd?BVL`_`$MXAL0&V*YHCXd%6I9 x=jjHt<8OzLJG(U}u1=2LJ#7|Nkrt{+j>* diff --git a/src/altera/quartus/max/db/sp2_max.asm.qmsg b/src/altera/quartus/max/db/sp2_max.asm.qmsg deleted file mode 100644 index 420657a..0000000 --- a/src/altera/quartus/max/db/sp2_max.asm.qmsg +++ /dev/null @@ -1,5 +0,0 @@ -{ "Info" "IQEXE_SEPARATOR" "" "Info: *******************************************************************" { } { } 3 0 "*******************************************************************" 0 0 "" 0 -1} -{ "Info" "IQEXE_START_BANNER_PRODUCT" "Assembler Quartus II " "Info: Running Quartus II Assembler" { { "Info" "IQEXE_START_BANNER_VERSION" "Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition " "Info: Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition" { } { } 0 0 "%1!s!" 0 0 "" 0 -1} { "Info" "IQEXE_START_BANNER_TIME" "Sun Aug 28 03:30:42 2022 " "Info: Processing started: Sun Aug 28 03:30:42 2022" { } { } 0 0 "Processing started: %1!s!" 0 0 "" 0 -1} } { } 4 0 "Running %2!s! %1!s!" 0 0 "" 0 -1} -{ "Info" "IQEXE_START_BANNER_COMMANDLINE" "quartus_asm --read_settings_files=off --write_settings_files=off sp2_max -c sp2_max " "Info: Command: quartus_asm --read_settings_files=off --write_settings_files=off sp2_max -c sp2_max" { } { } 0 0 "Command: %1!s!" 0 0 "" 0 -1} -{ "Info" "IASM_ASM_GENERATING_PROGRAMMING_FILES" "" "Info: Assembler is generating device programming files" { } { } 0 0 "Assembler is generating device programming files" 0 0 "" 0 -1} -{ "Info" "IQEXE_ERROR_COUNT" "Assembler 0 s 0 s Quartus II " "Info: Quartus II Assembler was successful. 0 errors, 0 warnings" { { "Info" "IQEXE_END_PEAK_VSIZE_MEMORY" "199 " "Info: Peak virtual memory: 199 megabytes" { } { } 0 0 "Peak virtual memory: %1!s! megabytes" 0 0 "" 0 -1} { "Info" "IQEXE_END_BANNER_TIME" "Sun Aug 28 03:30:42 2022 " "Info: Processing ended: Sun Aug 28 03:30:42 2022" { } { } 0 0 "Processing ended: %1!s!" 0 0 "" 0 -1} { "Info" "IQEXE_ELAPSED_TIME" "00:00:00 " "Info: Elapsed time: 00:00:00" { } { } 0 0 "Elapsed time: %1!s!" 0 0 "" 0 -1} { "Info" "IQEXE_ELAPSED_CPU_TIME" "00:00:00 " "Info: Total CPU time (on all processors): 00:00:00" { } { } 0 0 "Total CPU time (on all processors): %1!s!" 0 0 "" 0 -1} } { } 0 0 "%6!s! %1!s! was successful. %2!d! error%3!s!, %4!d! warning%5!s!" 0 0 "" 0 -1} diff --git a/src/altera/quartus/max/db/sp2_max.cbx.xml b/src/altera/quartus/max/db/sp2_max.cbx.xml deleted file mode 100644 index dc247dc..0000000 --- a/src/altera/quartus/max/db/sp2_max.cbx.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/src/altera/quartus/max/db/sp2_max.cmp.cdb b/src/altera/quartus/max/db/sp2_max.cmp.cdb deleted file mode 100644 index 6fc7fa8d52c259d4faf901f61599003b47aab6fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21365 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 M*HzGe00030|1RrDZvX%Q diff --git a/src/altera/quartus/max/db/sp2_max.cmp.logdb b/src/altera/quartus/max/db/sp2_max.cmp.logdb deleted file mode 100644 index d45424f..0000000 --- a/src/altera/quartus/max/db/sp2_max.cmp.logdb +++ /dev/null @@ -1 +0,0 @@ -v1 diff --git a/src/altera/quartus/max/db/sp2_max.cmp.rdb b/src/altera/quartus/max/db/sp2_max.cmp.rdb deleted file mode 100644 index 027f2a0fd5a09bb19dddae7a28c48b3009c2e20c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23263 zcma(21yEei69$Tg5JD1ydkBHx?!jS$ySuwvaEAaPxU;ysySux)y99?t7ukKw?|J?S9J>AoDx_iF)&RKR2>YF!j%8}sS*uwq*Fj>{a!O_CbmY9oyiCECt!rGXa zh4lw96FVa_2O|p;6Bn_PiGz!UkqNQ9fsqw43$cU)P0j!H-QZ5!J(I|mRfv-4(PH0Ah<_k6j>i7NSAf{karkos#u-kr;Y1hrJGleI-6F6C~jVQi#(UDx48w2R`p-j9d&b^ zl`GwYUQCgfPdx6GQxSDbT~A%xY)`6OOINP=)@Jsa%I;fq?X6rFt<-qh3(yn?`23ceQhV{%Be5CmgS2V9}+mu zlf1H~L_%AfqXynCg%T=1aaefja~1jq0ac_JNO-l=BmWO0;7f|0cu{sGpma8J?lB&s12t zSyx(W`t>74w^xOb5u`HqxXJqa=y+;?Mnfd zC39EKLsw}R2=~RzWuiv!ZzK}LOgu^YLN5&$1U-Q;m z3e`?4U!F7I4)sO%#y($<;JNXs&6ngJDt_y(08l;QJ93~lC?(hrt~#_Z5Jkg_(AS3g zVfd4UtylPx5K@d#Cp3^a=y%JH40Urn0P-Ic5b{7d`Krra%2L$0xf((d(A^}g=WmAq z#TR7YF-J(9KoLr5U>AuL=GGAFQS*n6xJmU7=84waXz(w7Zu@UbRy$Qhq3^*zmj0Qv zkp#4>{NP{19OM&U(nCLIb<@8WR@U=%hzs}zKbFWUX-HJE{D=eoVs7Q>leo~ZS^fqEA*I>^kFg^7nPT`)+bSWP?DuSOp2Io^dC>21u?GeB2 z3RN(1NvqW>J(L7Xi1`^OqyrPle@$Z96l3H9tL*ezjAB|bHaIKmfPkN~(?(P{!^EF# z8aL8b(CMeg1A^6?1)pc&aV5`W+o?D11sj!G;q7#8YPx@53Tep-bavTFOrXawT&3Sb@AA^vpHm z*m%L8A`a^ABsP+tjay}6vP8>dy74&hq)@F?l`*l3ZSj4m>VZ4vjpc04U7{+_OFtnd zg2`nMU4WgB6dW^G@>5dj?k4XZe&`ik&g~_C354szd!{m(KU9R^q%&#{CDIHygFl5a zYl?ik94KBa?}ZEL{Z=!FZH|bDUSA`Q9AYwC@f{;4Y(82oxJkWkXb#hy5a~;HRDq#k zgC9yO$_D^tmH&rLs0wt@PJ5RJIE5BL_RbHSNrNsdYUw}4%jU83R2$%whV~_xGK~E||^(;nTJ$lDM<>Fmj;(Ln3 z3)T;}eIK`dB4`^j`DB7ci~>;(%>1{zYwiD`QA2#5;4V5qE6>&@Mo%4Zk;j7w5m_-c zQZ`fdBy9cGYqenZ`zyZhpSeje-NFr|!wn6wKEWBGValQ7*GTgQGKYs0Cb@-%6v|H+ zC}LBn{MUT{vYzIIO`#L$@7IMF@ZSU${1oGZdEg{AqPPRnv@dB7gA%1o7T6T!J?pmE zOaX?E#s{8R7vLRCoKH}Z_})Kwro+{an`6H8 zwOf)UxhpHl<%34DEGVUWs2SPJQ>cCHb}H6RKMa_B9`{0JYx=m&iv3MxdX7k0+e;c@ zT+O~(nMu?BUUHu{E`_I@IS`pg11C zItnT46{j%C12Pu~W{k!Oc_=K8^lOX|yWj1kgqZI{WpqP6%=>2wIPNT;Bzu6vx!(v) zmgO^;CM(y45V$9_qAQIrWo;+6Tc2XlY96n|Nr*GY)Pjd1u(qEp`Aw7kF}KCmey zi)>AGwIP^eYu?8N?;?swsKV-$+kctGR=xuGc$!sgE&UVp`g=hX`rzA!Dg^F2@)r4Luh zxaUdW+RTVJ{>v#=S_h7X$g$wz1_t4;D?jP~PVFhb=^a1}G{PFpLL5<}VA1z)I2I`Q z++}nhiTDrjk^1PsXUBlz+dy}(^q8?B1t#l9(U7=frec);HAOM!qF;z9BJJai_B4#~ zW|oZVpTFk|*jB*+uS>9U=D}zkJ@dA=X(uWK2 zQj-fGGUTN%(O8)%uFBXEZ$bRU)||=KlYkP}d87ePP{W;VrLI&*;a8-U%l9jKK=te7 zw;QIFdbYaAdba0;4cxl9-ipQbk8URC@KXDdg^NYfxjDcFmwmfSg-Vn@qJRc4f80fZ zZEJGSwTZwX-J9lYQg>u>pMp09Aq~YyW*38+aTh@F945L1CnuJg|@Es4lQy`-Y zqqb6Hsm71s4H8E2M@_bonh=xbWsw(FqxRN8<0 zDkw>$TvJHuX^T&(1@1lQZ&@sOTN{_k*w44{6+ctU7@f*^r#6!Be{1`ErTfqOVq$x{ z-7UZcu9C&;z)jISoJBXL5-z&C+lCGGC9*A+S7U-yd$YFw59LKSKQJSgna`~)tsv2Q zmZAao$eh>l>kO{gtWsUOv6+dXC+4aYz6$;-t?8|&3*+4J9-r2@Z2DQGR|-02M<=K4 zjz)Uu3I~Y};7=y(5#;9V{@J#4vsl8nRf{k7n=N!NZ>1UjRE=W<#POgnwwEkkb+r5} zWTF)i4A6?#=AWdpN7uV`0C z#?k;QVZ>VsqP)(lc~JfAMZOcKZUhSA&?#M1O9oT8;D<>{DjE423NafdiUNaN=2H*< z87AY?C!<{BFNmL6E9X#;(+vWq4|8nXu99qogzFiFOasoP-ZdKLexD7l7eo6Lg8V>~ zFqqaBkC=hwuXi%9HD2M`5c$x>RoQQk z`3C9u3c5I#^H|&S?Qdhd3AAd(?xt;A^|nh37{j`FFcRF{R%ayP<;rxYS{ikB`_OpI zVr;h_zh9y)dOBLO1s{5raX(TMtsYU+YSXC-C=1(5ofp+hcxUu$qbuPze0X2=7Ux{p z$?slqBwPyDc`6izfxQO~VgFALyFXL<6vJPi)0BJOVQ@6ri!t`pZ^^fT!~#7p z2N(La3yFvficT-CxZ+6+vGquCrOHh!XD!|GA7jc2zSSuUj%)MU1-FRCuwuTg=P~n# zU!0Zs<;K3PZ&$@S2b<- zaiU9ME6igSS1?5x;Z05KlwqMH+%z+WBk1+XPx@ziQlzWonQ~|B@HP&GI{nAj(4fc_ zGefBT#l7<3nQk`I6IFG@v2cqH;)X+KE?Me}iXaxa2qlg*Uj3b4c&l1}cLVi5fBz&v z4Q6~}DC?vIs#Pg>*8I`QT;<5)<$i;!bis(Dj_&nq>aC08k1tCQ_f~pRq4UUya$+@^ zCL5;S`iLRKx_l%2s^YV3>W^K42rS!({zMw1#5ssG7&^zXcmjPTCVA{#RYd;$;5!ew zrF=Y_M1DBqx8nL}m_|u>y|uk~%2AE-wzqk$P8c_=c`wndmHW_urY;bpVx0*i#yOUc z&InQCwBEO|7bU@~LXa;S2i~+P%At?qw-NkC_~w8*q>{{zm1t5tGP<>sFiShM4#iH@ z>(=#NpWf71ZxflyB>>12xBaLY@t}YxDf8O2(98_!*eRj$u9R^5nw`C^)TfZP+#;Ka zoP;4W^RD9NBm&;f#kM=O!_DAeCUE)aXjIo?G4)mw)noCQU}HppFlNU8xbSS4h4#{O z)xkw1`**RnH;PF1r2`lpP}q}0dp4ok5W0wj;B>B5N_jhwF1U^0K+nM_BPW;mV5~vE zw{xXP+p3jlYKkkhpPzhmRGe&aEMJkSFI-2C)cVCA0Zq4D3eY6q^<7bmv(_Jr5Ss3- zA?C8f;VBq|(&rN9ANTjS>{Pz{g+JwyyIFgn$i?l(3qrl_TEoX^dVgt1+O05c>~|@i z<2EG29JvN6EalA-%731SEH^Rw;YAcp2E1(TZU(9liSI`wsako+wkqh%l`cdE-Hi3J zE4P0`RihZ->xURPWyNw)|5T9B$@#F-X4x5_6-^QtWE-|+A=YdRz+KC)F(YRmR-ewyRsnOO2;%X0QeDt(l4$rGMMnpCY) z#a$QInC5bzVsTRg#$>XNZZGz`IoicU_WMLNn*DVXL*-?x7$C^QK9!Yx_FG!Pu+1|; zK$1%Fk^h6%J;$ADgKC4x6YVo1&Gf=!Zm-7n??!e>DWFQVzaSisVB)tXc}pp6;emGC zmh_cCOQDJq+zknU>vo>UlfR49A?nJC@LAcHGySI>u}5S*H6ZSA1W>d-LM4C4EN`Hz z5X%H2MX%BSP`7I1+`=++pC7Ie<@$0=x-s9vscxawKxR3M-g&3#{@4cm=I3(DgEr2eZYj&lqZ}JHTe}=ShGOe7 zXcQwPOR=O45i1epDzUnP@t2DI&?%k>syU}q>_tWVgFG2 zJ9;E7A$7L9SF~<we0oPXZS;Kznbax|AoEUND$ zxH2Zjyz5b(pN@BBRiTCB3=ZfO+N_L}z0_hQwi*?6POQLsET}hfe0TWISdEp8hYX($ z5F!Tbo#rmf{EI^IJs^PpPn`oN>q~F|(4^nsC(C=p>!Q`(hJsaB)F8i)-9J>L=D7Vw zXLDyE4Rj`G*mlQB_KdFOfx%?I-^<%>olZ|Tdl@BYuk>uw6O=EIVoNwUIcT(*D09!W z+85HNUke3=#*?=fIptA0H+gCU+N8<_lv|2vTO!}6ex>I5vNFaW0Ax;yp576r@PA6@ znGO;NvixaAT8aaYSwrt`ygqC+EZ|$AS?rw3@i-&sEJ_N&VUDnWatwL5MS7Y_dY#On z0{q!mB1Vy%kAt9Eo@Zokg@S4nt&~nYkVIT4F|W;q*pDaq1{Z~#`;pC-FiNAT&z>#8 zgQ?C&6km^$ZhNk>@-QI~d3GofpBJSd!zk*IlWC)5qayQ0u1!c|p1f4Qt>DHvdF>J8 zU~+U;dy!?z%w57qYviH)v7}t2%8nmUSZnOh*gbprsrM8dhKqzi=UCg5yWyd;!cGu6`T z4=UHZ7tB^{BxcDcar8u_U9s?6ygF3+$!QWsOh`bvxN0a^x-dE->4Nq#b=nwl%N@Y{N;`qr>dX_Lki-edTK!A}D1HVi{!(fvF~(T=b%x|mrd z-I@3;@{m80aG=Rm+GZcbcQa0-`fr-ax35+{T`EpJ<@F*?r1~ff9sRP-MrOmTCs%Fj zqV)x)vGF*c?Pr3Li&4EgB_B9M%#!^r-FYya|8$q?7kz#2K68#NiFx_Yqk1~Nm_39f zC=PwAMk4_nfby=r?CbVt@2(5E?Xvo9YVSGQe?Htwf-rMEMVR3nrp3N&f2 zipI8UIL5F5@!U3)5qB6BJD0CmNH)AT{7^_BEFbuGp>7?}>?h9jmA%pgQ$h}BRN|jx z&khS|7#_VN)j0xvvIQfV@kWb@-y3`Q!j*!(Zb_wbgJV*~g|o(0t+w^R2V zi6@o)n?mZ~q_1Zm2*)8`XP%}XX%~G#t5WPSb6h%rU-$%nSy5*lEs0ZQ5a60_tu_j_`#JvUS z)>8jWl_?f7A5Rdx?X*lFm{+FYwk>3@*#A(+t4i*UUtLw_n6H=a z%-+|l*!;6yoAU=`I~1-ugGjCBUqYdYIzf`g$qUsN2?wUw&Gi(`vqE*T`DuTAzrqjv zvHP^2kM$y2zYDz5M8YoT_v~2YY12FVO{>NurdTX<{WV_n*Y`NK?4tH#`isyqdbGnr z1ZUf(Pb+l@J7=`7T!LER?9xHM2c1Ojtb-TNM3-BPs#-8N97KoouD?OCZCUl=G zOkH_6td8e0v=bLuaNd+IW1t+9b@}F-N8F3cLxh3R8}{_*vCMf7!;Z1I?h;R>Du0!z zcYGu@$9zpSZ8dwqk$#caK%9$`?blvw@@35p>ork^vs=!_ydHtH($XZ?jk%IyIJ1He$ zMc0BM3qFqxbejr9vi$UfPxWFgEEIeC*imK-dNjHkK!QnZj|nMnpf)g1jXZ#y9pAD# zGTFs9o0ooJE{*#!!dUyPPS!kVA17{rP|jV!W7uKz*MZ^$s!6A9UXUC*1a)6FNj5tLzVFI`J$5wd>Yt9^?_h!4 zlb@q#$gCoSlZj$62(^-vM-R;ocUI_v<31?k(D!}juY}|*+VR(*YMuM0KZn!Qs?q47 z+gvsytvqMvBXdVh%PFQ>xvCJPAXj%6{dg2G3tcK}{DO$y3r49wGJugEJ*}_^ClWmM!8azigP_Q>D+#8wBWBC>ObqG~cDkX1lX*`@Tvfrs4lS?aGw^hk1I7|RPeo9iUbtAzU zK>ePgnJhpU0qEL$u@3U)Dy>?+GKndyQ~mLSg3~;Gh(+EHV;p|KK|Pn~GuJp-uN!NH)1i2L{IgGIw zDP@LKcadlW4R*+w=&-RQDWYb$;}JYDEI+EA4B)({NZt}+k4$kh)7~;gH$!hzj1{a@ zEB_fA9ji|-WXTnhb5gu~E?c@Bi#_AhtINR4JL>VdlTwPu*k&so$+EHF=B(6%Ua#a^ zQMcxs`ptO%M0+ioSx$vIGJRZf2|~A+krKqT5A&m1a9RiJzB8Osygzj}mW`+Uvc2$# z6Lcv94Ij`yML254TJ#45Wp}QP3efv@T zqb;#Py|=vm%~N@C{%>1U(K<^G?=km0^=~`6+~X01^~awOTZdM#som%T59}w$MBXb3a9H2_y@PMG)%0nF`M$||7Z!uRV$vcox2GDMda`S zJv_ma#K(W9C=#cN-)GZn)8G~Mk>vUNBu6$06BQj?Udrc0g`b~&GwLGo(OvHrmvL>7 z`5Tj$l+WFiWW+Roa?o9n}riC?+fkRNSbiPAN^x*5|8cpB}fFFa>(31T@ROF{ureU z;a0%#iU1qWhk(||+b?`sf-}8=)U8Cyl3udew+y$5nt`|5N&uUtj83zWb2ZFR_%YM>REY zE#Xn<|KJ(l<`o;vDHWcrq#LE@BAjNDDu;n?wmwc763iMM50jz%fo}W~!fAJZDzd@G zB5BWHGIaZ$S4$!GUYu~>W+B=nZ15~@)~*%52D%yY1gxhN_d4qtbtV}JME8IGoCd#* zUhU@~36h<jV59`hq)krP{cN-WTUoOW1@pP4tUPd;bMA=YKGso8{N zp-l_Ks_&X3fXNgnNo?;~YmbFJM_@%}zIOqzmdcLl@JsmS(1paJNpNIdIrj*-SPH5@ z4&sEAp-MK6J(EKb9Ub!lf{9$4}<6>nu;As5RfoZIf50?nPdmx_=)>V=ND5ZrE_PiR6`>Wr|>}1AUSz+ExvK`^RYl)S* z|5nO3FgEdZjTw&*W#Q}-U{!;y`hS|`{kWTG6&EmB^=U@#-hNzPO`Krd-T9$h_UUWY ztN$M@pSgwrzeL?zXFTJH8q%FiwS6eM36h4EED0pBkT@jRcN>cg{i;w_Uu(mEg^!Ot=<7>Rox?i6-(XU`I!9<^= zJle(Cfn{_x2>cJOs|jI+zd1)4U`3m#f$g*4+Eb9kV`tf`Y;wQ&ifMHhMe~{7CZ|s( zVzfgr?f<)bFRh#OFw9A{Yxz&VQq|iP*!HOV|I&6^F27m}FBCx_i5x!rf=3Yb z5+*%sCfUmWuQpGwnhrKb^B`AJ7v?TKLC62=Q-TBmY}5Sz(H>=LvS+}~UOY#>F520V z&PdCdJN4)4fv~#SjE*NPvgwQs?@zJjau-|(ud)5t-e>ret<1i*6L8FLLDSmTifQnM zHeAROb4R$2M>jk;)TB#bF zRueu#kbwn!B2Qs8vr#0y7IWEF2vT<=u-kN4(6Vs(kkd&91r z9$i&ou7>C4$%WrTn%!+G)>P=vQ8l^x&$c=Fu2;eYbTfRS&k$1huJJcfLC;toV6RyI z+>zh0RkX8SHOInM|Ks+%(iAz>bh5CSNvA}%q0!Yt!KGlK#%&iK@fm1ooxy+62@n2% zitffnEyS%uH{fO`KtY*bqHr-Tn=C=6qoG6g`|-tQjYB9w@5y>?ZhIDyvFCTvxh>WX zqUXv_T(5C7^~S~Oelb_3g56epm|l~X;JoRAMb)Qy#9$GfXtt~n8^P&BVA~i#wv9Y% zN@>h5F&FZ0DcEd21V#@b-00{8S7rb4MRlgAMCG2^rE6PFoXt-~m;cpJf-|!V5?+XD zguDmCXtPl}4-7XSgJhO7uN)Su)S(4}fHr1r3|S6lv7LWSSPNHCjwSC>nzyDtr1{|R zD3gHNoahD>#pHm$-Tz(Fzvq3qVNAN5Mb2hTW!bPZx$MOaH~JVQ+Qd*;!#unF>kqmh z`-n>yLptWr9zjl<4h2I8#2=NyHaBD;{71Pg^8l!+BX$M=6XX~g z9pQlkF-X1DnLS*P9sa{vKzHQ00tE6SL3ywbhR+@<9x(wpY3gTiaor>qas0XucN}n-b9G{)Rl!U;{2lB>|)&rOw{`u{w zZxaX;u#iay8}{*a7#$QQGB#hW|A6*Ifg2m`TVeL&OqkcSPt7GJVCPlzt^{>zJap=j zkDq6)Lkf29B|_v_Cwm);A^xXBrspR;$O}hT5n>x&AYm(~9TbhKj=LpdSWH3FlRn z_>!Nz1&09Eq>Z%DsrLk1v&D3 zKbzd}=lcdY$!ynI0s5{wcxXHn14cJD{_^TR&H<1B96RWpbk78#Kbj*}RD2II_o20x zA$ZRA`;?GAMkK(s+;h#Po#y^)mB=|n{wp)~OY_(R`fFYPw-S8-B&ZM$MB^dE*TLx8 z?E&c$1MmPId#HuEV)`cN!PaRKG}~UgRtdgY@S~NW~L(kb38*H*uAQKJ{#|!isn-_mn;<4^85~o$P^5(!JDP zI)->T#8uJyi~&xdf(Or-uw=#nSED_X`ww+688+L#EAR6^Uq;h`|1(;^6)7y*<`BPE zAVG$0T6eb@yQH2h>>ix<&0b8vCNM4Ct8?alA}sIMJRDCxjQ%g~?FDS#MsPHXaS>{3g(^!xv#=2H1_45 zhGD}BUyQfSz_TzU);?PRG#-L%Y@GXjm;S1%`K-t}5R}pa&Vp(`+~Eko`lx5H0M3H$ zU?JTJJ;Cbvl>K6|UHCEuskua5{e2t?t+FYEL54lG1vCqZ)sof$Ye0r0@?lXz_goa! zd|;7a7Q+GnG&|41_Ss(r7;sjFUx9<-3|2j{>gTDfm zI2Vs?2r7QbU}*6_R?HrR?N`a_TiD@jW9gcauOAul}fcIK|Eg0@zV=DVM0dK&;vuJHXw+-wqpvQPo2Krvl9uu=0V zkVCXu?SxHG7%=vKhA|6S17`}LB%u7ouX8=kCs6;VA9VKMxNinGU8ZMQrq!VXPJZ1{ zlQ+u&^{zV+iTv2G&bK$emh2l7?_HHx zy$D=FROLQd4>{%_QJY?mVT|V4Pbl1=XJqVpyit<-)0)~exy{(oeo2k+Yz{^0LlqAFb(y0jQ6q{}xqI~g8+lRKqLT$~!dC+s_eI+Praox!y8LJF~KsARcGZ;V;a-P3p z7*i$sAt6y=UNfwn=b++FBuKp6OVBPf6*cv7^ikZK3fhq=y|Bs2cUAc8nrH zl6iAce@dytf93~vj*;_7NDPD2As+9-^ko;l`+(<&_t3@CH2ypYB)TRa^~DDR8lAC! z3uorB19lai>I7ZO@!5+`uN6WnN;?5%H{jk%Dqj41=y$&TPQ7X0sbokc?IV$M!J%|_ z6xS^DcPw;w;s%Js zCd}q5_2kt3TEJH|$l?DfF6&MawQLD_JYwQ{iOc!!_@f?a=)OjBP#mY$hCcV>aKRQKT1`wDnyaezIqC1J6H3e$+$p-!1R7{=2DsGfxxuZl9=wnd=!66NTr| zx_euxV*jnYaN3S~xHFgPXasS(^XB3USUX(Co743&xsehEQ8=MV@}kASa`^{T8XziR z{`9OjR3#t#uwmxN#!H?lP>`EX?Nr{k1>*DwEpnpZyUvjH&2rKo3>M9l?aclc^7%@x z(9Hd%VJ1|^Pv8b{2mc;A82=2z-dyL5%no#f=P%@=$YkV~@*UL8R8eS_r7r|Xv$?5O zoHwh4NC0*6An;ugY3zkEWlwZ_AO zcy?!WU)xAR04g9rJ_NE1P3gN9`^I$BmnNG$doBhglYmxh2+4u#(tL~e^d9TkJh(kP z-n*#G9`y$fACgM4;QANLs$sn_QawWVvL;=r9y8VAq04?9CI9e~Aa*D>(108$wTQ%% z#3Gashc9)*$peLq3OX5deC^H1y6>zr47C*jzjyXNiHhCFo&l7ZXDHv?b4@j3k5AHg zc!W5C)v#YYv0qNU?&&G9T`1htDVA~xL&=gxSJT&TM{Y4Y<-6LlGNzF1CAn zjOyr}8#I169S3BTMcI4scqPaJa*wYY9!Gyo5w&qz&ke%euBeaEuCU>e}=Djpq+iMfB*LjWoUhWQm0r*U$3MQ=6 zrpTkrxKO(xaw>qHgl24;;)1{Cv#gy8Lg6L(#Z(w>KKnXi?Fvp_a`cWL-P92s!*V); z5j=n1|HYUde=l?{zrQ?TLCznTye5y(aCtXN_Z+#&(lc&jz|Ju08mmNt9*xvoWi~W$J$s<(QrTAV#UIPHwcL%+4 zte5yJ$G(cLUg|KylmNq&(5}0fhb9p}hdRO9S_q43HLqgxAhZ zUmPftvY~qRd|pdN({cFX_INy3aJwI*zYHk5BjCHRte?I|LYQKB;yC%yELvx6;(9VO zc4}DM#>UFW_k&f3s!jVm;lE?EvvzJiwQ3jZS1BrgEEH5)&Xz|cRQ@K$5HZG6md?j{ z^hS65w6(^r)Jw_8V6dO4ojZZOEVjBa@P2mb;!*cLZ{^6nenFyjBRXiPOYPI{#CEpx z6?b#(+*K*xrq-R^O;jYA-G<9a*M&z=d1Pbt34J{`>}&G}V`AM#+R5h$nN6M>J1}7- zbvO-A&n33F)C}9^CS7OZ$@=TNQD=286nh@65wN$qDqK)(RrV8om41CKq1jnddy#FQ z<_7JxmO9+zT$-A=cxdhr3Z0iR+Wpn0Dk^n21bsys*Cx$VIfe@_w>)dwz(U|DPuV;x z!SJo%rN8s^&`efigcrM=x+k#?*z%~CuUJcPC<$r*XDyucUjI&p9o2y;bX(V8iPQ3} zW}Ild#>IRoGV>qP#>JyWk62mxzuo>Lp5b86#&Ke@o-cXmaNLn)0XujZ>!YN zo@y%@KF3U3|0w)B?Dw`7iG-qwlh!p95plz|el?wj$W`+t*T}B+^^LdogvM#!8y-SE z-DcIbFK?Dc|F}1<6tjO(Y?pLRX*cTBB1$rlx4npO{}F#@+v&;coUiFg#-?V}u*BZF zim{uqV&^$pe&Ee#Ct>|V;vqt?=`gb{kA?1jHNpeg|Nc4GLrtGBi$>75r6?iP(-YNG z?J+2}(Ql-qr+}UwJ5g<>Xxq4MuYNq8wtt+>aL!PstuNsne!{_sJoahvzvTOf@hk7ac#y4o)Sq+Xq@@z*-*t)Zhw3!OPTqtfg2m}HU&?GoiIbCDHQ*LUZZ%ayf;0+E!8Ac|0M|zPspg zn;Jln%Y{zHsMJPon@c)gtjs0XIHyw?&R%#TG4M8uc%**6J$zU*oJ(1KGlbK-`lH;B zIcqZZY16PCbKbG~--=YXt2P$zTLnxK55{W-`G}IaFB_=r^%&(IfPFZvWNU| zyS2#cucuZ<%KhAbDu|9A`UST|9LO*)Yrj>9sAQ9$8r_kPO4(?*5t~B#qI@`g`!PnB zD?aiMF<&r9CX2U%=+3{5q%^{E91znH!?9nTfzyv+IfKEbHKV0&`Jh6rt&l_0VDWj_ zt5cN>XMdQ`{%M1t?Cs*Elt{dy@poG=;w?nt=CQP!@$5wb^UIXozYRhbG##n;Q2CY3 z^>r<3AkAq1$Ohy<(!{8>t)@|D%{a1@^KJBzLA>vyNF9nw4n5mM{#qNd2MO&C_8ci;C@;hWkeK z&PG>5IRP5E%Cggsn|vT4ZpaL7dPc{@Jj0WWvcA2W+VQxhm??qK`(l+80h)ucG4uD` z3e4hfS$kMg4EXimgat?<`AJ5)H*qrbl5@O2oDm|`cs;SHJXl{-r@OYqV4>Gmj=TLn z3JGD}NPBf-S!?>U+MSx3+T9-^XF*jpF7wqY@lObKoZQIs+cJ6n_8BtrR7JWq=z;~t zl0(MPu_Pp%sjXT-D}vE|=P!BjhJD1$D~Q9OfsGMGcO$Wy5DGJ24$*r-8Onn8&Spl9 zKdcG5g2H&(EPt>oaX9Yt-)FI(+Fc~7CIq1+h@y80ORcRh)2iLMCc0LH_)}3h8(Eln z5@_nJQvtq8!GSe(n_H^u6gB8=ZLCMG&7HpIa5|U)n{BznR-eqzVFw<<6jj;P8Ww-k z|4h}R!}`lN=#8JCvJeV87JBYu(e9AnbR%!B)tk}#rOtG9ebaj}nzcr! z8&jiO9G}2`FSs1@`Hcc~%*fqH{fG*)s>P%+e+JhWqGPux^;f_*7V=b4}hM z0W})iIq|YqceIB|tG2Nm5?}1gS*+74245Z=@_TMz|Gt~rC+6yOo6nQ3_oKiFMGP1ifN=JUz zmAAnoH{*I1o?27826mtvAVo7`7bGXY$r;UV5%|2BBZ}b|>ZXa6fwbMH{gz2Mt8MXO z&D@>ixIMf74|-k5G?8R@2RT=-HZ7vn$>=CBzj1P8gPIICclXj%^=nT%=vTWB8LOeb ztt=t)iRicQ!BTx?3%?5FIZJ$-=P{}3c~wuqT=*vfr8$4H(B)7wa%3kn^w5I-mNF@m zv3|*TXCD!xUCd6DO@&`;Z|hm?>>#wmofHtWr-~4n-tiMLjJbfWpJ+`jn*um52=~oM zXgM%@E*p_qELqd$+mJNdE;dVX_YqlgpfTOi0O5g)d&(y6?fo1Uz1E}p%Jq&Ez`8*^ z+^(tF!95ONR3+OnR^;u>7ErvA%1uA`bM^tjP9I6VvUqa<7aH$35}d7an%pFu+&A0L zUdkED>T4M>tLH0!4b8&U=?C@o`y{)l!_l;CT(!%BiR9?4MBn%q{SYr>;A$j+ z|A0mCn>dhFybQ|(#|9oPZv+J`EG13kG_9N6w4q=qFQX+)M5x`fyr!YHR+^kqOVK8O zP!T6m->zAGfyAiFQejt$4p=F_V?CyMn6zI_Msk=RaYlY5rua{!bl`2*)Xn<#J415& z&kq^3(SP3Q2n{MK4zJE8M;;}LeDjKQ(x$$w5yzA7Got>0H3~a^1Q!~nI?vW~#fKT{ zZ0}W-1=?uCDl?4Kh<<*T^Eg`GBBb=!R0Q)wzb1C>_q;%U3uX7*@0#WJdG~pq`7}GF z&S~{;szP-z2*l{pFzeHQINUbc=dT>pj?U-%Qoj#qU0!8Uf3$>S#uN5ThlVo+YYAD5 zAKSqPR3Ic9B+XKob_^yWDVb0bzcbKXRJpdvJE&(qyJzUP{%)6?T*5?f{lVSFS|Grx z1NpN758nvhd%xB!g}K|M56FaLRM`Q@_c;ox0oHphv^>HU39if(i|tc_Xo8dlrHlFM zKadEZ*2G-|zgY{cHdc@V0+*8359nFqJe8aZhSstPwT%<&;+Qu@D|lKAV!j8KTJ>l7 zwc)X9xn6%V=|R_xLm?oJxcwxUC5Hc#3WY{@wUo|AYEQI2oH=)f=5Ibi4mv!Ecqfk2 zQkCHs>G$I0`%4&=xQUYSY`C)ujqpYi!urP^S7)Zm%$S%*=P!a(_2R5KKZ!OcTv1|7 z*_cb$zJNCV(j5-GRnidV+-M@=wrzl&3%cz1Wh28x{4UWbzfx*~ z-4U@?3_L0AX;Umwq$0kxk|9g1`l}i9C-sChKv`pDZuS^SQQ>T67I19>N1Y@->~BKx zi?JEAOFpZqQc9m;;UDZ}ewSN?B{fx5m->i7ZVqn7<^J3<1kXRZzaO>BD*j&q$`>{0 z=T;vEB=RfQ)|kLd%z$)bnmq$Bprx&yQl(g8TN1OM+zFsVtP)rbYFVtg%3TSVg(%iY~`WA$KK)H_kkLb1~*nPb-mGJ12{}0E|~U)kK1v zXkT$^iJ)#vnFPJaOR;*9I~TAjm4KO8x)j4HcjY!&F#Xg^ccb39jtgEc**)cH!OTMq ztQ*1fw#$4Xd<(}FD6k8%BxTj~78YXOSS&;j&4-N8(RA9a4LUVyq7WCcc}Fzudc2{# zqi=hg_Rz6bUbGl5S))dJszKwX&2l#8E2P5R)ns)pXJUTvE+var%1kJ8Y`R-L@VKHP zKGluUEat#r`WN(S4w%Vuy>ouhpcRI5wbkgU4U8~awFtxB!UP~S%rjQ$LMhG_ATkOw zP%9>^d1@Z<0Ct({!k0nKa)+T51nZonXl}c|3cjmLOB*{B(Z+t;fW9#ujLy{Hv1JJa)7T$#YK7EqQI8_M`@|GehdpI4VW7h1yfjP=v!ZM;Y2k zXDuT|{>xjXQKg~hrj2>qlZ()TgCa*Qw0YVyXaG`2K;1Ca#yM-bTQIs-d4;Ivwdco? z12sg_uIENwHVF@_Y7k=V+77w|Ld5Q%)Mz2vK<6w2)rg>f?SzP#p0(!>txB)+lj@LF zezdX9X>)_`(5j&C>ZXe3wc}`^DwyL-7o%;>Sh_vLgRSkk*L-8>c90$h?^5%PiDSJP zkO30#e|k3DH4~b9&N9>x3seC&EHwMP)vJM0rM*!C9@f1u%{Z@34Y^SQWRXa^21bBp zoR8V44m`S5ePiHeJ%zC@5rXa_6d74rjDgz=&_YD<)Ga^SNaw8|9Y(R0Ki3RacAhiz$ zTQtVKVA&|J;NmzeH*?B|F>yP*7>aTBV#d(zH3Oj-XTNMr-5!0pqH0VW-D%^3phCD3 z(+v>KZcodEV%&40O?4q=s?^3ESIutE;e@zi4%97E+FG&R*I)ySGx1-yYGZ8OUU~~< z=;ZMw3?UkNL-b`^is-i95UO4CKS&Y5gK|ItVOt3m-!C1Pz0t{-K6((*%w4q z9F(y?J6(b~_czxlu!bt8B{Bhur|r*ts2hwJcSDN=egMk4Gbq|h?bto)oq`rio}Dl;Hf{&!LufIw zP8Xxi#hCk|<5mL!j8z5K7JBI?B-%!CrvnTA7Ub+mpF4;9yIFljRxnzpO0~ zo}cbXFOhSTBHV}qTcH9733i1!34!rLh-JAD5^T|N6C&IYVi_%pVyrRXa)3X5ztgga_9^*PfL2fPBi$qX# zW)<1t{OK#?sx14G^~O+H9x4X_%8t&OUnpQR^xXNmsjJ@RRW%U`6VTJ2FP6*gR?jQm ztja0La!w@Y*bF)H$%be+J@V%u7CUKWj@lf??5)>jM{K8dd`BI(%xS^k(9JG)iSl^Q zuM^JIzMMU3v8bcf0LW(jhKLa%>JA`%th75@kuwPhwCQW3-x7Ta@NTs_j}!_}P4-Ve z)@YwpYOTH;yxMtSsk~n4^ct1f$AX#wTM|cuV@^#PgITD2n(V7e_KcPty1*3Kn#Gol zgA|i`E78+hv~~odHa4gaQJWmLWMC5_8qVFqs|GuZVMcm}7PWv|$+>-4Z!0%@^F5iA zJ>cGP{bUn|ONS}EPL6(?zx=ppixf&L*LP>k-dyphkgiVJ?y*eGG(T#isZ5}`fKxNd z%*W=E>1LwJxkx~Emda|~D6+q~gm^s4T)xyZoc}po0n{?ZKJ)mZY^gU|AZQLDx?8xE zE(Ez(LI4GnR#0gBkbF4k5sDBW9*EFdj4ML29*EE`*3Oe)15G)U4mNh1gVRyM02WcZnfdwY$Ki;LMi^c}oP4PioyUZD7Fnhzs$>cDNF8(hUoYP_Sm$INe|lbF1S$}XMeej_ z(_I6C4rYWLhTF#jv?OOrE75Me9EN+w16g7QN|snf7FiLr#0DS>^X^$>AzUBmB>*YC zq|Ug@Qho~?qu0d&0pCq|>4DgkLCXR1K*UuM!9p{AYsW%U63W-s)L|HufCUk#B%+Fg z3dnDX0v^9;c`?kSLyB}x9i%{wU@T!^HG>YgV@n2l4+E<`)aQJVk$`zoUEkfy1F^jhFd$LXE`>9m#%P}|MbNaK$)gj$0&=v{>l7>*81aBksU*dy+u zf`@m_F&9`(g}ZF<0$Qm-A#JdOPfSSJlW|{4tlSI*7!_dhc7;%saxbI|glgL`eKJL< z%|B?F)J<`>LF({)<|aC=L~>+!yqa`LgK$ zxYR*?YlKjgh#MtJ$w~%&ViY-UNnt4aXZKX!F`%Pk6p)S3W?rWu0+E$#YkR7;L82~N z+%lS2w+!6YEd!S>|80c}T%49RLX`!rim)ds&EQKFwUy8aN=wUENtUAKV;hAsbB4_tLE~R5p%4X+^I;u|JOJ+0z$)bitWR9S` zltvi=&zQ|XnGs53>pJJ#<+<5uQ*Y%S{4N(pA~RB-5eqTfYV}L0UZ!qUyYfyTybeme znF3=wR>rG~TZO`XLQ?AWYma!20v4R(L~DM_w$|l=s4jY3jGl@C5@9reiZ$QLi_R`%Q%Sx;zLDhxlE@F@l$P zEFTPVccbXtFz;c4@z2a$7P8qz9GW;kLqcFFgd#>!%;LaAO)*c3^Fkr#)p_#1FTaCR z>TFfJo_E$9hxaCLX5swe;{AmJUiB5)y)c7})!|JZ2#}*`c_oS%<$Kke3UOmjZit7H z-%pX^qTG2&EiqCOsap%UC8cQHT9jK@FZ%^08&tD1xHV@} z&CcVNG!gtLs!O;fR>=?CLzu5Hz!?GI^7+{X7YuY=V_xt>GDem0Ly!rdh?@N1iDVXE z{2SnfTcUc%BLMJ&CxT-5BghWS9fMJR)GyJ&`Xx$OzXB~3Wq`T*C3;YI^(#>1mBJnz zB^kU$%Dg}7Rq`~1GeOs77Dd4@SE3(MP+rR7?IusRjFidD`MHsHIWL6PU8lhSO20w6B>TpN+a2{HU(=j711(wV@%*=R2GeSa-95xp1>O@-M>35v- z)B*;CCO(-?J1ev)qUO>c&!<0LNPm1W{qd#r$LMRIoB@r3bV*EVTW&D&1kFth>YQhW zMdk_+@hJe{Rd8?fAw!0C`voF0oc=K>!Y3lMz#}?Ko9Dc1%jZ0FF9dtjxrFh`A;{8G zgKS>S1XmCq6DK)<_tpZ=c{)6;UZ4b_s$_8iDM2zZA!3{_7a^8Ddls>~P6SoV?XH4~ zsW6iPrYQAk90Py3)Wj4E24pFZ0c6VKXGitW#ws2NMQLK<#>fG|(7GU_Me{VEi`Eag zDl=OhEl6oZ!t}r$rhE$NnX@v&`Y-uAC(7s%&pA(BAl*TAP*<&StAkYdNE(Ag2kDNT zhAt?n0c>7?t(i!VVk@mR^oaWuSbLCs0EE^9(!-toA#T!4p;wOJ>p9QFZ_q5OjSsr` zO`$XRpp>~{+9dRT?t+s*?<&|^7)=p2%L&JyK7 zWyUu^V$_4*Fme3G_%W7@!2EiV5%mz!xWYLP0alErzcrOI=}K%lCXVNYph~g8k1IDH zIDQE#Gfoe1qAftci3lMkmepg}{}2)IvfSo3$Y`{1om>ZJ1Dzs`*RJodAiT;SCVO zX0Fgx0qn5Dki%7>jDiiRQC+cr3q3;HE@6j+Eoz_8CxR~u&SrEsXv7yE6mDH`Gcy9X z4tv=pk#6tc2(A8gp}31-H8lAM5{efVhFTcZ4ocosD0IEd^8~*XKl(*9ig{xcwspKI z`B*d@Pd?^u328H4XqK%Duz+n(+tOS^to0Zn8X`s3)ot3D# zNVF_jqau%!J}L4T#uk*GM=0^kEeXtZ1SOH|K}1Sor71EXU|1v323lC(MKjGKN1dB?m`2KdZmRWYuqpw5x9kw5x9& z^PgYTzXkFr%-FRheGd72mHgKy{lrM5x80M6O5mk)o?h^mRt3W12(PjfOrhXQ!g{Hw z1s7CV(0N~wyqm?&Qqg&8aR``{sLA`|8l44wXF*V;?7;ljhy!*DNoV1ul6cVZ4H{V3 zCw^!sg+*JefQwN{N)Q3=cM1P+O&D4Nm8<77r7j{$uOcM{}ilTj%A z1F7I+2^c5&5z2?Ha6A(c^Gddvk;lnKGx9hILF91~z{uld4kC}gNOq>jD36OjjvJWx z70jguepj!Twg!?fk;nQRqF7&NJ#c7Pl(8vv#^af$2G9pJo9j!=Bf!p<2?!5rqtJT_ zm;+a7lF(TRb--S~uZON?174&9@-_Mil7)w#Hm#K<;x2+$|GCVGTT7F+zV?H`4@DG8(*_Ib=UsBewP z=3T-WZT5uo@fqE12%FNRx>5%9P-LX7HNumIVJqg6J!Hi!ZTgllHF3Ho4Gq_5g|S%V zts)}mYf-x}1zR^hL(x+HeAmC-mKU!}2O%sUgDe&VOC?ihCIyRBLSw_5tz?=^^&FSf z(3a8%6es$vsyC(1SWp(K56)6m-;ybr$t3e@sjIxwBS;C$?&IQR{Bu<(O|1`Vvgw2x ztfHpoQli-Bgo>&~CX<$mjQC9)W;;cuW8=s5zJ@0u6suMwOM}XOP+1t;GM1+cIPz{9 z+nb1Jc9qfJ3*X6RlL*GAq`&|R!)AxOZ`w2O`2PU_0RR7Z0c4W7O9Md^#>d2H)STWD zY%By3qk@vcYLcDA=y!B-Dz0U1ivG{{WKpq}NkP#sGlH$M?_K1I+;Z~6MI|3#oIEr;Mt>W0Ujr~3?m%PXe%r!_lX-%&X z73ZWq+qYxeK6D0V2L6Fb9cvXI3lrghAN_#O9soN*Y!$0wQm3+BzOZ{4K!cEGn6%Hr z($q-m2}zFUBUv{p`Yf_T6x2!9wn(fmGUVb*9{>>)RP8gEPa{(;s2?)5gh~=v6$Y=a zy<9jE`@xDJwkIE*%u)fo9*6H6DuCRLjS^3(3NZxso_qUtaBLrH$OpF}W_jhIk+05> JKL7v#|NlUtK#BkW diff --git a/src/altera/quartus/max/db/sp2_max.cmp.tdb b/src/altera/quartus/max/db/sp2_max.cmp.tdb deleted file mode 100644 index e8eb0acabf6ee760ed43e69ee31e49a2eced5f02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15893 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 Z!%O=z8K!qo57~*9czT9?@_%jae*ixM>>L09 diff --git a/src/altera/quartus/max/db/sp2_max.cmp0.ddb b/src/altera/quartus/max/db/sp2_max.cmp0.ddb deleted file mode 100644 index 51a46a5518ace66f55185e862fa968b49a11a799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6713 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 rl4o+T-)FK%(Yv4vy|3bD`wlK EXP_X.DATAIN -TG42_IN => EXP_Y.DATAIN -TG42_IN => HDD_CLK.CLK -TG42_IN => $00050.CLK -TG42_IN => $00051.CLK -TG42_IN => $00052.CLK -TG42_IN => $00053.CLK -TG42_OUT <= $00003.DB_MAX_OUTPUT_PORT_TYPE -TG42_BUF <= $00004.DB_MAX_OUTPUT_PORT_TYPE -CLKZZ <= $00008 -CLK14 <= $00009.DB_MAX_OUTPUT_PORT_TYPE -AUD <= CT[3].DB_MAX_OUTPUT_PORT_TYPE -BEEP <= -CMOS_DRD <= $00046.DB_MAX_OUTPUT_PORT_TYPE -CMOS_DWR <= $00044.DB_MAX_OUTPUT_PORT_TYPE -WR_PDOS <= $00041.DB_MAX_OUTPUT_PORT_TYPE -CLK_WG <= STWG[2].DB_MAX_OUTPUT_PORT_TYPE -FDAT <= $00021.DB_MAX_OUTPUT_PORT_TYPE -QDAT <= WGR[4].DB_MAX_OUTPUT_PORT_TYPE -/WG_WR <= $00042.DB_MAX_OUTPUT_PORT_TYPE -/WG_RD <= $00043.DB_MAX_OUTPUT_PORT_TYPE -DENS_X <= -WDAT <= REG_P[2].DB_MAX_OUTPUT_PORT_TYPE -XA[0] => ~NO_FANOUT~ -XA[1] => ~NO_FANOUT~ -XA[2] => ~NO_FANOUT~ -XACS => CNF_OFF.ACLR -SINC_1 <= $00005 -SINC_2 <= $00006 -FDD_C[2] => $00041.PRESET -FDD_C[2] => $00042.PRESET -FDD_C[2] => $00043.PRESET -FDD_C[2] => $00044.PRESET -FDD_C[2] => $00045.PRESET -FDD_C[2] => $00046.PRESET -HD_DIR <= $00049.DB_MAX_OUTPUT_PORT_TYPE -/CONF_X <= $00024 -10K_CLK <= HDD_CLK.DB_MAX_OUTPUT_PORT_TYPE -10K_D0 <= FDD_1440.DB_MAX_OUTPUT_PORT_TYPE -D0 => FDD_1440.DATAIN -VGA_IN => ~NO_FANOUT~ -SINC_V <= SINC_VT.DB_MAX_OUTPUT_PORT_TYPE -SINC_H <= SINC_HT.DB_MAX_OUTPUT_PORT_TYPE -SINC_IN => ~NO_FANOUT~ -XHD_RES <= $00047.DB_MAX_OUTPUT_PORT_TYPE -XHD_WR <= $00048.DB_MAX_OUTPUT_PORT_TYPE -XHD_RD <= $00049.DB_MAX_OUTPUT_PORT_TYPE -XHD1_CS[1] <= $00050.DB_MAX_OUTPUT_PORT_TYPE -XHD1_CS[2] <= $00051.DB_MAX_OUTPUT_PORT_TYPE -XHD2_CS[1] <= $00052.DB_MAX_OUTPUT_PORT_TYPE -XHD2_CS[2] <= $00053.DB_MAX_OUTPUT_PORT_TYPE -XHR_RDY => ~NO_FANOUT~ -EPM_RES => $00047.ACLR -PW_GOOD => $00047.DATAIN -UNUSED65 => ~NO_FANOUT~ -UNUSED33 => ~NO_FANOUT~ -UNUSED1 => ~NO_FANOUT~ -UNUSED2 => ~NO_FANOUT~ -UNUSED5 => ~NO_FANOUT~ -UNUSED7 => ~NO_FANOUT~ -UNUSED22 => ~NO_FANOUT~ -UNUSED24 => ~NO_FANOUT~ -UNUSED27 => ~NO_FANOUT~ -UNUSED28 => ~NO_FANOUT~ -UNUSED49 => ~NO_FANOUT~ -UNUSED50 => ~NO_FANOUT~ -UNUSED53 => ~NO_FANOUT~ -UNUSED55 => ~NO_FANOUT~ -UNUSED63 => ~NO_FANOUT~ -UNUSED70 => ~NO_FANOUT~ -UNUSED72 => ~NO_FANOUT~ -UNUSED77 => ~NO_FANOUT~ -UNUSED78 => ~NO_FANOUT~ - - diff --git a/src/altera/quartus/max/db/sp2_max.hif b/src/altera/quartus/max/db/sp2_max.hif deleted file mode 100644 index 0c955da..0000000 --- a/src/altera/quartus/max/db/sp2_max.hif +++ /dev/null @@ -1,1184 +0,0 @@ -Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition -32 -1921 -OFF -OFF -OFF -ON -ON -OFF -FV_OFF -Level2 -0 -0 -VRSM_ON -VHSM_ON -0 --- Start Library Paths -- --- End Library Paths -- --- Start VHDL Libraries -- --- End VHDL Libraries -- -# entity -sp2_max -# storage -db|sp2_max.(0).cnf -db|sp2_max.(0).cnf -# case_insensitive -# source_file -sp2_max.tdf -eea9fe738f5a8cf67a20667cd5c0c72e -7 -# user_parameter { -G_MODE -1 -PARAMETER_UNKNOWN -DEF -NUM -NO -PARAMETER_UNKNOWN -DEF -NUMBER1 -00100000X -PARAMETER_UNSIGNED_BIN -DEF -NUMBER2 -00110111X -PARAMETER_UNSIGNED_BIN -DEF -NUMBER3 -01001101X -PARAMETER_UNSIGNED_BIN -DEF -NUMBER4 -01010010X -PARAMETER_UNSIGNED_BIN -DEF -NUMBER5 -00100000X -PARAMETER_UNSIGNED_BIN -DEF -NUMBER6 -00100000X -PARAMETER_UNSIGNED_BIN -DEF -NUMBER7 -00100000X -PARAMETER_UNSIGNED_BIN -DEF -} -# used_port { -0 --1 -0 -} -# hierarchies { -| -} -# macro_sequence - -# end -# entity -lpm_counter -# storage -db|sp2_max.(1).cnf -db|sp2_max.(1).cnf -# case_insensitive -# source_file -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|lpm_counter.tdf -9583d6cd53fa119b14456768b85150d1 -7 -# user_parameter { -AUTO_CARRY_CHAINS -ON -AUTO_CARRY -USR -IGNORE_CARRY_BUFFERS -OFF -IGNORE_CARRY -USR -AUTO_CASCADE_CHAINS -ON -AUTO_CASCADE -USR -IGNORE_CASCADE_BUFFERS -OFF -IGNORE_CASCADE -USR -LPM_WIDTH -4 -PARAMETER_UNKNOWN -USR -LPM_DIRECTION -UP -PARAMETER_UNKNOWN -USR -LPM_MODULUS -0 -PARAMETER_UNKNOWN -DEF -LPM_AVALUE -UNUSED -PARAMETER_UNKNOWN -DEF -LPM_SVALUE -UNUSED -PARAMETER_UNKNOWN -DEF -LPM_PORT_UPDOWN -PORT_CONNECTIVITY -PARAMETER_UNKNOWN -DEF -DEVICE_FAMILY -MAX7000S -PARAMETER_UNKNOWN -USR -CARRY_CHAIN -MANUAL -PARAMETER_UNKNOWN -USR -CARRY_CHAIN_LENGTH -48 -CARRY_CHAIN_LENGTH -USR -NOT_GATE_PUSH_BACK -ON -NOT_GATE_PUSH_BACK -USR -CARRY_CNT_EN -SMART -PARAMETER_UNKNOWN -DEF -LABWIDE_SCLR -ON -PARAMETER_UNKNOWN -DEF -USE_NEW_VERSION -TRUE -PARAMETER_UNKNOWN -DEF -CBXI_PARAMETER -NOTHING -PARAMETER_UNKNOWN -DEF -} -# used_port { -q3 --1 -3 -q0 --1 -3 -clock --1 -3 -} -# include_file { -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|lpm_counter.inc -7f888b135ddf66f0653c44cb18ac5 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|lpm_add_sub.inc -7d9a33dd39f13aa690c3d0edd88351 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|alt_synch_counter.inc -09966d10c3e95c888bf8e443df34d8 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|alt_synch_counter_f.inc -93a5aae1d8bd19c9e8e8eef93ab2177d -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|alt_counter_f10ke.inc -536f8da8218b4a93689416f9baea1880 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|cmpconst.inc -e61874547688138e6fc0b49ff8760 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|lpm_constant.inc -dcde44eee59335c1e2fe75d574f9646 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|dffeea.inc -55d29d20f7e852c37746bec4e2495ec -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|alt_counter_stratix.inc -2251b94d26afaa53635df1aff6b6e7be -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|lpm_compare.inc -aec4ea1b78f4cda1c3effe18f1abbf63 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|aglobal90.inc -99832fdf63412df51d7531202d74e75 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|lpm_decode.inc -bd0e2f5e01c1bd360461dceb53d48 -} -# macro_sequence - -# end -# entity -lpm_counter -# storage -db|sp2_max.(2).cnf -db|sp2_max.(2).cnf -# case_insensitive -# source_file -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|lpm_counter.tdf -9583d6cd53fa119b14456768b85150d1 -7 -# user_parameter { -AUTO_CARRY_CHAINS -ON -AUTO_CARRY -USR -IGNORE_CARRY_BUFFERS -OFF -IGNORE_CARRY -USR -AUTO_CASCADE_CHAINS -ON -AUTO_CASCADE -USR -IGNORE_CASCADE_BUFFERS -OFF -IGNORE_CASCADE -USR -LPM_WIDTH -9 -PARAMETER_UNKNOWN -USR -LPM_DIRECTION -UP -PARAMETER_UNKNOWN -USR -LPM_MODULUS -0 -PARAMETER_UNKNOWN -DEF -LPM_AVALUE -UNUSED -PARAMETER_UNKNOWN -DEF -LPM_SVALUE -UNUSED -PARAMETER_UNKNOWN -DEF -LPM_PORT_UPDOWN -PORT_CONNECTIVITY -PARAMETER_UNKNOWN -DEF -DEVICE_FAMILY -MAX7000S -PARAMETER_UNKNOWN -USR -CARRY_CHAIN -MANUAL -PARAMETER_UNKNOWN -USR -CARRY_CHAIN_LENGTH -48 -CARRY_CHAIN_LENGTH -USR -NOT_GATE_PUSH_BACK -ON -NOT_GATE_PUSH_BACK -USR -CARRY_CNT_EN -SMART -PARAMETER_UNKNOWN -DEF -LABWIDE_SCLR -ON -PARAMETER_UNKNOWN -DEF -USE_NEW_VERSION -TRUE -PARAMETER_UNKNOWN -DEF -CBXI_PARAMETER -NOTHING -PARAMETER_UNKNOWN -DEF -} -# used_port { -sclr --1 -3 -q8 --1 -3 -q7 --1 -3 -q6 --1 -3 -q5 --1 -3 -q4 --1 -3 -q3 --1 -3 -q2 --1 -3 -q1 --1 -3 -q0 --1 -3 -clock --1 -3 -} -# include_file { -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|lpm_counter.inc -7f888b135ddf66f0653c44cb18ac5 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|lpm_add_sub.inc -7d9a33dd39f13aa690c3d0edd88351 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|alt_synch_counter.inc -09966d10c3e95c888bf8e443df34d8 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|alt_synch_counter_f.inc -93a5aae1d8bd19c9e8e8eef93ab2177d -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|alt_counter_f10ke.inc -536f8da8218b4a93689416f9baea1880 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|cmpconst.inc -e61874547688138e6fc0b49ff8760 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|lpm_constant.inc -dcde44eee59335c1e2fe75d574f9646 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|dffeea.inc -55d29d20f7e852c37746bec4e2495ec -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|alt_counter_stratix.inc -2251b94d26afaa53635df1aff6b6e7be -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|lpm_compare.inc -aec4ea1b78f4cda1c3effe18f1abbf63 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|aglobal90.inc -99832fdf63412df51d7531202d74e75 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|lpm_decode.inc -bd0e2f5e01c1bd360461dceb53d48 -} -# macro_sequence - -# end -# entity -lpm_counter -# storage -db|sp2_max.(3).cnf -db|sp2_max.(3).cnf -# case_insensitive -# source_file -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|lpm_counter.tdf -9583d6cd53fa119b14456768b85150d1 -7 -# user_parameter { -AUTO_CARRY_CHAINS -ON -AUTO_CARRY -USR -IGNORE_CARRY_BUFFERS -OFF -IGNORE_CARRY -USR -AUTO_CASCADE_CHAINS -ON -AUTO_CASCADE -USR -IGNORE_CASCADE_BUFFERS -OFF -IGNORE_CASCADE -USR -LPM_WIDTH -6 -PARAMETER_UNKNOWN -USR -LPM_DIRECTION -UP -PARAMETER_UNKNOWN -USR -LPM_MODULUS -0 -PARAMETER_UNKNOWN -DEF -LPM_AVALUE -UNUSED -PARAMETER_UNKNOWN -DEF -LPM_SVALUE -UNUSED -PARAMETER_UNKNOWN -DEF -LPM_PORT_UPDOWN -PORT_CONNECTIVITY -PARAMETER_UNKNOWN -DEF -DEVICE_FAMILY -MAX7000S -PARAMETER_UNKNOWN -USR -CARRY_CHAIN -MANUAL -PARAMETER_UNKNOWN -USR -CARRY_CHAIN_LENGTH -48 -CARRY_CHAIN_LENGTH -USR -NOT_GATE_PUSH_BACK -ON -NOT_GATE_PUSH_BACK -USR -CARRY_CNT_EN -SMART -PARAMETER_UNKNOWN -DEF -LABWIDE_SCLR -ON -PARAMETER_UNKNOWN -DEF -USE_NEW_VERSION -TRUE -PARAMETER_UNKNOWN -DEF -CBXI_PARAMETER -NOTHING -PARAMETER_UNKNOWN -DEF -} -# used_port { -sclr --1 -3 -q5 --1 -3 -q4 --1 -3 -q3 --1 -3 -q2 --1 -3 -q1 --1 -3 -q0 --1 -3 -clock --1 -3 -} -# include_file { -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|lpm_counter.inc -7f888b135ddf66f0653c44cb18ac5 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|lpm_add_sub.inc -7d9a33dd39f13aa690c3d0edd88351 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|alt_synch_counter.inc -09966d10c3e95c888bf8e443df34d8 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|alt_synch_counter_f.inc -93a5aae1d8bd19c9e8e8eef93ab2177d -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|alt_counter_f10ke.inc -536f8da8218b4a93689416f9baea1880 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|cmpconst.inc -e61874547688138e6fc0b49ff8760 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|lpm_constant.inc -dcde44eee59335c1e2fe75d574f9646 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|dffeea.inc -55d29d20f7e852c37746bec4e2495ec -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|alt_counter_stratix.inc -2251b94d26afaa53635df1aff6b6e7be -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|lpm_compare.inc -aec4ea1b78f4cda1c3effe18f1abbf63 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|aglobal90.inc -99832fdf63412df51d7531202d74e75 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|lpm_decode.inc -bd0e2f5e01c1bd360461dceb53d48 -} -# macro_sequence - -# end -# entity -lpm_add_sub -# storage -db|sp2_max.(4).cnf -db|sp2_max.(4).cnf -# case_insensitive -# source_file -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|lpm_add_sub.tdf -2e51ebc96381892436afe139aaa6b25 -7 -# user_parameter { -LPM_WIDTH -5 -PARAMETER_UNKNOWN -USR -LPM_REPRESENTATION -UNSIGNED -PARAMETER_UNKNOWN -USR -LPM_DIRECTION -ADD -PARAMETER_UNKNOWN -USR -ONE_INPUT_IS_CONSTANT -YES -PARAMETER_UNKNOWN -USR -LPM_PIPELINE -0 -PARAMETER_UNKNOWN -DEF -MAXIMIZE_SPEED -5 -PARAMETER_UNKNOWN -DEF -REGISTERED_AT_END -0 -PARAMETER_UNKNOWN -DEF -OPTIMIZE_FOR_SPEED -9 -PARAMETER_UNKNOWN -USR -USE_CS_BUFFERS -1 -PARAMETER_UNKNOWN -DEF -CARRY_CHAIN -MANUAL -PARAMETER_UNKNOWN -USR -CARRY_CHAIN_LENGTH -48 -CARRY_CHAIN_LENGTH -USR -DEVICE_FAMILY -MAX7000S -PARAMETER_UNKNOWN -USR -USE_WYS -OFF -PARAMETER_UNKNOWN -DEF -STYLE -FAST -PARAMETER_UNKNOWN -USR -CBXI_PARAMETER -add_sub_uch -PARAMETER_UNKNOWN -USR -AUTO_CARRY_CHAINS -ON -AUTO_CARRY -USR -IGNORE_CARRY_BUFFERS -OFF -IGNORE_CARRY -USR -AUTO_CASCADE_CHAINS -ON -AUTO_CASCADE -USR -IGNORE_CASCADE_BUFFERS -OFF -IGNORE_CASCADE -USR -} -# used_port { -result4 --1 -3 -result3 --1 -3 -result2 --1 -3 -result1 --1 -3 -result0 --1 -3 -dataa4 --1 -3 -dataa3 --1 -3 -dataa2 --1 -3 -dataa1 --1 -3 -dataa0 --1 -3 -datab4 --1 -1 -datab3 --1 -1 -datab2 --1 -1 -datab1 --1 -1 -datab0 --1 -2 -} -# include_file { -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|alt_stratix_add_sub.inc -c08f604aefba5b4f1f554e565113c6 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|look_add.inc -ab9f577d30c5ef3166fab6c1c32c4a -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|alt_mercury_add_sub.inc -ae39f15ed67cc9a095d29f68f6ad0f8 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|bypassff.inc -8e8df160d449a63ec15dc86ecf2b373f -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|aglobal90.inc -99832fdf63412df51d7531202d74e75 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|altshift.inc -70fa13aee7d6d160ef20b2de32813a -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|addcore.inc -ff795e21e4847824c03218724f1a1252 -} -# macro_sequence - -# end -# entity -addcore -# storage -db|sp2_max.(5).cnf -db|sp2_max.(5).cnf -# case_insensitive -# source_file -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|addcore.tdf -1b2b6ae11c95f15ac3d40e6c6c4170 -7 -# user_parameter { -AUTO_CARRY_CHAINS -ON -AUTO_CARRY -USR -IGNORE_CARRY_BUFFERS -OFF -IGNORE_CARRY -USR -AUTO_CASCADE_CHAINS -ON -AUTO_CASCADE -USR -IGNORE_CASCADE_BUFFERS -OFF -IGNORE_CASCADE -USR -width -5 -PARAMETER_UNKNOWN -USR -REPRESENTATION -UNSIGNED -PARAMETER_UNKNOWN -USR -DIRECTION -ADD -PARAMETER_UNKNOWN -USR -USE_CS_BUFFERS -1 -PARAMETER_UNKNOWN -USR -CARRY_CHAIN -MANUAL -PARAMETER_UNKNOWN -USR -CARRY_CHAIN_LENGTH -48 -CARRY_CHAIN_LENGTH -USR -DEVICE_FAMILY -MAX7000S -PARAMETER_UNKNOWN -USR -} -# used_port { -result4 --1 -3 -result3 --1 -3 -result2 --1 -3 -result1 --1 -3 -result0 --1 -3 -datab4 --1 -3 -datab3 --1 -3 -datab2 --1 -3 -datab1 --1 -3 -datab0 --1 -3 -dataa4 --1 -3 -dataa3 --1 -3 -dataa2 --1 -3 -dataa1 --1 -3 -dataa0 --1 -3 -} -# include_file { -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|a_csnbuffer.inc -49de46f6a395e2e6edecabe6eac9d873 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|aglobal90.inc -99832fdf63412df51d7531202d74e75 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|addcore.inc -ff795e21e4847824c03218724f1a1252 -} -# macro_sequence - -# end -# entity -a_csnbuffer -# storage -db|sp2_max.(6).cnf -db|sp2_max.(6).cnf -# case_insensitive -# source_file -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|a_csnbuffer.tdf -0a953daa377c9212d3c374d37725bd -7 -# user_parameter { -WIDTH -5 -PARAMETER_UNKNOWN -USR -NEED_CARRY -0 -PARAMETER_UNKNOWN -DEF -USE_CS_BUFFERS -1 -PARAMETER_UNKNOWN -USR -} -# used_port { -sout0 --1 -3 -sin0 --1 -3 -} -# macro_sequence - -# end -# entity -a_csnbuffer -# storage -db|sp2_max.(7).cnf -db|sp2_max.(7).cnf -# case_insensitive -# source_file -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|a_csnbuffer.tdf -0a953daa377c9212d3c374d37725bd -7 -# user_parameter { -WIDTH -5 -PARAMETER_UNKNOWN -USR -NEED_CARRY -0 -PARAMETER_UNKNOWN -DEF -USE_CS_BUFFERS -1 -PARAMETER_UNKNOWN -USR -} -# used_port { -sout4 --1 -3 -sout3 --1 -3 -sout2 --1 -3 -sout1 --1 -3 -sout0 --1 -3 -sin4 --1 -3 -sin3 --1 -3 -sin2 --1 -3 -sin1 --1 -3 -sin0 --1 -3 -} -# macro_sequence - -# end -# entity -addcore -# storage -db|sp2_max.(8).cnf -db|sp2_max.(8).cnf -# case_insensitive -# source_file -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|addcore.tdf -1b2b6ae11c95f15ac3d40e6c6c4170 -7 -# user_parameter { -AUTO_CARRY_CHAINS -ON -AUTO_CARRY -USR -IGNORE_CARRY_BUFFERS -OFF -IGNORE_CARRY -USR -AUTO_CASCADE_CHAINS -ON -AUTO_CASCADE -USR -IGNORE_CASCADE_BUFFERS -OFF -IGNORE_CASCADE -USR -width -8 -PARAMETER_UNKNOWN -USR -REPRESENTATION -UNSIGNED -PARAMETER_UNKNOWN -USR -DIRECTION -ADD -PARAMETER_UNKNOWN -USR -USE_CS_BUFFERS -1 -PARAMETER_UNKNOWN -USR -CARRY_CHAIN -MANUAL -PARAMETER_UNKNOWN -USR -CARRY_CHAIN_LENGTH -48 -CARRY_CHAIN_LENGTH -USR -DEVICE_FAMILY -MAX7000S -PARAMETER_UNKNOWN -USR -} -# used_port { -unreg_result4 --1 -3 -unreg_result3 --1 -3 -unreg_result2 --1 -3 -unreg_result1 --1 -3 -unreg_result0 --1 -3 -result5 --1 -3 -result4 --1 -3 -result3 --1 -3 -result2 --1 -3 -result1 --1 -3 -result0 --1 -3 -datab4 --1 -3 -datab3 --1 -3 -datab2 --1 -3 -datab1 --1 -3 -datab0 --1 -3 -dataa4 --1 -3 -dataa3 --1 -3 -dataa2 --1 -3 -dataa1 --1 -3 -dataa0 --1 -3 -} -# include_file { -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|a_csnbuffer.inc -49de46f6a395e2e6edecabe6eac9d873 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|aglobal90.inc -99832fdf63412df51d7531202d74e75 -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|addcore.inc -ff795e21e4847824c03218724f1a1252 -} -# macro_sequence - -# end -# entity -a_csnbuffer -# storage -db|sp2_max.(9).cnf -db|sp2_max.(9).cnf -# case_insensitive -# source_file -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|a_csnbuffer.tdf -0a953daa377c9212d3c374d37725bd -7 -# user_parameter { -WIDTH -8 -PARAMETER_UNKNOWN -USR -NEED_CARRY -0 -PARAMETER_UNKNOWN -DEF -USE_CS_BUFFERS -1 -PARAMETER_UNKNOWN -USR -} -# used_port { -sout0 --1 -3 -sin0 --1 -3 -} -# macro_sequence - -# end -# entity -a_csnbuffer -# storage -db|sp2_max.(10).cnf -db|sp2_max.(10).cnf -# case_insensitive -# source_file -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|a_csnbuffer.tdf -0a953daa377c9212d3c374d37725bd -7 -# user_parameter { -WIDTH -8 -PARAMETER_UNKNOWN -USR -NEED_CARRY -0 -PARAMETER_UNKNOWN -DEF -USE_CS_BUFFERS -1 -PARAMETER_UNKNOWN -USR -} -# used_port { -sout7 --1 -3 -sout6 --1 -3 -sout5 --1 -3 -sout4 --1 -3 -sout3 --1 -3 -sout2 --1 -3 -sout1 --1 -3 -sout0 --1 -3 -sin7 --1 -3 -sin6 --1 -3 -sin5 --1 -3 -sin4 --1 -3 -sin3 --1 -3 -sin2 --1 -3 -sin1 --1 -3 -sin0 --1 -3 -} -# macro_sequence - -# end -# entity -altshift -# storage -db|sp2_max.(11).cnf -db|sp2_max.(11).cnf -# case_insensitive -# source_file -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|altshift.tdf -b979c99547bac7dc31574fe678a95a9 -7 -# user_parameter { -WIDTH -5 -PARAMETER_UNKNOWN -USR -DEPTH -0 -PARAMETER_UNKNOWN -USR -} -# used_port { -result4 --1 -3 -result3 --1 -3 -result2 --1 -3 -result1 --1 -3 -result0 --1 -3 -data4 --1 -3 -data3 --1 -3 -data2 --1 -3 -data1 --1 -3 -data0 --1 -3 -} -# macro_sequence - -# end -# entity -altshift -# storage -db|sp2_max.(12).cnf -db|sp2_max.(12).cnf -# case_insensitive -# source_file -..|..|..|..|..|altera|90sp2|quartus|libraries|megafunctions|altshift.tdf -b979c99547bac7dc31574fe678a95a9 -7 -# user_parameter { -WIDTH -1 -PARAMETER_UNKNOWN -USR -DEPTH -0 -PARAMETER_UNKNOWN -USR -} -# used_port { -result0 --1 -3 -data0 --1 -3 -} -# macro_sequence - -# end -# complete - \ No newline at end of file diff --git a/src/altera/quartus/max/db/sp2_max.lpc.html b/src/altera/quartus/max/db/sp2_max.lpc.html deleted file mode 100644 index 1dae3d2..0000000 --- a/src/altera/quartus/max/db/sp2_max.lpc.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - -
HierarchyInputConstant InputUnused InputFloating InputOutputConstant OutputUnused OutputFloating OutputBidirConstant BidirUnused BidirInput only BidirOutput only Bidir
diff --git a/src/altera/quartus/max/db/sp2_max.lpc.rdb b/src/altera/quartus/max/db/sp2_max.lpc.rdb deleted file mode 100644 index 8bd163af4afb4f0b0723e98d8decd3aac45d3a3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 399 zcmd;QU|?9w&B%}kg!VvoSZYymW`3T6rJjL;Q)y;Sih_}`se*x-zM;9kk%57wLU3wP zS!QyoLO^12wt|sDu$Mx3YLbF$N@fXATNxwJ2q2J#(kmfchJGl&f^kmYd9FhSJng%? zn;zU>yxgvvIZ)usBW9N9w1g##PxDn*W?MyT%JHh0$iF?mFI}n#-$sq zdH0&mJhD3Zb;HD2XPzBe$Lv4NH}j-Ho8PRSM|ZDJPV^~uX#S_}o8&snW!tC3u2r&I z7yFf{e_5>aL7IW#|Nja`p@d`xCN%{yrbi0m%YO*CtIJ=n2$v6!58prGeEq*UDQqhf z9xzPi;rZh*OS;3+>+jq>F>{?w&acZ$W;}haaTTK^`=Ln=JqAV=DkmHh}~bWdy))Y#0}0Scl2{{giDmUsXF diff --git a/src/altera/quartus/max/db/sp2_max.lpc.txt b/src/altera/quartus/max/db/sp2_max.lpc.txt deleted file mode 100644 index dbfe520..0000000 --- a/src/altera/quartus/max/db/sp2_max.lpc.txt +++ /dev/null @@ -1,5 +0,0 @@ -+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -; Legal Partition Candidates ; -+-----------+-------+----------------+--------------+----------------+--------+-----------------+---------------+-----------------+-------+----------------+--------------+------------------+-------------------+ -; Hierarchy ; Input ; Constant Input ; Unused Input ; Floating Input ; Output ; Constant Output ; Unused Output ; Floating Output ; Bidir ; Constant Bidir ; Unused Bidir ; Input only Bidir ; Output only Bidir ; -+-----------+-------+----------------+--------------+----------------+--------+-----------------+---------------+-----------------+-------+----------------+--------------+------------------+-------------------+ diff --git a/src/altera/quartus/max/db/sp2_max.map.cdb b/src/altera/quartus/max/db/sp2_max.map.cdb deleted file mode 100644 index 33848866c74f17db1fb3d0bf05d348ef5273a988..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8131 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 S#^yJ@jThO>)aL#JXGH*m)+N*c diff --git a/src/altera/quartus/max/db/sp2_max.map.logdb b/src/altera/quartus/max/db/sp2_max.map.logdb deleted file mode 100644 index d45424f..0000000 --- a/src/altera/quartus/max/db/sp2_max.map.logdb +++ /dev/null @@ -1 +0,0 @@ -v1 diff --git a/src/altera/quartus/max/db/sp2_max.map.qmsg b/src/altera/quartus/max/db/sp2_max.map.qmsg deleted file mode 100644 index d196367..0000000 --- a/src/altera/quartus/max/db/sp2_max.map.qmsg +++ /dev/null @@ -1,56 +0,0 @@ -{ "Info" "IQEXE_SEPARATOR" "" "Info: *******************************************************************" { } { } 3 0 "*******************************************************************" 0 0 "" 0 -1} -{ "Info" "IQEXE_START_BANNER_PRODUCT" "Analysis & Synthesis Quartus II " "Info: Running Quartus II Analysis & Synthesis" { { "Info" "IQEXE_START_BANNER_VERSION" "Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition " "Info: Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition" { } { } 0 0 "%1!s!" 0 0 "" 0 -1} { "Info" "IQEXE_START_BANNER_TIME" "Sun Aug 28 03:30:38 2022 " "Info: Processing started: Sun Aug 28 03:30:38 2022" { } { } 0 0 "Processing started: %1!s!" 0 0 "" 0 -1} } { } 4 0 "Running %2!s! %1!s!" 0 0 "" 0 -1} -{ "Info" "IQEXE_START_BANNER_COMMANDLINE" "quartus_map --read_settings_files=on --write_settings_files=off sp2_max -c sp2_max " "Info: Command: quartus_map --read_settings_files=on --write_settings_files=off sp2_max -c sp2_max" { } { } 0 0 "Command: %1!s!" 0 0 "" 0 -1} -{ "Warning" "WSGN_SEARCH_FILE" "sp2_max.tdf 1 1 " "Warning: Using design file sp2_max.tdf, which is not specified as a design file for the current project, but contains definitions for 1 design units and 1 entities in project" { { "Info" "ISGN_ENTITY_NAME" "1 SP2_MAX " "Info: Found entity 1: SP2_MAX" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 18 1 0 } } } 0 0 "Found entity %1!d!: %2!s!" 0 0 "" 0 -1} } { } 0 0 "Using design file %1!s!, which is not specified as a design file for the current project, but contains definitions for %2!llu! design units and %3!llu! entities in project" 0 0 "" 0 -1} -{ "Info" "ISGN_START_ELABORATION_TOP" "sp2_max " "Info: Elaborating entity \"sp2_max\" for the top level hierarchy" { } { } 0 0 "Elaborating entity \"%1!s!\" for the top level hierarchy" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "CTV8C " "Warning: Variable or input pin \"CTV8C\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 167 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "XA " "Warning: Variable or input pin \"XA\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 52 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "VGA_IN " "Warning: Variable or input pin \"VGA_IN\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 70 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "SINC_IN " "Warning: Variable or input pin \"SINC_IN\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 75 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "XHR_RDY " "Warning: Variable or input pin \"XHR_RDY\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 83 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "UNUSED65 " "Warning: Variable or input pin \"UNUSED65\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 88 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "UNUSED33 " "Warning: Variable or input pin \"UNUSED33\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 89 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "UNUSED1 " "Warning: Variable or input pin \"UNUSED1\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 90 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "UNUSED2 " "Warning: Variable or input pin \"UNUSED2\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 91 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "UNUSED5 " "Warning: Variable or input pin \"UNUSED5\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 92 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "UNUSED7 " "Warning: Variable or input pin \"UNUSED7\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 93 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "UNUSED22 " "Warning: Variable or input pin \"UNUSED22\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 94 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "UNUSED24 " "Warning: Variable or input pin \"UNUSED24\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 95 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "UNUSED27 " "Warning: Variable or input pin \"UNUSED27\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 96 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "UNUSED28 " "Warning: Variable or input pin \"UNUSED28\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 97 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "UNUSED49 " "Warning: Variable or input pin \"UNUSED49\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 98 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "UNUSED50 " "Warning: Variable or input pin \"UNUSED50\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 99 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "UNUSED53 " "Warning: Variable or input pin \"UNUSED53\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 100 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "UNUSED55 " "Warning: Variable or input pin \"UNUSED55\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 101 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "UNUSED63 " "Warning: Variable or input pin \"UNUSED63\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 102 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "UNUSED70 " "Warning: Variable or input pin \"UNUSED70\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 103 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "UNUSED72 " "Warning: Variable or input pin \"UNUSED72\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 104 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "UNUSED77 " "Warning: Variable or input pin \"UNUSED77\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 105 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Warning" "WTDFX_UNREFERENCED_NODE" "UNUSED78 " "Warning: Variable or input pin \"UNUSED78\" is defined but never used" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 106 2 0 } } } 0 0 "Variable or input pin \"%1!s!\" is defined but never used" 0 0 "" 0 -1} -{ "Info" "IOPT_INFERENCING_SUMMARY" "3 " "Info: Inferred 3 megafunctions from design logic" { { "Info" "IOPT_LPM_COUNTER_INFERRED" "CT\[0\]~0 4 " "Info: Inferred lpm_counter megafunction (LPM_WIDTH=4) from the following logic: \"CT\[0\]~0\"" { } { { "sp2_max.tdf" "CT\[0\]~0" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 119 4 0 } } } 0 0 "Inferred lpm_counter megafunction (LPM_WIDTH=%2!d!) from the following logic: \"%1!s!\"" 0 0 "" 0 -1} { "Info" "IOPT_LPM_COUNTER_INFERRED" "CTV\[0\]~9 9 " "Info: Inferred lpm_counter megafunction (LPM_WIDTH=9) from the following logic: \"CTV\[0\]~9\"" { } { { "sp2_max.tdf" "CTV\[0\]~9" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 121 5 0 } } } 0 0 "Inferred lpm_counter megafunction (LPM_WIDTH=%2!d!) from the following logic: \"%1!s!\"" 0 0 "" 0 -1} { "Info" "IOPT_LPM_COUNTER_INFERRED" "CTH\[0\]~7 6 " "Info: Inferred lpm_counter megafunction (LPM_WIDTH=6) from the following logic: \"CTH\[0\]~7\"" { } { { "sp2_max.tdf" "CTH\[0\]~7" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 120 5 0 } } } 0 0 "Inferred lpm_counter megafunction (LPM_WIDTH=%2!d!) from the following logic: \"%1!s!\"" 0 0 "" 0 -1} } { } 0 0 "Inferred %1!d! megafunctions from design logic" 0 0 "" 0 -1} -{ "Info" "ILPMS_INFERENCING_SUMMARY" "1 " "Info: Inferred 1 megafunctions from design logic" { { "Info" "ILPMS_LPM_ADD_SUB_INFERRED" "op_6 lpm_add_sub " "Info: Inferred adder/subtractor megafunction (\"lpm_add_sub\") from the following logic: \"op_6\"" { } { } 0 0 "Inferred adder/subtractor megafunction (\"%2!s!\") from the following logic: \"%1!s!\"" 0 0 "" 0 -1} } { } 0 0 "Inferred %1!llu! megafunctions from design logic" 0 0 "" 0 -1} -{ "Info" "ISGN_ELABORATION_HEADER" "lpm_counter:CT_rtl_0 " "Info: Elaborated megafunction instantiation \"lpm_counter:CT_rtl_0\"" { } { } 0 0 "Elaborated megafunction instantiation \"%1!s!\"" 0 0 "" 0 -1} -{ "Info" "ISGN_MEGAFN_PARAM_TOP" "lpm_counter:CT_rtl_0 " "Info: Instantiated megafunction \"lpm_counter:CT_rtl_0\" with the following parameter:" { { "Info" "ISGN_MEGAFN_PARAM_SUB" "LPM_WIDTH 4 " "Info: Parameter \"LPM_WIDTH\" = \"4\"" { } { } 0 0 "Parameter \"%1!s!\" = \"%2!s!\"" 0 0 "" 0 -1} { "Info" "ISGN_MEGAFN_PARAM_SUB" "LPM_DIRECTION UP " "Info: Parameter \"LPM_DIRECTION\" = \"UP\"" { } { } 0 0 "Parameter \"%1!s!\" = \"%2!s!\"" 0 0 "" 0 -1} { "Info" "ISGN_MEGAFN_PARAM_SUB" "LPM_TYPE LPM_COUNTER " "Info: Parameter \"LPM_TYPE\" = \"LPM_COUNTER\"" { } { } 0 0 "Parameter \"%1!s!\" = \"%2!s!\"" 0 0 "" 0 -1} } { } 0 0 "Instantiated megafunction \"%1!s!\" with the following parameter:" 0 0 "" 0 -1} -{ "Info" "ISGN_ELABORATION_HEADER" "lpm_counter:CTV_rtl_1 " "Info: Elaborated megafunction instantiation \"lpm_counter:CTV_rtl_1\"" { } { } 0 0 "Elaborated megafunction instantiation \"%1!s!\"" 0 0 "" 0 -1} -{ "Info" "ISGN_MEGAFN_PARAM_TOP" "lpm_counter:CTV_rtl_1 " "Info: Instantiated megafunction \"lpm_counter:CTV_rtl_1\" with the following parameter:" { { "Info" "ISGN_MEGAFN_PARAM_SUB" "LPM_WIDTH 9 " "Info: Parameter \"LPM_WIDTH\" = \"9\"" { } { } 0 0 "Parameter \"%1!s!\" = \"%2!s!\"" 0 0 "" 0 -1} { "Info" "ISGN_MEGAFN_PARAM_SUB" "LPM_DIRECTION UP " "Info: Parameter \"LPM_DIRECTION\" = \"UP\"" { } { } 0 0 "Parameter \"%1!s!\" = \"%2!s!\"" 0 0 "" 0 -1} { "Info" "ISGN_MEGAFN_PARAM_SUB" "LPM_TYPE LPM_COUNTER " "Info: Parameter \"LPM_TYPE\" = \"LPM_COUNTER\"" { } { } 0 0 "Parameter \"%1!s!\" = \"%2!s!\"" 0 0 "" 0 -1} } { } 0 0 "Instantiated megafunction \"%1!s!\" with the following parameter:" 0 0 "" 0 -1} -{ "Info" "ISGN_ELABORATION_HEADER" "lpm_counter:CTH_rtl_2 " "Info: Elaborated megafunction instantiation \"lpm_counter:CTH_rtl_2\"" { } { } 0 0 "Elaborated megafunction instantiation \"%1!s!\"" 0 0 "" 0 -1} -{ "Info" "ISGN_MEGAFN_PARAM_TOP" "lpm_counter:CTH_rtl_2 " "Info: Instantiated megafunction \"lpm_counter:CTH_rtl_2\" with the following parameter:" { { "Info" "ISGN_MEGAFN_PARAM_SUB" "LPM_WIDTH 6 " "Info: Parameter \"LPM_WIDTH\" = \"6\"" { } { } 0 0 "Parameter \"%1!s!\" = \"%2!s!\"" 0 0 "" 0 -1} { "Info" "ISGN_MEGAFN_PARAM_SUB" "LPM_DIRECTION UP " "Info: Parameter \"LPM_DIRECTION\" = \"UP\"" { } { } 0 0 "Parameter \"%1!s!\" = \"%2!s!\"" 0 0 "" 0 -1} { "Info" "ISGN_MEGAFN_PARAM_SUB" "LPM_TYPE LPM_COUNTER " "Info: Parameter \"LPM_TYPE\" = \"LPM_COUNTER\"" { } { } 0 0 "Parameter \"%1!s!\" = \"%2!s!\"" 0 0 "" 0 -1} } { } 0 0 "Instantiated megafunction \"%1!s!\" with the following parameter:" 0 0 "" 0 -1} -{ "Info" "ISGN_ELABORATION_HEADER" "lpm_add_sub:op_6 " "Info: Elaborated megafunction instantiation \"lpm_add_sub:op_6\"" { } { } 0 0 "Elaborated megafunction instantiation \"%1!s!\"" 0 0 "" 0 -1} -{ "Info" "ISGN_MEGAFN_PARAM_TOP" "lpm_add_sub:op_6 " "Info: Instantiated megafunction \"lpm_add_sub:op_6\" with the following parameter:" { { "Info" "ISGN_MEGAFN_PARAM_SUB" "LPM_WIDTH 5 " "Info: Parameter \"LPM_WIDTH\" = \"5\"" { } { } 0 0 "Parameter \"%1!s!\" = \"%2!s!\"" 0 0 "" 0 -1} { "Info" "ISGN_MEGAFN_PARAM_SUB" "LPM_DIRECTION ADD " "Info: Parameter \"LPM_DIRECTION\" = \"ADD\"" { } { } 0 0 "Parameter \"%1!s!\" = \"%2!s!\"" 0 0 "" 0 -1} { "Info" "ISGN_MEGAFN_PARAM_SUB" "LPM_REPRESENTATION UNSIGNED " "Info: Parameter \"LPM_REPRESENTATION\" = \"UNSIGNED\"" { } { } 0 0 "Parameter \"%1!s!\" = \"%2!s!\"" 0 0 "" 0 -1} { "Info" "ISGN_MEGAFN_PARAM_SUB" "ONE_INPUT_IS_CONSTANT YES " "Info: Parameter \"ONE_INPUT_IS_CONSTANT\" = \"YES\"" { } { } 0 0 "Parameter \"%1!s!\" = \"%2!s!\"" 0 0 "" 0 -1} } { } 0 0 "Instantiated megafunction \"%1!s!\" with the following parameter:" 0 0 "" 0 -1} -{ "Info" "ISGN_MEGAFN_DESCENDANT" "lpm_add_sub:op_6\|addcore:adder lpm_add_sub:op_6 " "Info: Elaborated megafunction instantiation \"lpm_add_sub:op_6\|addcore:adder\", which is child of megafunction instantiation \"lpm_add_sub:op_6\"" { } { { "lpm_add_sub.tdf" "" { Text "c:/altera/90sp2/quartus/libraries/megafunctions/lpm_add_sub.tdf" 268 4 0 } } } 0 0 "Elaborated megafunction instantiation \"%1!s!\", which is child of megafunction instantiation \"%2!s!\"" 0 0 "" 0 -1} -{ "Info" "ISGN_MEGAFN_DESCENDANT" "lpm_add_sub:op_6\|addcore:adder\|a_csnbuffer:oflow_node lpm_add_sub:op_6 " "Info: Elaborated megafunction instantiation \"lpm_add_sub:op_6\|addcore:adder\|a_csnbuffer:oflow_node\", which is child of megafunction instantiation \"lpm_add_sub:op_6\"" { } { { "addcore.tdf" "" { Text "c:/altera/90sp2/quartus/libraries/megafunctions/addcore.tdf" 97 2 0 } } } 0 0 "Elaborated megafunction instantiation \"%1!s!\", which is child of megafunction instantiation \"%2!s!\"" 0 0 "" 0 -1} -{ "Info" "ISGN_MEGAFN_DESCENDANT" "lpm_add_sub:op_6\|addcore:adder\|a_csnbuffer:result_node lpm_add_sub:op_6 " "Info: Elaborated megafunction instantiation \"lpm_add_sub:op_6\|addcore:adder\|a_csnbuffer:result_node\", which is child of megafunction instantiation \"lpm_add_sub:op_6\"" { } { { "addcore.tdf" "" { Text "c:/altera/90sp2/quartus/libraries/megafunctions/addcore.tdf" 202 5 0 } } } 0 0 "Elaborated megafunction instantiation \"%1!s!\", which is child of megafunction instantiation \"%2!s!\"" 0 0 "" 0 -1} -{ "Info" "ISGN_MEGAFN_DESCENDANT" "lpm_add_sub:op_6\|addcore:adder\|addcore:adder\[0\] lpm_add_sub:op_6 " "Info: Elaborated megafunction instantiation \"lpm_add_sub:op_6\|addcore:adder\|addcore:adder\[0\]\", which is child of megafunction instantiation \"lpm_add_sub:op_6\"" { } { { "addcore.tdf" "" { Text "c:/altera/90sp2/quartus/libraries/megafunctions/addcore.tdf" 203 10 0 } } } 0 0 "Elaborated megafunction instantiation \"%1!s!\", which is child of megafunction instantiation \"%2!s!\"" 0 0 "" 0 -1} -{ "Info" "ISGN_MEGAFN_DESCENDANT" "lpm_add_sub:op_6\|addcore:adder\|addcore:adder\[0\]\|a_csnbuffer:oflow_node lpm_add_sub:op_6 " "Info: Elaborated megafunction instantiation \"lpm_add_sub:op_6\|addcore:adder\|addcore:adder\[0\]\|a_csnbuffer:oflow_node\", which is child of megafunction instantiation \"lpm_add_sub:op_6\"" { } { { "addcore.tdf" "" { Text "c:/altera/90sp2/quartus/libraries/megafunctions/addcore.tdf" 97 2 0 } } } 0 0 "Elaborated megafunction instantiation \"%1!s!\", which is child of megafunction instantiation \"%2!s!\"" 0 0 "" 0 -1} -{ "Info" "ISGN_MEGAFN_DESCENDANT" "lpm_add_sub:op_6\|addcore:adder\|addcore:adder\[0\]\|a_csnbuffer:result_node lpm_add_sub:op_6 " "Info: Elaborated megafunction instantiation \"lpm_add_sub:op_6\|addcore:adder\|addcore:adder\[0\]\|a_csnbuffer:result_node\", which is child of megafunction instantiation \"lpm_add_sub:op_6\"" { } { { "addcore.tdf" "" { Text "c:/altera/90sp2/quartus/libraries/megafunctions/addcore.tdf" 189 5 0 } } } 0 0 "Elaborated megafunction instantiation \"%1!s!\", which is child of megafunction instantiation \"%2!s!\"" 0 0 "" 0 -1} -{ "Info" "ISGN_MEGAFN_DESCENDANT" "lpm_add_sub:op_6\|altshift:result_ext_latency_ffs lpm_add_sub:op_6 " "Info: Elaborated megafunction instantiation \"lpm_add_sub:op_6\|altshift:result_ext_latency_ffs\", which is child of megafunction instantiation \"lpm_add_sub:op_6\"" { } { { "lpm_add_sub.tdf" "" { Text "c:/altera/90sp2/quartus/libraries/megafunctions/lpm_add_sub.tdf" 286 2 0 } } } 0 0 "Elaborated megafunction instantiation \"%1!s!\", which is child of megafunction instantiation \"%2!s!\"" 0 0 "" 0 -1} -{ "Info" "ISGN_MEGAFN_DESCENDANT" "lpm_add_sub:op_6\|altshift:carry_ext_latency_ffs lpm_add_sub:op_6 " "Info: Elaborated megafunction instantiation \"lpm_add_sub:op_6\|altshift:carry_ext_latency_ffs\", which is child of megafunction instantiation \"lpm_add_sub:op_6\"" { } { { "lpm_add_sub.tdf" "" { Text "c:/altera/90sp2/quartus/libraries/megafunctions/lpm_add_sub.tdf" 288 2 0 } } } 0 0 "Elaborated megafunction instantiation \"%1!s!\", which is child of megafunction instantiation \"%2!s!\"" 0 0 "" 0 -1} -{ "Info" "IOPT_MLS_IGNORED_SUMMARY" "6 " "Info: Ignored 6 buffer(s)" { { "Info" "IOPT_MLS_IGNORED_SOFT" "6 " "Info: Ignored 6 SOFT buffer(s)" { } { } 0 0 "Ignored %1!d! SOFT buffer(s)" 0 0 "" 0 -1} } { } 0 0 "Ignored %1!d! buffer(s)" 0 0 "" 0 -1} -{ "Info" "IOPT_MLS_PRESET_POWER_UP" "" "Info: Registers with preset signals will power-up high" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 451 13 0 } } { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 450 13 0 } } { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 449 13 0 } } { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 445 13 0 } } { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 446 12 0 } } { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 447 12 0 } } { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 479 27 0 } } { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 478 27 0 } } { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 489 20 0 } } { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 490 20 0 } } { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 494 20 0 } } { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 495 20 0 } } } 0 0 "Registers with preset signals will power-up high" 0 0 "" 0 -1} -{ "Warning" "WOPT_MLS_ENABLED_OE" "" "Warning: TRI or OPNDRN buffers permanently enabled" { { "Warning" "WOPT_MLS_NODE_NAME" "\$00005 " "Warning: Node \"\$00005\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 206 12 0 } } } 0 0 "Node \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WOPT_MLS_NODE_NAME" "\$00006 " "Warning: Node \"\$00006\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 207 12 0 } } } 0 0 "Node \"%1!s!\"" 0 0 "" 0 -1} } { } 0 0 "TRI or OPNDRN buffers permanently enabled" 0 0 "" 0 -1} -{ "Warning" "WOPT_MLS_STUCK_PIN_HDR" "" "Warning: Output pins are stuck at VCC or GND" { { "Warning" "WOPT_MLS_STUCK_PIN" "BEEP GND " "Warning (13410): Pin \"BEEP\" is stuck at GND" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 333 2 0 } } } 0 13410 "Pin \"%1!s!\" is stuck at %2!s!" 0 0 "" 0 -1} { "Warning" "WOPT_MLS_STUCK_PIN" "DENS_X VCC " "Warning (13410): Pin \"DENS_X\" is stuck at VCC" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 345 2 0 } } } 0 13410 "Pin \"%1!s!\" is stuck at %2!s!" 0 0 "" 0 -1} { "Warning" "WOPT_MLS_STUCK_PIN" "HD_CS GND " "Warning (13410): Pin \"HD_CS\" is stuck at GND" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 458 9 0 } } } 0 13410 "Pin \"%1!s!\" is stuck at %2!s!" 0 0 "" 0 -1} } { } 0 0 "Output pins are stuck at VCC or GND" 0 0 "" 0 -1} -{ "Info" "IMTM_MTM_PROMOTE_GLOBAL" "" "Info: Promoted pin-driven signal(s) to global signal" { { "Info" "IMTM_MTM_PROMOTE_GLOBAL_CLOCK" "TG42_IN " "Info: Promoted clock signal driven by pin \"TG42_IN\" to global clock signal" { } { } 0 0 "Promoted clock signal driven by pin \"%1!s!\" to global clock signal" 0 0 "" 0 -1} { "Info" "IMTM_MTM_PROMOTE_GLOBAL_CLEAR" "EPM_RES " "Info: Promoted clear signal driven by pin \"EPM_RES\" to global clear signal" { } { } 0 0 "Promoted clear signal driven by pin \"%1!s!\" to global clear signal" 0 0 "" 0 -1} } { } 0 0 "Promoted pin-driven signal(s) to global signal" 0 0 "" 0 -1} -{ "Info" "ISCL_SCL_LOST_FANOUT_MSG_HDR" "1 1 " "Info: 1 registers lost all their fanouts during netlist optimizations. The first 1 are displayed below." { { "Info" "ISCL_SCL_LOST_FANOUT_MSG_SUB" "XCT\[2\] " "Info: Register \"XCT\[2\]\" lost all its fanouts during netlist optimizations." { } { } 0 0 "Register \"%1!s!\" lost all its fanouts during netlist optimizations." 0 0 "" 0 -1} } { } 0 0 "%1!d! registers lost all their fanouts during netlist optimizations. The first %2!d! are displayed below." 0 0 "" 0 -1} -{ "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN_HDR" "25 " "Warning: Design contains 25 input pin(s) that do not drive logic" { { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "XA\[0\] " "Warning (15610): No output dependent on input pin \"XA\[0\]\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 52 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "XA\[1\] " "Warning (15610): No output dependent on input pin \"XA\[1\]\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 52 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "XA\[2\] " "Warning (15610): No output dependent on input pin \"XA\[2\]\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 52 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "VGA_IN " "Warning (15610): No output dependent on input pin \"VGA_IN\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 70 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "SINC_IN " "Warning (15610): No output dependent on input pin \"SINC_IN\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 75 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "XHR_RDY " "Warning (15610): No output dependent on input pin \"XHR_RDY\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 83 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "UNUSED65 " "Warning (15610): No output dependent on input pin \"UNUSED65\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 88 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "UNUSED33 " "Warning (15610): No output dependent on input pin \"UNUSED33\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 89 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "UNUSED1 " "Warning (15610): No output dependent on input pin \"UNUSED1\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 90 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "UNUSED2 " "Warning (15610): No output dependent on input pin \"UNUSED2\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 91 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "UNUSED5 " "Warning (15610): No output dependent on input pin \"UNUSED5\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 92 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "UNUSED7 " "Warning (15610): No output dependent on input pin \"UNUSED7\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 93 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "UNUSED22 " "Warning (15610): No output dependent on input pin \"UNUSED22\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 94 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "UNUSED24 " "Warning (15610): No output dependent on input pin \"UNUSED24\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 95 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "UNUSED27 " "Warning (15610): No output dependent on input pin \"UNUSED27\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 96 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "UNUSED28 " "Warning (15610): No output dependent on input pin \"UNUSED28\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 97 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "UNUSED49 " "Warning (15610): No output dependent on input pin \"UNUSED49\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 98 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "UNUSED50 " "Warning (15610): No output dependent on input pin \"UNUSED50\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 99 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "UNUSED53 " "Warning (15610): No output dependent on input pin \"UNUSED53\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 100 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "UNUSED55 " "Warning (15610): No output dependent on input pin \"UNUSED55\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 101 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "UNUSED63 " "Warning (15610): No output dependent on input pin \"UNUSED63\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 102 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "UNUSED70 " "Warning (15610): No output dependent on input pin \"UNUSED70\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 103 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "UNUSED72 " "Warning (15610): No output dependent on input pin \"UNUSED72\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 104 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "UNUSED77 " "Warning (15610): No output dependent on input pin \"UNUSED77\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 105 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} { "Warning" "WCUT_CUT_UNNECESSARY_INPUT_PIN" "UNUSED78 " "Warning (15610): No output dependent on input pin \"UNUSED78\"" { } { { "sp2_max.tdf" "" { Text "C:/Sprinter/src/altera/quartus/max/sp2_max.tdf" 106 2 0 } } } 0 15610 "No output dependent on input pin \"%1!s!\"" 0 0 "" 0 -1} } { } 0 0 "Design contains %1!d! input pin(s) that do not drive logic" 0 0 "" 0 -1} -{ "Info" "ICUT_CUT_TM_SUMMARY" "163 " "Info: Implemented 163 device resources after synthesis - the final resource count might be different" { { "Info" "ICUT_CUT_TM_IPINS" "46 " "Info: Implemented 46 input pins" { } { } 0 0 "Implemented %1!d! input pins" 0 0 "" 0 -1} { "Info" "ICUT_CUT_TM_OPINS" "30 " "Info: Implemented 30 output pins" { } { } 0 0 "Implemented %1!d! output pins" 0 0 "" 0 -1} { "Info" "ICUT_CUT_TM_BIDIRS" "4 " "Info: Implemented 4 bidirectional pins" { } { } 0 0 "Implemented %1!d! bidirectional pins" 0 0 "" 0 -1} { "Info" "ICUT_CUT_TM_MCELLS" "74 " "Info: Implemented 74 macrocells" { } { } 0 0 "Implemented %1!d! macrocells" 0 0 "" 0 -1} { "Info" "ICUT_CUT_TM_SEXPS" "9 " "Info: Implemented 9 shareable expanders" { } { } 0 0 "Implemented %1!d! shareable expanders" 0 0 "" 0 -1} } { } 0 0 "Implemented %1!d! device resources after synthesis - the final resource count might be different" 0 0 "" 0 -1} -{ "Info" "IQEXE_ERROR_COUNT" "Analysis & Synthesis 0 s 58 s Quartus II " "Info: Quartus II Analysis & Synthesis was successful. 0 errors, 58 warnings" { { "Info" "IQEXE_END_PEAK_VSIZE_MEMORY" "229 " "Info: Peak virtual memory: 229 megabytes" { } { } 0 0 "Peak virtual memory: %1!s! megabytes" 0 0 "" 0 -1} { "Info" "IQEXE_END_BANNER_TIME" "Sun Aug 28 03:30:39 2022 " "Info: Processing ended: Sun Aug 28 03:30:39 2022" { } { } 0 0 "Processing ended: %1!s!" 0 0 "" 0 -1} { "Info" "IQEXE_ELAPSED_TIME" "00:00:01 " "Info: Elapsed time: 00:00:01" { } { } 0 0 "Elapsed time: %1!s!" 0 0 "" 0 -1} { "Info" "IQEXE_ELAPSED_CPU_TIME" "00:00:01 " "Info: Total CPU time (on all processors): 00:00:01" { } { } 0 0 "Total CPU time (on all processors): %1!s!" 0 0 "" 0 -1} } { } 0 0 "%6!s! %1!s! was successful. %2!d! error%3!s!, %4!d! warning%5!s!" 0 0 "" 0 -1} diff --git a/src/altera/quartus/max/db/sp2_max.pre_map.cdb b/src/altera/quartus/max/db/sp2_max.pre_map.cdb deleted file mode 100644 index 58843c71111fa2b0744a7d46978d82c7bd71d63b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13509 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

)hpoU96KvFvN>M z3WMr5_JTEf+(fe1u(t$qJiq-MhDNRycTLx2uGS%>VUa7D^!;;xlW2T;HujR+2KqlK z`o>}~k>eoGkx)j!UZAdzt_&*tpx{T8v%qG`&%s299Bs5cAKn|}{ze=3vHAGGtZL3) zr)0YZiMF@R+8^k-(G~sIv`wOHDlr|Wn{tYpcQHql59j8yLU)PhSL&D(PbG(~~U58dkRI?DkcqG@;k9Imj z7aI6K19x&>4cylA`c)I3(JycwtQWfMu6$uV2cZpL!nzNNai26*Z|!!c9ux+{p&@6} z9uRn)G^0=JkboRbjO%i4+Ecau!#m}0&g~)`kfOV@ax4Q*JAPcg;JGBN zzu{2*Uv(EW<^Q)iuzlt{z#l%<{M_*hbC!Lx8u4ll3}@KK#LLtq&s5je>zr##jO(A% zCm5y4N@m1APj;5451w)q}u2X9{^CpoeFxtA% zlO#!#2K%e@5R8dxd7lefkP>r~&m?iO*D>eH^)` z^+vc>&RuJOCqHdyxHFqULZMQ;0d30L=y0e6&=fZy_}6QC4^CDxb7wIzFg|K%UPxx^ z$KjZya}JGHlMyp=_LoR=aDHX;n&rBs04tgn^vPg(wtX|nhGLl3#3GLa&}>TiD0`Vt z#&rvkBKDK0_?PSvu+AaxO4@(Ue7SHS@tRFE+EB=+0a1o3EJyzI3|y?&B5w$rXenJ3 z9o$f=jm4ub+MKylTv}vpF$pl#38F|R_I{v3ud3|Ce|7rs+fA_{|C0-q+YhH~ihdy- zA}H`3zg_p#n#$a2&OK5)N)miMT_3#pu>S^SXTvB#7Nx7>KN{%tW*}svI|&G%!i#{6 zXSuQAT7zFW$6;V$U$0CbuvF^OfQeXcStEfzv>DNO$+fO)>4N8z(({(ot7?Oa9DFNy)0}5i_uTNx`Qwl?l2=Ym zU^EB%PdZAqo58%Y&qB|a%mN`Wo|UNi`)MJ-$_ryn&I3HRTTX6NNOyp%7U!O|o>Q%t z;xu;LH+U=fbdB;P_p9wa+sb(m?&^7DgkTxTLCqPw?YgzvVeIK$bBlXk>pI`R?s0K* zEQc4?okxkf-IU8d8uu)P+wi5}a|$IPFYt4Dd92_3N`pVOQ(7Cg<0jRCpd6t?58;_4 zsCi^pbM0JL7@W2G2nTuQHD0NXw-Man#!W_J#(#EorkM9GkQX$k^|MF_Ro;4=^gDxP%gc*50=}8$8$?bTVpIzok}_`_ z-02{1nzLgPd_vNTBl0cxg592yH%N5q0SG^W5CdqiHF33%kI1qKs*T=g4tF*2=QgQf^v{E5RHKi`^_K7-2A!1>4gL%Qg1i z9sBAE3#Y=bXrmuPXCbusE5;~F28PBl^%fZ+^%gZD;?@3e=mk8abD-Dk4I}CMg&_XP zQ1$s|Vez4VsHPL;t%Ih1IuVxc>pSM2HHD1hX~Zm`8J?XL(r}gYWW+1 z1ep-=-5iACXYv(t+c{sC(| nOw>;(+|t2&8XRvj&kx8NucB8CI8j9M9p1h}dc9Zl^78)xKond^ diff --git a/src/altera/quartus/max/db/sp2_max.pre_map.hdb b/src/altera/quartus/max/db/sp2_max.pre_map.hdb deleted file mode 100644 index 21994f948244ce09e21fc9df5eb98163b58c75fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13135 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 RjSo%LlQ|jFKL7v#|NoPFCRG3c diff --git a/src/altera/quartus/max/db/sp2_max.rtlv_sg.cdb b/src/altera/quartus/max/db/sp2_max.rtlv_sg.cdb deleted file mode 100644 index a3905ed5215aa11b349cabee66d2da2566df44ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13447 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 z 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 diff --git a/src/altera/quartus/max/db/sp2_max.rtlv_sg_swap.cdb b/src/altera/quartus/max/db/sp2_max.rtlv_sg_swap.cdb deleted file mode 100644 index bccc94e74df8d25569cb9ee6fe9a3be95d91d85a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 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

tD!2-U&#$oIl7j`Qtp~Px6pIi$i2O|3N?~t=*@F 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 diff --git a/src/altera/quartus/max/db/sp2_max.sld_design_entry.sci b/src/altera/quartus/max/db/sp2_max.sld_design_entry.sci deleted file mode 100644 index 7f9b4cb39af6e9511e3a35f11646629f8f220ebc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168 zcmd;QU|?9w&B%}kg!VvoSZYymW`3T6rJjL;Q)y;Sih_}`se*x-zM;9kk%57wLU3wP zS!QyoLO^12wt|sDu$Mx3YLbF$N@fXAn*h)R5U7Pv3`S6T1(dE}{Pq9;|9UnR5dZ)G t3dTvv$qY - - - $00052 - - - $00051 - - - $00053 - - - $00050 - - - CTV8M - - SA0 - - - - $00049 - - - $00045 - - - $00046 - - - $00048 - - - XCT[2] - - NF - - - - $00041 - - - $00042 - - - $00043 - - - $00044 - - - - - - - $00052 - - - $00051 - - - $00053 - - - $00050 - - - $00049 - - - $00045 - - - $00046 - - - $00048 - - - $00041 - - - $00042 - - - $00043 - - - $00044 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/altera/quartus/max/maxplusii_to_quartus_name_mapping.txt b/src/altera/quartus/max/maxplusii_to_quartus_name_mapping.txt deleted file mode 100644 index dfa0e10..0000000 --- a/src/altera/quartus/max/maxplusii_to_quartus_name_mapping.txt +++ /dev/null @@ -1,64 +0,0 @@ - -- Copyright (C) 1991-2004 Altera Corporation - -- Any megafunction design, and related netlist (encrypted or decrypted), - -- support information, device programming or simulation file, and any other - -- associated documentation or information provided by Altera or a partner - -- under Altera's Megafunction Partnership Program may be used only - -- to program PLD devices (but not masked PLD devices) from Altera. Any - -- other use of such megafunction design, netlist, support information, - -- device programming or simulation file, or any other related documentation - -- or information is prohibited for any other purpose, including, but not - -- limited to modification, reverse engineering, de-compiling, or use with - -- any other silicon devices, unless such use is explicitly licensed under - -- a separate agreement with Altera or a megafunction partner. Title to the - -- intellectual property, including patents, copyrights, trademarks, trade - -- secrets, or maskworks, embodied in any such megafunction design, netlist, - -- support information, device programming or simulation file, or any other - -- related documentation or information provided by Altera or a megafunction - -- partner, remains with Altera, the megafunction partner, or their respective - -- licensors. No other licenses, including any licenses needed under any third - -- party's intellectual property, are provided herein. - - -- VERSION "Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition" - -- DATE "08/28/2022 03:22:37" - -Conversion results for sp2_max -+-----------------------+----------------------+ -| MAX+PLUS II node name | Quartus II node name | -+-----------------------+----------------------+ -| |10K_D0 | 10K_D[0] | -| |CLK14 | CLK[14] | -| |D0 | D[0] | -| |FDD_C0 | FDD_C[0] | -| |FDD_C1 | FDD_C[1] | -| |FDD_C2 | FDD_C[2] | -| |HDD_C0 | HDD_C[0] | -| |HDD_C1 | HDD_C[1] | -| |HDD_C2 | HDD_C[2] | -| |HDD_C3 | HDD_C[3] | -| |LR_T0 | LR_T[0] | -| |LR_T1 | LR_T[1] | -| |REG_P0 | REG_P[0] | -| |REG_P1 | REG_P[1] | -| |REG_P2 | REG_P[2] | -| |SINC_1 | SINC_[1] | -| |SINC_2 | SINC_[2] | -| |STWG0 | STWG[0] | -| |STWG1 | STWG[1] | -| |STWG2 | STWG[2] | -| |TR43 | TR[43] | -| |UNUSED33 | UNUSED[33] | -| |UNUSED53 | UNUSED[53] | -| |UNUSED65 | UNUSED[65] | -| |UNUSED78 | UNUSED[78] | -| |XA0 | XA[0] | -| |XA1 | XA[1] | -| |XA2 | XA[2] | -| |XCT0 | XCT[0] | -| |XCT1 | XCT[1] | -| |XHD1_CS1 | XHD1_CS[1] | -| |XHD1_CS2 | XHD1_CS[2] | -| |XHD2_CS1 | XHD2_CS[1] | -| |XHD2_CS2 | XHD2_CS[2] | -+-----------------------+----------------------+ - - diff --git a/src/altera/quartus/max/sp2_max.acf b/src/altera/quartus/max/sp2_max.acf deleted file mode 100644 index 689ae3e..0000000 --- a/src/altera/quartus/max/sp2_max.acf +++ /dev/null @@ -1,699 +0,0 @@ --- --- Copyright (C) 1988-2000 Altera Corporation --- Any megafunction design, and related net list (encrypted or decrypted), --- support information, device programming or simulation file, and any other --- associated documentation or information provided by Altera or a partner --- under Altera's Megafunction Partnership Program may be used only to --- program PLD devices (but not masked PLD devices) from Altera. Any other --- use of such megafunction design, net list, support information, device --- programming or simulation file, or any other related documentation or --- information is prohibited for any other purpose, including, but not --- limited to modification, reverse engineering, de-compiling, or use with --- any other silicon devices, unless such use is explicitly licensed under --- a separate agreement with Altera or a megafunction partner. Title to --- the intellectual property, including patents, copyrights, trademarks, --- trade secrets, or maskworks, embodied in any such megafunction design, --- net list, support information, device programming or simulation file, or --- any other related documentation or information provided by Altera or a --- megafunction partner, remains with Altera, the megafunction partner, or --- their respective licensors. No other licenses, including any licenses --- needed under any third party's intellectual property, are provided herein. --- -CHIP SP2_MAX -BEGIN - DEVICE = EPM7128STC100-10; - |UNUSED1: INPUT_PIN = 1; -- 7064 N.C. - |UNUSED2: INPUT_PIN = 2; -- 7064 N.C. --- |VCCIO --- |#TDI - |UNUSED5: INPUT_PIN = 5; -- 7064 N.C. - |CMOS_AS : OUTPUT_PIN = 6; - |UNUSED7: INPUT_PIN = 7; -- 7064 N.C. - |WR_PDOS : OUTPUT_PIN = 8; - |WD : INPUT_PIN = 9; - - |WSTB : INPUT_PIN = 10; --- |GND - |TR43 : INPUT_PIN = 12; - |CLK_WG : OUTPUT_PIN = 13; - |FDAT : OUTPUT_PIN = 14; --- |#TMS - |QDAT : OUTPUT_PIN = 16; - |XA0 : INPUT_PIN = 17; --- |VCCIO - |SINC_2 : OUTPUT_PIN = 19; - - |SINC_1 : OUTPUT_PIN = 20; - |XA1 : INPUT_PIN = 21; - |UNUSED22: INPUT_PIN = 22; -- 7064 N.C. - |XA2 : INPUT_PIN = 23; - |UNUSED24: INPUT_PIN = 24; -- 7064 N.C. - |RSTB : INPUT_PIN = 25; --- |GND - |UNUSED27: INPUT_PIN = 27; -- 7064 N.C. - |UNUSED28: INPUT_PIN = 28; -- 7064 N.C. - |SR : INPUT_PIN = 29; - - |SL : INPUT_PIN = 30; - |CLK14 : OUTPUT_PIN = 31; - |CLKZZ : BIDIR_PIN = 32; - |UNUSED33 : INPUT_PIN = 33; -- be careful! at 3000 family the pin 33 is GND --- |VCCIO - |AUD : OUTPUT_PIN = 35; - |TG42_BUF : OUTPUT_PIN = 36; - |XACS : INPUT_PIN = 37; --- |GND --- |VCCINT - - |HDD_C3 : INPUT_PIN = 40; - |HDD_C2 : INPUT_PIN = 41; - |HDD_C1 : INPUT_PIN = 42; --- |GND - |FDD_C0 : INPUT_PIN = 44; - |FDD_C1 : INPUT_PIN = 45; - |FDD_C2 : INPUT_PIN = 46; - |HDD_C0 : INPUT_PIN = 47; - |HD_DIR : OUTPUT_PIN = 48; - |UNUSED49: INPUT_PIN = 49; -- 7064 N.C. - - |UNUSED50: INPUT_PIN = 50; -- 7064 N.C. --- |VCCIO - |HD_CS : OUTPUT_PIN = 52; - |UNUSED53 : INPUT_PIN = 53; -- 7064 N.C. - |/CONF_X : BIDIR_PIN = 54; - |UNUSED55: INPUT_PIN = 55; -- 7064 N.C. - |10K_CLK : OUTPUT_PIN = 56; - |WR_CNF : INPUT_PIN = 57; - |10K_D0 : OUTPUT_PIN = 58; --- |GND - - |D0 : INPUT_PIN = 60; - |VGA_IN : INPUT_PIN = 61; --- |#TCK - |UNUSED63: INPUT_PIN = 63; - |SINC_V : OUTPUT_PIN = 64; - |UNUSED65 : INPUT_PIN = 65; -- be careful! at 3000 family the pin 33 is GND --- |VCCIO - |SINC : OUTPUT_PIN = 67; - |SINC_H : OUTPUT_PIN = 68; - |SINC_IN : INPUT_PIN = 69; - - |UNUSED70: INPUT_PIN = 70; -- 7064 N.C. - |XHD_RES : OUTPUT_PIN = 71; - |UNUSED72: INPUT_PIN = 72; -- 7064 N.C. --- |#TDO --- |GND - |XHD_WR : OUTPUT_PIN = 75; - |XHD_RD : OUTPUT_PIN = 76; - |UNUSED77: INPUT_PIN = 77; -- 7064 N.C. - |UNUSED78 : INPUT_PIN = 78; -- 7064 N.C. - |XHD1_CS1 : OUTPUT_PIN = 79; - - |XHD1_CS2 : OUTPUT_PIN = 80; - |XHD2_CS1 : OUTPUT_PIN = 81; --- |VCCIO - |XHD2_CS2 : OUTPUT_PIN = 83; - |BEEP : OUTPUT_PIN = 84; - |TG42_OUT : OUTPUT_PIN = 85; --- |GND - |TG42_IN : INPUT_PIN = 87; - |XHR_RDY : INPUT_PIN = 88; - |EPM_RES : INPUT_PIN = 89; - - |PW_GOOD : INPUT_PIN = 90; --- |VCCINT - |RDAT : INPUT_PIN = 92; - |/WG_WR : OUTPUT_PIN = 93; - |STE : INPUT_PIN = 94; --- |GND - |DENS_X : OUTPUT_PIN = 96; - |/WG_RD : OUTPUT_PIN = 97; - |WDAT : OUTPUT_PIN = 98; - |CMOS_DRD : OUTPUT_PIN = 99; - |CMOS_DWR : OUTPUT_PIN = 100; -END; - -DEFAULT_DEVICES -BEGIN - AUTO_DEVICE = EPM7256SQC208-7; - AUTO_DEVICE = EPM7256SRC208-7; - AUTO_DEVICE = EPM7192SQC160-7; - AUTO_DEVICE = EPM7160SQC160-6; - AUTO_DEVICE = EPM7160STC100-6; - AUTO_DEVICE = EPM7160SLC84-6; - AUTO_DEVICE = EPM7128SQC160-6; - AUTO_DEVICE = EPM7128STC100-6; - AUTO_DEVICE = EPM7128SQC100-6; - AUTO_DEVICE = EPM7128SLC84-6; - AUTO_DEVICE = EPM7064STC100-5; - AUTO_DEVICE = EPM7064SLC84-5; - AUTO_DEVICE = EPM7064STC44-5; - AUTO_DEVICE = EPM7064SLC44-5; - AUTO_DEVICE = EPM7032STC44-5; - AUTO_DEVICE = EPM7032SLC44-5; - ASK_BEFORE_ADDING_EXTRA_DEVICES = ON; -END; - -TIMING_POINT -BEGIN - DEVICE_FOR_TIMING_SYNTHESIS = EPM7128STC100-10; - FREQUENCY = 100MHz; - MAINTAIN_STABLE_SYNTHESIS = OFF; - CUT_ALL_CLEAR_PRESET = ON; - CUT_ALL_BIDIR = ON; -END; - -IGNORED_ASSIGNMENTS -BEGIN - FIT_IGNORE_TIMING = ON; - DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF; - IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF; - IGNORE_DEVICE_ASSIGNMENTS = OFF; - IGNORE_LC_ASSIGNMENTS = OFF; - IGNORE_PIN_ASSIGNMENTS = OFF; - IGNORE_CHIP_ASSIGNMENTS = OFF; - IGNORE_TIMING_ASSIGNMENTS = OFF; - IGNORE_LOGIC_OPTION_ASSIGNMENTS = OFF; - IGNORE_CLIQUE_ASSIGNMENTS = OFF; -END; - -LOGIC_OPTIONS -BEGIN - |LR_T1 : TURBO_BIT = ON; - |LR_T0 : TURBO_BIT = ON; - |CLK_WG : TURBO_BIT = ON; - |TG42_BUF : STYLE = WYSIWYG; - |TG42_OUT : STYLE = WYSIWYG; - |XHD_RD : TURBO_BIT = OFF; - |XHD_RES : TURBO_BIT = OFF; - |XHD_WR : TURBO_BIT = OFF; - |XHD1_CS1 : TURBO_BIT = OFF; - |XHD1_CS2 : TURBO_BIT = OFF; - |XHD2_CS1 : TURBO_BIT = OFF; - |XHD2_CS2 : TURBO_BIT = OFF; - |10K_CLK : TURBO_BIT = OFF; - |10K_D0 : TURBO_BIT = OFF; - |REG_P0 : TURBO_BIT = ON; - |REG_P1 : TURBO_BIT = ON; - |REG_P2 : TURBO_BIT = ON; - |TG42_BUF : TURBO_BIT = ON; - |TG42_OUT : TURBO_BIT = ON; - |STWG0 : TURBO_BIT = ON; - |STWG1 : TURBO_BIT = ON; - |STWG2 : TURBO_BIT = ON; - |XCT0 : TURBO_BIT = ON; - |XCT1 : TURBO_BIT = ON; -END; - -GLOBAL_PROJECT_DEVICE_OPTIONS -BEGIN - MULTIVOLT_IO = OFF; - SECURITY_BIT = ON; - MAX7000B_ENABLE_VREFB = OFF; - MAX7000B_ENABLE_VREFA = OFF; - MAX7000B_VCCIO_IOBANK2 = 3.3V; - MAX7000B_VCCIO_IOBANK1 = 3.3V; - CONFIG_EPROM_PULLUP_RESISTOR = ON; - CONFIG_EPROM_USER_CODE = FFFFFFFF; - FLEX_CONFIGURATION_EPROM = AUTO; - MAX7000AE_ENABLE_JTAG = ON; - MAX7000AE_USER_CODE = FFFFFFFF; - FLEX6000_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX10KA_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = ON; - FLEX10K_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF; - FLEX6000_ENABLE_JTAG = OFF; - CONFIG_SCHEME_FLEX_6000 = PASSIVE_SERIAL; - MAX7000S_ENABLE_JTAG = ON; - FLEX10K_ENABLE_LOCK_OUTPUT = OFF; - MAX7000S_USER_CODE = FFFF; - CONFIG_SCHEME_10K = PASSIVE_SERIAL; - FLEX10K_JTAG_USER_CODE = 7F; - ENABLE_INIT_DONE_OUTPUT = OFF; - ENABLE_CHIP_WIDE_OE = OFF; - ENABLE_CHIP_WIDE_RESET = OFF; - nCEO = UNRESERVED; - CLKUSR = UNRESERVED; - ADD17 = UNRESERVED; - ADD16 = UNRESERVED; - ADD15 = UNRESERVED; - ADD14 = UNRESERVED; - ADD13 = UNRESERVED; - ADD0_TO_ADD12 = UNRESERVED; - SDOUT = RESERVED_DRIVES_OUT; - RDCLK = UNRESERVED; - RDYnBUSY = UNRESERVED; - nWS_nRS_nCS_CS = UNRESERVED; - DATA1_TO_DATA7 = UNRESERVED; - DATA0 = RESERVED_TRI_STATED; - FLEX8000_ENABLE_JTAG = OFF; - CONFIG_SCHEME = ACTIVE_SERIAL; - DISABLE_TIME_OUT = OFF; - ENABLE_DCLK_OUTPUT = OFF; - RELEASE_CLEARS = OFF; - AUTO_RESTART = OFF; - USER_CLOCK = OFF; - RESERVED_PINS_PERCENT = 0; - RESERVED_LCELLS_PERCENT = 0; -END; - -GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS -BEGIN - STYLE = NORMAL; - AUTO_GLOBAL_CLEAR = OFF; - AUTO_GLOBAL_CLOCK = OFF; - DEVICE_FAMILY = MAX7000S; - MULTI_LEVEL_SYNTHESIS_MAX9000 = ON; - AUTO_IMPLEMENT_IN_EAB = OFF; - AUTO_OPEN_DRAIN_PINS = ON; - ONE_HOT_STATE_MACHINE_ENCODING = OFF; - AUTO_REGISTER_PACKING = OFF; - AUTO_FAST_IO = OFF; - AUTO_GLOBAL_OE = ON; - AUTO_GLOBAL_PRESET = ON; - MULTI_LEVEL_SYNTHESIS_MAX5000_7000 = OFF; - OPTIMIZE_FOR_SPEED = 5; -END; - -COMPILER_PROCESSING_CONFIGURATION -BEGIN - FITTER_SETTINGS = ADVANCED; - USE_QUARTUS_FITTER = OFF; - PRESERVE_ALL_NODE_NAME_SYNONYMS = OFF; - SMART_RECOMPILE = OFF; - GENERATE_AHDL_TDO_FILE = OFF; - RPT_FILE_USER_ASSIGNMENTS = ON; - RPT_FILE_LCELL_INTERCONNECT = ON; - RPT_FILE_HIERARCHY = ON; - RPT_FILE_EQUATIONS = ON; - LINKED_SNF_EXTRACTOR = OFF; - OPTIMIZE_TIMING_SNF = OFF; - TIMING_SNF_EXTRACTOR = ON; - FUNCTIONAL_SNF_EXTRACTOR = OFF; - DESIGN_DOCTOR_RULES = EPLD; - DESIGN_DOCTOR = OFF; -END; - -COMPILER_INTERFACES_CONFIGURATION -BEGIN - NETLIST_OUTPUT_TIME_SCALE = 0.1ns; - EDIF_INPUT_SHOW_LMF_MAPPING_MESSAGES = OFF; - EDIF_BUS_DELIMITERS = []; - EDIF_FLATTEN_BUS = OFF; - EDIF_OUTPUT_FORCE_0NS_DELAYS = OFF; - EDIF_OUTPUT_INCLUDE_SPECIAL_PRIM = OFF; - EDIF_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - EDIF_OUTPUT_DELAY_CONSTRUCTS = EDO_FILE; - EDIF_OUTPUT_USE_EDC = OFF; - EDIF_INPUT_USE_LMF2 = OFF; - EDIF_INPUT_USE_LMF1 = OFF; - EDIF_OUTPUT_GND = GND; - EDIF_OUTPUT_VCC = VCC; - EDIF_INPUT_GND = GND; - EDIF_INPUT_VCC = VCC; - EDIF_OUTPUT_EDC_FILE = *.edc; - EDIF_INPUT_LMF2 = *.lmf; - EDIF_INPUT_LMF1 = *.lmf; - VHDL_GENERATE_CONFIGURATION_DECLARATION = OFF; - VHDL_OUTPUT_DELAY_CONSTRUCTS = VHO_FILE; - VERILOG_OUTPUT_DELAY_CONSTRUCTS = VO_FILE; - VHDL_FLATTEN_BUS = OFF; - VERILOG_FLATTEN_BUS = OFF; - EDIF_TRUNCATE_HIERARCHY_PATH = OFF; - VHDL_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_TRUNCATE_HIERARCHY_PATH = OFF; - VERILOG_OUTPUT_MAP_ILLEGAL_CHAR = OFF; - VHDL_WRITER_VERSION = VHDL87; - VHDL_READER_VERSION = VHDL87; - SYNOPSYS_MAPPING_EFFORT = MEDIUM; - SYNOPSYS_BOUNDARY_OPTIMIZATION = OFF; - SYNOPSYS_HIERARCHICAL_COMPILATION = ON; - SYNOPSYS_DESIGNWARE = OFF; - SYNOPSYS_COMPILER = DESIGN; - USE_SYNOPSYS_SYNTHESIS = OFF; - VHDL_NETLIST_WRITER = OFF; - VERILOG_NETLIST_WRITER = OFF; - XNF_GENERATE_AHDL_TDX_FILE = ON; - XNF_TRANSLATE_INTERNAL_NODE_NAMES = ON; - XNF_EMULATE_TRI_STATE_BUSES = INTERNAL_LOGIC; - EDIF_OUTPUT_VERSION = 200; - EDIF_NETLIST_WRITER = OFF; -END; - -CUSTOM_DESIGN_DOCTOR_RULES -BEGIN - MASTER_RESET = OFF; - EXPANDER_NETWORKS = ON; - RACE_CONDITIONS = ON; - DELAY_CHAINS = ON; - ASYNCHRONOUS_INPUTS = ON; - PRESET_CLEAR_NETWORKS = ON; - STATIC_HAZARDS_AFTER_SYNTHESIS = OFF; - STATIC_HAZARDS_BEFORE_SYNTHESIS = ON; - MULTI_CLOCK_NETWORKS = ON; - MULTI_LEVEL_CLOCKS = ON; - GATED_CLOCKS = ON; - RIPPLE_CLOCKS = ON; -END; - -SIMULATOR_CONFIGURATION -BEGIN - END_TIME = 25.0us; - BIDIR_PIN = STRONG; - START_TIME = 0.0ns; - GLITCH_TIME = 0.0ns; - GLITCH = OFF; - OSCILLATION_TIME = 0.0ns; - OSCILLATION = OFF; - CHECK_OUTPUTS = OFF; - SETUP_HOLD = OFF; - USE_DEVICE = OFF; -END; - -TIMING_ANALYZER_CONFIGURATION -BEGIN - ANALYSIS_MODE = REGISTERED_PERFORMANCE; - CUT_OFF_RAM_REGISTERED_WE_PATHS = OFF; - LIST_PATH_FREQUENCY = 10MHz; - LIST_PATH_COUNT = 10; - REGISTERED_PERFORMANCE_OPTIONS = NUMBER_OF_PATHS; - INCLUDE_PATHS_LESS_THAN_VALUE = 214.7483647ms; - INCLUDE_PATHS_LESS_THAN = OFF; - INCLUDE_PATHS_GREATER_THAN_VALUE = 0.0ns; - INCLUDE_PATHS_GREATER_THAN = OFF; - DELAY_MATRIX_OPTIONS = SHOW_ALL_PATHS; - CELL_WIDTH = 18; - LIST_ONLY_LONGEST_PATH = ON; - CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; - CUT_OFF_IO_PIN_FEEDBACK = ON; - AUTO_RECALCULATE = OFF; -END; - -OTHER_CONFIGURATION -BEGIN - LAST_MAXPLUS2_VERSION = 10.0; - ROW_PINS_LCELL_INSERT = ON; - CARRY_OUT_PINS_LCELL_INSERT = OFF; - NORMAL_LCELL_INSERT = ON; - EXPLICIT_FAMILY = 1; - FLEX_10K_52_COLUMNS = 40; - DEFAULT_9K_EXP_PER_LCELL = 1/2; - LOCAL_INTERCONNECT_PER_LAB_PERCENT = 100; - LCELLS_PER_ROW_PERCENT = 100; - FAN_IN_PER_LCELL_PERCENT = 100; - EXP_PER_LCELL_PERCENT = 100; - ROW_PINS_PERCENT = 50; - ORIGINAL_MAXPLUS2_VERSION = 9.6; - COMPILER_DATA = "1,1,0,1,0,0,0,1,1,1,1,0,1,1,1"; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX7000 -BEGIN - TURBO_BIT = ON; - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.FLEX8000 -BEGIN - CARRY_CHAIN_LENGTH = 32; - CASCADE_CHAIN_LENGTH = 2; - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = ON; - REFACTORIZATION = ON; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - IGNORE_SOFT_BUFFERS = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = ON; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX7000 -BEGIN - TURBO_BIT = ON; - SLOW_SLEW_RATE = OFF; - XOR_SYNTHESIS = ON; - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = ON; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; - MINIMIZATION = FULL; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE FAST.FLEX8000 -BEGIN - CARRY_CHAIN_LENGTH = 32; - CASCADE_CHAIN_LENGTH = 2; - REGISTER_OPTIMIZATION = ON; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = ON; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = ON; - REDUCE_LOGIC = ON; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = ON; - CARRY_CHAIN = AUTO; - CASCADE_CHAIN = AUTO; - MINIMIZATION = FULL; - IGNORE_SOFT_BUFFERS = ON; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX5000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX7000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.CLASSIC -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = ON; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = ON; - SOFT_BUFFER_INSERTION = OFF; - FAST_IO = OFF; - IGNORE_SOFT_BUFFERS = OFF; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = ON; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN = IGNORE; - CASCADE_CHAIN = IGNORE; -END; - -DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.FLEX8000 -BEGIN - REGISTER_OPTIMIZATION = OFF; - USE_LPM_FOR_AHDL_OPERATORS = OFF; - RESYNTHESIZE_NETWORK = OFF; - MULTI_LEVEL_FACTORING = OFF; - SUBFACTOR_EXTRACTION = OFF; - REFACTORIZATION = OFF; - NOT_GATE_PUSH_BACK = ON; - DUPLICATE_LOGIC_EXTRACTION = OFF; - REDUCE_LOGIC = OFF; - DECOMPOSE_GATES = OFF; - SOFT_BUFFER_INSERTION = ON; - IGNORE_SOFT_BUFFERS = ON; - PARALLEL_EXPANDERS = OFF; - TURBO_BIT = OFF; - XOR_SYNTHESIS = OFF; - SLOW_SLEW_RATE = OFF; - MINIMIZATION = PARTIAL; - CARRY_CHAIN_LENGTH = 32; - CARRY_CHAIN = MANUAL; - CASCADE_CHAIN_LENGTH = 2; - CASCADE_CHAIN = MANUAL; -END; - diff --git a/src/altera/quartus/max/sp2_max.asm.rpt b/src/altera/quartus/max/sp2_max.asm.rpt deleted file mode 100644 index 64aa208..0000000 --- a/src/altera/quartus/max/sp2_max.asm.rpt +++ /dev/null @@ -1,109 +0,0 @@ -Assembler report for sp2_max -Sun Aug 28 03:30:42 2022 -Quartus II Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition - - ---------------------- -; Table of Contents ; ---------------------- - 1. Legal Notice - 2. Assembler Summary - 3. Assembler Settings - 4. Assembler Generated Files - 5. Assembler Device Options: C:/Sprinter/src/altera/quartus/max/sp2_max.pof - 6. Assembler Messages - - - ----------------- -; Legal Notice ; ----------------- -Copyright (C) 1991-2009 Altera Corporation -Your use of Altera Corporation's design tools, logic functions -and other software and tools, and its AMPP partner logic -functions, and any output files from any of the foregoing -(including device programming or simulation files), and any -associated documentation or information are expressly subject -to the terms and conditions of the Altera Program License -Subscription Agreement, Altera MegaCore Function License -Agreement, or other applicable license agreement, including, -without limitation, that your use is for the sole purpose of -programming logic devices manufactured by Altera and sold by -Altera or its authorized distributors. Please refer to the -applicable agreement for further details. - - - -+---------------------------------------------------------------+ -; Assembler Summary ; -+-----------------------+---------------------------------------+ -; Assembler Status ; Successful - Sun Aug 28 03:30:42 2022 ; -; Revision Name ; sp2_max ; -; Top-level Entity Name ; SP2_MAX ; -; Family ; MAX7000S ; -; Device ; EPM7128STC100-10 ; -+-----------------------+---------------------------------------+ - - -+--------------------------------------------------------------------------------------------------------+ -; Assembler Settings ; -+-----------------------------------------------------------------------------+----------+---------------+ -; Option ; Setting ; Default Value ; -+-----------------------------------------------------------------------------+----------+---------------+ -; Security bit ; On ; Off ; -; Use smart compilation ; Off ; Off ; -; Compression mode ; Off ; Off ; -; Clock source for configuration device ; Internal ; Internal ; -; Clock frequency of the configuration device ; 10 MHZ ; 10 MHz ; -; Divide clock frequency by ; 1 ; 1 ; -; Auto user code ; Off ; Off ; -; Use configuration device ; On ; On ; -; Configuration device auto user code ; Off ; Off ; -; Generate Tabular Text File (.ttf) For Target Device ; Off ; Off ; -; Generate Raw Binary File (.rbf) For Target Device ; Off ; Off ; -; Generate Hexadecimal (Intel-Format) Output File (.hexout) for Target Device ; Off ; Off ; -; Hexadecimal Output File start address ; 0 ; 0 ; -; Hexadecimal Output File count direction ; Up ; Up ; -; Generate Serial Vector Format File (.svf) for Target Device ; Off ; Off ; -; Generate a JEDEC STAPL Format File (.jam) for Target Device ; Off ; Off ; -; Generate a compressed Jam STAPL Byte Code 2.0 File (.jbc) for Target Device ; Off ; Off ; -; Generate a compressed Jam STAPL Byte Code 2.0 File (.jbc) for Target Device ; On ; On ; -+-----------------------------------------------------------------------------+----------+---------------+ - - -+------------------------------------------------+ -; Assembler Generated Files ; -+------------------------------------------------+ -; File Name ; -+------------------------------------------------+ -; C:/Sprinter/src/altera/quartus/max/sp2_max.pof ; -+------------------------------------------------+ - - -+--------------------------------------------------------------------------+ -; Assembler Device Options: C:/Sprinter/src/altera/quartus/max/sp2_max.pof ; -+----------------+---------------------------------------------------------+ -; Option ; Setting ; -+----------------+---------------------------------------------------------+ -; Device ; EPM7128STC100-10 ; -; JTAG usercode ; 0x00000000 ; -; Checksum ; 0x00197ABF ; -+----------------+---------------------------------------------------------+ - - -+--------------------+ -; Assembler Messages ; -+--------------------+ -Info: ******************************************************************* -Info: Running Quartus II Assembler - Info: Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition - Info: Processing started: Sun Aug 28 03:30:42 2022 -Info: Command: quartus_asm --read_settings_files=off --write_settings_files=off sp2_max -c sp2_max -Info: Assembler is generating device programming files -Info: Quartus II Assembler was successful. 0 errors, 0 warnings - Info: Peak virtual memory: 199 megabytes - Info: Processing ended: Sun Aug 28 03:30:42 2022 - Info: Elapsed time: 00:00:00 - Info: Total CPU time (on all processors): 00:00:00 - - diff --git a/src/altera/quartus/max/sp2_max.done b/src/altera/quartus/max/sp2_max.done deleted file mode 100644 index f4d59a9..0000000 --- a/src/altera/quartus/max/sp2_max.done +++ /dev/null @@ -1 +0,0 @@ -Sun Aug 28 03:30:44 2022 diff --git a/src/altera/quartus/max/sp2_max.dpf b/src/altera/quartus/max/sp2_max.dpf deleted file mode 100644 index f0b3ecc..0000000 --- a/src/altera/quartus/max/sp2_max.dpf +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/src/altera/quartus/max/sp2_max.eda.rpt b/src/altera/quartus/max/sp2_max.eda.rpt deleted file mode 100644 index 408201d..0000000 --- a/src/altera/quartus/max/sp2_max.eda.rpt +++ /dev/null @@ -1,59 +0,0 @@ -EDA Netlist Writer report for sp2_max -Sun Aug 28 03:26:23 2022 -Quartus II Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition - - ---------------------- -; Table of Contents ; ---------------------- - 1. Legal Notice - 2. EDA Netlist Writer Summary - 3. EDA Netlist Writer Messages - - - ----------------- -; Legal Notice ; ----------------- -Copyright (C) 1991-2009 Altera Corporation -Your use of Altera Corporation's design tools, logic functions -and other software and tools, and its AMPP partner logic -functions, and any output files from any of the foregoing -(including device programming or simulation files), and any -associated documentation or information are expressly subject -to the terms and conditions of the Altera Program License -Subscription Agreement, Altera MegaCore Function License -Agreement, or other applicable license agreement, including, -without limitation, that your use is for the sole purpose of -programming logic devices manufactured by Altera and sold by -Altera or its authorized distributors. Please refer to the -applicable agreement for further details. - - - -+----------------------------------------------------------------------------------+ -; EDA Netlist Writer Summary ; -+---------------------------+------------------------------------------------------+ -; EDA Netlist Writer Status ; No Output Files Generated - Sun Aug 28 03:26:23 2022 ; -; Revision Name ; sp2_max ; -; Top-level Entity Name ; SP2_MAX ; -; Family ; MAX7000S ; -+---------------------------+------------------------------------------------------+ - - -+-----------------------------+ -; EDA Netlist Writer Messages ; -+-----------------------------+ -Info: ******************************************************************* -Info: Running Quartus II EDA Netlist Writer - Info: Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition - Info: Processing started: Sun Aug 28 03:26:23 2022 -Info: Command: quartus_eda --read_settings_files=on --write_settings_files=off sp2_max -c sp2_max -Warning: Can't generate output files. Specify command-line options to generate output files, or update EDA tool settings using GUI or Tcl script. -Info: Quartus II EDA Netlist Writer was successful. 0 errors, 1 warning - Info: Peak virtual memory: 163 megabytes - Info: Processing ended: Sun Aug 28 03:26:23 2022 - Info: Elapsed time: 00:00:00 - Info: Total CPU time (on all processors): 00:00:00 - - diff --git a/src/altera/quartus/max/sp2_max.fit.rpt b/src/altera/quartus/max/sp2_max.fit.rpt deleted file mode 100644 index c95d907..0000000 --- a/src/altera/quartus/max/sp2_max.fit.rpt +++ /dev/null @@ -1,710 +0,0 @@ -Fitter report for sp2_max -Sun Aug 28 03:30:41 2022 -Quartus II Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition - - ---------------------- -; Table of Contents ; ---------------------- - 1. Legal Notice - 2. Fitter Summary - 3. Fitter Settings - 4. Parallel Compilation - 5. Pin-Out File - 6. Fitter Resource Usage Summary - 7. Input Pins - 8. Output Pins - 9. Bidir Pins - 10. All Package Pins - 11. I/O Standard - 12. Dedicated Inputs I/O - 13. Output Pin Default Load For Reported TCO - 14. Fitter Resource Utilization by Entity - 15. Control Signals - 16. Global & Other Fast Signals - 17. Non-Global High Fan-Out Signals - 18. Interconnect Usage Summary - 19. LAB External Interconnect - 20. LAB Macrocells - 21. Parallel Expander - 22. Shareable Expander - 23. Logic Cell Interconnection - 24. Fitter Device Options - 25. Fitter Messages - - - ----------------- -; Legal Notice ; ----------------- -Copyright (C) 1991-2009 Altera Corporation -Your use of Altera Corporation's design tools, logic functions -and other software and tools, and its AMPP partner logic -functions, and any output files from any of the foregoing -(including device programming or simulation files), and any -associated documentation or information are expressly subject -to the terms and conditions of the Altera Program License -Subscription Agreement, Altera MegaCore Function License -Agreement, or other applicable license agreement, including, -without limitation, that your use is for the sole purpose of -programming logic devices manufactured by Altera and sold by -Altera or its authorized distributors. Please refer to the -applicable agreement for further details. - - - -+----------------------------------------------------------------------+ -; Fitter Summary ; -+-----------------------+----------------------------------------------+ -; Fitter Status ; Successful - Sun Aug 28 03:30:40 2022 ; -; Quartus II Version ; 9.0 Build 235 06/17/2009 SP 2 SJ Web Edition ; -; Revision Name ; sp2_max ; -; Top-level Entity Name ; SP2_MAX ; -; Family ; MAX7000S ; -; Device ; EPM7128STC100-10 ; -; Timing Models ; Final ; -; Total macrocells ; 74 / 128 ( 58 % ) ; -; Total pins ; 84 / 84 ( 100 % ) ; -+-----------------------+----------------------------------------------+ - - -+---------------------------------------------------------------------------------------+ -; Fitter Settings ; -+----------------------------------------------------+------------------+---------------+ -; Option ; Setting ; Default Value ; -+----------------------------------------------------+------------------+---------------+ -; Device ; EPM7128STC100-10 ; ; -; Use smart compilation ; Off ; Off ; -; Use TimeQuest Timing Analyzer ; Off ; Off ; -; Optimize Timing for ECOs ; Off ; Off ; -; Regenerate full fit report during ECO compiles ; Off ; Off ; -; Optimize IOC Register Placement for Timing ; On ; On ; -; Limit to One Fitting Attempt ; Off ; Off ; -; Fitter Initial Placement Seed ; 1 ; 1 ; -; Slow Slew Rate ; Off ; Off ; -; Fitter Effort ; Auto Fit ; Auto Fit ; -; Force Fitter to Avoid Periphery Placement Warnings ; Off ; Off ; -+----------------------------------------------------+------------------+---------------+ - - -Parallel compilation was disabled, but you have multiple processors available. Enable parallel compilation to reduce compilation time. -+-------------------------------------+ -; Parallel Compilation ; -+----------------------------+--------+ -; Processors ; Number ; -+----------------------------+--------+ -; Number detected on machine ; 4 ; -; Maximum allowed ; 1 ; -+----------------------------+--------+ - - -+--------------+ -; Pin-Out File ; -+--------------+ -The pin-out file can be found in C:/Sprinter/src/altera/quartus/max/sp2_max.pin. - - -+-------------------------------------------------------+ -; Fitter Resource Usage Summary ; -+-----------------------------------+-------------------+ -; Resource ; Usage ; -+-----------------------------------+-------------------+ -; Logic cells ; 74 / 128 ( 58 % ) ; -; Registers ; 57 / 128 ( 45 % ) ; -; Number of pterms used ; 195 ; -; User inserted logic elements ; 0 ; -; I/O pins ; 84 / 84 ( 100 % ) ; -; -- Clock pins ; 2 / 2 ( 100 % ) ; -; -- Dedicated input pins ; 2 / 2 ( 100 % ) ; -; Global signals ; 2 ; -; Shareable expanders ; 11 / 128 ( 9 % ) ; -; Parallel expanders ; 3 / 120 ( 3 % ) ; -; Cells using turbo bit ; 74 / 128 ( 58 % ) ; -; Maximum fan-out node ; HDD_C[2] ; -; Maximum fan-out ; 21 ; -; Highest non-global fan-out signal ; HDD_C[2] ; -; Highest non-global fan-out ; 21 ; -; Total fan-out ; 438 ; -; Average fan-out ; 2.59 ; -+-----------------------------------+-------------------+ - - -+------------------------------------------------------------------------------------------------------------------------------------------------+ -; Input Pins ; -+----------+-------+----------+-----+-----------------------+--------------------+--------+----------------+--------------+----------------------+ -; Name ; Pin # ; I/O Bank ; LAB ; Combinational Fan-Out ; Registered Fan-Out ; Global ; Input Register ; I/O Standard ; Location assigned by ; -+----------+-------+----------+-----+-----------------------+--------------------+--------+----------------+--------------+----------------------+ -; D0 ; 60 ; -- ; 6 ; 1 ; 0 ; no ; no ; TTL ; User ; -; EPM_RES ; 89 ; -- ; -- ; 2 ; 0 ; yes ; no ; TTL ; User ; -; FDD_C[0] ; 44 ; -- ; 5 ; 14 ; 0 ; no ; no ; TTL ; User ; -; FDD_C[1] ; 45 ; -- ; 5 ; 17 ; 0 ; no ; no ; TTL ; User ; -; FDD_C[2] ; 46 ; -- ; 5 ; 15 ; 0 ; no ; no ; TTL ; User ; -; HDD_C[0] ; 47 ; -- ; 5 ; 16 ; 0 ; no ; no ; TTL ; User ; -; HDD_C[1] ; 42 ; -- ; 5 ; 19 ; 0 ; no ; no ; TTL ; User ; -; HDD_C[2] ; 41 ; -- ; 5 ; 21 ; 0 ; no ; no ; TTL ; User ; -; HDD_C[3] ; 40 ; -- ; 5 ; 18 ; 0 ; no ; no ; TTL ; User ; -; PW_GOOD ; 90 ; -- ; -- ; 1 ; 0 ; no ; no ; TTL ; User ; -; RDAT ; 92 ; -- ; 1 ; 1 ; 0 ; no ; no ; TTL ; User ; -; RSTB ; 25 ; -- ; 3 ; 1 ; 0 ; no ; no ; TTL ; User ; -; SINC_IN ; 69 ; -- ; 7 ; 0 ; 0 ; no ; no ; TTL ; User ; -; SL ; 30 ; -- ; 4 ; 1 ; 0 ; no ; no ; TTL ; User ; -; SR ; 29 ; -- ; 4 ; 1 ; 0 ; no ; no ; TTL ; User ; -; STE ; 94 ; -- ; 1 ; 1 ; 0 ; no ; no ; TTL ; User ; -; TG42_IN ; 87 ; -- ; -- ; 11 ; 0 ; yes ; no ; TTL ; User ; -; TR43 ; 12 ; -- ; 2 ; 2 ; 0 ; no ; no ; TTL ; User ; -; UNUSED1 ; 50 ; -- ; 5 ; 0 ; 0 ; no ; no ; TTL ; Fitter ; -; UNUSED2 ; 27 ; -- ; 4 ; 0 ; 0 ; no ; no ; TTL ; Fitter ; -; UNUSED22 ; 22 ; -- ; 3 ; 0 ; 0 ; no ; no ; TTL ; Fitter ; -; UNUSED24 ; 70 ; -- ; 7 ; 0 ; 0 ; no ; no ; TTL ; Fitter ; -; UNUSED27 ; 7 ; -- ; 2 ; 0 ; 0 ; no ; no ; TTL ; Fitter ; -; UNUSED28 ; 28 ; -- ; 4 ; 0 ; 0 ; no ; no ; TTL ; Fitter ; -; UNUSED33 ; 33 ; -- ; 4 ; 0 ; 0 ; no ; no ; TTL ; User ; -; UNUSED49 ; 49 ; -- ; 5 ; 0 ; 0 ; no ; no ; TTL ; Fitter ; -; UNUSED5 ; 72 ; -- ; 7 ; 0 ; 0 ; no ; no ; TTL ; Fitter ; -; UNUSED50 ; 24 ; -- ; 3 ; 0 ; 0 ; no ; no ; TTL ; Fitter ; -; UNUSED53 ; 53 ; -- ; 6 ; 0 ; 0 ; no ; no ; TTL ; User ; -; UNUSED55 ; 1 ; -- ; 1 ; 0 ; 0 ; no ; no ; TTL ; Fitter ; -; UNUSED63 ; 55 ; -- ; 6 ; 0 ; 0 ; no ; no ; TTL ; Fitter ; -; UNUSED65 ; 65 ; -- ; 7 ; 0 ; 0 ; no ; no ; TTL ; User ; -; UNUSED7 ; 77 ; -- ; 8 ; 0 ; 0 ; no ; no ; TTL ; Fitter ; -; UNUSED70 ; 5 ; -- ; 2 ; 0 ; 0 ; no ; no ; TTL ; Fitter ; -; UNUSED72 ; 2 ; -- ; 1 ; 0 ; 0 ; no ; no ; TTL ; Fitter ; -; UNUSED77 ; 63 ; -- ; 7 ; 0 ; 0 ; no ; no ; TTL ; Fitter ; -; UNUSED78 ; 78 ; -- ; 8 ; 0 ; 0 ; no ; no ; TTL ; User ; -; VGA_IN ; 61 ; -- ; 6 ; 0 ; 0 ; no ; no ; TTL ; User ; -; WD ; 9 ; -- ; 2 ; 2 ; 0 ; no ; no ; TTL ; User ; -; WR_CNF ; 57 ; -- ; 6 ; 1 ; 0 ; no ; no ; TTL ; User ; -; WSTB ; 10 ; -- ; 2 ; 1 ; 0 ; no ; no ; TTL ; User ; -; XACS ; 37 ; -- ; 4 ; 1 ; 0 ; no ; no ; TTL ; User ; -; XA[0] ; 17 ; -- ; 3 ; 0 ; 0 ; no ; no ; TTL ; User ; -; XA[1] ; 21 ; -- ; 3 ; 0 ; 0 ; no ; no ; TTL ; User ; -; XA[2] ; 23 ; -- ; 3 ; 0 ; 0 ; no ; no ; TTL ; User ; -; XHR_RDY ; 88 ; -- ; -- ; 0 ; 0 ; no ; no ; TTL ; User ; -+----------+-------+----------+-----+-----------------------+--------------------+--------+----------------+--------------+----------------------+ - - -+---------------------------------------------------------------------------------------------------------------------------------------------------+ -; Output Pins ; -+------------+-------+----------+-----+-----------------+----------------+------------+---------------+--------------+----------------------+-------+ -; Name ; Pin # ; I/O Bank ; LAB ; Output Register ; Slow Slew Rate ; Open Drain ; TRI Primitive ; I/O Standard ; Location assigned by ; Load ; -+------------+-------+----------+-----+-----------------+----------------+------------+---------------+--------------+----------------------+-------+ -; /WG_RD ; 97 ; -- ; 1 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; /WG_WR ; 93 ; -- ; 1 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; 10K_CLK ; 56 ; -- ; 6 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; 10K_D0 ; 58 ; -- ; 6 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; AUD ; 35 ; -- ; 4 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; BEEP ; 84 ; -- ; 8 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; CLK14 ; 31 ; -- ; 4 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; CLK_WG ; 13 ; -- ; 2 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; CMOS_AS ; 6 ; -- ; 2 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; CMOS_DRD ; 99 ; -- ; 1 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; CMOS_DWR ; 100 ; -- ; 1 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; DENS_X ; 96 ; -- ; 1 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; FDAT ; 14 ; -- ; 2 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; HD_CS ; 52 ; -- ; 6 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; HD_DIR ; 48 ; -- ; 5 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; QDAT ; 16 ; -- ; 3 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; SINC ; 67 ; -- ; 7 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; SINC_H ; 68 ; -- ; 7 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; SINC_V ; 64 ; -- ; 7 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; TG42_BUF ; 36 ; -- ; 4 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; TG42_OUT ; 85 ; -- ; 8 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; WDAT ; 98 ; -- ; 1 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; WR_PDOS ; 8 ; -- ; 2 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; XHD1_CS[1] ; 79 ; -- ; 8 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; XHD1_CS[2] ; 80 ; -- ; 8 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; XHD2_CS[1] ; 81 ; -- ; 8 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; XHD2_CS[2] ; 83 ; -- ; 8 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; XHD_RD ; 76 ; -- ; 8 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; XHD_RES ; 71 ; -- ; 7 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; XHD_WR ; 75 ; -- ; 8 ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -+------------+-------+----------+-----+-----------------+----------------+------------+---------------+--------------+----------------------+-------+ - - -+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -; Bidir Pins ; -+---------+-------+----------+-----+-----------------------+--------------------+--------+----------------+-----------------+----------------+------------+--------------+----------------------+-------+ -; Name ; Pin # ; I/O Bank ; LAB ; Combinational Fan-Out ; Registered Fan-Out ; Global ; Input Register ; Output Register ; Slow Slew Rate ; Open Drain ; I/O Standard ; Location assigned by ; Load ; -+---------+-------+----------+-----+-----------------------+--------------------+--------+----------------+-----------------+----------------+------------+--------------+----------------------+-------+ -; /CONF_X ; 54 ; -- ; 6 ; 0 ; 0 ; no ; no ; no ; no ; yes ; TTL ; User ; 10 pF ; -; CLKZZ ; 32 ; -- ; 4 ; 0 ; 0 ; no ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; SINC_1 ; 20 ; -- ; 3 ; 0 ; 0 ; no ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -; SINC_2 ; 19 ; -- ; 3 ; 0 ; 0 ; no ; no ; no ; no ; no ; TTL ; User ; 10 pF ; -+---------+-------+----------+-----+-----------------------+--------------------+--------+----------------+-----------------+----------------+------------+--------------+----------------------+-------+ - - -+-------------------------------------------------------------------------------------------------------+ -; All Package Pins ; -+----------+------------+----------+----------------+--------+--------------+---------+-----------------+ -; Location ; Pad Number ; I/O Bank ; Pin Name/Usage ; Dir. ; I/O Standard ; Voltage ; User Assignment ; -+----------+------------+----------+----------------+--------+--------------+---------+-----------------+ -; 1 ; 12 ; -- ; UNUSED55 ; input ; TTL ; ; N ; -; 2 ; 13 ; -- ; UNUSED72 ; input ; TTL ; ; N ; -; 3 ; 14 ; -- ; VCCIO ; power ; ; 5.0V ; ; -; 4 ; 15 ; -- ; TDI ; input ; TTL ; ; N ; -; 5 ; 16 ; -- ; UNUSED70 ; input ; TTL ; ; N ; -; 6 ; 17 ; -- ; CMOS_AS ; output ; TTL ; ; Y ; -; 7 ; 18 ; -- ; UNUSED27 ; input ; TTL ; ; N ; -; 8 ; 19 ; -- ; WR_PDOS ; output ; TTL ; ; Y ; -; 9 ; 20 ; -- ; WD ; input ; TTL ; ; Y ; -; 10 ; 21 ; -- ; WSTB ; input ; TTL ; ; Y ; -; 11 ; 22 ; -- ; GND ; gnd ; ; ; ; -; 12 ; 23 ; -- ; TR43 ; input ; TTL ; ; Y ; -; 13 ; 24 ; -- ; CLK_WG ; output ; TTL ; ; Y ; -; 14 ; 25 ; -- ; FDAT ; output ; TTL ; ; Y ; -; 15 ; 26 ; -- ; TMS ; input ; TTL ; ; N ; -; 16 ; 27 ; -- ; QDAT ; output ; TTL ; ; Y ; -; 17 ; 28 ; -- ; XA[0] ; input ; TTL ; ; Y ; -; 18 ; 29 ; -- ; VCCIO ; power ; ; 5.0V ; ; -; 19 ; 30 ; -- ; SINC_2 ; bidir ; TTL ; ; Y ; -; 20 ; 31 ; -- ; SINC_1 ; bidir ; TTL ; ; Y ; -; 21 ; 32 ; -- ; XA[1] ; input ; TTL ; ; Y ; -; 22 ; 33 ; -- ; UNUSED22 ; input ; TTL ; ; N ; -; 23 ; 34 ; -- ; XA[2] ; input ; TTL ; ; Y ; -; 24 ; 35 ; -- ; UNUSED50 ; input ; TTL ; ; N ; -; 25 ; 36 ; -- ; RSTB ; input ; TTL ; ; Y ; -; 26 ; 37 ; -- ; GND ; gnd ; ; ; ; -; 27 ; 38 ; -- ; UNUSED2 ; input ; TTL ; ; N ; -; 28 ; 39 ; -- ; UNUSED28 ; input ; TTL ; ; N ; -; 29 ; 40 ; -- ; SR ; input ; TTL ; ; Y ; -; 30 ; 41 ; -- ; SL ; input ; TTL ; ; Y ; -; 31 ; 42 ; -- ; CLK14 ; output ; TTL ; ; Y ; -; 32 ; 43 ; -- ; CLKZZ ; bidir ; TTL ; ; Y ; -; 33 ; 44 ; -- ; UNUSED33 ; input ; TTL ; ; Y ; -; 34 ; 45 ; -- ; VCCIO ; power ; ; 5.0V ; ; -; 35 ; 46 ; -- ; AUD ; output ; TTL ; ; Y ; -; 36 ; 47 ; -- ; TG42_BUF ; output ; TTL ; ; Y ; -; 37 ; 48 ; -- ; XACS ; input ; TTL ; ; Y ; -; 38 ; 49 ; -- ; GND ; gnd ; ; ; ; -; 39 ; 50 ; -- ; VCCINT ; power ; ; 5.0V ; ; -; 40 ; 51 ; -- ; HDD_C[3] ; input ; TTL ; ; Y ; -; 41 ; 52 ; -- ; HDD_C[2] ; input ; TTL ; ; Y ; -; 42 ; 53 ; -- ; HDD_C[1] ; input ; TTL ; ; Y ; -; 43 ; 54 ; -- ; GND ; gnd ; ; ; ; -; 44 ; 55 ; -- ; FDD_C[0] ; input ; TTL ; ; Y ; -; 45 ; 56 ; -- ; FDD_C[1] ; input ; TTL ; ; Y ; -; 46 ; 57 ; -- ; FDD_C[2] ; input ; TTL ; ; Y ; -; 47 ; 58 ; -- ; HDD_C[0] ; input ; TTL ; ; Y ; -; 48 ; 59 ; -- ; HD_DIR ; output ; TTL ; ; Y ; -; 49 ; 60 ; -- ; UNUSED49 ; input ; TTL ; ; N ; -; 50 ; 61 ; -- ; UNUSED1 ; input ; TTL ; ; N ; -; 51 ; 62 ; -- ; VCCIO ; power ; ; 5.0V ; ; -; 52 ; 63 ; -- ; HD_CS ; output ; TTL ; ; Y ; -; 53 ; 64 ; -- ; UNUSED53 ; input ; TTL ; ; Y ; -; 54 ; 65 ; -- ; /CONF_X ; bidir ; TTL ; ; Y ; -; 55 ; 66 ; -- ; UNUSED63 ; input ; TTL ; ; N ; -; 56 ; 67 ; -- ; 10K_CLK ; output ; TTL ; ; Y ; -; 57 ; 68 ; -- ; WR_CNF ; input ; TTL ; ; Y ; -; 58 ; 69 ; -- ; 10K_D0 ; output ; TTL ; ; Y ; -; 59 ; 70 ; -- ; GND ; gnd ; ; ; ; -; 60 ; 71 ; -- ; D0 ; input ; TTL ; ; Y ; -; 61 ; 72 ; -- ; VGA_IN ; input ; TTL ; ; Y ; -; 62 ; 73 ; -- ; TCK ; input ; TTL ; ; N ; -; 63 ; 74 ; -- ; UNUSED77 ; input ; TTL ; ; N ; -; 64 ; 75 ; -- ; SINC_V ; output ; TTL ; ; Y ; -; 65 ; 76 ; -- ; UNUSED65 ; input ; TTL ; ; Y ; -; 66 ; 77 ; -- ; VCCIO ; power ; ; 5.0V ; ; -; 67 ; 78 ; -- ; SINC ; output ; TTL ; ; Y ; -; 68 ; 79 ; -- ; SINC_H ; output ; TTL ; ; Y ; -; 69 ; 80 ; -- ; SINC_IN ; input ; TTL ; ; Y ; -; 70 ; 81 ; -- ; UNUSED24 ; input ; TTL ; ; N ; -; 71 ; 82 ; -- ; XHD_RES ; output ; TTL ; ; Y ; -; 72 ; 83 ; -- ; UNUSED5 ; input ; TTL ; ; N ; -; 73 ; 84 ; -- ; TDO ; output ; TTL ; ; N ; -; 74 ; 85 ; -- ; GND ; gnd ; ; ; ; -; 75 ; 86 ; -- ; XHD_WR ; output ; TTL ; ; Y ; -; 76 ; 87 ; -- ; XHD_RD ; output ; TTL ; ; Y ; -; 77 ; 88 ; -- ; UNUSED7 ; input ; TTL ; ; N ; -; 78 ; 89 ; -- ; UNUSED78 ; input ; TTL ; ; Y ; -; 79 ; 90 ; -- ; XHD1_CS[1] ; output ; TTL ; ; Y ; -; 80 ; 91 ; -- ; XHD1_CS[2] ; output ; TTL ; ; Y ; -; 81 ; 92 ; -- ; XHD2_CS[1] ; output ; TTL ; ; Y ; -; 82 ; 93 ; -- ; VCCIO ; power ; ; 5.0V ; ; -; 83 ; 94 ; -- ; XHD2_CS[2] ; output ; TTL ; ; Y ; -; 84 ; 95 ; -- ; BEEP ; output ; TTL ; ; Y ; -; 85 ; 96 ; -- ; TG42_OUT ; output ; TTL ; ; Y ; -; 86 ; 97 ; -- ; GND ; gnd ; ; ; ; -; 87 ; 98 ; -- ; TG42_IN ; input ; TTL ; ; Y ; -; 88 ; 99 ; -- ; XHR_RDY ; input ; TTL ; ; Y ; -; 89 ; 0 ; -- ; EPM_RES ; input ; TTL ; ; Y ; -; 90 ; 1 ; -- ; PW_GOOD ; input ; TTL ; ; Y ; -; 91 ; 2 ; -- ; VCCINT ; power ; ; 5.0V ; ; -; 92 ; 3 ; -- ; RDAT ; input ; TTL ; ; Y ; -; 93 ; 4 ; -- ; /WG_WR ; output ; TTL ; ; Y ; -; 94 ; 5 ; -- ; STE ; input ; TTL ; ; Y ; -; 95 ; 6 ; -- ; GND ; gnd ; ; ; ; -; 96 ; 7 ; -- ; DENS_X ; output ; TTL ; ; Y ; -; 97 ; 8 ; -- ; /WG_RD ; output ; TTL ; ; Y ; -; 98 ; 9 ; -- ; WDAT ; output ; TTL ; ; Y ; -; 99 ; 10 ; -- ; CMOS_DRD ; output ; TTL ; ; Y ; -; 100 ; 11 ; -- ; CMOS_DWR ; output ; TTL ; ; Y ; -+----------+------------+----------+----------------+--------+--------------+---------+-----------------+ -Note: Pin directions (input, output or bidir) are based on device operating in user mode. - - -+--------------------------------------------------------------------------------------------------+ -; I/O Standard ; -+--------------+------------+----------------------+-------------------+-------------------+-------+ -; I/O Standard ; Input Vref ; Dedicated Input Pins ; Pins in I/O Bank1 ; Pins in I/O Bank2 ; Total ; -+--------------+------------+----------------------+-------------------+-------------------+-------+ -; TTL ; - ; 4 ; 0 ; 0 ; 4 ; -+--------------+------------+----------------------+-------------------+-------------------+-------+ - - -+-----------------------------------------------------------------------+ -; Dedicated Inputs I/O ; -+---------+-------+-------+-------+--------------+------------+---------+ -; Name ; Pin # ; Type ; VCCIO ; I/O Standard ; Input Vref ; Current ; -+---------+-------+-------+-------+--------------+------------+---------+ -; EPM_RES ; 89 ; Input ; -- ; TTL ; - ; 0 mA ; -; PW_GOOD ; 90 ; Input ; -- ; TTL ; - ; 0 mA ; -; TG42_IN ; 87 ; Input ; -- ; TTL ; - ; 0 mA ; -; XHR_RDY ; 88 ; Input ; -- ; TTL ; - ; 0 mA ; -+---------+-------+-------+-------+--------------+------------+---------+ - - -+-----------------------------------------------+ -; Output Pin Default Load For Reported TCO ; -+--------------+-------+------------------------+ -; I/O Standard ; Load ; Termination Resistance ; -+--------------+-------+------------------------+ -; 3.3-V LVTTL ; 10 pF ; Not Available ; -; 3.3-V LVCMOS ; 10 pF ; Not Available ; -; TTL ; 10 pF ; Not Available ; -+--------------+-------+------------------------+ -Note: User assignments will override these defaults. The user specified values are listed in the Output Pins and Bidir Pins tables. - - -+------------------------------------------------------------------------------------------------+ -; Fitter Resource Utilization by Entity ; -+----------------------------+------------+------+--------------------------------+--------------+ -; Compilation Hierarchy Node ; Macrocells ; Pins ; Full Hierarchy Name ; Library Name ; -+----------------------------+------------+------+--------------------------------+--------------+ -; |SP2_MAX ; 74 ; 84 ; |SP2_MAX ; work ; -; |lpm_counter:CTH_rtl_2| ; 6 ; 0 ; |SP2_MAX|lpm_counter:CTH_rtl_2 ; work ; -; |lpm_counter:CTV_rtl_1| ; 9 ; 0 ; |SP2_MAX|lpm_counter:CTV_rtl_1 ; work ; -; |lpm_counter:CT_rtl_0| ; 4 ; 0 ; |SP2_MAX|lpm_counter:CT_rtl_0 ; work ; -+----------------------------+------------+------+--------------------------------+--------------+ - - -+-----------------------------------------------------------------------------------------------------------------------------+ -; Control Signals ; -+------------------------------+----------+---------+----------------------+--------+----------------------+------------------+ -; Name ; Location ; Fan-Out ; Usage ; Global ; Global Resource Used ; Global Line Name ; -+------------------------------+----------+---------+----------------------+--------+----------------------+------------------+ -; $00049~4 ; SEXP114 ; 2 ; Preset ; no ; -- ; -- ; -; /RESET ; LC85 ; 11 ; Preset ; no ; -- ; -- ; -; CT_WG ; LC26 ; 6 ; Clock ; no ; -- ; -- ; -; CT_WG1~8bal ; LC28 ; 7 ; Clock ; no ; -- ; -- ; -; CT_WG~4 ; SEXP19 ; 1 ; Clock ; no ; -- ; -- ; -; CT_WG~5 ; SEXP18 ; 1 ; Clock ; no ; -- ; -- ; -; CT_WG~6 ; SEXP17 ; 1 ; Clock ; no ; -- ; -- ; -; EPM_RES ; PIN_89 ; 2 ; Async. clear ; yes ; On ; -- ; -; FDD_1440~10 ; SEXP81 ; 1 ; Preset ; no ; -- ; -- ; -; FDD_C[0] ; PIN_44 ; 14 ; Async. clear ; no ; -- ; -- ; -; FDD_C[1] ; PIN_45 ; 17 ; Async. clear ; no ; -- ; -- ; -; FDD_C[2] ; PIN_46 ; 15 ; Async. clear, Preset ; no ; -- ; -- ; -; HDD_CLK ; LC88 ; 10 ; Clock ; no ; -- ; -- ; -; HDD_C[0] ; PIN_47 ; 16 ; Async. clear ; no ; -- ; -- ; -; HDD_C[1] ; PIN_42 ; 19 ; Async. clear ; no ; -- ; -- ; -; HDD_C[2] ; PIN_41 ; 21 ; Async. clear ; no ; -- ; -- ; -; HDD_C[3] ; PIN_40 ; 18 ; Async. clear ; no ; -- ; -- ; -; SINC_HT ; LC104 ; 16 ; Clock ; no ; -- ; -- ; -; SINC_VT ; LC99 ; 10 ; Clock ; no ; -- ; -- ; -; STWG[2] ; LC19 ; 4 ; Clock ; no ; -- ; -- ; -; STWG[2]~6bal ; LC16 ; 3 ; Clock ; no ; -- ; -- ; -; TG42_IN ; PIN_87 ; 11 ; Clock ; yes ; On ; -- ; -; XACS ; PIN_37 ; 1 ; Async. clear ; no ; -- ; -- ; -; XCT[0] ; LC124 ; 2 ; Clock ; no ; -- ; -- ; -; XCT[1] ; LC56 ; 15 ; Clock ; no ; -- ; -- ; -; XCT[2]~11 ; SEXP115 ; 1 ; Clock ; no ; -- ; -- ; -; XCT[2]~12 ; SEXP116 ; 1 ; Clock ; no ; -- ; -- ; -; XCT[2]~3 ; SEXP51 ; 1 ; Clock ; no ; -- ; -- ; -; XCT[2]~4 ; SEXP49 ; 1 ; Clock ; no ; -- ; -- ; -; lpm_counter:CT_rtl_0|dffs[3] ; LC53 ; 9 ; Clock ; no ; -- ; -- ; -+------------------------------+----------+---------+----------------------+--------+----------------------+------------------+ - - -+------------------------------------------------------------------------+ -; Global & Other Fast Signals ; -+---------+----------+---------+----------------------+------------------+ -; Name ; Location ; Fan-Out ; Global Resource Used ; Global Line Name ; -+---------+----------+---------+----------------------+------------------+ -; EPM_RES ; PIN_89 ; 2 ; On ; -- ; -; TG42_IN ; PIN_87 ; 11 ; On ; -- ; -+---------+----------+---------+----------------------+------------------+ - - -+-----------------------------------------+ -; Non-Global High Fan-Out Signals ; -+-------------------------------+---------+ -; Name ; Fan-Out ; -+-------------------------------+---------+ -; HDD_C[2] ; 21 ; -; HDD_C[1] ; 19 ; -; HDD_C[3] ; 18 ; -; FDD_C[1] ; 17 ; -; HDD_C[0] ; 16 ; -; SINC_HT ; 16 ; -; FDD_C[2] ; 15 ; -; XCT[1] ; 15 ; -; FDD_C[0] ; 14 ; -; /RESET ; 11 ; -; HDD_CLK ; 10 ; -; SINC_VT ; 10 ; -; lpm_counter:CTV_rtl_1|dffs[0] ; 9 ; -; lpm_counter:CT_rtl_0|dffs[3] ; 9 ; -; lpm_counter:CTV_rtl_1|dffs[2] ; 8 ; -; CT_WG1~8bal ; 7 ; -; THDD~2 ; 7 ; -; lpm_counter:CTV_rtl_1|dffs[3] ; 7 ; -; lpm_counter:CTV_rtl_1|dffs[1] ; 7 ; -; $00021 ; 6 ; -; CT_WG ; 6 ; -; FDD_1440 ; 6 ; -; lpm_counter:CTV_rtl_1|dffs[4] ; 6 ; -; WGR[3] ; 5 ; -; WGR[1] ; 5 ; -; WGR[0] ; 5 ; -; WGR[2] ; 5 ; -; NTHDD~11 ; 5 ; -; lpm_counter:CTV_rtl_1|dffs[5] ; 5 ; -; lpm_counter:CTH_rtl_2|dffs[2] ; 5 ; -; lpm_counter:CTH_rtl_2|dffs[0] ; 5 ; -; lpm_counter:CT_rtl_0|dffs[0] ; 5 ; -; STWG[2] ; 4 ; -; RDAT_X~6 ; 4 ; -; lpm_counter:CTV_rtl_1|dffs[6] ; 4 ; -; lpm_counter:CTH_rtl_2|dffs[3] ; 4 ; -; lpm_counter:CTH_rtl_2|dffs[1] ; 4 ; -; STWG[2]~6bal ; 3 ; -; REG_P[1] ; 3 ; -; REG_P[0] ; 3 ; -; LR_T[0] ; 3 ; -; LR_T[1] ; 3 ; -; TURBING~5 ; 3 ; -; CNF_OFF ; 3 ; -; lpm_counter:CTV_rtl_1|dffs[8] ; 3 ; -; lpm_counter:CTV_rtl_1|dffs[7] ; 3 ; -; lpm_counter:CTH_rtl_2|dffs[5] ; 3 ; -; lpm_counter:CTH_rtl_2|dffs[4] ; 3 ; -; NT320~2 ; 3 ; -; TR43 ; 2 ; -+-------------------------------+---------+ - - -+-------------------------------------------------+ -; Interconnect Usage Summary ; -+----------------------------+--------------------+ -; Interconnect Resource Type ; Usage ; -+----------------------------+--------------------+ -; Output enables ; 1 / 6 ( 17 % ) ; -; PIA buffers ; 119 / 288 ( 41 % ) ; -; PIAs ; 127 / 288 ( 44 % ) ; -+----------------------------+--------------------+ - - -+-----------------------------------------------------------------------------+ -; LAB External Interconnect ; -+-----------------------------------------------+-----------------------------+ -; LAB External Interconnects (Average = 15.88) ; Number of LABs (Total = 8) ; -+-----------------------------------------------+-----------------------------+ -; 0 - 2 ; 1 ; -; 3 - 5 ; 0 ; -; 6 - 8 ; 1 ; -; 9 - 11 ; 0 ; -; 12 - 14 ; 1 ; -; 15 - 17 ; 2 ; -; 18 - 20 ; 0 ; -; 21 - 23 ; 1 ; -; 24 - 26 ; 1 ; -; 27 - 29 ; 1 ; -+-----------------------------------------------+-----------------------------+ - - -+----------------------------------------------------------------------+ -; LAB Macrocells ; -+----------------------------------------+-----------------------------+ -; Number of Macrocells (Average = 9.25) ; Number of LABs (Total = 8) ; -+----------------------------------------+-----------------------------+ -; 0 ; 0 ; -; 1 ; 1 ; -; 2 ; 0 ; -; 3 ; 0 ; -; 4 ; 2 ; -; 5 ; 1 ; -; 6 ; 0 ; -; 7 ; 0 ; -; 8 ; 0 ; -; 9 ; 0 ; -; 10 ; 0 ; -; 11 ; 0 ; -; 12 ; 0 ; -; 13 ; 0 ; -; 14 ; 1 ; -; 15 ; 2 ; -; 16 ; 1 ; -+----------------------------------------+-----------------------------+ - - -+---------------------------------------------------------+ -; Parallel Expander ; -+--------------------------+------------------------------+ -; Parallel Expander Length ; Number of Parallel Expanders ; -+--------------------------+------------------------------+ -; 0 ; 0 ; -; 1 ; 3 ; -+--------------------------+------------------------------+ - - -+-------------------------------------------------------------------------------+ -; Shareable Expander ; -+-------------------------------------------------+-----------------------------+ -; Number of shareable expanders (Average = 1.38) ; Number of LABs (Total = 4) ; -+-------------------------------------------------+-----------------------------+ -; 0 ; 4 ; -; 1 ; 0 ; -; 2 ; 2 ; -; 3 ; 1 ; -; 4 ; 1 ; -+-------------------------------------------------+-----------------------------+ - - -+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -; Logic Cell Interconnection ; -+-----+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -; LAB ; Logic Cell ; Input ; Output ; -+-----+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -; A ; LC15 ; lpm_counter:CTV_rtl_1|dffs[0], SINC_HT ; lpm_counter:CTV_rtl_1|dffs[2], lpm_counter:CTV_rtl_1|dffs[3], lpm_counter:CTV_rtl_1|dffs[4], lpm_counter:CTV_rtl_1|dffs[5], lpm_counter:CTV_rtl_1|dffs[6], lpm_counter:CTV_rtl_1|dffs[7], lpm_counter:CTV_rtl_1|dffs[8] ; -; A ; LC6 ; HDD_C[3], HDD_C[1], FDD_C[1], FDD_C[0], HDD_C[2], HDD_C[0], HDD_CLK, FDD_C[2] ; CMOS_DRD ; -; A ; LC12 ; SL, WD, TR43, STWG[2] ; REG_P[0], REG_P[1], REG_P[2] ; -; A ; LC16 ; STWG[2], CT_WG ; STWG[0], STWG[1], STWG[2] ; -; A ; LC10 ; WD, TR43, SR, STWG[2] ; REG_P[0], REG_P[1], REG_P[2] ; -; A ; LC5 ; HDD_C[3], HDD_C[1], FDD_C[1], FDD_C[0], HDD_C[2], HDD_C[0], HDD_CLK, FDD_C[2] ; CMOS_DWR ; -; A ; LC1 ; lpm_counter:CTV_rtl_1|dffs[0], SINC_HT ; lpm_counter:CTV_rtl_1|dffs[0], lpm_counter:CTV_rtl_1|dffs[1], lpm_counter:CTV_rtl_1|dffs[2], lpm_counter:CTV_rtl_1|dffs[3], lpm_counter:CTV_rtl_1|dffs[4], lpm_counter:CTV_rtl_1|dffs[5], lpm_counter:CTV_rtl_1|dffs[6], lpm_counter:CTV_rtl_1|dffs[7], lpm_counter:CTV_rtl_1|dffs[8] ; -; A ; LC14 ; FDD_C[0], FDD_C[1], HDD_C[2], HDD_C[0], HDD_C[3], HDD_C[1], HDD_CLK, FDD_C[2] ; /WG_WR ; -; A ; LC9 ; FDD_C[1], FDD_C[0], HDD_C[2], HDD_C[0], HDD_C[3], HDD_C[1], HDD_CLK, FDD_C[2] ; /WG_RD ; -; A ; LC4 ; LR_T[0], LR_T[1], REG_P[0], REG_P[1], CT_WG ; REG_P[0], REG_P[1], REG_P[2] ; -; A ; LC2 ; LR_T[0], REG_P[0], REG_P[1], LR_T[1], CT_WG ; REG_P[0], REG_P[1], REG_P[2] ; -; A ; LC11 ; ; DENS_X ; -; A ; LC8 ; REG_P[1], REG_P[0], LR_T[1], LR_T[0], CT_WG ; WDAT ; -; A ; LC3 ; XACS, /RESET ; CLKZZ, HDD_CLK, FDD_1440 ; -; B ; LC29 ; HDD_C[3], HDD_C[1], FDD_C[1], FDD_C[0], HDD_C[2], HDD_C[0], HDD_CLK, FDD_C[2] ; CMOS_AS ; -; B ; LC17 ; RDAT_X~6, $00023, CT_WG1~8bal ; FDAT, WGR[2], WGR[0], WGR[1], WGR[3], WGR[4] ; -; B ; LC18 ; lpm_counter:CT_rtl_0|dffs[0], XCT[1] ; lpm_counter:CT_rtl_0|dffs[2], lpm_counter:CT_rtl_0|dffs[3] ; -; B ; LC23 ; STWG[0], STWG[2]~6bal ; STWG[2] ; -; B ; LC19 ; STWG[1], STWG[0], STWG[2]~6bal ; CLK_WG, LR_T[1], LR_T[0], STWG[2]~6bal ; -; B ; LC22 ; RDAT_X~6, CT_WG1~8bal ; $00021 ; -; B ; LC32 ; TURBING~5, FDD_1440, STE, RSTB, WSTB ; TURBING~5, CT_WG~5, CT_WG~6 ; -; B ; LC31 ; STWG[2]~6bal ; STWG[1], STWG[2] ; -; B ; LC25 ; FDD_C[0], FDD_C[1], HDD_C[2], HDD_C[0], HDD_C[3], HDD_C[1], HDD_CLK, FDD_C[2] ; WR_PDOS ; -; B ; LC27 ; WGR[2], WGR[3], $00021, WGR[1], WGR[0], CT_WG1~8bal ; WGR[2], WGR[0], WGR[1], WGR[3], WGR[4] ; -; B ; LC21 ; RDAT_X~11, RDAT_X~6, FDD_1440, lpm_counter:CT_rtl_0|dffs[0], RDAT, XCT[1] ; RDAT_X~6, $00023, $00021, RDAT_X~11 ; -; B ; LC20 ; RDAT_X~6, FDD_1440, XCT[1] ; RDAT_X~6 ; -; B ; LC26 ; CT_WG~4, CT_WG~5, CT_WG~6 ; CT_WG~4, CT_WG~6, REG_P[0], REG_P[1], REG_P[2], STWG[2]~6bal ; -; B ; LC28 ; FDD_1440, lpm_counter:CT_rtl_0|dffs[0], XCT[1] ; $00023, $00021, WGR[2], WGR[0], WGR[1], WGR[3], WGR[4] ; -; B ; LC24 ; $00021, WGR[2], WGR[1], WGR[3], WGR[0], CT_WG1~8bal ; WGR[2], WGR[0], WGR[1], WGR[3], WGR[4] ; -; C ; LC44 ; WGR[3], $00021, WGR[2], WGR[1], WGR[0], CT_WG1~8bal ; WGR[2], WGR[0], WGR[1], WGR[3], WGR[4] ; -; C ; LC35 ; lpm_counter:CT_rtl_0|dffs[3] ; lpm_counter:CTH_rtl_2|dffs[1], lpm_counter:CTH_rtl_2|dffs[2], lpm_counter:CTH_rtl_2|dffs[3], lpm_counter:CTH_rtl_2|dffs[4], lpm_counter:CTH_rtl_2|dffs[5] ; -; C ; LC39 ; lpm_counter:CTH_rtl_2|dffs[0], lpm_counter:CT_rtl_0|dffs[3] ; lpm_counter:CTH_rtl_2|dffs[2], lpm_counter:CTH_rtl_2|dffs[3], lpm_counter:CTH_rtl_2|dffs[4], lpm_counter:CTH_rtl_2|dffs[5] ; -; C ; LC37 ; SINC_HT, lpm_counter:CTH_rtl_2|dffs[1], lpm_counter:CTH_rtl_2|dffs[0], lpm_counter:CTH_rtl_2|dffs[2], lpm_counter:CT_rtl_0|dffs[3] ; lpm_counter:CTH_rtl_2|dffs[2], lpm_counter:CTH_rtl_2|dffs[3], lpm_counter:CTH_rtl_2|dffs[4], lpm_counter:CTH_rtl_2|dffs[5], SINC_HT ; -; C ; LC42 ; SINC_HT, lpm_counter:CTH_rtl_2|dffs[2], lpm_counter:CTH_rtl_2|dffs[1], lpm_counter:CTH_rtl_2|dffs[0], lpm_counter:CTH_rtl_2|dffs[3], lpm_counter:CT_rtl_0|dffs[3] ; lpm_counter:CTH_rtl_2|dffs[3], lpm_counter:CTH_rtl_2|dffs[4], lpm_counter:CTH_rtl_2|dffs[5], SINC_HT ; -; C ; LC40 ; SINC_HT, lpm_counter:CTH_rtl_2|dffs[3], lpm_counter:CTH_rtl_2|dffs[2], lpm_counter:CTH_rtl_2|dffs[1], lpm_counter:CTH_rtl_2|dffs[0], lpm_counter:CTH_rtl_2|dffs[4], lpm_counter:CT_rtl_0|dffs[3] ; lpm_counter:CTH_rtl_2|dffs[4], lpm_counter:CTH_rtl_2|dffs[5], SINC_HT ; -; C ; LC41 ; SINC_HT, lpm_counter:CTH_rtl_2|dffs[4], lpm_counter:CTH_rtl_2|dffs[3], lpm_counter:CTH_rtl_2|dffs[2], lpm_counter:CTH_rtl_2|dffs[1], lpm_counter:CTH_rtl_2|dffs[0], lpm_counter:CTH_rtl_2|dffs[5], lpm_counter:CT_rtl_0|dffs[3] ; lpm_counter:CTH_rtl_2|dffs[5], SINC_HT, SINC_1 ; -; C ; LC34 ; SINC_VT, lpm_counter:CTV_rtl_1|dffs[1], lpm_counter:CTV_rtl_1|dffs[0], lpm_counter:CTV_rtl_1|dffs[2], SINC_HT ; lpm_counter:CTV_rtl_1|dffs[2], lpm_counter:CTV_rtl_1|dffs[3], lpm_counter:CTV_rtl_1|dffs[4], lpm_counter:CTV_rtl_1|dffs[5], lpm_counter:CTV_rtl_1|dffs[6], lpm_counter:CTV_rtl_1|dffs[7], lpm_counter:CTV_rtl_1|dffs[8], SINC_VT ; -; C ; LC47 ; SINC_VT, lpm_counter:CTV_rtl_1|dffs[2], lpm_counter:CTV_rtl_1|dffs[1], lpm_counter:CTV_rtl_1|dffs[0], lpm_counter:CTV_rtl_1|dffs[3], SINC_HT ; lpm_counter:CTV_rtl_1|dffs[3], lpm_counter:CTV_rtl_1|dffs[4], lpm_counter:CTV_rtl_1|dffs[5], lpm_counter:CTV_rtl_1|dffs[6], lpm_counter:CTV_rtl_1|dffs[7], lpm_counter:CTV_rtl_1|dffs[8], SINC_VT ; -; C ; LC48 ; SINC_VT, lpm_counter:CTV_rtl_1|dffs[3], lpm_counter:CTV_rtl_1|dffs[2], lpm_counter:CTV_rtl_1|dffs[1], lpm_counter:CTV_rtl_1|dffs[0], lpm_counter:CTV_rtl_1|dffs[4], SINC_HT ; lpm_counter:CTV_rtl_1|dffs[4], lpm_counter:CTV_rtl_1|dffs[5], lpm_counter:CTV_rtl_1|dffs[6], lpm_counter:CTV_rtl_1|dffs[7], lpm_counter:CTV_rtl_1|dffs[8], SINC_VT ; -; C ; LC45 ; SINC_VT, lpm_counter:CTV_rtl_1|dffs[5], lpm_counter:CTV_rtl_1|dffs[4], lpm_counter:CTV_rtl_1|dffs[3], lpm_counter:CTV_rtl_1|dffs[2], lpm_counter:CTV_rtl_1|dffs[1], lpm_counter:CTV_rtl_1|dffs[0], lpm_counter:CTV_rtl_1|dffs[6], SINC_HT ; lpm_counter:CTV_rtl_1|dffs[6], lpm_counter:CTV_rtl_1|dffs[7], lpm_counter:CTV_rtl_1|dffs[8], SINC_VT ; -; C ; LC36 ; SINC_VT, lpm_counter:CTV_rtl_1|dffs[6], lpm_counter:CTV_rtl_1|dffs[5], lpm_counter:CTV_rtl_1|dffs[4], lpm_counter:CTV_rtl_1|dffs[3], lpm_counter:CTV_rtl_1|dffs[2], lpm_counter:CTV_rtl_1|dffs[1], lpm_counter:CTV_rtl_1|dffs[0], lpm_counter:CTV_rtl_1|dffs[7], SINC_HT ; lpm_counter:CTV_rtl_1|dffs[7], lpm_counter:CTV_rtl_1|dffs[8], SINC_VT ; -; C ; LC43 ; SINC_VT, lpm_counter:CTV_rtl_1|dffs[7], lpm_counter:CTV_rtl_1|dffs[6], lpm_counter:CTV_rtl_1|dffs[5], lpm_counter:CTV_rtl_1|dffs[4], lpm_counter:CTV_rtl_1|dffs[3], lpm_counter:CTV_rtl_1|dffs[2], lpm_counter:CTV_rtl_1|dffs[1], lpm_counter:CTV_rtl_1|dffs[0], lpm_counter:CTV_rtl_1|dffs[8], SINC_HT ; lpm_counter:CTV_rtl_1|dffs[8], SINC_VT, SINC_2 ; -; C ; LC38 ; SINC_VT, lpm_counter:CTV_rtl_1|dffs[4], lpm_counter:CTV_rtl_1|dffs[3], lpm_counter:CTV_rtl_1|dffs[2], lpm_counter:CTV_rtl_1|dffs[1], lpm_counter:CTV_rtl_1|dffs[0], lpm_counter:CTV_rtl_1|dffs[5], SINC_HT ; lpm_counter:CTV_rtl_1|dffs[5], lpm_counter:CTV_rtl_1|dffs[6], lpm_counter:CTV_rtl_1|dffs[7], lpm_counter:CTV_rtl_1|dffs[8], SINC_VT ; -; C ; LC33 ; WGR[3], WGR[1], WGR[2], WGR[0], $00021, CT_WG1~8bal ; WGR[2], WGR[0], WGR[1], WGR[3], WGR[4] ; -; C ; LC46 ; WGR[1], WGR[2], WGR[0], $00021, WGR[3], CT_WG1~8bal ; QDAT ; -; D ; LC49 ; lpm_counter:CT_rtl_0|dffs[1], lpm_counter:CT_rtl_0|dffs[0], XCT[1] ; lpm_counter:CT_rtl_0|dffs[3] ; -; D ; LC53 ; lpm_counter:CT_rtl_0|dffs[2], lpm_counter:CT_rtl_0|dffs[1], lpm_counter:CT_rtl_0|dffs[0], XCT[1] ; AUD, lpm_counter:CTH_rtl_2|dffs[0], lpm_counter:CTH_rtl_2|dffs[1], lpm_counter:CTH_rtl_2|dffs[2], lpm_counter:CTH_rtl_2|dffs[3], lpm_counter:CTH_rtl_2|dffs[4], lpm_counter:CTH_rtl_2|dffs[5], SINC_HT, /RESET ; -; D ; LC56 ; XCT[0], XCT[2]~3, XCT[2]~4 ; XCT[2]~3, XCT[2]~4, lpm_counter:CT_rtl_0|dffs[0], lpm_counter:CT_rtl_0|dffs[1], lpm_counter:CT_rtl_0|dffs[2], lpm_counter:CT_rtl_0|dffs[3], CLKZZ, CT_WG~4, CT_WG~5, CT_WG~6, RDAT_X~6, RDAT_X~11, CT_WG1~8bal, XCT[2]~11, XCT[2]~12 ; -; D ; LC51 ; TG42_IN ; TG42_BUF ; -; D ; LC57 ; XCT[0] ; CLK14 ; -; E ; LC77 ; $00049 ; HD_DIR ; -; F ; LC91 ; D0, CNF_OFF, FDD_1440, HDD_CLK, HDD_C[3], HDD_C[1], FDD_C[0], FDD_C[1], HDD_C[2], HDD_C[0], FDD_C[2], FDD_1440~10 ; FDD_1440, 10K_D0, TURBING~5, RDAT_X~6, RDAT_X~11, CT_WG1~8bal ; -; F ; LC88 ; TG42_IN, WR_CNF, CNF_OFF, HDD_C[0], FDD_C[2] ; 10K_CLK, FDD_1440, $00041, $00042, $00043, $00044, $00045, $00046, $00048, $00049 ; -; F ; LC81 ; ; HD_CS ; -; F ; LC85 ; $00047, EPM_RES, lpm_counter:CT_rtl_0|dffs[3], HDD_C[3], HDD_C[1], FDD_C[0], FDD_C[1], HDD_C[2], HDD_C[0], FDD_C[2] ; NT320~2, CNF_OFF, $00052, $00053, NTHDD~11, /CONF_X, FDD_1440~10, $00049~4, $00050, $00051, NT320~12 ; -; G ; LC102 ; SINC_VT, SINC_HT ; SINC ; -; G ; LC99 ; lpm_counter:CTV_rtl_1|dffs[8], lpm_counter:CTV_rtl_1|dffs[7], lpm_counter:CTV_rtl_1|dffs[6], lpm_counter:CTV_rtl_1|dffs[5], lpm_counter:CTV_rtl_1|dffs[4], lpm_counter:CTV_rtl_1|dffs[2], lpm_counter:CTV_rtl_1|dffs[3], NT320~2, SINC_HT ; lpm_counter:CTV_rtl_1|dffs[2], lpm_counter:CTV_rtl_1|dffs[3], lpm_counter:CTV_rtl_1|dffs[4], lpm_counter:CTV_rtl_1|dffs[5], lpm_counter:CTV_rtl_1|dffs[6], lpm_counter:CTV_rtl_1|dffs[7], lpm_counter:CTV_rtl_1|dffs[8], SINC_V, SINC~1, $00047 ; -; G ; LC104 ; lpm_counter:CTH_rtl_2|dffs[5], lpm_counter:CTH_rtl_2|dffs[4], lpm_counter:CTH_rtl_2|dffs[3], lpm_counter:CTH_rtl_2|dffs[2], lpm_counter:CT_rtl_0|dffs[3] ; lpm_counter:CTH_rtl_2|dffs[2], lpm_counter:CTH_rtl_2|dffs[3], lpm_counter:CTH_rtl_2|dffs[4], lpm_counter:CTH_rtl_2|dffs[5], SINC_H, lpm_counter:CTV_rtl_1|dffs[0], lpm_counter:CTV_rtl_1|dffs[1], lpm_counter:CTV_rtl_1|dffs[2], lpm_counter:CTV_rtl_1|dffs[3], lpm_counter:CTV_rtl_1|dffs[4], lpm_counter:CTV_rtl_1|dffs[5], lpm_counter:CTV_rtl_1|dffs[6], lpm_counter:CTV_rtl_1|dffs[7], lpm_counter:CTV_rtl_1|dffs[8], SINC_VT, SINC~1 ; -; G ; LC109 ; EPM_RES, PW_GOOD, SINC_VT ; XHD_RES, /RESET ; -; H ; LC117 ; NT320~12, FDD_C[0], NT320~2, /RESET, FDD_C[1], HDD_C[2], HDD_C[0], FDD_C[2] ; NT320~2, SINC_VT, NT320~12 ; -; H ; LC124 ; XCT[2]~11, XCT[2]~12 ; XCT[1], $00009 ; -; H ; LC128 ; TG42_IN ; TG42_OUT ; -; H ; LC122 ; XCT[1] ; lpm_counter:CT_rtl_0|dffs[1], lpm_counter:CT_rtl_0|dffs[2], lpm_counter:CT_rtl_0|dffs[3], RDAT_X~6, CT_WG1~8bal ; -; H ; LC114 ; NTHDD~11, FDD_C[0], FDD_C[1], HDD_C[2], HDD_C[0], FDD_C[2], HDD_C[3], HDD_C[1], THDD~2 ; NTHDD~11, THDD~2, $00050, $00051, NTHDD~13, $00052, $00053 ; -; H ; LC119 ; NTHDD~13, NTHDD~11, THDD~2, HDD_C[0], FDD_C[2], HDD_C[1], FDD_C[0], FDD_C[1], HDD_C[2], HDD_C[3], /RESET ; NTHDD~11, THDD~2, NTHDD~13, $00052, $00053 ; -; H ; LC125 ; TG42_IN, HDD_C[3], /RESET, HDD_C[1], HDD_C[2], NTHDD~4sexpand0, NTHDD~11, THDD~2 ; XHD2_CS[2] ; -; H ; LC113 ; FDD_C[1], HDD_C[1], HDD_C[2], HDD_CLK, $00049~4 ; XHD_WR ; -; H ; LC115 ; FDD_C[1], HDD_C[1], HDD_C[2], HDD_CLK, $00049~4 ; XHD_RD, $00049~11 ; -; H ; LC116 ; /RESET, NT320~2, FDD_C[2], HDD_C[3], HDD_C[1], FDD_C[0], FDD_C[1], HDD_C[2], HDD_C[0] ; NT320~2 ; -; H ; LC118 ; NTHDD~11, THDD~2, HDD_C[3], FDD_C[1], HDD_C[2] ; NTHDD~11 ; -; H ; LC120 ; TG42_IN, HDD_C[3], HDD_C[1], HDD_C[2], THDD~2, /RESET ; XHD1_CS[1] ; -; H ; LC126 ; ; BEEP ; -; H ; LC121 ; TG42_IN, HDD_C[3], HDD_C[1], HDD_C[2], THDD~2, /RESET ; XHD1_CS[2] ; -; H ; LC123 ; TG42_IN, HDD_C[3], /RESET, HDD_C[1], HDD_C[2], NTHDD~4sexpand0, NTHDD~11, THDD~2 ; XHD2_CS[1] ; -+-----+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - - -+---------------------------------------------------------------+ -; Fitter Device Options ; -+----------------------------------------------+----------------+ -; Option ; Setting ; -+----------------------------------------------+----------------+ -; Enable user-supplied start-up clock (CLKUSR) ; Off ; -; Enable device-wide reset (DEV_CLRn) ; Off ; -; Enable device-wide output enable (DEV_OE) ; Off ; -; Enable INIT_DONE output ; Off ; -; Configuration scheme ; Passive Serial ; -; Security bit ; On ; -; Base pin-out file on sameframe device ; Off ; -+----------------------------------------------+----------------+ - - -+-----------------+ -; Fitter Messages ; -+-----------------+ -Info: ******************************************************************* -Info: Running Quartus II Fitter - Info: Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition - Info: Processing started: Sun Aug 28 03:30:40 2022 -Info: Command: quartus_fit --read_settings_files=off --write_settings_files=off sp2_max -c sp2_max -Info: Selected device EPM7128STC100-10 for design "sp2_max" -Warning: Ignored locations or region assignments to the following nodes - Warning: Node "10K_D[0]" is assigned to location or region, but does not exist in design - Warning: Node "CLK[14]" is assigned to location or region, but does not exist in design - Warning: Node "D[0]" is assigned to location or region, but does not exist in design - Warning: Node "FDD_C0" is assigned to location or region, but does not exist in design - Warning: Node "FDD_C1" is assigned to location or region, but does not exist in design - Warning: Node "FDD_C2" is assigned to location or region, but does not exist in design - Warning: Node "HDD_C0" is assigned to location or region, but does not exist in design - Warning: Node "HDD_C1" is assigned to location or region, but does not exist in design - Warning: Node "HDD_C2" is assigned to location or region, but does not exist in design - Warning: Node "HDD_C3" is assigned to location or region, but does not exist in design - Warning: Node "SINC_[1]" is assigned to location or region, but does not exist in design - Warning: Node "SINC_[2]" is assigned to location or region, but does not exist in design - Warning: Node "TR[43]" is assigned to location or region, but does not exist in design - Warning: Node "UNUSED[33]" is assigned to location or region, but does not exist in design - Warning: Node "UNUSED[53]" is assigned to location or region, but does not exist in design - Warning: Node "UNUSED[65]" is assigned to location or region, but does not exist in design - Warning: Node "UNUSED[78]" is assigned to location or region, but does not exist in design - Warning: Node "XA0" is assigned to location or region, but does not exist in design - Warning: Node "XA1" is assigned to location or region, but does not exist in design - Warning: Node "XA2" is assigned to location or region, but does not exist in design - Warning: Node "XHD1_CS1" is assigned to location or region, but does not exist in design - Warning: Node "XHD1_CS2" is assigned to location or region, but does not exist in design - Warning: Node "XHD2_CS1" is assigned to location or region, but does not exist in design - Warning: Node "XHD2_CS2" is assigned to location or region, but does not exist in design -Info: Quartus II Fitter was successful. 0 errors, 25 warnings - Info: Peak virtual memory: 229 megabytes - Info: Processing ended: Sun Aug 28 03:30:41 2022 - Info: Elapsed time: 00:00:01 - Info: Total CPU time (on all processors): 00:00:00 - - diff --git a/src/altera/quartus/max/sp2_max.fit.summary b/src/altera/quartus/max/sp2_max.fit.summary deleted file mode 100644 index 78c0901..0000000 --- a/src/altera/quartus/max/sp2_max.fit.summary +++ /dev/null @@ -1,9 +0,0 @@ -Fitter Status : Successful - Sun Aug 28 03:30:40 2022 -Quartus II Version : 9.0 Build 235 06/17/2009 SP 2 SJ Web Edition -Revision Name : sp2_max -Top-level Entity Name : SP2_MAX -Family : MAX7000S -Device : EPM7128STC100-10 -Timing Models : Final -Total macrocells : 74 / 128 ( 58 % ) -Total pins : 84 / 84 ( 100 % ) diff --git a/src/altera/quartus/max/sp2_max.flow.rpt b/src/altera/quartus/max/sp2_max.flow.rpt deleted file mode 100644 index 4c958e1..0000000 --- a/src/altera/quartus/max/sp2_max.flow.rpt +++ /dev/null @@ -1,117 +0,0 @@ -Flow report for sp2_max -Sun Aug 28 03:30:43 2022 -Quartus II Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition - - ---------------------- -; Table of Contents ; ---------------------- - 1. Legal Notice - 2. Flow Summary - 3. Flow Settings - 4. Flow Non-Default Global Settings - 5. Flow Elapsed Time - 6. Flow OS Summary - 7. Flow Log - - - ----------------- -; Legal Notice ; ----------------- -Copyright (C) 1991-2009 Altera Corporation -Your use of Altera Corporation's design tools, logic functions -and other software and tools, and its AMPP partner logic -functions, and any output files from any of the foregoing -(including device programming or simulation files), and any -associated documentation or information are expressly subject -to the terms and conditions of the Altera Program License -Subscription Agreement, Altera MegaCore Function License -Agreement, or other applicable license agreement, including, -without limitation, that your use is for the sole purpose of -programming logic devices manufactured by Altera and sold by -Altera or its authorized distributors. Please refer to the -applicable agreement for further details. - - - -+------------------------------------------------------------------------+ -; Flow Summary ; -+-------------------------+----------------------------------------------+ -; Flow Status ; Successful - Sun Aug 28 03:30:43 2022 ; -; Quartus II Version ; 9.0 Build 235 06/17/2009 SP 2 SJ Web Edition ; -; Revision Name ; sp2_max ; -; Top-level Entity Name ; SP2_MAX ; -; Family ; MAX7000S ; -; Device ; EPM7128STC100-10 ; -; Timing Models ; Final ; -; Met timing requirements ; No ; -; Total macrocells ; 74 / 128 ( 58 % ) ; -; Total pins ; 84 / 84 ( 100 % ) ; -+-------------------------+----------------------------------------------+ - - -+-----------------------------------------+ -; Flow Settings ; -+-------------------+---------------------+ -; Option ; Setting ; -+-------------------+---------------------+ -; Start date & time ; 08/28/2022 03:30:38 ; -; Main task ; Compilation ; -; Revision Name ; sp2_max ; -+-------------------+---------------------+ - - -+---------------------------------------------------------------------------------------------------------------------------------------+ -; Flow Non-Default Global Settings ; -+---------------------------------+------------------------------------------------+---------------+-------------+----------------------+ -; Assignment Name ; Value ; Default Value ; Entity Name ; Section Id ; -+---------------------------------+------------------------------------------------+---------------+-------------+----------------------+ -; AUTO_GLOBAL_CLOCK ; Off ; On ; -- ; -- ; -; AUTO_GLOBAL_REGISTER_CONTROLS ; Off ; On ; -- ; -- ; -; COMPILER_SIGNATURE_ID ; 52243291855.166164663811364 ; -- ; -- ; -- ; -; CUT_OFF_READ_DURING_WRITE_PATHS ; Off ; On ; -- ; -- ; -; EDA_INPUT_GND_NAME ; Gnd ; -- ; -- ; eda_design_synthesis ; -; EDA_INPUT_VCC_NAME ; Vcc ; -- ; -- ; eda_design_synthesis ; -; EDA_SHOW_LMF_MAPPING_MESSAGES ; Off ; -- ; -- ; eda_design_synthesis ; -; EXCLUDE_TPD_PATHS_LESS_THAN ; 0 ns ; -- ; -- ; -- ; -; FMAX_REQUIREMENT ; 100 MHz ; -- ; -- ; -- ; -; MISC_FILE ; C:/Sprinter/src/altera/quartus/max/sp2_max.dpf ; -- ; -- ; -- ; -+---------------------------------+------------------------------------------------+---------------+-------------+----------------------+ - - -+-----------------------------------------------------------------------------------------------------------------------------+ -; Flow Elapsed Time ; -+-------------------------+--------------+-------------------------+---------------------+------------------------------------+ -; Module Name ; Elapsed Time ; Average Processors Used ; Peak Virtual Memory ; Total CPU Time (on all processors) ; -+-------------------------+--------------+-------------------------+---------------------+------------------------------------+ -; Analysis & Synthesis ; 00:00:01 ; 1.0 ; 229 MB ; 00:00:01 ; -; Fitter ; 00:00:00 ; 1.0 ; 204 MB ; 00:00:00 ; -; Assembler ; 00:00:00 ; 1.0 ; 198 MB ; 00:00:00 ; -; Classic Timing Analyzer ; 00:00:00 ; 1.0 ; 172 MB ; 00:00:00 ; -; Total ; 00:00:01 ; -- ; -- ; 00:00:01 ; -+-------------------------+--------------+-------------------------+---------------------+------------------------------------+ - - -+------------------------------------------------------------------------------------------+ -; Flow OS Summary ; -+-------------------------+------------------+---------------+------------+----------------+ -; Module Name ; Machine Hostname ; OS Name ; OS Version ; Processor type ; -+-------------------------+------------------+---------------+------------+----------------+ -; Analysis & Synthesis ; DESKTOP-72JG930 ; Windows Vista ; 6.2 ; x86_64 ; -; Fitter ; DESKTOP-72JG930 ; Windows Vista ; 6.2 ; x86_64 ; -; Assembler ; DESKTOP-72JG930 ; Windows Vista ; 6.2 ; x86_64 ; -; Classic Timing Analyzer ; DESKTOP-72JG930 ; Windows Vista ; 6.2 ; x86_64 ; -+-------------------------+------------------+---------------+------------+----------------+ - - ------------- -; Flow Log ; ------------- -quartus_map --read_settings_files=on --write_settings_files=off sp2_max -c sp2_max -quartus_fit --read_settings_files=off --write_settings_files=off sp2_max -c sp2_max -quartus_asm --read_settings_files=off --write_settings_files=off sp2_max -c sp2_max -quartus_tan --read_settings_files=off --write_settings_files=off sp2_max -c sp2_max - - - diff --git a/src/altera/quartus/max/sp2_max.map.rpt b/src/altera/quartus/max/sp2_max.map.rpt deleted file mode 100644 index 202918a..0000000 --- a/src/altera/quartus/max/sp2_max.map.rpt +++ /dev/null @@ -1,491 +0,0 @@ -Analysis & Synthesis report for sp2_max -Sun Aug 28 03:30:39 2022 -Quartus II Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition - - ---------------------- -; Table of Contents ; ---------------------- - 1. Legal Notice - 2. Analysis & Synthesis Summary - 3. Analysis & Synthesis Settings - 4. Analysis & Synthesis Source Files Read - 5. Analysis & Synthesis Resource Usage Summary - 6. Analysis & Synthesis Resource Utilization by Entity - 7. Registers Removed During Synthesis - 8. Source assignments for lpm_counter:CT_rtl_0 - 9. Source assignments for lpm_counter:CTV_rtl_1 - 10. Source assignments for lpm_counter:CTH_rtl_2 - 11. Source assignments for lpm_add_sub:op_6|addcore:adder - 12. Source assignments for lpm_add_sub:op_6|addcore:adder|addcore:adder[0] - 13. Parameter Settings for User Entity Instance: Top-level Entity: |sp2_max - 14. Parameter Settings for Inferred Entity Instance: lpm_counter:CT_rtl_0 - 15. Parameter Settings for Inferred Entity Instance: lpm_counter:CTV_rtl_1 - 16. Parameter Settings for Inferred Entity Instance: lpm_counter:CTH_rtl_2 - 17. Parameter Settings for Inferred Entity Instance: lpm_add_sub:op_6 - 18. Analysis & Synthesis Messages - - - ----------------- -; Legal Notice ; ----------------- -Copyright (C) 1991-2009 Altera Corporation -Your use of Altera Corporation's design tools, logic functions -and other software and tools, and its AMPP partner logic -functions, and any output files from any of the foregoing -(including device programming or simulation files), and any -associated documentation or information are expressly subject -to the terms and conditions of the Altera Program License -Subscription Agreement, Altera MegaCore Function License -Agreement, or other applicable license agreement, including, -without limitation, that your use is for the sole purpose of -programming logic devices manufactured by Altera and sold by -Altera or its authorized distributors. Please refer to the -applicable agreement for further details. - - - -+----------------------------------------------------------------------------+ -; Analysis & Synthesis Summary ; -+-----------------------------+----------------------------------------------+ -; Analysis & Synthesis Status ; Successful - Sun Aug 28 03:30:39 2022 ; -; Quartus II Version ; 9.0 Build 235 06/17/2009 SP 2 SJ Web Edition ; -; Revision Name ; sp2_max ; -; Top-level Entity Name ; SP2_MAX ; -; Family ; MAX7000S ; -; Total macrocells ; 74 ; -; Total pins ; 80 ; -+-----------------------------+----------------------------------------------+ - - -+-------------------------------------------------------------------------------------------------+ -; Analysis & Synthesis Settings ; -+--------------------------------------------------------------+------------------+---------------+ -; Option ; Setting ; Default Value ; -+--------------------------------------------------------------+------------------+---------------+ -; Device ; EPM7128STC100-10 ; ; -; Top-level entity name ; sp2_max ; sp2_max ; -; Family name ; MAX7000S ; Stratix II ; -; Use smart compilation ; Off ; Off ; -; Create Debugging Nodes for IP Cores ; Off ; Off ; -; Preserve fewer node names ; On ; On ; -; Disable OpenCore Plus hardware evaluation ; Off ; Off ; -; Verilog Version ; Verilog_2001 ; Verilog_2001 ; -; VHDL Version ; VHDL93 ; VHDL93 ; -; State Machine Processing ; Auto ; Auto ; -; Safe State Machine ; Off ; Off ; -; Extract Verilog State Machines ; On ; On ; -; Extract VHDL State Machines ; On ; On ; -; Ignore Verilog initial constructs ; Off ; Off ; -; Iteration limit for constant Verilog loops ; 5000 ; 5000 ; -; Iteration limit for non-constant Verilog loops ; 250 ; 250 ; -; Add Pass-Through Logic to Inferred RAMs ; On ; On ; -; Parallel Synthesis ; Off ; Off ; -; NOT Gate Push-Back ; On ; On ; -; Power-Up Don't Care ; On ; On ; -; Remove Duplicate Registers ; On ; On ; -; Ignore CARRY Buffers ; Off ; Off ; -; Ignore CASCADE Buffers ; Off ; Off ; -; Ignore GLOBAL Buffers ; Off ; Off ; -; Ignore ROW GLOBAL Buffers ; Off ; Off ; -; Ignore LCELL Buffers ; Auto ; Auto ; -; Ignore SOFT Buffers ; Off ; Off ; -; Limit AHDL Integers to 32 Bits ; Off ; Off ; -; Optimization Technique ; Speed ; Speed ; -; Allow XOR Gate Usage ; On ; On ; -; Auto Logic Cell Insertion ; On ; On ; -; Parallel Expander Chain Length ; 4 ; 4 ; -; Auto Parallel Expanders ; On ; On ; -; Auto Open-Drain Pins ; On ; On ; -; Auto Resource Sharing ; Off ; Off ; -; Maximum Fan-in Per Macrocell ; 100 ; 100 ; -; Use LogicLock Constraints during Resource Balancing ; On ; On ; -; Ignore translate_off and synthesis_off directives ; Off ; Off ; -; Show Parameter Settings Tables in Synthesis Report ; On ; On ; -; HDL message level ; Level2 ; Level2 ; -; Suppress Register Optimization Related Messages ; Off ; Off ; -; Number of Removed Registers Reported in Synthesis Report ; 100 ; 100 ; -; Number of Inverted Registers Reported in Synthesis Report ; 100 ; 100 ; -; Block Design Naming ; Auto ; Auto ; -; Synthesis Effort ; Auto ; Auto ; -; Shift Register Replacement - Allow Asynchronous Clear Signal ; On ; On ; -; Analysis & Synthesis Message Level ; Medium ; Medium ; -+--------------------------------------------------------------+------------------+---------------+ - - -+------------------------------------------------------------------------------------------------------------------------------------------------------+ -; Analysis & Synthesis Source Files Read ; -+----------------------------------+-----------------+-----------------------+-------------------------------------------------------------------------+ -; File Name with User-Entered Path ; Used in Netlist ; File Type ; File Name with Absolute Path ; -+----------------------------------+-----------------+-----------------------+-------------------------------------------------------------------------+ -; sp2_max.tdf ; yes ; Auto-Found AHDL File ; C:/Sprinter/src/altera/quartus/max/sp2_max.tdf ; -; lpm_counter.tdf ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/lpm_counter.tdf ; -; lpm_constant.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/lpm_constant.inc ; -; lpm_decode.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/lpm_decode.inc ; -; lpm_add_sub.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/lpm_add_sub.inc ; -; cmpconst.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/cmpconst.inc ; -; lpm_compare.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/lpm_compare.inc ; -; lpm_counter.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/lpm_counter.inc ; -; dffeea.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/dffeea.inc ; -; alt_synch_counter.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/alt_synch_counter.inc ; -; alt_synch_counter_f.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/alt_synch_counter_f.inc ; -; alt_counter_f10ke.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/alt_counter_f10ke.inc ; -; alt_counter_stratix.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/alt_counter_stratix.inc ; -; aglobal90.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/aglobal90.inc ; -; lpm_add_sub.tdf ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/lpm_add_sub.tdf ; -; addcore.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/addcore.inc ; -; look_add.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/look_add.inc ; -; bypassff.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/bypassff.inc ; -; altshift.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/altshift.inc ; -; alt_stratix_add_sub.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/alt_stratix_add_sub.inc ; -; alt_mercury_add_sub.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/alt_mercury_add_sub.inc ; -; addcore.tdf ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/addcore.tdf ; -; a_csnbuffer.inc ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/a_csnbuffer.inc ; -; a_csnbuffer.tdf ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/a_csnbuffer.tdf ; -; altshift.tdf ; yes ; Megafunction ; c:/altera/90sp2/quartus/libraries/megafunctions/altshift.tdf ; -+----------------------------------+-----------------+-----------------------+-------------------------------------------------------------------------+ - - -+---------------------------------------------+ -; Analysis & Synthesis Resource Usage Summary ; -+----------------------+----------------------+ -; Resource ; Usage ; -+----------------------+----------------------+ -; Logic cells ; 74 ; -; Total registers ; 57 ; -; I/O pins ; 80 ; -; Shareable expanders ; 9 ; -; Parallel expanders ; 3 ; -; Maximum fan-out node ; HDD_C[2] ; -; Maximum fan-out ; 21 ; -; Total fan-out ; 434 ; -; Average fan-out ; 2.66 ; -+----------------------+----------------------+ - - -+------------------------------------------------------------------------------------------------+ -; Analysis & Synthesis Resource Utilization by Entity ; -+----------------------------+------------+------+--------------------------------+--------------+ -; Compilation Hierarchy Node ; Macrocells ; Pins ; Full Hierarchy Name ; Library Name ; -+----------------------------+------------+------+--------------------------------+--------------+ -; |SP2_MAX ; 74 ; 80 ; |SP2_MAX ; work ; -; |lpm_counter:CTH_rtl_2| ; 6 ; 0 ; |SP2_MAX|lpm_counter:CTH_rtl_2 ; work ; -; |lpm_counter:CTV_rtl_1| ; 9 ; 0 ; |SP2_MAX|lpm_counter:CTV_rtl_1 ; work ; -; |lpm_counter:CT_rtl_0| ; 4 ; 0 ; |SP2_MAX|lpm_counter:CT_rtl_0 ; work ; -+----------------------------+------------+------+--------------------------------+--------------+ - - -+--------------------------------------------------------------------------------+ -; Registers Removed During Synthesis ; -+---------------------------------------+----------------------------------------+ -; Register name ; Reason for Removal ; -+---------------------------------------+----------------------------------------+ -; CTV8M ; Stuck at GND due to stuck port data_in ; -; XCT[2] ; Lost fanout ; -; Total Number of Removed Registers = 2 ; ; -+---------------------------------------+----------------------------------------+ - - -+-----------------------------------------------+ -; Source assignments for lpm_counter:CT_rtl_0 ; -+---------------------------+-------+------+----+ -; Assignment ; Value ; From ; To ; -+---------------------------+-------+------+----+ -; SUPPRESS_DA_RULE_INTERNAL ; a101 ; - ; - ; -; SUPPRESS_DA_RULE_INTERNAL ; s102 ; - ; - ; -; SUPPRESS_DA_RULE_INTERNAL ; s103 ; - ; - ; -+---------------------------+-------+------+----+ - - -+-----------------------------------------------+ -; Source assignments for lpm_counter:CTV_rtl_1 ; -+---------------------------+-------+------+----+ -; Assignment ; Value ; From ; To ; -+---------------------------+-------+------+----+ -; SUPPRESS_DA_RULE_INTERNAL ; a101 ; - ; - ; -; SUPPRESS_DA_RULE_INTERNAL ; s102 ; - ; - ; -; SUPPRESS_DA_RULE_INTERNAL ; s103 ; - ; - ; -+---------------------------+-------+------+----+ - - -+-----------------------------------------------+ -; Source assignments for lpm_counter:CTH_rtl_2 ; -+---------------------------+-------+------+----+ -; Assignment ; Value ; From ; To ; -+---------------------------+-------+------+----+ -; SUPPRESS_DA_RULE_INTERNAL ; a101 ; - ; - ; -; SUPPRESS_DA_RULE_INTERNAL ; s102 ; - ; - ; -; SUPPRESS_DA_RULE_INTERNAL ; s103 ; - ; - ; -+---------------------------+-------+------+----+ - - -+-------------------------------------------------------+ -; Source assignments for lpm_add_sub:op_6|addcore:adder ; -+---------------------------+-------+------+------------+ -; Assignment ; Value ; From ; To ; -+---------------------------+-------+------+------------+ -; SUPPRESS_DA_RULE_INTERNAL ; A103 ; - ; - ; -+---------------------------+-------+------+------------+ - - -+------------------------------------------------------------------------+ -; Source assignments for lpm_add_sub:op_6|addcore:adder|addcore:adder[0] ; -+---------------------------+-------+------+-----------------------------+ -; Assignment ; Value ; From ; To ; -+---------------------------+-------+------+-----------------------------+ -; SUPPRESS_DA_RULE_INTERNAL ; A103 ; - ; - ; -+---------------------------+-------+------+-----------------------------+ - - -+-------------------------------------------------------------------------+ -; Parameter Settings for User Entity Instance: Top-level Entity: |sp2_max ; -+----------------+-----------+--------------------------------------------+ -; Parameter Name ; Value ; Type ; -+----------------+-----------+--------------------------------------------+ -; G_MODE ; 1 ; Untyped ; -; NUM ; NO ; Untyped ; -; NUMBER1 ; 00100000X ; Unsigned Binary ; -; NUMBER2 ; 00110111X ; Unsigned Binary ; -; NUMBER3 ; 01001101X ; Unsigned Binary ; -; NUMBER4 ; 01010010X ; Unsigned Binary ; -; NUMBER5 ; 00100000X ; Unsigned Binary ; -; NUMBER6 ; 00100000X ; Unsigned Binary ; -; NUMBER7 ; 00100000X ; Unsigned Binary ; -+----------------+-----------+--------------------------------------------+ -Note: In order to hide this table in the UI and the text report file, please set the "Show Parameter Settings Tables in Synthesis Report" option in "Analysis and Synthesis Settings -> More Settings" to "Off". - - -+-----------------------------------------------------------------------+ -; Parameter Settings for Inferred Entity Instance: lpm_counter:CT_rtl_0 ; -+------------------------+-------------------+--------------------------+ -; Parameter Name ; Value ; Type ; -+------------------------+-------------------+--------------------------+ -; AUTO_CARRY_CHAINS ; ON ; AUTO_CARRY ; -; IGNORE_CARRY_BUFFERS ; OFF ; IGNORE_CARRY ; -; AUTO_CASCADE_CHAINS ; ON ; AUTO_CASCADE ; -; IGNORE_CASCADE_BUFFERS ; OFF ; IGNORE_CASCADE ; -; LPM_WIDTH ; 4 ; Untyped ; -; LPM_DIRECTION ; UP ; Untyped ; -; LPM_MODULUS ; 0 ; Untyped ; -; LPM_AVALUE ; UNUSED ; Untyped ; -; LPM_SVALUE ; UNUSED ; Untyped ; -; LPM_PORT_UPDOWN ; PORT_CONNECTIVITY ; Untyped ; -; DEVICE_FAMILY ; MAX7000S ; Untyped ; -; CARRY_CHAIN ; MANUAL ; Untyped ; -; CARRY_CHAIN_LENGTH ; 48 ; CARRY_CHAIN_LENGTH ; -; NOT_GATE_PUSH_BACK ; ON ; NOT_GATE_PUSH_BACK ; -; CARRY_CNT_EN ; SMART ; Untyped ; -; LABWIDE_SCLR ; ON ; Untyped ; -; USE_NEW_VERSION ; TRUE ; Untyped ; -; CBXI_PARAMETER ; NOTHING ; Untyped ; -+------------------------+-------------------+--------------------------+ -Note: In order to hide this table in the UI and the text report file, please set the "Show Parameter Settings Tables in Synthesis Report" option in "Analysis and Synthesis Settings -> More Settings" to "Off". - - -+------------------------------------------------------------------------+ -; Parameter Settings for Inferred Entity Instance: lpm_counter:CTV_rtl_1 ; -+------------------------+-------------------+---------------------------+ -; Parameter Name ; Value ; Type ; -+------------------------+-------------------+---------------------------+ -; AUTO_CARRY_CHAINS ; ON ; AUTO_CARRY ; -; IGNORE_CARRY_BUFFERS ; OFF ; IGNORE_CARRY ; -; AUTO_CASCADE_CHAINS ; ON ; AUTO_CASCADE ; -; IGNORE_CASCADE_BUFFERS ; OFF ; IGNORE_CASCADE ; -; LPM_WIDTH ; 9 ; Untyped ; -; LPM_DIRECTION ; UP ; Untyped ; -; LPM_MODULUS ; 0 ; Untyped ; -; LPM_AVALUE ; UNUSED ; Untyped ; -; LPM_SVALUE ; UNUSED ; Untyped ; -; LPM_PORT_UPDOWN ; PORT_CONNECTIVITY ; Untyped ; -; DEVICE_FAMILY ; MAX7000S ; Untyped ; -; CARRY_CHAIN ; MANUAL ; Untyped ; -; CARRY_CHAIN_LENGTH ; 48 ; CARRY_CHAIN_LENGTH ; -; NOT_GATE_PUSH_BACK ; ON ; NOT_GATE_PUSH_BACK ; -; CARRY_CNT_EN ; SMART ; Untyped ; -; LABWIDE_SCLR ; ON ; Untyped ; -; USE_NEW_VERSION ; TRUE ; Untyped ; -; CBXI_PARAMETER ; NOTHING ; Untyped ; -+------------------------+-------------------+---------------------------+ -Note: In order to hide this table in the UI and the text report file, please set the "Show Parameter Settings Tables in Synthesis Report" option in "Analysis and Synthesis Settings -> More Settings" to "Off". - - -+------------------------------------------------------------------------+ -; Parameter Settings for Inferred Entity Instance: lpm_counter:CTH_rtl_2 ; -+------------------------+-------------------+---------------------------+ -; Parameter Name ; Value ; Type ; -+------------------------+-------------------+---------------------------+ -; AUTO_CARRY_CHAINS ; ON ; AUTO_CARRY ; -; IGNORE_CARRY_BUFFERS ; OFF ; IGNORE_CARRY ; -; AUTO_CASCADE_CHAINS ; ON ; AUTO_CASCADE ; -; IGNORE_CASCADE_BUFFERS ; OFF ; IGNORE_CASCADE ; -; LPM_WIDTH ; 6 ; Untyped ; -; LPM_DIRECTION ; UP ; Untyped ; -; LPM_MODULUS ; 0 ; Untyped ; -; LPM_AVALUE ; UNUSED ; Untyped ; -; LPM_SVALUE ; UNUSED ; Untyped ; -; LPM_PORT_UPDOWN ; PORT_CONNECTIVITY ; Untyped ; -; DEVICE_FAMILY ; MAX7000S ; Untyped ; -; CARRY_CHAIN ; MANUAL ; Untyped ; -; CARRY_CHAIN_LENGTH ; 48 ; CARRY_CHAIN_LENGTH ; -; NOT_GATE_PUSH_BACK ; ON ; NOT_GATE_PUSH_BACK ; -; CARRY_CNT_EN ; SMART ; Untyped ; -; LABWIDE_SCLR ; ON ; Untyped ; -; USE_NEW_VERSION ; TRUE ; Untyped ; -; CBXI_PARAMETER ; NOTHING ; Untyped ; -+------------------------+-------------------+---------------------------+ -Note: In order to hide this table in the UI and the text report file, please set the "Show Parameter Settings Tables in Synthesis Report" option in "Analysis and Synthesis Settings -> More Settings" to "Off". - - -+-------------------------------------------------------------------+ -; Parameter Settings for Inferred Entity Instance: lpm_add_sub:op_6 ; -+------------------------+-------------+----------------------------+ -; Parameter Name ; Value ; Type ; -+------------------------+-------------+----------------------------+ -; LPM_WIDTH ; 5 ; Untyped ; -; LPM_REPRESENTATION ; UNSIGNED ; Untyped ; -; LPM_DIRECTION ; ADD ; Untyped ; -; ONE_INPUT_IS_CONSTANT ; YES ; Untyped ; -; LPM_PIPELINE ; 0 ; Untyped ; -; MAXIMIZE_SPEED ; 5 ; Untyped ; -; REGISTERED_AT_END ; 0 ; Untyped ; -; OPTIMIZE_FOR_SPEED ; 9 ; Untyped ; -; USE_CS_BUFFERS ; 1 ; Untyped ; -; CARRY_CHAIN ; MANUAL ; Untyped ; -; CARRY_CHAIN_LENGTH ; 48 ; CARRY_CHAIN_LENGTH ; -; DEVICE_FAMILY ; MAX7000S ; Untyped ; -; USE_WYS ; OFF ; Untyped ; -; STYLE ; FAST ; Untyped ; -; CBXI_PARAMETER ; add_sub_uch ; Untyped ; -; AUTO_CARRY_CHAINS ; ON ; AUTO_CARRY ; -; IGNORE_CARRY_BUFFERS ; OFF ; IGNORE_CARRY ; -; AUTO_CASCADE_CHAINS ; ON ; AUTO_CASCADE ; -; IGNORE_CASCADE_BUFFERS ; OFF ; IGNORE_CASCADE ; -+------------------------+-------------+----------------------------+ -Note: In order to hide this table in the UI and the text report file, please set the "Show Parameter Settings Tables in Synthesis Report" option in "Analysis and Synthesis Settings -> More Settings" to "Off". - - -+-------------------------------+ -; Analysis & Synthesis Messages ; -+-------------------------------+ -Info: ******************************************************************* -Info: Running Quartus II Analysis & Synthesis - Info: Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition - Info: Processing started: Sun Aug 28 03:30:38 2022 -Info: Command: quartus_map --read_settings_files=on --write_settings_files=off sp2_max -c sp2_max -Warning: Using design file sp2_max.tdf, which is not specified as a design file for the current project, but contains definitions for 1 design units and 1 entities in project - Info: Found entity 1: SP2_MAX -Info: Elaborating entity "sp2_max" for the top level hierarchy -Warning: Variable or input pin "CTV8C" is defined but never used -Warning: Variable or input pin "XA" is defined but never used -Warning: Variable or input pin "VGA_IN" is defined but never used -Warning: Variable or input pin "SINC_IN" is defined but never used -Warning: Variable or input pin "XHR_RDY" is defined but never used -Warning: Variable or input pin "UNUSED65" is defined but never used -Warning: Variable or input pin "UNUSED33" is defined but never used -Warning: Variable or input pin "UNUSED1" is defined but never used -Warning: Variable or input pin "UNUSED2" is defined but never used -Warning: Variable or input pin "UNUSED5" is defined but never used -Warning: Variable or input pin "UNUSED7" is defined but never used -Warning: Variable or input pin "UNUSED22" is defined but never used -Warning: Variable or input pin "UNUSED24" is defined but never used -Warning: Variable or input pin "UNUSED27" is defined but never used -Warning: Variable or input pin "UNUSED28" is defined but never used -Warning: Variable or input pin "UNUSED49" is defined but never used -Warning: Variable or input pin "UNUSED50" is defined but never used -Warning: Variable or input pin "UNUSED53" is defined but never used -Warning: Variable or input pin "UNUSED55" is defined but never used -Warning: Variable or input pin "UNUSED63" is defined but never used -Warning: Variable or input pin "UNUSED70" is defined but never used -Warning: Variable or input pin "UNUSED72" is defined but never used -Warning: Variable or input pin "UNUSED77" is defined but never used -Warning: Variable or input pin "UNUSED78" is defined but never used -Info: Inferred 3 megafunctions from design logic - Info: Inferred lpm_counter megafunction (LPM_WIDTH=4) from the following logic: "CT[0]~0" - Info: Inferred lpm_counter megafunction (LPM_WIDTH=9) from the following logic: "CTV[0]~9" - Info: Inferred lpm_counter megafunction (LPM_WIDTH=6) from the following logic: "CTH[0]~7" -Info: Inferred 1 megafunctions from design logic - Info: Inferred adder/subtractor megafunction ("lpm_add_sub") from the following logic: "op_6" -Info: Elaborated megafunction instantiation "lpm_counter:CT_rtl_0" -Info: Instantiated megafunction "lpm_counter:CT_rtl_0" with the following parameter: - Info: Parameter "LPM_WIDTH" = "4" - Info: Parameter "LPM_DIRECTION" = "UP" - Info: Parameter "LPM_TYPE" = "LPM_COUNTER" -Info: Elaborated megafunction instantiation "lpm_counter:CTV_rtl_1" -Info: Instantiated megafunction "lpm_counter:CTV_rtl_1" with the following parameter: - Info: Parameter "LPM_WIDTH" = "9" - Info: Parameter "LPM_DIRECTION" = "UP" - Info: Parameter "LPM_TYPE" = "LPM_COUNTER" -Info: Elaborated megafunction instantiation "lpm_counter:CTH_rtl_2" -Info: Instantiated megafunction "lpm_counter:CTH_rtl_2" with the following parameter: - Info: Parameter "LPM_WIDTH" = "6" - Info: Parameter "LPM_DIRECTION" = "UP" - Info: Parameter "LPM_TYPE" = "LPM_COUNTER" -Info: Elaborated megafunction instantiation "lpm_add_sub:op_6" -Info: Instantiated megafunction "lpm_add_sub:op_6" with the following parameter: - Info: Parameter "LPM_WIDTH" = "5" - Info: Parameter "LPM_DIRECTION" = "ADD" - Info: Parameter "LPM_REPRESENTATION" = "UNSIGNED" - Info: Parameter "ONE_INPUT_IS_CONSTANT" = "YES" -Info: Elaborated megafunction instantiation "lpm_add_sub:op_6|addcore:adder", which is child of megafunction instantiation "lpm_add_sub:op_6" -Info: Elaborated megafunction instantiation "lpm_add_sub:op_6|addcore:adder|a_csnbuffer:oflow_node", which is child of megafunction instantiation "lpm_add_sub:op_6" -Info: Elaborated megafunction instantiation "lpm_add_sub:op_6|addcore:adder|a_csnbuffer:result_node", which is child of megafunction instantiation "lpm_add_sub:op_6" -Info: Elaborated megafunction instantiation "lpm_add_sub:op_6|addcore:adder|addcore:adder[0]", which is child of megafunction instantiation "lpm_add_sub:op_6" -Info: Elaborated megafunction instantiation "lpm_add_sub:op_6|addcore:adder|addcore:adder[0]|a_csnbuffer:oflow_node", which is child of megafunction instantiation "lpm_add_sub:op_6" -Info: Elaborated megafunction instantiation "lpm_add_sub:op_6|addcore:adder|addcore:adder[0]|a_csnbuffer:result_node", which is child of megafunction instantiation "lpm_add_sub:op_6" -Info: Elaborated megafunction instantiation "lpm_add_sub:op_6|altshift:result_ext_latency_ffs", which is child of megafunction instantiation "lpm_add_sub:op_6" -Info: Elaborated megafunction instantiation "lpm_add_sub:op_6|altshift:carry_ext_latency_ffs", which is child of megafunction instantiation "lpm_add_sub:op_6" -Info: Ignored 6 buffer(s) - Info: Ignored 6 SOFT buffer(s) -Info: Registers with preset signals will power-up high -Warning: TRI or OPNDRN buffers permanently enabled - Warning: Node "$00005" - Warning: Node "$00006" -Warning: Output pins are stuck at VCC or GND - Warning (13410): Pin "BEEP" is stuck at GND - Warning (13410): Pin "DENS_X" is stuck at VCC - Warning (13410): Pin "HD_CS" is stuck at GND -Info: Promoted pin-driven signal(s) to global signal - Info: Promoted clock signal driven by pin "TG42_IN" to global clock signal - Info: Promoted clear signal driven by pin "EPM_RES" to global clear signal -Info: 1 registers lost all their fanouts during netlist optimizations. The first 1 are displayed below. - Info: Register "XCT[2]" lost all its fanouts during netlist optimizations. -Warning: Design contains 25 input pin(s) that do not drive logic - Warning (15610): No output dependent on input pin "XA[0]" - Warning (15610): No output dependent on input pin "XA[1]" - Warning (15610): No output dependent on input pin "XA[2]" - Warning (15610): No output dependent on input pin "VGA_IN" - Warning (15610): No output dependent on input pin "SINC_IN" - Warning (15610): No output dependent on input pin "XHR_RDY" - Warning (15610): No output dependent on input pin "UNUSED65" - Warning (15610): No output dependent on input pin "UNUSED33" - Warning (15610): No output dependent on input pin "UNUSED1" - Warning (15610): No output dependent on input pin "UNUSED2" - Warning (15610): No output dependent on input pin "UNUSED5" - Warning (15610): No output dependent on input pin "UNUSED7" - Warning (15610): No output dependent on input pin "UNUSED22" - Warning (15610): No output dependent on input pin "UNUSED24" - Warning (15610): No output dependent on input pin "UNUSED27" - Warning (15610): No output dependent on input pin "UNUSED28" - Warning (15610): No output dependent on input pin "UNUSED49" - Warning (15610): No output dependent on input pin "UNUSED50" - Warning (15610): No output dependent on input pin "UNUSED53" - Warning (15610): No output dependent on input pin "UNUSED55" - Warning (15610): No output dependent on input pin "UNUSED63" - Warning (15610): No output dependent on input pin "UNUSED70" - Warning (15610): No output dependent on input pin "UNUSED72" - Warning (15610): No output dependent on input pin "UNUSED77" - Warning (15610): No output dependent on input pin "UNUSED78" -Info: Implemented 163 device resources after synthesis - the final resource count might be different - Info: Implemented 46 input pins - Info: Implemented 30 output pins - Info: Implemented 4 bidirectional pins - Info: Implemented 74 macrocells - Info: Implemented 9 shareable expanders -Info: Quartus II Analysis & Synthesis was successful. 0 errors, 58 warnings - Info: Peak virtual memory: 229 megabytes - Info: Processing ended: Sun Aug 28 03:30:39 2022 - Info: Elapsed time: 00:00:01 - Info: Total CPU time (on all processors): 00:00:01 - - diff --git a/src/altera/quartus/max/sp2_max.map.summary b/src/altera/quartus/max/sp2_max.map.summary deleted file mode 100644 index 9e9026e..0000000 --- a/src/altera/quartus/max/sp2_max.map.summary +++ /dev/null @@ -1,7 +0,0 @@ -Analysis & Synthesis Status : Successful - Sun Aug 28 03:30:39 2022 -Quartus II Version : 9.0 Build 235 06/17/2009 SP 2 SJ Web Edition -Revision Name : sp2_max -Top-level Entity Name : SP2_MAX -Family : MAX7000S -Total macrocells : 74 -Total pins : 80 diff --git a/src/altera/quartus/max/sp2_max.pin b/src/altera/quartus/max/sp2_max.pin deleted file mode 100644 index 2d05aee..0000000 --- a/src/altera/quartus/max/sp2_max.pin +++ /dev/null @@ -1,167 +0,0 @@ - -- Copyright (C) 1991-2009 Altera Corporation - -- Your use of Altera Corporation's design tools, logic functions - -- and other software and tools, and its AMPP partner logic - -- functions, and any output files from any of the foregoing - -- (including device programming or simulation files), and any - -- associated documentation or information are expressly subject - -- to the terms and conditions of the Altera Program License - -- Subscription Agreement, Altera MegaCore Function License - -- Agreement, or other applicable license agreement, including, - -- without limitation, that your use is for the sole purpose of - -- programming logic devices manufactured by Altera and sold by - -- Altera or its authorized distributors. Please refer to the - -- applicable agreement for further details. - -- - -- This is a Quartus II output file. It is for reporting purposes only, and is - -- not intended for use as a Quartus II input file. This file cannot be used - -- to make Quartus II pin assignments - for instructions on how to make pin - -- assignments, please see Quartus II help. - --------------------------------------------------------------------------------- - - - - --------------------------------------------------------------------------------- - -- NC : No Connect. This pin has no internal connection to the device. - -- DNU : Do Not Use. This pin MUST NOT be connected. - -- VCC : Dedicated power pin, which MUST be connected to VCC. - -- VCCIO : Dedicated power pin, which MUST be connected to VCC - -- of its bank. - -- GND : Dedicated ground pin. Dedicated GND pins MUST be connected to GND. - -- It can also be used to report unused dedicated pins. The connection - -- on the board for unused dedicated pins depends on whether this will - -- be used in a future design. One example is device migration. When - -- using device migration, refer to the device pin-tables. If it is a - -- GND pin in the pin table or if it will not be used in a future design - -- for another purpose the it MUST be connected to GND. If it is an unused - -- dedicated pin, then it can be connected to a valid signal on the board - -- (low, high, or toggling) if that signal is required for a different - -- revision of the design. - -- GND+ : Unused input pin. It can also be used to report unused dual-purpose pins. - -- This pin should be connected to GND. It may also be connected to a - -- valid signal on the board (low, high, or toggling) if that signal - -- is required for a different revision of the design. - -- GND* : Unused I/O pin. For transceiver I/O banks (Bank 13, 14, 15, 16 and 17), - -- connect each pin marked GND* either individually through a 10k Ohm resistor - -- to GND or tie all pins together and connect through a single 10k Ohm resistor - -- to GND. - -- For non-transceiver I/O banks, connect each pin marked GND* directly to GND - -- or leave it unconnected. - -- RESERVED : Unused I/O pin, which MUST be left unconnected. - -- RESERVED_INPUT : Pin is tri-stated and should be connected to the board. - -- RESERVED_INPUT_WITH_WEAK_PULLUP : Pin is tri-stated with internal weak pull-up resistor. - -- RESERVED_INPUT_WITH_BUS_HOLD : Pin is tri-stated with bus-hold circuitry. - -- RESERVED_OUTPUT_DRIVEN_HIGH : Pin is output driven high. - -- NON_MIGRATABLE: This pin cannot be migrated. - --------------------------------------------------------------------------------- - - - - --------------------------------------------------------------------------------- - -- Pin directions (input, output or bidir) are based on device operating in user mode. - --------------------------------------------------------------------------------- - -Quartus II Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition -CHIP "sp2_max" ASSIGNED TO AN: EPM7128STC100-10 - -Pin Name/Usage : Location : Dir. : I/O Standard : Voltage : I/O Bank : User Assignment -------------------------------------------------------------------------------------------------------------- -UNUSED55 : 1 : input : TTL : : : N -UNUSED72 : 2 : input : TTL : : : N -VCCIO : 3 : power : : 5.0V : : -TDI : 4 : input : TTL : : : N -UNUSED70 : 5 : input : TTL : : : N -CMOS_AS : 6 : output : TTL : : : Y -UNUSED27 : 7 : input : TTL : : : N -WR_PDOS : 8 : output : TTL : : : Y -WD : 9 : input : TTL : : : Y -WSTB : 10 : input : TTL : : : Y -GND : 11 : gnd : : : : -TR43 : 12 : input : TTL : : : Y -CLK_WG : 13 : output : TTL : : : Y -FDAT : 14 : output : TTL : : : Y -TMS : 15 : input : TTL : : : N -QDAT : 16 : output : TTL : : : Y -XA[0] : 17 : input : TTL : : : Y -VCCIO : 18 : power : : 5.0V : : -SINC_2 : 19 : bidir : TTL : : : Y -SINC_1 : 20 : bidir : TTL : : : Y -XA[1] : 21 : input : TTL : : : Y -UNUSED22 : 22 : input : TTL : : : N -XA[2] : 23 : input : TTL : : : Y -UNUSED50 : 24 : input : TTL : : : N -RSTB : 25 : input : TTL : : : Y -GND : 26 : gnd : : : : -UNUSED2 : 27 : input : TTL : : : N -UNUSED28 : 28 : input : TTL : : : N -SR : 29 : input : TTL : : : Y -SL : 30 : input : TTL : : : Y -CLK14 : 31 : output : TTL : : : Y -CLKZZ : 32 : bidir : TTL : : : Y -UNUSED33 : 33 : input : TTL : : : Y -VCCIO : 34 : power : : 5.0V : : -AUD : 35 : output : TTL : : : Y -TG42_BUF : 36 : output : TTL : : : Y -XACS : 37 : input : TTL : : : Y -GND : 38 : gnd : : : : -VCCINT : 39 : power : : 5.0V : : -HDD_C[3] : 40 : input : TTL : : : Y -HDD_C[2] : 41 : input : TTL : : : Y -HDD_C[1] : 42 : input : TTL : : : Y -GND : 43 : gnd : : : : -FDD_C[0] : 44 : input : TTL : : : Y -FDD_C[1] : 45 : input : TTL : : : Y -FDD_C[2] : 46 : input : TTL : : : Y -HDD_C[0] : 47 : input : TTL : : : Y -HD_DIR : 48 : output : TTL : : : Y -UNUSED49 : 49 : input : TTL : : : N -UNUSED1 : 50 : input : TTL : : : N -VCCIO : 51 : power : : 5.0V : : -HD_CS : 52 : output : TTL : : : Y -UNUSED53 : 53 : input : TTL : : : Y -/CONF_X : 54 : bidir : TTL : : : Y -UNUSED63 : 55 : input : TTL : : : N -10K_CLK : 56 : output : TTL : : : Y -WR_CNF : 57 : input : TTL : : : Y -10K_D0 : 58 : output : TTL : : : Y -GND : 59 : gnd : : : : -D0 : 60 : input : TTL : : : Y -VGA_IN : 61 : input : TTL : : : Y -TCK : 62 : input : TTL : : : N -UNUSED77 : 63 : input : TTL : : : N -SINC_V : 64 : output : TTL : : : Y -UNUSED65 : 65 : input : TTL : : : Y -VCCIO : 66 : power : : 5.0V : : -SINC : 67 : output : TTL : : : Y -SINC_H : 68 : output : TTL : : : Y -SINC_IN : 69 : input : TTL : : : Y -UNUSED24 : 70 : input : TTL : : : N -XHD_RES : 71 : output : TTL : : : Y -UNUSED5 : 72 : input : TTL : : : N -TDO : 73 : output : TTL : : : N -GND : 74 : gnd : : : : -XHD_WR : 75 : output : TTL : : : Y -XHD_RD : 76 : output : TTL : : : Y -UNUSED7 : 77 : input : TTL : : : N -UNUSED78 : 78 : input : TTL : : : Y -XHD1_CS[1] : 79 : output : TTL : : : Y -XHD1_CS[2] : 80 : output : TTL : : : Y -XHD2_CS[1] : 81 : output : TTL : : : Y -VCCIO : 82 : power : : 5.0V : : -XHD2_CS[2] : 83 : output : TTL : : : Y -BEEP : 84 : output : TTL : : : Y -TG42_OUT : 85 : output : TTL : : : Y -GND : 86 : gnd : : : : -TG42_IN : 87 : input : TTL : : : Y -XHR_RDY : 88 : input : TTL : : : Y -EPM_RES : 89 : input : TTL : : : Y -PW_GOOD : 90 : input : TTL : : : Y -VCCINT : 91 : power : : 5.0V : : -RDAT : 92 : input : TTL : : : Y -/WG_WR : 93 : output : TTL : : : Y -STE : 94 : input : TTL : : : Y -GND : 95 : gnd : : : : -DENS_X : 96 : output : TTL : : : Y -/WG_RD : 97 : output : TTL : : : Y -WDAT : 98 : output : TTL : : : Y -CMOS_DRD : 99 : output : TTL : : : Y -CMOS_DWR : 100 : output : TTL : : : Y diff --git a/src/altera/quartus/max/sp2_max.pof b/src/altera/quartus/max/sp2_max.pof deleted file mode 100644 index 8740f1b19293801db263ecc1af7ac5cee4fc853f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8013 zcmeHMUx-yj7{3}TyDS8X;8SrdeCT2G?xt-%h_Pm@#^#o(kf5l$#Gir=^uJ~U~hlayL<1xs3Y34Dcat@C)&_AFbuQ8 z!op&>-q73A+1~NOmN(Y77mID}#lmBS7QkBvhX;oD_xBZ=pvTE9E`0hV7@^V>Ba|WI zR$d2lHB|`E6r^t~uM((|a6|@tzS%UC6+v0FY{A;Gq7tmE6IP;~m1V7^BKedDWZHs1GjX$Q6o$_*ENsw8< zdYi05fEwmC50+fudeOXk!!ug)!(3WoT%@43x;MZcb2)vkeMt|kx4@YcjCMn#lsXO- z*u-vKh#H`&zUySDkcJFVHUk+R*j!wM3M{ajP=i{L^9#d#g#azFuC``8g0+>(MhFf> z3Cbx!7}kUpKu>{RfofagHT~RhZKRZxuHm7g6PEqmEt)(g41I+;lccqQG1qlh%9uIL zI~iw4#}krd()d$aI;6ldxqwheH{VL!sFGGQApLQYX{jfutLdjDmv#%73=D=AAQp!sH88?1~Nh;_-A?|=8qw!0nN2j4x(KRJxo8R^ zlw`)G-O#?}RNqXeW+>C0_4;OMA8y$0aNxRT=y|dMoF{B%(-QWKlV_mrSQ`^7TWN(f zixN~8ZoB;kV7v9KqOmh%#pgHJfWZHBG>MiRWz^?e0olQPTDl`(fgm`+#{SL^*5PV9B3Zp zfq#zlE%{yzK>k6%{3z6>kw^07MUzciFvmXBB$0zVE7c@P^!JwQuRlk~*HNP7f%*9% zc0k8eHPoB^I*Wbe3P!TSV$|h1YGFXN@Pq!1Rz+g=Va!cWTPQZ zp)Bfk4Qi7ltBoe>blIfFBfCbcydEeH{?J^{@6XrRz2Ypg-O-vDiknx>8|z5Mh$ z7h4AxtbMBK%uh=vj~{vIQumi_AFViZVq0_9ju&6)Zdv>5>JLvW9b33_a$oc5XO^${ z_TBeSE_uD{Qg;g$AD_VD&8|(|Ep6AD&R$+NzGUZQ>tM?l*P8UzW&a-EHQ9Rf!pb`} zi}5azv`w*O9Ijg*KL)j%#{!#Ac(MIY zcULYi-|>6v;OQzK>o~@*f{HtUA*OPba69;egO|7gcmQC~kOQsIkD|vbQijU-q{XP9 zY!qWv+~Nu|rHa8jM66&AP!ru^$$6T9DqVqf70X!5BLKlT2tvyz);WSV!;-Nw|72(g zgzGZ~4ZH$XytE{tl<;!B{PA~UOzc$%smz9Ex}~|coLre5?_zP8+s9opoR&fZ&NJ*t z(OGVX!BUDO8j;#rY!upFhKQp}zT9fMU5fED4X;(a3!@_`8o`vdF(D?fLb0;b5jrJ| z9h8K0(HSzX%*~@TV#@Jo=ZIO?Guj!ORXw9%80j(8Gu9c8T4WVOBcrszOfh2CjTj(P SYz1>u{vJ6r%kS17y!s#Cg`%SX diff --git a/src/altera/quartus/max/sp2_max.qpf b/src/altera/quartus/max/sp2_max.qpf deleted file mode 100644 index 35df9f6..0000000 --- a/src/altera/quartus/max/sp2_max.qpf +++ /dev/null @@ -1,30 +0,0 @@ -# -------------------------------------------------------------------------- # -# -# Copyright (C) 1991-2009 Altera Corporation -# Your use of Altera Corporation's design tools, logic functions -# and other software and tools, and its AMPP partner logic -# functions, and any output files from any of the foregoing -# (including device programming or simulation files), and any -# associated documentation or information are expressly subject -# to the terms and conditions of the Altera Program License -# Subscription Agreement, Altera MegaCore Function License -# Agreement, or other applicable license agreement, including, -# without limitation, that your use is for the sole purpose of -# programming logic devices manufactured by Altera and sold by -# Altera or its authorized distributors. Please refer to the -# applicable agreement for further details. -# -# -------------------------------------------------------------------------- # -# -# Quartus II -# Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition -# Date created = 03:22:36 August 28, 2022 -# -# -------------------------------------------------------------------------- # - -QUARTUS_VERSION = "9.0" -DATE = "03:22:36 August 28, 2022" - -# Revisions - -PROJECT_REVISION = "sp2_max" diff --git a/src/altera/quartus/max/sp2_max.qsf b/src/altera/quartus/max/sp2_max.qsf deleted file mode 100644 index ae8b38b..0000000 --- a/src/altera/quartus/max/sp2_max.qsf +++ /dev/null @@ -1,226 +0,0 @@ -# -------------------------------------------------------------------------- # -# -# Copyright (C) 1991-2009 Altera Corporation -# Your use of Altera Corporation's design tools, logic functions -# and other software and tools, and its AMPP partner logic -# functions, and any output files from any of the foregoing -# (including device programming or simulation files), and any -# associated documentation or information are expressly subject -# to the terms and conditions of the Altera Program License -# Subscription Agreement, Altera MegaCore Function License -# Agreement, or other applicable license agreement, including, -# without limitation, that your use is for the sole purpose of -# programming logic devices manufactured by Altera and sold by -# Altera or its authorized distributors. Please refer to the -# applicable agreement for further details. -# -# -------------------------------------------------------------------------- # -# -# Quartus II -# Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition -# Date created = 03:22:36 August 28, 2022 -# -# -------------------------------------------------------------------------- # -# -# Notes: -# -# 1) The default values for assignments are stored in the file: -# sp2_max_assignment_defaults.qdf -# If this file doesn't exist, see file: -# assignment_defaults.qdf -# -# 2) Altera recommends that you do not modify this file. This -# file is updated automatically by the Quartus II software -# and any changes you make may be lost or overwritten. -# -# -------------------------------------------------------------------------- # - - -set_global_assignment -name FAMILY MAX7000S -set_global_assignment -name DEVICE "EPM7128STC100-10" -set_global_assignment -name TOP_LEVEL_ENTITY sp2_max -set_global_assignment -name ORIGINAL_QUARTUS_VERSION "9.0 SP2" -set_global_assignment -name PROJECT_CREATION_TIME_DATE "03:22:36 AUGUST 28, 2022" -set_global_assignment -name LAST_QUARTUS_VERSION "9.0 SP2" -set_location_assignment PIN_6 -to CMOS_AS -set_location_assignment PIN_8 -to WR_PDOS -set_location_assignment PIN_9 -to WD -set_location_assignment PIN_10 -to WSTB -set_location_assignment PIN_12 -to TR43 -set_location_assignment PIN_12 -to TR[43] -set_location_assignment PIN_13 -to CLK_WG -set_location_assignment PIN_14 -to FDAT -set_location_assignment PIN_16 -to QDAT -set_location_assignment PIN_17 -to XA0 -set_location_assignment PIN_17 -to XA[0] -set_location_assignment PIN_19 -to SINC_2 -set_location_assignment PIN_19 -to SINC_[2] -set_location_assignment PIN_20 -to SINC_1 -set_location_assignment PIN_20 -to SINC_[1] -set_location_assignment PIN_21 -to XA1 -set_location_assignment PIN_21 -to XA[1] -set_location_assignment PIN_23 -to XA2 -set_location_assignment PIN_23 -to XA[2] -set_location_assignment PIN_25 -to RSTB -set_location_assignment PIN_29 -to SR -set_location_assignment PIN_30 -to SL -set_location_assignment PIN_31 -to CLK14 -set_location_assignment PIN_31 -to CLK[14] -set_location_assignment PIN_32 -to CLKZZ -set_location_assignment PIN_33 -to UNUSED33 -set_location_assignment PIN_33 -to UNUSED[33] -set_location_assignment PIN_35 -to AUD -set_location_assignment PIN_36 -to TG42_BUF -set_location_assignment PIN_37 -to XACS -set_location_assignment PIN_40 -to HDD_C3 -set_location_assignment PIN_40 -to HDD_C[3] -set_location_assignment PIN_41 -to HDD_C2 -set_location_assignment PIN_41 -to HDD_C[2] -set_location_assignment PIN_42 -to HDD_C1 -set_location_assignment PIN_42 -to HDD_C[1] -set_location_assignment PIN_44 -to FDD_C0 -set_location_assignment PIN_44 -to FDD_C[0] -set_location_assignment PIN_45 -to FDD_C1 -set_location_assignment PIN_45 -to FDD_C[1] -set_location_assignment PIN_46 -to FDD_C2 -set_location_assignment PIN_46 -to FDD_C[2] -set_location_assignment PIN_47 -to HDD_C0 -set_location_assignment PIN_47 -to HDD_C[0] -set_location_assignment PIN_48 -to HD_DIR -set_location_assignment PIN_52 -to HD_CS -set_location_assignment PIN_53 -to UNUSED53 -set_location_assignment PIN_53 -to UNUSED[53] -set_location_assignment PIN_54 -to /CONF_X -set_location_assignment PIN_56 -to 10K_CLK -set_location_assignment PIN_57 -to WR_CNF -set_location_assignment PIN_58 -to 10K_D0 -set_location_assignment PIN_58 -to 10K_D[0] -set_location_assignment PIN_60 -to D0 -set_location_assignment PIN_60 -to D[0] -set_location_assignment PIN_61 -to VGA_IN -set_location_assignment PIN_64 -to SINC_V -set_location_assignment PIN_65 -to UNUSED65 -set_location_assignment PIN_65 -to UNUSED[65] -set_location_assignment PIN_67 -to SINC -set_location_assignment PIN_68 -to SINC_H -set_location_assignment PIN_69 -to SINC_IN -set_location_assignment PIN_71 -to XHD_RES -set_location_assignment PIN_75 -to XHD_WR -set_location_assignment PIN_76 -to XHD_RD -set_location_assignment PIN_78 -to UNUSED78 -set_location_assignment PIN_78 -to UNUSED[78] -set_location_assignment PIN_79 -to XHD1_CS1 -set_location_assignment PIN_79 -to XHD1_CS[1] -set_location_assignment PIN_80 -to XHD1_CS2 -set_location_assignment PIN_80 -to XHD1_CS[2] -set_location_assignment PIN_81 -to XHD2_CS1 -set_location_assignment PIN_81 -to XHD2_CS[1] -set_location_assignment PIN_83 -to XHD2_CS2 -set_location_assignment PIN_83 -to XHD2_CS[2] -set_location_assignment PIN_84 -to BEEP -set_location_assignment PIN_85 -to TG42_OUT -set_location_assignment PIN_87 -to TG42_IN -set_location_assignment PIN_88 -to XHR_RDY -set_location_assignment PIN_89 -to EPM_RES -set_location_assignment PIN_90 -to PW_GOOD -set_location_assignment PIN_92 -to RDAT -set_location_assignment PIN_93 -to /WG_WR -set_location_assignment PIN_94 -to STE -set_location_assignment PIN_96 -to DENS_X -set_location_assignment PIN_97 -to /WG_RD -set_location_assignment PIN_98 -to WDAT -set_location_assignment PIN_99 -to CMOS_DRD -set_location_assignment PIN_100 -to CMOS_DWR -set_global_assignment -name FMAX_REQUIREMENT "100 MHz" -set_global_assignment -name CUT_OFF_CLEAR_AND_PRESET_PATHS ON -set_global_assignment -name CUT_OFF_IO_PIN_FEEDBACK ON -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to LR_T1 -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to LR_T[1] -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to LR_T0 -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to LR_T[0] -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to CLK_WG -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT OFF -to XHD_RD -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT OFF -to XHD_RES -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT OFF -to XHD_WR -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT OFF -to XHD1_CS1 -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT OFF -to XHD1_CS[1] -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT OFF -to XHD1_CS2 -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT OFF -to XHD1_CS[2] -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT OFF -to XHD2_CS1 -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT OFF -to XHD2_CS[1] -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT OFF -to XHD2_CS2 -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT OFF -to XHD2_CS[2] -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT OFF -to 10K_CLK -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT OFF -to 10K_D0 -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT OFF -to 10K_D[0] -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to REG_P0 -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to REG_P[0] -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to REG_P1 -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to REG_P[1] -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to REG_P2 -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to REG_P[2] -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to TG42_BUF -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to TG42_OUT -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to STWG0 -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to STWG[0] -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to STWG1 -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to STWG[1] -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to STWG2 -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to STWG[2] -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to XCT0 -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to XCT[0] -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to XCT1 -set_instance_assignment -name MAX7000_INDIVIDUAL_TURBO_BIT ON -to XCT[1] -set_global_assignment -name SECURITY_BIT ON -set_global_assignment -name ENABLE_VREFB_PIN OFF -set_global_assignment -name ENABLE_VREFA_PIN OFF -set_global_assignment -name MAX7000B_VCCIO_IOBANK2 3.3V -set_global_assignment -name MAX7000B_VCCIO_IOBANK1 3.3V -set_global_assignment -name DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE OFF -set_global_assignment -name FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE OFF -set_global_assignment -name FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE ON -set_global_assignment -name ENABLE_JTAG_BST_SUPPORT OFF -set_global_assignment -name FLEX6K_CONFIGURATION_SCHEME "PASSIVE SERIAL" -set_global_assignment -name MAX7000_ENABLE_JTAG_BST_SUPPORT ON -set_global_assignment -name FLEX10K_ENABLE_LOCK_OUTPUT OFF -set_global_assignment -name MAX7000_JTAG_USER_CODE FFFF -set_global_assignment -name FLEX10K_CONFIGURATION_SCHEME "PASSIVE SERIAL" -set_global_assignment -name FLEX10K_JTAG_USER_CODE 7F -set_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFF -set_global_assignment -name ENABLE_DEVICE_WIDE_OE OFF -set_global_assignment -name ENABLE_DEVICE_WIDE_RESET OFF -set_global_assignment -name RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name RESERVE_RDYNBUSY_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name RELEASE_CLEARS_BEFORE_TRI_STATES OFF -set_global_assignment -name AUTO_RESTART_CONFIGURATION OFF -set_global_assignment -name USER_START_UP_CLOCK OFF -set_global_assignment -name AUTO_GLOBAL_REGISTER_CONTROLS OFF -set_global_assignment -name AUTO_GLOBAL_CLOCK OFF -set_global_assignment -name AUTO_IMPLEMENT_IN_ROM OFF -set_global_assignment -name AUTO_OPEN_DRAIN_PINS ON -set_global_assignment -name STATE_MACHINE_PROCESSING AUTO -set_global_assignment -name AUTO_PACKED_REGISTERS OFF -set_global_assignment -name AUTO_FAST_INPUT_REGISTERS OFF -set_global_assignment -name AUTO_FAST_OUTPUT_REGISTERS OFF -set_global_assignment -name AUTO_GLOBAL_OE ON -set_global_assignment -name FLEX6K_OPTIMIZATION_TECHNIQUE AREA -set_global_assignment -name FLEX10K_OPTIMIZATION_TECHNIQUE AREA -set_global_assignment -name SAVE_DISK_SPACE ON -set_global_assignment -name SMART_RECOMPILE OFF -set_global_assignment -name SIMULATION_MODE TIMING -set_global_assignment -name EDA_SHOW_LMF_MAPPING_MESSAGES OFF -section_id eda_design_synthesis -set_global_assignment -name EDA_INPUT_GND_NAME GND -section_id eda_design_synthesis -set_global_assignment -name EDA_INPUT_VCC_NAME VCC -section_id eda_design_synthesis -set_global_assignment -name END_TIME "25 us" -set_global_assignment -name START_TIME "0 ns" -set_global_assignment -name GLITCH_INTERVAL "0 ns" -set_global_assignment -name GLITCH_DETECTION OFF -set_global_assignment -name CHECK_OUTPUTS OFF -set_global_assignment -name SETUP_HOLD_DETECTION OFF -set_global_assignment -name CUT_OFF_READ_DURING_WRITE_PATHS OFF -set_global_assignment -name NUMBER_OF_SOURCES_PER_DESTINATION_TO_REPORT 10 -set_global_assignment -name EXCLUDE_TPD_PATHS_LESS_THAN "0 ns" -set_global_assignment -name MISC_FILE "C:/Sprinter/src/altera/quartus/max/sp2_max.dpf" \ No newline at end of file diff --git a/src/altera/quartus/max/sp2_max.qws b/src/altera/quartus/max/sp2_max.qws deleted file mode 100644 index 51464d5..0000000 --- a/src/altera/quartus/max/sp2_max.qws +++ /dev/null @@ -1,18 +0,0 @@ -[ProjectWorkspace] -ptn_Child1=Frames -[ProjectWorkspace.Frames] -ptn_Child1=ChildFrames -[ProjectWorkspace.Frames.ChildFrames] -ptn_Child1=Document-0 -ptn_Child2=Document-1 -ptn_Child3=Document-2 -[ProjectWorkspace.Frames.ChildFrames.Document-0] -ptn_Child1=ViewFrame-0 -[ProjectWorkspace.Frames.ChildFrames.Document-0.ViewFrame-0] -DocPathName=sp2_max.tdf -DocumentCLSID={5d384c4f-893c-11d1-a087-0020affa43f2} -IsChildFrameDetached=False -IsActiveChildFrame=False -ptn_Child1=StateMap -[ProjectWorkspace.Frames.ChildFrames.Document-0.ViewFrame-0.StateMap] -AFC_IN_REPORT=False diff --git a/src/altera/quartus/max/sp2_max.tan.rpt b/src/altera/quartus/max/sp2_max.tan.rpt deleted file mode 100644 index bb4e02c..0000000 --- a/src/altera/quartus/max/sp2_max.tan.rpt +++ /dev/null @@ -1,1328 +0,0 @@ -Classic Timing Analyzer report for sp2_max -Sun Aug 28 03:30:43 2022 -Quartus II Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition - - ---------------------- -; Table of Contents ; ---------------------- - 1. Legal Notice - 2. Timing Analyzer Summary - 3. Timing Analyzer Settings - 4. Clock Settings Summary - 5. Parallel Compilation - 6. Clock Setup: 'TG42_IN' - 7. Clock Setup: 'STE' - 8. Clock Setup: 'RSTB' - 9. Clock Setup: 'WSTB' - 10. Clock Hold: 'TG42_IN' - 11. Clock Hold: 'STE' - 12. Clock Hold: 'RSTB' - 13. Clock Hold: 'WSTB' - 14. tsu - 15. tco - 16. tpd - 17. th - 18. Timing Analyzer Messages - - - ----------------- -; Legal Notice ; ----------------- -Copyright (C) 1991-2009 Altera Corporation -Your use of Altera Corporation's design tools, logic functions -and other software and tools, and its AMPP partner logic -functions, and any output files from any of the foregoing -(including device programming or simulation files), and any -associated documentation or information are expressly subject -to the terms and conditions of the Altera Program License -Subscription Agreement, Altera MegaCore Function License -Agreement, or other applicable license agreement, including, -without limitation, that your use is for the sole purpose of -programming logic devices manufactured by Altera and sold by -Altera or its authorized distributors. Please refer to the -applicable agreement for further details. - - - -+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -; Timing Analyzer Summary ; -+------------------------------+------------+-----------------------------------+----------------------------------+----------+----------+------------+----------+--------------+ -; Type ; Slack ; Required Time ; Actual Time ; From ; To ; From Clock ; To Clock ; Failed Paths ; -+------------------------------+------------+-----------------------------------+----------------------------------+----------+----------+------------+----------+--------------+ -; Worst-case tsu ; N/A ; None ; 23.800 ns ; HDD_C[3] ; $00051 ; -- ; TG42_IN ; 0 ; -; Worst-case tco ; N/A ; None ; 50.000 ns ; STWG[2] ; CLK_WG ; TG42_IN ; -- ; 0 ; -; Worst-case tpd ; N/A ; None ; 10.000 ns ; TG42_IN ; TG42_BUF ; -- ; -- ; 0 ; -; Worst-case th ; N/A ; None ; 51.000 ns ; SL ; LR_T[1] ; -- ; TG42_IN ; 0 ; -; Clock Setup: 'TG42_IN' ; -47.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; 9.62 MHz ( period = 104.000 ns ) ; /RESET ; $00051 ; TG42_IN ; TG42_IN ; 57 ; -; Clock Setup: 'STE' ; -21.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[0] ; REG_P[2] ; STE ; STE ; 6 ; -; Clock Setup: 'RSTB' ; -21.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[0] ; REG_P[2] ; RSTB ; RSTB ; 6 ; -; Clock Setup: 'WSTB' ; -21.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[0] ; REG_P[2] ; WSTB ; WSTB ; 6 ; -; Clock Hold: 'TG42_IN' ; -12.200 ns ; 100.00 MHz ( period = 10.000 ns ) ; N/A ; FDD_1440 ; $00021 ; TG42_IN ; TG42_IN ; 48 ; -; Clock Hold: 'STE' ; 5.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; N/A ; REG_P[1] ; REG_P[2] ; STE ; STE ; 0 ; -; Clock Hold: 'RSTB' ; 5.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; N/A ; REG_P[1] ; REG_P[2] ; RSTB ; RSTB ; 0 ; -; Clock Hold: 'WSTB' ; 5.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; N/A ; REG_P[1] ; REG_P[2] ; WSTB ; WSTB ; 0 ; -; Total number of failed paths ; ; ; ; ; ; ; ; 123 ; -+------------------------------+------------+-----------------------------------+----------------------------------+----------+----------+------------+----------+--------------+ - - -+--------------------------------------------------------------------------------------------------------------------+ -; Timing Analyzer Settings ; -+---------------------------------------------------------------------+--------------------+------+----+-------------+ -; Option ; Setting ; From ; To ; Entity Name ; -+---------------------------------------------------------------------+--------------------+------+----+-------------+ -; Device Name ; EPM7128STC100-10 ; ; ; ; -; Timing Models ; Final ; ; ; ; -; Default hold multicycle ; Same as Multicycle ; ; ; ; -; Cut paths between unrelated clock domains ; On ; ; ; ; -; Cut off read during write signal paths ; Off ; ; ; ; -; Cut off feedback from I/O pins ; On ; ; ; ; -; Report Combined Fast/Slow Timing ; Off ; ; ; ; -; fmax Requirement ; 100 MHz ; ; ; ; -; Ignore Clock Settings ; Off ; ; ; ; -; Analyze latches as synchronous elements ; On ; ; ; ; -; Enable Recovery/Removal analysis ; Off ; ; ; ; -; Enable Clock Latency ; Off ; ; ; ; -; Use TimeQuest Timing Analyzer ; Off ; ; ; ; -; Number of source nodes to report per destination node ; 10 ; ; ; ; -; Number of destination nodes to report ; 10 ; ; ; ; -; Number of paths to report ; 200 ; ; ; ; -; Minimum tpd to report ; 0 ns ; ; ; ; -; Report Minimum Timing Checks ; Off ; ; ; ; -; Use Fast Timing Models ; Off ; ; ; ; -; Report IO Paths Separately ; Off ; ; ; ; -; Perform Multicorner Analysis ; Off ; ; ; ; -; Reports the worst-case path for each clock domain and analysis ; Off ; ; ; ; -; Removes common clock path pessimism (CCPP) during slack computation ; Off ; ; ; ; -; Output I/O Timing Endpoint ; Near End ; ; ; ; -+---------------------------------------------------------------------+--------------------+------+----+-------------+ - - -+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -; Clock Settings Summary ; -+-----------------+--------------------+----------+------------------+---------------+--------------+----------+-----------------------+---------------------+--------+--------------+ -; Clock Node Name ; Clock Setting Name ; Type ; Fmax Requirement ; Early Latency ; Late Latency ; Based on ; Multiply Base Fmax by ; Divide Base Fmax by ; Offset ; Phase offset ; -+-----------------+--------------------+----------+------------------+---------------+--------------+----------+-----------------------+---------------------+--------+--------------+ -; TG42_IN ; ; User Pin ; 100.0 MHz ; 0.000 ns ; 0.000 ns ; -- ; N/A ; N/A ; N/A ; ; -; STE ; ; User Pin ; 100.0 MHz ; 0.000 ns ; 0.000 ns ; -- ; N/A ; N/A ; N/A ; ; -; RSTB ; ; User Pin ; 100.0 MHz ; 0.000 ns ; 0.000 ns ; -- ; N/A ; N/A ; N/A ; ; -; WSTB ; ; User Pin ; 100.0 MHz ; 0.000 ns ; 0.000 ns ; -- ; N/A ; N/A ; N/A ; ; -+-----------------+--------------------+----------+------------------+---------------+--------------+----------+-----------------------+---------------------+--------+--------------+ - - -Parallel compilation was disabled, but you have multiple processors available. Enable parallel compilation to reduce compilation time. -+-------------------------------------+ -; Parallel Compilation ; -+----------------------------+--------+ -; Processors ; Number ; -+----------------------------+--------+ -; Number detected on machine ; 4 ; -; Maximum allowed ; 1 ; -+----------------------------+--------+ - - -+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -; Clock Setup: 'TG42_IN' ; -+------------+---------------------------------------------+-------------------------------+-------------------------------+------------+----------+-----------------------------+---------------------------+-------------------------+ -; Slack ; Actual fmax (period) ; From ; To ; From Clock ; To Clock ; Required Setup Relationship ; Required Longest P2P Time ; Actual Longest P2P Time ; -+------------+---------------------------------------------+-------------------------------+-------------------------------+------------+----------+-----------------------------+---------------------------+-------------------------+ -; -47.000 ns ; 9.62 MHz ( period = 104.000 ns ) ; /RESET ; $00051 ; TG42_IN ; TG42_IN ; 5.000 ns ; -25.000 ns ; 22.000 ns ; -; -47.000 ns ; 9.62 MHz ( period = 104.000 ns ) ; /RESET ; $00050 ; TG42_IN ; TG42_IN ; 5.000 ns ; -25.000 ns ; 22.000 ns ; -; -47.000 ns ; 9.62 MHz ( period = 104.000 ns ) ; /RESET ; $00053 ; TG42_IN ; TG42_IN ; 5.000 ns ; -25.000 ns ; 22.000 ns ; -; -47.000 ns ; 9.62 MHz ( period = 104.000 ns ) ; /RESET ; $00052 ; TG42_IN ; TG42_IN ; 5.000 ns ; -25.000 ns ; 22.000 ns ; -; -27.000 ns ; 15.63 MHz ( period = 64.000 ns ) ; LR_T[0] ; REG_P[2] ; TG42_IN ; TG42_IN ; 5.000 ns ; -21.000 ns ; 6.000 ns ; -; -27.000 ns ; 15.63 MHz ( period = 64.000 ns ) ; LR_T[1] ; REG_P[2] ; TG42_IN ; TG42_IN ; 5.000 ns ; -21.000 ns ; 6.000 ns ; -; -27.000 ns ; 15.63 MHz ( period = 64.000 ns ) ; LR_T[0] ; REG_P[1] ; TG42_IN ; TG42_IN ; 5.000 ns ; -21.000 ns ; 6.000 ns ; -; -27.000 ns ; 15.63 MHz ( period = 64.000 ns ) ; LR_T[1] ; REG_P[1] ; TG42_IN ; TG42_IN ; 5.000 ns ; -21.000 ns ; 6.000 ns ; -; -27.000 ns ; 15.63 MHz ( period = 64.000 ns ) ; LR_T[0] ; REG_P[0] ; TG42_IN ; TG42_IN ; 5.000 ns ; -21.000 ns ; 6.000 ns ; -; -27.000 ns ; 15.63 MHz ( period = 64.000 ns ) ; LR_T[1] ; REG_P[0] ; TG42_IN ; TG42_IN ; 5.000 ns ; -21.000 ns ; 6.000 ns ; -; -21.000 ns ; 19.23 MHz ( period = 52.000 ns ) ; $00047 ; /RESET ; TG42_IN ; TG42_IN ; 5.000 ns ; -15.000 ns ; 6.000 ns ; -; -13.000 ns ; 43.48 MHz ( period = 23.000 ns ) ; $00009 ; $00009 ; TG42_IN ; TG42_IN ; 10.000 ns ; -7.000 ns ; 6.000 ns ; -; -13.000 ns ; 43.48 MHz ( period = 23.000 ns ) ; XCT[0] ; XCT[0] ; TG42_IN ; TG42_IN ; 10.000 ns ; -7.000 ns ; 6.000 ns ; -; -13.000 ns ; 43.48 MHz ( period = 23.000 ns ) ; XCT[0] ; XCT[1] ; TG42_IN ; TG42_IN ; 10.000 ns ; -7.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[4] ; WGR[4] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[0] ; WGR[4] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[1] ; WGR[4] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[3] ; WGR[4] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[2] ; WGR[4] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; $00021 ; WGR[4] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[0] ; WGR[0] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[1] ; WGR[0] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[3] ; WGR[0] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[2] ; WGR[0] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; $00021 ; WGR[0] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[0] ; WGR[1] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[1] ; WGR[1] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[3] ; WGR[1] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[2] ; WGR[1] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; $00021 ; WGR[1] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[0] ; WGR[3] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[1] ; WGR[3] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[3] ; WGR[3] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[2] ; WGR[3] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; $00021 ; WGR[3] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[0] ; WGR[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[1] ; WGR[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[3] ; WGR[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; WGR[2] ; WGR[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; $00021 ; WGR[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -10.000 ns ; 50.00 MHz ( period = 20.000 ns ) ; $00023 ; $00021 ; TG42_IN ; TG42_IN ; 10.000 ns ; -4.000 ns ; 6.000 ns ; -; -6.000 ns ; 62.50 MHz ( period = 16.000 ns ) ; REG_P[1] ; REG_P[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; 0.000 ns ; 6.000 ns ; -; -6.000 ns ; 62.50 MHz ( period = 16.000 ns ) ; REG_P[0] ; REG_P[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; 0.000 ns ; 6.000 ns ; -; -6.000 ns ; 62.50 MHz ( period = 16.000 ns ) ; REG_P[1] ; REG_P[1] ; TG42_IN ; TG42_IN ; 10.000 ns ; 0.000 ns ; 6.000 ns ; -; -6.000 ns ; 62.50 MHz ( period = 16.000 ns ) ; REG_P[0] ; REG_P[1] ; TG42_IN ; TG42_IN ; 10.000 ns ; 0.000 ns ; 6.000 ns ; -; -6.000 ns ; 62.50 MHz ( period = 16.000 ns ) ; REG_P[1] ; REG_P[0] ; TG42_IN ; TG42_IN ; 10.000 ns ; 0.000 ns ; 6.000 ns ; -; -6.000 ns ; 62.50 MHz ( period = 16.000 ns ) ; REG_P[0] ; REG_P[0] ; TG42_IN ; TG42_IN ; 10.000 ns ; 0.000 ns ; 6.000 ns ; -; -6.000 ns ; 62.50 MHz ( period = 16.000 ns ) ; STWG[1] ; STWG[1] ; TG42_IN ; TG42_IN ; 10.000 ns ; 0.000 ns ; 6.000 ns ; -; -6.000 ns ; 62.50 MHz ( period = 16.000 ns ) ; STWG[0] ; STWG[1] ; TG42_IN ; TG42_IN ; 10.000 ns ; 0.000 ns ; 6.000 ns ; -; -6.000 ns ; 62.50 MHz ( period = 16.000 ns ) ; STWG[1] ; STWG[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; 0.000 ns ; 6.000 ns ; -; -6.000 ns ; 62.50 MHz ( period = 16.000 ns ) ; STWG[2] ; STWG[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; 0.000 ns ; 6.000 ns ; -; -6.000 ns ; 62.50 MHz ( period = 16.000 ns ) ; STWG[0] ; STWG[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; 0.000 ns ; 6.000 ns ; -; -6.000 ns ; 62.50 MHz ( period = 16.000 ns ) ; STWG[0] ; STWG[0] ; TG42_IN ; TG42_IN ; 10.000 ns ; 0.000 ns ; 6.000 ns ; -; -6.000 ns ; 62.50 MHz ( period = 16.000 ns ) ; CT_WG ; CT_WG ; TG42_IN ; TG42_IN ; 10.000 ns ; 0.000 ns ; 6.000 ns ; -; -5.800 ns ; 46.30 MHz ( period = 21.600 ns ) ; /RESET ; SINC_VT ; TG42_IN ; TG42_IN ; 5.000 ns ; 9.000 ns ; 14.800 ns ; -; -2.000 ns ; 83.33 MHz ( period = 12.000 ns ) ; lpm_counter:CT_rtl_0|dffs[0] ; $00021 ; TG42_IN ; TG42_IN ; 10.000 ns ; 12.000 ns ; 14.000 ns ; -; -2.000 ns ; 83.33 MHz ( period = 12.000 ns ) ; lpm_counter:CT_rtl_0|dffs[0] ; $00023 ; TG42_IN ; TG42_IN ; 10.000 ns ; 12.000 ns ; 14.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; FDD_1440 ; FDD_1440 ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CT_rtl_0|dffs[2] ; lpm_counter:CT_rtl_0|dffs[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CT_rtl_0|dffs[1] ; lpm_counter:CT_rtl_0|dffs[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CT_rtl_0|dffs[0] ; lpm_counter:CT_rtl_0|dffs[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CT_rtl_0|dffs[2] ; lpm_counter:CT_rtl_0|dffs[3] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CT_rtl_0|dffs[3] ; lpm_counter:CT_rtl_0|dffs[3] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CT_rtl_0|dffs[1] ; lpm_counter:CT_rtl_0|dffs[3] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CT_rtl_0|dffs[0] ; lpm_counter:CT_rtl_0|dffs[3] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[0] ; lpm_counter:CTH_rtl_2|dffs[0] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[0] ; lpm_counter:CTH_rtl_2|dffs[1] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[1] ; lpm_counter:CTH_rtl_2|dffs[1] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[0] ; lpm_counter:CTH_rtl_2|dffs[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[1] ; lpm_counter:CTH_rtl_2|dffs[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[2] ; lpm_counter:CTH_rtl_2|dffs[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; SINC_HT ; lpm_counter:CTH_rtl_2|dffs[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[0] ; lpm_counter:CTH_rtl_2|dffs[3] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[1] ; lpm_counter:CTH_rtl_2|dffs[3] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[2] ; lpm_counter:CTH_rtl_2|dffs[3] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[3] ; lpm_counter:CTH_rtl_2|dffs[3] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; SINC_HT ; lpm_counter:CTH_rtl_2|dffs[3] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[0] ; lpm_counter:CTH_rtl_2|dffs[4] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[1] ; lpm_counter:CTH_rtl_2|dffs[4] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[2] ; lpm_counter:CTH_rtl_2|dffs[4] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[3] ; lpm_counter:CTH_rtl_2|dffs[4] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[4] ; lpm_counter:CTH_rtl_2|dffs[4] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; SINC_HT ; lpm_counter:CTH_rtl_2|dffs[4] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[0] ; lpm_counter:CTH_rtl_2|dffs[5] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[1] ; lpm_counter:CTH_rtl_2|dffs[5] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[2] ; lpm_counter:CTH_rtl_2|dffs[5] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[3] ; lpm_counter:CTH_rtl_2|dffs[5] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[4] ; lpm_counter:CTH_rtl_2|dffs[5] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[5] ; lpm_counter:CTH_rtl_2|dffs[5] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; SINC_HT ; lpm_counter:CTH_rtl_2|dffs[5] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[2] ; SINC_HT ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[3] ; SINC_HT ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[4] ; SINC_HT ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTH_rtl_2|dffs[5] ; SINC_HT ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[0] ; lpm_counter:CTV_rtl_1|dffs[0] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[0] ; lpm_counter:CTV_rtl_1|dffs[1] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[1] ; lpm_counter:CTV_rtl_1|dffs[1] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[0] ; lpm_counter:CTV_rtl_1|dffs[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[1] ; lpm_counter:CTV_rtl_1|dffs[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[2] ; lpm_counter:CTV_rtl_1|dffs[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; SINC_VT ; lpm_counter:CTV_rtl_1|dffs[2] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[0] ; lpm_counter:CTV_rtl_1|dffs[3] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[1] ; lpm_counter:CTV_rtl_1|dffs[3] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[2] ; lpm_counter:CTV_rtl_1|dffs[3] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[3] ; lpm_counter:CTV_rtl_1|dffs[3] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; SINC_VT ; lpm_counter:CTV_rtl_1|dffs[3] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[0] ; lpm_counter:CTV_rtl_1|dffs[4] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[1] ; lpm_counter:CTV_rtl_1|dffs[4] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[2] ; lpm_counter:CTV_rtl_1|dffs[4] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[3] ; lpm_counter:CTV_rtl_1|dffs[4] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[4] ; lpm_counter:CTV_rtl_1|dffs[4] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; SINC_VT ; lpm_counter:CTV_rtl_1|dffs[4] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[0] ; lpm_counter:CTV_rtl_1|dffs[5] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[1] ; lpm_counter:CTV_rtl_1|dffs[5] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[2] ; lpm_counter:CTV_rtl_1|dffs[5] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[3] ; lpm_counter:CTV_rtl_1|dffs[5] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[4] ; lpm_counter:CTV_rtl_1|dffs[5] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[5] ; lpm_counter:CTV_rtl_1|dffs[5] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; SINC_VT ; lpm_counter:CTV_rtl_1|dffs[5] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[0] ; lpm_counter:CTV_rtl_1|dffs[6] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[1] ; lpm_counter:CTV_rtl_1|dffs[6] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[2] ; lpm_counter:CTV_rtl_1|dffs[6] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[3] ; lpm_counter:CTV_rtl_1|dffs[6] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[4] ; lpm_counter:CTV_rtl_1|dffs[6] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[5] ; lpm_counter:CTV_rtl_1|dffs[6] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[6] ; lpm_counter:CTV_rtl_1|dffs[6] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; SINC_VT ; lpm_counter:CTV_rtl_1|dffs[6] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[0] ; lpm_counter:CTV_rtl_1|dffs[7] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[1] ; lpm_counter:CTV_rtl_1|dffs[7] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[2] ; lpm_counter:CTV_rtl_1|dffs[7] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[3] ; lpm_counter:CTV_rtl_1|dffs[7] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[4] ; lpm_counter:CTV_rtl_1|dffs[7] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[5] ; lpm_counter:CTV_rtl_1|dffs[7] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[6] ; lpm_counter:CTV_rtl_1|dffs[7] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[7] ; lpm_counter:CTV_rtl_1|dffs[7] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; SINC_VT ; lpm_counter:CTV_rtl_1|dffs[7] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[0] ; lpm_counter:CTV_rtl_1|dffs[8] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[1] ; lpm_counter:CTV_rtl_1|dffs[8] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[2] ; lpm_counter:CTV_rtl_1|dffs[8] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[3] ; lpm_counter:CTV_rtl_1|dffs[8] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[4] ; lpm_counter:CTV_rtl_1|dffs[8] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[5] ; lpm_counter:CTV_rtl_1|dffs[8] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[6] ; lpm_counter:CTV_rtl_1|dffs[8] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[7] ; lpm_counter:CTV_rtl_1|dffs[8] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[8] ; lpm_counter:CTV_rtl_1|dffs[8] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; SINC_VT ; lpm_counter:CTV_rtl_1|dffs[8] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[2] ; SINC_VT ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[3] ; SINC_VT ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[4] ; SINC_VT ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[5] ; SINC_VT ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[6] ; SINC_VT ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[7] ; SINC_VT ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CTV_rtl_1|dffs[8] ; SINC_VT ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CT_rtl_0|dffs[1] ; lpm_counter:CT_rtl_0|dffs[1] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CT_rtl_0|dffs[0] ; lpm_counter:CT_rtl_0|dffs[1] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; lpm_counter:CT_rtl_0|dffs[0] ; lpm_counter:CT_rtl_0|dffs[0] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; XCT[1] ; XCT[1] ; TG42_IN ; TG42_IN ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 5.200 ns ; Restricted to 125.0 MHz ( period = 8.0 ns ) ; XCT[1] ; $00021 ; TG42_IN ; TG42_IN ; 10.000 ns ; 20.000 ns ; 14.800 ns ; -; 5.200 ns ; Restricted to 125.0 MHz ( period = 8.0 ns ) ; XCT[1] ; $00023 ; TG42_IN ; TG42_IN ; 10.000 ns ; 20.000 ns ; 14.800 ns ; -; 7.200 ns ; Restricted to 125.0 MHz ( period = 8.0 ns ) ; FDD_1440 ; $00021 ; TG42_IN ; TG42_IN ; 10.000 ns ; 22.000 ns ; 14.800 ns ; -; 7.200 ns ; Restricted to 125.0 MHz ( period = 8.0 ns ) ; FDD_1440 ; $00023 ; TG42_IN ; TG42_IN ; 10.000 ns ; 22.000 ns ; 14.800 ns ; -+------------+---------------------------------------------+-------------------------------+-------------------------------+------------+----------+-----------------------------+---------------------------+-------------------------+ - - -+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -; Clock Setup: 'STE' ; -+------------+-----------------------------------+----------+----------+------------+----------+-----------------------------+---------------------------+-------------------------+ -; Slack ; Actual fmax (period) ; From ; To ; From Clock ; To Clock ; Required Setup Relationship ; Required Longest P2P Time ; Actual Longest P2P Time ; -+------------+-----------------------------------+----------+----------+------------+----------+-----------------------------+---------------------------+-------------------------+ -; -21.000 ns ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[0] ; REG_P[2] ; STE ; STE ; 5.000 ns ; -15.000 ns ; 6.000 ns ; -; -21.000 ns ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[1] ; REG_P[2] ; STE ; STE ; 5.000 ns ; -15.000 ns ; 6.000 ns ; -; -21.000 ns ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[0] ; REG_P[1] ; STE ; STE ; 5.000 ns ; -15.000 ns ; 6.000 ns ; -; -21.000 ns ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[1] ; REG_P[1] ; STE ; STE ; 5.000 ns ; -15.000 ns ; 6.000 ns ; -; -21.000 ns ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[0] ; REG_P[0] ; STE ; STE ; 5.000 ns ; -15.000 ns ; 6.000 ns ; -; -21.000 ns ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[1] ; REG_P[0] ; STE ; STE ; 5.000 ns ; -15.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; REG_P[1] ; REG_P[2] ; STE ; STE ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; REG_P[0] ; REG_P[2] ; STE ; STE ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; REG_P[1] ; REG_P[1] ; STE ; STE ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; REG_P[0] ; REG_P[1] ; STE ; STE ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; REG_P[1] ; REG_P[0] ; STE ; STE ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; REG_P[0] ; REG_P[0] ; STE ; STE ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; STWG[1] ; STWG[1] ; STE ; STE ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; STWG[0] ; STWG[1] ; STE ; STE ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; STWG[1] ; STWG[2] ; STE ; STE ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; STWG[2] ; STWG[2] ; STE ; STE ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; STWG[0] ; STWG[2] ; STE ; STE ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; STWG[0] ; STWG[0] ; STE ; STE ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; CT_WG ; CT_WG ; STE ; STE ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -+------------+-----------------------------------+----------+----------+------------+----------+-----------------------------+---------------------------+-------------------------+ - - -+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -; Clock Setup: 'RSTB' ; -+------------+-----------------------------------+----------+----------+------------+----------+-----------------------------+---------------------------+-------------------------+ -; Slack ; Actual fmax (period) ; From ; To ; From Clock ; To Clock ; Required Setup Relationship ; Required Longest P2P Time ; Actual Longest P2P Time ; -+------------+-----------------------------------+----------+----------+------------+----------+-----------------------------+---------------------------+-------------------------+ -; -21.000 ns ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[0] ; REG_P[2] ; RSTB ; RSTB ; 5.000 ns ; -15.000 ns ; 6.000 ns ; -; -21.000 ns ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[1] ; REG_P[2] ; RSTB ; RSTB ; 5.000 ns ; -15.000 ns ; 6.000 ns ; -; -21.000 ns ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[0] ; REG_P[1] ; RSTB ; RSTB ; 5.000 ns ; -15.000 ns ; 6.000 ns ; -; -21.000 ns ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[1] ; REG_P[1] ; RSTB ; RSTB ; 5.000 ns ; -15.000 ns ; 6.000 ns ; -; -21.000 ns ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[0] ; REG_P[0] ; RSTB ; RSTB ; 5.000 ns ; -15.000 ns ; 6.000 ns ; -; -21.000 ns ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[1] ; REG_P[0] ; RSTB ; RSTB ; 5.000 ns ; -15.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; REG_P[1] ; REG_P[2] ; RSTB ; RSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; REG_P[0] ; REG_P[2] ; RSTB ; RSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; REG_P[1] ; REG_P[1] ; RSTB ; RSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; REG_P[0] ; REG_P[1] ; RSTB ; RSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; REG_P[1] ; REG_P[0] ; RSTB ; RSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; REG_P[0] ; REG_P[0] ; RSTB ; RSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; STWG[1] ; STWG[1] ; RSTB ; RSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; STWG[0] ; STWG[1] ; RSTB ; RSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; STWG[1] ; STWG[2] ; RSTB ; RSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; STWG[2] ; STWG[2] ; RSTB ; RSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; STWG[0] ; STWG[2] ; RSTB ; RSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; STWG[0] ; STWG[0] ; RSTB ; RSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; CT_WG ; CT_WG ; RSTB ; RSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -+------------+-----------------------------------+----------+----------+------------+----------+-----------------------------+---------------------------+-------------------------+ - - -+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -; Clock Setup: 'WSTB' ; -+------------+-----------------------------------+----------+----------+------------+----------+-----------------------------+---------------------------+-------------------------+ -; Slack ; Actual fmax (period) ; From ; To ; From Clock ; To Clock ; Required Setup Relationship ; Required Longest P2P Time ; Actual Longest P2P Time ; -+------------+-----------------------------------+----------+----------+------------+----------+-----------------------------+---------------------------+-------------------------+ -; -21.000 ns ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[0] ; REG_P[2] ; WSTB ; WSTB ; 5.000 ns ; -15.000 ns ; 6.000 ns ; -; -21.000 ns ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[1] ; REG_P[2] ; WSTB ; WSTB ; 5.000 ns ; -15.000 ns ; 6.000 ns ; -; -21.000 ns ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[0] ; REG_P[1] ; WSTB ; WSTB ; 5.000 ns ; -15.000 ns ; 6.000 ns ; -; -21.000 ns ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[1] ; REG_P[1] ; WSTB ; WSTB ; 5.000 ns ; -15.000 ns ; 6.000 ns ; -; -21.000 ns ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[0] ; REG_P[0] ; WSTB ; WSTB ; 5.000 ns ; -15.000 ns ; 6.000 ns ; -; -21.000 ns ; 19.23 MHz ( period = 52.000 ns ) ; LR_T[1] ; REG_P[0] ; WSTB ; WSTB ; 5.000 ns ; -15.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; REG_P[1] ; REG_P[2] ; WSTB ; WSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; REG_P[0] ; REG_P[2] ; WSTB ; WSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; REG_P[1] ; REG_P[1] ; WSTB ; WSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; REG_P[0] ; REG_P[1] ; WSTB ; WSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; REG_P[1] ; REG_P[0] ; WSTB ; WSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; REG_P[0] ; REG_P[0] ; WSTB ; WSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; STWG[1] ; STWG[1] ; WSTB ; WSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; STWG[0] ; STWG[1] ; WSTB ; WSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; STWG[1] ; STWG[2] ; WSTB ; WSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; STWG[2] ; STWG[2] ; WSTB ; WSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; STWG[0] ; STWG[2] ; WSTB ; WSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; STWG[0] ; STWG[0] ; WSTB ; WSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -; 0.000 ns ; 100.00 MHz ( period = 10.000 ns ) ; CT_WG ; CT_WG ; WSTB ; WSTB ; 10.000 ns ; 6.000 ns ; 6.000 ns ; -+------------+-----------------------------------+----------+----------+------------+----------+-----------------------------+---------------------------+-------------------------+ - - -+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -; Clock Hold: 'TG42_IN' ; -+---------------+-------------------------------+-------------------------------+------------+----------+----------------------------+----------------------------+--------------------------+ -; Minimum Slack ; From ; To ; From Clock ; To Clock ; Required Hold Relationship ; Required Shortest P2P Time ; Actual Shortest P2P Time ; -+---------------+-------------------------------+-------------------------------+------------+----------+----------------------------+----------------------------+--------------------------+ -; -12.200 ns ; FDD_1440 ; $00021 ; TG42_IN ; TG42_IN ; 0.000 ns ; 27.000 ns ; 14.800 ns ; -; -12.200 ns ; FDD_1440 ; $00023 ; TG42_IN ; TG42_IN ; 0.000 ns ; 27.000 ns ; 14.800 ns ; -; -10.200 ns ; XCT[1] ; $00021 ; TG42_IN ; TG42_IN ; 0.000 ns ; 25.000 ns ; 14.800 ns ; -; -10.200 ns ; XCT[1] ; $00023 ; TG42_IN ; TG42_IN ; 0.000 ns ; 25.000 ns ; 14.800 ns ; -; -8.000 ns ; $00009 ; $00009 ; TG42_IN ; TG42_IN ; 0.000 ns ; 14.000 ns ; 6.000 ns ; -; -8.000 ns ; XCT[0] ; XCT[0] ; TG42_IN ; TG42_IN ; 0.000 ns ; 14.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[4] ; WGR[4] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[0] ; WGR[4] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[1] ; WGR[4] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[3] ; WGR[4] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[2] ; WGR[4] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; $00021 ; WGR[4] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[0] ; WGR[0] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[1] ; WGR[0] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[3] ; WGR[0] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[2] ; WGR[0] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; $00021 ; WGR[0] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[0] ; WGR[1] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[1] ; WGR[1] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[3] ; WGR[1] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[2] ; WGR[1] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; $00021 ; WGR[1] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[0] ; WGR[3] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[1] ; WGR[3] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[3] ; WGR[3] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[2] ; WGR[3] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; $00021 ; WGR[3] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[0] ; WGR[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[1] ; WGR[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[3] ; WGR[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; WGR[2] ; WGR[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; $00021 ; WGR[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -5.000 ns ; $00023 ; $00021 ; TG42_IN ; TG42_IN ; 0.000 ns ; 11.000 ns ; 6.000 ns ; -; -3.000 ns ; lpm_counter:CT_rtl_0|dffs[0] ; $00021 ; TG42_IN ; TG42_IN ; 0.000 ns ; 17.000 ns ; 14.000 ns ; -; -3.000 ns ; lpm_counter:CT_rtl_0|dffs[0] ; $00023 ; TG42_IN ; TG42_IN ; 0.000 ns ; 17.000 ns ; 14.000 ns ; -; -1.000 ns ; REG_P[1] ; REG_P[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 7.000 ns ; 6.000 ns ; -; -1.000 ns ; REG_P[0] ; REG_P[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 7.000 ns ; 6.000 ns ; -; -1.000 ns ; REG_P[1] ; REG_P[1] ; TG42_IN ; TG42_IN ; 0.000 ns ; 7.000 ns ; 6.000 ns ; -; -1.000 ns ; REG_P[0] ; REG_P[1] ; TG42_IN ; TG42_IN ; 0.000 ns ; 7.000 ns ; 6.000 ns ; -; -1.000 ns ; REG_P[1] ; REG_P[0] ; TG42_IN ; TG42_IN ; 0.000 ns ; 7.000 ns ; 6.000 ns ; -; -1.000 ns ; REG_P[0] ; REG_P[0] ; TG42_IN ; TG42_IN ; 0.000 ns ; 7.000 ns ; 6.000 ns ; -; -1.000 ns ; STWG[1] ; STWG[1] ; TG42_IN ; TG42_IN ; 0.000 ns ; 7.000 ns ; 6.000 ns ; -; -1.000 ns ; STWG[0] ; STWG[1] ; TG42_IN ; TG42_IN ; 0.000 ns ; 7.000 ns ; 6.000 ns ; -; -1.000 ns ; STWG[1] ; STWG[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 7.000 ns ; 6.000 ns ; -; -1.000 ns ; STWG[2] ; STWG[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 7.000 ns ; 6.000 ns ; -; -1.000 ns ; STWG[0] ; STWG[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 7.000 ns ; 6.000 ns ; -; -1.000 ns ; STWG[0] ; STWG[0] ; TG42_IN ; TG42_IN ; 0.000 ns ; 7.000 ns ; 6.000 ns ; -; -1.000 ns ; CT_WG ; CT_WG ; TG42_IN ; TG42_IN ; 0.000 ns ; 7.000 ns ; 6.000 ns ; -; 5.000 ns ; FDD_1440 ; FDD_1440 ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CT_rtl_0|dffs[2] ; lpm_counter:CT_rtl_0|dffs[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CT_rtl_0|dffs[1] ; lpm_counter:CT_rtl_0|dffs[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CT_rtl_0|dffs[0] ; lpm_counter:CT_rtl_0|dffs[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CT_rtl_0|dffs[2] ; lpm_counter:CT_rtl_0|dffs[3] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CT_rtl_0|dffs[3] ; lpm_counter:CT_rtl_0|dffs[3] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CT_rtl_0|dffs[1] ; lpm_counter:CT_rtl_0|dffs[3] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CT_rtl_0|dffs[0] ; lpm_counter:CT_rtl_0|dffs[3] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[0] ; lpm_counter:CTH_rtl_2|dffs[0] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[0] ; lpm_counter:CTH_rtl_2|dffs[1] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[1] ; lpm_counter:CTH_rtl_2|dffs[1] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[0] ; lpm_counter:CTH_rtl_2|dffs[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[1] ; lpm_counter:CTH_rtl_2|dffs[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[2] ; lpm_counter:CTH_rtl_2|dffs[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; SINC_HT ; lpm_counter:CTH_rtl_2|dffs[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[0] ; lpm_counter:CTH_rtl_2|dffs[3] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[1] ; lpm_counter:CTH_rtl_2|dffs[3] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[2] ; lpm_counter:CTH_rtl_2|dffs[3] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[3] ; lpm_counter:CTH_rtl_2|dffs[3] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; SINC_HT ; lpm_counter:CTH_rtl_2|dffs[3] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[0] ; lpm_counter:CTH_rtl_2|dffs[4] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[1] ; lpm_counter:CTH_rtl_2|dffs[4] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[2] ; lpm_counter:CTH_rtl_2|dffs[4] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[3] ; lpm_counter:CTH_rtl_2|dffs[4] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[4] ; lpm_counter:CTH_rtl_2|dffs[4] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; SINC_HT ; lpm_counter:CTH_rtl_2|dffs[4] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[0] ; lpm_counter:CTH_rtl_2|dffs[5] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[1] ; lpm_counter:CTH_rtl_2|dffs[5] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[2] ; lpm_counter:CTH_rtl_2|dffs[5] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[3] ; lpm_counter:CTH_rtl_2|dffs[5] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[4] ; lpm_counter:CTH_rtl_2|dffs[5] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[5] ; lpm_counter:CTH_rtl_2|dffs[5] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; SINC_HT ; lpm_counter:CTH_rtl_2|dffs[5] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[2] ; SINC_HT ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[3] ; SINC_HT ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[4] ; SINC_HT ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTH_rtl_2|dffs[5] ; SINC_HT ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[0] ; lpm_counter:CTV_rtl_1|dffs[0] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[0] ; lpm_counter:CTV_rtl_1|dffs[1] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[1] ; lpm_counter:CTV_rtl_1|dffs[1] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[0] ; lpm_counter:CTV_rtl_1|dffs[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[1] ; lpm_counter:CTV_rtl_1|dffs[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[2] ; lpm_counter:CTV_rtl_1|dffs[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; SINC_VT ; lpm_counter:CTV_rtl_1|dffs[2] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[0] ; lpm_counter:CTV_rtl_1|dffs[3] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[1] ; lpm_counter:CTV_rtl_1|dffs[3] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[2] ; lpm_counter:CTV_rtl_1|dffs[3] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[3] ; lpm_counter:CTV_rtl_1|dffs[3] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; SINC_VT ; lpm_counter:CTV_rtl_1|dffs[3] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[0] ; lpm_counter:CTV_rtl_1|dffs[4] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[1] ; lpm_counter:CTV_rtl_1|dffs[4] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[2] ; lpm_counter:CTV_rtl_1|dffs[4] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[3] ; lpm_counter:CTV_rtl_1|dffs[4] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[4] ; lpm_counter:CTV_rtl_1|dffs[4] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; SINC_VT ; lpm_counter:CTV_rtl_1|dffs[4] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[0] ; lpm_counter:CTV_rtl_1|dffs[5] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[1] ; lpm_counter:CTV_rtl_1|dffs[5] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[2] ; lpm_counter:CTV_rtl_1|dffs[5] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[3] ; lpm_counter:CTV_rtl_1|dffs[5] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[4] ; lpm_counter:CTV_rtl_1|dffs[5] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[5] ; lpm_counter:CTV_rtl_1|dffs[5] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; SINC_VT ; lpm_counter:CTV_rtl_1|dffs[5] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[0] ; lpm_counter:CTV_rtl_1|dffs[6] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[1] ; lpm_counter:CTV_rtl_1|dffs[6] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[2] ; lpm_counter:CTV_rtl_1|dffs[6] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[3] ; lpm_counter:CTV_rtl_1|dffs[6] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[4] ; lpm_counter:CTV_rtl_1|dffs[6] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[5] ; lpm_counter:CTV_rtl_1|dffs[6] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[6] ; lpm_counter:CTV_rtl_1|dffs[6] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; SINC_VT ; lpm_counter:CTV_rtl_1|dffs[6] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[0] ; lpm_counter:CTV_rtl_1|dffs[7] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[1] ; lpm_counter:CTV_rtl_1|dffs[7] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[2] ; lpm_counter:CTV_rtl_1|dffs[7] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[3] ; lpm_counter:CTV_rtl_1|dffs[7] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[4] ; lpm_counter:CTV_rtl_1|dffs[7] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[5] ; lpm_counter:CTV_rtl_1|dffs[7] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[6] ; lpm_counter:CTV_rtl_1|dffs[7] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[7] ; lpm_counter:CTV_rtl_1|dffs[7] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; SINC_VT ; lpm_counter:CTV_rtl_1|dffs[7] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[0] ; lpm_counter:CTV_rtl_1|dffs[8] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[1] ; lpm_counter:CTV_rtl_1|dffs[8] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[2] ; lpm_counter:CTV_rtl_1|dffs[8] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[3] ; lpm_counter:CTV_rtl_1|dffs[8] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[4] ; lpm_counter:CTV_rtl_1|dffs[8] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[5] ; lpm_counter:CTV_rtl_1|dffs[8] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[6] ; lpm_counter:CTV_rtl_1|dffs[8] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[7] ; lpm_counter:CTV_rtl_1|dffs[8] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[8] ; lpm_counter:CTV_rtl_1|dffs[8] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; SINC_VT ; lpm_counter:CTV_rtl_1|dffs[8] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[2] ; SINC_VT ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[3] ; SINC_VT ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[4] ; SINC_VT ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[5] ; SINC_VT ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[6] ; SINC_VT ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[7] ; SINC_VT ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CTV_rtl_1|dffs[8] ; SINC_VT ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CT_rtl_0|dffs[1] ; lpm_counter:CT_rtl_0|dffs[1] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CT_rtl_0|dffs[0] ; lpm_counter:CT_rtl_0|dffs[1] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; lpm_counter:CT_rtl_0|dffs[0] ; lpm_counter:CT_rtl_0|dffs[0] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; XCT[0] ; XCT[1] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; XCT[1] ; XCT[1] ; TG42_IN ; TG42_IN ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 10.800 ns ; /RESET ; SINC_VT ; TG42_IN ; TG42_IN ; -5.000 ns ; 4.000 ns ; 14.800 ns ; -; 20.000 ns ; LR_T[0] ; REG_P[2] ; TG42_IN ; TG42_IN ; -5.000 ns ; -14.000 ns ; 6.000 ns ; -; 20.000 ns ; LR_T[1] ; REG_P[2] ; TG42_IN ; TG42_IN ; -5.000 ns ; -14.000 ns ; 6.000 ns ; -; 20.000 ns ; LR_T[0] ; REG_P[1] ; TG42_IN ; TG42_IN ; -5.000 ns ; -14.000 ns ; 6.000 ns ; -; 20.000 ns ; LR_T[1] ; REG_P[1] ; TG42_IN ; TG42_IN ; -5.000 ns ; -14.000 ns ; 6.000 ns ; -; 20.000 ns ; LR_T[0] ; REG_P[0] ; TG42_IN ; TG42_IN ; -5.000 ns ; -14.000 ns ; 6.000 ns ; -; 20.000 ns ; LR_T[1] ; REG_P[0] ; TG42_IN ; TG42_IN ; -5.000 ns ; -14.000 ns ; 6.000 ns ; -; 26.000 ns ; $00047 ; /RESET ; TG42_IN ; TG42_IN ; -5.000 ns ; -20.000 ns ; 6.000 ns ; -; 44.000 ns ; /RESET ; $00053 ; TG42_IN ; TG42_IN ; -5.000 ns ; -30.000 ns ; 14.000 ns ; -; 44.000 ns ; /RESET ; $00052 ; TG42_IN ; TG42_IN ; -5.000 ns ; -30.000 ns ; 14.000 ns ; -; 52.000 ns ; /RESET ; $00051 ; TG42_IN ; TG42_IN ; -5.000 ns ; -30.000 ns ; 22.000 ns ; -; 52.000 ns ; /RESET ; $00050 ; TG42_IN ; TG42_IN ; -5.000 ns ; -30.000 ns ; 22.000 ns ; -+---------------+-------------------------------+-------------------------------+------------+----------+----------------------------+----------------------------+--------------------------+ - - -+--------------------------------------------------------------------------------------------------------------------------------------------------+ -; Clock Hold: 'STE' ; -+---------------+----------+----------+------------+----------+----------------------------+----------------------------+--------------------------+ -; Minimum Slack ; From ; To ; From Clock ; To Clock ; Required Hold Relationship ; Required Shortest P2P Time ; Actual Shortest P2P Time ; -+---------------+----------+----------+------------+----------+----------------------------+----------------------------+--------------------------+ -; 5.000 ns ; REG_P[1] ; REG_P[2] ; STE ; STE ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; REG_P[0] ; REG_P[2] ; STE ; STE ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; REG_P[1] ; REG_P[1] ; STE ; STE ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; REG_P[0] ; REG_P[1] ; STE ; STE ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; REG_P[1] ; REG_P[0] ; STE ; STE ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; REG_P[0] ; REG_P[0] ; STE ; STE ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; STWG[1] ; STWG[1] ; STE ; STE ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; STWG[0] ; STWG[1] ; STE ; STE ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; STWG[1] ; STWG[2] ; STE ; STE ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; STWG[2] ; STWG[2] ; STE ; STE ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; STWG[0] ; STWG[2] ; STE ; STE ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; STWG[0] ; STWG[0] ; STE ; STE ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; CT_WG ; CT_WG ; STE ; STE ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 26.000 ns ; LR_T[0] ; REG_P[2] ; STE ; STE ; -5.000 ns ; -20.000 ns ; 6.000 ns ; -; 26.000 ns ; LR_T[1] ; REG_P[2] ; STE ; STE ; -5.000 ns ; -20.000 ns ; 6.000 ns ; -; 26.000 ns ; LR_T[0] ; REG_P[1] ; STE ; STE ; -5.000 ns ; -20.000 ns ; 6.000 ns ; -; 26.000 ns ; LR_T[1] ; REG_P[1] ; STE ; STE ; -5.000 ns ; -20.000 ns ; 6.000 ns ; -; 26.000 ns ; LR_T[0] ; REG_P[0] ; STE ; STE ; -5.000 ns ; -20.000 ns ; 6.000 ns ; -; 26.000 ns ; LR_T[1] ; REG_P[0] ; STE ; STE ; -5.000 ns ; -20.000 ns ; 6.000 ns ; -+---------------+----------+----------+------------+----------+----------------------------+----------------------------+--------------------------+ - - -+--------------------------------------------------------------------------------------------------------------------------------------------------+ -; Clock Hold: 'RSTB' ; -+---------------+----------+----------+------------+----------+----------------------------+----------------------------+--------------------------+ -; Minimum Slack ; From ; To ; From Clock ; To Clock ; Required Hold Relationship ; Required Shortest P2P Time ; Actual Shortest P2P Time ; -+---------------+----------+----------+------------+----------+----------------------------+----------------------------+--------------------------+ -; 5.000 ns ; REG_P[1] ; REG_P[2] ; RSTB ; RSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; REG_P[0] ; REG_P[2] ; RSTB ; RSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; REG_P[1] ; REG_P[1] ; RSTB ; RSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; REG_P[0] ; REG_P[1] ; RSTB ; RSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; REG_P[1] ; REG_P[0] ; RSTB ; RSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; REG_P[0] ; REG_P[0] ; RSTB ; RSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; STWG[1] ; STWG[1] ; RSTB ; RSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; STWG[0] ; STWG[1] ; RSTB ; RSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; STWG[1] ; STWG[2] ; RSTB ; RSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; STWG[2] ; STWG[2] ; RSTB ; RSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; STWG[0] ; STWG[2] ; RSTB ; RSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; STWG[0] ; STWG[0] ; RSTB ; RSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; CT_WG ; CT_WG ; RSTB ; RSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 26.000 ns ; LR_T[0] ; REG_P[2] ; RSTB ; RSTB ; -5.000 ns ; -20.000 ns ; 6.000 ns ; -; 26.000 ns ; LR_T[1] ; REG_P[2] ; RSTB ; RSTB ; -5.000 ns ; -20.000 ns ; 6.000 ns ; -; 26.000 ns ; LR_T[0] ; REG_P[1] ; RSTB ; RSTB ; -5.000 ns ; -20.000 ns ; 6.000 ns ; -; 26.000 ns ; LR_T[1] ; REG_P[1] ; RSTB ; RSTB ; -5.000 ns ; -20.000 ns ; 6.000 ns ; -; 26.000 ns ; LR_T[0] ; REG_P[0] ; RSTB ; RSTB ; -5.000 ns ; -20.000 ns ; 6.000 ns ; -; 26.000 ns ; LR_T[1] ; REG_P[0] ; RSTB ; RSTB ; -5.000 ns ; -20.000 ns ; 6.000 ns ; -+---------------+----------+----------+------------+----------+----------------------------+----------------------------+--------------------------+ - - -+--------------------------------------------------------------------------------------------------------------------------------------------------+ -; Clock Hold: 'WSTB' ; -+---------------+----------+----------+------------+----------+----------------------------+----------------------------+--------------------------+ -; Minimum Slack ; From ; To ; From Clock ; To Clock ; Required Hold Relationship ; Required Shortest P2P Time ; Actual Shortest P2P Time ; -+---------------+----------+----------+------------+----------+----------------------------+----------------------------+--------------------------+ -; 5.000 ns ; REG_P[1] ; REG_P[2] ; WSTB ; WSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; REG_P[0] ; REG_P[2] ; WSTB ; WSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; REG_P[1] ; REG_P[1] ; WSTB ; WSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; REG_P[0] ; REG_P[1] ; WSTB ; WSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; REG_P[1] ; REG_P[0] ; WSTB ; WSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; REG_P[0] ; REG_P[0] ; WSTB ; WSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; STWG[1] ; STWG[1] ; WSTB ; WSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; STWG[0] ; STWG[1] ; WSTB ; WSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; STWG[1] ; STWG[2] ; WSTB ; WSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; STWG[2] ; STWG[2] ; WSTB ; WSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; STWG[0] ; STWG[2] ; WSTB ; WSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; STWG[0] ; STWG[0] ; WSTB ; WSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 5.000 ns ; CT_WG ; CT_WG ; WSTB ; WSTB ; 0.000 ns ; 1.000 ns ; 6.000 ns ; -; 26.000 ns ; LR_T[0] ; REG_P[2] ; WSTB ; WSTB ; -5.000 ns ; -20.000 ns ; 6.000 ns ; -; 26.000 ns ; LR_T[1] ; REG_P[2] ; WSTB ; WSTB ; -5.000 ns ; -20.000 ns ; 6.000 ns ; -; 26.000 ns ; LR_T[0] ; REG_P[1] ; WSTB ; WSTB ; -5.000 ns ; -20.000 ns ; 6.000 ns ; -; 26.000 ns ; LR_T[1] ; REG_P[1] ; WSTB ; WSTB ; -5.000 ns ; -20.000 ns ; 6.000 ns ; -; 26.000 ns ; LR_T[0] ; REG_P[0] ; WSTB ; WSTB ; -5.000 ns ; -20.000 ns ; 6.000 ns ; -; 26.000 ns ; LR_T[1] ; REG_P[0] ; WSTB ; WSTB ; -5.000 ns ; -20.000 ns ; 6.000 ns ; -+---------------+----------+----------+------------+----------+----------------------------+----------------------------+--------------------------+ - - -+--------------------------------------------------------------------+ -; tsu ; -+-------+--------------+------------+----------+----------+----------+ -; Slack ; Required tsu ; Actual tsu ; From ; To ; To Clock ; -+-------+--------------+------------+----------+----------+----------+ -; N/A ; None ; 23.800 ns ; FDD_C[2] ; $00052 ; TG42_IN ; -; N/A ; None ; 23.800 ns ; FDD_C[2] ; $00053 ; TG42_IN ; -; N/A ; None ; 23.800 ns ; HDD_C[0] ; $00052 ; TG42_IN ; -; N/A ; None ; 23.800 ns ; HDD_C[0] ; $00053 ; TG42_IN ; -; N/A ; None ; 23.800 ns ; HDD_C[2] ; $00052 ; TG42_IN ; -; N/A ; None ; 23.800 ns ; HDD_C[2] ; $00053 ; TG42_IN ; -; N/A ; None ; 23.800 ns ; HDD_C[2] ; $00050 ; TG42_IN ; -; N/A ; None ; 23.800 ns ; HDD_C[2] ; $00051 ; TG42_IN ; -; N/A ; None ; 23.800 ns ; FDD_C[1] ; $00052 ; TG42_IN ; -; N/A ; None ; 23.800 ns ; FDD_C[1] ; $00053 ; TG42_IN ; -; N/A ; None ; 23.800 ns ; FDD_C[1] ; $00050 ; TG42_IN ; -; N/A ; None ; 23.800 ns ; FDD_C[1] ; $00051 ; TG42_IN ; -; N/A ; None ; 23.800 ns ; FDD_C[0] ; $00052 ; TG42_IN ; -; N/A ; None ; 23.800 ns ; FDD_C[0] ; $00053 ; TG42_IN ; -; N/A ; None ; 23.800 ns ; HDD_C[1] ; $00052 ; TG42_IN ; -; N/A ; None ; 23.800 ns ; HDD_C[1] ; $00053 ; TG42_IN ; -; N/A ; None ; 23.800 ns ; HDD_C[3] ; $00052 ; TG42_IN ; -; N/A ; None ; 23.800 ns ; HDD_C[3] ; $00053 ; TG42_IN ; -; N/A ; None ; 23.800 ns ; HDD_C[3] ; $00050 ; TG42_IN ; -; N/A ; None ; 23.800 ns ; HDD_C[3] ; $00051 ; TG42_IN ; -; N/A ; None ; 23.000 ns ; FDD_C[2] ; $00050 ; TG42_IN ; -; N/A ; None ; 23.000 ns ; FDD_C[2] ; $00051 ; TG42_IN ; -; N/A ; None ; 23.000 ns ; HDD_C[0] ; $00050 ; TG42_IN ; -; N/A ; None ; 23.000 ns ; HDD_C[0] ; $00051 ; TG42_IN ; -; N/A ; None ; 23.000 ns ; FDD_C[0] ; $00050 ; TG42_IN ; -; N/A ; None ; 23.000 ns ; FDD_C[0] ; $00051 ; TG42_IN ; -; N/A ; None ; 23.000 ns ; HDD_C[1] ; $00050 ; TG42_IN ; -; N/A ; None ; 23.000 ns ; HDD_C[1] ; $00051 ; TG42_IN ; -; N/A ; None ; 7.000 ns ; WR_CNF ; HDD_CLK ; TG42_IN ; -; N/A ; None ; 7.000 ns ; FDD_C[2] ; HDD_CLK ; TG42_IN ; -; N/A ; None ; 7.000 ns ; HDD_C[0] ; HDD_CLK ; TG42_IN ; -; N/A ; None ; -1.000 ns ; D0 ; FDD_1440 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[0] ; $00041 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[0] ; $00042 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[0] ; $00043 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[0] ; $00044 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[0] ; $00045 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[0] ; $00046 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[2] ; $00041 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[2] ; $00042 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[2] ; $00043 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[2] ; $00044 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[2] ; $00045 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[2] ; $00046 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[2] ; $00048 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[2] ; $00049 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; FDD_C[1] ; $00041 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; FDD_C[1] ; $00042 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; FDD_C[1] ; $00043 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; FDD_C[1] ; $00044 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; FDD_C[1] ; $00045 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; FDD_C[1] ; $00046 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; FDD_C[1] ; $00048 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; FDD_C[1] ; $00049 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; FDD_C[0] ; $00041 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; FDD_C[0] ; $00042 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; FDD_C[0] ; $00043 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; FDD_C[0] ; $00044 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; FDD_C[0] ; $00045 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; FDD_C[0] ; $00046 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[1] ; $00041 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[1] ; $00042 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[1] ; $00043 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[1] ; $00044 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[1] ; $00045 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[1] ; $00046 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[1] ; $00048 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[1] ; $00049 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[3] ; $00041 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[3] ; $00042 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[3] ; $00043 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[3] ; $00044 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[3] ; $00045 ; TG42_IN ; -; N/A ; None ; -1.000 ns ; HDD_C[3] ; $00046 ; TG42_IN ; -; N/A ; None ; -9.000 ns ; RDAT ; $00023 ; TG42_IN ; -; N/A ; None ; -9.000 ns ; RDAT ; $00021 ; TG42_IN ; -; N/A ; None ; -18.200 ns ; FDD_C[2] ; SINC_VT ; TG42_IN ; -; N/A ; None ; -18.200 ns ; HDD_C[0] ; SINC_VT ; TG42_IN ; -; N/A ; None ; -18.200 ns ; HDD_C[2] ; SINC_VT ; TG42_IN ; -; N/A ; None ; -18.200 ns ; FDD_C[1] ; SINC_VT ; TG42_IN ; -; N/A ; None ; -18.200 ns ; FDD_C[0] ; SINC_VT ; TG42_IN ; -; N/A ; None ; -18.200 ns ; HDD_C[1] ; SINC_VT ; TG42_IN ; -; N/A ; None ; -18.200 ns ; HDD_C[3] ; SINC_VT ; TG42_IN ; -; N/A ; None ; -19.000 ns ; EPM_RES ; /RESET ; TG42_IN ; -; N/A ; None ; -35.000 ns ; SR ; LR_T[0] ; STE ; -; N/A ; None ; -35.000 ns ; SR ; LR_T[0] ; RSTB ; -; N/A ; None ; -35.000 ns ; SR ; LR_T[0] ; WSTB ; -; N/A ; None ; -35.000 ns ; TR43 ; LR_T[1] ; STE ; -; N/A ; None ; -35.000 ns ; TR43 ; LR_T[1] ; RSTB ; -; N/A ; None ; -35.000 ns ; TR43 ; LR_T[1] ; WSTB ; -; N/A ; None ; -35.000 ns ; TR43 ; LR_T[0] ; STE ; -; N/A ; None ; -35.000 ns ; TR43 ; LR_T[0] ; RSTB ; -; N/A ; None ; -35.000 ns ; TR43 ; LR_T[0] ; WSTB ; -; N/A ; None ; -35.000 ns ; WD ; LR_T[1] ; STE ; -; N/A ; None ; -35.000 ns ; WD ; LR_T[1] ; RSTB ; -; N/A ; None ; -35.000 ns ; WD ; LR_T[1] ; WSTB ; -; N/A ; None ; -35.000 ns ; WD ; LR_T[0] ; STE ; -; N/A ; None ; -35.000 ns ; WD ; LR_T[0] ; RSTB ; -; N/A ; None ; -35.000 ns ; WD ; LR_T[0] ; WSTB ; -; N/A ; None ; -35.000 ns ; SL ; LR_T[1] ; STE ; -; N/A ; None ; -35.000 ns ; SL ; LR_T[1] ; RSTB ; -; N/A ; None ; -35.000 ns ; SL ; LR_T[1] ; WSTB ; -; N/A ; None ; -35.000 ns ; PW_GOOD ; $00047 ; TG42_IN ; -; N/A ; None ; -40.000 ns ; SR ; LR_T[0] ; TG42_IN ; -; N/A ; None ; -40.000 ns ; TR43 ; LR_T[1] ; TG42_IN ; -; N/A ; None ; -40.000 ns ; TR43 ; LR_T[0] ; TG42_IN ; -; N/A ; None ; -40.000 ns ; WD ; LR_T[1] ; TG42_IN ; -; N/A ; None ; -40.000 ns ; WD ; LR_T[0] ; TG42_IN ; -; N/A ; None ; -40.000 ns ; SL ; LR_T[1] ; TG42_IN ; -+-------+--------------+------------+----------+----------+----------+ - - -+---------------------------------------------------------------------------------------------+ -; tco ; -+-------+--------------+------------+-------------------------------+------------+------------+ -; Slack ; Required tco ; Actual tco ; From ; To ; From Clock ; -+-------+--------------+------------+-------------------------------+------------+------------+ -; N/A ; None ; 50.000 ns ; STWG[2] ; CLK_WG ; TG42_IN ; -; N/A ; None ; 47.000 ns ; $00047 ; XHD_RES ; TG42_IN ; -; N/A ; None ; 47.000 ns ; SINC_VT ; SINC ; TG42_IN ; -; N/A ; None ; 42.000 ns ; REG_P[2] ; WDAT ; TG42_IN ; -; N/A ; None ; 39.000 ns ; lpm_counter:CTV_rtl_1|dffs[8] ; SINC_2 ; TG42_IN ; -; N/A ; None ; 39.000 ns ; WGR[4] ; QDAT ; TG42_IN ; -; N/A ; None ; 39.000 ns ; STWG[2] ; CLK_WG ; STE ; -; N/A ; None ; 39.000 ns ; STWG[2] ; CLK_WG ; RSTB ; -; N/A ; None ; 39.000 ns ; STWG[2] ; CLK_WG ; WSTB ; -; N/A ; None ; 39.000 ns ; $00021 ; FDAT ; TG42_IN ; -; N/A ; None ; 39.000 ns ; SINC_HT ; SINC ; TG42_IN ; -; N/A ; None ; 39.000 ns ; SINC_VT ; SINC_V ; TG42_IN ; -; N/A ; None ; 36.000 ns ; $00009 ; CLK14 ; TG42_IN ; -; N/A ; None ; 31.000 ns ; /RESET ; /CONF_X ; TG42_IN ; -; N/A ; None ; 31.000 ns ; lpm_counter:CTH_rtl_2|dffs[5] ; SINC_1 ; TG42_IN ; -; N/A ; None ; 31.000 ns ; REG_P[2] ; WDAT ; STE ; -; N/A ; None ; 31.000 ns ; REG_P[2] ; WDAT ; RSTB ; -; N/A ; None ; 31.000 ns ; REG_P[2] ; WDAT ; WSTB ; -; N/A ; None ; 31.000 ns ; SINC_HT ; SINC_H ; TG42_IN ; -; N/A ; None ; 23.000 ns ; lpm_counter:CT_rtl_0|dffs[3] ; AUD ; TG42_IN ; -; N/A ; None ; 21.000 ns ; $00049 ; HD_DIR ; TG42_IN ; -; N/A ; None ; 15.000 ns ; XCT[1] ; CLKZZ ; TG42_IN ; -; N/A ; None ; 13.000 ns ; $00049 ; XHD_RD ; TG42_IN ; -; N/A ; None ; 13.000 ns ; $00048 ; XHD_WR ; TG42_IN ; -; N/A ; None ; 13.000 ns ; FDD_1440 ; 10K_D0 ; TG42_IN ; -; N/A ; None ; 13.000 ns ; $00043 ; /WG_RD ; TG42_IN ; -; N/A ; None ; 13.000 ns ; $00042 ; /WG_WR ; TG42_IN ; -; N/A ; None ; 13.000 ns ; $00041 ; WR_PDOS ; TG42_IN ; -; N/A ; None ; 13.000 ns ; $00044 ; CMOS_DWR ; TG42_IN ; -; N/A ; None ; 13.000 ns ; $00045 ; CMOS_AS ; TG42_IN ; -; N/A ; None ; 13.000 ns ; $00046 ; CMOS_DRD ; TG42_IN ; -; N/A ; None ; 5.000 ns ; $00051 ; XHD1_CS[2] ; TG42_IN ; -; N/A ; None ; 5.000 ns ; $00050 ; XHD1_CS[1] ; TG42_IN ; -; N/A ; None ; 5.000 ns ; HDD_CLK ; 10K_CLK ; TG42_IN ; -; N/A ; None ; 5.000 ns ; $00053 ; XHD2_CS[2] ; TG42_IN ; -; N/A ; None ; 5.000 ns ; $00052 ; XHD2_CS[1] ; TG42_IN ; -+-------+--------------+------------+-------------------------------+------------+------------+ - - -+------------------------------------------------------------------+ -; tpd ; -+-------+-------------------+-----------------+---------+----------+ -; Slack ; Required P2P Time ; Actual P2P Time ; From ; To ; -+-------+-------------------+-----------------+---------+----------+ -; N/A ; None ; 10.000 ns ; TG42_IN ; TG42_OUT ; -; N/A ; None ; 10.000 ns ; TG42_IN ; TG42_BUF ; -+-------+-------------------+-----------------+---------+----------+ - - -+---------------------------------------------------------------------------+ -; th ; -+---------------+-------------+------------+----------+----------+----------+ -; Minimum Slack ; Required th ; Actual th ; From ; To ; To Clock ; -+---------------+-------------+------------+----------+----------+----------+ -; N/A ; None ; 51.000 ns ; SR ; LR_T[0] ; TG42_IN ; -; N/A ; None ; 51.000 ns ; TR43 ; LR_T[1] ; TG42_IN ; -; N/A ; None ; 51.000 ns ; TR43 ; LR_T[0] ; TG42_IN ; -; N/A ; None ; 51.000 ns ; WD ; LR_T[1] ; TG42_IN ; -; N/A ; None ; 51.000 ns ; WD ; LR_T[0] ; TG42_IN ; -; N/A ; None ; 51.000 ns ; SL ; LR_T[1] ; TG42_IN ; -; N/A ; None ; 40.000 ns ; SR ; LR_T[0] ; STE ; -; N/A ; None ; 40.000 ns ; SR ; LR_T[0] ; RSTB ; -; N/A ; None ; 40.000 ns ; SR ; LR_T[0] ; WSTB ; -; N/A ; None ; 40.000 ns ; TR43 ; LR_T[1] ; STE ; -; N/A ; None ; 40.000 ns ; TR43 ; LR_T[1] ; RSTB ; -; N/A ; None ; 40.000 ns ; TR43 ; LR_T[1] ; WSTB ; -; N/A ; None ; 40.000 ns ; TR43 ; LR_T[0] ; STE ; -; N/A ; None ; 40.000 ns ; TR43 ; LR_T[0] ; RSTB ; -; N/A ; None ; 40.000 ns ; TR43 ; LR_T[0] ; WSTB ; -; N/A ; None ; 40.000 ns ; WD ; LR_T[1] ; STE ; -; N/A ; None ; 40.000 ns ; WD ; LR_T[1] ; RSTB ; -; N/A ; None ; 40.000 ns ; WD ; LR_T[1] ; WSTB ; -; N/A ; None ; 40.000 ns ; WD ; LR_T[0] ; STE ; -; N/A ; None ; 40.000 ns ; WD ; LR_T[0] ; RSTB ; -; N/A ; None ; 40.000 ns ; WD ; LR_T[0] ; WSTB ; -; N/A ; None ; 40.000 ns ; SL ; LR_T[1] ; STE ; -; N/A ; None ; 40.000 ns ; SL ; LR_T[1] ; RSTB ; -; N/A ; None ; 40.000 ns ; SL ; LR_T[1] ; WSTB ; -; N/A ; None ; 40.000 ns ; PW_GOOD ; $00047 ; TG42_IN ; -; N/A ; None ; 24.000 ns ; RDAT ; $00023 ; TG42_IN ; -; N/A ; None ; 24.000 ns ; RDAT ; $00021 ; TG42_IN ; -; N/A ; None ; 24.000 ns ; EPM_RES ; /RESET ; TG42_IN ; -; N/A ; None ; 23.200 ns ; FDD_C[2] ; SINC_VT ; TG42_IN ; -; N/A ; None ; 23.200 ns ; HDD_C[0] ; SINC_VT ; TG42_IN ; -; N/A ; None ; 23.200 ns ; HDD_C[2] ; SINC_VT ; TG42_IN ; -; N/A ; None ; 23.200 ns ; FDD_C[1] ; SINC_VT ; TG42_IN ; -; N/A ; None ; 23.200 ns ; FDD_C[0] ; SINC_VT ; TG42_IN ; -; N/A ; None ; 23.200 ns ; HDD_C[1] ; SINC_VT ; TG42_IN ; -; N/A ; None ; 23.200 ns ; HDD_C[3] ; SINC_VT ; TG42_IN ; -; N/A ; None ; 6.000 ns ; D0 ; FDD_1440 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[0] ; $00041 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[0] ; $00042 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[0] ; $00043 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[0] ; $00044 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[0] ; $00045 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[0] ; $00046 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[2] ; $00041 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[2] ; $00042 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[2] ; $00043 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[2] ; $00044 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[2] ; $00045 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[2] ; $00046 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[2] ; $00048 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[2] ; $00049 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; FDD_C[1] ; $00041 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; FDD_C[1] ; $00042 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; FDD_C[1] ; $00043 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; FDD_C[1] ; $00044 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; FDD_C[1] ; $00045 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; FDD_C[1] ; $00046 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; FDD_C[1] ; $00048 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; FDD_C[1] ; $00049 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; FDD_C[0] ; $00041 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; FDD_C[0] ; $00042 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; FDD_C[0] ; $00043 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; FDD_C[0] ; $00044 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; FDD_C[0] ; $00045 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; FDD_C[0] ; $00046 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[1] ; $00041 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[1] ; $00042 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[1] ; $00043 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[1] ; $00044 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[1] ; $00045 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[1] ; $00046 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[1] ; $00048 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[1] ; $00049 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[3] ; $00041 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[3] ; $00042 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[3] ; $00043 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[3] ; $00044 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[3] ; $00045 ; TG42_IN ; -; N/A ; None ; 6.000 ns ; HDD_C[3] ; $00046 ; TG42_IN ; -; N/A ; None ; -2.000 ns ; WR_CNF ; HDD_CLK ; TG42_IN ; -; N/A ; None ; -2.000 ns ; FDD_C[2] ; HDD_CLK ; TG42_IN ; -; N/A ; None ; -2.000 ns ; HDD_C[0] ; HDD_CLK ; TG42_IN ; -; N/A ; None ; -2.000 ns ; HDD_C[2] ; $00052 ; TG42_IN ; -; N/A ; None ; -2.000 ns ; HDD_C[2] ; $00053 ; TG42_IN ; -; N/A ; None ; -2.000 ns ; HDD_C[2] ; $00050 ; TG42_IN ; -; N/A ; None ; -2.000 ns ; HDD_C[2] ; $00051 ; TG42_IN ; -; N/A ; None ; -2.000 ns ; HDD_C[1] ; $00052 ; TG42_IN ; -; N/A ; None ; -2.000 ns ; HDD_C[1] ; $00053 ; TG42_IN ; -; N/A ; None ; -2.000 ns ; HDD_C[1] ; $00050 ; TG42_IN ; -; N/A ; None ; -2.000 ns ; HDD_C[1] ; $00051 ; TG42_IN ; -; N/A ; None ; -2.000 ns ; HDD_C[3] ; $00052 ; TG42_IN ; -; N/A ; None ; -2.000 ns ; HDD_C[3] ; $00053 ; TG42_IN ; -; N/A ; None ; -2.000 ns ; HDD_C[3] ; $00050 ; TG42_IN ; -; N/A ; None ; -2.000 ns ; HDD_C[3] ; $00051 ; TG42_IN ; -; N/A ; None ; -7.000 ns ; FDD_C[2] ; $00052 ; TG42_IN ; -; N/A ; None ; -7.000 ns ; FDD_C[2] ; $00053 ; TG42_IN ; -; N/A ; None ; -7.000 ns ; HDD_C[0] ; $00052 ; TG42_IN ; -; N/A ; None ; -7.000 ns ; HDD_C[0] ; $00053 ; TG42_IN ; -; N/A ; None ; -7.000 ns ; FDD_C[1] ; $00052 ; TG42_IN ; -; N/A ; None ; -7.000 ns ; FDD_C[1] ; $00053 ; TG42_IN ; -; N/A ; None ; -7.000 ns ; FDD_C[0] ; $00052 ; TG42_IN ; -; N/A ; None ; -7.000 ns ; FDD_C[0] ; $00053 ; TG42_IN ; -; N/A ; None ; -18.000 ns ; FDD_C[2] ; $00050 ; TG42_IN ; -; N/A ; None ; -18.000 ns ; FDD_C[2] ; $00051 ; TG42_IN ; -; N/A ; None ; -18.000 ns ; HDD_C[0] ; $00050 ; TG42_IN ; -; N/A ; None ; -18.000 ns ; HDD_C[0] ; $00051 ; TG42_IN ; -; N/A ; None ; -18.000 ns ; FDD_C[0] ; $00050 ; TG42_IN ; -; N/A ; None ; -18.000 ns ; FDD_C[0] ; $00051 ; TG42_IN ; -; N/A ; None ; -18.800 ns ; FDD_C[1] ; $00050 ; TG42_IN ; -; N/A ; None ; -18.800 ns ; FDD_C[1] ; $00051 ; TG42_IN ; -+---------------+-------------+------------+----------+----------+----------+ - - -+--------------------------+ -; Timing Analyzer Messages ; -+--------------------------+ -Info: ******************************************************************* -Info: Running Quartus II Classic Timing Analyzer - Info: Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition - Info: Processing started: Sun Aug 28 03:30:43 2022 -Info: Command: quartus_tan --read_settings_files=off --write_settings_files=off sp2_max -c sp2_max -Info: Started post-fitting delay annotation -Info: Delay annotation completed successfully -Warning: Timing Analysis does not support the analysis of latches as synchronous elements for the currently selected device family -Warning: Found combinational loop of 2 nodes - Warning: Node "RDAT_X~11" - Warning: Node "RDAT_X~6" -Warning: Found combinational loop of 1 nodes - Warning: Node "TURBING~5" -Warning: Found combinational loop of 3 nodes - Warning: Node "THDD~2" - Warning: Node "NTHDD~13" - Warning: Node "NTHDD~11" -Warning: Found combinational loop of 2 nodes - Warning: Node "NT320~12" - Warning: Node "NT320~2" -Warning: Found pins functioning as undefined clocks and/or memory enables - Info: Assuming node "TG42_IN" is an undefined clock - Info: Assuming node "STE" is an undefined clock - Info: Assuming node "RSTB" is an undefined clock - Info: Assuming node "WSTB" is an undefined clock -Warning: Found 20 node(s) in clock paths which may be acting as ripple and/or gated clocks -- node(s) analyzed as buffer(s) resulting in clock skew - Info: Detected gated clock "CT_WG1~8bal" as buffer - Info: Detected ripple clock "STWG[2]" as buffer - Info: Detected gated clock "STWG[2]~6bal" as buffer - Info: Detected gated clock "CT_WG~6" as buffer - Info: Detected gated clock "CT_WG~5" as buffer - Info: Detected gated clock "CT_WG~4" as buffer - Info: Detected ripple clock "CT_WG" as buffer - Info: Detected gated clock "TURBING~5" as buffer - Info: Detected ripple clock "FDD_1440" as buffer - Info: Detected ripple clock "HDD_CLK" as buffer - Info: Detected ripple clock "lpm_counter:CT_rtl_0|dffs[3]" as buffer - Info: Detected ripple clock "SINC_HT" as buffer - Info: Detected ripple clock "SINC_VT" as buffer - Info: Detected ripple clock "lpm_counter:CT_rtl_0|dffs[0]" as buffer - Info: Detected gated clock "XCT[2]~4" as buffer - Info: Detected gated clock "XCT[2]~3" as buffer - Info: Detected gated clock "XCT[2]~12" as buffer - Info: Detected gated clock "XCT[2]~11" as buffer - Info: Detected ripple clock "XCT[0]" as buffer - Info: Detected ripple clock "XCT[1]" as buffer -Info: Slack time is -47.0 ns for clock "TG42_IN" between source register "/RESET" and destination register "$00051" - Info: Fmax is 9.62 MHz (period= 104.0 ns) - Info: + Largest register to register requirement is -25.000 ns - Info: + Setup relationship between source and destination is 5.000 ns - Info: + Latch edge is 10.000 ns - Info: Clock period of Destination clock "TG42_IN" is 10.000 ns with offset of 0.000 ns and duty cycle of 50 - Info: Multicycle Setup factor for Destination register is 1 - Info: - Launch edge is 5.000 ns - Info: Clock period of Source clock "TG42_IN" is 10.000 ns with inverted offset of 5.000 ns and duty cycle of 50 - Info: Multicycle Setup factor for Source register is 1 - Info: + Largest clock skew is -26.000 ns - Info: + Shortest clock path from clock "TG42_IN" to destination register is 1.500 ns - Info: 1: + IC(0.000 ns) + CELL(1.500 ns) = 1.500 ns; Loc. = PIN_87; Fanout = 11; CLK Node = 'TG42_IN' - Info: 2: + IC(0.000 ns) + CELL(0.000 ns) = 1.500 ns; Loc. = LC121; Fanout = 1; REG Node = '$00051' - Info: Total cell delay = 1.500 ns ( 100.00 % ) - Info: - Longest clock path from clock "TG42_IN" to source register is 27.500 ns - Info: 1: + IC(0.000 ns) + CELL(1.500 ns) = 1.500 ns; Loc. = PIN_87; Fanout = 11; CLK Node = 'TG42_IN' - Info: 2: + IC(0.000 ns) + CELL(5.000 ns) = 6.500 ns; Loc. = SEXP49; Fanout = 1; COMB Node = 'XCT[2]~4' - Info: 3: + IC(0.000 ns) + CELL(7.000 ns) = 13.500 ns; Loc. = LC56; Fanout = 18; REG Node = 'XCT[1]' - Info: 4: + IC(1.000 ns) + CELL(7.000 ns) = 21.500 ns; Loc. = LC53; Fanout = 10; REG Node = 'lpm_counter:CT_rtl_0|dffs[3]' - Info: 5: + IC(1.000 ns) + CELL(5.000 ns) = 27.500 ns; Loc. = LC85; Fanout = 19; REG Node = '/RESET' - Info: Total cell delay = 25.500 ns ( 92.73 % ) - Info: Total interconnect delay = 2.000 ns ( 7.27 % ) - Info: - Micro clock to output delay of source is 2.000 ns - Info: - Micro setup delay of destination is 2.000 ns - Info: - Longest register to register delay is 22.000 ns - Info: 1: + IC(0.000 ns) + CELL(0.000 ns) = 0.000 ns; Loc. = LC85; Fanout = 19; REG Node = '/RESET' - Info: 2: + IC(0.000 ns) + CELL(16.000 ns) = 16.000 ns; Loc. = LC114; Fanout = 14; COMB LOOP Node = 'THDD~2' - Info: Loc. = LC119; Node "NTHDD~11" - Info: Loc. = LC114; Node "THDD~2" - Info: Loc. = LC118; Node "NTHDD~13" - Info: 3: + IC(1.000 ns) + CELL(5.000 ns) = 22.000 ns; Loc. = LC121; Fanout = 1; REG Node = '$00051' - Info: Total cell delay = 21.000 ns ( 95.45 % ) - Info: Total interconnect delay = 1.000 ns ( 4.55 % ) -Warning: Can't achieve timing requirement Clock Setup: 'TG42_IN' along 57 path(s). See Report window for details. -Info: Slack time is -21.0 ns for clock "STE" between source register "LR_T[0]" and destination register "REG_P[2]" - Info: Fmax is 19.23 MHz (period= 52.0 ns) - Info: + Largest register to register requirement is -15.000 ns - Info: + Setup relationship between source and destination is 5.000 ns - Info: + Latch edge is 5.000 ns - Info: Clock period of Destination clock "STE" is 10.000 ns with inverted offset of 5.000 ns and duty cycle of 50 - Info: Multicycle Setup factor for Destination register is 1 - Info: - Launch edge is 0.000 ns - Info: Clock period of Source clock "STE" is 10.000 ns with offset of 0.000 ns and duty cycle of 50 - Info: Multicycle Setup factor for Source register is 1 - Info: + Largest clock skew is -16.000 ns - Info: + Shortest clock path from clock "STE" to destination register is 27.500 ns - Info: 1: + IC(0.000 ns) + CELL(0.500 ns) = 0.500 ns; Loc. = PIN_94; Fanout = 4; CLK Node = 'STE' - Info: 2: + IC(0.000 ns) + CELL(8.000 ns) = 8.500 ns; Loc. = LC32; Fanout = 3; COMB LOOP Node = 'TURBING~5' - Info: Loc. = LC32; Node "TURBING~5" - Info: 3: + IC(1.000 ns) + CELL(5.000 ns) = 14.500 ns; Loc. = SEXP17; Fanout = 1; COMB Node = 'CT_WG~6' - Info: 4: + IC(0.000 ns) + CELL(7.000 ns) = 21.500 ns; Loc. = LC26; Fanout = 8; REG Node = 'CT_WG' - Info: 5: + IC(1.000 ns) + CELL(5.000 ns) = 27.500 ns; Loc. = LC8; Fanout = 1; REG Node = 'REG_P[2]' - Info: Total cell delay = 25.500 ns ( 92.73 % ) - Info: Total interconnect delay = 2.000 ns ( 7.27 % ) - Info: - Longest clock path from clock "STE" to source register is 43.500 ns - Info: 1: + IC(0.000 ns) + CELL(0.500 ns) = 0.500 ns; Loc. = PIN_94; Fanout = 4; CLK Node = 'STE' - Info: 2: + IC(0.000 ns) + CELL(8.000 ns) = 8.500 ns; Loc. = LC32; Fanout = 3; COMB LOOP Node = 'TURBING~5' - Info: Loc. = LC32; Node "TURBING~5" - Info: 3: + IC(1.000 ns) + CELL(5.000 ns) = 14.500 ns; Loc. = SEXP17; Fanout = 1; COMB Node = 'CT_WG~6' - Info: 4: + IC(0.000 ns) + CELL(7.000 ns) = 21.500 ns; Loc. = LC26; Fanout = 8; REG Node = 'CT_WG' - Info: 5: + IC(1.000 ns) + CELL(7.000 ns) = 29.500 ns; Loc. = LC16; Fanout = 3; COMB Node = 'STWG[2]~6bal' - Info: 6: + IC(1.000 ns) + CELL(7.000 ns) = 37.500 ns; Loc. = LC19; Fanout = 6; REG Node = 'STWG[2]' - Info: 7: + IC(1.000 ns) + CELL(5.000 ns) = 43.500 ns; Loc. = LC10; Fanout = 4; REG Node = 'LR_T[0]' - Info: Total cell delay = 39.500 ns ( 90.80 % ) - Info: Total interconnect delay = 4.000 ns ( 9.20 % ) - Info: - Micro clock to output delay of source is 2.000 ns - Info: - Micro setup delay of destination is 2.000 ns - Info: - Longest register to register delay is 6.000 ns - Info: 1: + IC(0.000 ns) + CELL(0.000 ns) = 0.000 ns; Loc. = LC10; Fanout = 4; REG Node = 'LR_T[0]' - Info: 2: + IC(1.000 ns) + CELL(5.000 ns) = 6.000 ns; Loc. = LC8; Fanout = 1; REG Node = 'REG_P[2]' - Info: Total cell delay = 5.000 ns ( 83.33 % ) - Info: Total interconnect delay = 1.000 ns ( 16.67 % ) -Warning: Can't achieve timing requirement Clock Setup: 'STE' along 6 path(s). See Report window for details. -Info: Slack time is -21.0 ns for clock "RSTB" between source register "LR_T[0]" and destination register "REG_P[2]" - Info: Fmax is 19.23 MHz (period= 52.0 ns) - Info: + Largest register to register requirement is -15.000 ns - Info: + Setup relationship between source and destination is 5.000 ns - Info: + Latch edge is 5.000 ns - Info: Clock period of Destination clock "RSTB" is 10.000 ns with inverted offset of 5.000 ns and duty cycle of 50 - Info: Multicycle Setup factor for Destination register is 1 - Info: - Launch edge is 0.000 ns - Info: Clock period of Source clock "RSTB" is 10.000 ns with offset of 0.000 ns and duty cycle of 50 - Info: Multicycle Setup factor for Source register is 1 - Info: + Largest clock skew is -16.000 ns - Info: + Shortest clock path from clock "RSTB" to destination register is 27.500 ns - Info: 1: + IC(0.000 ns) + CELL(0.500 ns) = 0.500 ns; Loc. = PIN_25; Fanout = 2; CLK Node = 'RSTB' - Info: 2: + IC(0.000 ns) + CELL(8.000 ns) = 8.500 ns; Loc. = LC32; Fanout = 3; COMB LOOP Node = 'TURBING~5' - Info: Loc. = LC32; Node "TURBING~5" - Info: 3: + IC(1.000 ns) + CELL(5.000 ns) = 14.500 ns; Loc. = SEXP17; Fanout = 1; COMB Node = 'CT_WG~6' - Info: 4: + IC(0.000 ns) + CELL(7.000 ns) = 21.500 ns; Loc. = LC26; Fanout = 8; REG Node = 'CT_WG' - Info: 5: + IC(1.000 ns) + CELL(5.000 ns) = 27.500 ns; Loc. = LC8; Fanout = 1; REG Node = 'REG_P[2]' - Info: Total cell delay = 25.500 ns ( 92.73 % ) - Info: Total interconnect delay = 2.000 ns ( 7.27 % ) - Info: - Longest clock path from clock "RSTB" to source register is 43.500 ns - Info: 1: + IC(0.000 ns) + CELL(0.500 ns) = 0.500 ns; Loc. = PIN_25; Fanout = 2; CLK Node = 'RSTB' - Info: 2: + IC(0.000 ns) + CELL(8.000 ns) = 8.500 ns; Loc. = LC32; Fanout = 3; COMB LOOP Node = 'TURBING~5' - Info: Loc. = LC32; Node "TURBING~5" - Info: 3: + IC(1.000 ns) + CELL(5.000 ns) = 14.500 ns; Loc. = SEXP17; Fanout = 1; COMB Node = 'CT_WG~6' - Info: 4: + IC(0.000 ns) + CELL(7.000 ns) = 21.500 ns; Loc. = LC26; Fanout = 8; REG Node = 'CT_WG' - Info: 5: + IC(1.000 ns) + CELL(7.000 ns) = 29.500 ns; Loc. = LC16; Fanout = 3; COMB Node = 'STWG[2]~6bal' - Info: 6: + IC(1.000 ns) + CELL(7.000 ns) = 37.500 ns; Loc. = LC19; Fanout = 6; REG Node = 'STWG[2]' - Info: 7: + IC(1.000 ns) + CELL(5.000 ns) = 43.500 ns; Loc. = LC10; Fanout = 4; REG Node = 'LR_T[0]' - Info: Total cell delay = 39.500 ns ( 90.80 % ) - Info: Total interconnect delay = 4.000 ns ( 9.20 % ) - Info: - Micro clock to output delay of source is 2.000 ns - Info: - Micro setup delay of destination is 2.000 ns - Info: - Longest register to register delay is 6.000 ns - Info: 1: + IC(0.000 ns) + CELL(0.000 ns) = 0.000 ns; Loc. = LC10; Fanout = 4; REG Node = 'LR_T[0]' - Info: 2: + IC(1.000 ns) + CELL(5.000 ns) = 6.000 ns; Loc. = LC8; Fanout = 1; REG Node = 'REG_P[2]' - Info: Total cell delay = 5.000 ns ( 83.33 % ) - Info: Total interconnect delay = 1.000 ns ( 16.67 % ) -Warning: Can't achieve timing requirement Clock Setup: 'RSTB' along 6 path(s). See Report window for details. -Info: Slack time is -21.0 ns for clock "WSTB" between source register "LR_T[0]" and destination register "REG_P[2]" - Info: Fmax is 19.23 MHz (period= 52.0 ns) - Info: + Largest register to register requirement is -15.000 ns - Info: + Setup relationship between source and destination is 5.000 ns - Info: + Latch edge is 5.000 ns - Info: Clock period of Destination clock "WSTB" is 10.000 ns with inverted offset of 5.000 ns and duty cycle of 50 - Info: Multicycle Setup factor for Destination register is 1 - Info: - Launch edge is 0.000 ns - Info: Clock period of Source clock "WSTB" is 10.000 ns with offset of 0.000 ns and duty cycle of 50 - Info: Multicycle Setup factor for Source register is 1 - Info: + Largest clock skew is -16.000 ns - Info: + Shortest clock path from clock "WSTB" to destination register is 27.500 ns - Info: 1: + IC(0.000 ns) + CELL(0.500 ns) = 0.500 ns; Loc. = PIN_10; Fanout = 2; CLK Node = 'WSTB' - Info: 2: + IC(0.000 ns) + CELL(8.000 ns) = 8.500 ns; Loc. = LC32; Fanout = 3; COMB LOOP Node = 'TURBING~5' - Info: Loc. = LC32; Node "TURBING~5" - Info: 3: + IC(1.000 ns) + CELL(5.000 ns) = 14.500 ns; Loc. = SEXP17; Fanout = 1; COMB Node = 'CT_WG~6' - Info: 4: + IC(0.000 ns) + CELL(7.000 ns) = 21.500 ns; Loc. = LC26; Fanout = 8; REG Node = 'CT_WG' - Info: 5: + IC(1.000 ns) + CELL(5.000 ns) = 27.500 ns; Loc. = LC8; Fanout = 1; REG Node = 'REG_P[2]' - Info: Total cell delay = 25.500 ns ( 92.73 % ) - Info: Total interconnect delay = 2.000 ns ( 7.27 % ) - Info: - Longest clock path from clock "WSTB" to source register is 43.500 ns - Info: 1: + IC(0.000 ns) + CELL(0.500 ns) = 0.500 ns; Loc. = PIN_10; Fanout = 2; CLK Node = 'WSTB' - Info: 2: + IC(0.000 ns) + CELL(8.000 ns) = 8.500 ns; Loc. = LC32; Fanout = 3; COMB LOOP Node = 'TURBING~5' - Info: Loc. = LC32; Node "TURBING~5" - Info: 3: + IC(1.000 ns) + CELL(5.000 ns) = 14.500 ns; Loc. = SEXP17; Fanout = 1; COMB Node = 'CT_WG~6' - Info: 4: + IC(0.000 ns) + CELL(7.000 ns) = 21.500 ns; Loc. = LC26; Fanout = 8; REG Node = 'CT_WG' - Info: 5: + IC(1.000 ns) + CELL(7.000 ns) = 29.500 ns; Loc. = LC16; Fanout = 3; COMB Node = 'STWG[2]~6bal' - Info: 6: + IC(1.000 ns) + CELL(7.000 ns) = 37.500 ns; Loc. = LC19; Fanout = 6; REG Node = 'STWG[2]' - Info: 7: + IC(1.000 ns) + CELL(5.000 ns) = 43.500 ns; Loc. = LC10; Fanout = 4; REG Node = 'LR_T[0]' - Info: Total cell delay = 39.500 ns ( 90.80 % ) - Info: Total interconnect delay = 4.000 ns ( 9.20 % ) - Info: - Micro clock to output delay of source is 2.000 ns - Info: - Micro setup delay of destination is 2.000 ns - Info: - Longest register to register delay is 6.000 ns - Info: 1: + IC(0.000 ns) + CELL(0.000 ns) = 0.000 ns; Loc. = LC10; Fanout = 4; REG Node = 'LR_T[0]' - Info: 2: + IC(1.000 ns) + CELL(5.000 ns) = 6.000 ns; Loc. = LC8; Fanout = 1; REG Node = 'REG_P[2]' - Info: Total cell delay = 5.000 ns ( 83.33 % ) - Info: Total interconnect delay = 1.000 ns ( 16.67 % ) -Warning: Can't achieve timing requirement Clock Setup: 'WSTB' along 6 path(s). See Report window for details. -Info: Minimum slack time is -12.2 ns for clock "TG42_IN" between source register "FDD_1440" and destination register "$00021" - Info: + Shortest register to register delay is 14.800 ns - Info: 1: + IC(0.000 ns) + CELL(0.000 ns) = 0.000 ns; Loc. = LC91; Fanout = 13; REG Node = 'FDD_1440' - Info: 2: + IC(0.000 ns) + CELL(8.800 ns) = 8.800 ns; Loc. = LC21; Fanout = 6; COMB LOOP Node = 'RDAT_X~6' - Info: Loc. = LC21; Node "RDAT_X~6" - Info: Loc. = LC20; Node "RDAT_X~11" - Info: 3: + IC(1.000 ns) + CELL(5.000 ns) = 14.800 ns; Loc. = LC17; Fanout = 12; REG Node = '$00021' - Info: Total cell delay = 13.800 ns ( 93.24 % ) - Info: Total interconnect delay = 1.000 ns ( 6.76 % ) - Info: - Smallest register to register requirement is 27.000 ns - Info: + Hold relationship between source and destination is 0.000 ns - Info: + Latch edge is 0.000 ns - Info: Clock period of Destination clock "TG42_IN" is 10.000 ns with offset of 0.000 ns and duty cycle of 50 - Info: Multicycle Setup factor for Destination register is 1 - Info: Multicycle Hold factor for Destination register is 1 - Info: - Launch edge is 0.000 ns - Info: Clock period of Source clock "TG42_IN" is 10.000 ns with offset of 0.000 ns and duty cycle of 50 - Info: Multicycle Setup factor for Source register is 1 - Info: Multicycle Hold factor for Source register is 1 - Info: + Smallest clock skew is 26.000 ns - Info: + Longest clock path from clock "TG42_IN" to destination register is 35.500 ns - Info: 1: + IC(0.000 ns) + CELL(1.500 ns) = 1.500 ns; Loc. = PIN_87; Fanout = 11; CLK Node = 'TG42_IN' - Info: 2: + IC(0.000 ns) + CELL(5.000 ns) = 6.500 ns; Loc. = SEXP49; Fanout = 1; COMB Node = 'XCT[2]~4' - Info: 3: + IC(0.000 ns) + CELL(7.000 ns) = 13.500 ns; Loc. = LC56; Fanout = 18; REG Node = 'XCT[1]' - Info: 4: + IC(1.000 ns) + CELL(7.000 ns) = 21.500 ns; Loc. = LC122; Fanout = 9; REG Node = 'lpm_counter:CT_rtl_0|dffs[0]' - Info: 5: + IC(1.000 ns) + CELL(7.000 ns) = 29.500 ns; Loc. = LC28; Fanout = 7; COMB Node = 'CT_WG1~8bal' - Info: 6: + IC(1.000 ns) + CELL(5.000 ns) = 35.500 ns; Loc. = LC17; Fanout = 12; REG Node = '$00021' - Info: Total cell delay = 32.500 ns ( 91.55 % ) - Info: Total interconnect delay = 3.000 ns ( 8.45 % ) - Info: - Shortest clock path from clock "TG42_IN" to source register is 9.500 ns - Info: 1: + IC(0.000 ns) + CELL(1.500 ns) = 1.500 ns; Loc. = PIN_87; Fanout = 11; CLK Node = 'TG42_IN' - Info: 2: + IC(0.000 ns) + CELL(2.000 ns) = 3.500 ns; Loc. = LC88; Fanout = 10; REG Node = 'HDD_CLK' - Info: 3: + IC(1.000 ns) + CELL(5.000 ns) = 9.500 ns; Loc. = LC91; Fanout = 13; REG Node = 'FDD_1440' - Info: Total cell delay = 8.500 ns ( 89.47 % ) - Info: Total interconnect delay = 1.000 ns ( 10.53 % ) - Info: - Micro clock to output delay of source is 2.000 ns - Info: + Micro hold delay of destination is 3.000 ns -Warning: Can't achieve minimum setup and hold requirement TG42_IN along 48 path(s). See Report window for details. -Info: Minimum slack time is 5.0 ns for clock "STE" between source register "REG_P[1]" and destination register "REG_P[2]" - Info: + Shortest register to register delay is 6.000 ns - Info: 1: + IC(0.000 ns) + CELL(0.000 ns) = 0.000 ns; Loc. = LC2; Fanout = 3; REG Node = 'REG_P[1]' - Info: 2: + IC(1.000 ns) + CELL(5.000 ns) = 6.000 ns; Loc. = LC8; Fanout = 1; REG Node = 'REG_P[2]' - Info: Total cell delay = 5.000 ns ( 83.33 % ) - Info: Total interconnect delay = 1.000 ns ( 16.67 % ) - Info: - Smallest register to register requirement is 1.000 ns - Info: + Hold relationship between source and destination is 0.000 ns - Info: + Latch edge is 5.000 ns - Info: Clock period of Destination clock "STE" is 10.000 ns with inverted offset of 5.000 ns and duty cycle of 50 - Info: Multicycle Setup factor for Destination register is 1 - Info: Multicycle Hold factor for Destination register is 1 - Info: - Launch edge is 5.000 ns - Info: Clock period of Source clock "STE" is 10.000 ns with inverted offset of 5.000 ns and duty cycle of 50 - Info: Multicycle Setup factor for Source register is 1 - Info: Multicycle Hold factor for Source register is 1 - Info: + Smallest clock skew is 0.000 ns - Info: + Longest clock path from clock "STE" to destination register is 27.500 ns - Info: 1: + IC(0.000 ns) + CELL(0.500 ns) = 0.500 ns; Loc. = PIN_94; Fanout = 4; CLK Node = 'STE' - Info: 2: + IC(0.000 ns) + CELL(8.000 ns) = 8.500 ns; Loc. = LC32; Fanout = 3; COMB LOOP Node = 'TURBING~5' - Info: Loc. = LC32; Node "TURBING~5" - Info: 3: + IC(1.000 ns) + CELL(5.000 ns) = 14.500 ns; Loc. = SEXP17; Fanout = 1; COMB Node = 'CT_WG~6' - Info: 4: + IC(0.000 ns) + CELL(7.000 ns) = 21.500 ns; Loc. = LC26; Fanout = 8; REG Node = 'CT_WG' - Info: 5: + IC(1.000 ns) + CELL(5.000 ns) = 27.500 ns; Loc. = LC8; Fanout = 1; REG Node = 'REG_P[2]' - Info: Total cell delay = 25.500 ns ( 92.73 % ) - Info: Total interconnect delay = 2.000 ns ( 7.27 % ) - Info: - Shortest clock path from clock "STE" to source register is 27.500 ns - Info: 1: + IC(0.000 ns) + CELL(0.500 ns) = 0.500 ns; Loc. = PIN_94; Fanout = 4; CLK Node = 'STE' - Info: 2: + IC(0.000 ns) + CELL(8.000 ns) = 8.500 ns; Loc. = LC32; Fanout = 3; COMB LOOP Node = 'TURBING~5' - Info: Loc. = LC32; Node "TURBING~5" - Info: 3: + IC(1.000 ns) + CELL(5.000 ns) = 14.500 ns; Loc. = SEXP17; Fanout = 1; COMB Node = 'CT_WG~6' - Info: 4: + IC(0.000 ns) + CELL(7.000 ns) = 21.500 ns; Loc. = LC26; Fanout = 8; REG Node = 'CT_WG' - Info: 5: + IC(1.000 ns) + CELL(5.000 ns) = 27.500 ns; Loc. = LC2; Fanout = 3; REG Node = 'REG_P[1]' - Info: Total cell delay = 25.500 ns ( 92.73 % ) - Info: Total interconnect delay = 2.000 ns ( 7.27 % ) - Info: - Micro clock to output delay of source is 2.000 ns - Info: + Micro hold delay of destination is 3.000 ns -Info: Minimum slack time is 5.0 ns for clock "RSTB" between source register "REG_P[1]" and destination register "REG_P[2]" - Info: + Shortest register to register delay is 6.000 ns - Info: 1: + IC(0.000 ns) + CELL(0.000 ns) = 0.000 ns; Loc. = LC2; Fanout = 3; REG Node = 'REG_P[1]' - Info: 2: + IC(1.000 ns) + CELL(5.000 ns) = 6.000 ns; Loc. = LC8; Fanout = 1; REG Node = 'REG_P[2]' - Info: Total cell delay = 5.000 ns ( 83.33 % ) - Info: Total interconnect delay = 1.000 ns ( 16.67 % ) - Info: - Smallest register to register requirement is 1.000 ns - Info: + Hold relationship between source and destination is 0.000 ns - Info: + Latch edge is 5.000 ns - Info: Clock period of Destination clock "RSTB" is 10.000 ns with inverted offset of 5.000 ns and duty cycle of 50 - Info: Multicycle Setup factor for Destination register is 1 - Info: Multicycle Hold factor for Destination register is 1 - Info: - Launch edge is 5.000 ns - Info: Clock period of Source clock "RSTB" is 10.000 ns with inverted offset of 5.000 ns and duty cycle of 50 - Info: Multicycle Setup factor for Source register is 1 - Info: Multicycle Hold factor for Source register is 1 - Info: + Smallest clock skew is 0.000 ns - Info: + Longest clock path from clock "RSTB" to destination register is 27.500 ns - Info: 1: + IC(0.000 ns) + CELL(0.500 ns) = 0.500 ns; Loc. = PIN_25; Fanout = 2; CLK Node = 'RSTB' - Info: 2: + IC(0.000 ns) + CELL(8.000 ns) = 8.500 ns; Loc. = LC32; Fanout = 3; COMB LOOP Node = 'TURBING~5' - Info: Loc. = LC32; Node "TURBING~5" - Info: 3: + IC(1.000 ns) + CELL(5.000 ns) = 14.500 ns; Loc. = SEXP17; Fanout = 1; COMB Node = 'CT_WG~6' - Info: 4: + IC(0.000 ns) + CELL(7.000 ns) = 21.500 ns; Loc. = LC26; Fanout = 8; REG Node = 'CT_WG' - Info: 5: + IC(1.000 ns) + CELL(5.000 ns) = 27.500 ns; Loc. = LC8; Fanout = 1; REG Node = 'REG_P[2]' - Info: Total cell delay = 25.500 ns ( 92.73 % ) - Info: Total interconnect delay = 2.000 ns ( 7.27 % ) - Info: - Shortest clock path from clock "RSTB" to source register is 27.500 ns - Info: 1: + IC(0.000 ns) + CELL(0.500 ns) = 0.500 ns; Loc. = PIN_25; Fanout = 2; CLK Node = 'RSTB' - Info: 2: + IC(0.000 ns) + CELL(8.000 ns) = 8.500 ns; Loc. = LC32; Fanout = 3; COMB LOOP Node = 'TURBING~5' - Info: Loc. = LC32; Node "TURBING~5" - Info: 3: + IC(1.000 ns) + CELL(5.000 ns) = 14.500 ns; Loc. = SEXP17; Fanout = 1; COMB Node = 'CT_WG~6' - Info: 4: + IC(0.000 ns) + CELL(7.000 ns) = 21.500 ns; Loc. = LC26; Fanout = 8; REG Node = 'CT_WG' - Info: 5: + IC(1.000 ns) + CELL(5.000 ns) = 27.500 ns; Loc. = LC2; Fanout = 3; REG Node = 'REG_P[1]' - Info: Total cell delay = 25.500 ns ( 92.73 % ) - Info: Total interconnect delay = 2.000 ns ( 7.27 % ) - Info: - Micro clock to output delay of source is 2.000 ns - Info: + Micro hold delay of destination is 3.000 ns -Info: Minimum slack time is 5.0 ns for clock "WSTB" between source register "REG_P[1]" and destination register "REG_P[2]" - Info: + Shortest register to register delay is 6.000 ns - Info: 1: + IC(0.000 ns) + CELL(0.000 ns) = 0.000 ns; Loc. = LC2; Fanout = 3; REG Node = 'REG_P[1]' - Info: 2: + IC(1.000 ns) + CELL(5.000 ns) = 6.000 ns; Loc. = LC8; Fanout = 1; REG Node = 'REG_P[2]' - Info: Total cell delay = 5.000 ns ( 83.33 % ) - Info: Total interconnect delay = 1.000 ns ( 16.67 % ) - Info: - Smallest register to register requirement is 1.000 ns - Info: + Hold relationship between source and destination is 0.000 ns - Info: + Latch edge is 5.000 ns - Info: Clock period of Destination clock "WSTB" is 10.000 ns with inverted offset of 5.000 ns and duty cycle of 50 - Info: Multicycle Setup factor for Destination register is 1 - Info: Multicycle Hold factor for Destination register is 1 - Info: - Launch edge is 5.000 ns - Info: Clock period of Source clock "WSTB" is 10.000 ns with inverted offset of 5.000 ns and duty cycle of 50 - Info: Multicycle Setup factor for Source register is 1 - Info: Multicycle Hold factor for Source register is 1 - Info: + Smallest clock skew is 0.000 ns - Info: + Longest clock path from clock "WSTB" to destination register is 27.500 ns - Info: 1: + IC(0.000 ns) + CELL(0.500 ns) = 0.500 ns; Loc. = PIN_10; Fanout = 2; CLK Node = 'WSTB' - Info: 2: + IC(0.000 ns) + CELL(8.000 ns) = 8.500 ns; Loc. = LC32; Fanout = 3; COMB LOOP Node = 'TURBING~5' - Info: Loc. = LC32; Node "TURBING~5" - Info: 3: + IC(1.000 ns) + CELL(5.000 ns) = 14.500 ns; Loc. = SEXP17; Fanout = 1; COMB Node = 'CT_WG~6' - Info: 4: + IC(0.000 ns) + CELL(7.000 ns) = 21.500 ns; Loc. = LC26; Fanout = 8; REG Node = 'CT_WG' - Info: 5: + IC(1.000 ns) + CELL(5.000 ns) = 27.500 ns; Loc. = LC8; Fanout = 1; REG Node = 'REG_P[2]' - Info: Total cell delay = 25.500 ns ( 92.73 % ) - Info: Total interconnect delay = 2.000 ns ( 7.27 % ) - Info: - Shortest clock path from clock "WSTB" to source register is 27.500 ns - Info: 1: + IC(0.000 ns) + CELL(0.500 ns) = 0.500 ns; Loc. = PIN_10; Fanout = 2; CLK Node = 'WSTB' - Info: 2: + IC(0.000 ns) + CELL(8.000 ns) = 8.500 ns; Loc. = LC32; Fanout = 3; COMB LOOP Node = 'TURBING~5' - Info: Loc. = LC32; Node "TURBING~5" - Info: 3: + IC(1.000 ns) + CELL(5.000 ns) = 14.500 ns; Loc. = SEXP17; Fanout = 1; COMB Node = 'CT_WG~6' - Info: 4: + IC(0.000 ns) + CELL(7.000 ns) = 21.500 ns; Loc. = LC26; Fanout = 8; REG Node = 'CT_WG' - Info: 5: + IC(1.000 ns) + CELL(5.000 ns) = 27.500 ns; Loc. = LC2; Fanout = 3; REG Node = 'REG_P[1]' - Info: Total cell delay = 25.500 ns ( 92.73 % ) - Info: Total interconnect delay = 2.000 ns ( 7.27 % ) - Info: - Micro clock to output delay of source is 2.000 ns - Info: + Micro hold delay of destination is 3.000 ns -Info: tsu for register "$00052" (data pin = "FDD_C[2]", clock pin = "TG42_IN") is 23.800 ns - Info: + Longest pin to register delay is 23.300 ns - Info: 1: + IC(0.000 ns) + CELL(0.500 ns) = 0.500 ns; Loc. = PIN_46; Fanout = 20; PIN Node = 'FDD_C[2]' - Info: 2: + IC(0.000 ns) + CELL(16.800 ns) = 17.300 ns; Loc. = LC119; Fanout = 10; COMB LOOP Node = 'NTHDD~11' - Info: Loc. = LC119; Node "NTHDD~11" - Info: Loc. = LC114; Node "THDD~2" - Info: Loc. = LC118; Node "NTHDD~13" - Info: 3: + IC(1.000 ns) + CELL(5.000 ns) = 23.300 ns; Loc. = LC123; Fanout = 1; REG Node = '$00052' - Info: Total cell delay = 22.300 ns ( 95.71 % ) - Info: Total interconnect delay = 1.000 ns ( 4.29 % ) - Info: + Micro setup delay of destination is 2.000 ns - Info: - Shortest clock path from clock "TG42_IN" to destination register is 1.500 ns - Info: 1: + IC(0.000 ns) + CELL(1.500 ns) = 1.500 ns; Loc. = PIN_87; Fanout = 11; CLK Node = 'TG42_IN' - Info: 2: + IC(0.000 ns) + CELL(0.000 ns) = 1.500 ns; Loc. = LC123; Fanout = 1; REG Node = '$00052' - Info: Total cell delay = 1.500 ns ( 100.00 % ) -Info: tco from clock "TG42_IN" to destination pin "CLK_WG" through register "STWG[2]" is 50.000 ns - Info: + Longest clock path from clock "TG42_IN" to source register is 46.500 ns - Info: 1: + IC(0.000 ns) + CELL(1.500 ns) = 1.500 ns; Loc. = PIN_87; Fanout = 11; CLK Node = 'TG42_IN' - Info: 2: + IC(0.000 ns) + CELL(2.000 ns) = 3.500 ns; Loc. = LC88; Fanout = 10; REG Node = 'HDD_CLK' - Info: 3: + IC(1.000 ns) + CELL(7.000 ns) = 11.500 ns; Loc. = LC91; Fanout = 13; REG Node = 'FDD_1440' - Info: 4: + IC(0.000 ns) + CELL(8.000 ns) = 19.500 ns; Loc. = LC32; Fanout = 3; COMB LOOP Node = 'TURBING~5' - Info: Loc. = LC32; Node "TURBING~5" - Info: 5: + IC(1.000 ns) + CELL(5.000 ns) = 25.500 ns; Loc. = SEXP17; Fanout = 1; COMB Node = 'CT_WG~6' - Info: 6: + IC(0.000 ns) + CELL(7.000 ns) = 32.500 ns; Loc. = LC26; Fanout = 8; REG Node = 'CT_WG' - Info: 7: + IC(1.000 ns) + CELL(7.000 ns) = 40.500 ns; Loc. = LC16; Fanout = 3; COMB Node = 'STWG[2]~6bal' - Info: 8: + IC(1.000 ns) + CELL(5.000 ns) = 46.500 ns; Loc. = LC19; Fanout = 6; REG Node = 'STWG[2]' - Info: Total cell delay = 42.500 ns ( 91.40 % ) - Info: Total interconnect delay = 4.000 ns ( 8.60 % ) - Info: + Micro clock to output delay of source is 2.000 ns - Info: + Longest register to pin delay is 1.500 ns - Info: 1: + IC(0.000 ns) + CELL(0.000 ns) = 0.000 ns; Loc. = LC19; Fanout = 6; REG Node = 'STWG[2]' - Info: 2: + IC(0.000 ns) + CELL(1.500 ns) = 1.500 ns; Loc. = PIN_13; Fanout = 0; PIN Node = 'CLK_WG' - Info: Total cell delay = 1.500 ns ( 100.00 % ) -Info: Longest tpd from source pin "TG42_IN" to destination pin "TG42_OUT" is 10.000 ns - Info: 1: + IC(0.000 ns) + CELL(1.500 ns) = 1.500 ns; Loc. = PIN_87; Fanout = 11; CLK Node = 'TG42_IN' - Info: 2: + IC(0.000 ns) + CELL(7.000 ns) = 8.500 ns; Loc. = LC128; Fanout = 1; COMB Node = '$00003~3' - Info: 3: + IC(0.000 ns) + CELL(1.500 ns) = 10.000 ns; Loc. = PIN_85; Fanout = 0; PIN Node = 'TG42_OUT' - Info: Total cell delay = 10.000 ns ( 100.00 % ) -Info: th for register "LR_T[0]" (data pin = "SR", clock pin = "TG42_IN") is 51.000 ns - Info: + Longest clock path from clock "TG42_IN" to destination register is 54.500 ns - Info: 1: + IC(0.000 ns) + CELL(1.500 ns) = 1.500 ns; Loc. = PIN_87; Fanout = 11; CLK Node = 'TG42_IN' - Info: 2: + IC(0.000 ns) + CELL(2.000 ns) = 3.500 ns; Loc. = LC88; Fanout = 10; REG Node = 'HDD_CLK' - Info: 3: + IC(1.000 ns) + CELL(7.000 ns) = 11.500 ns; Loc. = LC91; Fanout = 13; REG Node = 'FDD_1440' - Info: 4: + IC(0.000 ns) + CELL(8.000 ns) = 19.500 ns; Loc. = LC32; Fanout = 3; COMB LOOP Node = 'TURBING~5' - Info: Loc. = LC32; Node "TURBING~5" - Info: 5: + IC(1.000 ns) + CELL(5.000 ns) = 25.500 ns; Loc. = SEXP17; Fanout = 1; COMB Node = 'CT_WG~6' - Info: 6: + IC(0.000 ns) + CELL(7.000 ns) = 32.500 ns; Loc. = LC26; Fanout = 8; REG Node = 'CT_WG' - Info: 7: + IC(1.000 ns) + CELL(7.000 ns) = 40.500 ns; Loc. = LC16; Fanout = 3; COMB Node = 'STWG[2]~6bal' - Info: 8: + IC(1.000 ns) + CELL(7.000 ns) = 48.500 ns; Loc. = LC19; Fanout = 6; REG Node = 'STWG[2]' - Info: 9: + IC(1.000 ns) + CELL(5.000 ns) = 54.500 ns; Loc. = LC10; Fanout = 4; REG Node = 'LR_T[0]' - Info: Total cell delay = 49.500 ns ( 90.83 % ) - Info: Total interconnect delay = 5.000 ns ( 9.17 % ) - Info: + Micro hold delay of destination is 3.000 ns - Info: - Shortest pin to register delay is 6.500 ns - Info: 1: + IC(0.000 ns) + CELL(0.500 ns) = 0.500 ns; Loc. = PIN_29; Fanout = 1; PIN Node = 'SR' - Info: 2: + IC(1.000 ns) + CELL(5.000 ns) = 6.500 ns; Loc. = LC10; Fanout = 4; REG Node = 'LR_T[0]' - Info: Total cell delay = 5.500 ns ( 84.62 % ) - Info: Total interconnect delay = 1.000 ns ( 15.38 % ) -Critical Warning: Timing requirements for slow timing model timing analysis were not met. See Report window for details. -Info: Quartus II Classic Timing Analyzer was successful. 0 errors, 21 warnings - Info: Peak virtual memory: 185 megabytes - Info: Processing ended: Sun Aug 28 03:30:43 2022 - Info: Elapsed time: 00:00:00 - Info: Total CPU time (on all processors): 00:00:00 - - diff --git a/src/altera/quartus/max/sp2_max.tan.summary b/src/altera/quartus/max/sp2_max.tan.summary deleted file mode 100644 index 9aa9881..0000000 --- a/src/altera/quartus/max/sp2_max.tan.summary +++ /dev/null @@ -1,136 +0,0 @@ --------------------------------------------------------------------------------------- -Timing Analyzer Summary --------------------------------------------------------------------------------------- - -Type : Worst-case tsu -Slack : N/A -Required Time : None -Actual Time : 23.800 ns -From : HDD_C[3] -To : $00051 -From Clock : -- -To Clock : TG42_IN -Failed Paths : 0 - -Type : Worst-case tco -Slack : N/A -Required Time : None -Actual Time : 50.000 ns -From : STWG[2] -To : CLK_WG -From Clock : TG42_IN -To Clock : -- -Failed Paths : 0 - -Type : Worst-case tpd -Slack : N/A -Required Time : None -Actual Time : 10.000 ns -From : TG42_IN -To : TG42_BUF -From Clock : -- -To Clock : -- -Failed Paths : 0 - -Type : Worst-case th -Slack : N/A -Required Time : None -Actual Time : 51.000 ns -From : SL -To : LR_T[1] -From Clock : -- -To Clock : TG42_IN -Failed Paths : 0 - -Type : Clock Setup: 'TG42_IN' -Slack : -47.000 ns -Required Time : 100.00 MHz ( period = 10.000 ns ) -Actual Time : 9.62 MHz ( period = 104.000 ns ) -From : /RESET -To : $00051 -From Clock : TG42_IN -To Clock : TG42_IN -Failed Paths : 57 - -Type : Clock Setup: 'STE' -Slack : -21.000 ns -Required Time : 100.00 MHz ( period = 10.000 ns ) -Actual Time : 19.23 MHz ( period = 52.000 ns ) -From : LR_T[0] -To : REG_P[2] -From Clock : STE -To Clock : STE -Failed Paths : 6 - -Type : Clock Setup: 'RSTB' -Slack : -21.000 ns -Required Time : 100.00 MHz ( period = 10.000 ns ) -Actual Time : 19.23 MHz ( period = 52.000 ns ) -From : LR_T[0] -To : REG_P[2] -From Clock : RSTB -To Clock : RSTB -Failed Paths : 6 - -Type : Clock Setup: 'WSTB' -Slack : -21.000 ns -Required Time : 100.00 MHz ( period = 10.000 ns ) -Actual Time : 19.23 MHz ( period = 52.000 ns ) -From : LR_T[0] -To : REG_P[2] -From Clock : WSTB -To Clock : WSTB -Failed Paths : 6 - -Type : Clock Hold: 'TG42_IN' -Slack : -12.200 ns -Required Time : 100.00 MHz ( period = 10.000 ns ) -Actual Time : N/A -From : FDD_1440 -To : $00021 -From Clock : TG42_IN -To Clock : TG42_IN -Failed Paths : 48 - -Type : Clock Hold: 'STE' -Slack : 5.000 ns -Required Time : 100.00 MHz ( period = 10.000 ns ) -Actual Time : N/A -From : REG_P[1] -To : REG_P[2] -From Clock : STE -To Clock : STE -Failed Paths : 0 - -Type : Clock Hold: 'RSTB' -Slack : 5.000 ns -Required Time : 100.00 MHz ( period = 10.000 ns ) -Actual Time : N/A -From : REG_P[1] -To : REG_P[2] -From Clock : RSTB -To Clock : RSTB -Failed Paths : 0 - -Type : Clock Hold: 'WSTB' -Slack : 5.000 ns -Required Time : 100.00 MHz ( period = 10.000 ns ) -Actual Time : N/A -From : REG_P[1] -To : REG_P[2] -From Clock : WSTB -To Clock : WSTB -Failed Paths : 0 - -Type : Total number of failed paths -Slack : -Required Time : -Actual Time : -From : -To : -From Clock : -To Clock : -Failed Paths : 123 - --------------------------------------------------------------------------------------- - diff --git a/src/altera/quartus/max/sp2_max.tdf b/src/altera/quartus/max/sp2_max.tdf deleted file mode 100644 index b24582c..0000000 --- a/src/altera/quartus/max/sp2_max.tdf +++ /dev/null @@ -1,499 +0,0 @@ - -TITLE "SINC_controller"; - -PARAMETERS - ( - G_MODE = 1, -- 1 on LCELL, 0 - on EXP - - NUM = "NO", - NUMBER1 = B"00100000X", -- 0 - sinc - NUMBER2 = B"00110111X", -- 7 - NUMBER3 = B"01001101X", -- D - NUMBER4 = B"01010010X", -- 2 - NUMBER5 = B"00100000X", -- - NUMBER6 = B"00100000X", -- - NUMBER7 = B"00100000X" -- - ); - -SUBDESIGN SP2_MAX - ( - - TG42_IN : INPUT; - TG42_OUT : OUTPUT; - TG42_BUF : OUTPUT; - CLKZZ : BIDIR; - CLK14 : OUTPUT; - - AUD : OUTPUT; -- clk for timers - BEEP : OUTPUT; - - CMOS_DRD : OUTPUT; - CMOS_AS : OUTPUT; - CMOS_DWR : OUTPUT; - - WR_PDOS : OUTPUT; - WD : INPUT; - WSTB : INPUT; - SR,SL : INPUT; - RSTB : INPUT; - TR43 : INPUT; - CLK_WG : OUTPUT; - FDAT : OUTPUT; - QDAT : OUTPUT; - RDAT : INPUT; - /WG_WR : OUTPUT; - /WG_RD : OUTPUT; - STE : INPUT; - DENS_X : OUTPUT; - WDAT : OUTPUT; - - --- XA[2..0] : BIDIR; - XA[2..0] : INPUT; - XACS : INPUT; --- SINC_1 : OUTPUT; - SINC_1 : BIDIR; - SINC_2 : BIDIR; - - HDD_C[3..0] : INPUT; - FDD_C[2..0] : INPUT; - - HD_DIR : OUTPUT; - HD_CS : OUTPUT; - - /CONF_X : BIDIR; - 10K_CLK : OUTPUT; - WR_CNF : INPUT; - 10K_D0 : OUTPUT; - D0 : INPUT; - - VGA_IN : INPUT; --- WR_COL : INPUT; - SINC_V : OUTPUT; - SINC_H : OUTPUT; - SINC : OUTPUT; - SINC_IN : INPUT; - - XHD_RES : OUTPUT; - XHD_WR : OUTPUT; - XHD_RD : OUTPUT; - - XHD1_CS[2..1] : OUTPUT; - XHD2_CS[2..1] : OUTPUT; - XHR_RDY : INPUT; - - EPM_RES : INPUT; - PW_GOOD : INPUT; - - UNUSED65 : INPUT; -- was GND65, hack for 3000 family - UNUSED33 : INPUT; -- was GND33, hack for 3000 family - UNUSED1 : INPUT; - UNUSED2 : INPUT; - UNUSED5 : INPUT; - UNUSED7 : INPUT; - UNUSED22 : INPUT; - UNUSED24 : INPUT; - UNUSED27 : INPUT; - UNUSED28 : INPUT; - UNUSED49 : INPUT; - UNUSED50 : INPUT; - UNUSED53 : INPUT; - UNUSED55 : INPUT; - UNUSED63 : INPUT; - UNUSED70 : INPUT; - UNUSED72 : INPUT; - UNUSED77 : INPUT; - UNUSED78 : INPUT; - - - - ) -VARIABLE - - XCT[2..0] : DFF; - CNF_ON : NODE; - CNF_OFF : NODE; - - CLK42 : NODE; - - CT[3..0] : DFF; - CTH[5..0] : DFF; - CTV[8..0] : DFFE; - - SINC_HT : DFF; - SINC_VT : DFFE; - - TURBING : NODE; - FDD_1440 : NODE; - NFDD_1440 : NODE; - - CT_WG : NODE; - CT_WG1 : NODE; - - STWG[2..0] : DFF; - CLK_PRC : NODE; - WGR[4..0] : DFF; - RDAT_X : NODE; - - REG_P[2..0] : DFF; - - /RESET : NODE; - - - S144,S720 : NODE; - - SHDD1,SHDD2 : NODE; - THDD : NODE; - NTHDD : NODE; - - NO_HDD : NODE; - - S320,S312 : NODE; - T320 : NODE; - NT320 : NODE; - - SOFT_RESET : NODE; - SOFT_RESET2 : NODE; - - HDD_CLK : NODE; - - LR_T[1..0] : DFF; - - EXP_X : NODE; - EXP_Y : NODE; - - CTV8M : DFF; - - CTV8C : NODE; - - FN_NUM : NODE; - -BEGIN - - /RESET = DFF((EPM_RES & XHD_RES),!CT3,SOFT_RESET,); - --- /RESET = (EXP(!EPM_RES & EXP(EXP(EXP(EPM_RES)))) & SOFT_RESET); - - EXP_X = EXP(TG42_IN); - EXP_Y = EXP(TG42_IN); - - IF (G_MODE == 0) GENERATE - TG42_OUT = LCELL(EXP_X); - ELSE GENERATE - TG42_OUT = LCELL(TG42_BUF); - END GENERATE; - - TG42_BUF = LCELL(!TG42_IN); - - CLK42 = TG42_IN; - --- CT[].clk = CLK14; - CT[].clk = XCT1; - CT[] = CT[] + 1; - --- === horizontal sinc ===== - - CTH[].clk = !CT3; - SINC_HT.clk = !CT3; - - IF !((CTH[] == B"XXXX11") & SINC_HT) THEN - CTH[] = CTH[] + 1; - ELSE - CTH[] = GND; - END IF; - --- SINC_1 = CTH5; - SINC_1 = TRI(CTH5,VCC); - SINC_2 = TRI(CTV8,VCC); - - SINC_HT.d = (CTH[] == B"1101XX"); - - SINC_H = SINC_HT; - --- === vertical sinc ======= - --- CTV[].clk = !CT3; --- SINC_VT.clk = !CT3; - - CTV[].clk = SINC_HT; - SINC_VT.clk = SINC_HT; - - CTV8M.clk = SINC_HT; - --- CTV[].ena = (CTH[] == B"110111"); --- SINC_VT.ena = (CTH[] == B"110111"); - CTV[].ena = VCC; - SINC_VT.ena = VCC; - --- IF (CTV[] == B"100111111") THEN - - IF (NUM == "YES") GENERATE - - FN_NUM =( - (CTV[8..0] == NUMBER1) or - (CTV[8..0] == NUMBER2) or - (CTV[8..0] == NUMBER3) or - (CTV[8..0] == NUMBER4) or - (CTV[8..0] == NUMBER5) or - (CTV[8..0] == NUMBER6) or - (CTV[8..0] == NUMBER7) - ) & !NO_HDD; - - ELSE GENERATE - - FN_NUM = GND; - - END GENERATE; - - - IF EXP((CTV[] == B"XXXXXXX11") & SINC_VT) THEN - - (CTV[8..0]) = ((CTV[8..0]) + 1) xor (CTV8M,B"00000000"); - CTV8M = FN_NUM; - - ELSE - CTV[7..0] = GND; - CTV8M = GND; - CTV8 = GND; - END IF; - - SINC_VT.d = ((CTV[8..0] == B"1001111XX") or ((CTV[8..0] == B"1001101XX")) & NT320); - - SINC_V = SINC_VT; - - SINC = SINC_V xor SINC_H; - --- ============================= - --- ========================================= --- divide by 6 - - XCT[].clk = (TG42_IN xor !XCT1); - XCT[].d = XCT[] + 1; - --- CLKZZ = 14 MHz - - CLKZZ = TRI(XCT1,CNF_OFF); - CLK14 = DFF(!CLK14,XCT0,,); - --- test exists - --- CNF_OFF = EXP(CNF_ON & /RESET); --- CNF_ON = EXP(CNF_OFF & XACS); - - CNF_OFF = DFF(GND,GND,XACS,/RESET); - CNF_ON = !CNF_OFF; - --- ========================================= - --- ======== FDD controller ================== - - TURBING = EXP(EXP(TURBING & !WSTB & !RSTB) & !STE & NFDD_1440); --- TURBING = GND; - - CT_WG = TFF(VCC,(XCT1 xor (CT_WG & TURBING)),,); - - STWG[].clk = (CT_WG xor STWG2); - STWG[].d = STWG[] + 1; - - CLK_WG = STWG2; - --- CLK_PRC = STWG0; - CLK_PRC = CT_WG; - - CT_WG1 = EXP(EXP(XCT1 & FDD_1440) & EXP(CT0 & NFDD_1440)); - - WGR[].clk = CT_WG1; - - IF !FDAT THEN - TABLE WGR[3..0] => WGR[3..0].d; - 0 => 4; 1 => 5; 2 => 4; 3 => 5; - 4 => 6; 5 => 7; 6 => 8; 7 => 8; - 8 => 9; 9 => 9; 10 => 10; 11 => 11; - 12 => 12; 13 => 13; 14 => 14; 15 => 15; - END TABLE; - WGR4.d = WGR4; - ELSE - IF WGR[3..0] == 0 THEN - WGR[3..0].d = 3; - WGR4.d = WGR4; - ELSE - WGR[].d = WGR[] + 1; - END IF; - END IF; - - QDAT = WGR4; - RDAT_X = EXP(EXP(RDAT_X & EXP(!RDAT & !CT_WG1)) & EXP(RDAT & !CT_WG1)); --- FDAT = DFF((RDAT_X or !DFF(RDAT_X,CT_WG1,,)),CT_WG1,,); - FDAT = DFF((RDAT_X or EXP(DFF(RDAT_X,CT_WG1,,))),CT_WG1,,); --- ========================================================== --- now not complete! - - AUD = CT3; - BEEP = GND; - --- /CONF_X = TRI(GND,!/RESET); - - /CONF_X = OPNDRN(/RESET); - --- 10K_CLK = WR_CNF; -- now not protect! - - 10K_CLK = DFF((WR_CNF & CNF_OFF) or ((HDD_C0 or FDD_C2) & CNF_ON),CLK42,,); - - 10K_D0 = DFFE(D0,10K_CLK,S720,(S144 & /RESET),CNF_OFF); - - DENS_X = VCC; - --- === now NOT PRECOMP! ===== - --- WDAT = WD; - - WDAT = REG_P2; - - REG_P[].clk = !CLK_PRC; - --- CASE WD IS --- WHEN 1 => REG_P[].d = (GND,SL,!(SL or SR),SR); --- WHEN 0 => REG_P[].d = (EXP(EXP(REG_P2)),REG_P[1..0],GND); --- END CASE; - --- CASE (DFF(WD,CLK_WG,,),DFF((SL & TR43),CLK_WG,,),DFF((SR & TR43),CLK_WG,,)) IS - - LR_T[].clk = STWG2; --- LR_T[].clk = CLK_WG; - - LR_T[].d = ((WD & !(SL & TR43)),(WD & !(SR & TR43))); - - CASE LR_T[] IS - WHEN 0 => REG_P[1..0] = (REG_P[1..0] - 1) & EXP(REG_P[1..0] == 0); - REG_P[2] = EXP(EXP(REG_P[1..0] == 1)); --- REG_P[2] = (REG_P[1..0] == 1); - WHEN 1 => REG_P[1..0] = 1; REG_P[2] = GND; - WHEN 2 => REG_P[1..0] = 3; REG_P[2] = GND; - WHEN 3 => REG_P[1..0] = 2; REG_P[2] = GND; - END CASE; -% - CASE (WD,DFF((SL & TR43),CLK_WG,,),DFF((SR & TR43),CLK_WG,,)) IS - WHEN B"0XX" => REG_P[1..0] = (REG_P[1..0] - 1) & EXP(REG_P[1..0] == 0); - WHEN B"100" => REG_P[1..0] = 2; - WHEN B"110" => REG_P[1..0] = 1; - WHEN B"101" => REG_P[1..0] = 3; - WHEN B"111" => REG_P[1..0] = 2; - END CASE; -% - -% - CASE WD IS - WHEN 0 => REG_P[3] = EXP(EXP(REG_P[1..0] == 1)); - WHEN 1 => REG_P[3] = GND; - END CASE; -% - --- === Port Controls ==================================== -% - FDD_C0 - 0 - WG93 / 1 - kmps/ p_dos - FDD_C1 - 0 - write / 1 - read - FDD_C2 - 0 - no / 1 - CS_WG/ strobe - - HDD_C0 - strobe - HDD_C[2..1] = 00 - SYS_FN, 01 - SYS_FN, 10 - HDD1/2, 11 - CMOS - HDD_C3 - 0 - HD_CS1, 1 HD_CS3 / 0 CMOS_DAT, 1 - CMOS_ADR - - HDD_C[3..0] = 0001, FDD_C[2..1] = 00; -> FDD_C0 = 1/0 -> set 1.44/720 - HDD_C[3..0] = 1001, FDD_C[2..1] = 00; -> FDD_C0 = 1/0 -> set 320/312 lines - HDD_C[3..0] = 0011, FDD_C[2..1] = 00; -> FDD_C0 = 1/0 -> set HDD1/HDD2 - HDD_C[3..0] = 1011, FDD_C[2..1] = 00; -> FDD_C0 = 0 -> soft_reset! - HDD_C[3..0] = X101, FDD_C[2..1] = XX; -> HDD1/2 rd/wr - -% - - SOFT_RESET = !((HDD_C[] == B"1011") & (FDD_C[] == B"000")); - SOFT_RESET2 = !((HDD_C[] == B"1011") & (FDD_C[] == B"001")); - --- FDD switch - --- NFDD_1440 = EXP(FDD_1440 & S720 & /RESET); --- FDD_1440 = EXP(NFDD_1440 & S144); - FDD_1440 = 10K_D0; - NFDD_1440 = !10K_D0; - - S144 = EXP((HDD_C[] == B"0001") & (FDD_C[] == B"001")); - S720 = EXP((HDD_C[] == B"0001") & (FDD_C[] == B"000")); - --- Screen Switch - - T320 = EXP(NT320 & S320 & /RESET); - NT320 = EXP(T320 & S312); - - S312 = EXP((HDD_C[] == B"1001") & (FDD_C[] == B"001")); - S320 = EXP((HDD_C[] == B"1001") & (FDD_C[] == B"000")); - --- HDD Switch - --- THDD = EXP(NTHDD & SHDD2 & /RESET); --- NTHDD = EXP(THDD & SHDD1); - - THDD = EXP(NTHDD & NO_HDD & SHDD2 & /RESET & SOFT_RESET2); - NTHDD = EXP(THDD & NO_HDD & SHDD1 & /RESET & SOFT_RESET2); - NO_HDD = EXP(NTHDD & THDD & SHDD1 & SHDD2); - - SHDD2 = EXP((HDD_C[] == B"0011") & (FDD_C[] == B"001")); - SHDD1 = EXP((HDD_C[] == B"0011") & (FDD_C[] == B"000")); - --- Control signals - - WR_PDOS = DFF(!((HDD_C[] == 0) & (FDD_C[] == B"X01")),HDD_CLK,,FDD_C2); - /WG_WR = DFF(!((HDD_C[] == 0) & (FDD_C[] == B"X00")),HDD_CLK,,FDD_C2); - /WG_RD = DFF(!((HDD_C[] == 0) & (FDD_C[] == B"X10")),HDD_CLK,,FDD_C2); - - CMOS_DWR = DFF(!((HDD_C[] == B"1110") & (FDD_C[] == B"X01")),HDD_CLK,,FDD_C2); - CMOS_AS =!DFF(!((HDD_C[] == B"0110") & (FDD_C[] == B"X01")),HDD_CLK,,FDD_C2); - CMOS_DRD = DFF(!((HDD_C[] == B"1110") & (FDD_C[] == B"X10")),HDD_CLK,,FDD_C2); - --- HD_DIR = !HDD_C1; -- ???????????? - HD_DIR = XHD_RD; - --- HD_CS = GND; --- HD_CS = CTV8M; - HD_CS = (CTV8M and /RESET); - - --- HD_CS = !/RESET; - --- XHD_RES = VCC; - --- XHD_RES = DFF(PW_GOOD,SINC_V,,); - XHD_RES = DFF(PW_GOOD,SINC_V,EPM_RES,); - --- XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1),CLK42,,); --- XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1),CLK42,,); - --- HDD_CLK = EXP(EXP(HDD_C0)); - HDD_CLK = 10K_CLK; - --- XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1 or !HDD_CLK),CLK42,,HDD_C0); --- XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1 or !HDD_CLK),CLK42,,HDD_C0); --- XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1),HDD_CLK,,HDD_C0); --- XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1),HDD_CLK,,HDD_C0); - XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1),HDD_CLK,,(HDD_C0 and /RESET)); - XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1),HDD_CLK,,(HDD_C0 and /RESET)); - --- XHD1_CS1 = DFF(!((HDD_C[] == B"010X") & NTHDD),CLK42,,); --- XHD1_CS2 = DFF(!((HDD_C[] == B"110X") & NTHDD),CLK42,,); - --- XHD2_CS1 = DFF(!((HDD_C[] == B"010X") & THDD),CLK42,,); --- XHD2_CS2 = DFF(!((HDD_C[] == B"110X") & THDD),CLK42,,); - --- XHD1_CS1 = DFF((!(HDD_C[] == B"010X") or THDD),CLK42,,); --- XHD1_CS2 = DFF((!(HDD_C[] == B"110X") or THDD),CLK42,,); - XHD1_CS1 = DFF((!(HDD_C[] == B"010X") or THDD),CLK42,,/RESET); - XHD1_CS2 = DFF((!(HDD_C[] == B"110X") or THDD),CLK42,,/RESET); - --- XHD2_CS1 = DFF((!(HDD_C[] == B"010X") or NTHDD),CLK42,,); --- XHD2_CS2 = DFF((!(HDD_C[] == B"110X") or NTHDD),CLK42,,); - XHD2_CS1 = DFF((!(HDD_C[] == B"010X") or NTHDD),CLK42,,/RESET); - XHD2_CS2 = DFF((!(HDD_C[] == B"110X") or NTHDD),CLK42,,/RESET); - - -END; - diff --git a/src/bin/Altera0pak.c b/src/bin/Altera0pak.c deleted file mode 100644 index 900cad0..0000000 --- a/src/bin/Altera0pak.c +++ /dev/null @@ -1,88 +0,0 @@ -/* Altera zero packer and depacker by Shaos (2017,2021) */ - -#include -#include -#include - -int main(int argc, char** argv) -{ - int b,i,n; - long l,maxzero,nonzero,nzero,sz,current=0; - FILE *f,*fo; - if(argc<3) - { - printf("\n\t%s imgfilename packedfilename\nor",argv[0]); - printf("\n\t%s -d packedfilename depackedfile\n",argv[0]); - return 0; - } - if(argv[1][0]=='-' && argv[1][1]=='d') - { - f = fopen(argv[2],"rb"); - if(f==NULL) return -1; - if(argc==3) fo = fopen("Altera.bin","wb"); - else fo = fopen(argv[3],"wb"); - if(fo==NULL){fclose(f);return -2;} - fseek(f,0,SEEK_END); - sz = ftell(f); - printf("Size=%li\n",sz); - fseek(f,0,SEEK_SET); - printf("Depack %s (size=%li)\n",argv[2],sz); - for(l=0;lmaxzero) maxzero=nzero; - current+=2; - fputc(0,fo); - fputc(nzero,fo); - } - if(b) - { - nzero = 0; - nonzero++; - current++; - fputc(b,fo); - } - else nzero = 1; - } - else nzero++; - } - if(nzero) - { - if(nzero>maxzero) maxzero=nzero; - current+=2; - fputc(0,fo); - fputc(nzero,fo); - } - printf("maxzero=%li nonzero=%li current=%li\n",maxzero,nonzero,current); - fclose(fo); - fclose(f); - return 0; -} diff --git a/src/bin/Altera0pak.exe b/src/bin/Altera0pak.exe deleted file mode 100644 index 29cef85f1492337bf539f350b518589f15b622b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56832 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 HFbDn<;(D1A diff --git a/src/bin/_SPRIN.BIN b/src/bin/_SPRIN.BIN deleted file mode 100644 index 51b0eaec3d5fca8db9ee31317baf1ae13195f363..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262144 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∾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≀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 MCyEs3S}olF4;_JuivR!s diff --git a/src/bin/bmp_extract.dpr b/src/bin/bmp_extract.dpr deleted file mode 100644 index 9b69101..0000000 --- a/src/bin/bmp_extract.dpr +++ /dev/null @@ -1,233 +0,0 @@ -program bmp_extract; - -{$APPTYPE CONSOLE} - -uses - SysUtils; - - -const - RGB3 = 3; - RGB4 = 4; - -type - - BITMAPFILEHEADER = packed record - bfType: word; - bfSize: longint; - bfReserved1: word; - bfReserved2: word; - bfOffBits: longint; - end; - - BITMAPINFOHEADER = packed record - biSize: longint; - biWidth: longint; - biHeight: longint; - biPlanes: word; - biBitCount: word; - biCompression: longint; - biSizeImage: longint; - biXPelsPerMeter: longint; - biYPelsPerMeter: longint; - biClrUsed: longint; - biClrImportant: longint; - end; - - RGBQUAD = record - rgbBlue: byte; - rgbGreen: byte; - rgbRed: byte; - rgbReserved: byte; - end; - -procedure MsgHelp; -begin - writeln('Usage:'); - writeln(' bmp_extract.exe ...'); - writeln(':'); - writeln(' /pn - output palette file-name'); - writeln(' /dn - output data file-name'); - writeln(' /pt <3 or 4> - palette type'); - writeln; -end; -procedure MsgWrong; -begin - writeln('Unsupported BMP format'); - writeln('Accept only 128x72 px, 8-bit colors, no compression'); - writeln; -end; -procedure SavePalette(var buf: array of byte; fn: string; pal_type: longint); -var - f: file of byte; - i: longint; - buf4: array [0..3] of byte; -begin -{$I-} - AssignFile(f, fn); - rewrite(f); - - case pal_type of - - RGB3: - for i:= 0 to 255 do - begin - move(buf[i*4], buf4[0], 4); - BlockWrite(f, buf4[0], 3); - end; - - RGB4: - BlockWrite(f, buf[0], length(buf)); - - end; - - CloseFile(f); -{$I+} - IOResult; -end; -procedure SaveBuf(var buf: array of byte; fn: string); -var - f: file of byte; -begin -{$I-} - AssignFile(f, fn); - rewrite(f); - BlockWrite(f, buf[0], length(buf)); - CloseFile(f); -{$I+} - IOResult; -end; -function PalTypeToStr(t: longint): string; -begin - case t of - RGB3: result:= 'RGB3'; - RGB4: result:= 'RGB4'; - else result:= 'RGB unknown'; - end; -end; - -var - TFileHeader: BITMAPFILEHEADER; - TInfoHeader: BITMAPINFOHEADER; - f: file of byte; - bmp_file_name, pal_file_name, dat_file_name: string; - i: longint; - pal_type: byte; - buf: array of byte; -begin - ExitCode:= 0; - - writeln('Extractor BMP-files for Sprinter BIOS logo'); - writeln('Copyright (c) 2022 Sprinter Team'); - - // default params - bmp_file_name:= 'logo.bmp'; - pal_file_name:= 'logo_pal.bin'; - dat_file_name:= 'logo_dat.bin'; - pal_type:= RGB4; - - if ParamStr(1) = '/?' then - begin - MsgHelp; - exit; - end; - - // override params - if ParamStr(1) <> '' then - bmp_file_name:= ParamStr(1); - - for i:= 2 to ParamCount do - begin - // palette file name - if LowerCase(ParamStr(i)) = '/pn' then - pal_file_name:= trim(ParamStr(i+1)); - - // data file name - if LowerCase(ParamStr(i)) = '/dn' then - dat_file_name:= trim(ParamStr(i+1)); - - if (LowerCase(ParamStr(i)) = '/pt') and (ParamStr(i+1) = '3') then - pal_type:= RGB3; - end; - - // --------------------------------------------------------------------------- - - AssignFile(f, bmp_file_name); - -{$I-} - Reset(f); -{$I+} - i:= IOResult; - if i <> 0 then - begin - writeln('IO error ', i, ' during open ['+bmp_file_name+'] file'); - MsgHelp; - ExitCode:= 1; - exit; - end; - -{$I-} - BlockRead(f, TFileHeader, SizeOf(TFileHeader)); - BlockRead(f, TInfoHeader, SizeOf(TInfoHeader)); -{$I+} - i:= IOResult; - if i <> 0 then - begin - writeln('IO error ', i, ' during open ['+bmp_file_name+'] file'); - ExitCode:= 1; - exit; - end; - -// writeln('FILE, ', SizeOf(TFileHeader)); -// writeln('bfType: ', TFileHeader.bfType); -// writeln('bfSize: ', TFileHeader.bfSize); -// writeln('bfReserved1: ', TFileHeader.bfReserved1); -// writeln('bfReserved2: ', TFileHeader.bfReserved2); -// writeln('bfOffBits: ', TFileHeader.bfOffBits); -// -// writeln('INFO, ', SizeOf(TInfoHeader)); -// writeln('biSize: ', TInfoHeader.biSize); -// writeln('biWidth: ', TInfoHeader.biWidth); -// writeln('biHeight: ', TInfoHeader.biHeight); -// writeln('biPlanes: ', TInfoHeader.biPlanes); -// writeln('biBitCount: ', TInfoHeader.biBitCount); -// writeln('biCompression: ', TInfoHeader.biCompression); -// writeln('biSizeImage: ', TInfoHeader.biSizeImage); -// writeln('biXPelsPerMeter: ', TInfoHeader.biXPelsPerMeter); -// writeln('biYPelsPerMeter: ', TInfoHeader.biYPelsPerMeter); -// writeln('biClrUsed: ', TInfoHeader.biClrUsed); -// writeln('biClrImportant: ', TInfoHeader.biClrImportant); - - // check acceptable bmp format - if (TFileHeader.bfType <> $4D42) - or (TInfoHeader.biWidth <> 128) - or (TInfoHeader.biHeight <> 72) - or (TInfoHeader.biBitCount <> 8) - or (TInfoHeader.biCompression <> 0) - then - begin - MsgWrong; - ExitCode:= 1; - exit; - end; - - with TInfoHeader do - writeln('File ['+bmp_file_name+'], found ',biBitCount,' bit BMP ',biWidth,'x',biHeight,', output '+PalTypeToStr(pal_type)+' ['+pal_file_name+'] and ['+dat_file_name+']'); - - // make palette - SetLength(buf, 1024); - FillChar(buf[0], length(buf), 0); - BlockRead(f, buf[0], (TFileHeader.bfOffBits - SizeOf(TFileHeader) - SizeOf(TInfoHeader)) ); - SavePalette(buf, pal_file_name, pal_type); - - // make data - SetLength(buf, TInfoHeader.biWidth * TInfoHeader.biHeight); - FillChar(buf[0], length(buf), 0); - BlockRead(f, buf[0], length(buf)); - SaveBuf(buf, dat_file_name); - - CloseFile(f); - - writeln('Done.'); - -end. diff --git a/src/bin/bmp_extract.exe b/src/bin/bmp_extract.exe deleted file mode 100644 index 0dff455a714fb635f5467ca7ce80b4942d5f97a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154624 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 diff --git a/src/bin/disk3.dpr b/src/bin/disk3.dpr deleted file mode 100644 index 6dafd9c..0000000 --- a/src/bin/disk3.dpr +++ /dev/null @@ -1,172 +0,0 @@ -program disk3; - -{$APPTYPE CONSOLE} - -uses - Classes, - SysUtils; - -function vall(s: string): longint; -begin - try - result:= strtoint(s); - except - result:= 0; - end; -end; -function strr(n: longint): string; -begin - try - result:= inttostr(n); - except - result:= '0'; - end; -end; -procedure SplitParams(const splitter: string; const params: string; var dest: TStringList); -var - p: longint; - tmp: string; -begin - if not Assigned(dest) then - exit; - - dest.Clear; - tmp:= params; - p:= pos(splitter, tmp); - - while (p > 0) do - begin - dest.Add(copy(tmp, 1, p-1)); - tmp:= copy(tmp, p+1, length(tmp) - p); - p:= pos(splitter, tmp); - end; - dest.Add(tmp); -end; - -procedure help; -begin - writeln('DISK3: Sprinter FW builder'); - writeln('Copyright (c) 2021 Sprinter Team'); - writeln('Usage:'); - writeln(' disk3.exe '); - writeln('Offsets and data length could be in dec or hex values: 16384 or 4000H'); - writeln; -end; - -const - MAX_BUF_SIZE = 1024 * 512; - -var - items_list: TStringList; - s: string; - o_ofs, data_len, i_ofs: longint; - o_file_name, i_file_name: string; - o_file, i_file: file of byte; - i, readed: longint; - - buf: array of byte; - -begin -// DISK3.COM OUTPUT_FILE INPUT_FILE OUTPUT_OFFSET,LENGHT,INPUT_OFFSET - - // check incoming values - if ParamCount < 3 then - begin - help; - exit; - end; - - o_file_name:= ParamStr(1); - if trim(o_file_name) = '' then - begin - writeln('ERROR: output file name is not specified'); - exit; - end; - - i_file_name:= ParamStr(2); - if trim(o_file_name) = '' then - begin - writeln('ERROR: input file name is not specified'); - exit; - end; - - // parse offsets - items_list:= TStringList.Create; - - SplitParams(',', ParamStr(3), items_list); - - s:= '0'; - if items_list.Count >= 1 then - s:= items_list[0]; - if UpperCase(s[length(s)]) = 'H' then - s:= '$' + copy(s, 1, length(s)-1); - o_ofs:= vall(s); - - s:= '0'; - if items_list.Count >= 2 then - s:= items_list[1]; - if UpperCase(s[length(s)]) = 'H' then - s:= '$' + copy(s, 1, length(s)-1); - data_len:= vall(s); - - s:= '0'; - if items_list.Count >= 3 then - s:= items_list[2]; - if UpperCase(s[length(s)]) = 'H' then - s:= '$' + copy(s, 1, length(s)-1); - i_ofs:= vall(s); - - items_list.Free; - - // work params - write('<'+o_file_name+'> <'+i_file_name+'> <'+inttohex(o_ofs,1)+'h, '+inttohex(data_len,1)+'h, '+inttohex(i_ofs,1)+'h>'); - - // check buffer size - if (data_len > MAX_BUF_SIZE) then - begin - writeln('ERROR: DATA_LENGTH='+strr(data_len)+', MAX_BUF_SIZE='+strr(MAX_BUF_SIZE)); - exit; - end; - - // create new buffer - SetLength(buf, MAX_BUF_SIZE); - FillChar(buf[0], length(buf), $FF); - - // load src file -{$I-} - FileMode:= fmOpenRead; - AssignFile(i_file, i_file_name); - reset(i_file); - Seek(i_file, i_ofs); - BlockRead(i_file, buf[0], data_len, readed); - CloseFile(i_file); -{$I+} - i:= IOResult; - if (i > 0) then - begin - writeln('ERROR: IOResult='+strr(i)+' during loading input file. Readed '+inttohex(readed,1)+'h'); - exit; - end; - write(', readed '+inttohex(readed,1)+'h'); - - // write buffer to output file -{$I-} - FileMode:= fmOpenReadWrite; - AssignFile(o_file, o_file_name); - reset(o_file); - if IOResult <> 0 then - rewrite(o_file); - Seek(o_file, o_ofs); - BlockWrite(o_file, buf[0], data_len); - CloseFile(o_file); -{$I+} - i:= IOResult; - if (i > 0) then - begin - writeln('ERROR: IOResult='+strr(i)+' during writing to output file'); - exit; - end; - - // finish - writeln(', OK'); -end. diff --git a/src/bin/disk3.exe b/src/bin/disk3.exe deleted file mode 100644 index a902a2d3b0fe7e623303d5d33326d13022d99413..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150464 zcmce<3w#tswm)9;NM@1@%m6_G0tSr=f=CQ1F+_)i#DF{o^5CUnBpCySBu;t&6(QM9 zl(ro=>+1cvcfEIIb?^1A-n*>25Fe`(1`|Nk0Imd3L1neW_{gqoh!E-D_f+*vCILn7 z{{H{|kg4vfQ|FvIb?VfqQ`ODfr5eSW#S}FC8@>HL{D%D?AR_;q(w6ZGW>OqNV*ZmOM z|3Aw-d5q05B{5sh)Y~I;kFrPVlT7B3>`5nMU!jq>jy;Qe7jA+`Asv1X!NuW;u1Lyi zhLSM(W#PZ5>RA1aN*5qRUhaPHN>RjyjIjT>V%GXIKe)s{SU7L^^d`HlwGIsmql>+c7u*aSPOfpp>8T4JL1Xorn zl_Kl;Ec}p+rXwZzn9Gfl$#>M&Qr6*4F_tiP@`N}J+S1{3s zLBRRY8C_?=Ed*rInQ^Ge-(}y{D+mhV1e?%YCGqyr!8o zQ@%Cl9;v)P{dS(esM=T7pT5RvDwo_aLuo&g0gn6aX$~ENxis76wiOLd18DWU!rU_-% z_`;P{cUG1YA5YP<4%=B~=CohpFf*(DcT|>}kh6oHt+~~!Yb?C{Jzgi*@AH*c zt+>a^^EBkeC2{!|NqFg*(EuP}VQwH(L zm|Z+gHG{)=mQ=F_OkGx8vpnx^e`)1P=^hkQM+|j?nsrXO7o79^xP>e4tiXerB|U~Z zgQ?D}s`4LQD`C!B^k3fU8X`f+fhnOKnBsGN<)u=&$P}7qoe2w1?1GbooRxRxRh2=8 zL^~lFSo+nlT<{XL*r-9WNSaY7mD2bxD_?g`B=%c?#5SweV1}pwHG3u*`snmvq?G%- zr7OzwswCe%uOSm_~MA5nX>YBX<7d2Q{Fq&N+Ah7rX`ogYnZ{RlUB>bstTO`t21|7ePvk6_As?O`|D zfxi!a?q=`d?*#sO@YjpKF8r-WyPv>c1Gr)AV)n17JCmKzgGh6b9y8KGBi$?)&o?8b z{Ckb`X(RuDk-A0+xGWi|36N`8xBenePwJoXv`3#Ymdd}?eLOv-Kh4wA`UgDi)h~n$Z)V@=`ABE8 zGrAAyT+E`3*^1`hv8sH9bQvpyj105FCv*teWG91+AyZgh>7}8P#vTKdHQ!fW{=G00 z*i(Q>n7OjHrn=pq(sopM=`;>fAatXlAaF?m)kv#4byAgVZ#RYWU#O5sFEQNF18xT2z;!1h3)MFVD4 zd83b5@2g(@J)CoKnOOV` z-bms-i;Zt`vq8dU&L}JM!8k;i;+C_I`=Q6cs)arVHQNYcH#A4yIqlG<% z$^9&C1VI#()>hEW9vve6>zP>wpIq!k)xxWd zGSnZgUn7?BxoAjXskb~AE3LeBE6Qu6mDN=iHlEv@0X=5$<`8hg9FvSNX3Q*60MFg2)C_&7Ll3CNe*DFXq-F35>IQ4=ScoiJpb?cau!$B zV!TB;L%0U`Yy-22*g3gl?1aHjgh|)MZhjldKlM-XH>9Mx5+RDpJ`M@L?d)tKcTNr; zGx*_5;b+<;%11ID3t(M6L-{%C9WF6DCgB`#v1JowkAOP@~T&CB(nLQnKAM zw;FRuwXY(Lu&<}Q5k*GcWY40~l@cN|MHN^@l|6|~5<4UO%x?W99P+$%D9}n#(05a2o9;N-hFV%%?UQ zNJw}T13)gxW`V!lkLkk-hEqf?&xtfTfhCOpS2#X}EzbMbZ6~R}B ze6HchBZBtvZuT(pB3BolDeo%$(KQz-srb3(`o%hi6#gQyh;_K{i$zdvEFVc}t+-9V zVDp|e78$d!^ZlIs75-a6pBL zjGFPIyfl)P?Q9-Nd;=U86Ej~j0V9vwE|SO`(4focqB`8x>AF24BE%AY2@_0I3iY#rqdT3EW4!s#NLD`gYmi1Sb`g-^L+Jwti%6#u+-YBI-& zJzC03@I*ESo;0#qyU33O|Jx(^8s*zPMufYIPl>%EFS7B$L0wm%>l2DFSC*4?q3s2h zMtN~Ok3UZp&(ZRkcpf~s2)JkXe5Lo~Agb9vTuIWS%k0RjEMJXj$FRB)Ju}YfExh3C(LXIZXt^Z{SG{GxqX0}!3j|uDX7J-c>Gc{o-Q-i z6srw(D327aTlbK zQxba(yj=+k%WKPhYs$-Fw21H2%mBYo8fUcctW>X_M0*JDr9vLJS*~W@MSxaVA-D76KE24O~ z{>N0Zml#90UtVzpQzcY{b6_ipY7^9hYg2p)F%PAri+&+LYD)hc5`mG!;cT#15ic4U z(mL*k{oXg_g~beA#ZQjEYR-IZTiT`Jk7 zy9DELxG9&A&BI^F7Ev{1ETY;#H%9>CZc+3O1A%t)041!1beCvzlAzA_jZnzDB2l_) z<~>y$j@T49kjV+coFmf^ENXjv)ho)&{JwJJ&J{QfkAMr$eHF%`%^1%lZGMp}88vz_ zBZNFEy38@UN!zYGFRp~z2OWf2<{1ek5%X?l1(D4Dn!@2?^q>dY!}H=xJOZ1T)j-l# z5^+i?#%ur?anm^w9ui6-yS`!waSK{idx_CM zLQ@T_q!zqmVseu>1ENdJ?5PNX=pc%cAB>T_as^^!5!j*#V~NXS%pBi?1U+-a81i0Y ztY-@PEvd*O`4;&~Yih*V0^TrEF$Q8}BjHIrlc+ z57c6}U+os{GJb=z#B(Hn!&G5V&gEDB@E%t#dk}SLE&tz0XCU2Yq&-HOdX31RXQbTzSBr|8R^6< zksmP9uZ?uUbdmo{BYodUM`nxsTa5JIjPz?G&ACC8KW?O&k!Ic~@;4ai4kJx;i+qof zK4zq!7-`B3qufXzHqtgDjmr_`#YXxsM!L^PQ*%Z6ZASX9M*6jpmdq68|6`<`6Rsm`yE-XhNzh6BI6IW!viLhaRY<^`KES*^x6*IFTo*h9ol~n+hjl$NPKGi>) zzQAMQNX+aGwhnc0_MpayUAtJ^0K(0)iLj;6w*pjYD#WHiztbOt(ZQ?~0yiM+EY9$y ziNbs5qhPQkC=fZsYhtiD2GA1@Yb=GSap!46*FW2art?wg*9Ic@Q`>Ojd=$pt{7?3S zC;mKA>emJ$_fy;O()lRd{?E3-W&0^@AaXyo4K?SZ@Z>++hCSz_(61ke+)r)86#IFk z)bY=@q3L`S`n7?`{nR#`I3I=NIsfE%C`vewl=`)S$o4ipd>D=niXq{UcPpL=o=lM0{V=uChY3r;g!gNK0uQHatqIK=7KT8t>fPeSoT z42q1aBYWvT3B@xpD6XA~V=!>$?TCMhtN$!}&W6ljJAnehn^KyABh&j&K(LT~K|CzN zNtkjWOrnjM^T+aF2)}P7Q^;INa2_~DL%2T`r3eYdqMRCwl7#(JQ5y4ebSYKH%3@KH z@ab~>gocaG>f>?&djcr!yy3hvekzYNwBe;hdCX%+&(SyM(GL;U?L(5!tg#IxU8n0j zSf~fEKN)2upN)^j66t~SU=fa4ES7>;EPX=%L4_SC=b5bTY&oBY6B2D~d*-p{fx|kt zdJW76UEizm!T}WZBMu-f%VXWiYuO%POUPfjF0vjFT?x;VU&cT-(Kau6t>i14*)*2o z!1|!L%G+0uz|ZF%PiH-#W^D4GkEU^^Dnc`hO#w}Zac%(TYv`!rxtS$aOff2O1DlSj zL-%?E#r#vAjq7|DR#Mm^qvSWFk7_pFvv1rUGelEVH!OFRm%Vkyb+dzm!Y-+|qSt zi)J}n2Wlf?sTrc_Blx3w_uS}jVa)>@LlXLbg4@fE0{0L;hxS)VGDknmG#}u7MxKWS z?92%fQK-6hR@I7m{z|+jgxyh0^xseA?7koa2fNKR@?2CL=b*wzx;<90&8!x$V*YRG z_V-|gGDc?BA82YLd+Y~DCL``FuJikvhMF2K0Vnxm+r5&xhCu!M^=fpm{=e+lHEhlg z6Z+x4{a?!1%bGy7ztReu@&B@IwbR+ z@73|+(Y<()5pOGAM7t9v0sxc)0jT6e5AEl1m}96zmD4ES}_{KUve@#cW`3ezr zUjvRI!;1Ju-gNPL>SS6X-M||JfFbxJciY&o6P`EDRGyR!;FuCcvzLuC0#o)C4AQB^n%$V5_=aY8$obmRiA@P#-!tXXPDptIPbA<>f+V;_Y0Ao56#MV#^|e6#%GDmpNX@K`_c2 zl{l*mM`-8`5xz>nnK0n83@YN==!G@qD^`|P@)1A?gD8vl)-EmgRolF^^C(U9*3K-i zs`f#Pl8_a-N4BTB7AH{Gl;d_@`JMdT=@X+U>4TFm!o7B^$ zpn-{;Yy1!gbSjBoNu_;2BpVyES4!xQymd9zRcMT1B(Q{#YLT7qE9LJG7#NUUK+tos z!M_qG`x!q<0W|hBKaPDFO{V@3?WK|~l-P3oD=W*2YXlD#>}Uf?;mSL!j6=OsNhKmk z!4@fhlqF&_Y1$gt9(rF8j8?8(L5Cuzq0uJZGE*ssDLNa5+HG=iNDc!AD&|8MTsW^~ zymcW?64W8r%o^|u8#C^ z$93KnEuvRB@YaMt$o1Ye&%gSPavxp*gUQ84J<8}xCN7er^=Kx5CecX_ftQ!}dq0Gz z@!>JxT@u3Aq+ij5KJJ*BNP- zkv?UV7Z~XdBW*C!Cyn$q1Ad+H++jTLG@hp!sXdZPg70Gn+*BjqYNTHn`OQZ9l9AtF zJWn#7#~bNlBP}x08Y4|L(q3SpWHPV?ptw^o&FzuZnV@sAkXiW=w7A~lG z3|XC@!Vm}COuv+#n$RD&8|^4F(p!vFGVmQW_JYiKIx|eMZ;2XQoXuNpa3?x1>!`L-LN9%R-#z_Y5AMH_{Ib zUY|`Y;gU$%FH2LrgEoMz>6Ze#lG$zs@0@ehlH9){;tfu$`D9gGKZS# zJJ%(7n6kU2)8gFvelv7e-ya-jeY_{p!~942v$7XCaVL-wQiJu!rzA1fa@<~jT!$|< za@V-s_1oz#;P?w+QWsb=cPnMROdtkOjDd<&-%sus|h#9ARC%6XuD_ux0@$`yp-%!no zXO1LNq7LFHAk6T~p{BwTwL?<@v&vdQXJ0G2^kHlj(~7XzXbej8)IlGBpxWMM?m+r9 zJ&@v>)ZO(h1gic`{>s`GPxHd-NAW!I8|50pKk+TKGJ;Q2 zVMY-5YOpSQ2}3)j8^c%BWh)8P;{&xz{>r7@h?;7v>Qa)^RCIJvnpO2U zy0_c?qbgV(g9uBs6p(}rtr>dwM)_Sme7*XSdR+c%SBAc7bYNy0PMvFapVD;$zEIQf z&=~Z`5$s@9N=wfAYEAsauT0;B-)+?W!&JPHpeCm&F4dZ*f*$nCU{Y<9ccgJ9(VxWQ zQT6X?4{|lD%3kFf(IJPEvp#alM<7>qf6H;RWq;QDYpm+=uvz^|Js=-<$w#{^?Pv|> z&F%p;yGPsmt*+OvPlJPCV*aZ7vNWg&+Wr2-{U~>3wbw3H|1xoZ{dOv!UH=I$Jd_ox zHLD$@P^pX+0?^^nth{Z~M9KvYBljzyhlGX`t1hL+ZdvS*-?A%<9qN(rTJ=rsUgDNI zZB_kulM=0LjU6)yhvYS2Mb-W4yT8yrqRws8-o+RU-?%rN^^Gr4JtBYYQr6nTSE;Sq z)e$@w*Pk))7!*;zO?^juTOfD@2xzWK<-!bjEG@?^*^^+-3m+Opy6Swe0Gi&g%enPu zP0-iC=r`8~=QDqaT4+~uTrc-PCo&I7BjlW9(8 zrk1SSK*>+`#L%G>*RA`1!8HT_m(r@HYYTwf@`aQ{V*!@jYWB|Pd zReu(IM4_Dx%fS@}&!fl$Rp! zt|4P6)i_^k4NQF#;$^C%kqoBuwOs+n9|P0h=9X}+RV}e9i>%7^nFstMUg4&7`?zEd z>9;vw-F0cP0UxRoN{ivFMh(Qfc3gQJEuJW4GI@SfL4{;$IN$qm#No~ zi9ud`;1^^DGY|O8%DWTJOyCd-FAa}#Zp)2V+O#3)W2F@X%=KGp@g@t6>bkP)dQS%C z$1C%C(}O%;8LQ;G+VYdRQLar1%;D(x*t;{bR~lVSM} z`bO~yVL}Ht&<+Vw#Jc&ptdE8V!ATlN~UpIW}AP+fLRh(WaFYf7qTXy*mO9`}DGMA* zA&sc?APq8Dn_+5>Lq!36tr?E=U}j;8-=gFuZ?Y)u>cU<@r?U}cB7J*_^jKfN9$&B! z!z1q>y1sNt6u{X~jqX87qBfD2glW7-ibdDw^x>cZW&vD(fN`k(CAysJM)&qOXXEE! zLjI(y;jps5L}~T^;pEJWUQ$bSPDZc)8hMvp!A*C5uifviKTWf*A=hmW&>y zOF5)1fUX&`O{Yn>30)$8++}*J{#zO^zU|uA-JtktlRB?w!aLFIKPp|?`&963Js(Mg z+dm1@o*GZ%nH(DfYjm=k2+rjm(@0LGsVVU9R7Xn({kGg*au3?#XzHh2Weknlerz=@ z>)vj0HvB7D9n$oWTF~3wVk<N>$@&6`f)e%GT-u9sZGj$rCpmZ zCYTG9gUWU#1pZG!z(`*G4oL@rH3jA*q%Kkpqz5PLmD}}kJ5BA{NKq@TUgy(-MOoKl z&;gb(&nXy)5KyO@pP z_nn#qIoA%aKeY#yoIl$EzF(oN%)M(42Y$~-{a^X0e{+i5Vx7<#G0*w^mE)=y?O6cz z+3|N>kLsULFvkKY(DRfJ?R(V;LYLgun-ErR>s8)T7hxEg{0Z`IyRxV^JfcbIfnu5V zn+_PmGEV!9tj+QsQlOcWd+Seg{YVU0Cqs=AA*c`+ests@ZVxbnrP`@ zKGIrvN%)OuTRAOhLxj#+DVw(;N$FXzP_u!xrAw5ZEt=W1GhLt1E+5dx^#mHs)CHIF z9tche6k8{3Uz;SSO+G2VX$_BUYEp_O_Xh5@DC?*6DsLLHvYEQHo^NzL;X|dW&vF?( z9ud<3LZ)^I>D`6evltLdA+x=PLt{}qJyG$E08)t0P7{?7U(;>Nx?3$Uw=s$u0dgVaD^+Cv64dc-jc7;TpE1pPIWI<0qRhwon^1Oov#V_Q{z6rIU`6u zys_?)MybQeKxDQ1Txxs$c3Ng+@tj(#9CU^HOp;{d6Is}(Piq;tM#?DFm6em?x2sEC zSxb}Gj8wbSkL0jby-@zN%kq(PTaI~RhcXgeVfH9cOmqVok>C7VdlLQ<^DUHnDY6vbFKB|2_3D0jm`r20>AzhqwyO(|sXMdwt{tS_YPS@2!FXittsQ}aj9tp?u2rLPCvQKt z(4!4Px2bt{d0m&)Hx@Vb>rRjh?jMT#Zg)?&l)!JkHDRR^4BNJtmfebl8h(gw$s+ZX z+EK4-@Qm*-2cQT3aqwBK0<0~;vTR`_t6eKLvTh`Zc9nuY!Dq8l{FgU&OP6!7RxRCt z8Ai{6MJ6>~`xlYrC*tv2Ow^gMw6~&9KwsW*tWZtK2r7A9#TomcZw6hc%waXOO#Lgt zMNG+nb>wDfWXw9U3ClTS9r@t7O8g-?`(ax0`BPRIYhhZ|K#2Jpu&#XK{XQE}Tal{7vDiUnh8w8VaSiTW!VC`Cg z?ON5Qx@I@-TYp(jMo@KTN%dC$2z7)yRCTJ!zfhe@QN2|ip(nm*3R~T?{T~__)eucj zhRiyEUCHZJ@sHJOv_xsq;#!W{p%Q_YwzGmWdSLDcf#Rb8(Ar?DJ6B`kQuB^tz1Yo6 z&c=n}QCq}WayI7hXM1a%e$yEp3tUL z0_Qfj8T}{U-(`{#@oRQA^6B9I6U_MtxpSOPf&zV6bNuS${asmkC!CM8p{zCUa}(9{ z-%R`k9ZKF8YTk*);D(EpypFp2KWCC%&HJKmT52unk9mt}Q{Lx#-WU4Z4*$ng>};s# z6ad2f_q+<$SlAaqr3qAN5mXomnpf_JOU~2GgzN~XHBA68|5dM&OA{XdDuxBin*NdG zl&62hq=el1(-@>|!xtjm7^h7C2pWA@pZSqB+Dua(B!4t3?*r!p4?>FQIHAYTcTe-> zs9wLr3Onj4@OPt5{f?us_2|(+;|C9Zr)TVXh2jg^i^E}W8mTWS2O%VFGtc?JCUV?> z`8jehb{c!oZLN*ec_uZRLO7j20~IWoAA(Kc>uVndD}n`6PPUSS{3Rz_tw^P$Vhp+e zg7>o|oLm2ALPM70{_Et=5CgF)fBFJBfVc_}4MBgZputp5P<@PBn5PC+GSqYrwf^3Y58IlzogYND7V#;n5%N$Y0{V@;4G=g zzY>3`xtMD>Ct5l$+FVA+<08oU)13x#!fFa*Q8Y=^L@dPQvq|F$r0c^)V(QtGOOlC9 zM3Z^N@XXDXgmg=!j6V$(W#c#3P}yUVGXB&J2T|<^JJkGM@QiOy;E8x`wX74A1M)8A&(aPF#PKW3-k(xj94XpGe>5HFo=E_lH9 zrl!4&VXAgSI(==@O)@XD&hx(`ys32&D%`g^1aL8=)#2-iiDLM8QCm>5C?lBB{R$~w zL>L8EOHj}$G2I!irg%adrZmg;=f;DJmmJY<({Bnk2uL^mLT~$?zpe<9Px^|8(kaM zOx|={I}AgMHc0NVt%+;4k+$!Ag_M5(Cz}fY+H!P|H*QLjSIN~7!uia(txet8^077G zm{s3G80$agj&{owEI(_pEQ))X5YBk(|Itt}3(&qjZefwS38UOKDNTSU&r>Z*@ zY}DY#-sYw`kHPUONS1@Cv;D`EYn3(DSBQs~IS(y@hZg&6|2GJNQ>di52S2dgpun`h zV!37n$JJV*y&*!oMB94|v`=Pz<3Fxks4TOJb%vb%82Dt;(9M*3w2Du39SG>5E_)Nj z(xo`En5rA>v}sozEz(7whkTG~WtjCN(VOX>2rscSdNo%W43JuUE94K@z3g*IOP z*1ll~HW1}+T^r($U>DKYImG4~;wN_l>?Hoa!=LqToEgI31^63>zsdN^#9ttJ$igGz z12auMfjNmiN5(HWc~Jg@?(IvXJ8|p(apd}?*pA#VC9{3)-U+*X*39-bt*8lp7H~dH zd*zRNChRq8fXja@IdVNQfhE(X#E^5F-K!*qysG^nw;6Yva?DUTxFGBRu6?Oa?tGD=JG=A;=S^z)HPqj|GU`l@XG7V7h@+TXbm6D z(ABQ+B(MD4#r}%{9=6`pztYA2uTTljUrgb6fTyl~OAV<9w7YX5`BpU}V^?^pSJp4~ zUq*mvLGnD@%!na>vHv*7G{^v$ZU9U}wbZp@8%pTRDr|UV1dA)?`smY8Q_7UojBah} z5zHvXy;>@?025JhFI=-^elOqO%Op#FIGhn&x@1Y2;;JY@#Q@xYJIq^w5Ti z_V2LDSR8aqc1$~xWnQ?meuu-%xT#fxh`Gkyg0UjSdz}9>I&CqH1LroYhtk3Y>LJCN zCZA69*|u1@ABgQP=T>XVQa)ZNmT^%1JAs@LAg{nx1jwe*Qz+1|03~>OIRWa9TK0y0 zlGRZcHm7aG))~*;WKCQeqBZpbu|#@>Mh21hUdrm6+luYp`cL$Y-lXknaqr7i=2fh- zm)yGD&g30C1$JIVn+4H&FV#0Xw*@i4W~PnDCg3EM(wS)~NGBm34PLNESd^A3HVM<@ z^=YG-e-`%CQs_U^@ZX5LG!Uutk3~@`^N+xcjIFme?3z)w7dI|_V;GCUnCzg)*25D) zCsi#bPbmeh;rtv;X>VWtv^yF)aijx{g9E*>ZVD zmuM5`(k{4k0IMBX9r6wr#tQZm1&nC-0(5R{yHh}MG-{*}gGfgsb*M(WT>@h=8s}gb zP+)|u87-ddXuF-HP@6;quhegZ9_5KL0Eeoa)-w&e{1p$_SS!UX5(6@TW1qQf+tg*FNreswbm_h;SGYE zOOQ+OHtyn7?iATX9*hz^I?;+{{yYw`#T?FyNs?Ny6iUd)2GZg=23SIHuI#|gD7Fg@*ezw`d?;8%wyrG0o%-r;~V*`(UD68$(* zV$GUu_2bluJ!`fd5jM9YE5{*OFu`syVc)a|dID{*QtwkjmBtvAh8vXziAw&sjNp=` zsD>XJ_lSoagta;SJ6ssFS30*@9yp4j)pFFO4r@8?df@NQZTph8D;9XE)(4Kl#kA7C z9>0qx7tWATi4c#myoh z-;Fdt=JW%(b-NXG$hStaVzoOTDK2&7Ri1}`1ua_DkL*+_Lc*_cyIQL2iDkL z^`bC*4Qx006W;p!tXmF9Hay0m5niR%>Xq*+VE#e!eJRXuYs*c!{T?^G2fZ+bM+*q@ zK3eUBxZJ(3yl_DKB@lr}_$9QYaM6zgvE*ErN6kghFgMwwT0C0k0e-|`uvXJS@$1$8 zctjfEpK;p`0b}l2pmwOW4$LTm(d&uMl!m2J9vw@46pp- z0mXEXJY3xNSU0{x>qdtZOa|~#5y+%r%{&s73u+Gbx_t2$_hrHD61_u^*tn9 z($25O3I^S!KeWV}VCI`4>X3`-d8G{5i;}U7aIPN3jse z7Y{fax1$b~zi?m`=V>=8sXbWs`v*g%YRGHo>O2OZ`mYInqkg{`hh=C5MlE;^&~E7> zLnSx^LReh29ziKK_X*ME0@1I5qB}R591q#k5Ay|O6YgVWX9EaKhLLQ;* z+=hvyzLWHNmRIgH*E-Zg`hEm$F3dO_9+B;~z)!PfbDgsyC+^idsbdavYq1uTj5USo z8Le%BDv}LSJ*nC=#yy|6VB7yj+X!l&%ek%4dP#fMcK>X2V_q*Ahm&7|cyv~ml!E;Otp|IZ0CF@FOWJY%1c}0`yJ%fi zh>elLia#E}p|)o{P}wq#HtClM+Z!!^fy!T_@^Wo{Upeh1WpoR>`NspktH^Gyo#4In zg#+Gf3?5iOYz?bjFjM?Cjc&23Y}HnPjquR=(`Dq~CJNT(BafVG*eI+qHod+6My~?@ zzW{3&K8wfW_|=E(!({V^MP|FwB7bbdN@xO3=$YD29x}4!?XLAFXh)Au7BueL;Mp|C ztjnLAIe93MT)c1tP6L0^)C7E^@iz*8Dfqhpf64e8ia*Tr1%vVDz#kSx1w=m{f8<4g z4||Bu6^60I7MMl*Z-hc&E)%t@0Q{-dEmD-=|;+=CRfv-vSv*$?_?S z^TFo;rWdB+1V`h`xRuW!#{ciQAw_=ifKm(HO)CPou!~XaC*97C<3q#kP;&W`8k|m3 zAAJmq<(J8V$zNNfaW9i*-z1IXhV>?4LZl>mf`^=oQD+z=Y>h7z_UKM*tHB;g6JZvw z15u(T>lVqnsyl36^$+bvl!rfR<`d!2=2gHHP7n`miYz+F7Go~Gzyy{rF)$El|r%EUOggN5$mC_pgPLzE3 zO_L=2u9K?pyI88g?-c*YXpMDJ3D5UPR}N1>Zo=A$nLTSS$7ZG}XzDPk zAQ*r2%-d2@WAOfpa1zLd<4<;MxOLsKWfMLMFFEt301H3x21bW7T1R>x_)2~76vC+y z>}v+&ZV2+@)`q-tC=s+?Z8>Uf2Ep)nQ@ zw)58~g_H8a0q0{uwF5Dh#AY(3S~qQNB3MJdtMa}VTTm~+j#2F7SuooG2XnD>jk+$` zvd*D;>=QkX%-tJPO&-UDy`BZi-fy1KJ)>cBtVzWE2-#kM;FKh&@ zvlr1am=@b(e->G6t7qiX?hUhHz+kc6#7W0hSQ^9io`aRN_vKV3atC8=N|32o|6^f( z3EB4BegXApriCT*&%oI|ly5xRczDA#92?@u0RxrEK!vPUI-bZ;9K|@)F6=`QUC>|p zGqIpwh7F`p=iD*S=PtF4n?urJ-WF=avw#y3gUvLzW4(a$=Dp6>74jSD0cVG|zlVEj z&6)8c&yBSN))@wbyVvkC37j6duNmd!4+bayeHn2Q!dqYAE*{eY4_G2>Dn2b%F0vWT6ZvOEb}Yd4Kci;&ZN=IxXxtJ2 zErFz>dI!&)x~!@p(q$M67h)1uPh+wvj=CY_jyFTooZGlBr@k*AcX+eRSb4Q-Jri&~ z18EwRNo`j{OSF9yFX;(ifc`}!GGz+#d8FtHl4MV`7yTegD)2d?6QR!UMh(!Xj9nUa z3h|0Q#URNztlZkG%$FJrmZMN$~vC_x0iQ0QcoO?CbFs zZk>cWXvkNj%Ta`>s7%d!lE^?V>bu&@G|0fa5g}WH1`tFd7eFr-au`sw%T8T{^?};K zeai$j^ui!*9BFUpg+widJBr}$WH)gv=F3G&Tl(QmZz%^6GXMRABkoOm_XY8?LFU0) zi`|;Job1;_SLEP(=4W>KyF*Q#G}$4qF#T|2aQ$2yi^Fp^y~X7W)ZUeC`9gC?i~WvV$YKKYt*SZwblNvymX* zDvgdo@@;tVhaHEX3q0UvVe5w-2ftbt0#9_+=^I0f3KuBvDtn#3Rcy*~t1=(Q%^XXX zEf2NE9R~-j@X5tW%QcLpGS9y~xj22NWD^A@zJB8|fKzH$T{Z{CuHReg0d)I+!kCAL z!S%%&9P57W1Je&86I2i9B!;J8+@IVICd`sW-f7~uc=JNuiT698owQuP2Us$?U+uMH z-Mj~fNm}`P4;5t6&|Sz!R`E;8xF6D>yEFJzGyg%^GAO{ z%y{8FjETK1^cT)z^-v%Q@g&5OoLf`y8(3#jac)ifFIXzI%ei%gb6Y(3S8lplJOJk< zUTp4+_5N3#?oa97UgsZ1bFnvRxA)JKXx^;1rFRHq3nwAGM9FA)^ z3`s9p%DI6KP>cYZV166LDZsrEvA20oZm-iN9{l&)W$be2+QWla>FQe<`!a&ssx^!i za2--HV%6>3X23YYJco9|z1{~>LdUqSkf#x`oi{ubt1ThT3F%S@-=9PqP1;K|9LDMX z-ipNl3>5bu?gxe_Ns!eL>{*cNm?RfnE1 z7+A&+r)g`zAL4%Qc8JTYlD^BqJv`;|;1AlzcomV%r$(^>K88tF+EzRvIf7C;`zNA? z@hZ#0=oDczBQJsS{QdIQ4vB?d+rR9hXcOn$lO9~q z(rKRc&2vlSk1gN)UTIf8QEz@8+oh%j>auot>o}%P6ff01+RY*S$7kVJLPkobUOXI-Xc zO_Dle(0@_?N~VSI_jf5>nZ1%@sWv7X(+TeVCk%UsvBwd&Y1jIwNWE4qc}ZPE_-)#q za2Avf%;%kWO(4-8+0S`!FJj+V_SFvI=^3BR`Nl4bT_2}^T#sEzotav2w0=nE7q>x5 z7*AQ-F}xrfx-TrDnDar5bvrrPiUlLlj#Gg(KnTT~pn8%)I$7Oqc}GctjOHOypfcTK z4bQ~n;7Nfky&ojP*W%sN0-E^|$5CJjwetA=9UK1WuKLmDOr(Gwr^_1K&IfISBBA#Eaz zDX`4I$k;8nnBj_=Ejt5uCt`1`RXc=bb=?M&+dn}a#vR+{UYcjFBdfMk4e=9;+S_nT z$exC@I}yCbUF;aW90 zOn%T##D7$auoD)_;Ev&&V__@E$NT_JVAQBQj#@PPv>`Lp`5^-6;VwS+uzvQ0col{X ziakiRz~v-eL0kdxe`*&UzeW4eo&^F9ZX`fQkTb{QvJ`?qoO?^6)^HTYCa;%MLF7@{ z9vDPjt{l}~zXkt$`_j&BV$2!moq=UcQ3XL1sutZv!6nj)_q9rZ2?oUULeXPEo151^ zqZkYF$BDhBMUUbIxuNR4J8PyY~;0V~M&DgTnu5dT@DYu_-uVr#kbd z-sK_Bf(QSuGVM*^P_{q#_a%!lbj|u_OFC~PuRz5SMU`Ry9qT68RX?4vz&=&5ncIkF z43#>-M0v4jyKsU7Y>2T!a-zS5UUjH9VV^Y8TYriLYlmV$XhlS@WidvGWvTx0QW&Aq zE-}6qrSD4D9~wo3)tVsKL8#ycv}Pz)`VY;EpLS51;8h2k-kIpnf=Z=dD=T+KI=3E_SRc%i8b zo5QWzFENt&F0l`}a1@}QB-fHfg@_;>PT$qX*9foy{$1cJtHdm&Ak<*`XqNvQ!PUXQ zHK&@~a5>9&3VE_+S?Jv}O zFq16S5-?u0J%feqR9*VQ9?%!#g--d>V(ZFBBMt+`2Z0<@Z$*Jv$%IFCJ_OvDnJ`@G z?7FrQ$h3FxBi1u?-lSpQMiV|TKy|gHi@C3YjS;ygabtpjn1zu>_-WISixAscz>cvdj6$q^x#0iaWFw5O4Ss90q{jzpv{- zzCYc=HrT&uDv*2FMng83RDdP#M8(lxx>*H#3>NM(koRcg@k`OR0O$qsPQcaGu6cuR z9Bj}&z{r<-?)6JJ7OdG0V?gEgka^t=9KyU(4K=UFqnS_#H!{vJufbW5byl-Kxo(}^ zL|X#xMD&XGn?bOM>2fedUVS2k;MVpnE%yQ;YHM#Cg8FuDP9odcme=bBPt<=n)Xwl9 z%Fe02bLEQCO8%dj)Yew}Vm{l!*j=og`B)WxEAb!8UJbvk40n~l0DFtWP1=FibR0dE zY+FWZPoOCjC6h7Pdk}7LXouk2bv=k~qBHHhcQ*`|v#p}Ena=v7lpaNu(Hk6_30B+i zHiVzpjF1k~e7IMK6OiI@g)|wJR2Kr$n68s(gIe8Ac*t*rJ?oIOd$8`pc{TYy?4`n0 zcBt1-j$UHL%yPlbh%XG^(g5|_wv5s~goIE|-&d7)>)P*uFk-7?!L|x8C-LyU)&MB7 zF&HDXjDSS*deITuQ&^j4>?*GKm&d6;)60}`ByD#xx>>%z2hn=;3H;H#9_StIJ1CxH zt%Ew}DglQh67aQ$D%jjKVg&yNOa}65AP;r^1%oyGCGb#?K&)fBu=CNSR=HpcpMxL2 z$(mM&-6*_7Ml-dJ*K?7!&P+40#xI?ZJW7%+Lf4TG0}aMWipDQDER}U#xXmK5zTuK-QHy)EAgFop`I&Tnu-i#Tlz zmWFd1zufpAggI6FrQ+rNSv!ZGA zx-5K-G1RB(yBR^f5EHKRF&xtYflIXdvk0u=hfIjr#2)P9>Le5?RUO+MGWoAk_shr4 z@@`X<*5@Q4Q}_aPEH8@Yf6epj))k%FwxgN)|eQA{hrAe;#pT)=*YerufVj9PLn@9 z1ME}yw-(TCjx_mWQ_^m@N8o61KOpIoto_(|+phU`Q1iI2r2Q76!zAUR7w~zP8&bj8 z>_2|T9N;op195Pl$dCz_|E)m6j}wf+!nq$B2;6NH`agxF;qwf@`zGx!hqSST_rD{u z=5r#Bk3|RkAK*Qa0bld0hyfP^8N-7Dxys^XoT`DYeusFxRH)U=_s6_Y2mzbYZOkz85zO%s3?!)fZm`O?jar*a2_LZ zAoWnh!Y627!$x&IxY%{J?)tIS4SBu;01ee)WQEMNrmdJpa_xSbjzbiP($O*Ui~B6i zFo<%Pb{By7wludi;!UTB{ncniIk#5?!jwD>RBnM_=sg}jCFqOrnh;ig#TEI#COOer zMm5)pxjRs-K@n&#A3JZx6xmx()!tpIb%7i59P6?tVL@VAGlWhxAQX4x)R%+x;iEB&hVTss zDr3?Jk7r>K9ZRS<7A=)`*!elhqE#m3AC1Yk^85(i1dm>8?ZoJSUmVG^c?vr*c*Pm- zUD8N(hN&*IQ*zX0hW!rb>%kc_a1OR5&eVdrI#Op0ZKA!4N(%(VkE0ZqU{kFR_fT+3 z9DNckUkW!eg2g48@o8V-V$i@WV?F7%B4&bVa2R^Fe%eQXpw)aqvQ*WpJ$)QP8=eB8 zH12aY{0(sWK62VVCndnKM0HM@wLbHmQ(q63uG9GYBH34xsReto=I_BfhVGr}qMhlx z9$e#??=jFEtz8W}A_U7~ z1dBdNMxU&HA<`$mK^u8TBvYSUe(tVFp{~djb*L*=ryq{#0_qoh-p5lh`Zv*jSjIb| zyY{S(Kra*k3`$_v-on7tS6DmW0uS15z@FU?lfF22KQ#Otb%Zh$S9AeknVwOmTmr6y z3Ul>XpEgyi9mv9bE7Sp8P$i5w?Ga*PuXgiUULv%Nf)WJt!+8hf~PQrk}I;xPINEebP02$9^S!7Z0;Z$ci0$PT2#EK1kF&6 z7Ok?aGF8yNP2PO|o9&(rX-gja{#?>Qh$P^eLW&+D`0~DlJQSAVQsm zPZEgA%29ovykm-fDYtZ(ThIqn+T7Np&2Fa6L8MU?+MlS1(U9YiZ?}FY^b2959J}@# z*aYo$Sod^<>ypb<*AjT*L;9KkoSNkvi0oQ9YA#jF(k7(`arE83_*U)4(-8Y7q4a$) zB;@m2A(Jx2tnbA!Sd2N$>o_B;nzP}J2RBZVZpnUxZiY*XuEg9Jly155K?q99E|BJh zZ;!iM*Kd?Hv+r7IN_b)RzYydQDf`M_66E9pX;^`j7QX(<@96O=S<99#3s2gzGknFC zUE#~NydA!H%e&#RcpkOoK=^_!?}UeL=?D+rawwd*gs}IB{{A03djbZC_q1W5bDV5 zDpM07Qw1+aS$omTN`-w1K88l+crPOzmP#58kj$Nks4@VC)CBokyjYiM^8W)KnMw2m zbawMoct;7)h3c4RaHp=rx~RC~>Zc>l0*+3Mx>*rr(h)17KQ=6fz~TFihc|u}ag)Ny zosDoi__+{mBe^-`>tFz2FIV_+Q9>o^G`s?YcSl5Q<=>-}vQBRpO)lKjj$A=6hE~?; zjmKhWjU-yrp=H`IqIHL$1-G#+jz+-f1vmi}M{`CR?w+O=;$`M-Q~d72ug^9^f>5PjNPdJ0K*Hf@dNU5pRA>z71W2Z(GsHjTaD%h;UaiAAl6O z9fS@GbzXw85T?)WM19)Wov2?AKzi_2Amuxl!(1^ae`}zmgY}`#c4&$b45oc@zUKv3 z=-*IR_)Y1D7nP{fQvyvF4OzJJ$k*fei~3GRpI0${S_+ZF354)g^9^@E9zrIIvDa_-S4kpt+^W>FHS zok9SC*L{!IEm`!&->_@_qD#Go!M{*j`DY;z*}_*K@FLfyWSjU-L@TnC)|;_0^1+Lv zH`9w^uQ)L7ygY)49?d{LEj*L5k8{Y(h%)UsH;{0IH)w`$=Q1V#H4XrF6d;% zoxqbnxp^n4_TQj=;x3F@bsNTGbs=XLk*Z50H&d#FfQD}L{YHWRbHJJXiTG>+Z6YZ7 z4qk7JmVzh}Ur-K(wpAYk7x6}p|10eepaeM6nmGF0!ZAD1EqX~B(ZD*mRm%aR6mJ#xW$^tjIeQB4mcew8LLW{KI2<#i z8Jl-Zy98*|4kbgm4_^|b&ubw>j8o8g_%dPh2mc8Jgg_P@OYms*&jQjo?W)95Z`f$1})V!#&jNTp1^q7J*SINP_HCJeV#Ks7|;;^*M-2*2Tk;7hZ zn-!hyZF6^<@zIPr9CyGADJMdmFMhn85-MT%zBB3}2(s{-W|e1-7M8ZLl;3 zmBE~forwGo5Mal5p8pWpi1Wj5I2XJH?Q;nHh8W95XY~<2jLMlp>n7;9@Tg)l)$&$UAz$7!9pndbM$50?w@L28!^VfqYZ8Zo_vmt}3DN z6KL%H8Uti*?<TnPv?6%h*X6cy-lU=eYaAK(Cf$J?~vKYV>o^QkJk_6aTg$d zh(}?Ya72(x5Q;%TcP_^N#BwBDf`iKVB;+=(EM$0`+d>|QgCC}8L?aM1Y|Ge1`?r{^ z8@o5)TSf*Dm)iTmpdO(Y{K}Cqc6G8Iwtl$ zgB&D5duW||2tK6JDmWI z^Z%ab`@ZLSr;}Uf-dawbI<;4wI)$ZT+CQV#0CuzdgU}^6iS=Vp(w|c9y($;t5Ma{) z4Ck=>r+2`GDcT4$k6_J+CZDY;qmljkE|QmgePA~q-xK!+avc2x4xXGoQFz$m zb76Tgf@O8E6lEJU25HPkaE5@?Hq?<0zdn0cSyr_hHoW`pMFw@t1e_T_<|b$t4*1kJ zbQCnojx}M~1s~U9-NIiFy$j!jEYJ(=uQyHee`EA^T9q)+;k$B_H+j`qb>KMFmp004 zTQ$}&aGb%{Uabzfr}h8T=j{KR&%Qb6+#GV^%h3NfYHesgYkc7S%|B6uHmw8V@Qg)- z=$fZdg#G>1P`m|Y6BJ=J^iG&=@PB9YUc=W_dXGhfBh-PTpwD?MA{=2DILhGbz(q%H zI9H6+4?wOb^L{pr=WniKLx+Jo7aFvkD{VtEa1h~s)(Z~2Z4dWL3t&>#XFJ&6b;7_{ zZ#%@}O+*adxPhaLC>UEzAvR>lkied4-S-58$d8)nFuf+sN{{t+nU#(J?O>X`2{0`b z&K5f4-(nE|JT!uLN9}3}zbbY}@L|G;djX>8F!Mqm{EfxZ=Bnvx^NCM2BSgjGq33K#tY&JT zZc6kXyB;bLXpG^tVY7JGfSl%<^dZeP(PLF?aw{a+hSC$J9+!UlI99j`**D>W9(gw~ z#jNduQ9DK#HN2jn%;iDcgu0~n`h;=zCQqY2_6q;vCe_ys?Tvp+{DO`F9DO~=OmCwi zV7CdHs*KPPTZdK7(3QdOu)GdAuOC=12rOXePr;pmQ%K~1U%-c7*z9*;zn?up&gnw% zur(iz;A3#3;4g2TFiaiu6qt%OWv+F&)o~Ph2$amyE}Vr**%ei~GslEI#9=@fa!e!p7*V_NN>v+l z2Ny-!8BAQ8`W`?>L*nS$enr0S*R04m^e|{&_b^h6lHO2mz`=}d5J=yrS=nFTf-maP zr=oKtj3S*eYty33QzT#df?3Fy$hQ&M{~zR2BfLj={U7Gj8p;KvcQOvbpf!a^6OQHV znWAo_R_ejNvgK%K6cfc zT&4&UQsOn%uF(jI@UeQ!rL0R;|nmSdZ>|d}QDQEwg!4$k3-++B%Jyl8n*;ANUM?!lQhL5y=H| z3uaL>8%G5MC*d_K8qq!98Lu53ie+1VL8NF?>$IVdbqX9sX~C5jAYFZ*rGwJZ5XZvN zR+JTNPT0W~Bj#$XJt)Oi*)$M7WlB}rgW-e0IXHM%vl@*`Z}ck{$$lkG-7c<&$kjTj z>75dNR`e^2kICM|gg)To0embY<~yW<-Yiszo>Ea7_lB&a(mz9S+*i3BpU1H=d#uON z^!H)&ih5EGQ6Ok8WWpR7Q-_mWpGqC0y2tlnMDh2ZR?DtQuPM8#GQ9MP z(c11F`*7q1*+6HXd(>+wRi+^top?#9a!q3yo3Ov>x)3c=2aI+pfA~1B2n?7xvaDcI zu2#~lO=<4_J{YxQz?WsiF!2}yX()e9c+Yq0$9uk2KMQ!%Z0i2*drlmn(L$h88mZGk z$3K8~{MVqfPseI;NveNKGk^KkUrXvd;=t1+Z_VBqm}h+3_=up{zvYb9FAZ&W zXRTB3^yya_d~f*AG?zQH>Ag+(wD|ss2Dk6w94PSGc-Oi=a8%vB zhh2XI$<0V!VXB0=;SrPsw7dtF#*Cg7=r^VEz_JsRa6Z3uY{UeUU4YUp_)PgF>{fyK z5j&j!pn8ENku8o5BUIxyOhYRAr}%ne4&kqcd})(5!Gdg~zb#M|xiHzkSS7V{IJ4Xw z&Q*hNQ{HX?>o>3Ki?5-p;0-&|+VtJAn9$&CTLb)r+G|jG z+N5PSXhXLp81*AjP|$nvqj*O;0a`}`C1W4_?qp*sO^AFUDVfGREDnEJkzp*#x9jd;Gm^OrZ#LLG42 zxrQSm5h|zO(~M=$1B)7hepr&@?c|sT@kB_8+3(2kH<^6D!k3eLea|(HIX2{|xQil> z%kXj8fUAI5$Ofe6H!OrU*+y*yF-6PZ9B5`esi~xIgNh6T*YX<{eX27vXhW32%CFHj zfGZ0}aSoE-?qZ35Q3U(hi0{HejgBW28_WO__P}9*Y0(DO53kG*Blt8JayH>#L{Jmq zP|Dkc0>$RgOtlTQE!zkA!Osp#Qm<=EYCCXT3P}i5`*>NDg(f!m6hg9Nha`QQ*@Jjx z-@*u4*BjV9uS5z0`Vu~93?2n7)K5=FtA-OgQ&r=qT2?GJk8yAy-un}Q6yGJnp(;04 z8*L%ggZSH1F;H1(@!y7$?sbx++d4c+GSY;VNyL25emLP?^| znjr!ke3lnPs$E#by7OUt)p?F7BPy#)x@OdS8o@ghMO4d1f7y;$XnKLG8nT2vjUzw` zua&Zbo8Hm+UQvEb@p`!AXL>jr3T{!`8%1sRUasK=A*H9o=aSY#cT;6&v6!f%r6qTBOIq3x&p;Q5KMK%7{1EuJ z;JE-#4?I`nIh*+XXw4$TZ^WvDAb#rQQN(XclEg3jR|~yp+h-m?Vchst3&oXV@y^D> zhVREj3TUM5q;{O<9l5JUsWjoJ^5WE0St8_RFceC`n5-T4H`V=G5^rkR#b5wNLgSWw z%f~NJAE}pfdZBXu;|oBD5>7+>P4F$&!TDO(By~`%_wqq;-m3>Cc`q7d_YN8q?;SoU z!CNrM;Vm7M=v_J}#hbUDPGJO}0UAi}*O*u*77mYFb}UpJfNFdb>nuNSq)#Wi4e2A- zoV>tC+Qchj1N)8BuP|t1uCQoH%*P#Be&{N=3YWl9exKO5WexeEP9lQR?utSvaJGjc zI0B&|eDd^-hgg7ru#2ZL4ukcuo8F=G%gM|jP}lo~wH2|t(x-Y=rdm~Ii`C{gQ>W8$ ze3kv@iUEd&iQ32*OfNuQc+b?}-Kcw0F}oPo1c~Vt3-C2Q5Ug^25TNs-7+d$mXIf;s3kuw{ai;E@mtu!OZBRdB z2c8G}hC|J|mb3~->Ku+0+mILO@VBUU#mQLjz>1S`-u#M_N#3CqC+*&u6({4p3()I1 zR@?=D6(wvkD%!rhqN*d$I7WK+fn%na7+cOVyj%KxCY}T>?J{hU$dkKujtx^(<9-@wU-ag-EvT>WBO|ckpBCQt=0S{PaNY`Yg77}x=0eYA z7VoBiM3!nyYZwddF(t|VvSZXUR~4%xLKawseLrGciTp$_?zm$!{AL6oiv~o<`I=b8 z+d2JK3(n8rTN_%FkUlh&P#TNd)NEncgpAs+9t=Jb(wj`>q#tF|@Jah59 zh39cRC*Vf!`a|xZ$*H9<1F9sZbL+kZC+khY?~dt|If-JA-Q|45zw8HF}YtNtOxPq*yH$mM*pv2{0}-gnX^MjDa^Kmi0nb zlk4PkFmIttMty64V60>P0U$ap2u;3(+cl=4d8;>tE)~`g5VEtUAbElXGLXQ=@5kMawdrD?cW}lfO2V>JC3kAsRz%ZklVAgR0?hs)kdk8s19P@HSLK zA%M-RA_*7ry88-$L7jYuzoa-;tia291Fw^1&tjEfKeFL=%#qN5VT&N!_fzoi@WHJI zwX$BVTfamz0Nr<}EP%-?i$`yRM%7>E1cp!%>fboDW&;f5sExB}F;FMT`XSxM3ys%i z`&h_BF1R(P3G1zB`-ZE=>HQ5xZ+}C!?{KIakN$OZ87=X+$PNKULs&$&JwnOA3Io;w z`1pu)aYXjmXrC6-I#A6A2$p-@@W*!LgvH#1 zeA0432ssbovGpGdY>QrIAjTxZEEO53UPie}O&D1PCO+s>hX(327TE06~tz*?p7a$;UX4nj=pv4xgk zFo0c;>}88Sf>8$}w2)J$^i1%YdfI$Nkw_nF6=^3qDE=PhrESzL)A!5y8tHlB?N9NB zKZG$B@k)-O+^tUx{<01w4hmd{ra4bQq3>qul}^k|v#XoY4e^&9Q>Q|%g0GKFM{AGv zlcXdzpSiG4L!YDF8`>Y;9KNv6nLelcoa}zO{YhW)fX_-|0yul$XYYw)_nkNv*by2I zJ);3EszUaYy3oJ}dw$rnf6oVd4mjT4?s(y}4-RE{cxF zITa{Ew&9&1nmc)PVquBIAU0g zYbp>YfA0;X9>>Np#b_Tm9s09l<4OO|y+bYzGyV0k zp&0&JfLEbQIEL#IE*Ty&lw~c4!eBIv4&2#>p;~yMDb#z}6LjkgIl2-vdFKvf@~r6LaI;pcG-aLgy3v{d<)YpXok>ufmPW~W zqhlk|2Rd6(G!hhfh$7NW=ddIxkFno{IX<~y=H9%thBj+S5^Z=&`)1q_J zBO(=AqP-o(7xBiXIPR|w86A&R4@Ba$AE zvBOH&d(99w44B?)0ubX=95bd9kyzJXmfo4HaS~>OnY^turG@506Hd=~ujR}(uOoDW zV?&l|tfBdFYG|)xL#b*!=3j~hEss`g!6C}B!JfWhf7uxfJ+IYwXz!ma}_W5%@4$#+0(0QRPJ_zw7EfwqM9U)po>eZJ%NevmF z(Z6Cu9a@Sy)c3f*{GfuHn&#ocCYt^uLaVSJ0n4Ux0 zX~&D@4EcWIbh?Lm33*o_$D{!p8T6G*UxXN{*be&p6Td$CjD{`A0&=fbR%~2@4;`NX_%PmUqPQB1k}}YFu^3{)tHy$Lqz?LXMVq z5c?OxQOiEWg2%B*w0%837EED|7we3kgNWt< znwb#+T{O=j))^B{@YJR4?D4)TaRH zkPC()Ohc7vHP%Zh@PoghDDtKDWe4?+H*`&~^9~T4-%xp=%$_)P*vKc5$kmrf8hl)Rn!1fss>R5pc@Vga>!!# z-lIqk4j8v&Q=JW!qfsq~vr(|9;(}+CX1oS^OEy7!Io-38UJrXr36?++!j%o-kxjntxOGJ=08GSc6z){P zz9&4!Xh}KjHI#)ZNIJ^^p>!S(?y>&cnv}BcB+rKX_RuPJ@ZSz(u7>dFCSL*$0__NA zHL-h<-_xc9aDMc@`-5{(O@;g@HrACgDNic;?n4248f|vcrqUsz4D!;6mAh!{X0c^zMsLsx2I+c5=8pPrWLGvKUy z7>ayp?DZqhz^;wm)L zb5x`x4_D~nviYOnN}cLqDqWX%$ag4|h*~oVuah?aKSp~l! zI{WBJee5dsw&isp`~9~=xUff2EZQl46bT1;bJ*W*1ESiORdy5BUA2Y)sk4IcFwXd9 zIkhaOxEX}@bE)ssI`_vKAqwDy>7|gzPcOB3&FQ6foPn-k52E1EhBtaI-`8BXqN3bZ z)NA78o-jug6ng=|Kc%p=mnZi|Z%M(-;<@x)d~>g{<9Zg~+_QMT;=QF;){>IBy(W%Q zl!DuOjVbUJ_sX1xj#j?s;eB3luk5isVUkZk!ZF*|E32Tmv{zOp)I}GFaASun%AXgM z_F6D^{*0c5#gX@do^uK)45-Q)D`_j0v=tX~T8fF5(h`9uE0@#4=^|QYmfqZJsHZ1D z&!WQ5;2z3#OWuRytmC0$c9df&@r!PL5ZYe#OO9WLfjlD#SJ=hhqs}# zblw~y6rg8mp-4;ixHdR$E)`J@LHy)D*VE!(Pn&Qn5V#5iE7XJEM&NGy+oH@&gAVQIRgN@Ajh^A;C!@HAB*OT;GWnhgip- z>FJ$0WQ6Z1^c-r*Y#Np@&|vgHOrhc7zEG7&x)E!HZp2J%^MH;wo(F!`8$P90A4c;n z+-9eONf`1n6?<3MGz3N#3t!Yg`(BBp=23)3K!Nfio}~RXhz?2>X^|vaUt3Qg1TUA@ zu0fZHZUJ%+RZrnHQ1uu$$(m&1xuk>pi%6=$tJxSI%}T$z8^i}oCeq8Uamu36*gO=A zNKNVGO(lc0uZ;OkdqT6)`+Y$kOU>HpaiOmI=R!+XAioKXJ7O?>(Gwony@)VmM%dC? z8U^*oG5mGFI0u?7>vCA3PspXyV&|N^D!vJpGiRz}RS% zY2eeAWvZf1kx(KBp4vr)YSI=YjETWfO)EWgy?~)@o}j4x@)A}NmO{ocbyj)@2p6L& zY%$OZkehs#XB4uw>vfj=m;S+ z^yB`U%|Bp_-hdj4L1ftX*(_`g)7dG{PZX#jr^<6EXO1cCriO@$?R7xR55%RTJR=me z36t1E1LA<#Lj%PAa}{3E(D4B`6CN3O^sg4`1&SpLO`eIQmM=La0F33xd+>Xij(^*pyOLMHX_YlkTGp(##F+xSMXe4@C(tiw)Bql>>z} z4mt3Ple zdzB%$eBA^zXrC~L%n`nFSk-*0Zgd}Y*n1o1ayhINHdU3o$P)`Mz=eo=2=FM>k_yAO!ySm2|? z{kA?Z`mbQ~xesqywCmhR`0>K^hO=CG*uKIwBii+;NLaUUy(rrC!-(sNVoq7*cc6?0 zEGD>!0ZVjZx1%QOO&Z#C&IVM0#vJx85AW-Xg29X$l@zdmHV>M3`xou?L3o9lQq0S5 z+YP>sZb4Y&I-G$T19S@nI>@Xwuvb@|g|5Zp@CdSAKo)5z;y^xEPKQOUCUy@naI`V- zT@$?JO+@>3#BVqFrADRSR&pFgjtzV;0#@WI^OaeOS6QSKKyP57GF|Z~^OT$U*9@35 zxjw=9upa}TWHT2wG%7t;*ev*=5X12hzOzG}9p4ayDFN03Xf2$1ju7XHr)`*_h;Od4 z02&=jxc2}l_730c zv7`90eHdoFiFQBqr3*9N}_5nrKh_%i$eDL6FpQV*IVd28;|JkHnmwvkZ5sEb*u||^B z6$Ak*KNlI%ZT>&-0sUv2z*Lg3ib^Af+}TKBL!`lM#RVfdR>v*^ zD!#z9f;N1RCTg^I5FDh#HWHkQrjyz5_@ll|Ry7 z#K(sYNcNCb1N%G5W@tRK%|;^fj<8NxfTsl~+`ZVqG`P`H;Kgzz=Ig*%5&2`R@mKQ4 zgufZmAKj~rVEw_hNX922T~!|Th6M>>&s7tPZrXq-<-Ci}vlznTeq2nmj^Hg&Mc<@@ zj!&@mMi|rgfb1Sg1e&_X)3<<_N(zJd<}*70_(x7vC1I#~i2S`y{XN^t9l33G^E7rd zD5MV8>*BY`fios}$YDExFzQN?PlGVxj5Yw5jsBj62{wok)bGt zw7Sj%`uIIYm`p);oSUx?V#PXr3pNCjuwrps*ae*H$O(RE&W6^LG(T2^C^FKFj+n64 z&u+p{OpmVUF1W%z-An;}*qFk83r7;Va4nApqhZaNp4Uv1B<$7%oJcBEDENM;35H%l z!nX*T=)7}8--Bid=LlVWux*dMP{RbMtDmCT?uFtcT;i>%;V=YN5WEqO+WDe#{V6Y)>> zgeMKwv=>Qm1$i}*k(fcIqQnd%`~}4`3JuE4i*YeHS(=B9nLp!JLnNqT8z$l|6?Pm= z!m#W@Z_)gj5f_7ERbq}Dg_v&^R>{1Dieg8Upux83ScYO9T3G5WnZJba;|JSqur&=U zDTGJGnZd1A{+gjUCKTQ>yVP4)GP$te)(M5P$hSg?0m;_PnKMfYOF;(0KM2o>dBr7v z(EC&H?vBPS$p5_<)+0!})-n9sK#FqkN902s&j-O9yPzNHazsujv`RqC=0Ba;kAVlA z`<7u@^L@o$LyP}do=H?Vc*?Dct>Jiv5<9YZws&^H+}XDg2kA$whJ$U`?BX`oP&lTT zC{u+;@;Mh)mb_vten(kWBgJuGvR>$fcY{L2Su#f!&n#SwGDZ1n&LnzxMvOq5cElMK zihRH$vMdIn^a9qU6&lcx3K|k76waH!u&^aY3M;ZZI;=tI|1;`?b0BBzh=S6h?1BYX z4D2%~Mp3qc%+JAfgd!&3Hxqsn?9pDQz#qBygNuv2P!H5kuLcRjs37Vzl-d>hMQC}n z4ER|9KU9B|xM33uZsA!|SQ71l5=B|8#BwAu^C*9vWJ@({Hnf3Lg^ENTRiUWt=YTk{ zuq8uha>gpQ4^OtOIf65`7N&xYY4CN<(r~cpoTZ`S)cLBJ$g`Ge#WYbTdzuNtQ z;I8K1uZDjBMFUX$ezp7qNS^%-xi+#?Zx9M+A_tHY=V0%8RNKUM6M4HkD0c~(rg>N7 z=>SMsAufF!^h2feZPFVs-8&;wn=)8SI+17|dm1!~x#`L6a7v{erdJvW~-`MJHCXKLY!>zTvV^>llXi zBdRcH`nEALXfkb#Ob@V~Q`RK|ym4*x4|)_ARcoe=m_`I#YuGE#V=Oc|YlQDx*hK=+ z9N6cmGHrY#7O}7=FnA8x@u^{*j;+R51VLm#_5)%jO12kwQVXMaMoFHg@VmH)0Mkj?fx*kMS{ zgu3FQ=Wil(-2pU&_Hs^F0|YksS^$wX!gkjV_7}2WE#4=Ai+Ep2`2?ri$w{k@d|yk> zT*gu8j)v~@2wfOiI;yg4f?vg$TZOtuJEv!va2-*Ue{HvMFZ{DCTFl5Yr8kt>v|L+Y z&>avI%e7TaeA%Rp#u1p8dhqIeA2ZTUd=@;chc<69Z$SOQ>2Qc^AniDd4J|g6+n3S- z&6DHO&y-zT)#=(jAzYh;+Cb-MNa8_@>9GT+-py5|D(+1?Jr3;%4(3ZAChb`Iney!# zjkzdv))=sn==tyu`QWk_bpmpE0iT#Qc3?J?L1(gB{AuVkCEJo1LxYmI52;hDmu5g^>EfiM$BqE`? z8HuPe?FTeHXmz+2U9_uETU)ITriOc2akMpVlTsnYA>}i{9b6@WBNn(k8Gw$iI0GI9 z);ZeNzI(ZZrwbPp?(SP1hjaHrxKrDKWYIa7iD{`fHaO}XIL_qqy_$}&zJK9{aWs9~ zsA(q>!nkyA9XQ7iPmoUj&lrs)P`sc+6B`nNRMB=)8V&o`kl9b1@p;F5(`@clfx*+vi;xpjF-ALax4vhQnV29iYe12o6L( zvDc9z2var)m5yds^*^%A&^!>W1>eA~*u+seD(?d(RAv8SNUB`Gf{&t%>?SQ^bQi;T zC#j`DK5ts~)4~HLs{1gblr}j`#I9p0A@z#$sO?4n&P8CP!nvx2vp_?_R{pS6ixSp)^tNMKs!n+QU{O? zvYL38V6C%dAQn}l^P8$VUC)d68W&5IBwul+70GK*Js=*+26K|Jt|=?^)$rE3QeVeO z9xO?2fXqB@6%;&W?>>V2Kpby$6Eg9TyJ^BgUpE}&rHekbW5zmYx;n0?K3cEF8hv=v ze(Y<5>`xf!bK`v@n#=gt$@;##_OKeNWLTq%x`XDpLG{MHK_2dBov1`p-wAmN?HGh2 zy&Z5NpgXNyhQfNTrmP9zRva|zI4_3H6uz#>+i((&p$g9|Kf)K_Y^*khAj;kBy&a}6fL)o!5V5!@Nx{9u|GyDcp0Wk5aTkU4Xr&o(H!Wh z3D-c!I$2{8&cG%v5VW%}rYTTqjtL3Bix2cckEu<|c4~Qcu&HMi7k|K#X2`tBkfBuI zXp0?Z(%=t*yL>5K;#ajT^2{0Gm;_hOAI{`1NCeqBP!^lMR=$K?_13m%S%Ar>x>9B>CyUQZ;`vMXt3{>}pa+V9VXHupUQ!f= zbSv^qk|W07w6^{wXb_s6a#8TczKpW7t!lXXMi|WFvMiYPKoL{*N-Gt2o{!6Go6)&p zpot+fZ7Ni~P2Y|U37N;9){au~>|n^$i)S5s2Bo=zdr`dEjt!5KXOu#8WK*z&Oc}#I z!J>Cn)oWw^31f?M+L~HhP-|T#(Pf_ET?6QX&PrE8-*PbU0)G>v1aB zAeXigKqeHhQGIHt8ib3KIgy`X8ehx$z!q-c3MGx#%bZPMydss!j=;+LiZrDQWFu=$ zlx<+u1pnX+td*013bi% zyTA7HiOf0VyaH;9mw^G$ z(oe53NEL+*IH9i{50t9%2NP-x+f6iZHl<-CYvQ*>W1eu9{X@7#n&g`Gn}mNt>p6TLebiC3 z50TjY(b%zS#i_3{O<^A)$&o6yN=M#6rW)D#?QgI!XO{;G+2 zqaz5lir^9+!CgE8K|S(qkri!-O&XwYBx9xwUqcK!5B*!y6hasGFgQB*{x#u`z~TnOceE^|BCS5BC)?4jXj$8k3=J{(~&<$ z+pV-7#+b__~dMIjX^55>>xI!MWv!`9quAyc>WwQ$W-j6R6LKx z??_2{rBx*PJd$@G`ki|42D}ib;-Mr=j%lGmGAb2o*y!j8T=2(JF@{pnyq!{U1CKyd zhO_fxij1M;tQey6;=97AR4i!~$-_L7lMl9}Vm0*(Mmq)+>a-gDePheJhFA254Z@eE zqEoSHnI-^!?WcxQ%Kln@cQ5aMfQkFjJ07iC_B$(Wz(egGIvitmGp@<7tyKAlvZZf= zX!JBLr!D<#^w?$vgr^7|@)CsyqeJOK;^uYBhNHuI_CSt_cNd(GGG6W<_hR4zBk4wk zowR52-Vw<$1)S(G&kDmy)yow>492@Q=m=#CXF`(>cgLN_)GxQkR3Gb~=$UJAgyCV# z*!;K?)n~=c_Wek93`c}979hX17(6aIw>$A|6M4siCl<15*<~0FBJGl&Qs>fm8qPU3 z^2;)~1av&c4{}VPj|H)>q6OivDQb+I1p#>Rhrx1Jj5eX*ZzGm0S>|!PV}Q7{KZcg| z?0(FD3Ei295ZCa@G^WVm;Su)mGc94w2+PkY4~KF6F5GP zRas1{*dUT&A|`YL6SlG{qzeV!L@CGohWxkqb;57Rg6xirw)Av!nr6Ko{EcUf7n6aO zjG=i;Yxn6G#7DbRdB#)n zC0p8Q67Ix-Hdfu=Q268bGCTl$m~)6`UDO%S%mbBLe3z+KSmC;rIonbfEC}6X{5i#fE^P^mMq&Yd+`iQT7#<{vwo} z`Q==c86kJA6SqFv`v>q&#DN=feI>%zd@4f;QPQ|oQ&gnw&lH^61Mu;RSP^0VMj-4#KuzZyUCH9=Pd`!wel7&Mc8Jm5hmGj3Wa%ALcr>SO&eNlW`3heaPrZ#${w&L`G*a zsEuUFWF(LgLk6vUvM>rKqq`v4uVm02#*FT1W8abSH5s3i@d+7w$#{>>Dz^AcJ&{vVCOm`?I&xTP+#ylJN!^uaU8yjDM2x3>kF)6nl(}hsn5~ zj4Co#lHn&~DH%)1@RBi~4AMEu3dx}Rj@b2NOd?}E8Dq#8PR0;229wdBjJ{-$E)CY5 zj5IPXB!l$GGdCGdGUCXvkfD;%+zjIc8Ar+Zkqk!0w`6=t#;0U_NX7?b>>y(+8P#OG zNyY{;ULxapGU&c1euq4JoZi-u@cT#7=IU$JlQB3G>cM|& zr#HydRsO&BU~L)w5e7SDr(0Udjx3Spk@{gdTuhY zZLDiNTP{8hYQs`xxIFoxaqNfQ`fx3$kxYO#Z!2mUl-uMrnH;{f1NN^LKM);zVr zu82Gr>7BrKVmgMCvwi(bQx$LDIX3j``)P&-Wjod0i)q86Auz;*qcdx7BD5-fyXiG# z$rX1VZNzl85ppkZnbR5(qT%wEMOuxr_DJUc}5 zUC1y%pOvcX0f-1 z9af1*YY16Zby%62F+}^6M1c?ZexYqA;SY;bn|S3kK;Ii3Z84?q@HM8}d=RJ&Af;4} ze>a_B^9VE~kTu&!T*AGp7i69#|D07&GLsG&L`0bBNW&q>PfHPIdPTiZj!;;4Yx!p! z1DRcX3lF&|DMNuKABCU{Nv}9%a$%-ojGH*rw_xt<88}N)N@bB_>;jjVnZ5-hZz-N% zQb=!^GiDSn@Y?X^DJhv>VwWP?6PGL~#Bm7-@Dr}si9=_X6wdI@o?pySkuetz@xw~y z&l`dxB*n!b%1U3J;+bdRcva9dxnQ<;LSdB=hEi;+gY{3ujsvm2lb;7L|+~moC3_;9VCLMpXXBd-UzSe4gRfL2L|~Jutiek{mw{(_ zju2B=g7X%XX8t4A($NR{8DfWlyE8ep;;@LYBTx@HoH{JLF~$?euj`_}Sw z(vT!(7*6`=q!b~kbY#OajCe|iY954*6E@aix!wY=j~5(+@-fI6sx*e10kg3UuPA5p zGKxKyD$jxzdHjiLgo3D5TN)CnD5l)PxwGh4$7P&i{XEopy(z>S>+i-#+@u8K>_~K> z$2YGk0CRyOq5WA|O66r_@vQm882+Qo5o98$b(kn`A}1-s4HleD;b(t%E-Fgu#X8SL z_`5F=-(#fxqkx3`Kgq{Vmu4!Bi;&O%;e)(YoH9o_;+85IQFfh_KtmZ=PZ{YVK* z0m5}3ZqEo27Gz0c+ zeyyse1!dEKwK)Ia96olpttA+C)~xTy){mrV2+4o2UUMt&``3& zXcQoWOTw7HcB9!f9npn0Ba9F+L}V2s>}o~%X^xvd46v)uu&Lk-w>AeBI78O@3@7|r)I-(;S1rQI=F=7B-{Ytal)n2tA42!j=Z;ER z?i048z}^>2$m%?&)KEE0CA5gg83TMI;_gkRPi*4w&oIAX)39D$>G__c7)8Q$-Yznu zZP;!(-J|?qdbzE{!cq3_UTzEIAJlM83db@ap7AlWmU00{a#uno@tGPGEk-_5DFp8@xNQ){5XTB=Yr8>%u3GHq8nADCN=`fM z;x0zi49ehc&{XF?t(0Ac9lJWpz@FF~`2_W&Co&ml>|=EMGc)G{@bKpzsajDkD%^#Fj9Re7~07syKh)L4xbq zHDCvo=I2mrHRJINJ60sXT1e_H1~XGw3D$+7Xu=5=(t*BG?2d)5WYb}b)BEYihuaNa zb9kH+Vt3HGIow%s3o^&Z22m&@9Znkt{9#YiSV!f2yhvI*>5MO0js!_dXHD=IFVJG| zj3+1+Y{edo;03fz(?kh%C#ifi^766fCPW^?mczBqa~k^=Gl&{oG~+o<;*Mzh=`z7cd#;tg7TLd}Xnd(j zM(L?zYi|sP(H3&i=ZEl4r=El`;Kj4f5(Y$jo)25zo)0rI@-G|o+wdwI^lyP4Nu)G} z%~Q}P)T|C)vRdx943+yY0v2UdVC!h%ci5epc9$uwCVa_m={{G&rzEV9;op+qjqxmIQc;soZKJkLLxL$ZnEhPUeuU^Rn?qHT%J5iX~$9^foEnY zqb8{l{R#>{q^_|RfK{FFB~6^>oC)KLo&sBgPh!qXd2k7RtzJ#`kC8p?X>fb`T8(h~ zCGFc}njeecSwsFO>;CDB{5MN~I($`r+a(^SggFvcOZVsHcZ2-a_w1gQ-x<>VDfzAM z)w!hoObMBEA0xkuBwQ)&d&}?L^80i7{h<6_A-@#~J4yJwbYCOkE@}UvgsUZ-DB&6j z8zf{B9+A-G6?>9)37e$7OMcrVOqCGI4f)=tlf&h;N5FW9+_=yIOk|b#z#1m$gLbal zg{3*XnAX*b7u&jRcv)UcUPZl|PU{{n|KOYW*eq@>!5qFfLhiIE-hhE0!CxdiD&a8+ z8zuZz!s8O2kg!R@lMmy4@r1f!tW&fUP2~e zP{JQ13`uxI!XG94Ny48c+%4fA3HM64Pr?r+{7Ax&CHzFf{StmE;b#&aknnQ}zmV`t z3BQuCTEfi|ZjrD?!deNpN?0dhy@cB&+%Dk`33p1kOTzagd|$#3BwR1yOA@{;;VTlp zD&cDqZjf-JgqtLMT|yFRr+lS5)d{{O;oB0vBjLLeJ|*E=3I8hLItiba@NW`6BjMjA zd{)ALNcfzD|CI1~315)#UlP73;c5x*lkk2CACT}t2_KU1FA_d1;Tj1ak?>Io|3|{d zBz#=LCnS7Q!U_qOOL&Kbe!#GKCOGKp=pS4JsCbjs63k&PzP+=KK5B@^D`c2T3GbBf zE(upk7?5z4gqnnROIRi0Jrdq4;Q|T&EMbX+r4o82^hvl-!bK7;mT-xLw@G-rgk=(z zOSn|RWfI;bVS$7AzHnuOO&I9 z_ymVDF)7)V=uT;u+P*`_PMt5fuuIpAE>64T(#yJa?S6TWp1rQPviD_)=lk_JpTqyP z{Z)Mtv|r-Y*Ie6wz`*|iOZp)B8+^WB;-9Wd%*Y&)HPka~_=v=jqehR(9y=~){DjG?O@cvAu5ym`jV{K$`JD2#lGm&C+bZEVi|Oia9`C_jJpob#mN*2KiQ zX9qfmP2#-bi0%ByTg%IWKbMqxeG3;|cG+TXx#YInIV>yB&tJN%B7gZE{uP&9R(a=L zD+ApAJoNnk%z9N@dbGRS+VJnHbJ|MFdw7DSk(hXI^yh!y|I2~@a^Sxl_%8?k%YpxL z;J+OBF9-h1f&Ud8Sbg9Bie#QQk>{Hp{x7k=|9?q3&zH>mu>zuWQF<#-cB|ZkJ0R%y zl(HUDH@lSrr9ttl^!HE8a~6X2hB1~*%d3{DmJNnyVDqj)xL<3z&r$&Y^fwD{?uVPgVrT#x$eWN9!v-P!H}Ww+%p!hU8T`JPM}l5q9l@%YuJB^3ClyE2uKi?BB- ztAMX6d8DCM-LAe6_m%rTTdi8F;>=<4K5Gr$^gmzHO^(IRM-#WeMoWGwPPeaBU$&kx zjds+kFIZ0`)T()oE8`wXtW`~>ZcfEaf3@m3qhel}{1{@YOrmfrHE(qKO{98zcS5r{L5&zjW+f)mKejP5@*kp%M9f1G^QG+ zrj$7EbS^f$Y4jV~IX{fK%=(on9RIf20{{Efr{ceMmN-Lk%?A43Vf-p7Hlf71+VGs+ zg7nQzaGA1_OPsGdE_Ut&eJ?t%aEwU#%9QS~^3f zF@FG-@uqipJmf#!`mSlX@oOvMK>jUG9&Y?dV*6A4!*NsWhfTxHzq$@{yBA|A#N|$> zvsV2z5@&yuqOI!4_=Kc?rPQi*>HvJ#s@w2%cRI~B)rPlOpqc*eGlvt)t%psAO^-SL zWD_MtF|Xj|<0bR5lsDZ++<#5E6W^a0sdUw-}W<8|bp2?p(^hM6H<F>?t zQngSWYpXDR=)S?W)!iwkN6Zk@KN6ow=oPysd7W#WOEKSVz1wzs@(anuu1RXGtI3vW zw#C`v*4rM4skYhFSalanmzw%-{zidEkH-+F=x;Edc!anX(5?>Pb~ZH?CDVl`lmFf8 z(tTfxZ~eVB9HM@J*lns)Vi2w|t-e}^ps&~CFN@7Ici}iM1{L4fQvXc|(AMVfuaj!fZL|tho|L_axBWI(zn@E zV-|mu$7@afO!I8rOr}^-qHOA=Q9S9G(h^hKxAx#@a!Tje`gm*1;8@WPP(0Viw$!P6 zVt?f2zQuK`dI8FFHz#51h%yfzr`(4e8DP%f@zT3Z74P&WC~s@_H|W%~b!q)gZRrb~ zg4Xuu|Efov^p^_SsJ^^{(4T=f#Meso5vyPA8fnQ5aX%$*OsGy+u6B+Sd{40aXlNhz zuw|{~f6#&}=HAxp;CpghqYSeoZYXb+0&$}f51X{)YF;aM!SyBUw=nBf(cYWv7uv71 zUuQ3}6BWbl4*T%9JMcbRrp4;~&2+Ex3Hyttwd%Eo8Z+hc=l0`~KCnQca7}1|&Y4o! zzQ;McO|`}U{$FbR@Bc;Puj4p%o9?_fJ7IZEy*%Dvydz$>Cpa~}%J_3szI0EZoDzSR z@%FmfMEv_QUQ3>7Mek|b5nCO*+-%^zjqbBn4J4JC^|8b3_>beCMSE9;)NNItQlC}L zj#9@6@H^YMB)$%R;#RqyHk2h(|5vNN7PB6;>2l{` z)A#uL$r0nahu5TZr*L=KMmw)}YOVm%L*34Yi8}5lox_X<^yandKde6VwMmIIe(IAr zE%9*doJ5>5YD1w&f0AvR^EQq{d|#J%SHii|Ozt+@Z3$}mR9dHQZl zTx-@t)41h=q$`rz#;bpm|2W(2G5R+_$^qiO!==ewiFQ@YYY?VZeJFkM&{$=fC`v{=~U3#vz4j=tB8uiO&d&Iog>2M7-e}-BfNWLlNkqEuzyx#vKX=~D9 z(^9;DlynMj(HPGEUaQ6?pU*YZ{1=y1?aW(gL91?xc1I5<>a{Rq;`SlG&+~U4n#lK7 zbwi|l=y-LgW83^Y;i)7NmMiUgD1tQJ>wuC?e_xoH{qp2n5(eTs+E2^7o~N1Sqpk8( zkN^7QyW^_xmy@zH!m~28Ub_3aq2BVG+Z8mUP1!0b+G?8gZ?K(>g+{V1f8Ct*;KbL- zZ$@!b^tR_S+w<|qYB}P0Hs(xn4#q(qIo?ab2t*G#T8>{@I7Z{WReYQw{G_I2nn$#$ zy;N7~&^pJvw^%O3I5t!HLfK~-;?8w&bUWBCaKFa?#5g+-b0RJIk(55>GFL_Nsz?qh z=6Ny8t*=FDQ*`RYJ8>61Qp$(m#eecg;hwi1I!FBx`SpTh2`|x9?!ExsjVY~5@44gB zc%O1K-WKU0$fhAa>%6oX(WB=ZcG*)BW~RJrueXmfZc~4=Zj)us)Q<8lxz#ANV~R7y z!T)S(`;?)P5@1u4q`xG|i&%W$5+^XEq!h)`h_&sXUVhFErzV}-o^0EvB&E1oQAQ)$ z7XK+J$%s#X; zk%X<7SGM&bzFUvl&h4kQ?R|XA(c11@UtyFWYUSGUJo@`BjI~}&Z260Jqjyn1&Sxs- z-yfZJi02DRzhiVp9c_mvCCT01o#=MQM}BU1`}XbK?wIrbQrt z!l|>n9ey3$sU57Y_G*XJ4(%O|RI}Ti>aZp|9FFrv-(FI6zR2509NdWpLx&FSI<)yA zZLNMONs&*KYyQzXM0@>{oasGA{DF`T6q&(bHWN{X)Kub${IcOI#@zbPYLAUISmn%mlX0_{nbqLEyc&n9rvD;hw>fokeu%#dQZwF>N=tcfwg##!t#Kyu$8=4|i z>HZCFyPf~*76?dG7!W^M;{pTubg7h(lxDIZ1AKw;2REg;bz)5?lMMIz&GaOPa*w!#f87L@a7!EURy9nW8f zqeDBZ8*xjV6ec=%c+R*DBGn)k1cG3cWi$YhUm{uo{sT;OyOPlkxSbJKcjpLs;>FUAma6!O%PW2*}2ILJ#{*aAf!n24;dj90uYA8L^rAJ6VbF7$cnskud#NW zK~!7tLpDfUtcU?E5LP5nu<$3#mtJ2i`U|foWLVHV z84P6ajxl%O7~|qZEfRjI>d`+c8Gngy;RsrN z!GB8acVQl0sn*Qn&ELBc0*)aVtZ(5y2a5d2M` zUj!dj?}%s4f8K=(cM6DT_)pIxDzGi@c#DgRLwlmh$|k0OwK$3@u7vjbh5kZh#7o8qD; znQA}%aa0zI+oEG57)ObYL<{sPs!C#_)2W971e0UT#A?(^3WIJ}{PW7#o<5>~pjPzT zQ790-?8|w%q#))Fgp&U#eo8!Wb0W#$?GJC{FsO~#${G)kEiqDPG!NoO*7DUZ8ddSt zI-{wy@tV(xLUJTT;P!fI#E7B;&lK3p+@VjmTg4cRY68WEQ3qZ{(Ss-6ep9)kIxG`} zNtdVu24M#i;?$8u(F^xW1`Yl?SgZ*;^Yk{(;Q);(Nrpt;LU$nMS*&PbkUX9#0)Z?` z6n|=}MHXO?i28({GwLVMB2c6=hNBy}qsAz_3i2?mYJ!ExC7Kfjjl7oO6Z=Rl)j)5D zMTLxt*lNWHQhdwYj{s_ssQqa5XW>mM8KP~a3PkNMZ-XNZF}i4~PLw;blqJLs2?S%f zNzoGFx)pu%79q;u1yL_SD3Lsf9sp2{ddDlF;MJW6A>{ZG`&*hK_|p4h8uW_r6o?ls zZqi!>Z>&HfO@pO{spN%P7YZDeC4$;m-aa7|9_*yg8m7sRxe1c4%Y z16?wUDCdYuPQTTP_Alxe)$`EACq*FPCQn4<8|d`rSL7Y=Ap*`XgMk-NsxVZt=%?4s zmN!&|B$}^9*Ct@6+_tyWVE#tK8-Yfag$VCC1Nq?a|FHM&fl(FLANcGe$tG;r1%gJU zHEL9zHW)-SC`n)=Ac05{9wKTASpfsYWS2)J5L{AOuklN*e!o<0i>+2$X{E&)K&*k# z07^9=VtA-g(cZ9BBSwgjW`CbEGxzS^-8``L_xtDPP41p~oH=vm%$YOKd#?~F|J8Yn z>w8h0KJ*g3o`~a;;MFH_#Rv-77zsdhBrDQ1DK!#if1WEPM{3-h5N8zq1c$=##9{z% zytpBv9~m5*9Ge{CmeawEhf9%rDC^i*8rOod{o;!+Nxt;ri_P5jqQPn@FO?2CM%Hxz zBzP0S^np_oKM^X4M~88T;Z1)%3?B!U+xq?T6P4Hiy%%Vpz0OrVL9LkRg5pSmtYYjDNc~3EJ8eU0bWY83L5axB>^7{0aXO@U*0B3j6{owQO>+MQizGS4C9CZ zT^r?!f6A3#GCka63dKKC^Ee^{syZ^!7Z)!KU%a4<37LL@%pFu*ZD>ylLhR{P&1r_} zJ*@1aacNm_4&X_Unx#uxLjV*RYuy+5L@VHFwI7~g*iRqGCd><-X;BFme#CSMeTu$x z5R(jC-3&?x&q(6~b)xBnmLfFF`iH5<~F;Hxip?o^G!Vy|16xm9@h~#8Jm}m?7QUr)5bPTaIW^M9}x5vH`p{e-OGv?P9dfmmD~0{=;hMQylt^OfIv)}b#m0q+i~Qz`sZO*s6oAzi!^ODN%odaO;He3RrA+eSQ^Y0p zH<>OnnJy-@WZZZXm7M<{Ujt0^^y~i%nL14LNG%A{Q?=ru+7wf~=|^e95q5pLX$0kY z1N~g^HS$K2Y19Q%>6ySyHv=a_#~UrgcFW}^)2(9=nyJTp@AzH<-%H?o34AYs?(q|e167U>t_?3XCYQrxhy;7vF43CcBCz9ike;uCE?db|(hg^|qHnG~s zplB30h4RFyZwRoo~1%GLH z6KPjhrYX-f$#k!dQEIBx-6G9qwhm82b(KCke3Pjb*bSzp?~tY?3il}rG1IrR7~^i1 z!rfYaU6naa$I8@QS{kiwb(L1chsTDyLsYtVIoV%Wp7~yLskzd;&b-0A$z0nBCtcCl z!WuYs6MkEw)8VcConM`E>I8lYPm`vn%!DgX_l2n4YuU<5EtQsadfW!?+JxU)J&aO^ zt_Jw%W~|8&9>R!rwMfj)IgZ5NijQ7IhB3C0IeBPGCvoA}H7qR(L(4b1^-}$BVVPkm zG+aT`=*tVk3(vEA_r2EAuymEybz#2fl%X6$u4pVRWP^1Rr&eoiur^s+aC+VulS1DH z?&j*AZW^Ad?Iy8|%8R-8Jg@|EUQDS0cPpzj_`A!^%+|$hh;1TO0j`g~xL@-XIzg7NRc<7MX7G zN>YJ1{Q67MM_k6=0qVFpW3)Mx%`LYM>^CMUDHFNG4a~}xy+C+8-tXB5IbIzemeBW> zTeWZ_E2dCHC_#w5zM(*4x-cJoze!x7K1oleMF|Kg$pAty#*t5xBFnjLym&$BHT(^w zj9yWCt^SVEfg+`ziOEoTVRVM}EBf)AF>{OE_a)7nzaaDel7)+gEiQc^i{2P2Xo%ll zc602&F_~GheM!2R0u0Nd12A-IE4D9P*9^qf@5f{40?t6YeMI!bE~Z{Y5$}!Fb0)tT z6bb4VeMp&K_X%LO^u4;D3@v|3USB$U z(Spfdx(x47T~V=e)u>+SmG;#m5^ti6h>=iLhcjs`8bh{Ptd>smGZ~=!xn%k!g^A1F zD}4mo0yLptSZ-95P$EWqi2ag6YRbJ~@u3*OOSoTdL55+6zY>@jHno^csa@%;_Vp9Vm@Ns5~%T!~BmZkA^V=XDB|@@Ih2ZA_Jj&;21KL zvWzvy%0R6=Av#7^cJ*UC0lh?-8)UO(Sauk}h?b_2>pN%eykYiH;4h3^$Y`{@5k>;e zmNC+wDWFY4e2a=-NfIVYI6%S_39po}LDFfGP?d0#gtZdxkuXiBOOBBlLf52L;4G(f0}@6>ty(F39pwhJ@fI@3HaYRX29+T@V|XbA-~>}@H1JS!?Jvz zN`JGA|NEGi{y^6WS6OySbG;f z(?-_7I6yLd` zvKZgFpDeMa*9L}eGR>-6eJ+R+E$yo%NVc9E8sm7pHqaa217D3V^hp1#y8LNMqoXE$ zbq7x{KueHD2xYdR77x)Ju*rl^AK|k~IWnmpgKwQ_-+c#B-@#X6q#vm3f-xnKL*2SdQO1^kOkqRueL6GTD%>xg z6YeIs8)bMS+)TO~;LbcNaQ47mD#L3jyiJ5}fqRX_*#!5C()}XbjS^=A+yyf2dbpi3 zd>!1+$ndprH%NCS+ykY18QdeJyAkE74Cyug`2^>uSU4r@g<*SuL^e?+yiBJE8Go#72z##r%3lnxc6-q z;VRsozXvzse22x$~opJawRU3T+ItBjTwt`7Ti|(6R zJjV%1T5!{Mk?A66laP;8X?UeYnqzV%7cDF{^N(Fp1Og_FoiNU8W*j2dc`WYZ4{Vv~j-MBuR_2#Kf_&o-#AnwG4 z5G^1+2j8)!g7fe1CbDOc6@7nqCm{cLItv#zrw{9iyb!rzzhil>GDJ_&y( z;lCuj7DXcbMG|6poy*%>bYF4#HSAt+tAFv8n53`xZUS!Dhh48_RHo?fzeb>;uXrk( zU2iarCI&QhL6F8q6_Q`{E*!DaexvkC;Z?G3pp?VbLT-+5O3>pjsL0ZA0T`%2`rs!9RJu&dMcPGiZez=kJQ2x5 zwbBI(-I2MOm4Hkyoec3JzHA#=kw(#)*==kiq(Jfv*B((hol@w$UNcz}X*9^7?f(Y_ zVB7}8g|!i~3*r;G4*BJ2fI`pwl5)(ln7QWidZ)x-R~87Nf8GgxkC|4`g@yUGhguv)NGKGysNdA2pYd z?TZn%n*wY(xy9w>FhH=u+DFUnIpd22=_9+>46KT+8O*%lG(@ zJelo2nS4hqfj(e9=YIOSH-)0yv?h5`PS%_Uy!b|YC+XM~C>&YY0twek*dU=}gNUCY z;foS}BVqotBK~;^J0zU<8xj5%AX)EIfD`br_kgR!?gk~16mnfa3-XCRz z%{CH1$OsG5W63SQkCbg3yBA5~$Cecrd5UuuLec4RGD|n9E*kx#Oi0w4RmQ&p&qlGP z5Dk3PS6SHipe8(ev&m-HcpHX9q^Ur))m&;3@e8_5_mK z1?!0Hn)`^HBl*u`12Nq=FG8KN5=k$YZ3n#s!5HbH5C}fqZ4?N%J7y-TLaMJl%b>hw zb~m#wf;rVIC`2!bS-YXfnR05C)D`uq?9mW)$S_1birWYwc13X}voF^9?SW#a((H=x z0@eb;&hY9EaT_HI)+z1t6UrP`@Lh5;s`dG0aV;Z57d;R%G#E2ZJCGf8q7TY0DlgXC zIeH^BX&PTe;HNXPueO54qM>NLRzySOy}e0}KGK*KN%~DKnqOW##p?;Pk6JU>GlZ1O$zEy~5fXQA1Bb)9wgry^URf?2qsYF9SK4>p0mT5ymmpT?8p$ zB=D}LpsZ+4vFv_2$uC~-k3b;rdC{M8V)$7m{WB!I8<6_hb<_uAfoT`+@6yi_T{G+J zf<5;xgl*RKOy(8WNfhxUlrMTLL)7T9{m#huDCu`fco87+-G=J?&-osp^9^;J;+~3$ zP^hIa$}_H86ynmuCD~O;8YI8GP{gnFH%j;+;Dwi?zg~{X^Goz9puFNbk0Q3ZXB@mf z`hu|zHcI~!5m#T!uU;kGQZP;-M#98S$c#&%305w1nA!7tUut z*Mvn&ic03sol>exm@&#LuCpj&st3kTO8zw6Ncz1fN2?4!3wYst_jgTRi~()Ar_4Ji z)I2FK=tgHz#8wZSGxnn7RpWiYAF|jcg#AN?9|cT7BH zA}&Ocy0SlcFHwO**Q4;y!0nac4+5qj`h4qY{Ue#Yp0s(Epo|$P^^&}vcuO9;crLFe zGUvU}a8L}~vQtGKXmg<;Vxk8|*Gj%5m+VF9Unk-J0$w3JjsCPYxc<4z%8zny) zpKa3LB;n_P#AhQ)d?EU&k5NF2@&KQD5b-dH=hwA056=+UM^}v zXgKrd7Bfb9KtDr4#6%B_4wU;x8lU5&KTX1sfEUhZyh~F~q7R#-c`5rIIAm;}9>`CcADB%&n3+FS@h0#4ssOUQ>k2qrxvC%!FU~rk-r`33UM*1ry{3&1xA}`F2 zI$c?F=3vo%+Wf^OMYN92D4)2fVB)5Gi#ky5J!|}qm;N*fM*?0rzX`6qG8n0n;`?Bx z80CSsr3VoY-E)akD3TwI&sOPgl<-5q3+J=9i?8`;)(M$WKA6`Sf{B-&_^p)t_!_^@ zNdH<19|OE_e&b1JJ!Oka#u9zlRn1G;_rxMg-IArT$Kg2XA1dMXfd7qlHLa*@evurL zQXXhm;X%YkkL{{K@}x1`BK?gLehB#A;5Dyoap~0JqPbHRl`N+`z-xFAvC$*1E4CWt zx5P&A0gq*fEUg$j8l0z z%qy%_P7zGOTt@kj%`yfPH{El5O!B4a0((vHe_V#20K9O1d%LoJjK!WJEcVFZKjj1Y z8iI+J?zzSKpX5*Dca!u#A>mVi{|$aI;CE9etMN`X&irCtNEW2AOVD>kR`aD|t zlO((p@WOe&6pO%;#e8pR>0%5dwNnmYkMfM`28DR+sUQa>zgiu%N&hhkKLNaO9dV!> zo(T&}ONwb93TB#7KA2w^gNd2$RfespHOl=(>3>wh#{vHv{7(7tg5o)zar4Vd7nc*i zln?kd1`{(q@Y@8GJ}CuRWo1RnM@OtYU8fyuywwTu4_KdtUBqCJV64C-C)PJpci;?U zazW1GvV}#S{9=y>XC=z7D{z$+(ZLonb|&1kGs!P(Ug{om9I(UzAX)^bD04i5rnueZ z#W<{yf^+?JfYNM3AO@smGK?59$0E$N2rH~&jg@T#ABp{Lj%4KK;c398lQ_fzv4RAR zUEp5d39fZ#=XBGlBIAs7)4ISN(FyKd!0poszc-M`QotaIn_%RU3x%P~&metoM?`V= zA#I}M34oVbD?3SzWI%_E2vR--i8q2NfG>h}D&RrD0zigL)&L9z+yFQOa62I3?*U{N zNe{Wry~ldX%8D1wSuPF&nAs~@t?DsCO+*Y%R57ztOEa!`&isW%CFN!|38`W!E^!== z2jv%+7L^sjf{O^Q4~Yfy7e+=T@D#Ko7?y(gr1F~``SW0(h@Qp)ML8*|_oT&(?u(2e zA(`!zO;)Z}8cIPz6XAJ=a1x@-gc5~kl0s2DlkgZ#(lQb3sAnEE1(aVCzDN`vqg97F zQ5I*pOrq6~*)9sBg=_W2Tbej%M$)Y%miiRTTkI__S~NFIUKF{LBAv22!s7NJZWqN} zQm_;&aQDsk%q%V{8w-=^En7Z){-U{ymx_9=C#1y5#rILwhD(Ap#+)>nEJexupA^p( z=KzHPz!5DL|HLf)AQ={UpleX{_||C=fhK+=GghRg_8+g_8HvJAIT?;30_{1FkEgX6 zK0DKMu;tw+j=R93P?3cB5l8#PVPAPFl3SXjdbC^1%_DChb44mKQNqY}N^wXrPT=2o zzWAH0X5RG4R8do0gY=Hx6KIOY=Q#Px7tPsq4NTe8N1YG;&kv4Hdgi0)O%Ggh%b3Xg ztssN^cOiXJuRI)`0R>WlMg$=I7(nk{1)*?i4E&;k)gqQIvvqPYooA$hD}|eFGQl{r zJTir_*sM98`Ae{EM_9bM^~Uy>x2zm9AAV+2Gt$rP7F0QD{OsA2#VBm23|9fiBRu@< z=CS|D?Dp(t+@3K``Wm$<2DBiN*$Wi#uP(&9zhhB3a19FAimd74=mSn8C!yW|Gcvja*pe)fF%5`PDP<&Nu2w9wFjFoev2`J z4@(%_EBr6N2{Do+v9Iolij9@04i@O~<)Pj2%+_d+(;&Dx9 z(4ElGgOnCeG{Bb4UsPOza?|lTY7o70sNv<$zYkltGMKssdyZ&}TDUf^LwM1A50roT z9Ikm3PF+Kiz>jPdjFcn=@fHtte7yan!W%Ep%jhuy9ykzzy}`>YKm*JMIc_w)&nsPqq=U<2D9X!22_oW45;F0Z}UxIBK45=64pd23xL2JcDiJa(X_+`z>^I()j zezJiqE(ZnYK{)QqY#X*iXcI6Qp3i$dm{h9nVN@ka5@h!|m zy(^V6CI>^eB0SY14_l(tlZqGJ=b0yisAb!8a*LLYEh;UVGvBkEM3%|^367}UBsK_` zBjJM*zA0hf{UUxPAhoN_5~>pZ;D899D&fNtZkO;Y39orq;LVb7orHgv@T`PCIwgh2FRS8p|k!FNXmk{RE*u1V`BYxM3#iP~{X7O%fwilzY%r*lS?@%z> zEDC9ynccu<^q5ed%#WE?RN}?3#mw-q;|meF(E<6Ma?{ST7a6qPjFHuv$Rb9Oi{L?$ zGM1%;9gn1wgs*-Z*y@aqlhG;UGLL*5O?JGoT666*FAR8|g$S}rF}6a-L3z+49>%=L z5aGEnU2Zop`)_(oL~~PPqLiLRM4O@#mHf8H zGF3*gSKD(UGMvUT)%MI@QWSg1J?4}^BTZvY`!@7grnyn;GMPuv3F*yq&ZQal)@&m8Y!o=EB7Ij{&DU=*pO6m4&8 zc7K#Vp6Sv^EhOjjqC1f#J%=;O!XApX z6=4-Sx8#^|Y6~#@5g|N*sXae8n0Y`cK~S26X^&=IO%al1H?hjjF(d7;QBG!dHG2XH zFJ<3NfXySQ|D!D4~sjOB+8 zLNK-yvpFnZ>4D+h4a~4!^_cmhOYZGjRPHS+*81wubK3?sB?HEO@D|oaeY)!bFP1H} zIY@*|xGYU9(J+)J1sTWYZ9-xkG{+9HCi;lxA#;t<3QYYR*2(maWE^Yx(|4so-JX%g z(CN+Yt59LMb6S*Fxw8q2aNk`G%?Wg(q2 z(x}}SQI;NQ2xShh+q6GK(CAU7k)855cJTKRGB+~p)T7<o#(nkUvbi z6)97)&mlf|EDYittuMTvwMLTc$`b3%*r>Lgq@5*{M-KDR?am4BcJZ(>Nnk1-Pg$aO zJe^yN=sp~CD9h{n%s46SwIz45N!y}w?@IAI zRUP!in(A=MSPnE%hdhey!SWWpK_s-!W?>$z#6=Co^C;9L)7{8QVPtKzUIx9wIDqsj zDhU@Y#(H{Jp2LE9*cn}D>8ej(?t=y5;SqB)D_;(UU3UX1d=c`-vU@zTSw36}f` z_T(;|AQc6hOxodza{j7_TidS53@?sw%VQHJu`S0ofkycC#MfEu7{dC0D#Crov-l1~ z_?oGH$ZBf&s)zrkC z3FY|^P)Tw2au3#^^i@@{gbD@E$Myi}-7r=S1}EYK#9si%Vreb;GXYmh827pGuaod~ zKzfHrtAscIQ}~|(q$RueBy_66f4hVmB}{A<;o~HHR>F%a(XMKoJLw?)c;{i#f%q}fY1n^6~;3sC=q zT+Bq)-gz#5wk0Z;0sPnvWh8fC&%Z3mdM@0ucD^F1O%V;n^|RDnk;P5^j~L;_MSV!2 zepg0@u?=7(k)Bf4v_gOPjmao|GrN(s9?fQb(Wvn_^W37cxmpr!x~eHpe3lkNePIq; z^Y?7l2Yp($*X_pJIi&jOvtwQc#$rV@24q5;j8yK$TQj?(VmS{gT(_~Ol{K!|U4(s0 zjT7QBgB{$BwGiSG`pM_@I)f2yg8F3iZ?bEnq~rFSU($=BlNOw3QocYDo@)`C*LhOB zF~`VoM6O&%>|*K4xSU~J%_?Hfy`2_|Mo300A=k^KM0f_MM)G!-!HsNt=NZs|$C!Z} z0OnIo&1T0tPZrHrDB1b)w1l;FPMpTuUGdZvaVcbNk%$H`Hf;6sZk^ukqL1IQ*^6(9 zVIObD!phRD!i>hO*ggUo-`p7aJ%~CfFzGKK<^w$v@#g|1edqK-I=)!}n(U`h( z=6i0S-<|O%SZj3F=v|G~7RGp2GLy9!US*--3r_?k4X?7U8+Zm=zhBr=GK$^xE_{>( zJI@V)=$KwS&!oHu3{P6bws)R1x{Ht-m@?N+3de(_ifR&JMQqK1PK(uvDaNoY#G5Aa zFzI!gK{m^KS12LxTP%zkb+lPCa-T^^+Q>4SEsLfQZCXjWL+o)1nrWTKHbhg1Hfu&6 zcxj-!kp+|*BPD3ybROGsFsiK4X3fZHSAy&&pH=MGdxm^SZ3jf!l?XlL`6Ne|2W^Ck zD9gk97qA>Y5RjW>VP!S z;x7y*d^!;5$l<{Si*vKJD9ou}Lop_?UhHEI?d+1%m4N$F%sz=DG%C3rz(hC^D$&&hW(*B>e_-C&^7y`+bL=xqJ|{}JtkxWJEag|!AL(k zw_t|U1`9?y9A~UIQgbl@i9Te@z$(95cr6My{ib~@+Q7gz0Ve}eTX+=2{#$LK_9MJw z4tFDNDr+TRs4ZC8UC5IZ_aQ)1)E79kv1ShAxq=oJyHEfsR@Vy9DFuT9@H#+Uh8K~lNmPC}b-7*EomQKp&xty0mEl*O z6?M5D#Qs}#nbHJXhIN19RNaZ?{>1Kfmr3+_F1 zLufc!&Td3rqyw`7Ne3R{(8hLg7|&wC8+AN(<}4^&G#_j9`kL%DoJf=!jOL{YQv=F6 zQVk-I1aDodfdRb>HK3Aptp=S^h)@HPOXq4}NNrF9s=K%-(NGO{Z{GLGI@fgI(GH;l z?J~SC{1~>eQc(IX_JDNYu1|yxtOGoT`#5gWfk}Xx4rG3+>42FHMP5|*cW_8`eMv#~ z{QK}|1zzzIQR!E6Dv{N>mUFMy`AA0OI~Sz^)gVenGKlLsYZ95Lh;G_e185{&T#$=> z>UnsT10E{LlMj*O$)tfn8Y8n-;Pg)p$0?9Fc+JY3B!R>$#>DmkR~{&2LlM*4KwC=( z+EiKmqD{sYq@v4gC5qT-#<5@uH(T%kyO|a66SWkLql&|YpT?Hle?1LV`1K6(bMz1A zbAsfvj2@4Sx+2A5k^8WCzHMXk^b-uvw{2{GKOo@c1o2$k#^$PE2Y;?@WAkry*I(h< z_bu|bFzm$O{uu6N++X1~Mdi#eF~}B=QzLFYa5lo9hMO*O=b5tE-^dS0S8u?(0KdyK zZ6{9{zFlF3Msr&9BaT(_5qccHM^S>)o{-`ei4&irz5WS-Gz`r{lGq$Mw*^xy75vcC zWsDgFu2nFelce0E9|W7k%cE;PFK1lmBuEThJy?ah7e!eIdU$3vq`#y#BybWczYL!E z98DugYx?2Y4HdS2!XhzMhN`D!%9G>f{A^kFSgZixdr@3TqqatI?Vnr0ZuzjdDeagyt zTOWn3)9M6!nZPdexJPxums4;Z7OT^O6y`Rg3(G2>TC`M8N~;Z!C?Xq?G$sd+8O{?G zL}6*4W#f@Eyp?$l-cKyk@Mdonrwf460GbJS3ebRrX*_By7ALRxQ*As6o!`<^%|mAK zIrEo=*M^BdDrP|t=Vt>@9EFR@@iv=CL@rGoaUPiL!v;uVV0+iim|Fi-N07czI9>TxIi)lL>hZq& z5dS;G-$S1mto7|`^IKE>1*ulWnyL`6Wh8i$@vX*;iB_*u8E?y&X!F{XOnXMQ-4l~u zJM+%EO(y(cy@lwXMc#E)wVoKCYE_uhqU=@-M*F-u(|bdsx2IEjH#K+)s~S87j+z8_ zhRqY_s9}Tl1g_0jX0#9AJLJyxeBb`y6^Dn6Z{Pp%pgn`$R0f#R2lVmUd^@bmzMe6w z&awUIj)2v4)O2|HSB@I137?bfGpJ$KtiWf(YpKXKaQ>W<*h|$MmM}tDvv8 z&9}47wf8}0g(iKz~<3NOdW9* z9_Clgv(JylLmG|coQ6rzXt~lrLph9=)sjCwf0~xb`vO7c5f(2A)EMILP|l)RLvA54 zv`kJvignSIS0L2w8$Bas$;HA|nzAGjl1WNc%VBB)H;v8sdPRbc^i{^!6$vQu(qAL) z2b1+A-%MBD9`aUJb-szJK`r@XNAON!4tfV$<=fQ)X{I0b&u;b4Zc)B<`wP$dUG4Pg z$OXN!@s@$Kx&D;&(~7HIE&F{(&{0!(RvnIa6e^7neSesR916lmR|m*IZ=mY5_xfsA zD@Xk?(geM&L2rAttA&T;@er7wZ8UmQzd?OBzX2C=&_z&P5Nk$BNbacnvo8X)Ici*I z-TpY=ZZq-nIfZe8(3xkK5kKHXsT)$iziqk2*T9rLmc7dRh|DVnW+>cJYY8XyHRrxw zy_=J$I_lkuB$xCddSQulViph^^5On-$l_h5)P)h#zoq#Aq=vF?qoJL8`>)U?G@G74 zjRYWb<+IsbcgdF9Q@Ke-gQ@=|hT<8_vE~LC1;ygd80DxM45!axex1yOl8(>wzOTN9 zVTj)nxCFr*$(sb1i$`tXQJ~@dga|!R>uXx&M`cq;JPI@(^A!5XZ%8@~6D{aMst!0F ztEC+F4Ecv;68w7|k8OhA_ivN8kMbr|2z|uMC`0p8gw-(QJxYaO^+S?BqM3Tv3vj7i z)Rzbjvvdwehi6F@@*bFZV-6C8Sb+>xN+1e(XbEvjd~eg3R~!+{kGGIH(a4p8+{`<9 zlU@f+_U&q23m(y?(vN~cU8P`Rt(!~%vQX$<-2QQ?vDLWMCm#+5*VKCLZr_U3*n9ZL zfbq%S5vDb@j;i0I(3LAvt;{n$oRre$`_k-q)Q{NP{zlczX^t!HAgVS{wW$vas!2rE zc8`Zsw_T@EUsLP3BWH?tPhdh6*%c$BNhW|~f;u9M(FC1QkctJVhRr6W&bP}h+cme3 z&B_s_ZFSIjEn{U9RtGb)9jxrS)j{k&#FX^|eDkRc$Iolg+kd{wS05jkxH?$*zw22j zC@yg0>fnZ-n!TuQB?@rF<>0lP1lp!stguhv=WmG>T3w@_E$V(O^p0r$9f zn}*@z&eUr5_&Urhhbg;Xn+x%!AHX=N;r^X-hqS@Eo%MZTR;*Q@e>8)SkchcPco45vOHtiTBpqyIk3RYGGnaAO)urqJm>Ixf% zf2)@Cr9kiHJkaVx;L?7|+m2TY!KzK&0ejW_I%*XjzpF)Y+5N88)fKH@-^n-=2x2%DVr9?=Dtvtf)MLfyC0Dus=q95b5ireDDdWf&6NO% zU*?))lJSqscKp1qvaU~H9>P~vTO{qu`saAKBanx170Cp?^ZA2i$p}e~*FrXwP3D-1 zfopsft!9CCyjMY4e|RqzUUkWMj?*h(-kgA{aJ*U(v|u3kxSB{+6staljzwv4?~WbD zl-;PPmdbNU-izTM&V2Re)eBKH)xUZ+FWBvs=lU!usyx@vI}8YEEYOF?&wT;$Bno#h z77QAMQvLy`gd;yP8^|ODfozZmN8a3r`c>$xg32gtRo{E9Bj|Uj{=$c$6ts^+dntBOrz>GWnt|ousaV57&+3|+dv@?F!vHM-e<__7T?2u~ac=cWA*&*Kv zs~>&Kv8@vGD`n69JLW2d$A&a0J0nqTKs_&-c1|-gxzlg14A_)hwep;K$?z^Hi%DbCP z>Qn9bPP8NFwFfcXcsIRP^& zdMxj!4Lveuw^iJtxZ3inUF}5#}^nrn=3xK-P;$#4&UbvM~&UP4NyMV&t@lq6`p4QR*XQ zfRU1r!H}<`1@QUbgaA%gTho=o_G)`J3E&12Kr;ktR|=i0n@A3jsI`jA!6bqm8yjpp zPQWhO{e@1F%Uid5f1ss6H;ojSf4N9LAnf*A%Q_cPqkA#WH zPV?70#DJ;gHLe5oJ5*~`?GoEq4wtqqNTacBp7ItShdlpp%rK}c)b)$T=prT8XOzRb z1I^vl<}YjyB#ng@fnP(YucDoK(L1!UrA{8fLPgKy$z$qcO@V8S(&2a{12tX8v((2jW#`?*PN>|Z>uF(fpuy%aHXOf< zZ0%P{BN!a2y1>brqn>wLxAxUxE!G@bo})4N>Rqf2`ikKv zpE6_kil+Is5}P+&{o6%|*rOb*&atY~9)}{Ww32=z1#+ZjBkBUSkQBKZ?XtfUjHy4_ z&=I7Lp#vTu{o|ux-l>!m{s2JE})hR;Oahr5oXxOUS}#q&~$Er>=S7 zPsze?8(asTd9$G=TEUwrZ%fmu1in4NztKeXs;@BsU3%*_41m~G@A}SWF1;QDlS=p& zSQfA?Jh%?l2o`fA#G0pA|GI(0-RjL)!^=~f`s!;J8eN_UbTgNZlC-vvtgiwc>i26Y z{Q|ZFYZ}(S?jg@S#MWYBtp0*1J|-zryPtlCFhUC$m-h5&`Rap7r1{>s-PTl;iDqlu zCU%PZ&(3ktF75!nPTJL;henpC#9DUe<*S!!iCpN>k%6ln6^Jg)O6v-prK`5yiex%p zQOOK-&&S_weEi)`{T^~|L+XF@3u64&2E!cmI@Nv<0qj-WZjBb%ajj#O_7GFSZ7G*! zGi8@L>NzxOjD=PtO{>l~Zw1qt<`SZ&iz>v)T@gQ!OX2EW zt>|i?J8cCJyDe{?6>SFfGk!hvP%TtT`XIJ(^*IV&eQuBY7$%RyV{Mbt^H82j)CruHI!wTNLwMZnxBYhzb>LPOpXSnp$1h zin|SW`_w%3h?6)#)tp(_mVQ7RIJc%Bz*x@32h97h1gzxR{U-k%==@v4V*bKooFb-< zEagroTj!>QzP`R%vsBRW|6AZ9-Nk5b+s6QTB7eQK?X%7B`lBQE9L>)8O>R ztIxuYD=mS`(oX}qYOju*vESQ*;X$oA@D+(wsYUaSuk}ofKj6vn*ZJRf53eO%4xVzq zd}jXy&-MPd{U3z_27R?8#s5+D-9i5$_aA}c?d#t&-GBIN_Y3#J;^-8X85Ct@G{Lf@M{-I^Vg=m&CkwIa(%-z3bHx_uzbv$!oe@*@dCtA+-dF zpjp^*R(4@+CKKbTaS3RKSO$On7z`>#R;xe9a_+A2)b;TBNWL=LiQA6bmOpRHNOaQl z&Tb6a?2Pa2D6^9cIO;#qJs{eNxfa@E=V@&`Ew_nZk!)%4Gz|;ZL&0>-V`vj?(-oH! zO%js|GO(Dbkw_l}Y4AT5{MQAbD#E_n$-e4lne)gK9l{8-PNkk3cw~l&-#gH@aoc|O z@P3tsQ8eSA@VqV5qp#j&Z3zbR#(Qaj7psz>>d&P?vC{S$nLRL}?9}bhEws~Kkro!h zjk3-)CR0_d9|eQkf|v{N@ezh%0cRM#(uj3trEYwNt98}1K&Is=n*Z*#DF1F$@gwN7 z6>odkIzBAEPCQOM1*V?8V&O}rIlNd97_WeX_?ho{Uot~kla?a)z5d&$Z~1( zto&)|dr`F+W7{zy#^#*w!L#|ESjZ1MF7W#vYz=x`a454{t4EkKK3qAfy1|8N8lOwfYZt!PQV1QC+Q>LDD?>47ER5oAsNi%^3E#~pw_mv%}1#N7}1=~&?zrUij zD(JZw^9xK26j!TS^C*hd5{N_5QOBo!=YlI^Gd`>^W5iT%;Y~2;xdMnVyu+~H=K{~m zz;kck!Z!2d-L4iIrUlS+_-d7{a#?_RFX8%tfo#1Rj|MaoLM_y(cVPVICTV!Ce73Z03Zq`Fk8%S!m60?Ds0$tn#BFk_&rH&Eh}Y%nUFcDR zAcrlJUy{@ROALeXo6LU)@ZS{vOT#Yz?Bo92Mt|WkEJe}yb;&So{HnN`Xyl@}8flQ0 zezf^DtmOILL1FEgepdsc{jQVB?8em<$3SOQc># z=H@GrVz;Xm*#&Qdh^~Ktmc|`xRzpMlvkwL=obVDDc=ci)<^3XK_CZgn^45^tgZsb5 zp2&VyT{Re~mBNE6O#!N_NCwqUQrOlkkWt@;WmiOK;VyO3SA6k3#Mspk>74g*XNY&I#c%Xz=fy9&8e1ssjzwZge-*SMM=A<2I% z=48I;oRQZ~6Cudm6bi$4s@0#;gwEx3ygIJU3V~XOI=yA^SFUKY zGIaSar($iRdKxdBzGVnbSUn1iuUa}FU|t2gMJNalQaG}xEboH_#!%I#iX4EXFi-+7 ztip~-dSHZUtt)V5cI$0{5b_yR5G*LTeY`Vn8xf5R!@0c|{s?Z{FM!)6A_vKBdpK{i z5EUiA9EqQV&UL#|&}Q`)*4De;!RoE6*4Ng@@$g)9&cW2Gr>@1TF>rr^yL4bStH&K2 zoXxUuKa88gwYaz8UpGYHsDKon1Nft%*{lY)-r)B_i<&LS03vg)isfAo?=Y}jicM9Y zI?mG@zkNLY@oVu62n?#ms<~^sTHB13Ud?m)33vun=N`whAmXh5f;Utn#mJ*jaUEAD zVRh5DH|TpasG86sX0CO;)BG@IQ82b=^S!rJR@9oky{lcvvEi~^9ZO50cJkH0cLRK! zhE33*A<*kk3r=G!Xy_$6^9@Qg93dcQ@nT))HAaTuH4}A%dnl{hJXi~_IP3Ca^QXP< zl55dAXn`{DL+(w6m&QMYlIw+OwK-nRjKS&;3B*_Xny)S1@$kn$K$Q#|l+7N*{VUvs zxZ@!9$on|Lci>)tzOy}VfrUCG$E&%oDTUjGMO2rAS+Lgp3lLp^@kHlX`2s7jWPy1B zEjaVhppj6TM9IgxLl-EC5+!YcwJVep7+HdyunK$*c3*+)cCT@fxuykL$fHoOFDo<+ zTFfisRS1t{m**V@h1f=8PSS}Ms0gpX+c5BwY1*L}Jk3K$qgUWai+rj3 zrhJ1uU-GGIF(eg~)LS$%bx5SMzm&-QStm0b8TwtX_$ppuoI%2h7MNpxV`-)`f zYv?Q&#PV=T!-&#-I;Ama3&hM$8Wg*Z`(2xS6`Pm`7IqUSiU2O)&mTs7?k1AV(;D3? z!s)(;b_G^cO-gsB<5F%q zt_h4n4#84uFbxG!U;GRMVELfjj*`qz?#Y}5`6H!3UMVV=>7t4W!Ca!4aia@>ZK9D!^; zM8Y^y4^E@tA)O7A(6vAOKP18sGMxs&On>Igxqj!o3Jme8xp=qH%u&5<1tzl)#zzm* zy5lzwz~VJ&<5SEUrwu>-he~WxTduGDgYBr-I{ZK&A^t!`?51I7js#+D$34B)Ht7hD z=jHo9^#yGC!w;N!wH-6q%AILz`;DCtU+eu>{N7c~ch0>15z8Mc|1HSf^scvM2CWxh zzUSL@5UU1g(Ysx3;0n#v#`{@7w^F$iAs7Ul624mDYk}{POzT?Lm*l9V&mXOIeX*q< zVCA>Wdog-cUz@oihR-B@ZGBh9Z0U}&V)fnn9&!;V*HCsm#^d7PE!tV`n^ zZ@3O+xST7^n_2aMUw%mVv)h!*@DqI3-!{b6zF);MM)N@AbkUEp*-vrT$vY!08}Cz` zj9rAucxlySw$WDWwQNe8eEspd%8EwjiFI!o#@sK}sb8R3INr!TH2gqDu5;DZzHk4% zA_bDY(!C`O@s+nS&+Tr-b;|wHnZp$Hwfm(&3g6<$21!rK^~c>Weew-C2V8%AN0XCq zUm|ZJ#RR^QX|Qr*9bOx_vQAw|%@D)1p!+33SIKowP-pXiPtLqD1k-n%EnH$AzIT)B zk=ci9OpZ4S4^33-v9eL8W&sV`v%a%^%VM^X?1^)5YZKfCt{Z-oD#4TB-!p!*<@DEU zKOL)@Iq3wamX z_jKLxqmRt~lGhWLo$Zm?Uu<=t&l&aB67$-(SfKiur+))^qh7YslEWjG(V3nr?#LgV z>PZ+qSW3dKCL$^jqmBkYvu2L{f2=aO9rb^AUFzV>%*?^5_({bV^D+mg zz&S8=@Sx0L6q7oPeg+Ri*x*!z5#r!s^plFPVT3)5(!nu|2+$9b3?7Dvf$$F+h?qfQ zQIofiCTbsb{zDiVfHP8YPl7re7POf*KltKF^Jy}uN{-FH^J>yz&kt`Q;Jwm)CMT9v zdiwZo#eu8U*wa9Ik0o>Xf%>r)*8C56k6t${IEJzLwa#3|cCntla@vm6o4hcEZS0GTOK#Ows|Q8oKay%ORT^toxbJQR<6jf+)#FP z{kRMZo3bpi1CWAlTKccRtL?FNC4to+;k|2jvFbl$~3EgNBn-rni>ShA6OoD<_OLZ9AU%vDiyZ)V1;>j&=<6> zxcm*0RMs#$FSGgxofIiQH32FE-vRRZ`T32H7B>0M@|}@E4W0yu=g2D$-*$aA6LNSu zey{hktt5;`#tjm(@cwXZQ>w#z`2_FDz)frSSkwMsj7I<=08H?n@V8Y@>Sr0Wr#_BN zsT`B$IRoBzoVYvy(G5Sab}Z&byqqvBVi}3+N(<>qz5o5SxxtV<4cXDtPam#mefsDp zhljDxr?A6cs5I(xD?fDm&JBU7@tqsywcsF(|10%ph!}prt;D)BTv)G0pt=%4XO7(T zmFG?hzWO8PzQx77c0^58s}MKCv{Rix^hnu8`WtYX$pmt>Rwz-MYMKfq;yIWPH}TU? z){n*n%tyyy|I+>Yc;=18DLCr~jl*k+zlE(&2TI+4bYnF+)_qF~^L&ldS2&dnmj37- zb~AIwB(QSFkwnrwEIAx;wPXiA(@_-68ouQP`c@Q(7}iob!SMYD5==W+pKV2}Df<+- z!@TA*N9v>~u|A3YYTDMPGb7g2Jj~Y}t1zrNgk@Q53-etVzK3JP39KZXKbzDt9S3!? zde;i*dA@Q4UEBh;z#&HB)rGd|DvAKfGc>{6Q~e})kyWD?f}$!F>$(x?DO!Nv7Wk>uM@*cu)1};MD|pb)(P%J--~Vj7XPGFJ4#8v2h}*rpLUk7IXX1;gP78{ zr!cX*{F8o5`|zN7dQiDJ{QxjyDfov^D?5F=oYbF3(cBDC=rj+<%+(1a>z&76=&6f6}@ReV5KdiKcTM}q$ECf4(n_)to{M1Sd+IhJl0@?!;W=& zrGc+F{7n7l+q5$8YPypM*a zHg4wp?y|`>eH^qv-(si30&ZVha``m3@9gOEJSgPo@`>)%9jc{#EVggv*H(Tp66+)f z?msYk{sA&(mYvu=3ONs1c4B1$4W9DH31@XKRi(@JLGsgdvVcw$&<4J~)+`p(#qKG_ zJvNMku%IoDi4-F#&YdPa`y5VqsGt5L82lh?qXhd!+|IPpx+OndLOYQTpmz5*)uI+7NUVuM;j!Pn2is}BCJWXc zuW-~HR_gvn1{^0bPh%%4NvYeq4s90RujsJ^zAdxKge?+{FWM-elkFHYcGSE64WYR@ z)Zd{5t*UNv@T>`Ebf@xodJq)_Ct3M@??W1Z4;3?-yq}=6|&ioGJUO4q&};r)9@k zv*px~7G(!#_!noswct>Aouy^<7hDs)ZAY>1FKg)ER73xU5X5E_%7Rj$j)Z^&plbScU3B;?pR5u zQFfbztsJ^{L#xscG@qil9e=~J97CD1@qEw(H_j)m{`Su|o7swftD6bBSJ$mGiJ*#q zRl80>eOlbxHa_+T}^!NU3HwI#}g){_IA`1q+&ak z&S75$f*;(Kn*20*FT(Ebq|{`JzKHxu>I~G_v2m%%9}Gx+8nx`(l~T73CaXZL`-*5$ zh_eoLl$L>K&dfLCp4n^kb_5X*7Ivsbk`L+-mTRB+Js7@*+$6B6t zFPt&$h*s|$LF)%L%O(mBVbYd64$X`fu{aR0j^YDDaTZ}9VR06~ZS@n`M22tC1K%$2 zP3sAp&UlD9rP4sw0q16wzSv>BLydu0v^d|c26?Imc4&ds?`^1e9mG0)W4-GbY-dB> z0@GGI40yGxX&ardP%A$nU4vJ}@xWwm~6pPd$1HkS6lV?v-F#XH6qaLP`yGv^_icV zLg_wXUM%ULibCmpwWp|Bs>iqTkHu|(|QU3UQr}wK5u8WUkm{})lV@1fk`+C>8f9TNe6;H`vMP4VY&ZLq+xZ{PZH`@(m!?jl8)eHN7a*vcy=T9 zw6R{|xyGj^I;tK*P`+Z>1}vr?%tFFFnlF1fmMV&Uw`@WJllLwqUEi6-Lnnt+n$Gyz ztlqJ}hgD;$nNqh{P759_Ef^I zx{*$Jy#QF({QA9M<};xc`nfTazIjZT)MwE_OD^heq)v|;I7syS zkW|fEgp3o(+eF?hcq40KrYBSr#i)Zkb=JSACOo5zwXh#}lf75r=^fvwH1B0$0?k+6 zo&Yg&(Y&=ZOdi{iCkf#<^GOI>(C-IYgb=i|k(6dR{^-)eXjVmGS~%~w&>p9w#TPdC z3lBo$Xg6}&cuh9Gij&N-<|-`YLOi}L10hGVqq?8)2P?_%-tB5iVfC(0aespQBi77! zxcuG|=-p4S#Yld*6$y9u4Xul7S< z+bGAwBS6gYYGoi3J141Csabfmmt@0#029e0uHFLlV)ht(J%ASLn3cL0W~1pOGbQvP z`GCM?+)cO>v$NSs+*8M9vmcMkW!=p?WKNt(k@D z{RDg!$IYv*BH7SzDfF1ZPEqf>NjA-E!G?yijp|W-nTMAmyiom;+=c1@B1c$-)rALX z(*=hHDBz&#=E!3?@=k%w(@5k7LOy_A56BJbO&s|mj{KxR=4pU59!I*$te)h+NXbmQ zQg~cV zAI$ONLikE0FIlEteT_ucd=m9R4B^(IoazQ1wI5N1Y93K2RR2n#-t{5YJ5M%m0BJ`} z9L)I;=_CjAJane@Wpm(!y`vMsO@7{0dgtNM9X`qV2ub9`!y=Wb}br+469pIYRJ z^Qm#3Ie~)8iVvB0^0v9qOTM%Q3ZoA5Banl)l~N!XVgz0#0{d@UMuDV82<*)Ry#vs6 zO@WIr7XFa7RzJj9HMegJb5u=3_YKX&pv`rxvf?A=xeSf$7#;^fD?Mgs0X)T4am>CX z#_d~p%udR@5?js3$^OV%I!3ib`~EYVcYu*XHIv+h>hlCTOK_SJyhEEx&Fgpqhe+V* zDgh35A6I|H6WqfSd`NDPHo=@4Yi58NOO2xWM&Lz6rKka}$OAZur-?+N;2V@Iyi|zM zN_C3z9L)0!psw z!4o!6K{k=dt_f3^4-WAHWfZC}5u!{kTispQUx{dSycHdntj0Fe!>ilYg=uBAPH$E; zJ$p30N>qaSgjV!sKJi1*s$D0NHd#171|+;0M0_ig2X#gV~|9I`)Xqa zr7y6>H?#TWh%|Wp`kJSs)7V6sZImXk5?U4*f}W8-vg≫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�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
    uOr-fi_K^F} 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%0ALkou6-h*|QzTKSDUt>v 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 z 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 diff --git a/src/bin/lz4ultra b/src/bin/lz4ultra deleted file mode 100644 index a92eb836262c209f256283137f6491d1ab0fecec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153600 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 diff --git a/src/bin/make_num.c b/src/bin/make_num.c deleted file mode 100644 index 5b1c3a1..0000000 --- a/src/bin/make_num.c +++ /dev/null @@ -1,41 +0,0 @@ -#include -#include - -int main(int argc, char** argv) -{ - FILE *f; - unsigned int l,sz,bb,ll; - unsigned short b[4]; - f = fopen(argv[1],"rb"); - if(f==NULL) return -1; - fseek(f,0,SEEK_END); - sz = ftell(f); - fseek(f,0,SEEK_SET); - printf("SIZE: %u\n",sz); - b[0] = b[1] = b[2] = b[3] = 0; - for(l=0;l= 0x100) - { - b[0] &= 0xFF; - b[1] += bb; - if(b[1] >= 0x100) - { - b[1] &= 0xFF; - b[2] += bb; - if(b[2] >= 0x100) - { - b[2] &= 0xFF; - b[3] += bb; - if(b[3] >= 0x100) - b[3] &= 0xFF; - } - } - } - } - fclose(f); - printf("SUM: %2.2X %2.2X %2.2X %2.2X\n",b[0],b[1],b[2],b[3]); - return 0; -} diff --git a/src/bin/make_num.exe b/src/bin/make_num.exe deleted file mode 100644 index 2ac8ea7338310c0845f9d92c5c7c1d32168def5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57856 zcmeFa4R}=5wKsm|E14t{W`G0&Mhp-%8q{b&kpUeD0|*2r84`>V{HTu8+{hze||0odf3&IMEQ}`lq#Sr&&NJdT(WGuDG&`g?-j zeMT7lZ>LxMOa2Nziy)*KaW?*gLIo7SFO@e!2wQ~j@HdOFlL{B09N>NBUkUO#zY=>U zVo(tB&bbrBH$wbhfgs#;$*nhwH`7}Q{+__!`S|-K{zm=t z2|~vu;&(RiD1vnuf7F)U_#5@lNBP#904d)f{wUwe_#5@lCkTN{zC9|RVAAx}QJD}# zKHnv`jmig_a(J(QO}_OT)_;qlsoo^5_kUf!+rIN%%1HS@dm$6Q2fmUoaCXf9y#3!w z0nHP-Wo}t<@zPbRmbb<7fA15vy7A~dY~3~!1`5djv!pGKAbKH>gn-< zfP}{j1feF}{)CTS#v|9Zi6~Mh#Ln3y2(ed@TH5ir1yS8wDWUtO=Y+r$&j-W5%@Ty} zXOLgW+9j6D^Ql5%LuUI3V$?TuUFT^PbxyT^3xL#TG`F1b?fbH!c2kL@9%D_Vn-|LJW+olpi55mmRkiu?s2iIL}acY zrpY_?n%ZvsM=rT%Fj&2YHMn~Hp9yk<)7CIPTtrR!Xf~*doUu~KPfFOdg5BtfcuS;= z$bFW3B%9oA4XO_UjT$x>RNos<*@vx?t2tipY#Pzg&P}=Dasu@W0@Xf(tg#OuXW0Ih zs?XSsPJ)%gVU3BFSp(`)1D2K%RPS1e5^NBl#sU;zHD)x&rO7BE=7w7c=5h}63xfF* zzziwUG5v0PxQEg%MVj2>4EN&&k?M^z`8zw%JRnV`T(48E3?o;2f?%u!j5?vt9#sG7 zVos}Im|CFvN_kQ9?eeqU3eS3*V7%1{VF!d?P+e)laX(#ktmy~=t5lC&Za{NCU4E?d zq_gQ=imp%x%;?gNR{v)K^=0!_{Z>w-mEj90>KJc_i}(1X(p|0PpH&!m zh5eMg&qyxa8&axH;cpm!ar~VqjeDiUhN_@C<1*A3viMJgni@_Bmi6;OO}CxU1;oS= z6GzNNh>7!ZPf-s#BHfRP#-3$9!B9{x^dEdvsq-X~&K0ZeV|{?QUzMu^6mo zlGFX4lB-(%1btKkR_qX6)zl@s-Bg*2b+5YtxsjLoodNX#t@a^z-%N@;W4{ZNN|*upbX zzGG-noShbDo4I+Bpn4AS1Gby(V|~SMs8awN)#NsH6U3%Z=!tRt(wR!bq)k)?RP~<( zVX0^6~A40=OJ`frF;W*-g>OMp&X<_#t=%trl(!&?=muDz@l}EA4 zR|{gce2pMFS-D5P%7E!ewx_lm4M_H>o_iC@8d8_~SkGNM>fIG!RnAI1_g2J#_lR+T zxB5K#9R$3*&q0}=I@c%kIS5SQc@(0|_0uU7Mrhtt3SEZ~^&zU*wi;nBvoisBU(-Nq{x=Q0sI`PT|CrwCi0d$|w zNsUwjE@cjNM8ICUmu0sAp3?FFCA78S$#N;Cd9UbH?x%OnvF!mwY@^ud!w({+v_rAU zhZD8~a<^TcPlyWAMQk=9W{bz|Y-?rD5%W2ScLQ7-0j}x$Ec4fI;2|5{`HBRMvdlU`N0mEZR z8RH%@qsql;iwVGCS)p9`8NomOlkKSoU@lx4FI91ZIPsO{DG+5jIkm+1$4MsYEvt zvnlb~p*_?0*v5OiHaGxKo6mANn2Fw86HL11*vg^sgr&BLw%%0QSx`D{Ha5uiGh1=L zty}HE41{Um9JarByoDF74yrb&I~f0^9kIu$0k&s}?~(auM&{{F4yv3YSyodg{Z<6k zSD^(r)>JJd6 zjFT+$IVMm!*0AzKg}M&f7Upa|SZionPR=n9R#p-xU0`#@xy;LXZljZBM>wrn_GW6- zWLa~0U)q?Ce*P_5LoD_td+7}KVlorhcy`QoT<%SHd!_r>sp6Ap!uz~tr*^fz+{w_& zQnp%lAyB*z5?~R6`_*TLb^StvbjSl5s4pUhLDa1HsjK)U5<6M+)@SSXF8Zl+;~zo( zH|R}mq!O$R0lF8B@}Nn<`Z!6c`T5C@M$_le7QaoLP}i$P_^9w zl}sw89uwr5-J3s06tXa9ywfU{Vtk_Ty9r1rOC}hAOGj^)ltB_Qn~Tb`Ws_!;ofbpp z^kXiGTP@;6EYpPG^z!nfOJDCKNHtDY3HfG7F?j_<;Ar{hW_w1<=nPXvSK8V2cI7%d zi8?&XoXSFbv;txpG7mBpNY^{O{qzM6>l(U$Vo^#N^SRiPV9_;`tLMRf0@>#Z$h&o z{(6x_!iZ}_`g43vPK&Oy$?qkSLez<={yxZ-8t=L0RPd5*7p9uzq>Y)u+a;dQy5xcp zPIdWKkNu0$^95KPQ%3AME-@Y^=I&}b^&ozw8(F8^;Y@)-&viJxKD#)K;+T}}tV^4> zmAY7)&5W+@WMjQ=ZM>k*LJK?Qvuidyym@z@G}4u^UI*ou9PL!We0sPy|Cz=L&1RSe zkIN&T4YSX})tKYfXV7f*6^1gA$3k0R`{YmT3eBSIRU5HZw8o-Lj@Hngezr?wD#_Y>r)cwZC&Ue_Vetv$1|QT)e-MO{l>Hw5PaNS!`F*SfAQ*0<`W^e~zDWxjWJP zal<|~s}S7t$LniJ!G|tZLCRP;q$$+5#2FDMp9EVyW3ZLnX`?Qf4Bqm-BtiZECZiLLW+PW1h>n`q;hdt}VvTA1sjOb1%>5$0Op{y$! zwD2D062RnmEKWub{v5d>A&3sxO0*1;cUVeiy|Md=F#Dhyc~5O90$nTA0!&S`DjX2Ut$`Ncr!m`u)#Af6 zG+DP6)GBxZL&k0>=7ls&21cP==63~9E<0K7CbJxI)fzkNw)Gb8Bf0#@G0a>LEWOIQ zgrRA2InMi6B5f1ho)uK5QgO_aB349T#QUit?RFL%CFWhIE)%1aX615(_ZvD0rUO)` zd85IEQkAGymv9`15q&;L$_2Iev-LDR^Zu(2u2Jhj4Ky~W{u=Xb4eK+gd1ihwm(oXVpa4s_RF*L8-!}jcn?TICh z|BB?d?f5TmT*v#($YbX4j;x<5Ui?K=9HU3;-8#?5c2ha|6Px_0?f9<}+L#2rr@(*@ z2$F#h@W7G;m9`!p>O#NjVr@uCkFJ=Q2q{afEWPt1n^>l#D@*Ll#1dtRQ(59#CSIT{ z@hD4jmWfl8C3(t{{AFUUvZO#+Qn*ZXDNBl!B{QRqCCj9pibYv~8NrDbDi-5cK4KHI zTGB^$i;j@8XrgY!rf3raZ=mIgEW(;+~dMQX#v~!U) z?n~(6*tqWtU3A5LBf6Nrv@oGPvvlcFwxZC!w7AoxT@YkDgBQ?_-bfvQmC$?Ht=1OX z<___ig=N=D$C1<-v%Yt!8F^9bLQ6}T1<3`i3#~0>R)i+BF0^6Px0JzDX~%oowbGtm z8!e1)0QFM5;bG-YFo&$$>u0rES|`lymu9vuu(VcN5SrGyz}i}EMJTUzfvvULhR_)K zQ#;fZEdNlZp|4rzMuSOaS;vCKtEA&Fob80!tgCn@>oj?cuVU*D3 zh)h9Q)zIw%d<4M~WDZR96L3Y-TQggnn|FzYzSd1VFl*<>$T~-wGzIpej zNDKAZuY;uWJNY^-$lkVbH7L5M(5aNU`mh+fz$b+I%Am#IIS$M6vV06?;nv%?VhL`$ z^>zgopBuVwy?q-@)E8Z}u&nH!@MWw=pZy!mRlzmYRj^Ly=#od5Tx6!cbR!9ZoZ59a z-XQnb314Gf2;Ph@v0J2xVK3xccLB(}I|giK5Idsx-MTa{eu zX~W3LL8_%4rF%fA3^?oME+H)dH3*kXRxZA z_(I-^0m?O(a=GwOFHGjj7sLWqo*!Spb5&5T4V24Ixoo3yE#zF4ul^g%Fb2UUhN~$1 zcFMkqvcDeWRddG6S2v|HlEVB$w2|X9j>B=OH>Q#&hHoG^pAwuu5S#}LI2fdy!>ITw z6o;(?lU=#XU@I5%HtX)qWU(UFayQ38Ik})pbcp|H8by}1e5u-5h$FppAo zRIAoDkP%dLc_oh&hEnn~j#Qo?&XXJR1q_ycYO4KDXzD3y>efn5GTKN$J;o2!g<29^ za-kOSJh@>I7E!Ns0xhUIno%{Zxpe=aBAsC6N0stnuwv{J!U;;2G){*W;0KYe!ys_Q z_9LFqs~U!m)-Y%h9WV!$pJ4tI5Qt<;2b*z4r6C9OfzcH><~o4mV#09&9_kkr97i_A zwB&x9O|(_p(HEQ(p(Z4l1q&|>l%T3md--s}be-S>Q<%RDwPy*Ld< zlS5_b2~ypurG>955*Jz}`&Ljla!bX$UcyjUYF2F$CW#8o9=4n^Dyp3sG*zdyml zL;chH;ypHzM&N@0+w>ZTP@aN7B-q5UVmCP1MrTYyZvx)*H{!i^v4|~qc~`nbh)pnV znJa6ti??OP=n`cp0Zli+#}o;EQ=DHg)CUP6i08)r35z%}UIytuw$6e5|sfF-A zvrI5-MNINwnSdQFEM_r(X*U@h7sVz3wuJ(!hYu-|;yif)lE>M)jbuwe{fwKkQpwYv ztpNLDO+7KZiAF>hjffT+5gK+BBNpb=J_iNbF7?5j`g$^o0*4XBbqKlV zVEZs4Akb9{7NyTpW^XPP6DNiG{70RF&fh3ZwsrNTuz)!g?8wS7KV*X>w3Ebl!PFbx z1sNVEbI=#F7{i-EMAbmdko2O~(UR{AjK|rmg;OUEu0=|V}>AXrC75i{i#+ss1;6XMQWBy zwxX>~{ppzswsQD$IDBdZ;5*b31O8Tu(EHU6j1X!UpCN}0(O_(yK}3wjUv?B$MfE~7 zzlPN&!jB*jR4+j#O&th=26K-S|G3nJ;JO>QvC)(@XwYZ7cEkGnp_IAs zV#*ZGy{4{f>Qdl4?1W)k!TZ6fkH>He(Vqc=+2+4`>eDe|I(`s624iiX+J@n-K7@*! zyzqJGkaFbtg8)uDY$x!mUbG5m%kvAUZ^S&z;FZv0^;~-A`VLo&>*V?QU&=u5XEIzX z&tLlvLAZ?NQUL4rVF-V6COD6y_3@bXgx05HHoCE1th3cw)m=AHH|8j{!!Ql`3UQoyvqQ9qB0yBE@ewja&<;G8iAs-u%D!+b6Sf<~mb69!8t&D#X**2yPz z@#Iw&tfDit<4jO2nihKusJ6AS_gG9n3|6lbD#PAVYEv^3z?_&FWBPcrpUKV|P(Qv0 zeR@EKPUuwoJkY{xyW@VBRm_cdTSN~w5nu8NkQB68fTYq6JWReS?eL!4@w`u1pH-Kp z7NIB^F5~t`dl83j;VcCy>0vpK9tB-0)fK2}sRUmE7&Tpw_8?oIohN|+1YBKW)KBoS z@T_&3@H6X9sXMXJQ=^5LotKOESd%g}81E_I5_lPg6^6u*2v=;A5Bekr+2l(NKL=FJ zqleAt{5ks+r#-tCscYV#ZQ2TN_uZYk6db6|}K0(oCUc!s_}8&syA6$eXT1-lJp5 zj+4UW52%ngSapC*tk;-Msb0Bh8vTab{DDlz8!S^Y=3I_Z;mKgs{gZo@d5bwR{8V$p+HnUnKFZxn3l` z(Ht*g8WvEQMVuN%b72nfC8j%^?LJ|9L`;7!LYXE#$6Gy)v*h&~fe&X%Yv}+QO6w|4 zq%ljy9POMwe*#4!+EgRp)AEc!hvo*geu3!(OV-#R^6;{E%Bn{kOONsNm`D#;yGZjM z)+Y7&hk4B&1USXh5g>#ySCPGvG|RzgIfR63Mg;GWIOpsgdJD@IFx#3623HU029+=k zRH*AAIoKc#rAyU+q40sG_sAznKK+l^tY-EkP104%{ zuE=|&02J%C7`+4hnr?IHwC93O#~ce6M_Otf@JVAZQT>j9RI8tgsE{lIhBFE8d)g}n zMQwf;bXhWP9fB5A+#RUP4yxKwK3%|fszb6dDZzS+yS=BeA`{0zv95%AfL2uAhqi_ z8jpN&`$K<*4Dd-4kXRAmU4JbIg8>=qKPw9cJBmF|aafl)OZ8|@Gl>uMg15ormLI2- za!>JV3iNikvSCBqS*d=3YDp4sPU5nl0cO*?gLRXu)sHpadNdalAIGXrG-Z+}DytnX zeg~NGf>3)2(vg_Z&-mloZU z8+6UG4HAC$-vs%_&6TOXY3dn9cN57l$NHUKM~Y;J(7QFUPk8%13*oTCN%jtZPm;_j zdPu5qruzlo=p!I;dvlVWRUX=a1WVQ$IL98N@XbL*T)=N$oT&{vl zr8=8UBzn#Rv7te89%mEBU|SgeG(q(Q@T*xOcjvKQxtF|P4s&AjW#Ad&(kyj9lsRJA zI)PSe#CBMaS2BAuO;7=~W<5C*In@^_8*G^V1fJ%+>_ID$m5Ay>1JTl?%!d$2b|BR; z&1ps5)Y+F!nLAr{)nx3tJb6V8?a|w!PK81CSk|rf-cquA_T{uITa{ zzI}^@yH&ipS>HIf&(ZOcPjFSy){iu4joL;fXz+{aA$j>YJ65NdEOV7o1-69yu-@=k zBnPE9&)UZ&j-`dC=$L!MM5taUvtGUr#+&o0Ga9g3z8!2pV$31Gs%xu9;dlwv=-v^W zP^mr#4IGslra-a=!AOX$vEH%?dWhZU3BmDdGUhm__b0imbHUGzCP5T{hA?`5gPoGE zgEQ3cqF$`rLMgn~5=QmYfPqs=j|OwRkjsJ@K;fRw?13;p?C%rr6|Y zRWl$jF!Vx7*|-pxtT1xl1fgLjO<1rAWR>S&EP`2V;4kEADVwmlqhSnZD{gfLKFg_d z&6%e_g!Aa~ae_5WvY)y{On-(`&sw^xf|SWqoc(C^jJ>We(0#Pm1#35F!){~tYin!g zLMfl|d9U+`Et*r=)J1XLuJv%#f-_cLPsZ`$ef=GA#O^QpxHJL_9MBa zhw}h8W7TqdNQ0ADS-b-47;Z+M8g%c#ilPsi7_&wWeW4G0cP_K9n0ZCZCvZ*g^|;v z<38aIn{&RggPX#i%R*Xp7j-?qwWD~=DVDGinzW6)F=Me#d1uxM zCdpnmBB?US&YYn72K0*>+aNi*zf8g6!O^m>wBuP)g0u`7zWOd7cCZXJqW)9km#=>? zi&eQ4LtTQXP+WYfGnbXHPC99ho}2__KLe$~0kG1i22;a1#qRCDo8&zJ=0vGp7?CpN zd0Y>}HaJg7)#Ew49&>u!0O@3ANzxFuhOHz%n>)x61!^6=z)==eJD0+R0F(J~OjzUa zOB{4dG$+FM=e6sUG*ZnI*j$6cPWX8JiA|UM-U3;`#>IP`qAjwk0MbUnZzSGZK<~bm zF^i$-$o^qFayRb9sgXdKrhZta$?Qa)TI&qM02oN_d5Yr(y`T;Q=zu}h4QUEr_4YaJ z7~wB3@R1FFb)h}Fq7bUVU%pL-%0-29nOHcFjOqVOV{d|zQ%FvruEMBG!H%GJr@Ofc z34PckC3#ai@FH(PeqqDB)(MMCJK|jhq9a>yLMnA(C}ax-6vApLo6B27L;%)Zh8@qW zor)XY65jm6`W}{F7&R8i8cZ5xu#R`w%{BBOD(`&PT2am0t6pX_SFSI#3({?MadjFH z-$taU`&^ws;Xw+YP%|lf0^!nu9fV_0{Qyo#7)(-zJpZ~^d{_ofY#KxOC11zj6$?i# zt?7LIkgk`}_UCEqre3*c1xEjwb#ik@eg6E5(ELq?sbJev18~yW(e@xs7hPJ;5D4D( zqEBdex6eUI7^wQTn_lvfC8D-FsQO@jORlh3_YBgI0_s*8&XAwo>Qp3~kq=NLDh^if zxLgoS9da@mO1VXNJ{f?e^q~41QcGwy-cM@eUg>Sar-kbne0FfCwB-z872wK4r7@Pj zAXf>pI4Bz+9w8%}J2qvKKsf{-IE^bt(s(Mi-31{fI8Mvt%1BbFAge3p zbIkE9;9Lj?l7LF9=cN8=?iJ999AxBL#-_ZbB#+1IwpMHD-q!wqX$O&5mnk&s$ApH; z#zBcogEX~BS;=~kOmkiYK9$hgX2SEHhy#(I1RZoPBO#cj+W^$Ufwn?zM>&%Oe}W{! zxd5uoy<_==3iXT6c>BQ;GYx{w`vf4D8j7Vy!-nyfnr<{ANukFH62PCC?;2dKwa%8> z5w6LwUNFKE=cWbK(W;S3=B`jH-r@CG?si(Pj4#2IcrK;^(GfYFEsbBJe)zf39_|48 z6iA5O_3qfO5eTs*a+_U%?FJ0!2-x?Johl+d(loM4d~L6Eg_Bi0n2HR|Ig7_Q>p z$=0}{&_MZ{Mwc%k9JGsg3*0+afo3NSnsMcF ziJ@E?2x$;=t+b3s&vSi0wbkQzZU+cemkDv0-rlhTf*EfwW?>v{( z0av&O8G`CuPAcrmCjF=RzCPyNke(J|X;7h{0jupkKP}d< za3564kLp+m`aJ=?%1O=**pO@8{_VmMlyzSuCtwfJ>yyR2KKI&O86PnSq#u;fsk*syoN=}#&>t6C1W3(4~7 zdkENdQsxenxE7dg7+>#)TPoOR4V_4+464gHmwNz^&-X#T zdN1vW1}CzezRq`TQP;J$ms&FAt~~fn)NAduz=#IdX*q0XuT@6|pOIsk1zC*gcm4Y$ zV@y*=fdmEqTjTUEMk(;z@d8VN1`*S(Ao>5VRPZJ8JMAS*hMY z*`mwy*aEE4FF{Vk)|Bo7WM!EPg#yk|^I<@pb2Hh;NzZYp^PoPPGLd9IH>S(?1q7&( z!CRqvWw1=|^0jxP6EPQESIL$KDuQ}&wXs=}-dA=Lu{?UXEMU-{WC`sf-WLeeW2*ZV zIuH%G6=OS{dAz~38(jd=>UXx-v-GlnUbYs+P^S7Bn1soWN*n1N>6jUhxaCus4e61t zk`|BVh;&`q;_3Xve(locT@CLVK5|Vxhv5}i+F|J6O0y5zx6(Y1KTGh0+)y5xMFFh* zqH_@7P85!)KaZByO7kK_wN6>Q8HY1EG5R8>XGqT0DfBZ3x>0L)Jn{-8pJ1g=NPXfs7YHl`U-+V3H#0l5nPPBaX5>%IOV2qAc%BuaO^Sb!!f{Jo985Ae4v;1gb`!096VI`Mlye!sxqwOA2v zAN6+y%9i1;0%f32{^*zJ5BW7qY!zBY?+@~KYwQ~HeKX!84MWB5%@-r4rFJL=B}kV) zJk(C=L@bY9UMnzOvUr)sdyQRbck^iyBCi>|W;kE?^X;rEAKM&kSwboAZ0DJ8ca>0>^%c*hqIj zU^f^$+K9M+G~YbN`B4W z>VGc)bL>u7a?}c4I;cwr)CuFj?LB#v*ZsgGposjH>f?Wb@KXFeioXNzk+~O34!yib z%K_gD@Wu6a=;bPawEBlyXgTPu>T&;Y85J%cE-vrEgc+NMHxv74l#Y}07O1cusnEMg zBK0_Xn*&G? zOFYl42Ckk966ge_>V2L88(r#BWRM%)7sOda;(Bdpxg+;()t=leV2luaQ39d zEcqIRXl<^=PN5OsSjItR7E+0Q$cC!~q)%eI5HcAzy`8hWqaDK-=d%KlBbI2CSfnxt zji`daHl*`J9P8j4Z26UHnHv@Mz*35BN}z$R$`7csc%)PD=MVJ}Oz~2(d~Ldrv&p^t zIGc2U6(Uz%EZOw(4%isI{*F!9s!0@Abzmwm(!?~*I?$ce$efGCEaIOkwY7W*x(VFW zHlZj~GO)(^Cdi>apn$nJa{9Y4B_T`Wj6VM$#cBBwQY0f#B*)3G`Q$qiR{4%W>%9&> z^FYh9ly?~NRw^{H0pIW$tgb+;m5~@2)AXlzW@i1sddHDWoAi4>wdKrK0=4NxfJRm22Mg7n?$EX z?K2VpRQ3;&eHxqtX1NoPXly^PR6WJYJCyR@Xl2a*yzGD88e*QxX!(CssQs93&=SS} zgxv6iu;~(VA$}_QpkpZpSJeL>-ts3J+^u=OmdOis|5FR_TK^gI|3>!z2D4h@lNd?J zhXKIKp8^xg4IP4bHS>3%Ra)Lx@GmgYtm=?4_G#gcMns9G6`-lrOeMQdf}p=2`vpZA zbDJ@Q`ShlORDP8`#5EO9?0d*$%EfV@RfusFCZt$mHz5VYWl^3pGZw(RiBv%SDOZ6( zY%Fh%whEg&r1wo+)DlX1fz%yI9@_syZ-~Q zGAt8|y?hsJ{b6oMIg@`Z&yS2T%D5Og&5R#XM(A-{aS)moZ1O2jqf4AFe>6sPFB5aL z%jAy&BF+#@)h=L5Nl%4w!I#IdyTAf@Y$1-9^JwgKQMAuP9w1zo2h1?pu3)eTs6z;# zvrT=qslgcm&$@p?o)KnTn8qy6`_fr?>k4?}pHh*4TZc&tK>uZQT=>Ccd6tT%cGX#V z-i@h9!t3>9-WyZVJTJNzaF?YbsXRIgaaWubN5>@s>a@{uVQLYN&PqiSOilyLieH97 zQS(Prf$|a!jJ%mCAcRAK5&1c);8dhIxH=NhcSpr>8W_>LlhFnZjL1JGBdIQ;ff4;! zGTNYl5ve32sV;bzQ(e;NIExW?^QbsZ10#A_GMZpQjR$8n;Svr(AUl6;H|I9_9=I%~ z$@k#?1h@Oez3!*&RbAaaVR|R=lE?k@>VS3nZiY94Q4s{!&`gOn3SR-uW4Xk#^7mkl znS?Z=9k$Y6BoBOhIS16OO@v7(TJEf@vsA$I+8@W?>I?TuVLrHy0QJ&bG?%9dH7 z=AD%dXkze~YiGlElMom{-Nq@)Cy*iH6(sJG8S29u_TKoh!ZQtqxf>o2yIQkCilL2b z4OoASkKb=#ya0>v`Wckx%x+bH)4a|a1X3^q$w7|0hjOOj>KwsX^IyT6p$mg08QrwYwQ;?f=$Nqv`WpbYtsq2s6{m)dY%EPjW&nnl{>D6dH zX2YeGh^Ngtn9Y{Pet}%-U*O~^4}VYOHpQq}u2*x9W+RKwhofR$m?bg$<0Q>{I5$aN z>z=?GXdAqD;INAW$(8B{m=y*9aD@L`Q_Zkf>-gbxob z+F=wb9Uy<>QIxI+r76n2**Nc?8k%K9>nl-dsOc(nKPM2KYcR$g&Lg?t?dg)?P{{R0 z>Ib@{jf$<`g%<)B#Z@}w%mQZ&-c%B^b(mmXl?H#HPq>#Y9eTvF;RLpZsAp941Aog@ zX9q_0Pe0-bt9t-9T7C+k>#PtD27PIJ7tUG3GdwmT|VI1Na!{p z0_R@**qq9X`cL7Sp@!U6XG`YhT@syNyv?_GVHqOpHEJX^s|B&EM)f8(*>G;Njd$pk zQCQq~Be?|?sGZ%;0w4v>7@&~=jQ9|wE;f8)Dg!uG=NT$2WIO42-O#OtF56CKFXVwe zH8ovMp$bM9*jv{Y=HR$oUe+$jnYCA3n>8R_m$moa%%Qi24#;nj{UB=>-rgJm9|%&-uc4|S>8pq04;KK|zwZcs+`sDDcep#1mezUdJl56Cx_-WIxZC~P z{(Yy;q?zTqO84$ldD=&0k0U=jKG{BhRM#7_1}+ZYKEEnLFbz!d^JM2RT*iQM~^v+@1b_?t)EWf-EWt7?z2o>?ra0tPf2!@o} zgy;qg0(!@ZcXkaloY=AlPIKee7#vw|{Ny zlV2PA{MW|zeqC&PKgAZMFat@l@N!^&1Z2`|2y#C(H15m)BKkEH6}bleU<@-dOD=Zr z!1WcMnSTo0H*kyAOp(NNGUeh~5~2a@{Do2kvmaUHkr)xBc(OI?=+A zclU;|%%8{ii}EpT$2J?W63uyn`Yue1df^}!wto;XwACTz3}x*OWi7Sh&yK$|$#n)FZB_`^am=6{r9mKK zoEn%$*vPn~PfQ1tHxFxW{AihHN+l`7>4Jl%=u3Dy(X9yR&iZn6W#iK3c!MiK2W-=N zZ5Njfy%Q}z$a=9cHqn9^zKGq(0OiGvPRB7 zbvJ`d*!VJTE;D&JCpqpsv|1j{th?F$V5j`91wr_^VkXC|--RLC6;S=0=}`dq6D-p8 zNNeFfqD9HXjBeZVhyl+2m<3pghMexnW)juPSQo#pfafE=H8Q3Ry$h#u8bE2d`ERiuuYL4}QeCP04U!#73TfRK zbt4^OkDOj2dLpN9m&R%ttGq+&alwSqyVnBKk!6oYZ} zTKur#(hhl-&W;yEb^oZ1XDD+2=m!Wi#~Ua1+Dgh=tKu!=%diEW zL2rvO{D&5!fmqdL zJG4@qqUEm?Cy_{%#^V@~C(w!`U8)oN9o%^UYOn;vOW;l}#K;E&HMM$ts0z=`d&Nsz z%i}FsWe8;^ykNB20VAID=xvPp{o8MD1SkH4vw=Ue3xtA3C`ldzt22%lK7@ zPCbp|ir zf*SM zIFHk&!PoJ)F$lop+mQi0J{@pMI2;_p2;p|cZYy{_I~hy-ew_II5pAN8x)L5ysjN%r z_6ran>hilL>rXkG^;bS?u)a>rU!YA{DV_sV!TmX$UjYj2?-%XcypH`+y7Z}0*9B%>G&p{q8XRMJqL_)>TL6PDTPAEm@{s~~ zn)%Jv-s>8ACrN7ZU$zw!vHq*^f?GZA!`QXo$4AVJGb1J>ca_N9BW48ZNR66-@07BdUAvI>?p6AJD2s1p`J=$=PPIX0S?`#+g8-aE~d;M`sum5xW zp1|L6sBcGifausjRcUU-zNS)j7~7WbE9Ea^)Y)U^oY74VHs~U_#lX|Zhud%cDvIf` zXTh=Y?g-svbm>?_gMXcS1i6VrPZvvRsLrCnh38^v%9ECss?S@hhIocgP#;0{=fHo7 zphgTf zpZrx|A=7>d7b5oqKSMm+h}=K=AqBJ&uy5l`=6|_)Af)7pncOWd##QcD^(3&(A!-md z$=BgW9?59*uyk8T)E>cgSLrd@T=Po9?jQLOU=yR*JFV(rtDunY3sZg^f0b1`q8z8E`4MA#D+?EtxO?IXXbspL16&)zT=M{mj9{p@tpX}+ZW1G?Ix z{gy}#$0oXEL@z%Y;r5ZCL-AVp2RDo*@+CVz_A4L|X*e#3empI>rnUU#P&-7YvH;Es zFNbg`m+@oeKUPZaTi_gN)ZqTB_zx<6@Q@!HuPQoD(5?sJHsPADVMyiu*s=qE7I#(H zhSjlfkEsZ0zJUZNlkkpT)hA{(o92~f#|DBVRRfE#Z->{HA zxP|XJW+3Lx!}JPQ3tWDI+YRY%3su3!9d;)U((O%$l?8ST@b}RKXKXwOOzp*XdY(`} z22vlcKS{cbZh`iTv-qC+qz@b^b)D5Q6#ayJda?9tj?TI5tq|69^~XWFpAO>*3lbVr zv05;}GZ9L})ffk{S44zj3y_Ef2{G1}Yjd|$Arc;M?&cL{a%#AsR(H!4Jb9(NnS52u z+8_Id+7Dr%Kl9)>)ZT@}q~tO6Mx1?wVq$ntZnujw^w}K{H~Q@7@eJYEL8ZRIu9srl zAjI8w^WL7aMe}WUia9Jx8N+b*Xat{vXOFYAGQWVy4#fPgzU z3~qk%`T!(bpM%!cg?Ik<$+!X>&oFfY-mPCJ<^Bjh4yxm5YY;}~H#zD5 zTLj$G{;vNc1>7|$N7nxlaQ_Peu7v!!zh1!Ih4Zuj*9y2Nzd^)s0k{1dM9lwZ0>{3d; zVU5H*I#eAi-`>K}Un}m7Gwzhb`czN)2pITFe8Np&GRvid9a@_1chXf)*yP=TU7ttb z%SaL{22%`90m9J>=KuqhVOo|)$=d00KiFLn2)CpD@FRH0?^)EwJ=ENMaw2MkoiA}= zl~Y@YH+*p9j9E%6K@2nl*s&ia>yGzLX$sVz$!Bt44<@~x^a#@*ioC~xhB9IFnfC)w zRLP*3iM3&#tXf4EuI_~Thftn|Q;E(utz<9PrlLh}TX=8+rw|UV^T`$S2%lUN*cZZf z6>^djgXITB<9~|$C7`MQnv5Ez`a3}glkoYr%B{iY>I6FTJ*0Sb-M%&OpnS8ov zljFG}ARVkLA#F+h*>8y!*qzVmwNDnfZ74PdlL1OPa0wLAF*X8i0`C^Qler>BpPg_& zjq@~kf#Z+E(xL0$?)Q{Ky@o?yYel+kukn=iCe$n!{U=4x{B^GTnbh#IzmPpj`2HzAsTsN5$ILsISvZH_&i+3vwd;oi`61 zer&@Gpt1zjHdfKPWYa45i&Z0Vn;h^TNWojBT@_uWSEvtuP5F&epmeU{MRU$B%Bx;N z4Z90kNVNP!1@ETmSbTu+&{l14VE+(S=7X??EQe)b65O-ge=2GE07MexI4-?)H(!CG z+GJj^j%)?)9sOCy$gFHzzDl%eAE03q&;Y8x5lZaAUTcZ&KiFGlxy6|3{}!H}jOExFp1$I5 z@$@R7&*|#o{ERi~_2Am#FLCub#(RpZv+(}k%hgN&7rFXUC~lld|6Z;h!CfN%Z@7BL z*OdQzxca-Jxw;%fgS|may|*-OtIFYg4SNEuQ?1{?+m{e;u)AyW$W5Zs7Gkji> z;m?IQA}L59?bl&YjAD6XABkUg>crYs%1|vO$T6r*hW!a|zrU2fx#W?Alx{fDl|Wdb zHAe&0>d%pi`DuLkbxfb?Bv65W2&)_88YgOB#vuhbH~SXOw?L-WpTIcZ{0kcL4M#2R z?>~f4wEUPhWd@0XXdAiqXpUa1-M6rGptZ*0?cQ`u?!?J^x{x+JHTrL;7c))q@G7jtC(+f|`w@k1ryKIIYG-#Qz+n3!>r#G2_ySic zv<}*e2^Uj<&a>qq5RQYe;n&envMTKKkC_|@&!f6ue;d_a4noU4 zh3)i$BRznZYSE>;p%?9zI0Nf8)t*-x9U`=;^ z?*cZ)#V5D}k4LTvs!t&@s6L6p25C?a2*M8-fCb3Gqpc0!^-}DGY8J9~s_@*SOB}H4 zAQa#Od)@5y%J5B%!1-ao2&msdCV3uiEH%=hJ<)eRuBSb+rk;AD=KL_4iHrEKndEMM z5%|mVZ>1P_^OO9=I8^*C-pFV(6@jmex(?9m)W|m#x4~nYlTKe@T{OsGr~>^PcXuCR);_(~uh#Z&5do zibqBZ`u#2=s=JN9ThyDA?*_d|Sb3D(`j=6mWm^P41Qcnsvx~2A@gtSVdcH1>G<)o? zz6^|&+F>O*;c;X6cyda`wI8wO>!%|wKfdjdgx^ab@+sPS#+ zd3HcKH-X4-y^OD1QYqL!a|t{ej9$*+1h^ff2P^5>1V!`E&B_KWg~x2A=xup;FkXX_ zn~(4f-MEpH0L`abalBwFRTNNLe@gZ8jFoBwy#QJ^cV6H?y$(WNnkDmJ56h+3 z&Lh@J#tT%agA*ynJUXr(7XZ&#~;;eYZXS<3)jk@BQqO=i;T5J z^QK8NP+KPM82h!+zdXNz&PQkPJcpxy5iaVvMso1&ZIrloR0$mWF!B5in*e1*PlK^~ zJWXEMF2a}Ph}+Re8fF!2hnaL?S&^&Y{YgkdV7d7jCa!y!D}}8_^F%jp#`rPy6V~q( zmEsXl8dPS^$W?144|JDlQYOpnwM>%*tAC2?gQ>QY_J1%q(bP`hkh*49ZrJ zZ0AMf_&Yp`Exvzt;j^0YFq;sftBK__DDk8DgT&z1@J9$=FcjTH6dU;zyPGeBEFH}v zZCecj5Rc6Mk;x+zmE@5mivZGE+>RmNYn=uc@61r2Wtt!hc5OwHO|F3B5#_mr@~p)- zlqk9Lq7yQBwR_>Vy?*ww^09l zAG=^R{9~?LDS?!Z*mOSI8Sm;HRF3f9>f)VC_qo;5boD>Ble{oJ$F~Z*hrbu}!rd2&(^z>8^&s z{Zi7R4VE?PZs@1HDIB8#?iIfu{k(?dQc-NV7jEJ6qgFuRoCMAjP;VqK0Ag8*qe6CO zL-3>MI(wa6IoE?MW%#ZxBL-2c<@>+mQZ$9Hx88hO~^{sBnwR}6qsR^D#cT1<)}e|<1bB)T zz#B9$;W@NQ&=%q?hu(PMS$La}dOII)6H{+=+iG6w&AdvU>SePYO`t#MdM&!c;4ZAU zOxL7P>0bG?MakjmxHamujdqKz(j4_d9OVsPa~=w3lOt(`Iuj8PI8px~eCcpSqw7)X z#|j-guh{u@4ZSh-o&s%rv}%x!45Si~f`g*w^u+rYexInFE4GgITwoVa@4&N$3#r;J zJC-$+FBq9W44eh&T;uZQMd%@1Zd3RG_-ai7_U#>%Y#a#t6=^QyK49L8Ox8;<6eJ67 zC8m~>Gn&!Hl%C3$In`=ivZzUr3bO>=UtI=Ho+0-R%AZ)*Ux|l!IX$dey819K6w?ap zZ0hvSQL{D~^Q-|LcG#b;09kOqbG6=&#?xY*>pOfY7@uOSLFt>a^vCB%a#`kTS1zs+ zfwYFx1U9K5wRJQ@!}YiL1T#5X@Kda%9c&PvW^iwQ0Ex7vJdF7~if>z$AH^Nah8>dO zd;-3-1q}=ya!}_SECAOiZr0{sQIO7Ihv;6^OIh#SG7FC12CZ^;8e-OeqMd^)%;oM= z-qUxF9hIu3c~8Sj&_68uk7A47i7PJ3ha1~$633-k1h&a8CV7h6z(E5+x&hz3MSvI= zUAF=fAo;y1yq3@_zu2J1snUUblAdBw9fap!@dj2ajYn^^Yvb_Qvp^0`lIejwM3PAI zURnPU>NDxb@3)0>>S7O0HEyFtsye(E;HnEM*~aY=wx&#Y8$K5jr=>8oIi=OJzm zYMWJ|MtQtPos?|RTsE<9(a-GEqqt8_%`n@BBitvbc{yhD1fzL69LON}-QMyOjems| zffMa7#_Bn~*kciIXXg?gSUtnTxj;M#CGzu#cbepQa$1?@c(Q;ez%u2Wi%&Vs%aA^! zM0;5>+Kw`xqs(XOBD6Yy??+=c-I|Y}UJdeM3YvpG^BQc7wTCLs<2=PUQGc95|8Bt1LUC0D{xo1(g`W(_Q(Sq0c74$0<8Ww(9pw@s`AcIaJo8l=U+U3wNOT;-bKBZ?Al!@_=;^Zv^vb_4U|hFOvkt9v zgX-+>18)rK*~V2ycaKqj0EHHpkk5hpWWC^P9aOGc$M772NIr@+oK2w8x&DW?;VipFO!RezuHspSK4g5J0 z_)v#E-d!Lrrpy+7Bfc~xr?Q*!sg7;LIZMh1M^4D{>yvEO8YUT-9u?bW?G*|yj6ZLeYu#uT%5FAoCXWCSfpKw z8)d8c!q3IOy@X*xud!B;l)Z-A5qj~aHJZ7!jqMKuCMbAE_;RY|->90$sG3gfeFFt; zb+V3}xz7tn#I?exe%w#h7BrV$j_rlUjEdwvcUV#8~U1116bXb`@cfDbu9h`N%1h>r;9e9udpXNI*>e9|4ex>Y&ag~_Ob zXWj=K9F&|Grc15D#|iXD1Uh7ZP7(p5z+?1ug7S@f4f#${zN<|X%uYrJ;5)fixFyfv z7`Vt#WP}jl)w@Q=JUa=HcqdGU@)Is1xaZ-aet`W6G|lJ&xu>IjGvquNQ@s!d3L26x z)FT5QwpR7`2xFTV10|Sd+s9q_+DIW&A4UQzFHl-s^wvsmRfS3$sc=f|0s4-OaRUS^ z#iUv0qDzm4`bsF(|2i&q!d))QaA4*@bTPhf|F1ZAg1b)oahVQGF>np*$9HD&g6~`5 z4k>!Q(}UNL^1VD(-jBKYb@+%)<{1ts%W{x`R9hS=DeuQTzM#l}vuq|3`h5BCw~^KY zU{!S6>h5N@Adg9YwyBEmTE8$^2nW)6>1L_JfN7#SQdN- zjenX$#@AFrL3P5%*__y*=I{mvX#HA`Rb;W0oTF)*4T2A{B@ z`twri&k5L91a>U@ItXhxh0?cM@HHCqyH`X$xdTMr1R_%sO(h=9qrQZJLGKA3-}X zFjTJ^)em{-hq8xL{Xp%c@9f;JfVL)0xx~Y$&^eU$ z&y;pQrOhzXXv3=xcr*bT;RrcDPbT_Qy)EPjF#GA z)^LJJgJ3g1WKDuqy4W28I}%8KUV`^FHJHvglofgXE?_bZ-a6qI2$QXZ$rkKy)6fgf z^j0~MJe`scQ*sX_*Bi;a8zzQlP~r$Ben^Qonq}et3NO>Ld34;giVsA5pV1j{H!r0Z zqz=XxI4#DRs_61cV+D_1!L3g@EYnt=r!4oO945Nx0YI4Em%d1g7~Ob ztZ1pFidOquBx-(2F=}f5-*abn69QU(?dSLT{~kogo90MA>=(?gzB0~Gq&?Ucx{m0lHM6LtTzWBT7ju0D-%WC@^wY@67hdN5EFQC)X zDLFINGmOJW;fM&4jyv&&V{07^dEkCKMUItL&gY}ZKf>-E&|{JQ8>V!%NY6<`7fD8^ zM}snftV1R_pweEN;T$9+@N2WWjB+2(tWV9i9XvPS8-B=>M3Bpt)K+H9lR z4k;BAzp&)&$itT%UG#xR_XjEAN!=f$<_=jI6BTo6i!p166)9+e} zwhG(N$E0u#=pBAdP3se^eXZ?#g8bsMZlz)G;_pJ5Ezh~ffWp1NiJLGSMyo|iL+_E? z*!)6NvuK9ndjhTjM%BfERR%O3|BlTHXJEgPLxA8OhX&&ND+%sJ65Qv9n9O6iex-N) z==t%V(FFDUf%%gz!G$!$V1FzRX-ki#3zyx^d3RtI4^M?me`( ziTW*kE=lRjj&)(9N%r(_r?VW-j?K=-;c!5>#+tnHYyuR-c+PIL&U80y`Uth1^;Yqh zwZSrq#5FeR^P_WO=OeAvII{z@Mg0Tq*#jmBaR4`1*P@?Kk2fZ`i%!ANn>c#|O+035 zXeK;Y>(}CYQTMdVaM@Vu@D|qS;o{3nbJyTB%yne_6bIl~Q1fvTA&Q&@hg#wd-wkws zj>$#`FmN*Ev^(6~RX=fazufBPvhZ7`+sTatkbBJs>=L((!_$alwgm^x;hb)^xBb0% zOv?dwU|*ceSv>+cCsXinxj0Kbu3f`%e~=oxdhKjnf=TKIMwfH}TQ!@h$cuMl`8B5X zZ#WHRbUZ@#dHs5qNBvdy`szYf-Qw%(WDzz{a(S?S!@_&OO0YSR176% zkEavqaRG1TA*8v)a(FXx{V@wFFRRb&i}BS|pBGVme)*u*RxIvAIb73;!asDiN7w$c zF*KtZrXLub9shI<<~_=@Q_(|A!dS@n2+@lXy_Fih?kfwa`#6_8|3IFPljl;+Q&SPi z%tM1YJ~n%j<2!t0B2$S9Da3idM~Js5M6nj)Gpukz;TnTAEDWr8Qi7)-WKr3q1vxvu z16?puIG+Zg@qL(r(a2+GG!)G@v5rFaNnHFQ^icFllcMowbaxB{#=(7o>w)>0}9V8pBc#4>?C`=Jq1cI;9fBP0}{g;UVXr#s$Sj%#*# zHo8gNl&xLsn|HVpf`R`y--kr9l}I)c$-lj+xP*0NM(xjK8o~4inMGTQ;;Vq$kkd9G;N;+ zdB=f{Go~NVjsRPbo`xoYPUd8^+>BN=dZl>Gjk7G`DIHM%ki(N21}ydQ<*X>>9YKpr zZjd=PeAUMvW?j=H9OCqGrekGK9XA`d2Asa=X-V%) zQ{Wf{Zl=I_dK{H~pM6|ZnTzY#BIA6A2L8P&VK zX+)X0Go4qX=(2DT`)IJ+N#v*P2l+3F{N6WoNnvdUs5FdOK^XH0!vG_Gw~j$d1~lkn zr7YuD64D)nw1|+dJ{~Dn$}=9&Wo4wOcIwSi5PvFqFVqG^#Awj1sJ_1wjeCiPV@h)JW{3 z(J-I|Kt`!*7xT{M)pnGDO!YFXiW5Fd)MpgOr4)ye;%L$00A4yJJ}<2SC(iVuk^c^q z256?e^j&5z<1-CYK)`dW>1avQ=hOCTv}SQ_3nW^f-Wb|niU)1Th}c!xgN@PT9K?A& z#p$6qKiSXnH0S46@wh-ca%Ry=EX`#feixM;tMvGOBa;5vURrkmN0oVL@i`FPZJ2O>g zb~1AXGgmQlH8a;Sa|1IsGIJBmmtGnu*v4!RGxJgAhQj>6_{kL9NZl4A%#5A0V5a-Z zU}kObk$HDJnY)&exjG6nWyMM|`&YqC+jT9>RB0W(r(X{fyQax}cpS`>WkvMV(x^z!A?r}H!U@=$wM*x%|?d4tVn<7Wli!~Tc@=Wu%{ z>{0!pAjlyKH`l1cRrpOj9iwpzq8E2SD4N@bC*2%v%A}2VGgiB~)oa{b-ddcKaUJfL zz+F2Wcks7v?r!*&yr_kMllE*(ywGpfyoO3U-{x7SED1*2_!fUa33}R;Vx?2%=gg}u ztE|t;;<761>*viP zlzW2TQu$E35@h@`48G7nLBjtC%Sc!avn~bUf@l_}CDG0codqSuB@6k&L~;uJMOj?s z!p8bi=4mW84)<)BR|^`<;{@|m_%#tH6?5lQW+n2Y3FRf|ZENFvVXr^Dq^Y>s&ew!I z-Wq>X*c0yJFL3g0ZQekDPayIw9^{voOW5%Zkxs(h&=vW%qSh*HQ!c+e>_6V4Dy%5F zPkYDlUiFG65C}CVef+B?_;^y{toGEWO-fBGFYB+fyQgiz~=EGrsHFNxt*!W}2YNO+V7JdsGT+TL6h@U%wwseF0WlIqfiC1s@z zl?_8l78XW>5r1n?@$yTSw0Oe&w4x5x(-ctZ)Ns*vXBrmsPA4x64Uv?H8ftIsY6l(_ z1c9GAl~3}Q^g1b%YODIS0TW&)4HyYG>j8-=e#MHx7?WNn4Y*{9Khl7#Luh4IMPU+o z2A|}m=!AqOy^`r0MkblcZzPk9Y^V_b^J4dSz2Tu0v_{9{y^LDFX3B1!P!#+Y217iR zA>COCs;I0jp=i)s#9c7?p9?s7Xxzgq3ha9>a-YOibE0~LPKi6Pop4Ac|L^;30c%T^ zEGe(6^D0fz*6L7bS(4f71$Xj&_)8*aEEN@iJ2^h zhbH?-G*BmdvfxfF)$k`3?q3sRIO=KpX$hQ`z-bBm3lcC=*rjNRbRg^h*vHLrG+yDx zrlzK6jL6K)%sYGR*ioq&`Kjj>%_yXY{bXbmjT<*==#w+!!qgc#(||B`;-u8njGWYQ zh114P(@`!Qm60*-!h*4IN<1^BY47u|PB=EqH+s zu;4m~qIq99ekfY*O1*m`<0Y3pe0XPWw1i$lhIwq6s zRXY653RkMCN?W^%!2!n4Ver!dr7{`@$LbJi5YG{4*GMP}1-T(*3QKGx8J8#A8fE;I zhFkf7A6lylu{HTyxynwZ8ImM!d4=+XD-VYvk(nAf;0BkSRK$p<+2;><`Sx&#(xy;k zo_5$UmElnpe%3{EkzT03p#Wu#KC3~|McEif%MOhFqY;IxqO2j70^n3(l4$odD||p{ z!Qh^9ktJ?cAfU8jej%bL%Qy^Ay)#3>0Mu&=9qEcdUW2?6=MkPg0Qstkxx{1wDPKp z1Hw=t&M3>jWZ7=UfEqsSQT3uwRK<@j@ zok2U#VP>K*7!3r9@XH0cC>OvVEF71gpOQZ=A5SWmpO&6KG9&Sj8+*p&=bV$1IUzs) zjQsKBFqVw7$k3kLtel*j%&h$U5&3y%j>^v;ou57EzY%j({0V=B;6nR5(eFf;YD`Cb z)8A_D#J}V5uSpsFOF6}7D1~cN2LDo1PVFxdo+l~)pMExOOg+hXEB!e)mjO5fkO>$G z$O4=RI14ZaFcxq&ARjOekP11TgWrjOa{*HU7Xh3AH(>Zv4!7BWdcY!p0tf)2fE9pM zfYpF?fDM3+fK7nSfUSTB06z!(3h-;dQ-Ixo7XkYL2LbN`J_39KI0pCv@D(8Sc{eu# zkOde87z4-$OaLUFl*9{u_dM(7`T+Fg?!|q=z~ce?@y-=9=b2pLln&Hdvd!c!;_O^O zwY{L$UeLf5v|Uu-y{MpzD=3}87nJb@Ui@6bmDb`eVy-q6^m@9u#;6jZ-vx>{sJ%7% zqG9G#750-)gGY^q*$bvTU`Id-MIkugazG;-t|1!aW_yBB%w=*_N>iA<)Oy0rKCTo! zNC2&M7dJZ^RA2Zrz-( zz41GrI!Aj;|IG^%Z!B@&{;T%s_y6qK+x+g=?|o%p*7=>!yyiZ%;qa;#zWw+Q?k~OZ ztr?BO z?kR|J+Oull>V+ORN8r@~G7PFMyq(AN2No29t$ce3E_zoVVJ$s%k;s-vvnP0Jn24<% z^a)nz@Lv^=aV#Zm)zw-8d-Y!qDaA#z0D3;Yn*G3_QwVn@aR%!|B3$nPqtn}`;q>EzCsY+R~;VDW3t-BU{6sHYhq! zse*%RV8GdS4b~QP7{0zmQIq<_)J5pA5Jek?173~)gto_bu))JAU=lrghS6-t_@d=F z+NX%qel7Y306lY|@PUdxn1JfLB%-Kbu|r_qB&N#2u|$K4Dvb35eO;$K6os};dB|2} zNX6C(QL2ZGL9|hdM)A~5>KD@inSe6^*tfuzaA@mA9^h<1K7c!W19{`wxN)$aX)a`X zZ*>n^hP@@`X}vEK4#lQDJwJ3OUQhTM2`B|uw zyB2zn<3l(#T7_*b!9nIvF;H`}8m6k6V2ENKYDbBswVZ@Eo3K|po6$96z+HoJQ^Kb+ zkbLuou~s$H)#=6RF^z3VPJ`awNb`x_7(T%Y?&vaE+oFMF^C>qd6 z6NLzV6X80U9BH{ve}n%tyw=p!B~Y3|(3IH7o0jd-$kc=|>|7EJF82q$g|rCu4=|Di z@dUgjm5E%gMhhEI!Y3zp60{`E4o{e5Lkoppw@g~mIJZ8Ln3JJb3@eU>T0xoVLeXlT zh5oHVZRTB0{_Db`Aq}cUw1C+{>$Be!)vyKJp`1~rD2F~JQ9O)ff>3fHwkeQEDis)7 zOlI}_ANiwIA6mV1>pvl}d8;o>Bq%ChCdoq)h(LBz0KMCgu8dh4eT^k#UK5o01*O zv}tAK<()p7Sw8)omcTFx9KxCjAm#w*EJ`jp1nj(sXmt);VRcH;T6t)WVNQ1V@ zPCuJ}z%mv5Fv>11uOnIEt-NkluqC9wYcmHmnD`(XWHTq~#XclHnnCppSbj_Vb zu42^Q6jhZ7ksuo6%JeyAtMNosHg%)>GUdF{kByBQc5TQT4X|X;ZpQ=-%~eZl!fkG4 zZ88-@Cs#B&P?D|IMpT`h}Q*rnE6VW7EzD4Rd%xQ zfl!ktP|KD{L0XNHXgP|nls1j(@3gy=+=uL3W&GD->CIo(r7De~1%9tm?!#Oy$JKkV z2|78(pm4OtM*?K;YG584#K6*kya@#(p@34Zh6DO&L~|$fI-2Ul%sh&IQ{1P9;K&%Yu8DK~}n1~lJAPzbvK zumUd0<#0M1$IZg~A^`3EOYDZnCU^ytLntF!AwYBFr}G>`wt2pJskvHoigU#)#hb(};sfIQ;@`xP zmZ=uOVz*RSCR=7$M2p)p+cMwMW?5tTiRG7;r!3D|{%qlR>?uPI-7P;TKPG=De=2_| zrwWsWX_)F3g~ftT_=)gSVXyG2@P$xrNH=yEuQiS_o@?A}++q3Ha;!}PJ)u(l>EIU$1Is&FyCYOo#j6)BdrIlDYo-$ zU)ngk*}lO3Bl{C}yTj$+-1syL{5>o^Dm^Ccly*sbr01oVq0f^9|oJD2A}%F~e(yka4APjnQN(GdyUhH?5QN(ne{Mv{~AMvUj(1zqC!_>e%*CZl+<5;hmBc^Jw!lv(Wi}gY4 z!`9ze$Jv~=rM9bV>utZVy>07*G|#uc>G-bnYx|REF`l)*V1L>Es(p#nB3&m@}P<-0C$39jp0FSx!ZtQ9s1w+Z(NKNEHc>4sbbwG9^= z790GAsA0X~NyA>ln}$~n9~gQK9-|MX{C?x3#$Ou`8IKxw8$UOum_$>VX|`!6O3^FE zH;o?~rFooS&-F{!2vrcI_Fo9;0^V#+JoZ=7J7VKSK3nkJN7STfgqZ^;_-W;3@D zYp}?RL$(|3Kd}GOzQg{CeZRfNak1maj;)SN=`5+#S%tRkHs_tr8-+RMsq!?rST@R{ zY?oc~^}?0HHG*u~Y`)8E5xc|!tK0e=+pE%tQWsiczi`a(rD2S5oN<}4%XpRXY2z!# z{l+fSRi?eB{iZ*f`b{Y%RV9rjmy}EqLnXIcio_krf$v(ES|5j`KS$X;+cv>=hwX0L zQ?}idDQJ_wA@74@wV9 z+fk37K`s6r>hPPW!GA^l{RFl5D=FQXx_0CA=?uDQqz;F|?r`KWTUdQh(c! zZ5(a<#Q2%95)$q>gpCuwOVJ91`9W;zEzmD;yR2gnl8_Fv5^!SY%pi@|t|6&1kWM-67X|uDGkm)$2Oy>T_|suyX@xde0h1pWAD#vDMicZ3}G@+Ou7b zJ&xzmF6?vccN}o6K&}OxTb=uzN1Yp;dz|B4Q_vS2FdsA@GQVezqlWgHkDB|;{bo)~ z7c<3NF;5&XP7-->idZO0qFbyGtHm0zPHYqxii^-%ctxKW5Zgsn>=ajstHjmfI&p)z zQQRbMMjyIWyj#3q+$KIOJ}N#Y?i6>4d&K9(m&AQyT '); - exit; - end; - -{$I-} - if ParamStr(2) <> '' then - AssignFile(fb, ParamStr(2)) - else - AssignFile(fb, ParamStr(1)+'.bin'); - rewrite(fb, 1); - - AssignFile(f, ParamStr(1)); - reset(f); - - i:= 1; - while not EOF(f) do - begin - readln(f, s); - - if s[length(s)] <> ',' then - s:= s + ','; - - tsl:= TStringList.Create; - tsl.Delimiter:= ','; //comma delimiter - tsl.QuoteChar:= #0; - tsl.StrictDelimiter := True; - tsl.DelimitedText:= s; - -// writeln('count: '+strr(tsl.Count)+', s=['+s+']'); - - for k:= 0 to sizeof(buf) do - buf[k]:= 0; - - for k:= 0 to tsl.Count-1 do - begin - b:= vall(tsl.Strings[k]); - buf[k]:= b; - end; - - BlockWrite(fb, buf, tsl.Count-1); - - inc(i); - end; - - - CloseFile(f); - - CloseFile(fb); - - IOResult; -{$I+} - - writeln('transform done.'); -end. \ No newline at end of file diff --git a/src/bin/transttf.exe b/src/bin/transttf.exe deleted file mode 100644 index ecc83e593fbe23e94ea9310cf6127fbb761b12c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150976 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
      O`M$4;>D^>dhCpR;wZA?(U9R_ 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%0ADnh)%D~Y28R4?h0BUNV{FdBwI{E!FsdI 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
    1. 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ƿ{K57 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ℜ8!28TY3x7V5TL6d<){`)P*k{kDL|d#RV!5 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 diff --git a/src/bios/logo/Projects/LOGO.bmp b/src/bios/logo/Projects/LOGO.bmp deleted file mode 100644 index 67ea48b010074122ef867388a5057bb6d9553cc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10296 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 diff --git a/src/bios/logo/Projects/MAIN.xcf b/src/bios/logo/Projects/MAIN.xcf deleted file mode 100644 index 853b628c4270595f1cce59084b4be023d5cad02c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15873 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 T!Mnh$Tqx2M*qovP+d}~0LZ<#N diff --git a/src/bios/logo/Projects/NY_Kokoshnik.bmp b/src/bios/logo/Projects/NY_Kokoshnik.bmp deleted file mode 100644 index 0c5589ec7c332073a9738927bf19fbbafc130159..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3096 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 C#3}j! diff --git a/src/bios/logo/Projects/NY_mustache.bmp b/src/bios/logo/Projects/NY_mustache.bmp deleted file mode 100644 index e423e276e664301d5e3f730de074f3d258726331..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1320 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 bmp_width then - File_save(fileNameBMP, fileNameDAT, bmp_image_offset, bmp_image_size, bmp_width, correctWidth-bmp_width) - else - File_save(fileNameBMP, fileNameDAT, bmp_image_offset, bmp_image_size) - end - end - - print("Resolution: " .. bmp_width .. "x" .. bmp_height, fileNameDAT) - end - ENDLUA - - MODULE MAIN_LOGO -Pallete: - INCBIN 'Build/Bin/LOGO_PAL.BIN' -.length EQU $-Pallete -Raster: - INCBIN 'Build/Bin/LOGO_DAT.BIN' -.length EQU $-Raster - -/* - IF Pashalki - - - MACRO _PASHALKI_CODE - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - - ld e,(RebootDate.month) - SLA e - xor a - ld - - EX AF,AF' - OUT (SLOT3),A - - - ENDM - -months_table: - WORD days_table.January - WORD days_table.February - WORD days_table.March - WORD days_table.April - WORD days_table.May - WORD days_table.June - WORD days_table.July - WORD days_table.August - WORD days_table.September - WORD days_table.October - WORD days_table.November - WORD days_table.December - -days_table: -.January: DZ 1,2,3,4,5,6,7 -.February EQU 0 -.March EQU 0 -.April EQU 0 -.May EQU 0 -.June EQU 0 -.July EQU 0 -.August EQU 0 -.September EQU 0 -.October EQU 0 -.November EQU 0 -.December: DZ 31 - -NewYear: INCLUDE './src/bios/logo/use/New_Year.inc' -;.March8: INCLUDE './src/bios/logo/use/March_8.inc' - - ENDIF - - - and a - ld b,0 - ld hl,months_table - ld de,months_table+1 - ld a,month - call FIND_NEXT - - ld hl,days_table - adc hl,de - ld ix,hl - ld e,(hl) - inc hl - ld d,(hl) - ex de,hl - ld de,days_table+1 - ld a,day - call FIND_NEXT - - ld hl,sprites_table - adc hl,de - - call Sprites ; hl ⠡ ᮢ ⠡ ࠩ⮢ (SP_Table) - - -FIND_NEXT: - ld c,(hl) ; ⠡ BYTE - inc hl - CPIR - jr nz,.nothing - sbc hl,de - sla l - ex de,hl - ret - -days_table: - WORD december_days_table - WORD january_days_table - WORD march_days_table - WORD december_days_table -;----------------[Months table]----------------[v] -months_table: - BYTE months_table.length-1 -.months: - BYTE 01 ; - BYTE 03 ; - BYTE 12 ; -.length equ $-months_table - - ASSERT months_table.length < 14, ERROR!!! "months_table" should be less than 14 bytes! -;----------------------------------------------[^] - -;-------------[December days table]------------[v] -december_days_table: - BYTE december_days_table.length-1 -.months: - BYTE 31 ; -.length equ $-december_days_table - - ASSERT december_days_table.length < 33, ERROR!!! "december_days_table" should be less than 33 bytes! -;----------------------------------------------[^] - -;-------------[January days table]-------------[v] -january_days_table: - BYTE january_days_table.length-1 -.months: - BYTE 01 ; - BYTE 02 ; - BYTE 03 ; - BYTE 04 ; - BYTE 05 ; - BYTE 06 ; - BYTE 07 ; ⢮ -.length equ $-january_days_table - - ASSERT january_days_table.length < 33, ERROR!!! "january_days_table" should be less than 33 bytes! -;----------------------------------------------[^] - -;-------------[March days table]------------[v] -march_days_table: - BYTE december_days_table.length-1 -.months: - BYTE 08 ; ⪨ ᥬ -.length equ $-december_days_table - - ASSERT december_days_table.length < 33, ERROR!!! "december_days_table" should be less than 33 bytes! -;----------------------------------------------[^] -*/ - - ENDMODULE diff --git a/src/bios/logo/clean.cmd b/src/bios/logo/clean.cmd deleted file mode 100644 index ca561e9..0000000 --- a/src/bios/logo/clean.cmd +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -del *.bin /s -del *.lst /s -del *.log /s diff --git a/src/bios/logo/compile.log b/src/bios/logo/compile.log deleted file mode 100644 index 4514673..0000000 --- a/src/bios/logo/compile.log +++ /dev/null @@ -1,4 +0,0 @@ -Extractor BMP-files for Sprinter BIOS logo -Copyright (c) 2022 Sprinter Team -File [psfathers.bmp], found 8 bit BMP 128x72, output RGB4 [LOGO_PAL.BIN] and [LOGO_DAT.BIN] -Done. diff --git a/src/bios/logo/make.cmd b/src/bios/logo/make.cmd deleted file mode 100644 index 9ca40da..0000000 --- a/src/bios/logo/make.cmd +++ /dev/null @@ -1,23 +0,0 @@ -rem @echo off -set BIN=..\..\bin -set LOG=compile.log -for /F %%i in ('date /t') do set mydate=%%i -for /F %%i in ('time /t') do set mytime=%%i -set mydt=%mydate% %mytime% - -rem set LOGO_FILE=peters.bmp -set LOGO_FILE=psfathers.bmp - -echo 5. [1/1] BMP LOGO -echo %mydt%: [1/1] BMP LOGO > %LOG% -%BIN%\bmp_extract.exe %LOGO_FILE% /pn LOGO_PAL.BIN /dn LOGO_DAT.BIN /pt 4 >> %LOG% -if errorlevel 1 goto error - -goto quit - -:error -echo ERROR during compile BMP LOGO -pause 0 -exit 3 - -:quit diff --git a/src/bios/logo/use/LOGO.bmp b/src/bios/logo/use/LOGO.bmp deleted file mode 100644 index 67ea48b010074122ef867388a5057bb6d9553cc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10296 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 diff --git a/src/bios/logo/use/NY_Kokoshnik.bmp b/src/bios/logo/use/NY_Kokoshnik.bmp deleted file mode 100644 index 0c5589ec7c332073a9738927bf19fbbafc130159..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3096 zcma)6YjD)o75<=v_Yi`47%*=ds390o%Eku9O9BD1c6nrZBo>so>wtMEI0B69prt&F z%qx)%7$IIO0;>eGiMu24YC}h&VPhxCjr+sdiDojTsoh6P4N0e+_D5$cn;5XY?)1!D z-E+@5-*>L=Irl!Fn>r9}GN%_X)zM};Bi$K2(6`P0O&?&=j0dC5(E8~K4C>JneR}l5 zP)G0Ct3Q6)ihrUH7C!;FdiO&{?}3=_%**@r#G<|fu)1Gw{Akc1Jkx&&UUzcl_8){- z`VPUo0Z*aNlf$rKzyL44Q`2)%`D_XbXJ(*m){n7x`eM92XDl*Z6o$;m!z^kc#?M}f8QD{ilQjoJ zXKhB>b9p$CosN{ud{CL|F(i}0h^)<+oVg9dvvwiNlZoLkdNE@D4y0wjfvUyNI`#t? zv7iXAFIj|m9z;A}(xLhDmEG;raP?TzYLSX0AJe%LOYjZdEnLZeN3m>&_sHU4|_i zH$&O97E@jmk-n(};|mUBT>eF<%&SngZNU7EZ{sJ$Tfr4=!P5m-@kY^3Oxtn}@4mSW zEBJM&-sQv99a}Ny&~l_7S%&Gmk73E1XEC+-G^Q}uk+o+(u9h;mRJsEtdrI-bk$lYD z`2nU^c`)thPOLw?9lzSg;?RM;2puTK?EM!pwWxpr|2A&Fe+k(i??mj{dF;J@ z3g)%Tm}_mtwrigv=eENc{2n)JKEzVOqd~ih<)0l!_<9&tZ3sCH?lILvacibJNInmU`)*jK)lxS|(f0#{0A>Hqv1XQyFKs8jt zbQ|AH6P2is07ND-t7_fGHw86TvJ}$37gJ|gD$ry+V(6&FnpBGQ>E;6f(R7NZy_Wr0 z#*Xo-ZFviMN{hAuE$`fd*DlV@fv(bSb8&ycJ+<57A`e zigS%+JZ(gR{`M2=m`4_4(ITE}=Ho6RYo=%zyhPJP=M{g)zy~Wy;&qep3W8|~W;o#| zUaOq-P(-ICS?&r@WPyng%ES8O9!qfiDiKsmV#Io(n(Xz+5?`)c zf~vbi0dK6WNdtzfiPLP67l|RWEH6r;C<^7GAc@Yeva(KO-rt}JO>Vs{cT}gWpk+&Z zO`}0VBEzx_?RA7=VEwlV`xn+5a^vDl~C&vuk ztJ)!2i}OtL=Uhoy( zYGi0TD7bW0mphzuLQ^@*6=}8^w!+VwR;0mp2zgHCy!N*dx8d*HyDIV8A{&%kluNK> zH!VrDTed|PXZk%-qFG$pawIfj7K`0h^6iGwAIp}191 z4HsHeu&#w?o124_#RkHn>Q;0$NvEr#Y3PAlhD><`$+jiIM~S2+9FBGV*M~ccszE}z zkRl^Shx+-Bp`@?a|aKwu1g2(FSPCrCC?;=G}L=6ziMbU=#(9xYD z6Rx6>)HcRzYMIAN+Fg7i8g*`xvmL({?f58ni!h^xY3l!PbSq6%>D&PAw*-eR#(>&IVDMyluNY+ zWwSHd-bz>dM>VIJX6^3GUe2~#+S#?nbnJVMw!SmZ^ZU;8Jm2U2?_Df+9glAO^ubl! zW{NNnF%CnW{zhac&oSr(E$M;jI6Wqe)5lWW_4JMSM0-De0wH4GJcEgN8JG|tzL694 z2sSh(dZGaznVK@&$eax(AU85)jiEUUj3+Z;k`?QWjma?4C)vo191|1vn2CL6Q#mxr zfGE+=G`7RmVk(A~_5|7*A+emr=N7j3+D>7KofSK6O)#7~n@zU%OmmoykHn2t(`F!- zc#+~Xg)mnOeBCT@bnwT_NrdNoCVR-Km}|i%Z!ZqcnMsI82uJ*;Bc11qxn~@6e1mZC ziNZ6`g>ac4mUB{&%#Wio&8!|4pk@0PG-svZ zcPJ9K;s`u;loGnF2G^VuxMXx9+r5wGybK!hvdGBeOQ|?oLeH_ibR9du z;iJ_g)Mew<5=TH|Dv2k{>8>cl|9Bfdtx2>TKZdk%7hTF?mbE0)bD|Jg*+WjBs^V&m z5}~$?p3{|lbEXX6ZUr$l*9p2(Lg0x3zHKY&R0&it=yS0|RomKRNxYe+98m575=y&9j>wJm~E~uBu?= zKsCpov?2egiaYo264m#L!*^biJ5bNFhqqDuTF0ZuPk8j*V-nQoIQ;Wv&i>F%hU#B3 z|LoxTix*sfd6(~h9H9D_VSao0J2zgx<<;wdc=PvPjE;_K@qRSgc{`$ebTq7130hbD zO^B=-){I3z1U_sdYSp`(S`>!{)oS(72Upxi1_uXU4~>j!h6G)oN;9Yu#u9=`jE-pY wV#~WDm0B~X&8dd8%KPsM+LJCVjY*>#jWDbdbB)6Piq6pa??YpfAc#5m4}~KZR{#J2 diff --git a/src/bios/logo/use/NY_mustache_DAT.BIN b/src/bios/logo/use/NY_mustache_DAT.BIN deleted file mode 100644 index 35eb991..0000000 --- a/src/bios/logo/use/NY_mustache_DAT.BIN +++ /dev/null @@ -1 +0,0 @@ -٦ \ No newline at end of file diff --git a/src/bios/logo/use/New_Year.inc b/src/bios/logo/use/New_Year.inc deleted file mode 100644 index 5489409..0000000 --- a/src/bios/logo/use/New_Year.inc +++ /dev/null @@ -1,16 +0,0 @@ - MODULE _mNewYear - - LUA PASS1 - make_pic_files ("./src/bios/logo/use/NY_Kokoshnik", 0, 1) - make_pic_files ("./src/bios/logo/use/NY_mustache", 0, 1) - print() - ENDLUA - - BYTE 2 ; ⢮ ࠩ⮢ - EasterTable 48, 42, 13, 2, sprite1 - EasterTable 37, 6, 69, 26, sprite2 -sprite1: INCBIN './src/bios/logo/use/NY_Kokoshnik_DAT.bin' -sprite2: INCBIN './src/bios/logo/use/NY_mustache_DAT.bin' - - ENDMODULE -; \ No newline at end of file diff --git a/src/bios/rom/_not_used/EasterSprites.asm b/src/bios/rom/_not_used/EasterSprites.asm deleted file mode 100644 index 981249e..0000000 --- a/src/bios/rom/_not_used/EasterSprites.asm +++ /dev/null @@ -1,41 +0,0 @@ -Sprites: -; 室 IX ⠡ 뢮묨 ࠩ⠬ - IN A,(SLOT1) - LD H,A - IN A,(PORT_Y) - LD L,A - PUSH HL - - LD A,#58 - OUT (SLOT1),A - -; ld ix,SP_Table - ld b,(ix+0) - inc ix -.loop: - push bc - LD A,(ix+str_EasterSprites.SpHeight) ; !!!!! न ⨭ Y + ⨭ - ld l,(ix+str_EasterSprites.SpAddress) - ld h,(ix+str_EasterSprites.SpAddress+1) -.putSprite: - DEC A - OUT (PORT_Y),A - LD E,(ix+str_EasterSprites.SpXCoord) ; !HARDCODE न ⨭ - LD D,(ix+str_EasterSprites.SpXCoord+1) - LD C,(ix+str_EasterSprites.SpWidth) ; !HARDCODE ਧ⠫쭮 ⨭ - LD B,(ix+str_EasterSprites.SpWidth+1) - LDIR - CP (IX+str_EasterSprites.SpYCoord) - JP NZ,.putSprite - ld c,str_EasterSprites - add ix,bc - pop bc - djnz .loop - - POP BC - LD A,B - OUT (SLOT1),A - LD A,C - OUT (PORT_Y),A - XOR A - RET \ No newline at end of file diff --git a/src/bios/shared/includes.inc b/src/bios/shared/includes.inc deleted file mode 100644 index a3ecdd6..0000000 --- a/src/bios/shared/includes.inc +++ /dev/null @@ -1,17 +0,0 @@ -; -;---------[All shared includes]--------- - INCLUDE 'src/bios/shared/DEFINES.INC' ; Shared defines - INCLUDE 'Shared_Includes/structures/FileSystem.inc' - INCLUDE 'Shared_Includes/structures/ATA_ATAPI.inc' - INCLUDE 'src/bios/Loader/Loader.asm' ; Bitstream loader as macros - INCLUDE 'src/bios/shared/CompMacro.asm' ; - INCLUDE 'Shared_Includes/constants/SP2000.inc' ; ⠭ - INCLUDE 'Shared_Includes/constants/zx_char_codes.inc' ; ⠭ - INCLUDE 'Shared_Includes/constants/zx_vars.inc' ; - INCLUDE 'Shared_Includes/macroses/macros.z80' - INCLUDE 'src/bios/ROM/MEM_MAP.inc' ; - INCLUDE 'src/bios/shared/VERSION.inc' ; EXP ROM - INCLUDE 'Shared_Includes/constants/BIOS_EQU.inc' - INCLUDE 'src/bios/ROM/BIOS.inc' -;--------------------------------------- -;