mirror of
https://github.com/sheumann/NetDisk.git
synced 2024-11-27 19:49:38 +00:00
Add wrappers for GS/OS system service calls, and call SET_DISKSW on mount.
I think there should still be some disk-switched logic elsewhere, based on the somewhat complicated rules for it in the documentation, but at least this provides a notification when a new disk is mounted.
This commit is contained in:
parent
3f3c14b8a1
commit
dd228dff2d
2
Makefile
2
Makefile
@ -7,7 +7,7 @@ HTTPTEST_PROG = httptest
|
|||||||
MOUNTURL_OBJS = mounturl.a
|
MOUNTURL_OBJS = mounturl.a
|
||||||
MOUNTURL_PROG = mounturl
|
MOUNTURL_PROG = mounturl
|
||||||
|
|
||||||
NETDISKINIT_OBJS = initstart.a netdiskinit.a hostname.a http.a readtcp.a seturl.a strcasecmp.a tcpconnection.a urlparser.a driver.a installdriver.a asmglue.a driverwrapper.a session.a
|
NETDISKINIT_OBJS = initstart.a netdiskinit.a hostname.a http.a readtcp.a seturl.a strcasecmp.a tcpconnection.a urlparser.a driver.a installdriver.a asmglue.a driverwrapper.a session.a systemservices.a
|
||||||
# NETDISKINIT_RSRC =
|
# NETDISKINIT_RSRC =
|
||||||
NETDISKINIT_PROG = NetDiskInit
|
NETDISKINIT_PROG = NetDiskInit
|
||||||
|
|
||||||
|
3
driver.c
3
driver.c
@ -10,6 +10,7 @@
|
|||||||
#include "tcpconnection.h"
|
#include "tcpconnection.h"
|
||||||
#include "asmglue.h"
|
#include "asmglue.h"
|
||||||
#include "mounturl.h"
|
#include "mounturl.h"
|
||||||
|
#include "systemservices.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
|
||||||
#define BLOCK_SIZE 512
|
#define BLOCK_SIZE 512
|
||||||
@ -297,7 +298,7 @@ static Word DoMountURL(struct GSOSDP *dp) {
|
|||||||
|
|
||||||
dp->dibPointer->extendedDIBPtr = sess;
|
dp->dibPointer->extendedDIBPtr = sess;
|
||||||
|
|
||||||
//TODO report disk switch
|
SetDiskSw();
|
||||||
|
|
||||||
mountURLRec->result = OPERATION_SUCCESSFUL;
|
mountURLRec->result = OPERATION_SUCCESSFUL;
|
||||||
mountURLRec->devNum = dp->dibPointer->DIBDevNum;
|
mountURLRec->devNum = dp->dibPointer->DIBDevNum;
|
||||||
|
103
systemservices.asm
Normal file
103
systemservices.asm
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
* Wrappers for GS/OS system service calls
|
||||||
|
|
||||||
|
* These are designed to be called from within GS/OS, e.g. in a driver.
|
||||||
|
|
||||||
|
case on
|
||||||
|
|
||||||
|
* System service routines
|
||||||
|
CACHE_FIND_BLK gequ $01FC04
|
||||||
|
CACHE_ADD_BLK gequ $01FC08
|
||||||
|
SWAP_OUT gequ $01FC34
|
||||||
|
SET_SYS_SPEED gequ $01FC50
|
||||||
|
MOVE_INFO gequ $01FC70
|
||||||
|
SIGNAL gequ $01FC88
|
||||||
|
SET_DISKSW gequ $01FC90
|
||||||
|
SUP_DRVR_DISP gequ $01FCA4
|
||||||
|
INSTALL_DRIVER gequ $01FCA8
|
||||||
|
|
||||||
|
* GS/OS direct page locations
|
||||||
|
deviceNum gequ $00
|
||||||
|
callNum gequ $02
|
||||||
|
|
||||||
|
* Driver call number
|
||||||
|
Driver_Read gequ $0002
|
||||||
|
|
||||||
|
dummy private
|
||||||
|
end
|
||||||
|
|
||||||
|
CacheFindBlk start
|
||||||
|
phb
|
||||||
|
phd
|
||||||
|
lda >gsosDP ; set DP to GS/OS direct page
|
||||||
|
tcd
|
||||||
|
|
||||||
|
jsl ForceLCBank1 ; force in language card bank 1
|
||||||
|
pha ; save old state reg
|
||||||
|
|
||||||
|
clc ; search by device number
|
||||||
|
jsl CACHE_FIND_BLK ; call the system service
|
||||||
|
php ; save result (carry flag)
|
||||||
|
php
|
||||||
|
pld
|
||||||
|
|
||||||
|
jsl RestoreStateReg ; restore old state reg
|
||||||
|
|
||||||
|
tdc ; get result
|
||||||
|
and #$0001 ; get just carry flag value as result
|
||||||
|
eor #$0001 ; invert sense, so TRUE=block was found
|
||||||
|
pld ; restore direct page
|
||||||
|
plb
|
||||||
|
rtl
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
CacheAddBlk start
|
||||||
|
phb
|
||||||
|
phd
|
||||||
|
lda >gsosDP ; set DP to GS/OS direct page
|
||||||
|
tcd
|
||||||
|
|
||||||
|
jsl ForceLCBank1 ; force in language card bank 1
|
||||||
|
pha ; save old state reg
|
||||||
|
|
||||||
|
jsl CACHE_ADD_BLK ; call the system service
|
||||||
|
php ; save result (carry flag)
|
||||||
|
php
|
||||||
|
pld
|
||||||
|
|
||||||
|
jsl RestoreStateReg ; restore old state reg
|
||||||
|
|
||||||
|
tdc ; get result
|
||||||
|
and #$0001 ; get just carry flag value as result
|
||||||
|
eor #$0001 ; invert sense, so TRUE=block was added
|
||||||
|
pld ; restore direct page
|
||||||
|
plb
|
||||||
|
rtl
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
SetDiskSw start
|
||||||
|
phd
|
||||||
|
lda >gsosDP ; set DP to GS/OS direct page
|
||||||
|
tcd
|
||||||
|
|
||||||
|
jsl ForceLCBank1 ; force in language card bank 1
|
||||||
|
pha ; save old state reg
|
||||||
|
|
||||||
|
pei deviceNum ; Save deviceNum & CallNum
|
||||||
|
pei callNum
|
||||||
|
lda Driver_Read ; and adjust callNum
|
||||||
|
sta callNum ; per GS/OS TN #7
|
||||||
|
|
||||||
|
jsl SET_DISKSW ; call the system service
|
||||||
|
|
||||||
|
pla ; restore callNum & deviceNum
|
||||||
|
sta callNum
|
||||||
|
pla
|
||||||
|
sta deviceNum
|
||||||
|
|
||||||
|
jsl RestoreStateReg ; restore old state reg
|
||||||
|
|
||||||
|
pld ; restore direct page
|
||||||
|
rtl
|
||||||
|
end
|
11
systemservices.h
Normal file
11
systemservices.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#ifndef SYSTEMSERVICES_H
|
||||||
|
#define SYSTEMSERVICES_H
|
||||||
|
|
||||||
|
#include <types.h>
|
||||||
|
|
||||||
|
Boolean CacheFindBlk(void);
|
||||||
|
Boolean CacheAddBlk(void);
|
||||||
|
|
||||||
|
void SetDiskSw(void);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user