msx2: use dynamic buffers
authorgeijoenr <geijoenr@gmail.com>
Sat, 10 Jun 2017 15:27:21 +0000 (17:27 +0200)
committergeijoenr <geijoenr@gmail.com>
Sat, 10 Jun 2017 19:46:40 +0000 (21:46 +0200)
Kernel/platform-msx2/config.h
Kernel/platform-msx2/crt0.s
Kernel/platform-msx2/devmegasd.c
Kernel/platform-msx2/fuzix.lnk
Kernel/platform-msx2/kernel.def
Kernel/platform-msx2/main.c
Kernel/platform-msx2/msx2.s

index 1e94d6c..53dde18 100644 (file)
@@ -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()
index aea39eb..c27b934 100644 (file)
@@ -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
index 868b8f7..55fabd3 100644 (file)
@@ -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();
 }
index aff19cd..c78d595 100644 (file)
@@ -1,6 +1,7 @@
 -mwxuy
 -i fuzix.ihx
 -b _CODE=0x0000
+-b _BUFFERS=0xD000
 -b _COMMONMEM=0xF000
 -b _DISCARD=0xE000
 -b _FONT=0xFA00
index 97fb7dc..f0a556a 100644 (file)
@@ -9,3 +9,4 @@ Z80_TYPE                    .equ 1
 
 PROGBASE                   .equ 0x0000
 PROGLOAD                   .equ 0x0100
+NBUFS                       .equ 6
index f69e5c6..c25abc3 100644 (file)
@@ -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;
+  }
+}
index c130814..6a3c019 100644 (file)
@@ -20,6 +20,7 @@
            .globl _mapslot_bank1
            .globl _mapslot_bank2
            .globl _need_resched
+            .globl _bufpool
 
            ; video driver
            .globl _vtinit
             .include "kernel.def"
             .include "../kernel.def"
 
+           .area _BUFFERS
+
+_bufpool:
+           .ds BUFSIZE * NBUFS
 ; -----------------------------------------------------------------------------
 ; COMMON MEMORY BANK (0xF000 upwards)
 ; -----------------------------------------------------------------------------