Some work on the RTC and a splashscreen (not working)
This commit is contained in:
parent
509955ad2a
commit
8d2b294672
|
@ -19,8 +19,8 @@ export CPU=32
|
|||
export MODEL=9
|
||||
|
||||
export VER_MAJOR = 0
|
||||
export VER_MINOR = 0
|
||||
export VER_BUILD = 1
|
||||
export VER_MINOR = 1
|
||||
export VER_BUILD = 2
|
||||
|
||||
export AS = vasmm68k_mot
|
||||
export ASFLAGS = -quiet -Fvobj -nowarn=62
|
||||
|
|
|
@ -13,7 +13,12 @@
|
|||
#include "cli/cli.h"
|
||||
#include "cli/dos_cmds.h"
|
||||
#include "cli/mem_cmds.h"
|
||||
#include "dev/ps2.h"
|
||||
#include "dev/rtc.h"
|
||||
#include "dev/uart.h"
|
||||
#include "uart_reg.h"
|
||||
#include "rtc_reg.h"
|
||||
#include "vicky_general.h"
|
||||
|
||||
#define MAX_COMMAND_SIZE 128
|
||||
#define MAX_ARGC 32
|
||||
|
@ -35,6 +40,9 @@ extern short cmd_settime(short channel, int argc, char * argv[]);
|
|||
extern short cmd_sysinfo(short channel, int argc, char * argv[]);
|
||||
extern short cmd_cls(short channel, int argc, char * argv[]);
|
||||
extern short cmd_showint(short channel, int argc, char * argv[]);
|
||||
extern short cmd_testuart(short channel, int argc, char * argv[]);
|
||||
extern short cmd_get_ticks(short channel, int argc, char * argv[]);
|
||||
extern short cmd_testrtc(short channel, int argc, char * argv[]);
|
||||
|
||||
/*
|
||||
* Variables
|
||||
|
@ -64,12 +72,15 @@ const t_cli_command g_cli_commands[] = {
|
|||
{ "PWD", "PWD : prints the current directory", cmd_pwd },
|
||||
// { "REN", "REN <old path> <new path> : rename a file or directory", cmd_rename },
|
||||
{ "RUN", "RUN <path> : execute a binary file", cmd_run },
|
||||
{ "GETTICKS", "GETTICKS : print number of ticks since reset", cmd_get_ticks },
|
||||
{ "GETTIME", "GETTIME : prints the current time", cmd_gettime },
|
||||
{ "SETTIME", "SETTIME yyyy-mm-dd HH:MM:SS : sets the current time", cmd_settime },
|
||||
{ "SHOWINT", "SHOWINT : Show information about the interrupt registers", cmd_showint },
|
||||
{ "SYSINFO", "SYSINFO : prints information about the system", cmd_sysinfo },
|
||||
{ "TESTIDE", "TESTIDE : fetches and prints the IDE MBR repeatedly", cmd_testide },
|
||||
{ "TESTCREATE", "TESTCREATE <path> : tries to create a file", cmd_testcreate },
|
||||
{ "TESTRTC", "TESTRTC : poll the RTC for a periodic interrupt", cmd_testrtc },
|
||||
{ "TESTUART", "TESTUART : echo key presses between terminal and console", cmd_testuart },
|
||||
{ "TYPE", "TYPE <path> : print the contents of a text file", cmd_type },
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
@ -87,6 +98,68 @@ int cmd_help(short channel, int argc, char * argv[]) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Try using the RTC periodic interrupt in polled mode
|
||||
*/
|
||||
short cmd_testrtc(short channel, int argc, char * argv[]) {
|
||||
char buffer[80];
|
||||
char * spinner = "|/-\\";
|
||||
short count = 0;
|
||||
int_enable(INT_RTC);
|
||||
|
||||
*RTC_RATES = 0xfe; /* Periodic interrupt rate: 0.5 s */
|
||||
*RTC_ENABLES = RTC_PIE; /* Turn on the periodic interrupt */
|
||||
|
||||
while (1) {
|
||||
if (*RTC_FLAGS & RTC_PF) {
|
||||
/* We got the periodic interrupt */
|
||||
|
||||
ScreenText_A[0] = spinner[count];
|
||||
ColorText_A[0] = 0x14;
|
||||
|
||||
if (count++ >= strlen(spinner) - 1) {
|
||||
count = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Print the number of ticks since last restart
|
||||
*/
|
||||
short cmd_get_ticks(short channel, int argc, char * argv[]) {
|
||||
char buffer[80];
|
||||
|
||||
sprintf(buffer, "%d\n", rtc_get_ticks());
|
||||
sys_chan_write(channel, buffer, strlen(buffer));
|
||||
return 0;
|
||||
}
|
||||
|
||||
short cmd_testuart(short channel, int argc, char * argv[]) {
|
||||
char c;
|
||||
char buffer[80];
|
||||
|
||||
uart_init(0);
|
||||
uart_setbps(0, UART_115200);
|
||||
uart_setlcr(0, LCR_DATABITS_8 | LCR_STOPBIT_1 | LCR_PARITY_NONE);
|
||||
|
||||
sprintf(buffer, "COM1: 115200, no parity, 1 stop bit, 8 data bits\nPress ESC to finish.\n");
|
||||
sys_chan_write(0, buffer, strlen(buffer));
|
||||
|
||||
while (1) {
|
||||
c = kbd_getc();
|
||||
if (c != 0) {
|
||||
if (c == 0x1b) {
|
||||
return 0;
|
||||
}
|
||||
uart_put(0, c);
|
||||
} else if (uart_has_bytes(0)) {
|
||||
c = uart_get(0);
|
||||
sys_chan_write_b(channel, c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Clear the screen
|
||||
*/
|
||||
|
|
|
@ -10,11 +10,25 @@
|
|||
#include "simpleio.h"
|
||||
|
||||
static long rtc_ticks;
|
||||
static long sof_ticks;
|
||||
|
||||
/*
|
||||
* Handle SOF interrupts... these are assumed to be about 1/60 sec apart
|
||||
* and will be used to drive the tick counter
|
||||
*/
|
||||
void sof_handle_int() {
|
||||
int_clear(INT_SOF_A);
|
||||
sof_ticks++;
|
||||
}
|
||||
|
||||
/*
|
||||
* Interrupt handler for the real time clock
|
||||
*/
|
||||
void rtc_handle_int() {
|
||||
char buffer[80];
|
||||
char * spinner = "|/-\\";
|
||||
short count = 0;
|
||||
|
||||
unsigned char flags;
|
||||
|
||||
//flags = *RTC_FLAGS;
|
||||
|
@ -39,24 +53,25 @@ void rtc_init() {
|
|||
unsigned char enables;
|
||||
|
||||
int_disable(INT_RTC);
|
||||
int_disable(INT_SOF_A);
|
||||
|
||||
/* Reset the ticks counter */
|
||||
rtc_ticks = 0;
|
||||
sof_ticks = 0;
|
||||
|
||||
/* Set the periodic interrupt to 976.5625 microseconds */
|
||||
*RTC_RATES = RTC_RATE_976us;
|
||||
*RTC_RATES = 0; // RTC_RATE_976us;
|
||||
|
||||
/* Enable the periodic interrupt */
|
||||
// *RTC_RATES = 0;
|
||||
*RTC_ENABLES = RTC_PIE;
|
||||
*RTC_ENABLES = 0; // RTC_PIE;
|
||||
|
||||
/* Make sure the RTC is on */
|
||||
*RTC_CTRL = RTC_STOP;
|
||||
|
||||
/* Register our interrupt handler and clear out any pending interrupts */
|
||||
int_register(INT_RTC, rtc_handle_int);
|
||||
int_clear(INT_RTC);
|
||||
int_enable(INT_RTC);
|
||||
int_register(INT_SOF_A, sof_handle_int);
|
||||
int_clear(INT_SOF_A);
|
||||
int_enable(INT_SOF_A);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -212,6 +227,14 @@ void rtc_get_time(p_time time) {
|
|||
time->second = bcd_to_i(second_bcd);
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the number of jiffies since the system last reset.
|
||||
* A "jiffy" should be considered to be 1/60 second.
|
||||
*/
|
||||
long rtc_get_jiffies() {
|
||||
return sof_ticks;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the number of ticks since the system last booted.
|
||||
*
|
||||
|
@ -226,9 +249,7 @@ void rtc_get_time(p_time time) {
|
|||
long rtc_get_ticks() {
|
||||
long result = 0;
|
||||
|
||||
int_disable(INT_RTC); /* Make sure we aren't changing the tick counter during the query */
|
||||
result = rtc_ticks;
|
||||
int_enable(INT_RTC);
|
||||
result = sof_ticks;
|
||||
|
||||
return rtc_ticks;
|
||||
}
|
||||
|
|
|
@ -50,4 +50,10 @@ extern void rtc_get_time(p_time time);
|
|||
*/
|
||||
extern long rtc_get_ticks();
|
||||
|
||||
/*
|
||||
* Get the number of jiffies since the system last reset.
|
||||
* A "jiffy" should be considered to be 1/60 second.
|
||||
*/
|
||||
extern long rtc_get_jiffies();
|
||||
|
||||
#endif
|
||||
|
|
|
@ -90,43 +90,50 @@ const char* VolumeStr[FF_VOLUMES] = { "sdc", "fdc", "hdc" };
|
|||
*LED2_REG = 0x02;
|
||||
}
|
||||
#endif
|
||||
//
|
||||
// /*
|
||||
// * Load and display the splash screen
|
||||
// */
|
||||
// void load_splashscreen() {
|
||||
// int i;
|
||||
//
|
||||
// /* Turn off the screen */
|
||||
// *MasterControlReg_A = VKY3_MCR_BLANK_EN;
|
||||
//
|
||||
// /* Copy the splash screen LUT */
|
||||
// for (i = 0; i < sizeof(splash_screen_cmap); i++) {
|
||||
// LUT_0[i] = splash_screen_cmap[i][0];
|
||||
// LUT_0[i+1] = splash_screen_cmap[i][1];
|
||||
// LUT_0[i+2] = splash_screen_cmap[i][2];
|
||||
// }
|
||||
//
|
||||
// /* Copy the bitmap to video RAM */
|
||||
// for (i = 0; i < sizeof(splash_screen_bmap); i++) {
|
||||
// VRAM_Bank0[i] = i * 0xff; // splash_screen_bmap[i];
|
||||
// }
|
||||
//
|
||||
// /* Set up the bitmap */
|
||||
// *BM0_Addy_Pointer_Reg = 0;
|
||||
// *BM0_Control_Reg = 1;
|
||||
//
|
||||
// /* Turn off the border */
|
||||
// *BorderControlReg_L_A = 0;
|
||||
//
|
||||
// /* Set a background color for the bitmap mode */
|
||||
// *BackGroundControlReg_A = 0x00800080;
|
||||
//
|
||||
// /* Display the splashscreen: 320x200 */
|
||||
// *MasterControlReg_A = 0x000000fD | VKY3_MCR_DOUBLE_EN;
|
||||
//
|
||||
// for (i = 0; i < 4096*1024; i++) ;
|
||||
// }
|
||||
|
||||
/*
|
||||
* Load and display the splash screen
|
||||
*/
|
||||
void load_splashscreen() {
|
||||
int i;
|
||||
|
||||
/* Turn off the screen */
|
||||
*MasterControlReg_A = VKY3_MCR_BLANK_EN;
|
||||
|
||||
for (i = 0; i < 256; i++) {
|
||||
LUT_0[4*i] = 0;
|
||||
LUT_0[4*i+1] = i;
|
||||
LUT_0[4*i+2] = i;
|
||||
LUT_0[4*i+3] = 0;
|
||||
}
|
||||
|
||||
|
||||
/* Copy the bitmap to video RAM */
|
||||
for (i = 0; i < 320*240; i++) {
|
||||
VRAM_Bank0[i] = i * 0xff; // splash_screen_bmap[i];
|
||||
}
|
||||
|
||||
/* Set up the bitmap */
|
||||
*BM0_Addy_Pointer_Reg = 0;
|
||||
*BM0_Control_Reg = 1;
|
||||
|
||||
/* Turn off the border */
|
||||
*BorderControlReg_L_A = 0;
|
||||
|
||||
/* Set a background color for the bitmap mode */
|
||||
*BackGroundControlReg_A = 0x00800000;
|
||||
|
||||
/* Display the splashscreen: 320x200 */
|
||||
*MasterControlReg_A = 0x000000fD | VKY3_MCR_DOUBLE_EN;
|
||||
|
||||
/* Play the SID test bong on the Gideon SID implementation */
|
||||
sid_test_internal();
|
||||
|
||||
for (i = 0; i < 2048*1024; i++) ;
|
||||
|
||||
/* Initialize the text channels */
|
||||
text_init();
|
||||
}
|
||||
|
||||
void print_error(short channel, char * message, short code) {
|
||||
print(channel, message);
|
||||
|
@ -148,9 +155,6 @@ void initialize() {
|
|||
// /* Hide the mouse */
|
||||
mouse_set_visible(0);
|
||||
|
||||
/* Display the splash screen */
|
||||
// load_splashscreen();
|
||||
|
||||
/* Initialize the text channels */
|
||||
text_init();
|
||||
|
||||
|
@ -176,8 +180,8 @@ void initialize() {
|
|||
/* Initialize the SID chips */
|
||||
sid_init_all();
|
||||
|
||||
/* Play the SID test bong on the Gideon SID implementation */
|
||||
sid_test_internal();
|
||||
/* Display the splash screen */
|
||||
load_splashscreen();
|
||||
|
||||
cdev_init_system(); // Initialize the channel device system
|
||||
log(LOG_INFO, "Channel device system ready.");
|
||||
|
@ -192,7 +196,7 @@ void initialize() {
|
|||
}
|
||||
|
||||
/* Initialize the real time clock */
|
||||
rtc_init();
|
||||
// rtc_init();
|
||||
|
||||
if (res = pata_install()) {
|
||||
log_num(LOG_ERROR, "FAILED: PATA driver installation", res);
|
||||
|
|
4988
src/foenixmcp.s68
4988
src/foenixmcp.s68
File diff suppressed because it is too large
Load diff
BIN
src/foenixmcp_u_20201020.bin
Normal file
BIN
src/foenixmcp_u_20201020.bin
Normal file
Binary file not shown.
|
@ -12,8 +12,8 @@
|
|||
#define UART2_BASE 0x00C022F8 /* Base address for UART 2 (COM2) */
|
||||
|
||||
#elif MODEL == MODEL_FOENIX_A2560U || MODEL == MODEL_FOENIX_A2560U_PLUS
|
||||
#define UART1_BASE 0x00B02808 /* Base address for UART 1 (COM1) */
|
||||
#define UART2_BASE 0x00B02809 /* Base address for UART 2 (COM2) */
|
||||
#define UART1_BASE 0x00B028F8 /* Base address for UART 1 (COM1) */
|
||||
#define UART2_BASE 0x00B028F9 /* Base address for UART 2 (COM2) */
|
||||
|
||||
#endif
|
||||
|
||||
|
|
10734
src/mapfile
10734
src/mapfile
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue