From 91524ab7246cd87f8340c25b674268278bf78720 Mon Sep 17 00:00:00 2001 From: Philip Smart Date: Thu, 10 Mar 2022 20:31:48 +0000 Subject: [PATCH] Updates, still undergoing a lot of changes for the emumz project so consider this branch development and unstable --- common/emumz.c | 200 +++++++++++++++++++++++++++++++- common/tranzputer.c | 33 +++--- libraries/lib/libimath2-k64f.a | Bin 15012 -> 15012 bytes libraries/lib/libumansi-k64f.a | Bin 126938 -> 126938 bytes libraries/lib/libummath-k64f.a | Bin 2660 -> 2660 bytes libraries/lib/libummathf-k64f.a | Bin 64036 -> 64036 bytes libraries/lib/libummisc-k64f.a | Bin 6222 -> 6222 bytes libraries/lib/libumstdio-k64f.a | Bin 80050 -> 80050 bytes 8 files changed, 215 insertions(+), 18 deletions(-) diff --git a/common/emumz.c b/common/emumz.c index 06087eb..86e8419 100644 --- a/common/emumz.c +++ b/common/emumz.c @@ -114,8 +114,8 @@ const static t_emuControl emuControlDefault = { } }; -// Default configuration values for each emulation. As the number of target hosts on which the tranZPUter and emuMZ increase this will increase. This initial aim is that one binary fits all targets, ie. upload this software into an MZ-700 hosted -// tranZPUter or MZ-2000 hosted tranZPUter it will detect the hardware and adapt. This is fine so long as there is free resources in the MK64FX512's 512KB ROM and FPGA but may need to be revisited in future, ie. be stored on disk. +// Default configuration values for each emulation. As the number of target hosts on which the tranZPUter and emuMZ increase this will increase. This initial aim is that one binary fits all targets, ie. upload this software into an MZ-700/MZ-80A/MZ-2000 +// hosted tranZPUter it will detect the hardware and adapt. This is fine so long as there is free resources in the MK64FX512's 512KB ROM and FPGA but may need to be revisited in future, ie. be stored on disk. const static t_emuConfig emuConfigDefault_MZ700 = { .machineModel = MZ80K, .machineGroup = GROUP_MZ80K, .machineChanged = 1, .params[MZ80K] = { @@ -307,6 +307,198 @@ const static t_emuConfig emuConfigDefault_MZ700 = { } }; +// Default configuration for an MZ-80A host. +const static t_emuConfig emuConfigDefault_MZ80A = { + .machineModel = MZ80K, .machineGroup = GROUP_MZ80K, .machineChanged = 1, + .params[MZ80K] = { + .cpuSpeed = 0 , .memSize = 1, .audioSource = 0, .audioHardware = 1, .audioVolume = 1, .audioMute = 0, .audioMix = 0, .displayType = MZ_EMU_DISPLAY_MONO, .displayOption = 0, .displayOutput = VMMODE_VGA_640x480, + .vramMode = 0, .vramWaitMode = 0, .gramMode = 0, .pcgMode = 0, .aspectRatio = 0, .scanDoublerFX = 0, .loadDirectFilter = 0, + .mz800Mode = 0, .mz800Printer = 0, .mz800TapeIn = 0, .queueTapeFilter = 0, .tapeButtons = 3, .fastTapeLoad = 2, .tapeSavePath = "0:\\MZF\\MZ80K", + .cmtAsciiMapping = 3, .cmtMode = 0, .fddEnabled = 0, .autoStart = 0, + .fdd[0] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_160K, .polarity = POLARITY_NORMAL, .updateMode = UPDATEMODE_READWRITE }, + .fdd[1] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_160K, .polarity = POLARITY_NORMAL, .updateMode = UPDATEMODE_READWRITE }, + .fdd[2] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_160K, .polarity = POLARITY_NORMAL, .updateMode = UPDATEMODE_READWRITE }, + .fdd[3] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_160K, .polarity = POLARITY_NORMAL, .updateMode = UPDATEMODE_READWRITE }, + .romMonitor40 = { .romFileName = "0:\\TZFS\\sp1002.rom", .romEnabled = 1, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00001000 }, + .romMonitor80 = { .romFileName = "", .romEnabled = 0, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00001000 }, + .romCG = { .romFileName = "0:\\TZFS\\mz80k_cgrom.rom", .romEnabled = 1, .loadAddr = MZ_EMU_CGROM_ADDR, .loadSize = 0x00000800 }, + .romKeyMap = { .romFileName = "0:\\TZFS\\80A_80K_km.rom", .romEnabled = 1, .loadAddr = MZ_EMU_REG_KEYB_ADDR+MZ_EMU_KEYB_MAP_ADDR, .loadSize = 0x00000200 }, + .romUser = { .romFileName = "", .romEnabled = 0, .loadAddr = 0x000000, .loadSize = 0x00001000 }, + .romFDC = { .romFileName = "0:\\TZFS\\mz80kfdif.rom", .romEnabled = 1, .loadAddr = MZ_EMU_FDC_ROM_ADDR, .loadSize = 0x00000400 }, + .loadApp = { .appFileName = "", .appEnabled = 0, .preKeyInsertion = {}, .postKeyInsertion = {} } + }, + .params[MZ80C] = { + .cpuSpeed = 0 , .memSize = 1, .audioSource = 0, .audioHardware = 1, .audioVolume = 1, .audioMute = 0, .audioMix = 0, .displayType = MZ_EMU_DISPLAY_MONO, .displayOption = 0, .displayOutput = VMMODE_VGA_640x480, + .vramMode = 0, .vramWaitMode = 0, .gramMode = 0, .pcgMode = 0, .aspectRatio = 0, .scanDoublerFX = 0, .loadDirectFilter = 0, + .mz800Mode = 0, .mz800Printer = 0, .mz800TapeIn = 0, .queueTapeFilter = 0, .tapeButtons = 3, .fastTapeLoad = 2, .tapeSavePath = "0:\\MZF\\MZ80C", + .cmtAsciiMapping = 3, .cmtMode = 0, .fddEnabled = 0, .autoStart = 0, + .fdd[0] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_160K, .polarity = POLARITY_NORMAL, .updateMode = UPDATEMODE_READWRITE }, + .fdd[1] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_160K, .polarity = POLARITY_NORMAL, .updateMode = UPDATEMODE_READWRITE }, + .fdd[2] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_160K, .polarity = POLARITY_NORMAL, .updateMode = UPDATEMODE_READWRITE }, + .fdd[3] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_160K, .polarity = POLARITY_NORMAL, .updateMode = UPDATEMODE_READWRITE }, + .romMonitor40 = { .romFileName = "0:\\TZFS\\sp1002.rom", .romEnabled = 1, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00001000 }, + .romMonitor80 = { .romFileName = "", .romEnabled = 0, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00001000 }, + .romCG = { .romFileName = "0:\\TZFS\\mz80c_cgrom.rom", .romEnabled = 1, .loadAddr = MZ_EMU_CGROM_ADDR, .loadSize = 0x00000800 }, + .romKeyMap = { .romFileName = "0:\\TZFS\\80A_80C_km.rom", .romEnabled = 1, .loadAddr = MZ_EMU_REG_KEYB_ADDR+MZ_EMU_KEYB_MAP_ADDR, .loadSize = 0x00000200 }, + .romUser = { .romFileName = "", .romEnabled = 0, .loadAddr = 0x000000, .loadSize = 0x00001000 }, + .romFDC = { .romFileName = "0:\\TZFS\\mz80kfdif.rom", .romEnabled = 1, .loadAddr = MZ_EMU_FDC_ROM_ADDR, .loadSize = 0x00000400 }, + .loadApp = { .appFileName = "", .appEnabled = 0, .preKeyInsertion = {}, .postKeyInsertion = {} } + }, + .params[MZ1200] = { + .cpuSpeed = 0 , .memSize = 1, .audioSource = 0, .audioHardware = 1, .audioVolume = 1, .audioMute = 0, .audioMix = 0, .displayType = MZ_EMU_DISPLAY_MONO, .displayOption = 0, .displayOutput = VMMODE_VGA_640x480, + .vramMode = 0, .vramWaitMode = 0, .gramMode = 0, .pcgMode = 0, .aspectRatio = 0, .scanDoublerFX = 0, .loadDirectFilter = 0, + .mz800Mode = 0, .mz800Printer = 0, .mz800TapeIn = 0, .queueTapeFilter = 0, .tapeButtons = 3, .fastTapeLoad = 2, .tapeSavePath = "0:\\MZF\\MZ1200", + .cmtAsciiMapping = 3, .cmtMode = 0, .fddEnabled = 1, .autoStart = 0, + .fdd[0] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[1] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[2] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[3] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .romMonitor40 = { .romFileName = "0:\\TZFS\\sa1510.rom", .romEnabled = 1, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00001000 }, + .romMonitor80 = { .romFileName = "", .romEnabled = 0, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00001000 }, + .romCG = { .romFileName = "0:\\TZFS\\mz80c_cgrom.rom", .romEnabled = 1, .loadAddr = MZ_EMU_CGROM_ADDR, .loadSize = 0x00000800 }, + .romKeyMap = { .romFileName = "0:\\TZFS\\80A_1200_km.rom", .romEnabled = 1, .loadAddr = MZ_EMU_REG_KEYB_ADDR+MZ_EMU_KEYB_MAP_ADDR, .loadSize = 0x00000200 }, + .romUser = { .romFileName = "", .romEnabled = 0, .loadAddr = 0x000000, .loadSize = 0x00000100 }, + .romFDC = { .romFileName = "0:\\TZFS\\mz80a_fdc.rom", .romEnabled = 1, .loadAddr = MZ_EMU_FDC_ROM_ADDR, .loadSize = 0x00000800 }, + .loadApp = { .appFileName = "", .appEnabled = 0, .preKeyInsertion = {}, .postKeyInsertion = {} } + }, + .params[MZ80A] = { + .cpuSpeed = 0 , .memSize = 1, .audioSource = 0, .audioHardware = 1, .audioVolume = 1, .audioMute = 0, .audioMix = 0, .displayType = MZ_EMU_DISPLAY_MONO, .displayOption = 0, .displayOutput = VMMODE_VGA_640x480, + .vramMode = 0, .vramWaitMode = 0, .gramMode = 0, .pcgMode = 0, .aspectRatio = 0, .scanDoublerFX = 0, .loadDirectFilter = 0, + .mz800Mode = 0, .mz800Printer = 0, .mz800TapeIn = 0, .queueTapeFilter = 0, .tapeButtons = 3, .fastTapeLoad = 2, .tapeSavePath = "0:\\MZF\\MZ80A", + .cmtAsciiMapping = 3, .cmtMode = 0, .fddEnabled = 1, .autoStart = 0, + .fdd[0] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[1] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[2] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[3] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .romMonitor40 = { .romFileName = "0:\\TZFS\\sa1510.rom", .romEnabled = 1, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00001000 }, + .romMonitor80 = { .romFileName = "0:\\TZFS\\sa1510-8.rom", .romEnabled = 1, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00001000 }, + .romCG = { .romFileName = "0:\\TZFS\\mz80a_cgrom.rom", .romEnabled = 1, .loadAddr = MZ_EMU_CGROM_ADDR, .loadSize = 0x00000800 }, + .romKeyMap = { .romFileName = "0:\\TZFS\\80A_80A_km.rom", .romEnabled = 1, .loadAddr = MZ_EMU_REG_KEYB_ADDR+MZ_EMU_KEYB_MAP_ADDR, .loadSize = 0x00000200 }, + .romUser = { .romFileName = "", .romEnabled = 0, .loadAddr = MZ_EMU_USER_ROM_ADDR, .loadSize = 0x00000800 }, + .romFDC = { .romFileName = "0:\\TZFS\\mz80a_fdc.rom", .romEnabled = 1, .loadAddr = MZ_EMU_FDC_ROM_ADDR, .loadSize = 0x00000800 }, + .loadApp = { .appFileName = "", .appEnabled = 0, .preKeyInsertion = {}, .postKeyInsertion = {} } + }, + .params[MZ700] = { + .cpuSpeed = 0 , .memSize = 1, .audioSource = 0, .audioHardware = 1, .audioVolume = 1, .audioMute = 0, .audioMix = 0, .displayType = MZ_EMU_DISPLAY_COLOUR, .displayOption = 0, .displayOutput = VMMODE_VGA_640x480, + .vramMode = 0, .vramWaitMode = 0, .gramMode = 0, .pcgMode = 0, .aspectRatio = 0, .scanDoublerFX = 0, .loadDirectFilter = 0, + .mz800Mode = 0, .mz800Printer = 0, .mz800TapeIn = 0, .queueTapeFilter = 0, .tapeButtons = 3, .fastTapeLoad = 2, .tapeSavePath = "0:\\MZF\\MZ700", + .cmtAsciiMapping = 3, .cmtMode = 0, .fddEnabled = 1, .autoStart = 0, + .fdd[0] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[1] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[2] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[3] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .romMonitor40 = { .romFileName = "0:\\TZFS\\1z-013a.rom", .romEnabled = 1, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00001000 }, + .romMonitor80 = { .romFileName = "0:\\TZFS\\1z-013a-8.rom", .romEnabled = 1, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00001000 }, + .romCG = { .romFileName = "0:\\TZFS\\mz700_cgrom.rom", .romEnabled = 1, .loadAddr = MZ_EMU_CGROM_ADDR, .loadSize = 0x00001000 }, + .romKeyMap = { .romFileName = "0:\\TZFS\\80A_700_km.rom", .romEnabled = 1, .loadAddr = MZ_EMU_REG_KEYB_ADDR+MZ_EMU_KEYB_MAP_ADDR, .loadSize = 0x00000200 }, + .romUser = { .romFileName = "", .romEnabled = 0, .loadAddr = 0x000000, .loadSize = 0x00001000 }, + .romFDC = { .romFileName = "0:\\TZFS\\mz-1e05.rom", .romEnabled = 1, .loadAddr = MZ_EMU_FDC_ROM_ADDR, .loadSize = 0x00001000 }, + .loadApp = { .appFileName = "", .appEnabled = 0, .preKeyInsertion = {}, .postKeyInsertion = {} } + }, + .params[MZ800] = { + .cpuSpeed = 0 , .memSize = 1, .audioSource = 0, .audioHardware = 1, .audioVolume = 1, .audioMute = 0, .audioMix = 0, .displayType = MZ_EMU_DISPLAY_COLOUR, .displayOption = 0, .displayOutput = VMMODE_VGA_640x480, + .vramMode = 0, .vramWaitMode = 0, .gramMode = 0, .pcgMode = 0, .aspectRatio = 0, .scanDoublerFX = 0, .loadDirectFilter = 0, + .mz800Mode = 0, .mz800Printer = 0, .mz800TapeIn = 0, .queueTapeFilter = 0, .tapeButtons = 3, .fastTapeLoad = 2, .tapeSavePath = "0:\\MZF\\MZ800", + .cmtAsciiMapping = 3, .cmtMode = 0, .fddEnabled = 1, .autoStart = 0, + .fdd[0] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[1] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[2] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[3] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .romMonitor40 = { .romFileName = "0:\\TZFS\\mz800_ipl.rom", .romEnabled = 1, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00004000 }, + .romMonitor80 = { .romFileName = "", .romEnabled = 0, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00001000 }, + .romCG = { .romFileName = "0:\\TZFS\\mz800_cgrom.rom", .romEnabled = 0, .loadAddr = MZ_EMU_CGROM_ADDR, .loadSize = 0x00001000 }, + .romKeyMap = { .romFileName = "0:\\TZFS\\80A_800_km.rom", .romEnabled = 1, .loadAddr = MZ_EMU_REG_KEYB_ADDR+MZ_EMU_KEYB_MAP_ADDR, .loadSize = 0x00000200 }, + .romUser = { .romFileName = "", .romEnabled = 0, .loadAddr = 0x000000, .loadSize = 0x00001000 }, + .romFDC = { .romFileName = "", .romEnabled = 0, .loadAddr = 0x000000, .loadSize = 0x00000100 }, + .loadApp = { .appFileName = "", .appEnabled = 0, .preKeyInsertion = {}, .postKeyInsertion = {} } + }, + .params[MZ1500] = { + .cpuSpeed = 0 , .memSize = 1, .audioSource = 0, .audioHardware = 1, .audioVolume = 1, .audioMute = 0, .audioMix = 0, .displayType = MZ_EMU_DISPLAY_COLOUR, .displayOption = 0, .displayOutput = VMMODE_VGA_640x480, + .vramMode = 0, .vramWaitMode = 0, .gramMode = 0, .pcgMode = 0, .aspectRatio = 0, .scanDoublerFX = 0, .loadDirectFilter = 0, + .mz800Mode = 0, .mz800Printer = 0, .mz800TapeIn = 0, .queueTapeFilter = 0, .tapeButtons = 3, .fastTapeLoad = 2, .tapeSavePath = "0:\\MZF\\MZ1500", + .cmtAsciiMapping = 3, .cmtMode = 0, .fddEnabled = 1, .autoStart = 0, + .fdd[0] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[1] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[2] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[3] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .romMonitor40 = { .romFileName = "0:\\TZFS\\mz1500_ipl.rom", .romEnabled = 1, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00004000 }, + .romMonitor80 = { .romFileName = "", .romEnabled = 0, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00001000 }, + .romCG = { .romFileName = "0:\\TZFS\\mz1500_cgrom.rom", .romEnabled = 0, .loadAddr = MZ_EMU_CGROM_ADDR, .loadSize = 0x00001000 }, + .romKeyMap = { .romFileName = "0:\\TZFS\\80A_1500_km.rom", .romEnabled = 1, .loadAddr = MZ_EMU_REG_KEYB_ADDR+MZ_EMU_KEYB_MAP_ADDR, .loadSize = 0x00000200 }, + .romUser = { .romFileName = "", .romEnabled = 0, .loadAddr = 0x000000, .loadSize = 0x00001000 }, + .romFDC = { .romFileName = "", .romEnabled = 0, .loadAddr = 0x000000, .loadSize = 0x00000100 }, + .loadApp = { .appFileName = "", .appEnabled = 0, .preKeyInsertion = {}, .postKeyInsertion = {} } + }, + .params[MZ80B] = { + .cpuSpeed = 0 , .memSize = 1, .audioSource = 0, .audioHardware = 1, .audioVolume = 1, .audioMute = 0, .audioMix = 0, .displayType = MZ_EMU_DISPLAY_MONO, .displayOption = 2, .displayOutput = VMMODE_VGA_640x480, + .vramMode = 0, .vramWaitMode = 0, .gramMode = 0, .pcgMode = 0, .aspectRatio = 0, .scanDoublerFX = 0, .loadDirectFilter = 0, + .mz800Mode = 0, .mz800Printer = 0, .mz800TapeIn = 0, .queueTapeFilter = 0, .tapeButtons = 3, .fastTapeLoad = 2, .tapeSavePath = "0:\\MZF\\MZ80B", + .cmtAsciiMapping = 3, .cmtMode = 0, .fddEnabled = 1, .autoStart = 0, + .fdd[0] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[1] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[2] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[3] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .romMonitor40 = { .romFileName = "0:\\TZFS\\mz80b_ipl.rom", .romEnabled = 1, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00000800 }, + .romMonitor80 = { .romFileName = "", .romEnabled = 0, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00000800 }, + .romCG = { .romFileName = "0:\\TZFS\\mz80b_cgrom.rom", .romEnabled = 1, .loadAddr = MZ_EMU_CGROM_ADDR, .loadSize = 0x00000800 }, + .romKeyMap = { .romFileName = "0:\\TZFS\\80A_80B_km.rom", .romEnabled = 1, .loadAddr = MZ_EMU_REG_KEYB_ADDR+MZ_EMU_KEYB_MAP_ADDR, .loadSize = 0x00000200 }, + .romUser = { .romFileName = "", .romEnabled = 0, .loadAddr = 0x000000, .loadSize = 0x00000100 }, + .romFDC = { .romFileName = "", .romEnabled = 0, .loadAddr = 0x000000, .loadSize = 0x00000100 }, + .loadApp = { .appFileName = "", .appEnabled = 0, .preKeyInsertion = {}, .postKeyInsertion = {} } + }, + .params[MZ2000] = { + .cpuSpeed = 0 , .memSize = 1, .audioSource = 0, .audioHardware = 1, .audioVolume = 1, .audioMute = 0, .audioMix = 0, .displayType = MZ_EMU_DISPLAY_MONO, .displayOption = 4, .displayOutput = VMMODE_VGA_640x480, + .vramMode = 0, .vramWaitMode = 0, .gramMode = 0, .pcgMode = 0, .aspectRatio = 0, .scanDoublerFX = 0, .loadDirectFilter = 0, + .mz800Mode = 0, .mz800Printer = 0, .mz800TapeIn = 0, .queueTapeFilter = 0, .tapeButtons = 3, .fastTapeLoad = 2, .tapeSavePath = "0:\\MZF\\MZ2000", + .cmtAsciiMapping = 3, .cmtMode = 0, .fddEnabled = 1, .autoStart = 0, + .fdd[0] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[1] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[2] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[3] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .romMonitor40 = { .romFileName = "0:\\TZFS\\mz2000_ipl.rom", .romEnabled = 1, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00001000 }, + .romMonitor80 = { .romFileName = "", .romEnabled = 0, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00001000 }, + .romCG = { .romFileName = "0:\\TZFS\\mz2000_cgrom.rom", .romEnabled = 1, .loadAddr = MZ_EMU_CGROM_ADDR, .loadSize = 0x00000800 }, + .romKeyMap = { .romFileName = "0:\\TZFS\\80A_2000_km.rom", .romEnabled = 1, .loadAddr = MZ_EMU_REG_KEYB_ADDR+MZ_EMU_KEYB_MAP_ADDR, .loadSize = 0x00000200 }, + .romUser = { .romFileName = "", .romEnabled = 0, .loadAddr = 0x000000, .loadSize = 0x00000100 }, + .romFDC = { .romFileName = "", .romEnabled = 0, .loadAddr = 0x000000, .loadSize = 0x00000100 }, + .loadApp = { .appFileName = "", .appEnabled = 0, .preKeyInsertion = {}, .postKeyInsertion = {} } + }, + .params[MZ2200] = { + .cpuSpeed = 0 , .memSize = 1, .audioSource = 0, .audioHardware = 1, .audioVolume = 1, .audioMute = 0, .audioMix = 0, .displayType = MZ_EMU_DISPLAY_MONO, .displayOption = 0, .displayOutput = VMMODE_VGA_640x480, + .vramMode = 0, .vramWaitMode = 0, .gramMode = 0, .pcgMode = 0, .aspectRatio = 0, .scanDoublerFX = 0, .loadDirectFilter = 0, + .mz800Mode = 0, .mz800Printer = 0, .mz800TapeIn = 0, .queueTapeFilter = 0, .tapeButtons = 3, .fastTapeLoad = 2, .tapeSavePath = "0:\\MZF\\MZ2200", + .cmtAsciiMapping = 3, .cmtMode = 0, .fddEnabled = 1, .autoStart = 0, + .fdd[0] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[1] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[2] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[3] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .romMonitor40 = { .romFileName = "0:\\TZFS\\mz2200-ipl.rom", .romEnabled = 1, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00001000 }, + .romMonitor80 = { .romFileName = "", .romEnabled = 0, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00001000 }, + .romCG = { .romFileName = "0:\\TZFS\\mz2200_cgrom.rom", .romEnabled = 1, .loadAddr = MZ_EMU_CGROM_ADDR, .loadSize = 0x00000800 }, + .romKeyMap = { .romFileName = "0:\\TZFS\\80A_2200_km.rom", .romEnabled = 1, .loadAddr = MZ_EMU_REG_KEYB_ADDR+MZ_EMU_KEYB_MAP_ADDR, .loadSize = 0x00000200 }, + .romUser = { .romFileName = "", .romEnabled = 0, .loadAddr = 0x000000, .loadSize = 0x00000100 }, + .romFDC = { .romFileName = "", .romEnabled = 0, .loadAddr = 0x000000, .loadSize = 0x00000100 }, + .loadApp = { .appFileName = "", .appEnabled = 0, .preKeyInsertion = {}, .postKeyInsertion = {} } + }, + .params[MZ2500] = { + .cpuSpeed = 0 , .memSize = 1, .audioSource = 0, .audioHardware = 1, .audioVolume = 1, .audioMute = 0, .audioMix = 0, .displayType = MZ_EMU_DISPLAY_COLOUR, .displayOption = 0, .displayOutput = VMMODE_VGA_640x480, + .vramMode = 0, .vramWaitMode = 0, .gramMode = 0, .pcgMode = 0, .aspectRatio = 0, .scanDoublerFX = 0, .loadDirectFilter = 0, + .mz800Mode = 0, .mz800Printer = 0, .mz800TapeIn = 0, .queueTapeFilter = 0, .tapeButtons = 3, .fastTapeLoad = 2, .tapeSavePath = "0:\\MZF\\MZ2500", + .cmtAsciiMapping = 3, .cmtMode = 0, .fddEnabled = 1, .autoStart = 0, + .fdd[0] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[1] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[2] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .fdd[3] = { .fileName = "", .imgType = IMAGETYPE_IMG, .mounted = 0, .diskType = DISKTYPE_320K, .polarity = POLARITY_INVERTED, .updateMode = UPDATEMODE_READWRITE }, + .romMonitor40 = { .romFileName = "0:\\TZFS\\mz2500-ipl.rom", .romEnabled = 1, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00001000 }, + .romMonitor80 = { .romFileName = "", .romEnabled = 0, .loadAddr = MZ_EMU_ROM_ADDR, .loadSize = 0x00001000 }, + .romCG = { .romFileName = "0:\\TZFS\\mz2500_cgrom.rom", .romEnabled = 1, .loadAddr = MZ_EMU_CGROM_ADDR, .loadSize = 0x00000800 }, + .romKeyMap = { .romFileName = "0:\\TZFS\\80A_2500_km.rom", .romEnabled = 1, .loadAddr = MZ_EMU_REG_KEYB_ADDR+MZ_EMU_KEYB_MAP_ADDR, .loadSize = 0x00000200 }, + .romUser = { .romFileName = "", .romEnabled = 0, .loadAddr = 0x000000, .loadSize = 0x00000100 }, + .romFDC = { .romFileName = "", .romEnabled = 0, .loadAddr = 0x000000, .loadSize = 0x00000100 }, + .loadApp = { .appFileName = "", .appEnabled = 0, .preKeyInsertion = {}, .postKeyInsertion = {} } + } + }; + // Default configuration for an MZ-2000 host. const static t_emuConfig emuConfigDefault_MZ2000 = { .machineModel = MZ80K, .machineGroup = GROUP_MZ80K, .machineChanged = 1, @@ -4671,7 +4863,7 @@ void EMZResetConfig(enum ACTIONMODE mode) if(mode == ACTION_DEFAULT || mode == ACTION_SELECT) { // Restore the reset parameters into the working set. - memcpy(emuConfig.params, emuControl.hostMachine == HW_MZ2000 ? emuConfigDefault_MZ2000.params : emuConfigDefault_MZ700.params, sizeof(emuConfig.params)); + memcpy(emuConfig.params, emuControl.hostMachine == HW_MZ2000 ? emuConfigDefault_MZ2000.params : emuControl.hostMachine == HW_MZ80A ? emuConfigDefault_MZ80A.params : emuConfigDefault_MZ700.params, sizeof(emuConfig.params)); for(uint16_t idx=0; idx < MAX_MZMACHINES; idx++) { for(uint16_t idx2=0; idx2 < MAX_KEY_INS_BUFFER; idx2++) { if(emuConfig.params[idx].loadApp.preKeyInsertion[idx2].i == 0) { emuConfig.params[idx].loadApp.preKeyInsertion[idx2].i = 0xffffffff; } } } for(uint16_t idx=0; idx < MAX_MZMACHINES; idx++) { for(uint16_t idx2=0; idx2 < MAX_KEY_INS_BUFFER; idx2++) { if(emuConfig.params[idx].loadApp.postKeyInsertion[idx2].i == 0) { emuConfig.params[idx].loadApp.postKeyInsertion[idx2].i = 0xffffffff; } } } @@ -5831,7 +6023,7 @@ uint8_t EMZInit(enum MACHINE_HW_TYPES hostMachine, uint8_t machineModel) // On initialisation, copy the default configuration into the working data structures and if an SD configuration is found, overwrite as necessary. memcpy(&emuControl, &emuControlDefault, sizeof(t_emuControl)); - memcpy(&emuConfig, hostMachine == HW_MZ2000 ? &emuConfigDefault_MZ2000 : &emuConfigDefault_MZ700, sizeof(t_emuConfig)); + memcpy(&emuConfig, hostMachine == HW_MZ2000 ? &emuConfigDefault_MZ2000 : hostMachine == HW_MZ80A ? &emuConfigDefault_MZ80A : &emuConfigDefault_MZ700, sizeof(t_emuConfig)); for(uint16_t idx=0; idx < MAX_MZMACHINES; idx++) { for(uint16_t idx2=0; idx2 < MAX_KEY_INS_BUFFER; idx2++) { if(emuConfig.params[idx].loadApp.preKeyInsertion[idx2].i == 0) { emuConfig.params[idx].loadApp.preKeyInsertion[idx2].i = 0xffffffff; } } } for(uint16_t idx=0; idx < MAX_MZMACHINES; idx++) { for(uint16_t idx2=0; idx2 < MAX_KEY_INS_BUFFER; idx2++) { if(emuConfig.params[idx].loadApp.postKeyInsertion[idx2].i == 0) { emuConfig.params[idx].loadApp.postKeyInsertion[idx2].i = 0xffffffff; } } } diff --git a/common/tranzputer.c b/common/tranzputer.c index f6c9c8e..b252c3e 100644 --- a/common/tranzputer.c +++ b/common/tranzputer.c @@ -846,27 +846,32 @@ uint8_t reqZ80Bus(uint32_t timeout) // Is the Z80 currently being held? If it isnt, request access. if(z80Control.holdZ80 == 0) { + // Set BUSRQ low which sets the Z80 BUSRQ low. + pinLow(CTL_BUSRQ); +printf("Wait for low\n"); // Set BUSRQ low and wait for a BUSACK or for the timeout period. If no response in the timeout period then the tranZPUter board/CPLD has locked up. - do { - // Set BUSRQ low which sets the Z80 BUSRQ low. - pinLow(CTL_BUSRQ); +// do { +// // Wait 1ms or until BUSACK goes low. +// for(uint32_t timer=*ms; timer == *ms && pinGet(CTL_BUSACK);); - // Wait 1ms or until BUSACK goes low. - for(uint32_t timer=*ms; timer == *ms && pinGet(CTL_BUSACK);); - - // If BUSACK is still high, bring it inactive so as to pulse it in next loop. - if(pinGet(CTL_BUSACK)) - pinHigh(CTL_BUSRQ); - } while(((*ms - startTime) < timeout && pinGet(CTL_BUSACK))); + // If BUSACK is still high, bring it inactive and loop as Z80_BUSACK may have gone low under FPGA control. + // if(pinGet(CTL_BUSACK)) + // { + // pinHigh(CTL_BUSRQ); + // } +// } + while(((*ms - startTime) < timeout && pinGet(CTL_BUSACK))); // If we timed out, deassert BUSRQ and return error. // if((*ms - startTime) >= timeout) { +printf("It is HIGH\n"); pinHigh(CTL_BUSRQ); result = 1; } else { +printf("It is low\n"); // Setup the bus ready for transactions, default to read. setupSignalsForZ80Access(READ); @@ -919,12 +924,12 @@ uint8_t reqTranZPUterBus(uint32_t timeout, enum TARGETS target) // uint8_t result = 0; - // Now disable the mainboard by setting MBSEL low. - pinLow(CTL_MBSEL); - // Requst the Z80 Bus to tri-state the Z80. if((result=reqZ80Bus(timeout)) == 0) { + // Now disable the mainboard by setting MBSEL low. + pinLow(CTL_MBSEL); + // Store the mode. z80Control.ctrlMode = TRANZPUTER_ACCESS; @@ -3250,7 +3255,7 @@ printf("Hard Z80 Reset\n"); // Firstly, a small delay to allow the underlying hardware to initialise. // - delay(500); +// delay(1000); // Next, ascertain what CPU we are using, soft or hard. If the read value is illegal default to Z80. // diff --git a/libraries/lib/libimath2-k64f.a b/libraries/lib/libimath2-k64f.a index d7106c94af347eab86c7221dc73b546c20906650..965b89091103b1fdd977aa2ac50a7f5276f97385 100644 GIT binary patch delta 93 zcmZ2dx}OV diff --git a/libraries/lib/libumansi-k64f.a b/libraries/lib/libumansi-k64f.a index 50ac14aba591ebb913c59387f0e2baedc72b8eda..6c2cb2baff97cb090c7afa01b4f0da2a1b6f8837 100644 GIT binary patch delta 814 zcmYjPO(;ZB6z(8n#>h}+#?N9BrO4mpNuftr`pF8LQ8s>JB`GAylm$<3@q~rHjj}ME z%v~{KCmWFsk!L}Xg_78D-y8Sb+1>Nq@0{=Z?zwl5j=M*PR_IXb>T814N~HKR<^No# z2l_{FDYe%r05sjVvWR>0s4z4qgmjgqp&Dq)5PU;@20w0<4Z8%QYg#^*28*asH{E^= zH71Q!JFb#%eOT4~MgRu-PpGg(v2Cb@1o<>C?v71)gdPTFUx|;N@U$#6t%eFaY3+tg zs(ZqI+}}%Lm~J0_9==cun$d{VjeGrg6m!bk___3HWi&#g(5#Pl=i>YIAkl2y)B7Y{ zD?sJTB?ZvUXe)MnPe>{2!ESz!#SDeyk}V)BHsi4))Mv$I3zI;3 z6>Ek0>}w7drQi85JWxx*-OL)Sk-LOc`4)6$2`R=6T1%RgORu)N5F%^d9gpjVXEL8oiIf8Gf&)~zY>d{<*=$cl7RSo6TsGBYy zhFa3bs$EyJtd{A2fO(_7BdvapMFPNE1Vx<8%5AZ2>U37Gh%ZuUUpdtL9r6W zUJ|RVhcH1lDbWlUdH?UoMLOY$h8PP6;ALw)knIwL6of;tS|A`RHsi5l)Mv$Ii(#O= zinYQL_B9Vn((gh99;hYdZgw5k$z4jSW(&IWg%sn43aPUH1^bBueGG-E2^gTEZ2KH` bs4}=rt!fA-mRC|{D}W3TwwD$xlT@) z>}ETSiEz&3b#fA$-x+Gc1vblB-$Zc!x%}jX>-!f}2%5lKQ8{p4O71P-TJj~-%PgCkleg` vUkO4v$P<1i6cGY;8cQ}yU3$v_*Uxub7a=QW?Xrt!fA-mRC|{D}W3TwwD$xlT@) z>}ETSiEz&3b#fA$-x+Gc1vblB-$Zc!x%}jX>-!f}2%5lKQ8{p4O71P-TJj~-%PgCkleg` vUkO4v$P<1i6cGY;8cQ}yU3$v_*Uxub7a=QW?X1AW~Szb#s=mam5LdmY_rK9f+aR@Vf5rh5)j`k&3}joNkC%rA8A#X z3Uiyp^MM4OS17Xa^keG>ox delta 394 zcmdn=k!90ImI>1ACMK5V#)iflm5Lc*?8zU3B{pwi^yEbn5Z^4#e~1T3Kw|SBX;owu zVw>$WpTo@qnjyZ~*>xEoOv~mE!Dz~j63u1cvIVtsxnUfzUhU2_Wb2|P+sUwP{xS6^ zvY`0p+l#iL3anp$4B1iQnC!uBjnZfSjHGs0h`J|L=uRRp|c- nLJ`