From ff6e4d0be0baac3592fba80106be99c6121aba82 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Dec 2024 19:41:28 +0000 Subject: [PATCH] rcbus-6800: switch to tinydisk --- Kernel/platform/platform-rcbus-6800/Makefile | 6 +++--- Kernel/platform/platform-rcbus-6800/README.md | 4 ++-- Kernel/platform/platform-rcbus-6800/config.h | 8 ++++++-- Kernel/platform/platform-rcbus-6800/devices.c | 18 +++++++----------- Kernel/platform/platform-rcbus-6800/discard.c | 19 ++----------------- Kernel/platform/platform-rcbus-6800/main.c | 18 ++++++++---------- .../platform-rcbus-6800/platform_ide.h | 17 ----------------- Kernel/platform/platform-rcbus-6800/plt_ide.h | 9 +++++++++ 8 files changed, 37 insertions(+), 62 deletions(-) delete mode 100644 Kernel/platform/platform-rcbus-6800/platform_ide.h create mode 100644 Kernel/platform/platform-rcbus-6800/plt_ide.h diff --git a/Kernel/platform/platform-rcbus-6800/Makefile b/Kernel/platform/platform-rcbus-6800/Makefile index 84071fbb8..92c709569 100644 --- a/Kernel/platform/platform-rcbus-6800/Makefile +++ b/Kernel/platform/platform-rcbus-6800/Makefile @@ -7,8 +7,8 @@ ASRCS += tricks.S commonmem.S CDSRCS = discard.c -DSRCS = ../../dev/devide.c ../../dev/blkdev.c -DISCARD_DSRCS = ../../dev/mbr.c ../../dev/devide_discard.c +DSRCS = ../../dev/tinydisk.c ../../dev/tinyide.c +DISCARD_DSRCS = ../../dev/tinydisk_discard.c ../../dev/tinyide_discard.c COBJS = $(CSRCS:.c=$(BINEXT)) CDOBJS = $(CDSRCS:.c=$(BINEXT)) @@ -47,7 +47,7 @@ image: loader $(CROSS_LD) -b -C 0x100 -S 0xF200 -Z 0x20 -o ../../fuzix.bin -m fuzix.tmpmap crt0.o commonmem.o \ rcbus-6800.o ../../start.o ../../version.o ../../cpu-6800/lowlevel-6800.o \ tricks.o main.o discard.o ../../timer.o ../../kdata.o devices.o \ - blkdev.o mbr.o devide.o devide_discard.o ../../mm/memalloc_none.o \ + tinydisk.o tinydisk_discard.o tinyide.o tinyide_discard.o ../../mm/memalloc_none.o \ ../../devio.o ../../filesys.o ../../process.o ../../inode.o ../../syscall_fs.o \ ../../syscall_proc.o ../../syscall_other.o ../../mm.o ../../swap.o ../../mm/bank16kfc.o \ ../../tty.o ../../devsys.o ../../syscall_fs2.o ../../syscall_fs3.o \ diff --git a/Kernel/platform/platform-rcbus-6800/README.md b/Kernel/platform/platform-rcbus-6800/README.md index 567379eae..ce1f1e948 100644 --- a/Kernel/platform/platform-rcbus-6800/README.md +++ b/Kernel/platform/platform-rcbus-6800/README.md @@ -21,8 +21,8 @@ rcbus-6800 -b -i emu-ide.img -1 ## Things To Do -- Switch to tinydisk - Swap support - Stop using CONFIG_SMALL - Serial speed/format support - +- DS1302 +- Dynamic bufpool diff --git a/Kernel/platform/platform-rcbus-6800/config.h b/Kernel/platform/platform-rcbus-6800/config.h index 8e0b0c1c8..5c1a836ce 100644 --- a/Kernel/platform/platform-rcbus-6800/config.h +++ b/Kernel/platform/platform-rcbus-6800/config.h @@ -41,8 +41,10 @@ extern uint16_t swap_dev; #define CONFIG_DYNAMIC_SWAP #define swap_map(x) (x) -#define CONFIG_IDE -#define MAX_BLKDEV 1 +#define CONFIG_TD_NUM 2 +#define CONFIG_TD_IDE +#define CONFIG_TINYIDE_8BIT +#define IDE_IS_8BIT(x) 1 #define BOOT_TTY 513 /* Set this to default device for stdio, stderr */ @@ -61,3 +63,5 @@ extern uint16_t swap_dev; #define BOOTDEVICENAMES "hd#" #define CONFIG_SMALL + +/* TODO DS1302 support, CONFIG_DYNAMIC_BUFPOOL */ diff --git a/Kernel/platform/platform-rcbus-6800/devices.c b/Kernel/platform/platform-rcbus-6800/devices.c index c8d4a1c7c..28585f59a 100644 --- a/Kernel/platform/platform-rcbus-6800/devices.c +++ b/Kernel/platform/platform-rcbus-6800/devices.c @@ -2,7 +2,7 @@ #include #include #include -#include +#include #include #include @@ -11,23 +11,19 @@ struct devsw dev_tab[] = /* The device driver switch table */ // minor open close read write ioctl // ----------------------------------------------------------------- /* 0: /dev/hd - block device interface */ -#ifdef CONFIG_IDE - { blkdev_open, no_close, blkdev_read, blkdev_write, blkdev_ioctl}, -#else - { no_open, no_close, no_rdwr, no_rdwr, no_ioctl}, -#endif + { td_open, no_close, td_read, td_write, td_ioctl }, /* 1: /dev/fd - Floppy disk block devices */ #ifdef CONFIG_FLOPPY - { fd_open, fd_close, fd_read, fd_write, no_ioctl}, + { fd_open, fd_close, fd_read, fd_write, no_ioctl }, #else - { no_open, no_close, no_rdwr, no_rdwr, no_ioctl}, + { no_open, no_close, no_rdwr, no_rdwr, no_ioctl }, #endif /* 2: /dev/tty TTY devices */ - { tty_open, tty_close, tty_read, tty_write, tty_ioctl }, + { tty_open, tty_close, tty_read, tty_write, tty_ioctl }, /* 3: /dev/lpr Printer devices */ - { no_open, no_close, no_rdwr, no_rdwr, no_ioctl }, + { no_open, no_close, no_rdwr, no_rdwr, no_ioctl }, /* 4: /dev/mem etc System devices (one offs) */ - { no_open, no_close, sys_read, sys_write, sys_ioctl }, + { no_open, no_close, sys_read, sys_write, sys_ioctl }, /* Pack to 7 with nxio if adding private devices and start at 8 */ }; diff --git a/Kernel/platform/platform-rcbus-6800/discard.c b/Kernel/platform/platform-rcbus-6800/discard.c index 1e87f2771..14cee4902 100644 --- a/Kernel/platform/platform-rcbus-6800/discard.c +++ b/Kernel/platform/platform-rcbus-6800/discard.c @@ -1,11 +1,8 @@ #include #include -/* Onboard I/O */ -static volatile uint8_t *cpuio = (volatile uint8_t *)0; - /* - * Map handling: allocate 4 banks per process + * Map handling: addd all the spare 16K pages */ void pagemap_init(void) @@ -24,19 +21,7 @@ uint_fast8_t plt_param(char *p) return 0; } - -/* - * We don't have a counter but a free running timer at system E clock - * rate (1.8432MHz) and compare register. We can reset the timer but - * that horks the serial port so we have to play comparison games or - * just go with the timer. Now as it happens the timer wraps 28 times - * a second to within 1%. Good enough for scheduling but will need minor - * compensation logic for the clock later TODO - */ - void device_init(void) { -#ifdef CONFIG_IDE - devide_init(); -#endif + ide_probe(); } diff --git a/Kernel/platform/platform-rcbus-6800/main.c b/Kernel/platform/platform-rcbus-6800/main.c index 26c42c4d6..ae5b8eae1 100644 --- a/Kernel/platform/platform-rcbus-6800/main.c +++ b/Kernel/platform/platform-rcbus-6800/main.c @@ -2,8 +2,7 @@ #include #include #include -#include -#include +#include #include uint8_t kernel_flag = 1; @@ -38,25 +37,24 @@ void plt_interrupt(void) } /* For now this and the supporting logic don't handle swap */ - extern uint8_t hd_map; extern void hd_read_data(uint8_t *p); extern void hd_write_data(uint8_t *p); -void devide_read_data(void) +void devide_read_data(uint8_t *p) { - if (blk_op.is_user) + if (td_raw) hd_map = 1; else hd_map = 0; - hd_read_data(blk_op.addr); + hd_read_data(p); } -void devide_write_data(void) +void devide_write_data(uint8_t *p) { - if (blk_op.is_user) + if (td_raw) hd_map = 1; else hd_map = 0; - hd_write_data(blk_op.addr); -} + hd_write_data(p); +} \ No newline at end of file diff --git a/Kernel/platform/platform-rcbus-6800/platform_ide.h b/Kernel/platform/platform-rcbus-6800/platform_ide.h deleted file mode 100644 index eb3bebd55..000000000 --- a/Kernel/platform/platform-rcbus-6800/platform_ide.h +++ /dev/null @@ -1,17 +0,0 @@ -#define ide_select(x) -#define ide_deselect() - -#define IDE_IS_MMIO -#define IDE_8BIT_ONLY - -#define IDE_REG_DATA 0xFE10 -#define IDE_REG_ERROR 0xFE11 -#define IDE_REG_FEATURES 0xFE11 -#define IDE_REG_SEC_COUNT 0xFE12 -#define IDE_REG_LBA_0 0xFE13 -#define IDE_REG_LBA_1 0xFE14 -#define IDE_REG_LBA_2 0xFE15 -#define IDE_REG_LBA_3 0xFE16 -#define IDE_REG_DEVHEAD 0xFE16 -#define IDE_REG_COMMAND 0xFE17 -#define IDE_REG_STATUS 0xFE17 diff --git a/Kernel/platform/platform-rcbus-6800/plt_ide.h b/Kernel/platform/platform-rcbus-6800/plt_ide.h new file mode 100644 index 000000000..43f3657c2 --- /dev/null +++ b/Kernel/platform/platform-rcbus-6800/plt_ide.h @@ -0,0 +1,9 @@ +#define data ((volatile uint8_t *)0xFE10) +#define error ((volatile uint8_t *)0xFE11) +#define count ((volatile uint8_t *)0xFE12) +#define sec ((volatile uint8_t *)0xFE13) +#define cyll ((volatile uint8_t *)0xFE14) +#define cylh ((volatile uint8_t *)0xFE15) +#define devh ((volatile uint8_t *)0xFE16) +#define status ((volatile uint8_t *)0xFE17) +#define cmd ((volatile uint8_t *)0xFE17)