From 351184841ad7251350ff527c870c7887d8b8ff1c Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Thu, 10 Sep 2020 20:24:03 -0400 Subject: [PATCH] New utility DISCONN.SYSTEM, which disconnects any drives mapped to slot 1. --- Makefile | 15 +++++++++++--- disconn.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++ sortdir.po | Bin 143360 -> 143360 bytes 3 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 disconn.c diff --git a/Makefile b/Makefile index 818b404..c8cf3c8 100644 --- a/Makefile +++ b/Makefile @@ -11,19 +11,28 @@ CC65LIBDIR = $(CC65DIR)/lib CC65INCDIR = $(CC65DIR)/include CA65INCDIR = $(CC65DIR)/asminc -all: sortdir.po sortdir.system\#ff0000 +all: sortdir.po sortdir.system\#ff0000 disconn.system\#ff0000 clean: - rm -f *.s *.o *.map sortdir + rm -f *.s *.o *.map sortdir.system* disconn.system* sortdir.o: sortdir.c $(CC65BINDIR)/cc65 -I $(CC65INCDIR) -t apple2enh -D A2E -o sortdir.s sortdir.c $(CC65BINDIR)/ca65 -I $(CA65INCDIR) -t apple2enh sortdir.s +disconn.o: disconn.c + $(CC65BINDIR)/cc65 -I $(CC65INCDIR) -t apple2enh -o disconn.s disconn.c + $(CC65BINDIR)/ca65 -I $(CA65INCDIR) -t apple2enh disconn.s + sortdir.system\#ff0000: sortdir.o $(CC65BINDIR)/ld65 -m sortdir.map -o sortdir.system\#ff0000 -C apple2enh-system.cfg sortdir.o $(CC65LIBDIR)/apple2enh.lib -sortdir.po: sortdir.system\#ff0000 +disconn.system\#ff0000: disconn.o + $(CC65BINDIR)/ld65 -m disconn.map -o disconn.system\#ff0000 -C apple2enh-system.cfg disconn.o $(CC65LIBDIR)/apple2enh.lib + +sortdir.po: sortdir.system\#ff0000 disconn.system\#ff0000 cadius deletefile sortdir.po /p8.2.5/sortdir.system cadius addfile sortdir.po /p8.2.5 sortdir.system\#ff0000 + cadius deletefile sortdir.po /p8.2.5/disconn.system + cadius addfile sortdir.po /p8.2.5 disconn.system\#ff0000 diff --git a/disconn.c b/disconn.c new file mode 100644 index 0000000..46c3b2e --- /dev/null +++ b/disconn.c @@ -0,0 +1,59 @@ +// +// Very simple utility which just disconnects any drives mapped to slot 1 +// Bobbi September 2020 +// + +#include +#include +#include + +/* + * Disconnect drives from slot 1 + */ +void disconnect_slot1(void) { + 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 *s1d1 = (uint16_t*)0xbf12; // s3d1 driver vector + uint16_t *s1d2 = (uint16_t*)0xbf22; // s3d2 driver vector + if (*s0d1 == *s1d2) + goto s1d1; // No s1d2 + for (i = 0; i <= *devcnt; ++i) + if ((devlst[i] & 0xf0) == 0x90) { + for (j = i; j <= *devcnt; ++j) + devlst[j] = devlst[j + 1]; + break; + } + *s1d2 = *s0d1; + --(*devcnt); +s1d1: + if (*s0d1 == *s1d1) + return; // No s1d1 + for (i = 0; i <= *devcnt; ++i) + if ((devlst[i] & 0xf0) == 0x10) { + for (j = i; j <= *devcnt; ++j) + devlst[j] = devlst[j + 1]; + break; + } + *s1d1 = *s0d1; + --(*devcnt); +} + +void main(void) { + char c; + printf("*********************************\n"); + printf("** Will disconnect any drives **\n"); + printf("** mapped to slot 1 **\n"); + printf("*********************************\n\n"); + printf(" Press [D] to disconnect drives\n"); + printf(" Any other key to cancel\n"); + c = cgetc(); + if ((c == 'd') || (c == 'D')) { + disconnect_slot1(); + printf("\n** Done.\n"); + } else { + printf("\n** Cancelled.\n"); + } +} + diff --git a/sortdir.po b/sortdir.po index 7272cc8458eaad40e86c369edffad1eae0c0e1ed..e4d947a5c255ab1e2e0abd3b13498bc8f35e298a 100644 GIT binary patch delta 3492 zcmbVPeQ*=U6~B|^FA0ora4=0FYfFwk(Jd*RI2a5D( z(HUFHS@vCI&Nc?ZjB>R+oa%FJm^NinVz&tdLE5=~%(Q~eDg(iwVT{`R9?c(TbLT9Y2Ta-@Imh1Fk z-W*@OH%aP_v2 zpWuk(xJ4wi-KC7HOHj8Lx<_-JE!UOix=QF0`RGk|f=0b=qU7b2FldKedLH{G3TU#w zJjh3Qt=AuHi?oH<-U@|Msf4wMPgoUdj3@J~WFCb&-RNzfk;lG|*c}y#LKq}3XJ@Sz zI^H7yZIiT{VW?4gnVZ}MX>H%h$Pf32{3D}FA*lF5h2={pa52={+R9&{+Fn` ztYvxnNd>D`-j|j?R+ zV86Bk>o=~|V*Otn_|!Jyk>`n5Z4(~ZOa$=VA)sHnk=2nD*jw%yN{uIw$UoCd9bJM2 z+x1YSH`<3<+>!q15z-ArkE&GZ$)14=@EIErdl}O9G4kIoEu~%ZS3f{unL$nVlx|h> z&o04zy--cKbd_E_)=yfr+m2qgv$8{_6zhp_CtkVM!>PFoi&;Z?%1yeTyA~CUn zNhp0lFP_eoIv>o3c&1gaPuzs1%~;DtQZ}*@U)hAURruu9&3Lpx+Jw6|<7#aMzPc%l zQ(7%1!+9!|dU8sv#W84CV67VKdC2ZSeg}vK5y64@9YW;`n1c%1%Ad^ea9-MCt$Zpc z4R99%8 z#KC2%l2zyIadWaVQpMKFmwsR4AM?X~RrXZs?7RMW{!{RjyXU0N{?rfP)xaA!2t=H3 zJI`}T9%_WV^$!ce1waDLop0md>`-XAn|;Lt7$xbVQH#ZL^2~Y0FqLy^VKpai!4W~) zis7cA#{@U67ppcXNh!9&4XRoHCsZZ@AhH+TAgRaDWUss*{2JHSUfqU zm#4orrO(p{vbGgRvdG2e9zjnM7;7O#mm-u zi1Dh)g{D5gymj)4Vku_$qpt&){M<*L2mkJgb`Ai_8LVdc>e z>lmZ>;zj+sS_+$Vb~OWSb~!Xh76Pk_bPCW2?0$E5E7o3TM&cwVll)Lyc~dK?(b@A3 zTapsS1oDPNcEdN^ih%@`W@BEmvw`f6M(Y zzz5?OVm*S8dqbQl6l6-wD7v73mg%}I&$;q|qu%8<83kj)4g^I@zmn@8rf_gTF9Yk7Xlt~TP zq5fJi0TZM3>aTJ_4V;j~CH9hcD3TF5?Y2Z~fCBB+qtDs@t! z3=3J{%}nP-{XY}+Mn2K5bDsM>77OL^pr(dhyMm2qZwuP9vt=(@f@VA(PuAqyJ9h3w zjXU;)x3x4k2e<7-4b2BpW9yFn!957&Z0_UBLLu~YYjDpVw7LET;tSC3faQRQMIFGl z>mjd~_{E zQ#4JPXzHG4A9H|tnPI;e6@SP`!;E-}kxnzhnW-u9XSwceru!X6Zn))hiJvnPhqZHz zQI=d6NUjecYMkP5Dim2CimZ!qDqYP{)X#l#TVBPggc(Zggn~(l73WO&o}1v51wZCb zl)`U@8}O&)le`l?5U&qY;}fhtUuzjp)4EMvrntm+8RA3~V>F6SQ IXpyP(zZeTU_5c6? delta 120 zcmZp8z|ru4V}mLSBim#(mPsaRng&93{~t3jfEY{+41WH>KK>!jKHhqsp3V#mYz_>J z409M5bkrqSkFR^oprE5J&bs*xiwZjv`~S^CJn#N4d%?&g)Y{(B+11_C+t+{c)af&4 Y&z--pS&;1=