> VDFS04/S 8 Source for Virtual DFS ROM for WSS 6502Em emulator  ( v0.01 MRB: Original 2 v0.02 SPROW: Sprow update < v0.03 JGH: Major tidy-up FD v0.04 JGH: Rearranged into separate ROM and Filing System code PP Added FSClaim code, fuller help, better *CAT plus *EX and *INFO Z& Added Osword7F veneer d: n7OS_CLI=&FFF7:OSBYTE=&FFF4:OSWORD=&FFF1:OSWRCH=&FFEE x7OSASCI=&FFE3:OSGBPB=&FFD1:OSNEWL=&FFE7:OSFILE=&FFDD :  mcode% &C00 P=01 P%=&8000:O%=mcode% [OPT P*3+4 ;EQUS "MRB" :\ No language entry 7JMP Service :\ Service entry $EQUB &82:EQUB ROMCopyright-&8000 .ROMVersion EQUB &04 .ROMTitle 7EQUS "Virtual DFS":EQUB 0:EQUS "0.04 (17 Aug 2004)" EQUB 0 .ROMCopyright .EQUB 0:EQUS "(C)1995 MRB, 2004 JGH":EQUB 0  EQUD 0 ": , .Service 6CMP #&0F:BNE P%+5:JMP ServVectors :\ Vectors have changed 9CMP #&10:BNE P%+5:JMP ServShut :\ Shut Spool/Exec @CMP #&12:BNE P%+5:JMP ServFSSelect :\ Select a filing system 9CMP #&25:BNE P%+5:JMP ServFSInfo :\ Request FS info ;CMP #&26:BNE P%+5:JMP ServShut :\ Shut all channels 7CMP #&27:BNE P%+5:JMP ServReset :\ Reset occured  .ServExit ?PLA:TAY:PLA:TAX:PLA:PLP :\ Restore all registers RTS .ServClaim @PLA:PLA:PLA:PLA :\ Lose stacked registers ELDA #0:RTS :\ Exit with A=0 to claim call : !\ =========================== !\ ROM Administration Routines !\ =========================== .ServWorkspace &ALDX ROMVersion:INC ROMVersion:INX :\ Check if running in RAM 0!CPX ROMVersion:BEQ ServWorkOk :LDX #RAMWarning 255 DLDY #RAMWarning 256 NJSR PrintText X.ServWorkOk bDEC ROMVersion lDPLA:CLC:ADC PageOffset:PHA :\ Add offset to push up by vJMP ServExit  .RAMWarning  EQUB 13 ,EQUS "Warning: VDFS in protected memory" EQUB 13:EQUB 0  6.PrROMTitleNL :\ Print NL, ROM title JSR OSNEWL 2.PrROMTitle :\ Print ROM title  LDX #0  .PrRTLp LDA ROMTitle,X:BEQ PrRTDone JSR OSWRCH:INX:BNE PrRTLp  .PrRTDone  RTS .PrROMVersion  JSR PrSpace:INX * .PrRVLp 4)LDA ROMTitle,X:CMP #"!":BCC PrRVDone >JSR OSWRCH:INX:BNE PrRVLp H .PrRVDone RJMP OSNEWL \ f\ ------------ p\ ROM Commands z\ ------------ .ServCommand  LDX #&00 .CmdLookNext 7PLA:PHA:TAY :\ Get text offset back .CmdLookLp (LDA (&F2),Y:CMP #&2E:BEQ CmdMatchDot + #&DF:CMP ROMCommands,X:BNE CmdNoMatch INX:INY:LDA ROMCommands,X 5CMP #&0D:BNE CmdLookLp :\ Not a full command :LDA (&F2),Y :\ Get following character CCMP #"A":BCS CmdCheckNext:\ Ensure command ends with non-alpha 9DEY :\ Prepare to skip spaces .CmdFoundSpc 7INY:LDA (&F2),Y :\ Move past any spaces CMP #" ":BEQ CmdFoundSpc 6LDA ROMCommands+1,X:STA &B0 :\ Get command address $LDA ROMCommands+2,X:STA &B1 .7JSR JumpB0:TAY:BNE CmdQuit :\ Call command routine 8BNE CmdLookNext :\ Loop until terminator found  .CmdQuit 1PLA:TAY:PLA:TAX:PLA:PLP :\ Exit unclaimed RTS  .JumpB0  JMP (&B0)  \ ----------------- \ ROM Command Table \ ----------------- .ROMCommands  \ Filing system selection $EQUS "DISC" :EQUB 13:EQUW disc $EQUS "DISK" :EQUB 13:EQUW disk ($EQUS "ADFS" :EQUB 13:EQUW adfs 2%EQUS "FADFS" :EQUB 13:EQUW fadfs <$EQUS "VDFS" :EQUB 13:EQUW vdfs F'EQUS "FSCLAIM":EQUB 13:EQUW fsclaim P Z\ Utility commands d/EQUS "OSW"+("7"&DF)+"F":EQUB 13:EQUW fdc n$EQUS "PAGE" :EQUB 13:EQUW page x$EQUS "QUIT" :EQUB 13:EQUW quit $EQUS "DESKTOP":EQUB 13:EQUW quit $EQUS "PAGE" :EQUB 13:EQUW page &EQUS "SHADOW" :EQUB 13:EQUW shadow &EQUS "INSERT" :EQUB 13:EQUW insert  \ SRAM commands &EQUS "SRLOAD" :EQUB 13:EQUW srload 'EQUS "SRWRITE":EQUB 13:EQUW srwrite  EQUB 0  (\ ---------------------------------- \ Detailed help routine (\ Based on Sprow's code in VDFS 0.02 (\ ----------------------------------  .ServHelp LDA (&F2),Y "CCMP #&0D:BEQ HelpTitle :\ No subject, just print ROM title ,7CMP #&2E:BEQ L8514 :\ '.', print full info 6H #&DF:CMP #&56:BNE L8538 :\ Doesn't start with 'V', check for "DFS" @AINY:JMP L8538 :\ Move past 'V', check for "DFS" J T .L8514 ^2JSR PrROMTitle :\ Print ROM title hJSR PrROMVersion rLDX #ROMCommandHelp 255 |3LDY #ROMCommandHelp 256 :\ Point to help text JSR PrintText:JMP ServExit .HelpTitle 7JSR PrROMTitleNL :\ Just print ROM title JSR PrROMVersion JMP ServExit   .L8538 DEY:LDX #&FF  .L853B ;INX:INY :\ Point to next characters LDA (&F2),Y: #&DF FCMP L854C,X:BEQ L853B :\ If matches "DFS", loop to next char ELDA L854C,X:BEQ L8514 :\ If at end, jump to print full info JMP ServExit  .PrintText &5STX &E8:STY &E9 :\ Store text pointer 01LDY #&00:BEQ L8525 :\ Jump into loop : .L8522 DCMP #10:BNE HelpNot10 N;TYA:PHA:LDA #135:JSR OSBYTE :\ Find current screen mode XCPY #0:BEQ Help80 bCPY #3:BNE HelpNot80 l .Help80 v#PLA:TAY:LDA #" ":BNE HelpNot10 .HelpNot80 PLA:TAY:JSR OSNEWL JSR PrSpace .HelpNot10 JSR OSASCI  .L8525 9LDA (&E8),Y:BEQ L8530 :\ If &00 terminator, end :INY:BNE L8522 :\ Loop to print character DINC &E9:BMI L8522 :\ Increment high byte and loop back  .L8530 RTS   .PrSpace LDA #" ":JMP OSWRCH    .PrHex  PHA:LSR A:LSR A:LSR A:LSR A *JSR PrNyb:PLA:.PrNyb 4 #15:CMP #10:BCC PrDigit >ADC #6:.PrDigit:ADC #48 HJMP OSWRCH R \ .L854C f5EQUS "DFS":EQUB 0 :\ *HELP match string p z.ROMCommandHelp +EQUS "Filing system selection:":EQUB 13 .EQUS " DISK, DISC, ADFS, FADFS :":EQUB 10 )EQUS "Select VDFS if claimed":EQUB 13 'EQUS " VDFS : Select VDFS":EQUB 13 2EQUS " FSCLAIM ON : Claim DISC, ADFS":EQUB 13 5EQUS " FSCLAIM OFF : Release DISC, ADFS":EQUB 13 *EQUS " OSW7F (NONE)() :":EQUB 10 7EQUS "Emulate Osword &7F memory corruption":EQUB 13  EQUB 13 $EQUS "Utility commands:":EQUB 13 8EQUS " QUIT or DESKTOP : return to RISC OS":EQUB 13 /EQUS " PAGE : force PAGE location":EQUB 13 +EQUS " SHADOW : dummy command":EQUB 13 3EQUS " SRLOAD
":EQUB 13 8EQUS " SRWRITE ":EQUB 13  EQUB 13 $!EQUS "VDFS commands:":EQUB 13 .4EQUS " BACK : return to root directory":EQUB 13 81EQUS " DRIVE : change current drive":EQUB 13 B6EQUS " MOUNT : select RISC OS ADFS drive":EQUB 13 L3EQUS " DIR : change current directory":EQUB 13 V1EQUS " LIB : change current library":EQUB 13 `4EQUS " INFO : show info on single file":EQUB 13 j7EQUS " EX : show info on all files in CSD":EQUB 13 t3EQUS " ACCESS, BACKUP, COMPACT, COPY,":EQUB 10 ~4EQUS "DESTROY, ENABLE, FORM, FREE, MAP,":EQUB 13 2EQUS " RENAME, TITLE, VERIFY, WIPE :":EQUB 10 &EQUS "trapped and ignored":EQUB 13 EQUB 0  \ -------------------- \ ROM Command routines \ -------------------- .quit 0LDA #&00 :\ A=0 - claimed 1EQUB &03:EQUB &FF :\ Return to host : .page:.shadow:.insert 1LDA #&00 :\ Ignore command RTS : ?.srload :LDA #0:EQUB &03:EQUB &D0:\ Pass to host and return (?.srwrite:LDA #0:EQUB &03:EQUB &D1:\ Pass to host and return 2: <: F7.PageOffset:EQUB &00 :\ Amount to raise by P Z\ ====================== d\ Filing System Routines n\ ====================== x\ Filing System Workspace \ ----------------------- 4.ClaimFS:EQUB &FF :\ *FSCLAIM | flag 5.FSFlag :EQUB &04 :\ FS id when claimed  &\ -------------------------------- &\ Filing system selection commands &\ -------------------------------- .disc:.disk:.adfs <.fadfs:.vdfs :\ On entry, X=4,11,18,26,33 .TXA:LSR A:LSR A:LSR A:TAX :\ X=0,1,2,3,4 ;LDA FSValues,X:TAY :\ Get filing system number 5CPY #9:BCS SelectFS :\ Always select VDFS ABIT ClaimFS:BPL SelectFSExit:\ If not claimed, exit with A<>0  .SelectFS 7LDX #&12:LDA #&8F:JSR OSBYTE:\ Select filing system 0LDA #&00 :\ A=0 - claimed ".SelectFSExit ,RTS 6 .FSValues @3EQUB 4:EQUB 4:EQUB 8 :\ DISC, DISK, ADFS J.EQUB 8:EQUB 17 :\ FADFS, VDFS T: ^ .fsclaim hLDA (&F2),Y: #&DF rCMP #"O":BNE fsclaimStatus |INY:LDA (&F2),Y: #&DF CMP #"N":LDA #0:SBC #0  #&FF:STA ClaimFS LDA #0:RTS .fsclaimStatus LDA #"O":JSR OSWRCH !LDA ClaimFS: #8:PHP:A #"F" &JSR OSWRCH:PLP:BNE P%+5:JSR OSWRCH JSR OSNEWL:LDA #0:RTS  \ -------------------------- \ Filing System Service Code \ -------------------------- .ServVectors 9LDA #0:\STA FSFlag :\ Clear FSflag, and exit 6.ServShut :\ Doesn't do anything JMP ServExit & 0.ServFSSelect :'CPY #&11:BEQ FSSelect :\ VDFS DNBIT ClaimFS:BPL FSSelectNone:\ If not claimed, don't check for DFS or ADFS N-CPY #&04:BEQ FSSelect :\ Select DFS X.CPY #&08:BNE FSSelect :\ Select ADFS b.FSSelectNone l1JMP ServExit :\ Exit unclaimed v .FSSelect -TYA:PHA :\ Save FS id GLDA #&06:JSR CallFSCV :\ Inform current FS new FS taking over 5LDX #0:LDY #&1B :\ Set up new vectors .ClaimVecLp TYA:STA &212,X /LDA #&FF:STA &213,X :\ vector=&FFxx $LDA VectorTable+0,X:STA &D9F+0,Y $LDA VectorTable+1,X:STA &D9F+1,Y 0LDA &F4:STA &D9F+2,Y :\ exvec=&RRxxyy INY:INY:INY:INX:INX CPX #&0E:BNE ClaimVecLp CLDA #&8F:LDX #&0F:JSR OSBYTE:\ Notify that vectors have changed .PLA:STA FSFlag :\ Store FS id JMP ServClaim .CallFSCV JMP (&021E) .VectorTable *+EQUW File:EQUW Args:EQUW BGet:EQUW BPut 4 EQUW GBPB:EQUW Find:EQUW FSC > H'\ --------------------------------- R'\ Select FS on BREAK and maybe boot \'\ --------------------------------- f.ServFSStart p TYA:PHA z>LDA #&7A:JSR OSBYTE :\ Check what keys are pressed =CPX #&FF:BEQ FSStartGo :\ No keys pressed, select me 9CPX #&51:BEQ FSStartGo :\ 'S' pressed, select me 'PLA:JMP ServExit :\ Exit .FSStartGo ;JSR PrROMTitle :\ Print filing system name JSR OSNEWL:JSR OSNEWL 7LDY FSFlag:JSR SelectFS :\ Select filing system BPLA:BNE P%+5:JSR HostBoot :\ If booting, get !Boot from host 0JMP ServClaim :\ Exit, claimed .HostBoot +EQUB &03:EQUB &D3 :\ Do !Boot  .ServFSInfo  LDX #&00  .FSInfoLp LDA L81FB,X:STA (&F2),Y $:INY:INX:CPX #44:BNE FSInfoLp:\ Copy filing system name .EQUB &03:EQUB &00 :\ Pass to emulator and return Z .FSCDone dRTS n: x\ ---------------------- \ Filing System Commands \ ---------------------- .FSCommandLookup PHA:TXA:PHA:TYA:PHA STX &F2:STY &F3:LDX #&00  .L833C  LDY #&00  .L833E "LDA (&F2),Y:CMP #&2E:BEQ L8364 % #&DF:CMP FSCommands,X:BNE L8370 INX:INY:LDA FSCommands,X CMP #&0D:BNE L833E LDA (&F2),Y  CMP #"A":BCS FSCmdCheckNext DEY  .L8354 "INY:LDA (&F2),Y ,CMP #" ":BEQ L8354 6LDA FSCommands+1,X:STA &B0 @LDA FSCommands+2,X:STA &B1 J9PLA:PLA:PLA :\ Lose stacked registers T JMP (&B0) ^ .L8364 hINX:LDA FSCommands,X rCMP #&0D:BNE L8364 | BEQ L8354  .L8370 LDA FSCommands,X:INX CMP #&0D:BNE L8370 .FSCmdCheckNext INX:INX:LDA FSCommands,X >BNE L833C :\ Loop until terminator found @.L8384 :\ No match, pass to host to try 4PLA:TAY:PLA:TAX:PLA :\ Restore registers :EQUB &03:EQUB &00 :\ Pass FSC to host to try -RTS :\ And return  !\ --------------------------- !\ Filing System Command Table !\ --------------------------- .FSCommands &EQUS "ACCESS" :EQUB 13:EQUW access &$EQUS "BACK" :EQUB 13:EQUW back 0&EQUS "BACKUP" :EQUB 13:EQUW backup :'EQUS "COMPACT":EQUB 13:EQUW compact D$EQUS "COPY" :EQUB 13:EQUW copy N&EQUS "DELETE" :EQUB 13:EQUW delete X'EQUS "DESTROY":EQUB 13:EQUW destroy b%EQUS "DRIVE" :EQUB 13:EQUW drive l&EQUS "ENABLE" :EQUB 13:EQUW enable v"EQUS "EX" :EQUB 13:EQUW ex $EQUS "FORM" :EQUB 13:EQUW form $EQUS "FREE" :EQUB 13:EQUW free $EQUS "INFO" :EQUB 13:EQUW info $EQUS "MAP" :EQUB 13:EQUW free %EQUS "MOUNT" :EQUB 13:EQUW mount &EQUS "RENAME" :EQUB 13:EQUW rename %EQUS "TITLE" :EQUB 13:EQUW title &EQUS "VERIFY" :EQUB 13:EQUW verify $EQUS "WIPE" :EQUB 13:EQUW wipe  EQUB 0 : $\ ------------------------------ $\ Filing System Command Routines $\ ------------------------------  .F2toXY .TYA:CLC:ADC &F2:TAX:LDA &F3:ADC #0:TAY:RTS   *.access :RTS 4:.back :EQUB &03:EQUB &D5:\ Pass to host and return >.backup :RTS H.compact :RTS R.copy :RTS \.delete :RTS f.destroy :RTS p:.drive :EQUB &03:EQUB &D2:\ Pass to host and return z.enable :RTS /.ex :JSR F2toXY:LDA #&09:JMP CallFSCV .form :RTS .free :RTS /.info :JSR F2toXY:LDA #&0A:JMP CallFSCV :.mount :EQUB &03:EQUB &D6:\ Pass to host and return /.rename :JSR F2toXY:LDA #&0C:JMP CallFSCV .wipe :RTS .title :RTS .verify :RTS : !\ --------------------------- !\ Functions performed locally !\ ---------------------------  .Info STX &B0:STY &B1:LDY #0  .InfoLp $LDA (&B0),Y:STA &0D20,Y:INY .CPY #&20:BCC InfoLp 8LDA #&01:BNE CatExInfo B L.Ex VLDA #&FF:BNE CatExInfo ` j.Cat t LDA #&80 ~B.CatExInfo :\ b7=multiple files, b0=full info PHA \ &D01 = GBPB block \ &D0E = FILE block \ &D20 = pathname 3LDA #&40 :STA &0D00 :\ Null RTI routine 1LDA #&01 :STA &0D01 :\ Fetch one item !LDA #&20 :STA &0D02:STA &0D0E .LDA #&0D :STA &0D03:STA &0D0F:\ =>Filename LDA #&FF :STA &0D06 LDA #&00 :STA &0D04 STA &0D05:STA &0D07 !STA &0D08:STA &0D09:STA &0D0A !STA &0D0B:STA &0D0C:STA &0D0D  .CatLoop PLA:PHA:BPL CatSingleFile  LDA #&09 (7LDX #&01:LDY #&0D:JSR OSGBPB:\ Read catalogue entry 23LDA &0D01:BEQ CatDone :\ If no more, exit <.CatSingleFile FLDX #&0E:LDY #&0D P:LDA #&05:JSR OSFILE :\ Read info on this entry Z4PHA:JSR CatPrint:PLA:TAY :\ Print object name dPLA:PHA:ROR A:BCC CatNoInfo nTYA:PHA:LDY #3:LDX #5 x.CatAddrLp1 TYA:PHA:LDY #4 .CatAddrLp2 LDA &0D0E,X:JSR PrHex DEX:DEY:BNE CatAddrLp2 JSR PrSpace TXA:CLC:ADC #8:TAX PLA:TAY:DEY:BNE CatAddrLp1  PLA:TAY .CatNoInfo TYA:JSR CatAttrs %PLA:PHA:ROR A:BCC P%+5:JSR OSNEWL >PLA:PHA:BMI CatLoop:PLA :\ Loop until no more returned  .CatExit RTS  .CatDone 9PLA:ROR A:BCS CatExit :\ *EX, no newline needed "JMP OSNEWL , 6 .CatPrint @ LDX #&00 J.CatPrtLp1 T&LDA &0D20,X:CMP #" ":BCC CatPrSpc ^?JSR OSWRCH:INX:BNE CatPrtLp1:\ Loop until control character h .CatPrSpc r LDA #" " | .CatPrLp2 JSR OSWRCH:INX ?CPX #13:BCC CatPrLp2 :\ Print spaces until column 13 .CatCharNone RTS   .CatAttrs LDX #7:LDY #8 $ #2:BEQ P%+5:JSR CatCharD:\ 'D' &LDY #3:LDA #&08:JSR CatChar :\ 'L' &LDY #1:LDA #&02:JSR CatChar :\ 'W' &LDY #0:LDA #&01:JSR CatChar :\ 'R' $LDA #"/":JSR OSWRCH :\ '\' &LDY #5:LDA #&20:JSR CatChar :\ 'w' &LDY #4:LDA #&10:JSR CatChar :\ 'r' JMP CatPrSpc  & .CatChar 0BIT &0D1C:BEQ CatCharNone : .CatCharD D%LDA CatAttrChars,Y:INX:JMP OSWRCH N.CatAttrChars XEQUS "RWELrwePD" b l v\ ================ \ OSWORD emulation \ ================ .fdc %LDA (&F2),Y:CMP #13:BEQ fdcstatus  #&DF CMP #"A":BEQ fdcAcorn CMP #"W":BEQ fdcWatford LDA #3:BNE fdcSet .fdcWatford INY  .fdcAcorn $INY:PHA:LDA (&F2),Y: #7:STA &B0 !PLA: #16:LSR A:LSR A:ADC &B0 ':\ A=0/1/2/3 = A090/A120/A210/ALL  (:\ A=5/7/8/9 = W110/W130/W14x/W154  .fdcSet  ASL A:ASL A:ASL A *-CLC:ADC #Osw7FTable 255:STA Osw7FAddr+0 40LDA #0:ADC #Osw7FTable 256:STA Osw7FAddr+1 >LDA #0:RTS H R.fdcstatus \JSR fdcFetchAddr:LDY #2 f .fdcstLp1 pLDA (&B0),Y:BEQ fdcstName zJSR OSASCI:INY:BNE fdcstLp1 .fdcstName JSR fdcFetchPtr LDA (&B0),Y:BEQ fdcstDone LDA #":":JSR OSWRCH JMP fdcSpace  .fdcstLp2 LDA (&B0),Y:BEQ fdcstDone PHA:LDA #"&":JSR OSWRCH LDA #&10:JSR PrHex PLA:JSR PrHex:INY  .fdcSpace 'JSR PrSpace:JSR PrSpace:JSR PrSpace JMP fdcstLp2 .fdcstDone JSR OSNEWL  .fdcstEnd $LDA #0:RTS . 8.fdcFetchAddr BLDA Osw7FAddr+0:STA &B0 LLDA Osw7FAddr+1:STA &B1 VRTS ` j.fdcFetchPtr tLDY #0:LDA (&B0),Y:PHA ~INY:LDA (&B0),Y:STA &B1 PLA:STA &B0:DEY RTS  .ServOsword 6LDA &EF:CMP #127 :\ Check OSWORD number FBNE P%+5:JSR Osword7F :\ If FM disk access, play with memory 4PLA:TAY:PLA:TAX:PLA:PLP :\ Restore registers JEQUB &03:EQUB &40 :\ Pass OSWORD call to emulator and return  C\ ------------------------------------------------------------- C\ Corrupt bits of memory to simulate effects of real OSWORD &7F C\ -------------------------------------------------------------  .Osword7F  KLDA &B0:PHA:LDA &B1:PHA :\ Code calling Osword7F may be using &B0/1 JSR fdcFetchAddr JSR fdcFetchPtr ( .Osw7FLp 2!LDA (&B0),Y:BEQ Osw7FDone:TAX <& &1000,X:ROL A: #&23:STA &1000,X FINY:BNE Osw7FLp P.Osw7FDone Z?PLA:STA &B1:PLA:STA &B0 :\ A,X,Y preserved outside here dRTS n: x.Osw7FAddr ;EQUW Osw7FTableNone :\ Pointer to address table  .Osw7FTable .EQUW Osw7FAcorn1:EQUS "A090":EQUB 0:EQUB 0 .EQUW Osw7FAcorn1:EQUS "A120":EQUB 0:EQUB 1 .EQUW Osw7FAcorn2:EQUS "A210":EQUB 0:EQUB 2 .Osw7FTableNone -EQUW Osw7FNone :EQUS "NONE":EQUB 0:EQUB 3 -EQUW Osw7FAll :EQUS "ALL ":EQUB 0:EQUB 4 -EQUW Osw7FWatf :EQUS "W110":EQUB 0:EQUB 5 -EQUW Osw7FWatf :EQUS "W120":EQUB 0:EQUB 6 -EQUW Osw7FWatf :EQUS "W130":EQUB 0:EQUB 7 -EQUW Osw7FWatf :EQUS "W14x":EQUB 0:EQUB 8 -EQUW Osw7FWat5 :EQUS "W15x":EQUB 0:EQUB 9 .Osw7FNone  EQUB 0 " ,=.Osw7FAcorn1:\ Locations corrupted by Acorn DFS 0.90/1.20 69EQUB &72:EQUB &73:EQUB &74:EQUB &75:EQUB &80:EQUB &82 @9EQUB &83:EQUB &85:EQUB &C8:EQUB &C9:EQUB &D3:EQUB &D5 JEQUB &D6:EQUB 0 T ^=.Osw7FAcorn2:\ Locations corrupted by Acorn DFS 2.10/2.20 h9EQUB &87:EQUB &88:EQUB &89:EQUB &8B:EQUB &8C:EQUB &8D r9EQUB &8E:EQUB &D3:EQUB &D6:EQUB &DE:EQUB &DF:EQUB &E0 |EQUB &E1:EQUB 0  :.Osw7FWatf :\ Locations corrupted by Watford 1.00-1.44 9EQUB &42:EQUB &43:EQUB &4A:EQUB &78:EQUB &88:EQUB &89 EQUB &8A:EQUB 0  5.Osw7FWat5 :\ Locations corrupted by Watford 1.54 9EQUB &30:EQUB &36:EQUB &38:EQUB &3F:EQUB &42:EQUB &43 9EQUB &4A:EQUB &78:EQUB &88:EQUB &89:EQUB &8A:EQUB &A0 9EQUB &A1:EQUB &A2:EQUB &A3:EQUB &A4:EQUB &A5:EQUB &A6 .EQUB &A7:EQUB &A8:EQUB &A9:EQUB &AA:EQUB 0 : ,.Osw7FAll :\ Composite of all locations 9EQUB &30:EQUB &33:EQUB &36:EQUB &38:EQUB &3F:EQUB &42 9EQUB &43:EQUB &44:EQUB &4A:EQUB &72:EQUB &73:EQUB &74 9EQUB &75:EQUB &78:EQUB &79:EQUB &7A:EQUB &7B:EQUB &80 9EQUB &82:EQUB &83:EQUB &85:EQUB &87:EQUB &88:EQUB &89 &9EQUB &8A:EQUB &8B:EQUB &8C:EQUB &8D:EQUB &8E:EQUB &A0 09EQUB &A1:EQUB &A2:EQUB &A3:EQUB &A4:EQUB &A5:EQUB &A6 :9EQUB &A7:EQUB &A8:EQUB &A9:EQUB &AA:EQUB &C8:EQUB &C9 D9EQUB &D3:EQUB &D5:EQUB &D6:EQUB &DE:EQUB &DF:EQUB &E0 NEQUB &E1::EQUB 0 X: b]: l8" *SAVE VDFS ";~mcode%;" ";~O%;" FFFF0000 FFFBBC00" v, &03 opcode calls, also performs a RTS:  &00 FSC  &01 OSFIND  &02 OSGBPB  &03 OSBPUT  &04 OSBGET  &05 OSARGS  &06 OSFILE :  &40 OSWORD  &41 Does nothing : ; &80 Read CMOS low level location X, return in Y and A . &81 Write Y to CMOS low level location X < &82 Read EPROM low level location X, return in Y and A  / &83 Write Y to EPROM low level location X :   &D0 *SRLOAD * &D1 *SRWRITE 4 &D2 *DRIVE > &D3 Load/Run/Exec !BOOT H &D4 Does nothing R &D5 *BACK \ &D6 *MOUNT f: p &FF Quit