Add test for copying test memory, use the #defines in cli.c so it doesn't crash, reduce default log level, remove logging of all system function calls.
This commit is contained in:
parent
462b05d634
commit
528e7fbc0d
|
@ -56,8 +56,8 @@
|
||||||
#define CLI_KEY_HELP 0x8012 /* A2560K Menu/Help key */
|
#define CLI_KEY_HELP 0x8012 /* A2560K Menu/Help key */
|
||||||
|
|
||||||
// DEBUG: if I uncomment this then I get a crash
|
// DEBUG: if I uncomment this then I get a crash
|
||||||
//#define sys_txt_get_region txt_get_region
|
#define sys_txt_get_region txt_get_region
|
||||||
//#define sys_txt_set_region txt_set_region
|
#define sys_txt_set_region txt_set_region
|
||||||
|
|
||||||
//
|
//
|
||||||
// Types
|
// Types
|
||||||
|
|
|
@ -774,6 +774,85 @@ short cmd_test_ansi(short screen, int argc, const char * argv[]) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static short cli_test_textscroll (short screen, int argc, const char * argv[]) {
|
||||||
|
int i;
|
||||||
|
char c;
|
||||||
|
char *scr;
|
||||||
|
short *swrw;
|
||||||
|
char *dst;
|
||||||
|
|
||||||
|
if (argc != 2) {
|
||||||
|
printf("Copy size missing!");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
switch (screen)
|
||||||
|
case TXT_SCREEN_A2560K_A:
|
||||||
|
scr = (char*)ScreenText_A;
|
||||||
|
break:
|
||||||
|
case TXT_SCREEN_A2560K_B:
|
||||||
|
scr = (char*)ScreenText_B;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// How would we even get here ??
|
||||||
|
return 0;
|
||||||
|
end;
|
||||||
|
#elif MODEL == MODEL_FOENIX_A2560U || MODEL == MODEL_FOENIX_A2560U_PLUS
|
||||||
|
scr = (short*)ScreenText_A;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Fill screen byte by byte
|
||||||
|
const int line_length = 640/8; // # chars on a line
|
||||||
|
const int full_screen_size= line_length*480/8;
|
||||||
|
unsigned long jiffies = sys_time_jiffies() + 60*3;
|
||||||
|
|
||||||
|
if (strcmp("word", argv[1]) == 0) {
|
||||||
|
short *dstw;
|
||||||
|
char w[2];
|
||||||
|
|
||||||
|
// Fill using words
|
||||||
|
for (i=0, dstw=(short*)scr; i<full_screen_size/2; i++) {
|
||||||
|
if (w[0] > 'Y' || (i % (line_length/2)) == 0) {
|
||||||
|
w[0] = 'A';
|
||||||
|
w[1] = 'B';
|
||||||
|
}
|
||||||
|
|
||||||
|
*dstw++ = *((short*)&w);
|
||||||
|
w[0] += 2;
|
||||||
|
w[1] += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wait a bit
|
||||||
|
while (sys_time_jiffies() < jiffies);
|
||||||
|
|
||||||
|
for (i=0, dstw = (short*)scr; i<(full_screen_size-line_length)/2; i++) {
|
||||||
|
*dstw = dstw[1];
|
||||||
|
dstw++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (strcmp("byte", argv[1]) == 0) {
|
||||||
|
// Fill using bytes
|
||||||
|
for (i=0, dst=scr; i<full_screen_size; i++) {
|
||||||
|
if (c > 'Z' || (i % line_length) == 0)
|
||||||
|
c = 'A';
|
||||||
|
*dst++ = c++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wait a bit
|
||||||
|
while (sys_time_jiffies() < jiffies);
|
||||||
|
|
||||||
|
for (i=0, dst = scr; i<full_screen_size-line_length; i++) {
|
||||||
|
*dst = dst[1];
|
||||||
|
dst++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
print(screen, "Unrecognized option!");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
const t_cli_test_feature cli_test_features[] = {
|
const t_cli_test_feature cli_test_features[] = {
|
||||||
{"ANSI", "ANSI: test the ANSI escape codes", cmd_test_ansi},
|
{"ANSI", "ANSI: test the ANSI escape codes", cmd_test_ansi},
|
||||||
{"BITMAP", "BITMAP: test the bitmap screen", cli_test_bitmap},
|
{"BITMAP", "BITMAP: test the bitmap screen", cli_test_bitmap},
|
||||||
|
@ -802,6 +881,7 @@ const t_cli_test_feature cli_test_features[] = {
|
||||||
{"SID", "SID [EXT|INT]: test the SID sound chips", sid_test},
|
{"SID", "SID [EXT|INT]: test the SID sound chips", sid_test},
|
||||||
#endif
|
#endif
|
||||||
{"UART","UART [1|2]: test the serial port",cli_test_uart},
|
{"UART","UART [1|2]: test the serial port",cli_test_uart},
|
||||||
|
{"TEXTSCROLL", "TEXTSCROLL [byte|word]: fills the text memory with A..Z then scroll one char to the left", cli_test_textscroll},
|
||||||
{"END", "END", 0}
|
{"END", "END", 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -344,7 +344,7 @@ static short txt_a2560u_set_region(const p_rect region) {
|
||||||
char msg[80];
|
char msg[80];
|
||||||
sprintf(msg,"SET REGION %p x:%d, y:%d, w:%d, h:%d (visible:%d,%d)",
|
sprintf(msg,"SET REGION %p x:%d, y:%d, w:%d, h:%d (visible:%d,%d)",
|
||||||
region, region->origin.x, region->origin.y, region->size.width, region->size.height, a2560u_visible_size.width, a2560u_visible_size.height);
|
region, region->origin.x, region->origin.y, region->size.width, region->size.height, a2560u_visible_size.width, a2560u_visible_size.height);
|
||||||
//DEBUG(msg);
|
DEBUG(msg);
|
||||||
|
|
||||||
if ((region->size.width == 0) || (region->size.height == 0)) {
|
if ((region->size.width == 0) || (region->size.height == 0)) {
|
||||||
/* Set the region to the default (full screen) */
|
/* Set the region to the default (full screen) */
|
||||||
|
@ -504,7 +504,6 @@ static void txt_a2560u_scroll(short horizontal, short vertical) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
/* Clear the rectangles */
|
/* Clear the rectangles */
|
||||||
|
|
||||||
if (horizontal != 0) {
|
if (horizontal != 0) {
|
||||||
for (y = y0; y != y3; y += dy) {
|
for (y = y0; y != y3; y += dy) {
|
||||||
int row_dst = y * a2560u_max_size.width;
|
int row_dst = y * a2560u_max_size.width;
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#ifndef __VICKYIII_General_H
|
#ifndef __VICKYIII_General_H
|
||||||
#define __VICKYIII_General_H
|
#define __VICKYIII_General_H
|
||||||
|
|
||||||
#define VKY3_LUT_SIZE 16
|
#define VKY3_TEXT_LUT_SIZE 16
|
||||||
#define VKY3_TEXT_LUT_FG ((volatile unsigned long *)0x00B6C400) /**< Text foreground color look up table */
|
#define VKY3_TEXT_LUT_FG ((volatile unsigned long *)0x00B6C400) /**< Text foreground color look up table */
|
||||||
#define VKY3_TEXT_LUT_BG ((volatile unsigned long *)0x00B6C440) /**< Text background color look up table */
|
#define VKY3_TEXT_LUT_BG ((volatile unsigned long *)0x00B6C440) /**< Text background color look up table */
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
* Settings
|
* Settings
|
||||||
*/
|
*/
|
||||||
#ifndef DEFAULT_LOG_LEVEL
|
#ifndef DEFAULT_LOG_LEVEL
|
||||||
#define DEFAULT_LOG_LEVEL LOG_TRACE
|
#define DEFAULT_LOG_LEVEL LOG_DEBUG
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef LOG_CHANNEL
|
#ifndef LOG_CHANNEL
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
/**
|
/**
|
||||||
* Implementation of 68000 specific syscall routines.
|
* Implementation of 68000 specific syscall routines.
|
||||||
*
|
*
|
||||||
* NOTE: these routines are not called directly but are instead called through TRAP#13
|
* NOTE: these routines are not called directly but are instead called through TRAP#15
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// #define KDEBUG
|
||||||
|
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "syscalls.h"
|
#include "syscalls.h"
|
||||||
|
@ -21,11 +23,17 @@
|
||||||
#else
|
#else
|
||||||
#include "dev/ps2.h"
|
#include "dev/ps2.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include <stdio.h>
|
||||||
/*
|
/*
|
||||||
* Determine the correct system function implementation and call it.
|
* Determine the correct system function implementation and call it.
|
||||||
*/
|
*/
|
||||||
unsigned long syscall_dispatch(int32_t function, int32_t param0, int32_t param1, int32_t param2, int32_t param3, int32_t param4, int32_t param5) {
|
unsigned long syscall_dispatch(int32_t function, int32_t param0, int32_t param1, int32_t param2, int32_t param3, int32_t param4, int32_t param5) {
|
||||||
|
#ifdef KDEBUG
|
||||||
|
char buf[80];
|
||||||
|
sprintf(buf,"fn:0x%04x d1:%04x d2:0x%04x d3:0x%04x", (int)function, (int)param0, (int)param1, (int)param2);
|
||||||
|
DEBUG(buf);
|
||||||
|
#endif
|
||||||
|
|
||||||
switch (function & 0x00f0) {
|
switch (function & 0x00f0) {
|
||||||
case 0x00:
|
case 0x00:
|
||||||
/* Core System Calls */
|
/* Core System Calls */
|
||||||
|
@ -306,21 +314,30 @@ unsigned long syscall_dispatch(int32_t function, int32_t param0, int32_t param1,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case KFN_TXT_SET_REGION:
|
case KFN_TXT_SET_REGION:
|
||||||
|
#ifdef KDEBUG
|
||||||
{
|
{
|
||||||
char buf[60];
|
short ret;
|
||||||
sprintf(buf, "KFN_TXT_SET_REGION: %d %p", (short)param0, (p_rect)param1);
|
sprintf(buf, "KFN_TXT_SET_REGION: %d %p", param0, (p_rect)param1);
|
||||||
DEBUG(buf);
|
DEBUG(buf);
|
||||||
|
|
||||||
|
ret = txt_set_region((short)param0, (p_rect)param1);
|
||||||
|
sprintf(buf, "KFN_TXT_SET_REGION returning");
|
||||||
|
DEBUG(buf);
|
||||||
|
/* Sets the clipping/scrolling region for further text operations */
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
/* Sets the clipping/scrolling region for further text operations */
|
#else
|
||||||
return txt_set_region((short)param0, (p_rect)param1);
|
return txt_set_region((short)param0, (p_rect)param1);
|
||||||
|
#endif
|
||||||
|
|
||||||
case KFN_TXT_GET_REGION:
|
case KFN_TXT_GET_REGION:
|
||||||
|
#ifdef KDEBUG
|
||||||
/* Gets the current clipping/scrolling region */
|
/* Gets the current clipping/scrolling region */
|
||||||
{
|
{
|
||||||
char buf[60];
|
|
||||||
sprintf(buf, "KFN_TXT_GET_REGION: %d %p", (short)param0, (p_rect)param1);
|
sprintf(buf, "KFN_TXT_GET_REGION: %d %p", (short)param0, (p_rect)param1);
|
||||||
DEBUG(buf);
|
DEBUG(buf);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return txt_get_region((short)param0, (p_rect)param1);
|
return txt_get_region((short)param0, (p_rect)param1);
|
||||||
|
|
||||||
case KFN_TXT_SET_COLOR:
|
case KFN_TXT_SET_COLOR:
|
||||||
|
|
|
@ -358,7 +358,7 @@ _syscall:
|
||||||
move.l (44,sp),d3 ; Parameter 2 to D3
|
move.l (44,sp),d3 ; Parameter 2 to D3
|
||||||
move.l (40,sp),d2 ; Parameter 1 to D2
|
move.l (40,sp),d2 ; Parameter 1 to D2
|
||||||
move.l (36,sp),d1 ; Parameter 0 to D1
|
move.l (36,sp),d1 ; Parameter 0 to D1
|
||||||
move.l (32,sp),d0 ; Function number to D0
|
move.l (32,sp),d0 ; Function number to D0 (32 = 4(PC)+7(regs)*4)
|
||||||
|
|
||||||
TRAP #15 ; Call into the kernel
|
TRAP #15 ; Call into the kernel
|
||||||
|
|
||||||
|
@ -383,7 +383,7 @@ h_trap_15:
|
||||||
jsr _syscall_dispatch ; Call the C routine to do the dispatch
|
jsr _syscall_dispatch ; Call the C routine to do the dispatch
|
||||||
; Note: the C routine depends upon the register push order
|
; Note: the C routine depends upon the register push order
|
||||||
|
|
||||||
add.l #28,sp ; Remove parameters from the stack
|
adda.l #7*4,sp ; Remove parameters from the stack
|
||||||
rte ; Return to the caller
|
rte ; Return to the caller
|
||||||
|
|
||||||
h_trap_elev ori #$2000,(a7) ; Change the caller's privilege to supervisor
|
h_trap_elev ori #$2000,(a7) ; Change the caller's privilege to supervisor
|
||||||
|
|
Loading…
Reference in a new issue