mirror of https://github.com/gungwald/copy.git
57 lines
1.1 KiB
C
57 lines
1.1 KiB
C
#include <stdio.h>
|
|
#include <stdint.h>
|
|
|
|
#define PRODOS_MLI 0xbf00
|
|
#define ON_LINE (uint8_t) 0xc5
|
|
#define PRODOS_NAME_CAPACITY 16
|
|
|
|
struct OnlineArguments {
|
|
uint8_t argumentCount;
|
|
uint8_t unitNumber;
|
|
char **volumes;
|
|
};
|
|
|
|
struct OnlineArguments arguments;
|
|
char volumes[16][PRODOS_NAME_CAPACITY];
|
|
uint8_t argumentsAddrLowByte;
|
|
uint8_t argumentsAddrHighByte;
|
|
|
|
void online(void)
|
|
{
|
|
arguments.argumentCount = 2;
|
|
arguments.unitNumber = 0; // All units
|
|
arguments.volumes = volumes;
|
|
|
|
__asm__(".byte 1");
|
|
__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);
|
|
|
|
__asm__("jsr %w", PRODOS_MLI);
|
|
l1:
|
|
__asm__("nop");
|
|
l2:
|
|
__asm__("nop");
|
|
l3:
|
|
__asm__("nop");
|
|
__asm__("bne %g", errorHandler);
|
|
|
|
errorHandler:
|
|
fprintf(stderr, "Online system call failed\n");
|
|
}
|
|
|
|
void main(void)
|
|
{
|
|
online();
|
|
puts(volumes[0]);
|
|
}
|
|
|