1 /* Z80 Mainboard Controller */
6 #include <avr/interrupt.h>
7 #include <avr/pgmspace.h>
8 #include <util/delay.h>
18 uint8_t xorshift(uint8_t new_seed)
20 static uint8_t seed = 0xA5;
21 if(new_seed) seed=new_seed;
31 /* initialize serial port and stdin/stdout */
37 /* initialize hardware and monitor */
38 printf_P(PSTR("\nAVR INIT "));
39 printf_P(PSTR("[BUS")); bus_init(); printf_P(PSTR("] "));
40 printf_P(PSTR("[I2C")); i2c_init(); printf_P(PSTR("] "));
41 printf_P(PSTR("[MEM")); mem_init(); printf_P(PSTR("] "));
42 printf_P(PSTR("[I/O")); io_init(); printf_P(PSTR("] "));
43 printf_P(PSTR("[MON] ")); monitor_init();
44 printf_P(PSTR("DONE.\nSend BREAK to enter monitor.\n"));
46 /* load initial program into memory */
51 for(uint8_t i = 0; i < 8; i++) printf("%02x ", mem_read(i));
56 printf_P(PSTR("Go!\n"));
62 if(!(MEMPIN & (1 << SEL))) { /* got I/O request */
64 /* answer the I/O request */
65 if(!(MEMPIN & (1 << RD))) {
66 // printf_P(PSTR("<IORD>"));
68 } else if(!(MEMPIN & (1 << WR))) {
69 // printf_P(PSTR("<IOWR>"));
72 printf_P(PSTR("<IOFAIL>"));
76 while(!(MEMPIN & (1 << SEL)));
79 if(uart_break) monitor(); /* enter monitor on break */
82 printf_P(PSTR("\nAVR END\n"));