From d024340a72370e3777f0fc3fa98dce8356b4a6fe Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Tue, 31 Mar 2015 22:48:18 +0100 Subject: [PATCH] z80: add in and out operators (Not yet tested) --- Kernel/cpu-z80/cpu.h | 2 ++ Kernel/lowlevel-z80-banked.s | 24 ++++++++++++++++++++++++ Kernel/lowlevel-z80.s | 20 ++++++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/Kernel/cpu-z80/cpu.h b/Kernel/cpu-z80/cpu.h index 77c38934..3769db0c 100644 --- a/Kernel/cpu-z80/cpu.h +++ b/Kernel/cpu-z80/cpu.h @@ -17,6 +17,8 @@ typedef uint16_t irqflags_t; extern irqflags_t di(void); extern void irqrestore(irqflags_t f); +extern void out(uint8_t addr, uint8_t val); +extern uint8_t in(uint8_t addr); /* Z80 binaries start with a JP */ #define EMAGIC 0xc3 /* Header of executable */ diff --git a/Kernel/lowlevel-z80-banked.s b/Kernel/lowlevel-z80-banked.s index 25257d7e..992e75a0 100644 --- a/Kernel/lowlevel-z80-banked.s +++ b/Kernel/lowlevel-z80-banked.s @@ -44,6 +44,8 @@ .globl interrupt_handler .globl _di .globl _irqrestore + .globl _in + .globl _out ; imported symbols .globl _trap_monitor @@ -546,6 +548,28 @@ outnibble: add a, #0x07 ; start at 'A' (10+7+0x30=0x41='A') numeral:add a, #0x30 ; start at '0' (0x30='0') jp outchar +; +; I/O helpers for cases we don't use __sfr +; +_out: + pop hl + pop de + pop bc + out (c), b + push bc + push de + jp (hl) + +_in: + pop hl + pop de + pop bc + push bc + push de + push hl + in l, (c) + ret + ; ; Pull in the CPU specific workarounds diff --git a/Kernel/lowlevel-z80.s b/Kernel/lowlevel-z80.s index 5037bbb9..f8a9b47c 100644 --- a/Kernel/lowlevel-z80.s +++ b/Kernel/lowlevel-z80.s @@ -44,6 +44,8 @@ .globl interrupt_handler .globl _di .globl _irqrestore + .globl _out + .globl _in ; imported symbols .globl _trap_monitor @@ -537,6 +539,24 @@ outnibble: numeral:add a, #0x30 ; start at '0' (0x30='0') jp outchar +; +; I/O helpers for cases we don't use __sfr +; +_out: + pop hl + pop bc + out (c), b + push bc + jp (hl) + +_in: + pop hl + pop bc + push bc + push hl + in l, (c) + ret + ; ; Pull in the CPU specific workarounds ; -- 2.34.1