Start work on UART driver
This is incomplete and not working (tested in MAME only so far)
diff --git a/contiki-vsmile/Makefile b/contiki-vsmile/Makefile
index 9c42d1e..b0113fb 100644
--- a/contiki-vsmile/Makefile
+++ b/contiki-vsmile/Makefile
@@ -1,6 +1,6 @@
#####################################################################
#
-# Created by u'nSP IDE V4.0.0 21:22:21 09/21/21
+# Created by u'nSP IDE V4.0.0 22:11:18 09/21/21
#
#####################################################################
diff --git a/contiki-vsmile/contiki-vsmile.lik b/contiki-vsmile/contiki-vsmile.lik
index 1889c91..7506b01 100644
--- a/contiki-vsmile/contiki-vsmile.lik
+++ b/contiki-vsmile/contiki-vsmile.lik
@@ -33,45 +33,43 @@
;Align: IRAM in "arg.obj" with 0
;Locate: IRAM in "conio.obj" at A086 linkat 187
;Align: IRAM in "conio.obj" with 0
-;Locate: IRAM in "ctk-arch.obj" at AC89 linkat D8A
-;Align: IRAM in "ctk-arch.obj" with 0
-;Locate: IRAM in "petsciiconv.obj" at AC8A linkat D8B
+;Locate: IRAM in "petsciiconv.obj" at AC89 linkat D8A
;Align: IRAM in "petsciiconv.obj" with 0
-;Locate: IRAM in "program-handler.obj" at AD0D linkat E0E
+;Locate: IRAM in "program-handler.obj" at AD0C linkat E0D
;Align: IRAM in "program-handler.obj" with 0
-;Locate: IRAM in "about.obj" at AD3A linkat E3B
+;Locate: IRAM in "about.obj" at AD39 linkat E3A
;Align: IRAM in "about.obj" with 0
-;Locate: IRAM in "welcome.obj" at ADDA linkat EDB
+;Locate: IRAM in "welcome.obj" at ADD9 linkat EDA
;Align: IRAM in "welcome.obj" with 0
;Locate: CODE in "contiki-main.obj" at 9E6B
;Align: CODE in "contiki-main.obj" with 0
-;Locate: CODE in "strncmp.obj" at 9BFF
+;Locate: CODE in "strncmp.obj" at 9C03
;Align: CODE in "strncmp.obj" with 0
;Locate: CODE in "ctk.obj" at 829B
;Align: CODE in "ctk.obj" with 0
;Locate: CODE in "ctk-conio.obj" at 8DE5
;Align: CODE in "ctk-conio.obj" with 0
-;Locate: CODE in "ek.obj" at 9727
+;Locate: CODE in "ek.obj" at 972B
;Align: CODE in "ek.obj" with 0
-;Locate: CODE in "ek-service.obj" at 9C8A
+;Locate: CODE in "ek-service.obj" at 9C8E
;Align: CODE in "ek-service.obj" with 0
;Locate: CODE in "arg.obj" at 9ED5
;Align: CODE in "arg.obj" with 0
;Locate: CODE in "conio.obj" at 9465
;Align: CODE in "conio.obj" with 0
-;Locate: CODE in "ctk-arch.obj" at 9E15
+;Locate: CODE in "ctk-arch.obj" at 9E19
;Align: CODE in "ctk-arch.obj" with 0
-;Locate: CODE in "timer.obj" at 9D10
+;Locate: CODE in "timer.obj" at 9D14
;Align: CODE in "timer.obj" with 0
-;Locate: CODE in "petsciiconv.obj" at 9D94
+;Locate: CODE in "petsciiconv.obj" at 9D98
;Align: CODE in "petsciiconv.obj" with 0
-;Locate: CODE in "program-handler.obj" at 9ABC
+;Locate: CODE in "program-handler.obj" at 9AC0
;Align: CODE in "program-handler.obj" with 0
;Locate: about_init_ptsec in "about-dsc.obj" at 8299
;Align: about_init_ptsec in "about-dsc.obj" with 0
-;Locate: CODE in "about.obj" at 99E0
+;Locate: CODE in "about.obj" at 99E4
;Align: CODE in "about.obj" with 0
-;Locate: CODE in "welcome.obj" at 9B67
+;Locate: CODE in "welcome.obj" at 9B6B
;Align: CODE in "welcome.obj" with 0
;Locate: __sn_section_RES_FONT_BIN in "font_bin.res" at AE40
;Locate: CODE in "_GPTag" of "CMacro1016.lib" at 9EFF
diff --git a/contiki-vsmile/ctk/conio.c b/contiki-vsmile/ctk/conio.c
index 63f1354..6125f36 100644
--- a/contiki-vsmile/ctk/conio.c
+++ b/contiki-vsmile/ctk/conio.c
@@ -63,6 +63,16 @@
static volatile int* const PPU_SPRITE_CTRL = 0x2842;
static volatile int* const PPU_COLOR = 0x2B00;
+
+ volatile unsigned int* const UART_CONTROL = 0x3D30;
+ volatile unsigned int* const UART_BAUDRATE_LOW = 0x3D33;
+ volatile unsigned int* const UART_BAUDRATE_HIGH = 0x3D34;
+
+ volatile unsigned int* const PORTC_DATA = 0x3D3B;
+ volatile unsigned int* const PORTC_DIR = 0x3D3D;
+ volatile unsigned int* const PORTC_ATTR = 0x3D3E;
+ volatile unsigned int* const PORTC_SPECIAL = 0x3D3F;
+
int i;
*PPU_BG1_SCROLL_X = 0;
@@ -124,18 +134,16 @@
PPU_COLOR[129+112] = make_color(12, 12, 12); // Focused widget
PPU_COLOR[128+112] = make_color(24, 24, 24);
- PPU_COLOR[0] = make_color(0, 0, 0); // Border
- PPU_COLOR[1] = make_color(18, 18, 31); // Screen
- PPU_COLOR[3] = make_color(31, 31, 31); // Menu
- PPU_COLOR[4] = make_color(31, 15, 15); // Active menu item
- PPU_COLOR[5] = make_color(30, 30, 30); // Dialogs
- PPU_COLOR[6] = make_color(12, 12, 31); // Hyperlinks
- PPU_COLOR[7] = make_color(24, 24, 31); // Moving window
- PPU_COLOR[8] = make_color(24, 24, 24); // Inactive window
+ // Enable Uart RX (controller input)
+ *UART_BAUDRATE_LOW = 0xA0;
+ *UART_BAUDRATE_HIGH = 0xFE;
+ *UART_CONTROL = 1 << 6;
- PPU_COLOR[2+16] = make_color(31, 31, 31);
- PPU_COLOR[6+16] = make_color(0, 0, 31);
- PPU_COLOR[7+16] = make_color(31, 0, 31);
+ // Enable controller CTS
+ *PORTC_DIR = 1 << 8;
+ *PORTC_ATTR = 1 << 8;
+ *PORTC_SPECIAL = 3 << 13; // UART Tx and Rx in "special" mode
+ *PORTC_DATA = 1 << 8;
}
/*-----------------------------------------------------------------------------------*/
diff --git a/contiki-vsmile/ctk/ctk-arch.c b/contiki-vsmile/ctk/ctk-arch.c
index ff60d17..0ab5a3f 100644
--- a/contiki-vsmile/ctk/ctk-arch.c
+++ b/contiki-vsmile/ctk/ctk-arch.c
@@ -11,12 +11,15 @@
ctk_arch_key_t
ctk_arch_getkey(void)
{
- return 0;
+ volatile unsigned int* const UART_RX = 0x3D36;
+ return *UART_RX;
}
unsigned char kbhit(void)
{
- return 0;
+ volatile unsigned int* const UART_STATUS = 0x3D31;
+
+ return *UART_STATUS & 1;
}
#if 0