z80: add in and out operators
authorAlan Cox <alan@linux.intel.com>
Tue, 31 Mar 2015 21:48:18 +0000 (22:48 +0100)
committerAlan Cox <alan@linux.intel.com>
Tue, 31 Mar 2015 21:48:18 +0000 (22:48 +0100)
(Not yet tested)

Kernel/cpu-z80/cpu.h
Kernel/lowlevel-z80-banked.s
Kernel/lowlevel-z80.s

index 77c3893..3769db0 100644 (file)
@@ -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 */
index 25257d7..992e75a 100644 (file)
@@ -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
index 5037bbb..f8a9b47 100644 (file)
@@ -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
 ;