From 61a40957a457ee8b8f9d95bf2ea7e04e30d0e855 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Sun, 6 Sep 2020 18:50:16 -0400 Subject: [PATCH] v0.92: Copied improved /RAM, /RAM3 disconnection code from EDIT.SYSTEM. --- sortdir.c | 193 ++++++++++++++++++++++++++++++++++++++++++++--------- sortdir.po | Bin 143360 -> 143360 bytes 2 files changed, 162 insertions(+), 31 deletions(-) diff --git a/sortdir.c b/sortdir.c index eccabd6..d57c18e 100644 --- a/sortdir.c +++ b/sortdir.c @@ -53,6 +53,7 @@ * v0.89 Commented out free(usedlist) which was crashing for some reason. * v0.90 Fixed parsing of dateopts[], caseopts[], fixopts[] * v0.91 Added disconnect_ramdisk() + * v0.92 Copied RAMdisk disconnection/reconnection code from EDIT.SYSTEM */ //#pragma debug 9 @@ -61,20 +62,21 @@ //#pragma memorymodel 0 //#pragma optimize -1 /* Disable stack repair code */ -#include +#include +#include #include -#include -#include -#include -#include +#include #include +#include +#include +#include +#include +#include +#include //#include //#include //#include //#include -#include -#include -#include // For revers() and clrscr() #define CHECK /* Perform additional integrity checking */ #define SORT /* Enable sorting code */ @@ -287,6 +289,11 @@ static const char err_usage[] = "Usage error"; static const char err_80col[] = "Need 80 cols"; static const char err_128K[] = "Need 128K"; +// The following are used for reconnecting /RAM and /RAM3 on exit +uint16_t s3d1vec; +uint16_t s3d2vec; +uint8_t s3d1dev; +uint8_t s3d2dev; /* Prototypes */ #ifdef AUXMEM @@ -438,7 +445,7 @@ void hlinechar(char c) { } void confirm() { - puts("[Press any key to restart system]"); + puts("[Press Any Key]"); getchar(); } @@ -456,7 +463,6 @@ void err(enum errtype severity, const char *fmt, ...) { va_list v; uint rv = 0; putchar('\n'); - rebootafterexit(); // Necessary if we were called from BASIC if (severity == FINISHED) { hline(); if (errcount == 0) @@ -2063,7 +2069,7 @@ void interactive(void) { revers(1); hlinechar(' '); - fputs("S O R T D I R v0.91 alpha Use ^ to return to previous question", stdout); + fputs("S O R T D I R v0.92 alpha Use ^ to return to previous question", stdout); hlinechar(' '); revers(0); @@ -2419,30 +2425,148 @@ void parseargs() { #endif /* - * Disconnect RAM disk /RAM + * Check if there are files on a RAM disk + * dev - Device number of RAM disk + */ +void check_ramdisk(uint8_t dev) { + dhandle_t dio_hdl; + uint8_t c; + dio_hdl = dio_open(dev); + dio_read(dio_hdl, 2, buf); + dio_close(dio_hdl); + c = buf[0x25] + 256 * buf[0x26]; // File count + if (c > 0) { + fputs("\n/",stdout); + for (c = 0; c < (buf[0x04] & 0x0f); ++c) + putchar(buf[0x05 + c]); + printf(" is not empty.\n"); + printf("[Q] to quit, and preserve RAMDisk\n"); + putchar(0x07); // BELL + c = cgetc(); + if ((c == 'Q') || (c == 'q')) + exit(0); + } +} + +/* + * Disconnect RAM disks /RAM and/or /RAM3 + * Note that both /RAM and /RAM3 may be active at the same time!! */ void disconnect_ramdisk(void) { - uchar i, j; - uchar *devcnt = (uchar*)0xbf31; // Number of devices - uchar *devlst = (uchar*)0xbf32; // Disk device numbers - uint *s0d1 = (uint*)0xbf10; // s0d1 driver vector - uint *s3d2 = (uint*)0xbf26; // s3d2 driver vector - if (*s0d1 == *s3d2) - return; // No /RAM connected - for (i = *devcnt; i > 0; --i) { - if ((devlst[i] == 0xbf) || (devlst[i] == 0xbb) || - (devlst[i] == 0xb7) || (devlst[i] == 0xb3)) - break; + uint8_t i, j; + uint8_t *devcnt = (uint8_t*)0xbf31; // Number of devices + uint8_t *devlst = (uint8_t*)0xbf32; // Disk device numbers + uint16_t *s0d1 = (uint16_t*)0xbf10; // s0d1 driver vector + uint16_t *s3d1 = (uint16_t*)0xbf16; // s3d1 driver vector + uint16_t *s3d2 = (uint16_t*)0xbf26; // s3d2 driver vector + if (*s0d1 != *s3d2) + check_ramdisk(3 + (2 - 1) * 8); // s3d2 + if (*s0d1 != *s3d1) + check_ramdisk(3 + (1 - 1) * 8); // s3d1 + if (*s0d1 == *s3d2) { + s3d2dev = 0; + goto s3d1; // No /RAM + } + for (i = 0; i <= *devcnt; ++i) + if ((devlst[i] & 0xf0) == 0xb0) { + s3d2dev = devlst[i]; + for (j = i; j <= *devcnt; ++j) + devlst[j] = devlst[j + 1]; + break; } - if (i > 0) { - for (j = i; j < *devcnt; ++j) { - devlst[j] = devlst[j + 1]; - } + s3d2vec = *s3d2; + *s3d2 = *s0d1; + --(*devcnt); +s3d1: + if (*s0d1 == *s3d1) { + s3d1dev = 0; + return; // No /RAM3 + } + for (i = 0; i <= *devcnt; ++i) + if ((devlst[i] & 0xf0) == 0x30) { + s3d1dev = devlst[i]; + for (j = i; j <= *devcnt; ++j) + devlst[j] = devlst[j + 1]; + break; } - *s3d2 = *s0d1; - --(*devcnt); + s3d1vec = *s3d1; + *s3d1 = *s0d1; + --(*devcnt); } +// +// No point in reconnecting the RAMdisk(s) since we reboot on exit +// + +/* + * Stub to invoke the slot 3 drive 1 device driver + */ +void s3d1driver(void) { + __asm__("jmp (%v)", s3d1vec); +} + +/* + * Stub to invoke the slot 3 drive 2 device driver + */ +void s3d2driver(void) { + __asm__("jmp (%v)", s3d2vec); +} + +/* + * Reconnect RAMdisk on exit + */ +#pragma optimize (off) +void reconnect_ramdisk(void) { + uint8_t *devcnt = (uint8_t*)0xbf31; // Number of devices + uint8_t *devlst = (uint8_t*)0xbf32; // Disk device numbers + uint16_t *s3d1 = (uint16_t*)0xbf16; // s3d1 driver vector + uint16_t *s3d2 = (uint16_t*)0xbf26; // s3d2 driver vector + if (s3d2dev) { + *s3d2 = s3d2vec; + ++(*devcnt); + devlst[*devcnt] = s3d2dev; + __asm__("lda #$03"); // FORMAT request + __asm__("sta $42"); + __asm__("lda #$b0"); // Unit number (s3d2) + __asm__("sta $43"); + __asm__("lda #$00"); // LSB of buffer pointer + __asm__("sta $44"); + __asm__("lda #$20"); // MSB of buffer pointer + __asm__("sta $45"); + __asm__("lda $c08b"); // R/W enable LC, bank 1 on + __asm__("lda $c08b"); + __asm__("jsr %v", s3d2driver); // Call driver + __asm__("bit $c082"); // ROM back online + __asm__("bcc %g", s3d1); // If no error ... + putchar(0x07); // BELL + printf("Unable to reconnect S3D2"); + } +s3d1: + if (s3d1dev) { + *s3d1 = s3d1vec; + ++(*devcnt); + devlst[*devcnt] = s3d1dev; + __asm__("lda #$03"); // FORMAT request + __asm__("sta $42"); + __asm__("lda #$30"); // Unit number (s3d1) + __asm__("sta $43"); + __asm__("lda #$00"); // LSB of buffer pointer + __asm__("sta $44"); + __asm__("lda #$20"); // MSB of buffer pointer + __asm__("sta $45"); + __asm__("lda $c08b"); // R/W enable LC, bank 1 on + __asm__("lda $c08b"); + __asm__("jsr %v", s3d1driver); // Call driver + __asm__("bit $c082"); // ROM back online + __asm__("bcc %g", done); // If no error ... + putchar(0x07); // BELL + printf("Unable to reconnect S3D1"); + } +done: + return; +} +#pragma optimize (on) + //int main(int argc, char *argv[]) { int main() { #ifdef CMDLINE @@ -2460,8 +2584,6 @@ int main() { err(FATAL, err_128K); #endif - disconnect_ramdisk(); - // Clear system bit map for (pp = (uchar*)0xbf58; pp <= (uchar*)0xbf6f; ++pp) *pp = 0; @@ -2499,6 +2621,14 @@ int main() { dirblkbuf = (char*)malloc(sizeof(char) * BLKSZ); //printf("\nHeap: %u %u\n", _heapmemavail(), _heapmaxavail()); maxfiles = _heapmaxavail() / sizeof(struct fileent); + +#ifdef AUXMEM + disconnect_ramdisk(); +#endif + + //rebootafterexit(); // Necessary if we were called from BASIC + + clrscr(); printf("[%u]\n", maxfiles); filelist = (struct fileent*)malloc(sizeof(struct fileent) * maxfiles); @@ -2591,6 +2721,7 @@ int main() { writefreelist(dev); } +// reconnect_ramdisk(); /// CRASHES free(freelist); // free(usedlist); /// TODO This is crashing ATM #endif diff --git a/sortdir.po b/sortdir.po index 22bdff6b193bb9a8e847b79d24811a8857331578..7272cc8458eaad40e86c369edffad1eae0c0e1ed 100644 GIT binary patch delta 30164 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 t_w9-fsM;I<8Pw2w82ZR%G)jm@{