Научился билдить для симулятора ZDSII. Открываем в проектах File->Open Project -> ...\samples\Quick Start\Simulator.zdsproj
Не забываем в Project->Settings в Debug Tool Current выбрать Simulator. Строим проект из трех файлов:
main.c
console.cКод:#include <stdio.h> #include "QuickStart.h" #include "console.h" void main(void) { int ch; system_init(); printf("Hello World!\n"); while (1) { if (kbhit()) { ch = getchar(); putchar(ch); } } }
Simulator.cКод:#include <ez80.h> #include "console.h" extern unsigned long SysClkFreq; /* UART parameters */ #define UART_BAUDRATE 57600 #define UART_DATA_BITS 8 #define UART_PARITY 0 #define UART_STOP_BITS 1 #ifdef _SIMULATE #define UART 0 #else #define UART 0 #endif /* UART control register definitions */ #if (UART == 1) #ifdef _EZ80190 #define UZI_CTL UZI1_CTL #define UART1_BRG_L BRG1_DLR_L #define UART1_BRG_H BRG1_DLR_H #endif #define UART_BRG_L UART1_BRG_L #define UART_BRG_H UART1_BRG_H #define UART_RBR UART1_RBR #define UART_THR UART1_THR #define UART_IER UART1_IER #define UART_IIR UART1_IIR #define UART_FCTL UART1_FCTL #define UART_LCTL UART1_LCTL #define UART_MCTL UART1_MCTL #define UART_LSR UART1_LSR #define UART_MSR UART1_MSR #define UART_SPR UART1_SPR #define PORT_DR PC_DR #define PORT_DDR PC_DDR #define PORT_ALT1 PC_ALT1 #define PORT_ALT2 PC_ALT2 #else #ifdef _EZ80190 #define UZI_CTL UZI0_CTL #define UART0_BRG_L BRG0_DLR_L #define UART0_BRG_H BRG0_DLR_H #endif #define UART_BRG_L UART0_BRG_L #define UART_BRG_H UART0_BRG_H #define UART_RBR UART0_RBR #define UART_THR UART0_THR #define UART_IER UART0_IER #define UART_IIR UART0_IIR #define UART_FCTL UART0_FCTL #define UART_LCTL UART0_LCTL #define UART_MCTL UART0_MCTL #define UART_LSR UART0_LSR #define UART_MSR UART0_MSR #define UART_SPR UART0_SPR #define PORT_DR PD_DR #define PORT_DDR PD_DDR #define PORT_ALT1 PD_ALT1 #define PORT_ALT2 PD_ALT2 #endif /* UART control register bit definitions */ #ifdef _EZ80190 #define UZI_MODE_UART (1 << 0) #endif #define LCTL_DLAB (1 << 7) #define LSR_THRE (1 << 5) #define LSR_DR (1 << 0) #define MCTL_RTS (1 << 1) #define MCTL_DTR (1 << 0) #define FCTL_TRIG_1 (0 << 6) #define FCTL_TRIG_4 (1 << 6) #define FCTL_TRIG_8 (2 << 6) #define FCTL_TRIG_14 (3 << 6) #define FCTL_CLRTXF (1 << 2) #define FCTL_CLRRXF (1 << 1) #define FCTL_FIFOEN (1 << 0) /* UART macros */ #define LCTL(d, p, s) (((d-5)&3) | (((s-1)&1)<<2) | (p&3)) #define RX_DATA_READY() (UART_LSR & (unsigned char)LSR_DR) #define TX_FIFO_READY() (UART_LSR & (unsigned char)LSR_THRE) #define KBHIT() (RX_DATA_READY() ? 1 : 0) #define GETCH() (UART_RBR) #define PUTCH(ch) (UART_THR = ch) #define CONSOLE_END_LINE_CRLF 1 #define LF '\n' #define CR '\r' /* UART initialization */ void console_uart_init(void) { volatile unsigned char tmp; union { unsigned short word; unsigned char byte[2]; } brg; #ifdef _EZ80190 UZI_CTL = UZI_MODE_UART; /* Set UZI 0 device to UART mode */ #endif /* calculate baudrate generator value */ brg.word = (SysClkFreq + (8UL * (unsigned long)UART_BAUDRATE)) / (16UL * (unsigned long)UART_BAUDRATE); /* set baudrate generator */ UART_LCTL |= LCTL_DLAB; UART_BRG_H = brg.byte[1]; UART_BRG_L = brg.byte[0]; UART_LCTL &= ~LCTL_DLAB; /* set line control */ UART_LCTL = LCTL(UART_DATA_BITS, UART_PARITY, UART_STOP_BITS); /* clear any pending status information */ tmp = UART_LSR; tmp = UART_MSR; tmp = UART_IIR; tmp = UART_RBR; /* configure fifo for 14 bytes; clear fifos; enable fifo */ UART_FCTL = FCTL_TRIG_14 | FCTL_CLRTXF | FCTL_CLRRXF | FCTL_FIFOEN; /* set modem control */ UART_MCTL = MCTL_RTS | MCTL_DTR; /* configure port */ PORT_ALT2 |= 0x0F; PORT_ALT1 &= 0xF0; PORT_DDR |= 0x0F; } /* Console port initialization */ void console_init(void) { console_uart_init(); } int putch(int ch) { if (CONSOLE_END_LINE_CRLF && (ch == LF)) { while (!TX_FIFO_READY()); PUTCH(CR); } while (!TX_FIFO_READY()); PUTCH(ch); return (ch); } int kbhit(void) { return (KBHIT()); } int getch(void) { while (!RX_DATA_READY()); return (GETCH()); } int getche(void) { return (putch(getch())); }
Запускаем Debug ->GoКод:#include <stdio.h> #include "QuickStart.h" #include "console.h" void system_init(void) { console_init(); }
и видим результат вывода в консоль View->Debug Window->Simulatated Uart Output
Было бы неплохо теперь вместо консоли подключить симулятор консоли Agon-а. Но как это сделать, не залезая в код ZDSII? Есть идеи?