-CSRCS = devices.c main.c mini_ide.c
+CSRCS = devices.c main.c mini_ide.c devtty.c
-C3SRCS = libc.c devtty.c
+C3SRCS = libc.c
CDSRCS = discard.c mini_ide_discard.c
DSRCS = ../dev/devdw.c
ASRCS = crt0.s coco2.s ide.s
-ASRCS += tricks.s commonmem.s drivewire.s
+ASRCS += tricks.s commonmem.s
COBJS = $(CSRCS:.c=$(BINEXT))
C3OBJS = $(C3SRCS:.c=$(BINEXT))
all: $(OBJS)
export CROSS_CC_SEGD=-mcode-section=.text3 -mfar-code-page=2
+export CROSS_CC_SEGI=-mcode-section=.page1 -mfar-code-page=2
$(COBJS): %$(BINEXT): %.c
$(CROSS_CC) $(CROSS_CCOPTS) $(CROSS_CC_SEG2) -c $<
$(C3OBJS): %$(BINEXT): %.c
- $(CROSS_CC) $(CROSS_CCOPTS) $(CROSS_CC_SEGD) -c $<
+ $(CROSS_CC) $(CROSS_CCOPTS) $(CROSS_CC_SEGI) -c $<
$(CDOBJS): %$(BINEXT): %.c
$(CROSS_CC) $(CROSS_CCOPTS) $(CROSS_CC_SEGDISC) -c $<
coco2.o discard.o ../simple.o \
../start.o ../version.o ../lowlevel-6809.o \
tricks.o main.o ../timer.o ../kdata.o devices.o \
- drivewire.o devdw.o mini_ide.o mini_ide_discard.o \
+ mini_ide.o mini_ide_discard.o \
../devio.o ../filesys.o ../process.o ../inode.o ../syscall_fs.o \
../syscall_proc.o ../syscall_other.o ../mm.o ../swap.o \
../tty.o ../devsys.o ../usermem.o ../syscall_fs2.o ../syscall_exec16.o \
COCO2
=====
-COCO or Dragon 64 with an IDE port, cartridge and 64K of RAM
+COCO or Dragon 64 with an IDE port 64K of RAM
Supported hardware:
IDE (Glenside or compatible)
Memory Map
==========
0000-00FF Interrupt stack
-0100-01FF Vectors (then wasted - could hide libc.o in there ?)
+0100-01FF Vectors and then libc
0200-03FF Display
0400-7FFF Code/Data for kernel (take care to keep this below 8000 and
shuffle stuff if needed to make it fit)
-8000-EFFF User space
-EC00-FBFF More kernel bits
-FC00-FEFF udata
+8000-F1FF User space (28.5K)
+F200-FBFF More kernel bits
+FD00-FEFF udata
FF00-FFFF I/O etc
MPI switching
-Could we do a cartridge version
-- Re-order so common is in low memory
-- Support map_kernel/map_process flipping
-- Add asm helpers for user mode copying (trivial - and since we never copy
- into kernel ROM we can optimise them a lot - one map switch only)
-- Fix IDE to support the map flip on transfers (needs little asm code
- adding)
-- How to do discard, can we just take the hit or do we need to copy the
- entire cartridge into high RAM, run in high RAM with discard at say
- 0xA000 and then in platform_discard switch on map_kernel cartridge
- selection so we can let userspace blow away the upper 32K of the RAM
- mapping.
-
-16K Cartridge version would give us space for
-- Proper video (costs us about 8K)
-- Nice loader (just 'EXEC $C000' and go) < 1K
-- Probably all of sound/joysticks/printer/floppy and a few more buffers
-- Full size user memory bank (so can run full v7 shell) 4K
-
-
-Write a loader into the cartridge start so it bootstraps off disk and runs
-nicely
-
-6847T1 lower case ?
-
+See platform-coco2cart for the actual resulting cartridge based implementation
#define UDATA_BLKS 1
#define CONFIG_USERMEM_DIRECT
+#define CONFIG_LEVEL_0 /* Minimal system */
+
#define CONFIG_BANKS 1
/* And swapping */
#define SWAPDEV 0x0 /* Uses part of IDE slice 0 */
-#define SWAP_SIZE 0x40 /* 32K in 512 byte blocks */
+#define SWAP_SIZE 0x39 /* 512 byte blocks */
#define SWAPBASE 0x8000 /* We swap the lot, including stashed uarea */
-#define SWAPTOP 0xEC00 /* so it's a round number of 512 byte sectors */
+#define SWAPTOP 0xF200 /* so it's a round number of 512 byte sectors */
#define UDATA_SIZE 0x0200 /* one block */
#define MAX_SWAPS 32
#define TICKSPERSEC 50 /* Ticks per second */
#define PROGBASE 0x8000 /* also data base */
#define PROGLOAD 0x8000 /* also data base */
-#define PROGTOP 0xEC00 /* Top of program */
+#define PROGTOP 0xF200 /* Top of program */
/* We need a tidier way to do this from the loader */
#define CMDLINE NULL /* Location of root dev name */
#define NDEVS 2 /* Devices 0..NDEVS-1 are capable of being mounted */
/* (add new mountable devices to beginning area.) */
#define TTYDEV 513 /* Device used by kernel for messages, panics */
-#define NBUFS 6 /* Number of block buffers */
+#define NBUFS 5 /* Number of block buffers */
#define NMOUNTS 2 /* Number of mounts at a time */
#define swap_map(x) ((uint8_t *)(x))
{ nxio_open, no_close, no_rdwr, no_rdwr, no_ioctl },
{ nxio_open, no_close, no_rdwr, no_rdwr, no_ioctl },
{ nxio_open, no_close, no_rdwr, no_rdwr, no_ioctl },
- /* 8: /dev/dw DriveWire remote disk images */
- { dw_open, no_close, dw_read, dw_write, no_ioctl },
};
bool validdev(uint16_t dev)
define lensympat __sectionlen_%s__
section .istack load 0x0000
section .vectors load 0x0100
+section .page1
section .start load 0x0400
section .text
section .text2
section .bss
-section .video load 0xEC00
+section .video load 0xF200
section .data
section .videodata
section .common