From 8d06e3308b28ec9a1fae187bc44b83ce036341a5 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Sun, 10 Jun 2018 21:11:35 +0100 Subject: [PATCH] trs80m1: wire up all the model 3 floppy support (untested) --- Kernel/platform-trs80m1/Makefile | 4 ++-- Kernel/platform-trs80m1/devices.c | 10 ++++++++++ Kernel/platform-trs80m1/discard.c | 1 + Kernel/platform-trs80m1/fuzix.lnk | 2 ++ Kernel/platform-trs80m1/main.c | 5 +++-- Kernel/platform-trs80m1/trs80.s | 6 +++++- 6 files changed, 23 insertions(+), 5 deletions(-) diff --git a/Kernel/platform-trs80m1/Makefile b/Kernel/platform-trs80m1/Makefile index eac430f1..f8517220 100644 --- a/Kernel/platform-trs80m1/Makefile +++ b/Kernel/platform-trs80m1/Makefile @@ -1,10 +1,10 @@ -CSRCS = devlpr.c devtty.c devfd.c devhd.c devgfx.c +CSRCS = devlpr.c devtty.c devfd.c devfd3.c devhd.c devgfx.c CSRCS += devices.c main.c DISCARD_CSRCS = discard.c devhd_discard.c ASRCS = trs80.s trs80-bank.s crt0.s -ASRCS += tricks.s commonmem.s floppy.s +ASRCS += tricks.s commonmem.s floppy.s floppy3.s COBJS = $(CSRCS:.c=.rel) AOBJS = $(ASRCS:.s=.rel) diff --git a/Kernel/platform-trs80m1/devices.c b/Kernel/platform-trs80m1/devices.c index 0f138135..99ed5bc0 100644 --- a/Kernel/platform-trs80m1/devices.c +++ b/Kernel/platform-trs80m1/devices.c @@ -10,6 +10,8 @@ #include #include #include +#include +#include struct devsw dev_tab[] = /* The device driver switch table */ { @@ -35,3 +37,11 @@ bool validdev(uint16_t dev) return true; } +void floppy_setup(void) +{ + if (trs80_model == TRS80_MODEL3) { + dev_tab[1].dev_open = fd3_open; + dev_tab[1].dev_read = fd3_read; + dev_tab[1].dev_write = fd3_write; + } +} diff --git a/Kernel/platform-trs80m1/discard.c b/Kernel/platform-trs80m1/discard.c index f4415ce6..2861247c 100644 --- a/Kernel/platform-trs80m1/discard.c +++ b/Kernel/platform-trs80m1/discard.c @@ -10,6 +10,7 @@ void device_init(void) /* Time of day clock */ inittod(); #endif + floppy_setup(); hd_probe(); } diff --git a/Kernel/platform-trs80m1/fuzix.lnk b/Kernel/platform-trs80m1/fuzix.lnk index ecd65385..666b038d 100644 --- a/Kernel/platform-trs80m1/fuzix.lnk +++ b/Kernel/platform-trs80m1/fuzix.lnk @@ -21,7 +21,9 @@ platform-trs80m1/main.rel timer.rel kdata.rel platform-trs80m1/devfd.rel +platform-trs80m1/devfd3.rel platform-trs80m1/floppy.rel +platform-trs80m1/floppy3.rel platform-trs80m1/devhd.rel platform-trs80m1/devhd_discard.rel platform-trs80m1/devgfx.rel diff --git a/Kernel/platform-trs80m1/main.c b/Kernel/platform-trs80m1/main.c index 95877c51..647c1ecf 100644 --- a/Kernel/platform-trs80m1/main.c +++ b/Kernel/platform-trs80m1/main.c @@ -3,6 +3,7 @@ #include #include #include +#include uint16_t ramtop = PROGTOP; uint8_t trs80_model; @@ -43,7 +44,7 @@ __sfr __at 0xEC irqack3; void platform_interrupt(void) { uint8_t dummy; - if (trs_model != TRS80_MODEL3) { + if (trs80_model != TRS80_MODEL3) { uint8_t irq = *((volatile uint8_t *)0x37E0); tty_interrupt(); @@ -64,7 +65,7 @@ void platform_interrupt(void) if (irq & 0x70) tty_interrupt(); /* We don't handle IOBUS */ - if (irq & 0x04) + if (irq & 0x04) { kbd_interrupt(); timer_interrupt(); dummy = irqack3; diff --git a/Kernel/platform-trs80m1/trs80.s b/Kernel/platform-trs80m1/trs80.s index 6036b0da..e95b6f93 100644 --- a/Kernel/platform-trs80m1/trs80.s +++ b/Kernel/platform-trs80m1/trs80.s @@ -47,6 +47,7 @@ .globl unix_syscall_entry .globl outcharhex .globl null_handler + .globl fd_nmi_handler .include "kernel.def" @@ -85,7 +86,7 @@ _platform_reboot: init_early: ld a,(4) cp #0x30 - jr z, not_m3 + jr nz, not_m3 ld a,#1 ld (_trs80_model),a ld a,#0x74 @@ -161,6 +162,9 @@ _rom_vectors: ld hl, #unix_syscall_entry ld (0x4010), hl + ; Model III only but just writing it does no harm + ld hl,#fd_nmi_handler + ld (0x4049), hl jp map_kernel ; outchar: Wait for UART TX idle, then print the char in A -- 2.34.1