copy/old/online2.c

57 lines
1.1 KiB
C
Raw Permalink Normal View History

2018-09-25 05:13:19 +00:00
#include <stdio.h>
2018-05-14 04:02:01 +00:00
#include <stdint.h>
#define PRODOS_MLI 0xbf00
2018-09-25 05:13:19 +00:00
#define ON_LINE (uint8_t) 0xc5
#define PRODOS_NAME_CAPACITY 16
struct OnlineArguments {
2018-05-14 04:02:01 +00:00
uint8_t argumentCount;
uint8_t unitNumber;
2018-09-25 05:13:19 +00:00
char **volumes;
};
2018-05-14 04:02:01 +00:00
2018-09-25 05:13:19 +00:00
struct OnlineArguments arguments;
char volumes[16][PRODOS_NAME_CAPACITY];
uint8_t argumentsAddrLowByte;
uint8_t argumentsAddrHighByte;
2018-05-14 04:02:01 +00:00
2018-09-25 05:13:19 +00:00
void online(void)
2018-05-14 04:02:01 +00:00
{
arguments.argumentCount = 2;
arguments.unitNumber = 0; // All units
2018-09-25 05:13:19 +00:00
arguments.volumes = volumes;
2018-10-08 05:07:48 +00:00
__asm__(".byte 1");
2018-09-25 05:13:19 +00:00
__asm__("lda #%b", ON_LINE);
__asm__("sta %g", l1);
argumentsAddrLowByte = (uint8_t) &arguments;
argumentsAddrLowByte = (uint8_t) &arguments >> 4;
__asm__("lda %v", argumentsAddrLowByte);
__asm__("sta %g", l2);
__asm__("lda %v", argumentsAddrHighByte);
__asm__("sta %g", l3);
2018-05-14 04:02:01 +00:00
__asm__("jsr %w", PRODOS_MLI);
2018-09-25 05:13:19 +00:00
l1:
__asm__("nop");
l2:
__asm__("nop");
l3:
__asm__("nop");
2018-05-14 04:02:01 +00:00
__asm__("bne %g", errorHandler);
errorHandler:
2018-09-25 05:13:19 +00:00
fprintf(stderr, "Online system call failed\n");
}
void main(void)
{
online();
puts(volumes[0]);
2018-05-14 04:02:01 +00:00
}