From: geijoenr Date: Sat, 10 Jun 2017 15:27:21 +0000 (+0200) Subject: msx2: use dynamic buffers X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=6cdf69b6f1b736fe1c2cd3a1c46f2807a6739445;p=FUZIX.git msx2: use dynamic buffers --- diff --git a/Kernel/platform-msx2/config.h b/Kernel/platform-msx2/config.h index 1e94d6cd..53dde186 100644 --- a/Kernel/platform-msx2/config.h +++ b/Kernel/platform-msx2/config.h @@ -18,6 +18,9 @@ /* As reported to user space - 4 banks, 16K page size */ #define CONFIG_BANKS 4 +/* reclaim discarded space for buffers */ +#define CONFIG_DYNAMIC_BUFPOOL + #define CONFIG_FONT6X8 /* Vt definitions */ @@ -43,9 +46,9 @@ /* Device parameters */ #define NUM_DEV_TTY 5 -#define TTYSIZ 64 +#define TTYSIZ 128 #define TTYDEV BOOT_TTY /* Device used by kernel for messages, panics */ -#define NBUFS 10 /* Number of block buffers */ +#define NBUFS 6 /* Number of block buffers */ #define NMOUNTS 4 /* Number of mounts at a time */ #define CONFIG_SD @@ -55,5 +58,3 @@ #define MAX_BLKDEV 1 /* Single SD drive */ #define CONFIG_RTC //#define CONFIG_RTC_RP5C01_NVRAM - -#define platform_discard() diff --git a/Kernel/platform-msx2/crt0.s b/Kernel/platform-msx2/crt0.s index aea39eb3..c27b9340 100644 --- a/Kernel/platform-msx2/crt0.s +++ b/Kernel/platform-msx2/crt0.s @@ -46,6 +46,8 @@ .globl _infobits .globl _machine_type + .globl _discard_size + ; startup code @0x100 .area _CODE @@ -149,3 +151,6 @@ cpfont: stop: halt jr stop + .area _DISCARD +_discard_size: + .dw l__DISCARD diff --git a/Kernel/platform-msx2/devmegasd.c b/Kernel/platform-msx2/devmegasd.c index 868b8f7e..55fabd38 100644 --- a/Kernel/platform-msx2/devmegasd.c +++ b/Kernel/platform-msx2/devmegasd.c @@ -162,9 +162,9 @@ void sd_spi_txrx_sector(bool is_read) } else { /* kernel only */ if (is_read) - memcpy((uint8_t *)addr, (uint8_t *)MSD_RDWR, BLKSIZE); + memcpy(blk_op.addr, (uint8_t *)MSD_RDWR, BLKSIZE); else - memcpy((uint8_t *)MSD_RDWR, (uint8_t *)addr, BLKSIZE); + memcpy((uint8_t *)MSD_RDWR, blk_op.addr, BLKSIZE); } sd_spi_unmap_interface(); } diff --git a/Kernel/platform-msx2/fuzix.lnk b/Kernel/platform-msx2/fuzix.lnk index aff19cdc..c78d5952 100644 --- a/Kernel/platform-msx2/fuzix.lnk +++ b/Kernel/platform-msx2/fuzix.lnk @@ -1,6 +1,7 @@ -mwxuy -i fuzix.ihx -b _CODE=0x0000 +-b _BUFFERS=0xD000 -b _COMMONMEM=0xF000 -b _DISCARD=0xE000 -b _FONT=0xFA00 diff --git a/Kernel/platform-msx2/kernel.def b/Kernel/platform-msx2/kernel.def index 97fb7dc8..f0a556af 100644 --- a/Kernel/platform-msx2/kernel.def +++ b/Kernel/platform-msx2/kernel.def @@ -9,3 +9,4 @@ Z80_TYPE .equ 1 PROGBASE .equ 0x0000 PROGLOAD .equ 0x0100 +NBUFS .equ 6 diff --git a/Kernel/platform-msx2/main.c b/Kernel/platform-msx2/main.c index f69e5c67..c25abc30 100644 --- a/Kernel/platform-msx2/main.c +++ b/Kernel/platform-msx2/main.c @@ -6,6 +6,8 @@ uint16_t msxmaps; +struct blkbuf *bufpool_end = bufpool + NBUFS; + void platform_idle(void) { __asm @@ -44,3 +46,27 @@ void platform_interrupt(void) kbd_interrupt(); timer_interrupt(); } + +/* + * Once we are about to load init we can throw the boot code away + * and convert it into disk cache. This gets us 7 or so buffer + * back which more than doubles our cache size ! + */ +void platform_discard(void) +{ + extern uint16_t discard_size; + bufptr bp = bufpool_end; + + discard_size /= sizeof(struct blkbuf); + + kprintf("%d buffers reclaimed from discard\n", discard_size); + + bufpool_end += discard_size; /* Reclaim the discard space */ + + memset(bp, 0, discard_size * sizeof(struct blkbuf)); + /* discard_size is in discard so it dies here */ + for (bp = bufpool + NBUFS; bp < bufpool_end; ++bp) { + bp->bf_dev = NO_DEVICE; + bp->bf_busy = BF_FREE; + } +} diff --git a/Kernel/platform-msx2/msx2.s b/Kernel/platform-msx2/msx2.s index c130814e..6a3c0193 100644 --- a/Kernel/platform-msx2/msx2.s +++ b/Kernel/platform-msx2/msx2.s @@ -20,6 +20,7 @@ .globl _mapslot_bank1 .globl _mapslot_bank2 .globl _need_resched + .globl _bufpool ; video driver .globl _vtinit @@ -56,6 +57,10 @@ .include "kernel.def" .include "../kernel.def" + .area _BUFFERS + +_bufpool: + .ds BUFSIZE * NBUFS ; ----------------------------------------------------------------------------- ; COMMON MEMORY BANK (0xF000 upwards) ; -----------------------------------------------------------------------------