From 821429ad650cb50b6cb80cf6f24f42fbf0b9c536 Mon Sep 17 00:00:00 2001 From: Brett Gordon Date: Tue, 28 Feb 2017 14:30:29 -0500 Subject: [PATCH] coco3: Do bank16 swapping. --- Kernel/platform-coco3/Makefile | 4 +-- Kernel/platform-coco3/coco3.s | 46 +++++++++++++++++++++++++++++ Kernel/platform-coco3/config.h | 7 +++-- Kernel/platform-coco3/ide.s | 54 ++++++++++++++++++++++++++++++++++ Kernel/platform-coco3/libc.c | 7 ++++- Kernel/platform-coco3/main.c | 12 ++++++-- Kernel/platform-coco3/sdc.s | 12 +++----- Kernel/platform-coco3/tricks.s | 49 ++++++++++++++++++++++++++---- 8 files changed, 170 insertions(+), 21 deletions(-) create mode 100644 Kernel/platform-coco3/ide.s diff --git a/Kernel/platform-coco3/Makefile b/Kernel/platform-coco3/Makefile index d3ab94c0..f3129509 100644 --- a/Kernel/platform-coco3/Makefile +++ b/Kernel/platform-coco3/Makefile @@ -7,7 +7,7 @@ CDSRCS = ../dev/devide_discard.c DSRCS = ../dev/devdw.c ../dev/blkdev.c ../dev/devide.c NSRCS = ../dev/net/net_native.c -ASRCS = coco3.s crt0.s ../platform-dragon-nx32/ide.s +ASRCS = coco3.s crt0.s ide.s ASRCS += tricks.s commonmem.s usermem_gime.s drivewire.s sdc.s videoll.s COBJS = $(CSRCS:.c=$(BINEXT)) @@ -54,7 +54,7 @@ image: coco3.o ../start.o ../version.o ../lowlevel-6809.o \ tricks.o main.o ../timer.o ../kdata.o devices.o \ drivewire.o devdw.o ttydw.o blkdev.o mbr.o devide.o devide_discard.o \ - ../platform-dragon-nx32/ide.o devsdc.o sdc.o \ + ide.o devsdc.o sdc.o \ ../devio.o ../filesys.o ../process.o ../inode.o ../syscall_fs.o \ ../syscall_proc.o ../syscall_other.o ../mm.o ../bank16k.o ../swap.o \ ../tty.o ../devsys.o ../usermem.o ../syscall_fs2.o ../syscall_exec16.o \ diff --git a/Kernel/platform-coco3/coco3.s b/Kernel/platform-coco3/coco3.s index 8cd6e0f7..0ebcbb30 100644 --- a/Kernel/platform-coco3/coco3.s +++ b/Kernel/platform-coco3/coco3.s @@ -21,6 +21,9 @@ .globl _hz .globl _bufpool .globl _discard_size + .globl _copy_common + .globl blkdev_rawflg + .globl blkdev_unrawflg ; exported debugging tools .globl _trap_monitor @@ -373,3 +376,46 @@ map_for_swap sta 0xffa9 rts +;;; Copy existing common area to page +;;; takes: B = destination page +;;; returns: nothing +_copy_common + pshs u + incb + stb 0xffa8 + ldx #0xe200 + ldu #0xe200&0x1fff +a@ ldd ,x++ + std ,u++ + cmpx #0xff00 + bne a@ + clr 0xffa8 + puls u,pc + +;;; Helper for blkdev drivers to setup memory based on rawflag +blkdev_rawflg + ldx #_blk_op ; X = blkdev operations + ldb 0xffa8 ; get mmu setting + stb ret+1 ; save in stash + ldb 2,x ; get raw mode + decb ; compare to 1 + bmi out@ ; less than or equal: 0, or 1 don't do map + beq proc@ ; is direct to process + ;; is swap so map page into kernel memory at 0x0000 + ldb 3,x ; get page no + stb 0xffa8 ; task 1, kernel task regs. + incb ; inc page no... next block no. + stb 0xffa9 ; store it in mmu + rts +proc@ jsr map_process_always + ; get parameters from C, X points to cmd packet +out@ rts + +;;; Helper for blkdev drivers to clean up memory after blkdev_rawflg +blkdev_unrawflg +ret ldb #0 + stb 0xffa8 + incb + stb 0xffa9 + jsr map_kernel + rts diff --git a/Kernel/platform-coco3/config.h b/Kernel/platform-coco3/config.h index 8f09cabd..e912e164 100644 --- a/Kernel/platform-coco3/config.h +++ b/Kernel/platform-coco3/config.h @@ -20,11 +20,12 @@ #define MAX_MAPS 128-3 #define MAPBASE 0x0000 /* And swapping */ -/* #define SWAPDEV 2051 */ -#define SWAP_SIZE 0x62 +extern unsigned int swapdev; +#define SWAPDEV swapdev +#define SWAP_SIZE 0x71 /* FIXME */ #define SWAPBASE 0x0000 /* We swap the lot in one, include the */ -#define SWAPTOP 0xC300 /* uarea so its a round number of sectors */ +#define SWAPTOP 0xe200 /* uarea so its a round number of sectors */ #define UDATA_BLOCKS 0 /* We swap the uarea in the data */ #define UDATA_SWAPSIZE 0 #define MAX_SWAPS 32 diff --git a/Kernel/platform-coco3/ide.s b/Kernel/platform-coco3/ide.s new file mode 100644 index 00000000..a6b5ded0 --- /dev/null +++ b/Kernel/platform-coco3/ide.s @@ -0,0 +1,54 @@ +; +; Glennside style IDE block transfer logic +; + + .module dragonide + + .globl _devide_read_data + .globl _devide_write_data + + .globl _blk_op + + include "kernel.def" + include "../kernel09.def" + + .area .common + +; +; Standad mapping for Glennside style IDE +; +_devide_read_data: + pshs y,dp + lda #0xFF + tfr a,dp + jsr blkdev_rawflg + ldx _blk_op + leay 512,x + sty endp +readword: + lda u_ptab matches what we wanted - ldx _swapstack + ldx swapstack cmpx U_DATA__U_PTAB bne switchinfail -- 2.34.1