]> cloudbase.mooo.com Git - z180-stamp.git/blobdiff - avr/z180-serv.c
Add copyright notice
[z180-stamp.git] / avr / z180-serv.c
index 2dbac6515ded462d24ac47f963784780192af1d3..e0b763fa210934b17a1fe8b7db98ae1a6bf3e82d 100644 (file)
@@ -1,32 +1,29 @@
 /*
+ * (C) Copyright 2014 Leo C. <erbl259-lmu@yahoo.de>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include "common.h"
-//#include <avr/power.h>
-//#include <avr/pgmspace.h>
 #include <util/atomic.h>
-//#include <avr/sleep.h>
-//#include <string.h>
 
 #include "background.h"
-#include "debug.h"
 #include "serial.h"
 #include "z80-if.h"
+#include "debug.h"
 #include "z180-serv.h"
 
-
-
 /*--------------------------------------------------------------------------*/
 
 
 uint8_t z80_get_byte(uint32_t adr)
 {
        uint8_t data;
-       
+
        z80_bus_cmd(Request);
        data = z80_read(adr);
        z80_bus_cmd(Release);
-       
+
        return data;
 }
 
@@ -105,12 +102,12 @@ void do_message(int len, uint8_t *msg)
                                                fct, sub_fct);
                                return; /* TODO: unknown message # */
                        }
-               
+
                        ++i;
                }
 
                while (fct == z80_messages[i].fct) {
-                       if (sub_fct >= z80_messages[i].sub_min && 
+                       if (sub_fct >= z80_messages[i].sub_min &&
                                        sub_fct <= z80_messages[i].sub_max )
                                break;
                        ++i;
@@ -145,7 +142,7 @@ void check_msg_fifo(void)
        while ((ch = z80_memfifo_getc(fifo_msgin)) >= 0) {
                switch (state) {
                case 0:         /* wait for start of message */
-                       if (ch == 0x81) {
+                       if (ch == 0xAE) { /* TODO: magic number */
                                msglen = 0;
                                idx = 0;
                                state = 1;
@@ -173,12 +170,12 @@ void check_msg_fifo(void)
 int msg_handling(int state)
 {
        uint8_t pending;
-       
-       ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+
+       ATOMIC_BLOCK(ATOMIC_FORCEON) {
                pending = (Stat & S_MSG_PENDING) != 0;
                Stat &= ~S_MSG_PENDING;
        }
-               
+
        if (pending) {
                switch (state) {
                case 0:
@@ -200,37 +197,14 @@ int msg_handling(int state)
 
        return state;
 }
-       
-
-int console_handling(int state)
-{
-       int ch;
-       uint8_t pending;
-       
-       ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
-               pending = (Stat & S_CON_PENDING) != 0;
-               Stat &= ~S_CON_PENDING;
-       }
-               
-       if (pending) {
-               while ((ch = z80_memfifo_getc(fifo_conout)) >= 0) {
-                       putchar(ch);
-               }
-       }
-
-       return state;
-}
-       
-
 
 
 static int handle_msg_handling;
 
 void setup_z180_serv(void)
 {
-               
+
        handle_msg_handling = bg_register(msg_handling, 0);
-//     bg_register(console_handling, 0);
 }
 
 void restart_z180_serv(void)
@@ -240,28 +214,14 @@ void restart_z180_serv(void)
        z80_write(0x41, 0);
        z80_write(0x42, 0);
        z80_bus_cmd(Release);
-               
+
+       for (int i = 0; i < NUM_FIFOS; i++)
+               z80_memfifo_init(i, 0);
        bg_setstat(handle_msg_handling, 0);
 }
 
 /*--------------------------------------------------------------------------*/
 
-#if 0
-void dump_mem(const FLASH uint8_t *addr, uint32_t len)
-{
-       DBG_P(1, "hdrom dump:");
-       while (len) {
-               DBG_P(1, "\n    %.5x:", addr);
-               for (unsigned i = 0; i<16; i++)
-                       DBG_P(1, " %.2x", *addr++);
-               len -= len > 16 ? 16 : len;
-       }
-       DBG_P(1, "\n");
-}
-#endif
-/*--------------------------------------------------------------------------*/
-
-
 const FLASH uint8_t iniprog[] = {
        0xAF,                   // xor     a
        0xED, 0x39, 0x36,       // out0    (rcr),a         ;disable  DRAM refresh
@@ -299,18 +259,15 @@ const FLASH uint8_t test1[] = {
        0x21, 0x1E, 0x00,  //   ld      hl,dmclrt       ;load DMA registers
        0x06, 0x08,        //   ld      b,dmct_e-dmclrt
        0x0E, 0x20,        //   ld      c,sar0l
-       0xED, 0x93,        //   otimr   
+       0xED, 0x93,        //   otimr
        0x3E, 0xC3,        //   ld      a,0c3h          ;dst +1, src +1, burst
        0xED, 0x39, 0x31,  //   out0    (dmode),a       ;
-       0x3E, 0x62,        //   ld      a,062h          ;enable dma0, 
+       0x3E, 0x62,        //   ld      a,062h          ;enable dma0,
        0xED, 0x39, 0x30,  //cl_1:      out0    (dstat),a       ;copy 64k
        0x18, 0xFB,        //   jr      cl_1            ;
-       0x00, 0x00,        //dmclrt:    dw      0               ;src (inc) 
+       0x00, 0x00,        //dmclrt:    dw      0               ;src (inc)
        0x00,              //   db      0               ;src
        0x00, 0x00,        //   dw      0               ;dst (inc),
        0x00,              //   db      0               ;dst
        0x00, 0x00,        //   dw      0               ;count (64k)
 };
-
-
-