Update RFS driver to install ROMS
This commit is contained in:
32
.gitignore
vendored
32
.gitignore
vendored
@@ -1685,4 +1685,36 @@ software/linux/project/FusionX/
|
||||
software/FusionX/src/driver/MZ80A/k64fcpu.c.hld
|
||||
software/linux/buildroot/.config.old
|
||||
software/linux/kernel/scripts/kconfig/.mconf.cmd
|
||||
software/FusionX/src/ttymz/.tmp_versions/
|
||||
software/FusionX/src/ttymz/.ttymzdrv.ko.cmd
|
||||
software/FusionX/src/ttymz/Makefile.orig
|
||||
software/FusionX/src/ttymz/Module.symvers
|
||||
software/FusionX/src/ttymz/modules.order
|
||||
software/FusionX/src/ttymz/ttymzdrv.ko
|
||||
software/FusionX/src/ttymz/ttymzdrv.mod.c
|
||||
software/FusionX/src/z80drv/.tmp_versions/
|
||||
software/FusionX/src/z80drv/.z80drv.ko.cmd
|
||||
software/FusionX/src/z80drv/Kbuild.in
|
||||
software/FusionX/src/z80drv/MZ80A/emumz.c
|
||||
software/FusionX/src/z80drv/MZ80A/k64fcpu.c.hld
|
||||
software/FusionX/src/z80drv/MZ80A/z80driver.c.bad
|
||||
software/FusionX/src/z80drv/MZ80A/z80vhw_rfs.c.bad
|
||||
software/FusionX/src/z80drv/Makefile.old
|
||||
software/FusionX/src/z80drv/Makefile1
|
||||
software/FusionX/src/z80drv/Makefile3
|
||||
software/FusionX/src/z80drv/Module.symvers
|
||||
software/FusionX/src/z80drv/Z80.c.old
|
||||
software/FusionX/src/z80drv/Z80.c.old2
|
||||
software/FusionX/src/z80drv/Z80.rc.in
|
||||
software/FusionX/src/z80drv/Z80.x/
|
||||
software/FusionX/src/z80drv/Zeta.test/
|
||||
software/FusionX/src/z80drv/k64fcpu
|
||||
software/FusionX/src/z80drv/modules.order
|
||||
software/FusionX/src/z80drv/mz700.rom
|
||||
software/FusionX/src/z80drv/sa1510.orig
|
||||
software/FusionX/src/z80drv/test
|
||||
software/FusionX/src/z80drv/x.mzf
|
||||
software/FusionX/src/z80drv/z80ctrl
|
||||
software/FusionX/src/z80drv/z80drv.ko
|
||||
software/FusionX/src/z80drv/z80drv.mod.c
|
||||
|
||||
|
||||
8
.gitmodules
vendored
8
.gitmodules
vendored
@@ -1,12 +1,12 @@
|
||||
[submodule "software/FusionX/src/driver/Z80"]
|
||||
path = software/FusionX/src/driver/Z80
|
||||
path = software/FusionX/src/z80drv/Z80
|
||||
url = https://github.com/redcode/Z80.git
|
||||
[submodule "software/FusionX/src/driver/Zeta"]
|
||||
path = software/FusionX/src/driver/Zeta
|
||||
path = software/FusionX/src/z80drv/Zeta
|
||||
url = https://github.com/redcode/Zeta.git
|
||||
[submodule "software/FusionX/src/driver/6502"]
|
||||
path = software/FusionX/src/driver/6502
|
||||
path = software/FusionX/src/z80drv/6502
|
||||
url = https://github.com/redcode/6502.git
|
||||
[submodule "software/FusionX/src/driver/software/FusionX/src/driver/6502"]
|
||||
path = software/FusionX/src/driver/software/FusionX/src/driver/6502
|
||||
path = software/FusionX/src/z80drv/software/FusionX/src/driver/6502
|
||||
url = https://github.com/redcode/6502.git
|
||||
|
||||
@@ -32,15 +32,16 @@ rmmod z80drv 2>/dev/null
|
||||
insmod z80drv.ko
|
||||
sleep 1
|
||||
|
||||
# Load the original RFS ROM images.
|
||||
${FUSIONXDIR}/bin/z80ctrl --loadrom --file ${FUSIONXDIR}/rom/MROM_256_${SCREENWIDTH}c.bin --addr 0x000000 --type 1
|
||||
${FUSIONXDIR}/bin/z80ctrl --loadrom --file ${FUSIONXDIR}/rom/USER_ROM_256_${SCREENWIDTH}c.bin --addr 0x80000 --type 1
|
||||
${FUSIONXDIR}/bin/z80ctrl --loadrom --file ${FUSIONXDIR}/rom/USER_ROM_II_256_${SCREENWIDTH}c.bin --addr 0x100000 --type 1
|
||||
${FUSIONXDIR}/bin/z80ctrl --loadrom --file ${FUSIONXDIR}/rom/USER_ROM_III_256_${SCREENWIDTH}c.bin --addr 0x180000 --type 1
|
||||
|
||||
# Add the RFS Virtual Hardware to the driver.
|
||||
${FUSIONXDIR}/bin/z80ctrl --adddev --device rfs
|
||||
|
||||
# Load the original RFS ROM images. These are loaded by the RFS driver but here for reference or to load alternate. If
|
||||
# alternate roms are loaded then ensure they are loaded prior to the start command below.
|
||||
#${FUSIONXDIR}/bin/z80ctrl --loadrom --file ${FUSIONXDIR}/rom/MROM_256_${SCREENWIDTH}c.bin --addr 0x000000 --type 1
|
||||
#${FUSIONXDIR}/bin/z80ctrl --loadrom --file ${FUSIONXDIR}/rom/USER_ROM_256_${SCREENWIDTH}c.bin --addr 0x80000 --type 1
|
||||
#${FUSIONXDIR}/bin/z80ctrl --loadrom --file ${FUSIONXDIR}/rom/USER_ROM_II_256_${SCREENWIDTH}c.bin --addr 0x100000 --type 1
|
||||
#${FUSIONXDIR}/bin/z80ctrl --loadrom --file ${FUSIONXDIR}/rom/USER_ROM_III_256_${SCREENWIDTH}c.bin --addr 0x180000 --type 1
|
||||
|
||||
# Start the Z80 (ie. MZ-80A virtual processor).
|
||||
${FUSIONXDIR/bin/z80ctrl --start
|
||||
|
||||
|
||||
@@ -32,6 +32,12 @@ rmmod z80drv 2>/dev/null
|
||||
insmod z80drv.ko
|
||||
sleep 1
|
||||
|
||||
# Add the TZPU Virtual Hardware to the driver.
|
||||
${FUSIONXDIR}/bin/z80ctrl --adddev --device tzpu
|
||||
|
||||
# Start the K64F Virtual CPU Emulation.
|
||||
${FUSIONXDIR}/bin/k64fcpu &
|
||||
|
||||
# Load the original Monitor and TZFS ROM images. This is done in the K64F daemon but can be manually enabled.
|
||||
#${FUSIONXDIR}/bin/z80ctrl --loadrom --file ${FUSIONXDIR}/roms/monitor_${SCREENWIDTH}c_sa1510.rom --addr 0x000000 --type 1
|
||||
#${FUSIONXDIR}/bin/z80ctrl --loadrom --file ${FUSIONXDIR}/roms/tzfs.rom --offset 0x000000 --len 0x001800 --addr 0x00E800 --type 1
|
||||
@@ -39,12 +45,6 @@ sleep 1
|
||||
#${FUSIONXDIR}/bin/z80ctrl --loadrom --file ${FUSIONXDIR}/roms/tzfs.rom --offset 0x002800 --len 0x001000 --addr 0x02F000 --type 1
|
||||
#${FUSIONXDIR}/bin/z80ctrl --loadrom --file ${FUSIONXDIR}/roms/tzfs.rom --offset 0x003800 --len 0x001000 --addr 0x03F000 --type 1
|
||||
|
||||
# Add the TZPU Virtual Hardware to the driver.
|
||||
${FUSIONXDIR}/bin/z80ctrl --adddev --device tzpu
|
||||
|
||||
# Start the K64F Virtual CPU Emulation.
|
||||
${FUSIONXDIR}/bin/k64fcpu &
|
||||
|
||||
# Ensure the system is set for performance mode with max frequency.
|
||||
# NB: Enabling this prior to starting the Z80 results in a kernel error.
|
||||
echo performance > /sys/devices//system/cpu/cpufreq/policy0/scaling_governor
|
||||
|
||||
2375
software/FusionX/src/z80drv/MZ80A/sharpmz.c
Normal file
2375
software/FusionX/src/z80drv/MZ80A/sharpmz.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -581,9 +581,13 @@ int ctrlCmd(int fdZ80, enum CTRL_COMMANDS cmd, long param1, long param2, long pa
|
||||
break;
|
||||
case Z80_CMD_ADD_DEVICE:
|
||||
ioctlCmd.vdev.device = VIRTUAL_DEVICE_NONE;
|
||||
if(strcasecmp((char *)param1, "RFS") == 0)
|
||||
if(strcasecmp((char *)param1, "RFS") == 0 || strcasecmp((char *)param1, "RFS80") == 0)
|
||||
{
|
||||
ioctlCmd.vdev.device = VIRTUAL_DEVICE_RFS;
|
||||
ioctlCmd.vdev.device = VIRTUAL_DEVICE_RFS80;
|
||||
}
|
||||
if(strcasecmp((char *)param1, "RFS40") == 0)
|
||||
{
|
||||
ioctlCmd.vdev.device = VIRTUAL_DEVICE_RFS40;
|
||||
}
|
||||
else if(strcasecmp((char *)param1, "TZPU") == 0)
|
||||
{
|
||||
@@ -597,9 +601,13 @@ int ctrlCmd(int fdZ80, enum CTRL_COMMANDS cmd, long param1, long param2, long pa
|
||||
break;
|
||||
case Z80_CMD_DEL_DEVICE:
|
||||
ioctlCmd.vdev.device = VIRTUAL_DEVICE_NONE;
|
||||
if(strcasecmp((char *)param1, "RFS") == 0)
|
||||
if(strcasecmp((char *)param1, "RFS") == 0 || strcasecmp((char *)param1, "RFS80") == 0)
|
||||
{
|
||||
ioctlCmd.vdev.device = VIRTUAL_DEVICE_RFS;
|
||||
ioctlCmd.vdev.device = VIRTUAL_DEVICE_RFS80;
|
||||
}
|
||||
else if(strcasecmp((char *)param1, "RFS40") == 0)
|
||||
{
|
||||
ioctlCmd.vdev.device = VIRTUAL_DEVICE_RFS40;
|
||||
}
|
||||
else if(strcasecmp((char *)param1, "TZPU") == 0)
|
||||
{
|
||||
@@ -734,8 +742,8 @@ void showArgs(char *progName, struct optparse *options)
|
||||
printf(" = CONTINUE # Continue Z80 execution\n");
|
||||
printf(" = HOSTRAM # Use HOST DRAM\n");
|
||||
printf(" = VIRTRAM # Use Virtual RAM\n");
|
||||
printf(" = ADDDEV --device <RFS, TZPU> # Add a virtual device into the Z80 configuration.\n");
|
||||
printf(" = DELDEV --device <RFS, TZPU> # Remove a virtual device from the Z80 configuration.\n");
|
||||
printf(" = ADDDEV --device <RFS40, RFS80, TZPU> # Add a virtual device into the Z80 configuration.\n");
|
||||
printf(" = DELDEV --device <RFS40, RFS80, TZPU> # Remove a virtual device from the Z80 configuration.\n");
|
||||
printf(" = SPEED --mult <1, 2, 4, 8, 16, 32, 64, 128> # In Virtual RAM mode, set CPU speed to base clock x factor.\n");
|
||||
printf(" = LOADMZF --file <mzf filename> # Load MZF file into RAM.\n");
|
||||
printf(" # Load contents of binary file into memory at address. default = 0x000000.\n");
|
||||
@@ -1629,7 +1629,9 @@ static long int z80drv_ioctl(struct file *file, unsigned cmd, unsigned long arg)
|
||||
}
|
||||
if(idx < Z80Ctrl->virtualDeviceCnt)
|
||||
break;
|
||||
|
||||
#if(TARGET_HOST_MZ700 == 1 || TARGET_HOST_MZ2000 == 1)
|
||||
if(ioctlCmd.vdev.device & VIRTUAL_DEVICE_RFS)
|
||||
pr_info("RFS Board currently supported on MZ-80A Host only.\n");
|
||||
break;
|
||||
#endif
|
||||
@@ -1644,10 +1646,11 @@ static long int z80drv_ioctl(struct file *file, unsigned cmd, unsigned long arg)
|
||||
switch(ioctlCmd.vdev.device)
|
||||
{
|
||||
#if(TARGET_HOST_MZ80A == 1)
|
||||
case VIRTUAL_DEVICE_RFS:
|
||||
Z80Ctrl->virtualDevice[Z80Ctrl->virtualDeviceCnt++] = VIRTUAL_DEVICE_RFS;
|
||||
Z80Ctrl->virtualDeviceBitMap |= VIRTUAL_DEVICE_RFS;
|
||||
rfsInit();
|
||||
case VIRTUAL_DEVICE_RFS40:
|
||||
case VIRTUAL_DEVICE_RFS80:
|
||||
Z80Ctrl->virtualDevice[Z80Ctrl->virtualDeviceCnt++] = ioctlCmd.vdev.device;
|
||||
Z80Ctrl->virtualDeviceBitMap |= ioctlCmd.vdev.device;
|
||||
rfsInit(Z80Ctrl->virtualDeviceBitMap & VIRTUAL_DEVICE_RFS40 ? 0 : 1);
|
||||
break;
|
||||
#endif
|
||||
|
||||
@@ -1698,8 +1701,9 @@ static long int z80drv_ioctl(struct file *file, unsigned cmd, unsigned long arg)
|
||||
// Delete the device, removing hooks etc as required.
|
||||
switch(ioctlCmd.vdev.device)
|
||||
{
|
||||
case VIRTUAL_DEVICE_RFS:
|
||||
Z80Ctrl->virtualDeviceBitMap &= ~VIRTUAL_DEVICE_RFS;
|
||||
case VIRTUAL_DEVICE_RFS40:
|
||||
case VIRTUAL_DEVICE_RFS80:
|
||||
Z80Ctrl->virtualDeviceBitMap &= ~ioctlCmd.vdev.device;
|
||||
break;
|
||||
|
||||
case VIRTUAL_DEVICE_TZPU:
|
||||
@@ -451,8 +451,10 @@ enum Z80_MEMORY_PROFILE {
|
||||
};
|
||||
enum VIRTUAL_DEVICE {
|
||||
VIRTUAL_DEVICE_NONE = 0x00000000,
|
||||
VIRTUAL_DEVICE_RFS = 0x02000000,
|
||||
VIRTUAL_DEVICE_TZPU = 0x01000000
|
||||
VIRTUAL_DEVICE_RFS40 = 0x01000000,
|
||||
VIRTUAL_DEVICE_RFS80 = 0x02000000,
|
||||
VIRTUAL_DEVICE_RFS = 0x03000000,
|
||||
VIRTUAL_DEVICE_TZPU = 0x04000000
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
@@ -86,8 +86,30 @@
|
||||
|
||||
#define BNKCTRLDEF BBMOSI+SDCS+BBCLK // Default on startup for the Bank Control register.
|
||||
|
||||
// RFS Board ROM rom filename definitions.
|
||||
#define ROM_DIR "/apps/FusionX/roms/"
|
||||
#define ROM_MROM_40C_FILENAME ROM_DIR "MROM_256_40c.bin"
|
||||
#define ROM_USER_I_40C_FILENAME ROM_DIR "USER_ROM_256_40c.bin"
|
||||
#define ROM_USER_II_40C_FILENAME ROM_DIR "USER_ROM_II_256_40c.bin"
|
||||
#define ROM_USER_III_40C_FILENAME ROM_DIR "USER_ROM_III_256_40c.bin"
|
||||
#define ROM_MROM_80C_FILENAME ROM_DIR "MROM_256_80c.bin"
|
||||
#define ROM_USER_I_80C_FILENAME ROM_DIR "USER_ROM_256_80c.bin"
|
||||
#define ROM_USER_II_80C_FILENAME ROM_DIR "USER_ROM_II_256_80c.bin"
|
||||
#define ROM_USER_III_80C_FILENAME ROM_DIR "USER_ROM_III_256_80c.bin"
|
||||
|
||||
// RFS Board ROM rom load and size definitions.
|
||||
#define ROM_MROM_LOAD_ADDR 0x000000
|
||||
#define ROM_USER_I_LOAD_ADDR 0x080000
|
||||
#define ROM_USER_II_LOAD_ADDR 0x100000
|
||||
#define ROM_USER_III_LOAD_ADDR 0x180000
|
||||
#define ROM_MROM_SIZE 0x80000
|
||||
#define ROM_USER_I_SIZE 0x80000
|
||||
#define ROM_USER_II_SIZE 0x80000
|
||||
#define ROM_USER_III_SIZE 0x80000
|
||||
|
||||
// SD Drive constants.
|
||||
#define SD_CARD_FILENAME "/apps/FusionX/SD/SHARP_MZ80A_RFS_CPM_IMAGE_1.img"// SD Card Binary Image.
|
||||
#define SD_DIR "/apps/FusionX/SD/"
|
||||
#define SD_CARD_FILENAME SD_DIR "SHARP_MZ80A_RFS_CPM_IMAGE_1.img"// SD Card Binary Image.
|
||||
|
||||
// MMC/SD command (SPI mode)
|
||||
#define CMD0 0x40 + 0 // GO_IDLE_STATE
|
||||
@@ -203,9 +225,45 @@ void rfsSetupMemory(enum Z80_MEMORY_PROFILE mode)
|
||||
pr_info("RFS Memory Setup complete.\n");
|
||||
}
|
||||
|
||||
// Perform any setup operations, such as variable initialisation, to enable use of this module.
|
||||
void rfsInit(void)
|
||||
// Method to load a ROM image into the ROM memory.
|
||||
//
|
||||
uint8_t loadROM(const char* romFileName, uint32_t loadAddr, uint32_t loadSize)
|
||||
{
|
||||
// Locals.
|
||||
uint8_t result = 0;
|
||||
long noBytes;
|
||||
struct file *fp;
|
||||
|
||||
fp = filp_open(romFileName, O_RDONLY, 0);
|
||||
if(IS_ERR(fp))
|
||||
{
|
||||
pr_info("Error opening ROM Image:%s\n:", romFileName);
|
||||
result = 1;
|
||||
} else
|
||||
{
|
||||
vfs_llseek(fp, 0, SEEK_SET);
|
||||
noBytes = kernel_read(fp, fp->f_pos, &Z80Ctrl->rom[loadAddr], loadSize);
|
||||
if(noBytes < loadSize)
|
||||
{
|
||||
// pr_info("Short load, ROM Image:%s, bytes loaded:%08x\n:", romFileName, loadSize);
|
||||
}
|
||||
filp_close(fp,NULL);
|
||||
}
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
// Perform any setup operations, such as variable initialisation, to enable use of this module.
|
||||
void rfsInit(uint8_t mode80c)
|
||||
{
|
||||
// Locals.
|
||||
|
||||
// Load ROMS according to the display configuration, 40 char = standard, 80 char = 40/80 board installed.
|
||||
loadROM(mode80c == 0 ? ROM_MROM_40C_FILENAME : ROM_MROM_80C_FILENAME, ROM_MROM_LOAD_ADDR, ROM_MROM_SIZE);
|
||||
loadROM(mode80c == 0 ? ROM_USER_I_40C_FILENAME : ROM_USER_I_80C_FILENAME, ROM_USER_I_LOAD_ADDR, ROM_MROM_SIZE);
|
||||
loadROM(mode80c == 0 ? ROM_USER_II_40C_FILENAME : ROM_USER_II_80C_FILENAME, ROM_USER_II_LOAD_ADDR, ROM_MROM_SIZE);
|
||||
loadROM(mode80c == 0 ? ROM_USER_III_40C_FILENAME : ROM_USER_II_80C_FILENAME, ROM_USER_III_LOAD_ADDR, ROM_MROM_SIZE);
|
||||
|
||||
pr_info("Enabling RFS driver.\n");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user