mirror of
https://github.com/gungwald/alarm-clock-6502.git
synced 2024-09-10 10:54:27 +00:00
51 lines
1.3 KiB
C
51 lines
1.3 KiB
C
#include <string.h> /* size_t */
|
|
|
|
#include "prodos.h"
|
|
#include "symbols.h"
|
|
#include "trace.h"
|
|
|
|
/*
|
|
char *turn_on_high_bits(char *s)
|
|
{
|
|
size_t i = 0;
|
|
|
|
for ( ; s[i] != '\0'; ++i) {
|
|
s[i] |= '\x80';
|
|
}
|
|
return s;
|
|
}
|
|
*/
|
|
|
|
bool run_basic_system_command(const char *command)
|
|
{
|
|
size_t i = 0;
|
|
bool finished_successfully = false;
|
|
|
|
TRACE_ENTER_STR("run_basic_system_command", (char *) command);
|
|
for ( ; command[i] != '\0'; ++i) {
|
|
/* Set the high bit and copy into the input buffer. */
|
|
INPBUF[i] = command[i] | '\x80';
|
|
}
|
|
/* Append carriage return with high bit set. */
|
|
INPBUF[i] = '\x8d';
|
|
TRACE_MSG("About to JSR DOSCMD");
|
|
asm("JSR %w", DOSCMD); /* %w is for a "word" value. */
|
|
asm("BIT %w", KBDSTRB); /* Clear strobe. */
|
|
|
|
/* If the command failed, the carry flag is set and register A has the
|
|
error code. */
|
|
asm("BCS %g", doscmd_error_handler);
|
|
finished_successfully = true;
|
|
goto finished;
|
|
|
|
doscmd_error_handler:
|
|
TRACE_MSG("About to JSR PRERR");
|
|
asm("JSR %w", PRERR); /* Prints the error. */
|
|
asm("CLC"); /* Required or bad stuff happens. */
|
|
|
|
finished:
|
|
TRACE_RET_BOOL("run_basic_system_command", finished_successfully);
|
|
return finished_successfully;
|
|
}
|
|
|