X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp.git/blobdiff_plain/89adce76dd02f2076ec6de1c6b434bc1f29512f4..35edb766593d019b89a3f40b6d6cdd2b50f18032:/avr/z180-serv.c diff --git a/avr/z180-serv.c b/avr/z180-serv.c index 2dbac65..e0b763f 100644 --- a/avr/z180-serv.c +++ b/avr/z180-serv.c @@ -1,32 +1,29 @@ /* + * (C) Copyright 2014 Leo C. + * + * SPDX-License-Identifier: GPL-2.0+ */ #include "common.h" -//#include -//#include #include -//#include -//#include #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) }; - - -