diff --git a/Makefile.mk b/Makefile.mk index ba9fecf..23ef4ba 100644 --- a/Makefile.mk +++ b/Makefile.mk @@ -16,7 +16,7 @@ DUMPCMDTBL_PROG = dumpcmdtbl AFPBRIDGE_OBJS = afpinit.o afpbridge.o aspinterface.o dsi.o readtcp.o endian.o tcpconnection.o atipmapping.o asmglue.o installcmds.o cmdproc.o callat.o AFPBRIDGE_PROG = AFPBridge -AFPMOUNTER_OBJS = afpcdev.o afpurlparser.o cdevutil.o +AFPMOUNTER_OBJS = cdevstart.o afpcdev.o afpurlparser.o AFPMOUNTER_RSRC = afpcdev.rez AFPMOUNTER_CDEV = AFPMounter diff --git a/afpcdev.c b/afpcdev.c index 4195433..98baffa 100644 --- a/afpcdev.c +++ b/afpcdev.c @@ -498,7 +498,8 @@ LongWord cdevMain (LongWord data2, LongWord data1, Word message) case EditCDEV: DoEdit(data1 & 0xFFFF); break; case InitCDEV: wPtr = (WindowPtr)data1; break; case CloseCDEV: wPtr = NULL; break; - case EventsCDEV: modifiers = ((EventRecordPtr)data1)->modifiers; + case EventsCDEV: /* Now done in assembly for speed. Equivalent to: */ + /* modifiers = ((EventRecordPtr)data1)->modifiers; */ break; } diff --git a/cdevstart.asm b/cdevstart.asm new file mode 100644 index 0000000..ec00d1e --- /dev/null +++ b/cdevstart.asm @@ -0,0 +1,41 @@ + case on + +* This is the actual entry point for the CDEV. +* We continue to the C code in most cases, but +* handle EventsCDEV messages here for performance. +cdeventry start + lda 12,s ; get message + cmp #6 ; is it EventsCDEV? + bne continue + +doEvent anop ; handle an EventsCDEV message + pla ; move return address + sta 9,s + pla + sta 9,s + + tsc + phd + tcd + ldy #14 ; modifiers field in event structure + lda [4],y ; get data1->modifiers & save it away + sta >modifiers + stz 10 ; result = 0 (necessary?) + stz 12 + pld + + tsc + clc + adc #6 + tcs + rtl + end + +FreeAllCDevMem start + pea 0 + jsl ~DAID + rtl + end + +continue private + end diff --git a/cdevutil.asm b/cdevutil.asm deleted file mode 100644 index 7ef488a..0000000 --- a/cdevutil.asm +++ /dev/null @@ -1,10 +0,0 @@ - case on - -dummy private - end - -FreeAllCDevMem start - pea 0 - jsl ~DAID - rtl - end