Home » CEEFAX disks » telesoftware9.adl » 30-09-88/T\SWR13

30-09-88/T\SWR13

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » CEEFAX disks » telesoftware9.adl
Filename: 30-09-88/T\SWR13
Read OK:
File size: 4FBF bytes
Load address: 0000
Exec address: FFFFFFFF
Duplicates

There is 1 duplicate copy of this file in the archive:

File contents
Mastering Sideways ROM & RAM - Module 13 - Trapping errors
----------------------------------------------------------

  In module 8 you were shown how to deal with user-generated errors
created within your own sideways ram programs. Errors can also be
generated in other sideways roms and it is possible to trap these
errors and process them within your rom image. This is not an easy
task but it can produce some useful and impressive software.

  Errors generated in SWR service code are dealt with by copying an
error message, preceded and followed by a BRK instruction, into the
error buffer and then jumping to the BRK instruction preceding the
error message. When the BRK instruction is executed, the MOS issues
service call 6 to all the sideways roms before handing over the error
to the current language. Errors generated in other, lower priority,
roms can be trapped in your SWR program by intercepting service call
6. Ideally your program should be in socket &0F.

  The MOS issues service call 6 with the error number pointer (in
locations &FD and &FE) containing the address of the byte after the
BRK instruction and location &F0 containing the value of the stack
pointer after the BRK was executed. Osbyte &BA can be used to find the
number of the rom which was active when the BRK was executed.

  There are 2 ways of processing errors after trapping them in your
sideways ram program:

1. Your routine can completely replace the error handler which would
normally deal with the error.

2. Your routine can perform a function or print a message before
handing the error back to the current language's error handling
routine.

  In this module I will show you how to design a sideways ram program
to completely replace the normal error handling of the DFS "Cat full"
and "Disc full" errors. The program will be used to copy all the files
from a disc in drive 0 onto as many drive 1 discs as are necessary to
hold them all. This might seem a trivial task but consider what would
happen if drive 0 has a full 80 track disc and drive 1 is a 40 track
drive. Using *COPY 0 1 *.* will eventually create the disc full error
and stop transfering the files before they have all been copied. Using
the same command will create a cat full error if the disc in drive 1
has only one or two catalogue entries unused.

  The program FILES instructs the command line interpreter to *COPY
all the files from drive 0 to drive 1. If an error is generated the
program intercepts service call 6 and tests the address stored in the
error number pointer to see if either the cat full or disc full error
has been generated. If it finds either it instructs the user to change
the disc in drive 1 and then continues with the save operation that
generated the error. When all the files have been transfered from
drive 0 to drive 1 the program re-enters BASIC to clear any error
condition that might exist.

  After explaining how to design this type of program I will show how
it can be modified to pass control back to the normal error handling
routine.

  If you intend to write a program which traps errors by intercepting
service call 6 you need to know the error number of the error you
intend to trap. You can either look the error number up in a manual or
deliberately create the error and then look at a memory dump of the
error buffer and find the error number from there. Figure 13.1 is a
memory dump of the error buffer after creating a cat full and a disc
full error. The error number of each error is stored in the byte after
the first BRK instruction, ie. in location &101. The cat full error
number is &BE and the disc full error number is &C6.



0100  00 BE 43 61 74 20 66 75  ..Cat fu
0108  6C 6C 00 00 00 00 00 00  ll......
0110  00 00 00 00 00 00 00 00  ........

0100  00 C6 44 69 73 6B 20 66  ..Disk f
0108  75 6C 6C 00 00 00 00 00  ull.....
0110  00 00 00 00 00 00 00 00  ........

Figure 13.1  The error buffer after Cat full and Disc full errors.
-----------  -----------------------------------------------------



  To trap either of these two errors it is necessary for the SWR
interpreter to intercept service call 6 and test the content of the
memory location stored in the error number pointer to see if it
contains either &BE or &C6. If either of these numbers is found the
new error handling routine can process the error, if neither is found
the registers must be restored and control passed back to the MOS.

  The purpose of the program is to copy all the files from a disc in
drive 0 onto a disc in drive 1. To do this the program will store data
concerned with the task in its private workspace. The data stored in
private workspace includes a flag which indicates whether or not the
utility is active. If the utility is active the interpreter can trap
and process the cat full and disc full errors. If it is not active the
interpreter must not trap them.

  The routine in figure 13.2 is taken from FILES and tests a flag set
up in the last byte of the first page of private workspace. This byte
stores &FF if the utility is active and &00 if it is not. Control will
only pass to the new error handler if the utility is active and if
either the cat full or disc full error has been generated. The flag is
set up when the private workspace is claimed and switched on and off
when the utility starts and finishes.



         PHA
         CMP #6           \ is it service call 6?
         BNE out          \ branch if not
         TXA              \ store all registers
         PHA
         TYA
         PHA
         LDX &F4          \ load this rom number
         LDA &DF0,X       \ find start of workspace
         STA &73          \ store high byte of start of workspace
         LDA #0           \ workspace always starts at page boundary
         STA &72          \ low byte of start of workspace
         LDY #&FF         \ flag address offset
         LDA (&72),Y      \ load flag
         BEQ noton        \ branch if utility not active
         INY              \ Y=0
         LDA (&FD),Y      \ load errror number
         CMP #&BE         \ Cat full error number
         BEQ change       \ branch if Cat full error
         CMP #&C6         \ Disc full error number
         BEQ change       \ branch if Disc full error
.noton
         PLA              \ restore all registers
         TAY
         PLA
         TAX
.out
         PLA
         RTS
.change

Figure 13.2  Checking the utility active flag.
-----------  ---------------------------------


  As well as a utility active flag there is quite a lot of other data
stored in private workspace. The entire catalogue of drive 0 is stored
and workspace is needed for a command line interpreter buffer and an
Osword parameter block. The program needs to claim two pages of
private workspace to store all these data.

  Figure 13.3 is a memory dump of three parts of the two pages of
private workspace claimed by the program FILES. The memory dump was
made while the program FILES was transfering the first file from drive
0 to drive 1. It shows how the private workspace is used by the
program. In the computer in which the memory dump was made, the
private workspace claimed by FILES was in pages &17 and &18. It could
be in any two consecutive pages depending on the workspace claimed by
other roms and the priority of the program FILES.




1700  43 4F 50 59 20 30 20 31  COPY 0 1
1708  20 24 2E 54 52 41 43 45   $.TRACE
1710  20 20 0D 00 00 00 00 00    ......

1780  00 00 18 FF FF 03 53 00  ......S.
1788  00 21 00 00 00 00 00 00  .!......

17F8  00 00 00 00 00 00 00 FF  ........
1800  53 57 52 20 53 4F 46 54  SWR SOFT
1808  54 52 41 43 45 20 20 24  TRACE  $
1810  4F 53 57 4F 52 44 20 24  OSWORD $
1818  4F 53 42 59 54 45 20 24  OSBYTE $
1820  4F 53 57 44 45 4D 4F 24  OSWDEMO$

Figure 13.3  Parts of a memory dump of private workspace.
-----------  --------------------------------------------



  The drive 0 catalogue is read using Osword &7F and stored in the
second page of the private workspace (page &18 in this case). The
Osword parameter block starts at &1780. The contents of this buffer
(figure 13.3) indicate a successful read data multi sector from drive
0, track 0, sector 0 with data stored at &FFFF1800. 

  The command line interpreter buffer starts at &1700. The program
transfers all the files by copying each filename from the drive 0
catalogue (in page &18) into this buffer and then calling the command
line interpreter.

  The utility active flag is at &17FF. The contents of this flag in
figure 13.2 indicate that the utility was active when the memory dump
was made.

  There are a number of pointers set up in zero page to store the
addresses of the various locations indirectly addressed in the private
workspace. The absolute addresses will depend on the other roms in the
computer but in the computer used to generate figure 13.3 they had the
values shown in figure 13.4.




Name       high byte low byte  Function
--------------------------------------------------------------------
directory  &17       &09      The directory of the current file
private    &17       &00      The start of private workspace
catbuff    &18       &08      The address of the first filename
clibuff    &17       &0B      The first byte of the current filename
block      &17       &80      The Osword parameter block

Figure 13.4  The zero page pointers.
-----------  -----------------------



  The SWR interpreter intercepts service call 2 to claim two pages of
private workspace and set up the utility active flag to indicate that
the utility is not yet active (lines 420-570).

  The one-command interpreter (lines 1050-1270) is used to recognise
the command *FILES and control is passed to the label ".found" (line
1280). The program is designed to trap errors generated in another rom
and for this reason the stack is balanced before doing anything else
(lines 1290-1310). Errors generated outside your control can play
havoc with the stack and balancing it at this stage minimises the
problems that can be created. The program checks that the DFS is
active (lines 1320-1370) and if all is well prints a "Copy all files -
Go?" message (lines 1500-1520). If the user types a "Y" contol is
passed to the label ".yes" (line 1630).

  The zero page pointers (figure 13.4) are set up (lines 1640-1810)
and the utility active flag is set to indicate that errors &BE and &C6
should be trapped (lines 1820-1840). The Osword parameter block
contents are copied into the Osword buffer (lines 1850-1910) and the
most significant byte of the address of the catalogue buffer is also
stored in the Osword buffer (lines 1920-1940). The first part of the
*COPY command is transfered into the command line interpreter buffer
(lines 1950-2010) and the least significant byte of the address of the
first file in the drive 0 catalogue is stored in the zero page pointer
to the command line interpreter buffer (line 2020). The drive 0
catalogue is read and stored in the second page of the private
workspace (lines 2030-2060).

  The files are transfered, one at a time, from drive 0 to drive 1.
(lines 2070-2320). Up to 31 files will be copied but if either the cat
full or disc full errors is generated by the DFS the interpreter will
trap the error (lines 610-800) and pass control to the label ".change"
(line 890). The stack is pulled six times to balance it. The stack has
the registers from the SWR interpreter as well as the status register
and return address pushed on when the DFS BRK was executed. These can
all be discarded. The program prompts the user to change the disc in
drive 1 (lines 960-1030) and then returns control to the loop
transfering the files (line 1040 and line 2270).

  When all the files have been transfered from drive 0 to drive 1, the
program clears the utility active flag (lines 2340-2360), flushes all
the buffers (lines 2380-2400), finds BASIC (lines 2410-2440) and
enters BASIC (lines 2450-2460) which clears all error conditions.

  To modify FILES to pass control back to the normal error handling
routine delete lines 930-950 and 2410-2460. Type the new line 2410.

  2410 LDA #0:RTS

The program will perform the same function but report the Disc full or
Cat full error message at the end of the file transfers.

  You could also modify the program to use pages &09 and &0A instead
of private workspace. This would make the program shorter and not
raise Oshwm and PAGE but, if you use these pages instead of private
workspace, you can not be sure that your workspace will remain
uncorrupted (see Module 11).




   10 REM: FILES
   20 MODE7
   30 HIMEM=&3C00
   40 DIM save 50
   50 diff=&8000-HIMEM
   60 directory=&70
   70 private=directory+2
   80 catbuff=directory+4
   90 clibuff=directory+6
  100 block=directory+8
  110 address=directory+10
  120 comvec=&F2
  130 romnumber=&F4
  140 errornum=&FD
  150 errstack=&100
  160 workspace=&DF0
  170 osargs=&FFDA
  180 osrdch=&FFE0
  190 osasci=&FFE3
  200 osnewl=&FFE7
  210 osword=&FFF1
  220 osbyte=&FFF4
  230 oscli=&FFF7
  240 FOR pass = 0 TO 2 STEP 2
  250 P%=HIMEM
  260 [       OPT pass
  270         BRK
  280         BRK
  290         BRK
  300         JMP service+diff
  310         OPT FNequb(&82)
  320         OPT FNequb((copyright+diff) MOD 256)
  330         BRK
  340 .title
  350         OPT FNequs("FILES")
  360 .copyright
  370         BRK
  380         OPT FNequs("(C) Gordon Horsington 1987")
  390         BRK
  400 .service
  410         PHA
  420         CMP #2
  430         BNE tryfour
  440         TYA
  450         PHA
  460         STA workspace,X
  470         LDA #0
  480         STA private
  490         STY private+1
  500         LDY #&FF
  510         STA (private),Y \ 0 = utility off
  520         PLA
  530         TAY
  540         INY           \ 2 pages of
  550         INY           \ private workspace
  560         PLA
  570         RTS
  580 .tryfour
  590         CMP #4
  600         BEQ unrecognised
  610         CMP #6
  620         BNE out
  630         TXA
  640         PHA
  650         TYA
  660         PHA
  670         LDX romnumber
  680         LDA workspace,X
  690         STA private+1
  700         LDA #0
  710         STA private
  720         LDY #&FF
  730         LDA (private),Y
  740         BEQ noton
  750         INY
  760         LDA (errornum),Y
  770         CMP #&BE      \ Cat full
  780         BEQ change
  790         CMP #&C6      \ Disc full
  800         BEQ change
  810 .noton
  820         PLA
  830         TAY
  840         PLA
  850         TAX
  860 .out
  870         PLA
  880         RTS
  890 .change
  900         PLA           \ Y
  910         PLA           \ X
  920         PLA           \ A
  930         PLA           \ Status register
  940         PLA           \ Return
  950         PLA           \ address
  960         LDX #(swapdisc+diff) MOD 256
  970         LDY #(swapdisc+diff) DIV 256
  980         JSR print+diff
  990 .spacebar
 1000         LDA #&7A
 1010         JSR osbyte    \ Scan keyboard
 1020         CPX #&62
 1030         BNE spacebar  \ Wait for Space
 1040         JMP another+diff
 1050 .unrecognised
 1060         TXA
 1070         PHA
 1080         TYA
 1090         PHA
 1100         LDX #&FF
 1110 .comloop
 1120         INX
 1130         LDA title+diff,X
 1140         BEQ found
 1150         LDA (comvec),Y
 1160         INY
 1170         CMP #ASC(".")
 1180         BEQ found
 1190         AND #&DF
 1200         CMP title+diff,X
 1210         BEQ comloop
 1220         PLA
 1230         TAY
 1240         PLA
 1250         TAX
 1260         PLA
 1270         RTS
 1280 .found
 1290         PLA
 1300         PLA
 1310         PLA
 1320         LDA #0
 1330         TAX
 1340         TAY
 1350         JSR osargs
 1360         CMP #4        \ Is DFS active?
 1370         BEQ dfs
 1380         LDA #(wrong+diff) MOD 256
 1390         STA address
 1400         LDA #(wrong+diff) DIV 256
 1410         STA address+1
 1420         LDY #&FF
 1430 .errorloop
 1440         INY
 1450         LDA (address),Y
 1460         STA errstack,Y
 1470         BPL errorloop
 1480         JMP errstack
 1490 .dfs
 1500         LDX #(go+diff) MOD 256
 1510         LDY #(go+diff) DIV 256
 1520         JSR print+diff
 1530         JSR osrdch
 1540         AND #&DF
 1550         PHA
 1560         JSR osasci
 1570         JSR osnewl
 1580         PLA
 1590         CMP #ASC("Y")
 1600         BEQ yes
 1610         LDA #0
 1620         RTS
 1630 .yes
 1640         JSR osnewl
 1650         LDX romnumber
 1660         LDA workspace,X
 1670         STA block+1
 1680         STA clibuff+1
 1690         STA private+1
 1700         STA directory+1
 1710         CLC
 1720         ADC #1
 1730         STA catbuff+1
 1740         LDA #&80
 1750         STA block
 1760         LDY #8
 1770         STY catbuff
 1780         INY
 1790         STY directory
 1800         LDA #0
 1810         STA private
 1820         LDA #&FF
 1830         TAY
 1840         STA (private),Y \ &FF = utility on
 1850         INY           \ Y=0
 1860 .dataloop
 1870         LDA data+diff,Y
 1880         STA (block),Y
 1890         INY
 1900         CPY #&A
 1910         BCC dataloop
 1920         LDY #2
 1930         LDA catbuff+1
 1940         STA (block),Y
 1950         LDY #0
 1960 .copyloop
 1970         LDA copy+diff,Y
 1980         STA (private),Y
 1990         INY
 2000         CPY #&B
 2010         BCC copyloop
 2020         STY clibuff
 2030         LDA #&7F
 2040         LDX block
 2050         LDY block+1
 2060         JSR osword    \ Read catalogue
 2070 .catalogue
 2080         LDY #0
 2090 .transfer
 2100         LDA (catbuff),Y
 2110         STA (clibuff),Y
 2120         INY
 2130         CPY #7
 2140         BCC transfer
 2150         LDA #&D
 2160         STA (clibuff),Y
 2170         LDA (catbuff),Y
 2180         AND #&7F
 2190         CMP #ASC(" ")
 2200         BCC finish
 2210         LDY #0
 2220         STA (directory),Y
 2230         LDA catbuff
 2240         CLC
 2250         ADC #8
 2260         STA catbuff
 2270 .another
 2280         LDX #0
 2290         LDY clibuff+1
 2300         JSR oscli
 2310         LDA catbuff
 2320         BNE catalogue
 2330 .finish
 2340         LDA #0
 2350         LDY #&FF
 2360         STA (private),Y \ 0 = utility off
 2370         JSR osnewl
 2380         LDA #&F
 2390         LDX #0
 2400         JSR osbyte    \ Flush buffers
 2410         LDA #&BB
 2420         LDX #0
 2430         LDY #&FF
 2440         JSR osbyte    \ Find BASIC
 2450         LDA #&8E
 2460         JMP osbyte    \ Enter BASIC
 2470 .print
 2480         STX address
 2490         STY address+1
 2500         LDA #&F
 2510         LDX #0
 2520         JSR osbyte    \ Flush buffers
 2530         LDY #0
 2540 .printloop
 2550         LDA (address),Y
 2560         BEQ endprint
 2570         JSR osasci
 2580         INY
 2590         JMP printloop+diff
 2600 .endprint
 2610         RTS
 2620 .data
 2630         OPT FNequd(&FF000000)
 2640         OPT FNequd(&005303FF)
 2650         OPT FNequw(&2100)
 2660 .copy
 2670         OPT FNequs("COPY 0 1 *.")
 2680 .swapdisc
 2690         OPT FNequw(&070D)
 2700         OPT FNequs("Insert a new disc in ")
 2710         OPT FNequb(&3A)
 2720         OPT FNequs("1")
 2730         OPT FNequb(&0D)
 2740         OPT FNequs("and press the Space Bar")
 2750         OPT FNequw(&0D0D)
 2760         BRK
 2770 .go
 2780         OPT FNequs("Copy all files from ")
 2790         OPT FNequb(&3A)
 2800         OPT FNequs("0 to ")
 2810         OPT FNequb(&3A)
 2820         OPT FNequs("1")
 2830         OPT FNequb(&0D)
 2840         OPT FNequs("Go (Y/N) ? ")
 2850         BRK
 2860 .wrong
 2870         BRK
 2880         BRK
 2890         OPT FNequs("DFS not active")
 2900         BRK
 2910         OPT FNequb(&FF)
 2920 .lastbyte
 2930 ]
 2940 NEXT
 2950 INPUT'"Save filename = "filename$
 2960 IF filename$="" END
 2970 $save="SAVE "+filename$+" "+STR$~(HIMEM)+" "+STR$~(las
      tbyte)+" FFFF8000 FFFF8000"
 2980 X%=save MOD 256
 2990 Y%=save DIV 256
 3000 *OPT1,2
 3010 CALL oscli
 3020 *OPT1,0
 3030 END
 3040 DEFFNequb(byte)
 3050 ?P%=byte
 3060 P%=P%+1
 3070 =pass
 3080 DEFFNequw(word)
 3090 ?P%=word MOD 256
 3100 P%?1=word DIV 256
 3110 P%=P%+2
 3120 =pass
 3130 DEFFNequd(double)
 3140 !P%=double
 3150 P%=P%+4
 3160 =pass
 3170 DEFFNequs(string$)
 3180 $P%=string$
 3190 P%=P%+LEN(string$)
 3200 =pass
00000000  4d 61 73 74 65 72 69 6e  67 20 53 69 64 65 77 61  |Mastering Sidewa|
00000010  79 73 20 52 4f 4d 20 26  20 52 41 4d 20 2d 20 4d  |ys ROM & RAM - M|
00000020  6f 64 75 6c 65 20 31 33  20 2d 20 54 72 61 70 70  |odule 13 - Trapp|
00000030  69 6e 67 20 65 72 72 6f  72 73 0d 2d 2d 2d 2d 2d  |ing errors.-----|
00000040  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000070  2d 2d 2d 2d 2d 0d 0d 20  20 49 6e 20 6d 6f 64 75  |-----..  In modu|
00000080  6c 65 20 38 20 79 6f 75  20 77 65 72 65 20 73 68  |le 8 you were sh|
00000090  6f 77 6e 20 68 6f 77 20  74 6f 20 64 65 61 6c 20  |own how to deal |
000000a0  77 69 74 68 20 75 73 65  72 2d 67 65 6e 65 72 61  |with user-genera|
000000b0  74 65 64 20 65 72 72 6f  72 73 0d 63 72 65 61 74  |ted errors.creat|
000000c0  65 64 20 77 69 74 68 69  6e 20 79 6f 75 72 20 6f  |ed within your o|
000000d0  77 6e 20 73 69 64 65 77  61 79 73 20 72 61 6d 20  |wn sideways ram |
000000e0  70 72 6f 67 72 61 6d 73  2e 20 45 72 72 6f 72 73  |programs. Errors|
000000f0  20 63 61 6e 20 61 6c 73  6f 20 62 65 0d 67 65 6e  | can also be.gen|
00000100  65 72 61 74 65 64 20 69  6e 20 6f 74 68 65 72 20  |erated in other |
00000110  73 69 64 65 77 61 79 73  20 72 6f 6d 73 20 61 6e  |sideways roms an|
00000120  64 20 69 74 20 69 73 20  70 6f 73 73 69 62 6c 65  |d it is possible|
00000130  20 74 6f 20 74 72 61 70  20 74 68 65 73 65 0d 65  | to trap these.e|
00000140  72 72 6f 72 73 20 61 6e  64 20 70 72 6f 63 65 73  |rrors and proces|
00000150  73 20 74 68 65 6d 20 77  69 74 68 69 6e 20 79 6f  |s them within yo|
00000160  75 72 20 72 6f 6d 20 69  6d 61 67 65 2e 20 54 68  |ur rom image. Th|
00000170  69 73 20 69 73 20 6e 6f  74 20 61 6e 20 65 61 73  |is is not an eas|
00000180  79 0d 74 61 73 6b 20 62  75 74 20 69 74 20 63 61  |y.task but it ca|
00000190  6e 20 70 72 6f 64 75 63  65 20 73 6f 6d 65 20 75  |n produce some u|
000001a0  73 65 66 75 6c 20 61 6e  64 20 69 6d 70 72 65 73  |seful and impres|
000001b0  73 69 76 65 20 73 6f 66  74 77 61 72 65 2e 0d 0d  |sive software...|
000001c0  20 20 45 72 72 6f 72 73  20 67 65 6e 65 72 61 74  |  Errors generat|
000001d0  65 64 20 69 6e 20 53 57  52 20 73 65 72 76 69 63  |ed in SWR servic|
000001e0  65 20 63 6f 64 65 20 61  72 65 20 64 65 61 6c 74  |e code are dealt|
000001f0  20 77 69 74 68 20 62 79  20 63 6f 70 79 69 6e 67  | with by copying|
00000200  20 61 6e 0d 65 72 72 6f  72 20 6d 65 73 73 61 67  | an.error messag|
00000210  65 2c 20 70 72 65 63 65  64 65 64 20 61 6e 64 20  |e, preceded and |
00000220  66 6f 6c 6c 6f 77 65 64  20 62 79 20 61 20 42 52  |followed by a BR|
00000230  4b 20 69 6e 73 74 72 75  63 74 69 6f 6e 2c 20 69  |K instruction, i|
00000240  6e 74 6f 20 74 68 65 0d  65 72 72 6f 72 20 62 75  |nto the.error bu|
00000250  66 66 65 72 20 61 6e 64  20 74 68 65 6e 20 6a 75  |ffer and then ju|
00000260  6d 70 69 6e 67 20 74 6f  20 74 68 65 20 42 52 4b  |mping to the BRK|
00000270  20 69 6e 73 74 72 75 63  74 69 6f 6e 20 70 72 65  | instruction pre|
00000280  63 65 64 69 6e 67 20 74  68 65 0d 65 72 72 6f 72  |ceding the.error|
00000290  20 6d 65 73 73 61 67 65  2e 20 57 68 65 6e 20 74  | message. When t|
000002a0  68 65 20 42 52 4b 20 69  6e 73 74 72 75 63 74 69  |he BRK instructi|
000002b0  6f 6e 20 69 73 20 65 78  65 63 75 74 65 64 2c 20  |on is executed, |
000002c0  74 68 65 20 4d 4f 53 20  69 73 73 75 65 73 0d 73  |the MOS issues.s|
000002d0  65 72 76 69 63 65 20 63  61 6c 6c 20 36 20 74 6f  |ervice call 6 to|
000002e0  20 61 6c 6c 20 74 68 65  20 73 69 64 65 77 61 79  | all the sideway|
000002f0  73 20 72 6f 6d 73 20 62  65 66 6f 72 65 20 68 61  |s roms before ha|
00000300  6e 64 69 6e 67 20 6f 76  65 72 20 74 68 65 20 65  |nding over the e|
00000310  72 72 6f 72 0d 74 6f 20  74 68 65 20 63 75 72 72  |rror.to the curr|
00000320  65 6e 74 20 6c 61 6e 67  75 61 67 65 2e 20 45 72  |ent language. Er|
00000330  72 6f 72 73 20 67 65 6e  65 72 61 74 65 64 20 69  |rors generated i|
00000340  6e 20 6f 74 68 65 72 2c  20 6c 6f 77 65 72 20 70  |n other, lower p|
00000350  72 69 6f 72 69 74 79 2c  0d 72 6f 6d 73 20 63 61  |riority,.roms ca|
00000360  6e 20 62 65 20 74 72 61  70 70 65 64 20 69 6e 20  |n be trapped in |
00000370  79 6f 75 72 20 53 57 52  20 70 72 6f 67 72 61 6d  |your SWR program|
00000380  20 62 79 20 69 6e 74 65  72 63 65 70 74 69 6e 67  | by intercepting|
00000390  20 73 65 72 76 69 63 65  20 63 61 6c 6c 0d 36 2e  | service call.6.|
000003a0  20 49 64 65 61 6c 6c 79  20 79 6f 75 72 20 70 72  | Ideally your pr|
000003b0  6f 67 72 61 6d 20 73 68  6f 75 6c 64 20 62 65 20  |ogram should be |
000003c0  69 6e 20 73 6f 63 6b 65  74 20 26 30 46 2e 0d 0d  |in socket &0F...|
000003d0  20 20 54 68 65 20 4d 4f  53 20 69 73 73 75 65 73  |  The MOS issues|
000003e0  20 73 65 72 76 69 63 65  20 63 61 6c 6c 20 36 20  | service call 6 |
000003f0  77 69 74 68 20 74 68 65  20 65 72 72 6f 72 20 6e  |with the error n|
00000400  75 6d 62 65 72 20 70 6f  69 6e 74 65 72 20 28 69  |umber pointer (i|
00000410  6e 0d 6c 6f 63 61 74 69  6f 6e 73 20 26 46 44 20  |n.locations &FD |
00000420  61 6e 64 20 26 46 45 29  20 63 6f 6e 74 61 69 6e  |and &FE) contain|
00000430  69 6e 67 20 74 68 65 20  61 64 64 72 65 73 73 20  |ing the address |
00000440  6f 66 20 74 68 65 20 62  79 74 65 20 61 66 74 65  |of the byte afte|
00000450  72 20 74 68 65 0d 42 52  4b 20 69 6e 73 74 72 75  |r the.BRK instru|
00000460  63 74 69 6f 6e 20 61 6e  64 20 6c 6f 63 61 74 69  |ction and locati|
00000470  6f 6e 20 26 46 30 20 63  6f 6e 74 61 69 6e 69 6e  |on &F0 containin|
00000480  67 20 74 68 65 20 76 61  6c 75 65 20 6f 66 20 74  |g the value of t|
00000490  68 65 20 73 74 61 63 6b  0d 70 6f 69 6e 74 65 72  |he stack.pointer|
000004a0  20 61 66 74 65 72 20 74  68 65 20 42 52 4b 20 77  | after the BRK w|
000004b0  61 73 20 65 78 65 63 75  74 65 64 2e 20 4f 73 62  |as executed. Osb|
000004c0  79 74 65 20 26 42 41 20  63 61 6e 20 62 65 20 75  |yte &BA can be u|
000004d0  73 65 64 20 74 6f 20 66  69 6e 64 20 74 68 65 0d  |sed to find the.|
000004e0  6e 75 6d 62 65 72 20 6f  66 20 74 68 65 20 72 6f  |number of the ro|
000004f0  6d 20 77 68 69 63 68 20  77 61 73 20 61 63 74 69  |m which was acti|
00000500  76 65 20 77 68 65 6e 20  74 68 65 20 42 52 4b 20  |ve when the BRK |
00000510  77 61 73 20 65 78 65 63  75 74 65 64 2e 0d 0d 20  |was executed... |
00000520  20 54 68 65 72 65 20 61  72 65 20 32 20 77 61 79  | There are 2 way|
00000530  73 20 6f 66 20 70 72 6f  63 65 73 73 69 6e 67 20  |s of processing |
00000540  65 72 72 6f 72 73 20 61  66 74 65 72 20 74 72 61  |errors after tra|
00000550  70 70 69 6e 67 20 74 68  65 6d 20 69 6e 20 79 6f  |pping them in yo|
00000560  75 72 0d 73 69 64 65 77  61 79 73 20 72 61 6d 20  |ur.sideways ram |
00000570  70 72 6f 67 72 61 6d 3a  0d 0d 31 2e 20 59 6f 75  |program:..1. You|
00000580  72 20 72 6f 75 74 69 6e  65 20 63 61 6e 20 63 6f  |r routine can co|
00000590  6d 70 6c 65 74 65 6c 79  20 72 65 70 6c 61 63 65  |mpletely replace|
000005a0  20 74 68 65 20 65 72 72  6f 72 20 68 61 6e 64 6c  | the error handl|
000005b0  65 72 20 77 68 69 63 68  20 77 6f 75 6c 64 0d 6e  |er which would.n|
000005c0  6f 72 6d 61 6c 6c 79 20  64 65 61 6c 20 77 69 74  |ormally deal wit|
000005d0  68 20 74 68 65 20 65 72  72 6f 72 2e 0d 0d 32 2e  |h the error...2.|
000005e0  20 59 6f 75 72 20 72 6f  75 74 69 6e 65 20 63 61  | Your routine ca|
000005f0  6e 20 70 65 72 66 6f 72  6d 20 61 20 66 75 6e 63  |n perform a func|
00000600  74 69 6f 6e 20 6f 72 20  70 72 69 6e 74 20 61 20  |tion or print a |
00000610  6d 65 73 73 61 67 65 20  62 65 66 6f 72 65 0d 68  |message before.h|
00000620  61 6e 64 69 6e 67 20 74  68 65 20 65 72 72 6f 72  |anding the error|
00000630  20 62 61 63 6b 20 74 6f  20 74 68 65 20 63 75 72  | back to the cur|
00000640  72 65 6e 74 20 6c 61 6e  67 75 61 67 65 27 73 20  |rent language's |
00000650  65 72 72 6f 72 20 68 61  6e 64 6c 69 6e 67 0d 72  |error handling.r|
00000660  6f 75 74 69 6e 65 2e 0d  0d 20 20 49 6e 20 74 68  |outine...  In th|
00000670  69 73 20 6d 6f 64 75 6c  65 20 49 20 77 69 6c 6c  |is module I will|
00000680  20 73 68 6f 77 20 79 6f  75 20 68 6f 77 20 74 6f  | show you how to|
00000690  20 64 65 73 69 67 6e 20  61 20 73 69 64 65 77 61  | design a sidewa|
000006a0  79 73 20 72 61 6d 20 70  72 6f 67 72 61 6d 0d 74  |ys ram program.t|
000006b0  6f 20 63 6f 6d 70 6c 65  74 65 6c 79 20 72 65 70  |o completely rep|
000006c0  6c 61 63 65 20 74 68 65  20 6e 6f 72 6d 61 6c 20  |lace the normal |
000006d0  65 72 72 6f 72 20 68 61  6e 64 6c 69 6e 67 20 6f  |error handling o|
000006e0  66 20 74 68 65 20 44 46  53 20 22 43 61 74 20 66  |f the DFS "Cat f|
000006f0  75 6c 6c 22 0d 61 6e 64  20 22 44 69 73 63 20 66  |ull".and "Disc f|
00000700  75 6c 6c 22 20 65 72 72  6f 72 73 2e 20 54 68 65  |ull" errors. The|
00000710  20 70 72 6f 67 72 61 6d  20 77 69 6c 6c 20 62 65  | program will be|
00000720  20 75 73 65 64 20 74 6f  20 63 6f 70 79 20 61 6c  | used to copy al|
00000730  6c 20 74 68 65 20 66 69  6c 65 73 0d 66 72 6f 6d  |l the files.from|
00000740  20 61 20 64 69 73 63 20  69 6e 20 64 72 69 76 65  | a disc in drive|
00000750  20 30 20 6f 6e 74 6f 20  61 73 20 6d 61 6e 79 20  | 0 onto as many |
00000760  64 72 69 76 65 20 31 20  64 69 73 63 73 20 61 73  |drive 1 discs as|
00000770  20 61 72 65 20 6e 65 63  65 73 73 61 72 79 20 74  | are necessary t|
00000780  6f 0d 68 6f 6c 64 20 74  68 65 6d 20 61 6c 6c 2e  |o.hold them all.|
00000790  20 54 68 69 73 20 6d 69  67 68 74 20 73 65 65 6d  | This might seem|
000007a0  20 61 20 74 72 69 76 69  61 6c 20 74 61 73 6b 20  | a trivial task |
000007b0  62 75 74 20 63 6f 6e 73  69 64 65 72 20 77 68 61  |but consider wha|
000007c0  74 20 77 6f 75 6c 64 0d  68 61 70 70 65 6e 20 69  |t would.happen i|
000007d0  66 20 64 72 69 76 65 20  30 20 68 61 73 20 61 20  |f drive 0 has a |
000007e0  66 75 6c 6c 20 38 30 20  74 72 61 63 6b 20 64 69  |full 80 track di|
000007f0  73 63 20 61 6e 64 20 64  72 69 76 65 20 31 20 69  |sc and drive 1 i|
00000800  73 20 61 20 34 30 20 74  72 61 63 6b 0d 64 72 69  |s a 40 track.dri|
00000810  76 65 2e 20 55 73 69 6e  67 20 2a 43 4f 50 59 20  |ve. Using *COPY |
00000820  30 20 31 20 2a 2e 2a 20  77 69 6c 6c 20 65 76 65  |0 1 *.* will eve|
00000830  6e 74 75 61 6c 6c 79 20  63 72 65 61 74 65 20 74  |ntually create t|
00000840  68 65 20 64 69 73 63 20  66 75 6c 6c 20 65 72 72  |he disc full err|
00000850  6f 72 0d 61 6e 64 20 73  74 6f 70 20 74 72 61 6e  |or.and stop tran|
00000860  73 66 65 72 69 6e 67 20  74 68 65 20 66 69 6c 65  |sfering the file|
00000870  73 20 62 65 66 6f 72 65  20 74 68 65 79 20 68 61  |s before they ha|
00000880  76 65 20 61 6c 6c 20 62  65 65 6e 20 63 6f 70 69  |ve all been copi|
00000890  65 64 2e 20 55 73 69 6e  67 0d 74 68 65 20 73 61  |ed. Using.the sa|
000008a0  6d 65 20 63 6f 6d 6d 61  6e 64 20 77 69 6c 6c 20  |me command will |
000008b0  63 72 65 61 74 65 20 61  20 63 61 74 20 66 75 6c  |create a cat ful|
000008c0  6c 20 65 72 72 6f 72 20  69 66 20 74 68 65 20 64  |l error if the d|
000008d0  69 73 63 20 69 6e 20 64  72 69 76 65 20 31 0d 68  |isc in drive 1.h|
000008e0  61 73 20 6f 6e 6c 79 20  6f 6e 65 20 6f 72 20 74  |as only one or t|
000008f0  77 6f 20 63 61 74 61 6c  6f 67 75 65 20 65 6e 74  |wo catalogue ent|
00000900  72 69 65 73 20 75 6e 75  73 65 64 2e 0d 0d 20 20  |ries unused...  |
00000910  54 68 65 20 70 72 6f 67  72 61 6d 20 46 49 4c 45  |The program FILE|
00000920  53 20 69 6e 73 74 72 75  63 74 73 20 74 68 65 20  |S instructs the |
00000930  63 6f 6d 6d 61 6e 64 20  6c 69 6e 65 20 69 6e 74  |command line int|
00000940  65 72 70 72 65 74 65 72  20 74 6f 20 2a 43 4f 50  |erpreter to *COP|
00000950  59 0d 61 6c 6c 20 74 68  65 20 66 69 6c 65 73 20  |Y.all the files |
00000960  66 72 6f 6d 20 64 72 69  76 65 20 30 20 74 6f 20  |from drive 0 to |
00000970  64 72 69 76 65 20 31 2e  20 49 66 20 61 6e 20 65  |drive 1. If an e|
00000980  72 72 6f 72 20 69 73 20  67 65 6e 65 72 61 74 65  |rror is generate|
00000990  64 20 74 68 65 0d 70 72  6f 67 72 61 6d 20 69 6e  |d the.program in|
000009a0  74 65 72 63 65 70 74 73  20 73 65 72 76 69 63 65  |tercepts service|
000009b0  20 63 61 6c 6c 20 36 20  61 6e 64 20 74 65 73 74  | call 6 and test|
000009c0  73 20 74 68 65 20 61 64  64 72 65 73 73 20 73 74  |s the address st|
000009d0  6f 72 65 64 20 69 6e 20  74 68 65 0d 65 72 72 6f  |ored in the.erro|
000009e0  72 20 6e 75 6d 62 65 72  20 70 6f 69 6e 74 65 72  |r number pointer|
000009f0  20 74 6f 20 73 65 65 20  69 66 20 65 69 74 68 65  | to see if eithe|
00000a00  72 20 74 68 65 20 63 61  74 20 66 75 6c 6c 20 6f  |r the cat full o|
00000a10  72 20 64 69 73 63 20 66  75 6c 6c 20 65 72 72 6f  |r disc full erro|
00000a20  72 0d 68 61 73 20 62 65  65 6e 20 67 65 6e 65 72  |r.has been gener|
00000a30  61 74 65 64 2e 20 49 66  20 69 74 20 66 69 6e 64  |ated. If it find|
00000a40  73 20 65 69 74 68 65 72  20 69 74 20 69 6e 73 74  |s either it inst|
00000a50  72 75 63 74 73 20 74 68  65 20 75 73 65 72 20 74  |ructs the user t|
00000a60  6f 20 63 68 61 6e 67 65  0d 74 68 65 20 64 69 73  |o change.the dis|
00000a70  63 20 69 6e 20 64 72 69  76 65 20 31 20 61 6e 64  |c in drive 1 and|
00000a80  20 74 68 65 6e 20 63 6f  6e 74 69 6e 75 65 73 20  | then continues |
00000a90  77 69 74 68 20 74 68 65  20 73 61 76 65 20 6f 70  |with the save op|
00000aa0  65 72 61 74 69 6f 6e 20  74 68 61 74 0d 67 65 6e  |eration that.gen|
00000ab0  65 72 61 74 65 64 20 74  68 65 20 65 72 72 6f 72  |erated the error|
00000ac0  2e 20 57 68 65 6e 20 61  6c 6c 20 74 68 65 20 66  |. When all the f|
00000ad0  69 6c 65 73 20 68 61 76  65 20 62 65 65 6e 20 74  |iles have been t|
00000ae0  72 61 6e 73 66 65 72 65  64 20 66 72 6f 6d 0d 64  |ransfered from.d|
00000af0  72 69 76 65 20 30 20 74  6f 20 64 72 69 76 65 20  |rive 0 to drive |
00000b00  31 20 74 68 65 20 70 72  6f 67 72 61 6d 20 72 65  |1 the program re|
00000b10  2d 65 6e 74 65 72 73 20  42 41 53 49 43 20 74 6f  |-enters BASIC to|
00000b20  20 63 6c 65 61 72 20 61  6e 79 20 65 72 72 6f 72  | clear any error|
00000b30  0d 63 6f 6e 64 69 74 69  6f 6e 20 74 68 61 74 20  |.condition that |
00000b40  6d 69 67 68 74 20 65 78  69 73 74 2e 0d 0d 20 20  |might exist...  |
00000b50  41 66 74 65 72 20 65 78  70 6c 61 69 6e 69 6e 67  |After explaining|
00000b60  20 68 6f 77 20 74 6f 20  64 65 73 69 67 6e 20 74  | how to design t|
00000b70  68 69 73 20 74 79 70 65  20 6f 66 20 70 72 6f 67  |his type of prog|
00000b80  72 61 6d 20 49 20 77 69  6c 6c 20 73 68 6f 77 20  |ram I will show |
00000b90  68 6f 77 0d 69 74 20 63  61 6e 20 62 65 20 6d 6f  |how.it can be mo|
00000ba0  64 69 66 69 65 64 20 74  6f 20 70 61 73 73 20 63  |dified to pass c|
00000bb0  6f 6e 74 72 6f 6c 20 62  61 63 6b 20 74 6f 20 74  |ontrol back to t|
00000bc0  68 65 20 6e 6f 72 6d 61  6c 20 65 72 72 6f 72 20  |he normal error |
00000bd0  68 61 6e 64 6c 69 6e 67  0d 72 6f 75 74 69 6e 65  |handling.routine|
00000be0  2e 0d 0d 20 20 49 66 20  79 6f 75 20 69 6e 74 65  |...  If you inte|
00000bf0  6e 64 20 74 6f 20 77 72  69 74 65 20 61 20 70 72  |nd to write a pr|
00000c00  6f 67 72 61 6d 20 77 68  69 63 68 20 74 72 61 70  |ogram which trap|
00000c10  73 20 65 72 72 6f 72 73  20 62 79 20 69 6e 74 65  |s errors by inte|
00000c20  72 63 65 70 74 69 6e 67  0d 73 65 72 76 69 63 65  |rcepting.service|
00000c30  20 63 61 6c 6c 20 36 20  79 6f 75 20 6e 65 65 64  | call 6 you need|
00000c40  20 74 6f 20 6b 6e 6f 77  20 74 68 65 20 65 72 72  | to know the err|
00000c50  6f 72 20 6e 75 6d 62 65  72 20 6f 66 20 74 68 65  |or number of the|
00000c60  20 65 72 72 6f 72 20 79  6f 75 0d 69 6e 74 65 6e  | error you.inten|
00000c70  64 20 74 6f 20 74 72 61  70 2e 20 59 6f 75 20 63  |d to trap. You c|
00000c80  61 6e 20 65 69 74 68 65  72 20 6c 6f 6f 6b 20 74  |an either look t|
00000c90  68 65 20 65 72 72 6f 72  20 6e 75 6d 62 65 72 20  |he error number |
00000ca0  75 70 20 69 6e 20 61 20  6d 61 6e 75 61 6c 20 6f  |up in a manual o|
00000cb0  72 0d 64 65 6c 69 62 65  72 61 74 65 6c 79 20 63  |r.deliberately c|
00000cc0  72 65 61 74 65 20 74 68  65 20 65 72 72 6f 72 20  |reate the error |
00000cd0  61 6e 64 20 74 68 65 6e  20 6c 6f 6f 6b 20 61 74  |and then look at|
00000ce0  20 61 20 6d 65 6d 6f 72  79 20 64 75 6d 70 20 6f  | a memory dump o|
00000cf0  66 20 74 68 65 0d 65 72  72 6f 72 20 62 75 66 66  |f the.error buff|
00000d00  65 72 20 61 6e 64 20 66  69 6e 64 20 74 68 65 20  |er and find the |
00000d10  65 72 72 6f 72 20 6e 75  6d 62 65 72 20 66 72 6f  |error number fro|
00000d20  6d 20 74 68 65 72 65 2e  20 46 69 67 75 72 65 20  |m there. Figure |
00000d30  31 33 2e 31 20 69 73 20  61 0d 6d 65 6d 6f 72 79  |13.1 is a.memory|
00000d40  20 64 75 6d 70 20 6f 66  20 74 68 65 20 65 72 72  | dump of the err|
00000d50  6f 72 20 62 75 66 66 65  72 20 61 66 74 65 72 20  |or buffer after |
00000d60  63 72 65 61 74 69 6e 67  20 61 20 63 61 74 20 66  |creating a cat f|
00000d70  75 6c 6c 20 61 6e 64 20  61 20 64 69 73 63 0d 66  |ull and a disc.f|
00000d80  75 6c 6c 20 65 72 72 6f  72 2e 20 54 68 65 20 65  |ull error. The e|
00000d90  72 72 6f 72 20 6e 75 6d  62 65 72 20 6f 66 20 65  |rror number of e|
00000da0  61 63 68 20 65 72 72 6f  72 20 69 73 20 73 74 6f  |ach error is sto|
00000db0  72 65 64 20 69 6e 20 74  68 65 20 62 79 74 65 20  |red in the byte |
00000dc0  61 66 74 65 72 0d 74 68  65 20 66 69 72 73 74 20  |after.the first |
00000dd0  42 52 4b 20 69 6e 73 74  72 75 63 74 69 6f 6e 2c  |BRK instruction,|
00000de0  20 69 65 2e 20 69 6e 20  6c 6f 63 61 74 69 6f 6e  | ie. in location|
00000df0  20 26 31 30 31 2e 20 54  68 65 20 63 61 74 20 66  | &101. The cat f|
00000e00  75 6c 6c 20 65 72 72 6f  72 0d 6e 75 6d 62 65 72  |ull error.number|
00000e10  20 69 73 20 26 42 45 20  61 6e 64 20 74 68 65 20  | is &BE and the |
00000e20  64 69 73 63 20 66 75 6c  6c 20 65 72 72 6f 72 20  |disc full error |
00000e30  6e 75 6d 62 65 72 20 69  73 20 26 43 36 2e 0d 0d  |number is &C6...|
00000e40  0d 0d 30 31 30 30 20 20  30 30 20 42 45 20 34 33  |..0100  00 BE 43|
00000e50  20 36 31 20 37 34 20 32  30 20 36 36 20 37 35 20  | 61 74 20 66 75 |
00000e60  20 2e 2e 43 61 74 20 66  75 0d 30 31 30 38 20 20  | ..Cat fu.0108  |
00000e70  36 43 20 36 43 20 30 30  20 30 30 20 30 30 20 30  |6C 6C 00 00 00 0|
00000e80  30 20 30 30 20 30 30 20  20 6c 6c 2e 2e 2e 2e 2e  |0 00 00  ll.....|
00000e90  2e 0d 30 31 31 30 20 20  30 30 20 30 30 20 30 30  |..0110  00 00 00|
00000ea0  20 30 30 20 30 30 20 30  30 20 30 30 20 30 30 20  | 00 00 00 00 00 |
00000eb0  20 2e 2e 2e 2e 2e 2e 2e  2e 0d 0d 30 31 30 30 20  | ..........0100 |
00000ec0  20 30 30 20 43 36 20 34  34 20 36 39 20 37 33 20  | 00 C6 44 69 73 |
00000ed0  36 42 20 32 30 20 36 36  20 20 2e 2e 44 69 73 6b  |6B 20 66  ..Disk|
00000ee0  20 66 0d 30 31 30 38 20  20 37 35 20 36 43 20 36  | f.0108  75 6C 6|
00000ef0  43 20 30 30 20 30 30 20  30 30 20 30 30 20 30 30  |C 00 00 00 00 00|
00000f00  20 20 75 6c 6c 2e 2e 2e  2e 2e 0d 30 31 31 30 20  |  ull......0110 |
00000f10  20 30 30 20 30 30 20 30  30 20 30 30 20 30 30 20  | 00 00 00 00 00 |
00000f20  30 30 20 30 30 20 30 30  20 20 2e 2e 2e 2e 2e 2e  |00 00 00  ......|
00000f30  2e 2e 0d 0d 46 69 67 75  72 65 20 31 33 2e 31 20  |....Figure 13.1 |
00000f40  20 54 68 65 20 65 72 72  6f 72 20 62 75 66 66 65  | The error buffe|
00000f50  72 20 61 66 74 65 72 20  43 61 74 20 66 75 6c 6c  |r after Cat full|
00000f60  20 61 6e 64 20 44 69 73  63 20 66 75 6c 6c 20 65  | and Disc full e|
00000f70  72 72 6f 72 73 2e 0d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |rrors..---------|
00000f80  2d 2d 20 20 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |--  ------------|
00000f90  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000fb0  2d 2d 2d 2d 2d 2d 2d 2d  2d 0d 0d 0d 0d 20 20 54  |---------....  T|
00000fc0  6f 20 74 72 61 70 20 65  69 74 68 65 72 20 6f 66  |o trap either of|
00000fd0  20 74 68 65 73 65 20 74  77 6f 20 65 72 72 6f 72  | these two error|
00000fe0  73 20 69 74 20 69 73 20  6e 65 63 65 73 73 61 72  |s it is necessar|
00000ff0  79 20 66 6f 72 20 74 68  65 20 53 57 52 0d 69 6e  |y for the SWR.in|
00001000  74 65 72 70 72 65 74 65  72 20 74 6f 20 69 6e 74  |terpreter to int|
00001010  65 72 63 65 70 74 20 73  65 72 76 69 63 65 20 63  |ercept service c|
00001020  61 6c 6c 20 36 20 61 6e  64 20 74 65 73 74 20 74  |all 6 and test t|
00001030  68 65 20 63 6f 6e 74 65  6e 74 20 6f 66 20 74 68  |he content of th|
00001040  65 0d 6d 65 6d 6f 72 79  20 6c 6f 63 61 74 69 6f  |e.memory locatio|
00001050  6e 20 73 74 6f 72 65 64  20 69 6e 20 74 68 65 20  |n stored in the |
00001060  65 72 72 6f 72 20 6e 75  6d 62 65 72 20 70 6f 69  |error number poi|
00001070  6e 74 65 72 20 74 6f 20  73 65 65 20 69 66 20 69  |nter to see if i|
00001080  74 0d 63 6f 6e 74 61 69  6e 73 20 65 69 74 68 65  |t.contains eithe|
00001090  72 20 26 42 45 20 6f 72  20 26 43 36 2e 20 49 66  |r &BE or &C6. If|
000010a0  20 65 69 74 68 65 72 20  6f 66 20 74 68 65 73 65  | either of these|
000010b0  20 6e 75 6d 62 65 72 73  20 69 73 20 66 6f 75 6e  | numbers is foun|
000010c0  64 20 74 68 65 0d 6e 65  77 20 65 72 72 6f 72 20  |d the.new error |
000010d0  68 61 6e 64 6c 69 6e 67  20 72 6f 75 74 69 6e 65  |handling routine|
000010e0  20 63 61 6e 20 70 72 6f  63 65 73 73 20 74 68 65  | can process the|
000010f0  20 65 72 72 6f 72 2c 20  69 66 20 6e 65 69 74 68  | error, if neith|
00001100  65 72 20 69 73 20 66 6f  75 6e 64 0d 74 68 65 20  |er is found.the |
00001110  72 65 67 69 73 74 65 72  73 20 6d 75 73 74 20 62  |registers must b|
00001120  65 20 72 65 73 74 6f 72  65 64 20 61 6e 64 20 63  |e restored and c|
00001130  6f 6e 74 72 6f 6c 20 70  61 73 73 65 64 20 62 61  |ontrol passed ba|
00001140  63 6b 20 74 6f 20 74 68  65 20 4d 4f 53 2e 0d 0d  |ck to the MOS...|
00001150  20 20 54 68 65 20 70 75  72 70 6f 73 65 20 6f 66  |  The purpose of|
00001160  20 74 68 65 20 70 72 6f  67 72 61 6d 20 69 73 20  | the program is |
00001170  74 6f 20 63 6f 70 79 20  61 6c 6c 20 74 68 65 20  |to copy all the |
00001180  66 69 6c 65 73 20 66 72  6f 6d 20 61 20 64 69 73  |files from a dis|
00001190  63 20 69 6e 0d 64 72 69  76 65 20 30 20 6f 6e 74  |c in.drive 0 ont|
000011a0  6f 20 61 20 64 69 73 63  20 69 6e 20 64 72 69 76  |o a disc in driv|
000011b0  65 20 31 2e 20 54 6f 20  64 6f 20 74 68 69 73 20  |e 1. To do this |
000011c0  74 68 65 20 70 72 6f 67  72 61 6d 20 77 69 6c 6c  |the program will|
000011d0  20 73 74 6f 72 65 20 64  61 74 61 0d 63 6f 6e 63  | store data.conc|
000011e0  65 72 6e 65 64 20 77 69  74 68 20 74 68 65 20 74  |erned with the t|
000011f0  61 73 6b 20 69 6e 20 69  74 73 20 70 72 69 76 61  |ask in its priva|
00001200  74 65 20 77 6f 72 6b 73  70 61 63 65 2e 20 54 68  |te workspace. Th|
00001210  65 20 64 61 74 61 20 73  74 6f 72 65 64 20 69 6e  |e data stored in|
00001220  0d 70 72 69 76 61 74 65  20 77 6f 72 6b 73 70 61  |.private workspa|
00001230  63 65 20 69 6e 63 6c 75  64 65 73 20 61 20 66 6c  |ce includes a fl|
00001240  61 67 20 77 68 69 63 68  20 69 6e 64 69 63 61 74  |ag which indicat|
00001250  65 73 20 77 68 65 74 68  65 72 20 6f 72 20 6e 6f  |es whether or no|
00001260  74 20 74 68 65 0d 75 74  69 6c 69 74 79 20 69 73  |t the.utility is|
00001270  20 61 63 74 69 76 65 2e  20 49 66 20 74 68 65 20  | active. If the |
00001280  75 74 69 6c 69 74 79 20  69 73 20 61 63 74 69 76  |utility is activ|
00001290  65 20 74 68 65 20 69 6e  74 65 72 70 72 65 74 65  |e the interprete|
000012a0  72 20 63 61 6e 20 74 72  61 70 0d 61 6e 64 20 70  |r can trap.and p|
000012b0  72 6f 63 65 73 73 20 74  68 65 20 63 61 74 20 66  |rocess the cat f|
000012c0  75 6c 6c 20 61 6e 64 20  64 69 73 63 20 66 75 6c  |ull and disc ful|
000012d0  6c 20 65 72 72 6f 72 73  2e 20 49 66 20 69 74 20  |l errors. If it |
000012e0  69 73 20 6e 6f 74 20 61  63 74 69 76 65 20 74 68  |is not active th|
000012f0  65 0d 69 6e 74 65 72 70  72 65 74 65 72 20 6d 75  |e.interpreter mu|
00001300  73 74 20 6e 6f 74 20 74  72 61 70 20 74 68 65 6d  |st not trap them|
00001310  2e 0d 0d 20 20 54 68 65  20 72 6f 75 74 69 6e 65  |...  The routine|
00001320  20 69 6e 20 66 69 67 75  72 65 20 31 33 2e 32 20  | in figure 13.2 |
00001330  69 73 20 74 61 6b 65 6e  20 66 72 6f 6d 20 46 49  |is taken from FI|
00001340  4c 45 53 20 61 6e 64 20  74 65 73 74 73 20 61 20  |LES and tests a |
00001350  66 6c 61 67 20 73 65 74  0d 75 70 20 69 6e 20 74  |flag set.up in t|
00001360  68 65 20 6c 61 73 74 20  62 79 74 65 20 6f 66 20  |he last byte of |
00001370  74 68 65 20 66 69 72 73  74 20 70 61 67 65 20 6f  |the first page o|
00001380  66 20 70 72 69 76 61 74  65 20 77 6f 72 6b 73 70  |f private worksp|
00001390  61 63 65 2e 20 54 68 69  73 20 62 79 74 65 0d 73  |ace. This byte.s|
000013a0  74 6f 72 65 73 20 26 46  46 20 69 66 20 74 68 65  |tores &FF if the|
000013b0  20 75 74 69 6c 69 74 79  20 69 73 20 61 63 74 69  | utility is acti|
000013c0  76 65 20 61 6e 64 20 26  30 30 20 69 66 20 69 74  |ve and &00 if it|
000013d0  20 69 73 20 6e 6f 74 2e  20 43 6f 6e 74 72 6f 6c  | is not. Control|
000013e0  20 77 69 6c 6c 0d 6f 6e  6c 79 20 70 61 73 73 20  | will.only pass |
000013f0  74 6f 20 74 68 65 20 6e  65 77 20 65 72 72 6f 72  |to the new error|
00001400  20 68 61 6e 64 6c 65 72  20 69 66 20 74 68 65 20  | handler if the |
00001410  75 74 69 6c 69 74 79 20  69 73 20 61 63 74 69 76  |utility is activ|
00001420  65 20 61 6e 64 20 69 66  0d 65 69 74 68 65 72 20  |e and if.either |
00001430  74 68 65 20 63 61 74 20  66 75 6c 6c 20 6f 72 20  |the cat full or |
00001440  64 69 73 63 20 66 75 6c  6c 20 65 72 72 6f 72 20  |disc full error |
00001450  68 61 73 20 62 65 65 6e  20 67 65 6e 65 72 61 74  |has been generat|
00001460  65 64 2e 20 54 68 65 20  66 6c 61 67 20 69 73 0d  |ed. The flag is.|
00001470  73 65 74 20 75 70 20 77  68 65 6e 20 74 68 65 20  |set up when the |
00001480  70 72 69 76 61 74 65 20  77 6f 72 6b 73 70 61 63  |private workspac|
00001490  65 20 69 73 20 63 6c 61  69 6d 65 64 20 61 6e 64  |e is claimed and|
000014a0  20 73 77 69 74 63 68 65  64 20 6f 6e 20 61 6e 64  | switched on and|
000014b0  20 6f 66 66 0d 77 68 65  6e 20 74 68 65 20 75 74  | off.when the ut|
000014c0  69 6c 69 74 79 20 73 74  61 72 74 73 20 61 6e 64  |ility starts and|
000014d0  20 66 69 6e 69 73 68 65  73 2e 0d 0d 0d 0d 20 20  | finishes.....  |
000014e0  20 20 20 20 20 20 20 50  48 41 0d 20 20 20 20 20  |       PHA.     |
000014f0  20 20 20 20 43 4d 50 20  23 36 20 20 20 20 20 20  |    CMP #6      |
00001500  20 20 20 20 20 5c 20 69  73 20 69 74 20 73 65 72  |     \ is it ser|
00001510  76 69 63 65 20 63 61 6c  6c 20 36 3f 0d 20 20 20  |vice call 6?.   |
00001520  20 20 20 20 20 20 42 4e  45 20 6f 75 74 20 20 20  |      BNE out   |
00001530  20 20 20 20 20 20 20 5c  20 62 72 61 6e 63 68 20  |       \ branch |
00001540  69 66 20 6e 6f 74 0d 20  20 20 20 20 20 20 20 20  |if not.         |
00001550  54 58 41 20 20 20 20 20  20 20 20 20 20 20 20 20  |TXA             |
00001560  20 5c 20 73 74 6f 72 65  20 61 6c 6c 20 72 65 67  | \ store all reg|
00001570  69 73 74 65 72 73 0d 20  20 20 20 20 20 20 20 20  |isters.         |
00001580  50 48 41 0d 20 20 20 20  20 20 20 20 20 54 59 41  |PHA.         TYA|
00001590  0d 20 20 20 20 20 20 20  20 20 50 48 41 0d 20 20  |.         PHA.  |
000015a0  20 20 20 20 20 20 20 4c  44 58 20 26 46 34 20 20  |       LDX &F4  |
000015b0  20 20 20 20 20 20 20 20  5c 20 6c 6f 61 64 20 74  |        \ load t|
000015c0  68 69 73 20 72 6f 6d 20  6e 75 6d 62 65 72 0d 20  |his rom number. |
000015d0  20 20 20 20 20 20 20 20  4c 44 41 20 26 44 46 30  |        LDA &DF0|
000015e0  2c 58 20 20 20 20 20 20  20 5c 20 66 69 6e 64 20  |,X       \ find |
000015f0  73 74 61 72 74 20 6f 66  20 77 6f 72 6b 73 70 61  |start of workspa|
00001600  63 65 0d 20 20 20 20 20  20 20 20 20 53 54 41 20  |ce.         STA |
00001610  26 37 33 20 20 20 20 20  20 20 20 20 20 5c 20 73  |&73          \ s|
00001620  74 6f 72 65 20 68 69 67  68 20 62 79 74 65 20 6f  |tore high byte o|
00001630  66 20 73 74 61 72 74 20  6f 66 20 77 6f 72 6b 73  |f start of works|
00001640  70 61 63 65 0d 20 20 20  20 20 20 20 20 20 4c 44  |pace.         LD|
00001650  41 20 23 30 20 20 20 20  20 20 20 20 20 20 20 5c  |A #0           \|
00001660  20 77 6f 72 6b 73 70 61  63 65 20 61 6c 77 61 79  | workspace alway|
00001670  73 20 73 74 61 72 74 73  20 61 74 20 70 61 67 65  |s starts at page|
00001680  20 62 6f 75 6e 64 61 72  79 0d 20 20 20 20 20 20  | boundary.      |
00001690  20 20 20 53 54 41 20 26  37 32 20 20 20 20 20 20  |   STA &72      |
000016a0  20 20 20 20 5c 20 6c 6f  77 20 62 79 74 65 20 6f  |    \ low byte o|
000016b0  66 20 73 74 61 72 74 20  6f 66 20 77 6f 72 6b 73  |f start of works|
000016c0  70 61 63 65 0d 20 20 20  20 20 20 20 20 20 4c 44  |pace.         LD|
000016d0  59 20 23 26 46 46 20 20  20 20 20 20 20 20 20 5c  |Y #&FF         \|
000016e0  20 66 6c 61 67 20 61 64  64 72 65 73 73 20 6f 66  | flag address of|
000016f0  66 73 65 74 0d 20 20 20  20 20 20 20 20 20 4c 44  |fset.         LD|
00001700  41 20 28 26 37 32 29 2c  59 20 20 20 20 20 20 5c  |A (&72),Y      \|
00001710  20 6c 6f 61 64 20 66 6c  61 67 0d 20 20 20 20 20  | load flag.     |
00001720  20 20 20 20 42 45 51 20  6e 6f 74 6f 6e 20 20 20  |    BEQ noton   |
00001730  20 20 20 20 20 5c 20 62  72 61 6e 63 68 20 69 66  |     \ branch if|
00001740  20 75 74 69 6c 69 74 79  20 6e 6f 74 20 61 63 74  | utility not act|
00001750  69 76 65 0d 20 20 20 20  20 20 20 20 20 49 4e 59  |ive.         INY|
00001760  20 20 20 20 20 20 20 20  20 20 20 20 20 20 5c 20  |              \ |
00001770  59 3d 30 0d 20 20 20 20  20 20 20 20 20 4c 44 41  |Y=0.         LDA|
00001780  20 28 26 46 44 29 2c 59  20 20 20 20 20 20 5c 20  | (&FD),Y      \ |
00001790  6c 6f 61 64 20 65 72 72  72 6f 72 20 6e 75 6d 62  |load errror numb|
000017a0  65 72 0d 20 20 20 20 20  20 20 20 20 43 4d 50 20  |er.         CMP |
000017b0  23 26 42 45 20 20 20 20  20 20 20 20 20 5c 20 43  |#&BE         \ C|
000017c0  61 74 20 66 75 6c 6c 20  65 72 72 6f 72 20 6e 75  |at full error nu|
000017d0  6d 62 65 72 0d 20 20 20  20 20 20 20 20 20 42 45  |mber.         BE|
000017e0  51 20 63 68 61 6e 67 65  20 20 20 20 20 20 20 5c  |Q change       \|
000017f0  20 62 72 61 6e 63 68 20  69 66 20 43 61 74 20 66  | branch if Cat f|
00001800  75 6c 6c 20 65 72 72 6f  72 0d 20 20 20 20 20 20  |ull error.      |
00001810  20 20 20 43 4d 50 20 23  26 43 36 20 20 20 20 20  |   CMP #&C6     |
00001820  20 20 20 20 5c 20 44 69  73 63 20 66 75 6c 6c 20  |    \ Disc full |
00001830  65 72 72 6f 72 20 6e 75  6d 62 65 72 0d 20 20 20  |error number.   |
00001840  20 20 20 20 20 20 42 45  51 20 63 68 61 6e 67 65  |      BEQ change|
00001850  20 20 20 20 20 20 20 5c  20 62 72 61 6e 63 68 20  |       \ branch |
00001860  69 66 20 44 69 73 63 20  66 75 6c 6c 20 65 72 72  |if Disc full err|
00001870  6f 72 0d 2e 6e 6f 74 6f  6e 0d 20 20 20 20 20 20  |or..noton.      |
00001880  20 20 20 50 4c 41 20 20  20 20 20 20 20 20 20 20  |   PLA          |
00001890  20 20 20 20 5c 20 72 65  73 74 6f 72 65 20 61 6c  |    \ restore al|
000018a0  6c 20 72 65 67 69 73 74  65 72 73 0d 20 20 20 20  |l registers.    |
000018b0  20 20 20 20 20 54 41 59  0d 20 20 20 20 20 20 20  |     TAY.       |
000018c0  20 20 50 4c 41 0d 20 20  20 20 20 20 20 20 20 54  |  PLA.         T|
000018d0  41 58 0d 2e 6f 75 74 0d  20 20 20 20 20 20 20 20  |AX..out.        |
000018e0  20 50 4c 41 0d 20 20 20  20 20 20 20 20 20 52 54  | PLA.         RT|
000018f0  53 0d 2e 63 68 61 6e 67  65 0d 0d 46 69 67 75 72  |S..change..Figur|
00001900  65 20 31 33 2e 32 20 20  43 68 65 63 6b 69 6e 67  |e 13.2  Checking|
00001910  20 74 68 65 20 75 74 69  6c 69 74 79 20 61 63 74  | the utility act|
00001920  69 76 65 20 66 6c 61 67  2e 0d 2d 2d 2d 2d 2d 2d  |ive flag..------|
00001930  2d 2d 2d 2d 2d 20 20 2d  2d 2d 2d 2d 2d 2d 2d 2d  |-----  ---------|
00001940  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00001950  2d 2d 2d 2d 2d 2d 2d 2d  0d 0d 0d 20 20 41 73 20  |--------...  As |
00001960  77 65 6c 6c 20 61 73 20  61 20 75 74 69 6c 69 74  |well as a utilit|
00001970  79 20 61 63 74 69 76 65  20 66 6c 61 67 20 74 68  |y active flag th|
00001980  65 72 65 20 69 73 20 71  75 69 74 65 20 61 20 6c  |ere is quite a l|
00001990  6f 74 20 6f 66 20 6f 74  68 65 72 20 64 61 74 61  |ot of other data|
000019a0  0d 73 74 6f 72 65 64 20  69 6e 20 70 72 69 76 61  |.stored in priva|
000019b0  74 65 20 77 6f 72 6b 73  70 61 63 65 2e 20 54 68  |te workspace. Th|
000019c0  65 20 65 6e 74 69 72 65  20 63 61 74 61 6c 6f 67  |e entire catalog|
000019d0  75 65 20 6f 66 20 64 72  69 76 65 20 30 20 69 73  |ue of drive 0 is|
000019e0  20 73 74 6f 72 65 64 0d  61 6e 64 20 77 6f 72 6b  | stored.and work|
000019f0  73 70 61 63 65 20 69 73  20 6e 65 65 64 65 64 20  |space is needed |
00001a00  66 6f 72 20 61 20 63 6f  6d 6d 61 6e 64 20 6c 69  |for a command li|
00001a10  6e 65 20 69 6e 74 65 72  70 72 65 74 65 72 20 62  |ne interpreter b|
00001a20  75 66 66 65 72 20 61 6e  64 20 61 6e 0d 4f 73 77  |uffer and an.Osw|
00001a30  6f 72 64 20 70 61 72 61  6d 65 74 65 72 20 62 6c  |ord parameter bl|
00001a40  6f 63 6b 2e 20 54 68 65  20 70 72 6f 67 72 61 6d  |ock. The program|
00001a50  20 6e 65 65 64 73 20 74  6f 20 63 6c 61 69 6d 20  | needs to claim |
00001a60  74 77 6f 20 70 61 67 65  73 20 6f 66 0d 70 72 69  |two pages of.pri|
00001a70  76 61 74 65 20 77 6f 72  6b 73 70 61 63 65 20 74  |vate workspace t|
00001a80  6f 20 73 74 6f 72 65 20  61 6c 6c 20 74 68 65 73  |o store all thes|
00001a90  65 20 64 61 74 61 2e 0d  0d 20 20 46 69 67 75 72  |e data...  Figur|
00001aa0  65 20 31 33 2e 33 20 69  73 20 61 20 6d 65 6d 6f  |e 13.3 is a memo|
00001ab0  72 79 20 64 75 6d 70 20  6f 66 20 74 68 72 65 65  |ry dump of three|
00001ac0  20 70 61 72 74 73 20 6f  66 20 74 68 65 20 74 77  | parts of the tw|
00001ad0  6f 20 70 61 67 65 73 20  6f 66 0d 70 72 69 76 61  |o pages of.priva|
00001ae0  74 65 20 77 6f 72 6b 73  70 61 63 65 20 63 6c 61  |te workspace cla|
00001af0  69 6d 65 64 20 62 79 20  74 68 65 20 70 72 6f 67  |imed by the prog|
00001b00  72 61 6d 20 46 49 4c 45  53 2e 20 54 68 65 20 6d  |ram FILES. The m|
00001b10  65 6d 6f 72 79 20 64 75  6d 70 20 77 61 73 0d 6d  |emory dump was.m|
00001b20  61 64 65 20 77 68 69 6c  65 20 74 68 65 20 70 72  |ade while the pr|
00001b30  6f 67 72 61 6d 20 46 49  4c 45 53 20 77 61 73 20  |ogram FILES was |
00001b40  74 72 61 6e 73 66 65 72  69 6e 67 20 74 68 65 20  |transfering the |
00001b50  66 69 72 73 74 20 66 69  6c 65 20 66 72 6f 6d 20  |first file from |
00001b60  64 72 69 76 65 0d 30 20  74 6f 20 64 72 69 76 65  |drive.0 to drive|
00001b70  20 31 2e 20 49 74 20 73  68 6f 77 73 20 68 6f 77  | 1. It shows how|
00001b80  20 74 68 65 20 70 72 69  76 61 74 65 20 77 6f 72  | the private wor|
00001b90  6b 73 70 61 63 65 20 69  73 20 75 73 65 64 20 62  |kspace is used b|
00001ba0  79 20 74 68 65 0d 70 72  6f 67 72 61 6d 2e 20 49  |y the.program. I|
00001bb0  6e 20 74 68 65 20 63 6f  6d 70 75 74 65 72 20 69  |n the computer i|
00001bc0  6e 20 77 68 69 63 68 20  74 68 65 20 6d 65 6d 6f  |n which the memo|
00001bd0  72 79 20 64 75 6d 70 20  77 61 73 20 6d 61 64 65  |ry dump was made|
00001be0  2c 20 74 68 65 0d 70 72  69 76 61 74 65 20 77 6f  |, the.private wo|
00001bf0  72 6b 73 70 61 63 65 20  63 6c 61 69 6d 65 64 20  |rkspace claimed |
00001c00  62 79 20 46 49 4c 45 53  20 77 61 73 20 69 6e 20  |by FILES was in |
00001c10  70 61 67 65 73 20 26 31  37 20 61 6e 64 20 26 31  |pages &17 and &1|
00001c20  38 2e 20 49 74 20 63 6f  75 6c 64 0d 62 65 20 69  |8. It could.be i|
00001c30  6e 20 61 6e 79 20 74 77  6f 20 63 6f 6e 73 65 63  |n any two consec|
00001c40  75 74 69 76 65 20 70 61  67 65 73 20 64 65 70 65  |utive pages depe|
00001c50  6e 64 69 6e 67 20 6f 6e  20 74 68 65 20 77 6f 72  |nding on the wor|
00001c60  6b 73 70 61 63 65 20 63  6c 61 69 6d 65 64 20 62  |kspace claimed b|
00001c70  79 0d 6f 74 68 65 72 20  72 6f 6d 73 20 61 6e 64  |y.other roms and|
00001c80  20 74 68 65 20 70 72 69  6f 72 69 74 79 20 6f 66  | the priority of|
00001c90  20 74 68 65 20 70 72 6f  67 72 61 6d 20 46 49 4c  | the program FIL|
00001ca0  45 53 2e 0d 0d 0d 0d 0d  31 37 30 30 20 20 34 33  |ES......1700  43|
00001cb0  20 34 46 20 35 30 20 35  39 20 32 30 20 33 30 20  | 4F 50 59 20 30 |
00001cc0  32 30 20 33 31 20 20 43  4f 50 59 20 30 20 31 0d  |20 31  COPY 0 1.|
00001cd0  31 37 30 38 20 20 32 30  20 32 34 20 32 45 20 35  |1708  20 24 2E 5|
00001ce0  34 20 35 32 20 34 31 20  34 33 20 34 35 20 20 20  |4 52 41 43 45   |
00001cf0  24 2e 54 52 41 43 45 0d  31 37 31 30 20 20 32 30  |$.TRACE.1710  20|
00001d00  20 32 30 20 30 44 20 30  30 20 30 30 20 30 30 20  | 20 0D 00 00 00 |
00001d10  30 30 20 30 30 20 20 20  20 2e 2e 2e 2e 2e 2e 0d  |00 00    .......|
00001d20  0d 31 37 38 30 20 20 30  30 20 30 30 20 31 38 20  |.1780  00 00 18 |
00001d30  46 46 20 46 46 20 30 33  20 35 33 20 30 30 20 20  |FF FF 03 53 00  |
00001d40  2e 2e 2e 2e 2e 2e 53 2e  0d 31 37 38 38 20 20 30  |......S..1788  0|
00001d50  30 20 32 31 20 30 30 20  30 30 20 30 30 20 30 30  |0 21 00 00 00 00|
00001d60  20 30 30 20 30 30 20 20  2e 21 2e 2e 2e 2e 2e 2e  | 00 00  .!......|
00001d70  0d 0d 31 37 46 38 20 20  30 30 20 30 30 20 30 30  |..17F8  00 00 00|
00001d80  20 30 30 20 30 30 20 30  30 20 30 30 20 46 46 20  | 00 00 00 00 FF |
00001d90  20 2e 2e 2e 2e 2e 2e 2e  2e 0d 31 38 30 30 20 20  | .........1800  |
00001da0  35 33 20 35 37 20 35 32  20 32 30 20 35 33 20 34  |53 57 52 20 53 4|
00001db0  46 20 34 36 20 35 34 20  20 53 57 52 20 53 4f 46  |F 46 54  SWR SOF|
00001dc0  54 0d 31 38 30 38 20 20  35 34 20 35 32 20 34 31  |T.1808  54 52 41|
00001dd0  20 34 33 20 34 35 20 32  30 20 32 30 20 32 34 20  | 43 45 20 20 24 |
00001de0  20 54 52 41 43 45 20 20  24 0d 31 38 31 30 20 20  | TRACE  $.1810  |
00001df0  34 46 20 35 33 20 35 37  20 34 46 20 35 32 20 34  |4F 53 57 4F 52 4|
00001e00  34 20 32 30 20 32 34 20  20 4f 53 57 4f 52 44 20  |4 20 24  OSWORD |
00001e10  24 0d 31 38 31 38 20 20  34 46 20 35 33 20 34 32  |$.1818  4F 53 42|
00001e20  20 35 39 20 35 34 20 34  35 20 32 30 20 32 34 20  | 59 54 45 20 24 |
00001e30  20 4f 53 42 59 54 45 20  24 0d 31 38 32 30 20 20  | OSBYTE $.1820  |
00001e40  34 46 20 35 33 20 35 37  20 34 34 20 34 35 20 34  |4F 53 57 44 45 4|
00001e50  44 20 34 46 20 32 34 20  20 4f 53 57 44 45 4d 4f  |D 4F 24  OSWDEMO|
00001e60  24 0d 0d 46 69 67 75 72  65 20 31 33 2e 33 20 20  |$..Figure 13.3  |
00001e70  50 61 72 74 73 20 6f 66  20 61 20 6d 65 6d 6f 72  |Parts of a memor|
00001e80  79 20 64 75 6d 70 20 6f  66 20 70 72 69 76 61 74  |y dump of privat|
00001e90  65 20 77 6f 72 6b 73 70  61 63 65 2e 0d 2d 2d 2d  |e workspace..---|
00001ea0  2d 2d 2d 2d 2d 2d 2d 2d  20 20 2d 2d 2d 2d 2d 2d  |--------  ------|
00001eb0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001ed0  2d 2d 2d 2d 2d 2d 0d 0d  0d 0d 20 20 54 68 65 20  |------....  The |
00001ee0  64 72 69 76 65 20 30 20  63 61 74 61 6c 6f 67 75  |drive 0 catalogu|
00001ef0  65 20 69 73 20 72 65 61  64 20 75 73 69 6e 67 20  |e is read using |
00001f00  4f 73 77 6f 72 64 20 26  37 46 20 61 6e 64 20 73  |Osword &7F and s|
00001f10  74 6f 72 65 64 20 69 6e  20 74 68 65 0d 73 65 63  |tored in the.sec|
00001f20  6f 6e 64 20 70 61 67 65  20 6f 66 20 74 68 65 20  |ond page of the |
00001f30  70 72 69 76 61 74 65 20  77 6f 72 6b 73 70 61 63  |private workspac|
00001f40  65 20 28 70 61 67 65 20  26 31 38 20 69 6e 20 74  |e (page &18 in t|
00001f50  68 69 73 20 63 61 73 65  29 2e 20 54 68 65 0d 4f  |his case). The.O|
00001f60  73 77 6f 72 64 20 70 61  72 61 6d 65 74 65 72 20  |sword parameter |
00001f70  62 6c 6f 63 6b 20 73 74  61 72 74 73 20 61 74 20  |block starts at |
00001f80  26 31 37 38 30 2e 20 54  68 65 20 63 6f 6e 74 65  |&1780. The conte|
00001f90  6e 74 73 20 6f 66 20 74  68 69 73 20 62 75 66 66  |nts of this buff|
00001fa0  65 72 0d 28 66 69 67 75  72 65 20 31 33 2e 33 29  |er.(figure 13.3)|
00001fb0  20 69 6e 64 69 63 61 74  65 20 61 20 73 75 63 63  | indicate a succ|
00001fc0  65 73 73 66 75 6c 20 72  65 61 64 20 64 61 74 61  |essful read data|
00001fd0  20 6d 75 6c 74 69 20 73  65 63 74 6f 72 20 66 72  | multi sector fr|
00001fe0  6f 6d 20 64 72 69 76 65  0d 30 2c 20 74 72 61 63  |om drive.0, trac|
00001ff0  6b 20 30 2c 20 73 65 63  74 6f 72 20 30 20 77 69  |k 0, sector 0 wi|
00002000  74 68 20 64 61 74 61 20  73 74 6f 72 65 64 20 61  |th data stored a|
00002010  74 20 26 46 46 46 46 31  38 30 30 2e 20 0d 0d 20  |t &FFFF1800. .. |
00002020  20 54 68 65 20 63 6f 6d  6d 61 6e 64 20 6c 69 6e  | The command lin|
00002030  65 20 69 6e 74 65 72 70  72 65 74 65 72 20 62 75  |e interpreter bu|
00002040  66 66 65 72 20 73 74 61  72 74 73 20 61 74 20 26  |ffer starts at &|
00002050  31 37 30 30 2e 20 54 68  65 20 70 72 6f 67 72 61  |1700. The progra|
00002060  6d 0d 74 72 61 6e 73 66  65 72 73 20 61 6c 6c 20  |m.transfers all |
00002070  74 68 65 20 66 69 6c 65  73 20 62 79 20 63 6f 70  |the files by cop|
00002080  79 69 6e 67 20 65 61 63  68 20 66 69 6c 65 6e 61  |ying each filena|
00002090  6d 65 20 66 72 6f 6d 20  74 68 65 20 64 72 69 76  |me from the driv|
000020a0  65 20 30 0d 63 61 74 61  6c 6f 67 75 65 20 28 69  |e 0.catalogue (i|
000020b0  6e 20 70 61 67 65 20 26  31 38 29 20 69 6e 74 6f  |n page &18) into|
000020c0  20 74 68 69 73 20 62 75  66 66 65 72 20 61 6e 64  | this buffer and|
000020d0  20 74 68 65 6e 20 63 61  6c 6c 69 6e 67 20 74 68  | then calling th|
000020e0  65 20 63 6f 6d 6d 61 6e  64 0d 6c 69 6e 65 20 69  |e command.line i|
000020f0  6e 74 65 72 70 72 65 74  65 72 2e 0d 0d 20 20 54  |nterpreter...  T|
00002100  68 65 20 75 74 69 6c 69  74 79 20 61 63 74 69 76  |he utility activ|
00002110  65 20 66 6c 61 67 20 69  73 20 61 74 20 26 31 37  |e flag is at &17|
00002120  46 46 2e 20 54 68 65 20  63 6f 6e 74 65 6e 74 73  |FF. The contents|
00002130  20 6f 66 20 74 68 69 73  20 66 6c 61 67 20 69 6e  | of this flag in|
00002140  0d 66 69 67 75 72 65 20  31 33 2e 32 20 69 6e 64  |.figure 13.2 ind|
00002150  69 63 61 74 65 20 74 68  61 74 20 74 68 65 20 75  |icate that the u|
00002160  74 69 6c 69 74 79 20 77  61 73 20 61 63 74 69 76  |tility was activ|
00002170  65 20 77 68 65 6e 20 74  68 65 20 6d 65 6d 6f 72  |e when the memor|
00002180  79 20 64 75 6d 70 0d 77  61 73 20 6d 61 64 65 2e  |y dump.was made.|
00002190  0d 0d 20 20 54 68 65 72  65 20 61 72 65 20 61 20  |..  There are a |
000021a0  6e 75 6d 62 65 72 20 6f  66 20 70 6f 69 6e 74 65  |number of pointe|
000021b0  72 73 20 73 65 74 20 75  70 20 69 6e 20 7a 65 72  |rs set up in zer|
000021c0  6f 20 70 61 67 65 20 74  6f 20 73 74 6f 72 65 20  |o page to store |
000021d0  74 68 65 0d 61 64 64 72  65 73 73 65 73 20 6f 66  |the.addresses of|
000021e0  20 74 68 65 20 76 61 72  69 6f 75 73 20 6c 6f 63  | the various loc|
000021f0  61 74 69 6f 6e 73 20 69  6e 64 69 72 65 63 74 6c  |ations indirectl|
00002200  79 20 61 64 64 72 65 73  73 65 64 20 69 6e 20 74  |y addressed in t|
00002210  68 65 20 70 72 69 76 61  74 65 0d 77 6f 72 6b 73  |he private.works|
00002220  70 61 63 65 2e 20 54 68  65 20 61 62 73 6f 6c 75  |pace. The absolu|
00002230  74 65 20 61 64 64 72 65  73 73 65 73 20 77 69 6c  |te addresses wil|
00002240  6c 20 64 65 70 65 6e 64  20 6f 6e 20 74 68 65 20  |l depend on the |
00002250  6f 74 68 65 72 20 72 6f  6d 73 20 69 6e 20 74 68  |other roms in th|
00002260  65 0d 63 6f 6d 70 75 74  65 72 20 62 75 74 20 69  |e.computer but i|
00002270  6e 20 74 68 65 20 63 6f  6d 70 75 74 65 72 20 75  |n the computer u|
00002280  73 65 64 20 74 6f 20 67  65 6e 65 72 61 74 65 20  |sed to generate |
00002290  66 69 67 75 72 65 20 31  33 2e 33 20 74 68 65 79  |figure 13.3 they|
000022a0  20 68 61 64 20 74 68 65  0d 76 61 6c 75 65 73 20  | had the.values |
000022b0  73 68 6f 77 6e 20 69 6e  20 66 69 67 75 72 65 20  |shown in figure |
000022c0  31 33 2e 34 2e 0d 0d 0d  0d 0d 4e 61 6d 65 20 20  |13.4......Name  |
000022d0  20 20 20 20 20 68 69 67  68 20 62 79 74 65 20 6c  |     high byte l|
000022e0  6f 77 20 62 79 74 65 20  20 46 75 6e 63 74 69 6f  |ow byte  Functio|
000022f0  6e 0d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |n.--------------|
00002300  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00002330  2d 2d 2d 2d 2d 2d 0d 64  69 72 65 63 74 6f 72 79  |------.directory|
00002340  20 20 26 31 37 20 20 20  20 20 20 20 26 30 39 20  |  &17       &09 |
00002350  20 20 20 20 20 54 68 65  20 64 69 72 65 63 74 6f  |     The directo|
00002360  72 79 20 6f 66 20 74 68  65 20 63 75 72 72 65 6e  |ry of the curren|
00002370  74 20 66 69 6c 65 0d 70  72 69 76 61 74 65 20 20  |t file.private  |
00002380  20 20 26 31 37 20 20 20  20 20 20 20 26 30 30 20  |  &17       &00 |
00002390  20 20 20 20 20 54 68 65  20 73 74 61 72 74 20 6f  |     The start o|
000023a0  66 20 70 72 69 76 61 74  65 20 77 6f 72 6b 73 70  |f private worksp|
000023b0  61 63 65 0d 63 61 74 62  75 66 66 20 20 20 20 26  |ace.catbuff    &|
000023c0  31 38 20 20 20 20 20 20  20 26 30 38 20 20 20 20  |18       &08    |
000023d0  20 20 54 68 65 20 61 64  64 72 65 73 73 20 6f 66  |  The address of|
000023e0  20 74 68 65 20 66 69 72  73 74 20 66 69 6c 65 6e  | the first filen|
000023f0  61 6d 65 0d 63 6c 69 62  75 66 66 20 20 20 20 26  |ame.clibuff    &|
00002400  31 37 20 20 20 20 20 20  20 26 30 42 20 20 20 20  |17       &0B    |
00002410  20 20 54 68 65 20 66 69  72 73 74 20 62 79 74 65  |  The first byte|
00002420  20 6f 66 20 74 68 65 20  63 75 72 72 65 6e 74 20  | of the current |
00002430  66 69 6c 65 6e 61 6d 65  0d 62 6c 6f 63 6b 20 20  |filename.block  |
00002440  20 20 20 20 26 31 37 20  20 20 20 20 20 20 26 38  |    &17       &8|
00002450  30 20 20 20 20 20 20 54  68 65 20 4f 73 77 6f 72  |0      The Oswor|
00002460  64 20 70 61 72 61 6d 65  74 65 72 20 62 6c 6f 63  |d parameter bloc|
00002470  6b 0d 0d 46 69 67 75 72  65 20 31 33 2e 34 20 20  |k..Figure 13.4  |
00002480  54 68 65 20 7a 65 72 6f  20 70 61 67 65 20 70 6f  |The zero page po|
00002490  69 6e 74 65 72 73 2e 0d  2d 2d 2d 2d 2d 2d 2d 2d  |inters..--------|
000024a0  2d 2d 2d 20 20 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |---  -----------|
000024b0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 0d 0d 0d 0d  |------------....|
000024c0  20 20 54 68 65 20 53 57  52 20 69 6e 74 65 72 70  |  The SWR interp|
000024d0  72 65 74 65 72 20 69 6e  74 65 72 63 65 70 74 73  |reter intercepts|
000024e0  20 73 65 72 76 69 63 65  20 63 61 6c 6c 20 32 20  | service call 2 |
000024f0  74 6f 20 63 6c 61 69 6d  20 74 77 6f 20 70 61 67  |to claim two pag|
00002500  65 73 20 6f 66 0d 70 72  69 76 61 74 65 20 77 6f  |es of.private wo|
00002510  72 6b 73 70 61 63 65 20  61 6e 64 20 73 65 74 20  |rkspace and set |
00002520  75 70 20 74 68 65 20 75  74 69 6c 69 74 79 20 61  |up the utility a|
00002530  63 74 69 76 65 20 66 6c  61 67 20 74 6f 20 69 6e  |ctive flag to in|
00002540  64 69 63 61 74 65 20 74  68 61 74 0d 74 68 65 20  |dicate that.the |
00002550  75 74 69 6c 69 74 79 20  69 73 20 6e 6f 74 20 79  |utility is not y|
00002560  65 74 20 61 63 74 69 76  65 20 28 6c 69 6e 65 73  |et active (lines|
00002570  20 34 32 30 2d 35 37 30  29 2e 0d 0d 20 20 54 68  | 420-570)...  Th|
00002580  65 20 6f 6e 65 2d 63 6f  6d 6d 61 6e 64 20 69 6e  |e one-command in|
00002590  74 65 72 70 72 65 74 65  72 20 28 6c 69 6e 65 73  |terpreter (lines|
000025a0  20 31 30 35 30 2d 31 32  37 30 29 20 69 73 20 75  | 1050-1270) is u|
000025b0  73 65 64 20 74 6f 20 72  65 63 6f 67 6e 69 73 65  |sed to recognise|
000025c0  0d 74 68 65 20 63 6f 6d  6d 61 6e 64 20 2a 46 49  |.the command *FI|
000025d0  4c 45 53 20 61 6e 64 20  63 6f 6e 74 72 6f 6c 20  |LES and control |
000025e0  69 73 20 70 61 73 73 65  64 20 74 6f 20 74 68 65  |is passed to the|
000025f0  20 6c 61 62 65 6c 20 22  2e 66 6f 75 6e 64 22 20  | label ".found" |
00002600  28 6c 69 6e 65 0d 31 32  38 30 29 2e 20 54 68 65  |(line.1280). The|
00002610  20 70 72 6f 67 72 61 6d  20 69 73 20 64 65 73 69  | program is desi|
00002620  67 6e 65 64 20 74 6f 20  74 72 61 70 20 65 72 72  |gned to trap err|
00002630  6f 72 73 20 67 65 6e 65  72 61 74 65 64 20 69 6e  |ors generated in|
00002640  20 61 6e 6f 74 68 65 72  20 72 6f 6d 0d 61 6e 64  | another rom.and|
00002650  20 66 6f 72 20 74 68 69  73 20 72 65 61 73 6f 6e  | for this reason|
00002660  20 74 68 65 20 73 74 61  63 6b 20 69 73 20 62 61  | the stack is ba|
00002670  6c 61 6e 63 65 64 20 62  65 66 6f 72 65 20 64 6f  |lanced before do|
00002680  69 6e 67 20 61 6e 79 74  68 69 6e 67 20 65 6c 73  |ing anything els|
00002690  65 0d 28 6c 69 6e 65 73  20 31 32 39 30 2d 31 33  |e.(lines 1290-13|
000026a0  31 30 29 2e 20 45 72 72  6f 72 73 20 67 65 6e 65  |10). Errors gene|
000026b0  72 61 74 65 64 20 6f 75  74 73 69 64 65 20 79 6f  |rated outside yo|
000026c0  75 72 20 63 6f 6e 74 72  6f 6c 20 63 61 6e 20 70  |ur control can p|
000026d0  6c 61 79 0d 68 61 76 6f  63 20 77 69 74 68 20 74  |lay.havoc with t|
000026e0  68 65 20 73 74 61 63 6b  20 61 6e 64 20 62 61 6c  |he stack and bal|
000026f0  61 6e 63 69 6e 67 20 69  74 20 61 74 20 74 68 69  |ancing it at thi|
00002700  73 20 73 74 61 67 65 20  6d 69 6e 69 6d 69 73 65  |s stage minimise|
00002710  73 20 74 68 65 0d 70 72  6f 62 6c 65 6d 73 20 74  |s the.problems t|
00002720  68 61 74 20 63 61 6e 20  62 65 20 63 72 65 61 74  |hat can be creat|
00002730  65 64 2e 20 54 68 65 20  70 72 6f 67 72 61 6d 20  |ed. The program |
00002740  63 68 65 63 6b 73 20 74  68 61 74 20 74 68 65 20  |checks that the |
00002750  44 46 53 20 69 73 0d 61  63 74 69 76 65 20 28 6c  |DFS is.active (l|
00002760  69 6e 65 73 20 31 33 32  30 2d 31 33 37 30 29 20  |ines 1320-1370) |
00002770  61 6e 64 20 69 66 20 61  6c 6c 20 69 73 20 77 65  |and if all is we|
00002780  6c 6c 20 70 72 69 6e 74  73 20 61 20 22 43 6f 70  |ll prints a "Cop|
00002790  79 20 61 6c 6c 20 66 69  6c 65 73 20 2d 0d 47 6f  |y all files -.Go|
000027a0  3f 22 20 6d 65 73 73 61  67 65 20 28 6c 69 6e 65  |?" message (line|
000027b0  73 20 31 35 30 30 2d 31  35 32 30 29 2e 20 49 66  |s 1500-1520). If|
000027c0  20 74 68 65 20 75 73 65  72 20 74 79 70 65 73 20  | the user types |
000027d0  61 20 22 59 22 20 63 6f  6e 74 6f 6c 20 69 73 0d  |a "Y" contol is.|
000027e0  70 61 73 73 65 64 20 74  6f 20 74 68 65 20 6c 61  |passed to the la|
000027f0  62 65 6c 20 22 2e 79 65  73 22 20 28 6c 69 6e 65  |bel ".yes" (line|
00002800  20 31 36 33 30 29 2e 0d  0d 20 20 54 68 65 20 7a  | 1630)...  The z|
00002810  65 72 6f 20 70 61 67 65  20 70 6f 69 6e 74 65 72  |ero page pointer|
00002820  73 20 28 66 69 67 75 72  65 20 31 33 2e 34 29 20  |s (figure 13.4) |
00002830  61 72 65 20 73 65 74 20  75 70 20 28 6c 69 6e 65  |are set up (line|
00002840  73 20 31 36 34 30 2d 31  38 31 30 29 0d 61 6e 64  |s 1640-1810).and|
00002850  20 74 68 65 20 75 74 69  6c 69 74 79 20 61 63 74  | the utility act|
00002860  69 76 65 20 66 6c 61 67  20 69 73 20 73 65 74 20  |ive flag is set |
00002870  74 6f 20 69 6e 64 69 63  61 74 65 20 74 68 61 74  |to indicate that|
00002880  20 65 72 72 6f 72 73 20  26 42 45 20 61 6e 64 20  | errors &BE and |
00002890  26 43 36 0d 73 68 6f 75  6c 64 20 62 65 20 74 72  |&C6.should be tr|
000028a0  61 70 70 65 64 20 28 6c  69 6e 65 73 20 31 38 32  |apped (lines 182|
000028b0  30 2d 31 38 34 30 29 2e  20 54 68 65 20 4f 73 77  |0-1840). The Osw|
000028c0  6f 72 64 20 70 61 72 61  6d 65 74 65 72 20 62 6c  |ord parameter bl|
000028d0  6f 63 6b 0d 63 6f 6e 74  65 6e 74 73 20 61 72 65  |ock.contents are|
000028e0  20 63 6f 70 69 65 64 20  69 6e 74 6f 20 74 68 65  | copied into the|
000028f0  20 4f 73 77 6f 72 64 20  62 75 66 66 65 72 20 28  | Osword buffer (|
00002900  6c 69 6e 65 73 20 31 38  35 30 2d 31 39 31 30 29  |lines 1850-1910)|
00002910  20 61 6e 64 20 74 68 65  0d 6d 6f 73 74 20 73 69  | and the.most si|
00002920  67 6e 69 66 69 63 61 6e  74 20 62 79 74 65 20 6f  |gnificant byte o|
00002930  66 20 74 68 65 20 61 64  64 72 65 73 73 20 6f 66  |f the address of|
00002940  20 74 68 65 20 63 61 74  61 6c 6f 67 75 65 20 62  | the catalogue b|
00002950  75 66 66 65 72 20 69 73  20 61 6c 73 6f 0d 73 74  |uffer is also.st|
00002960  6f 72 65 64 20 69 6e 20  74 68 65 20 4f 73 77 6f  |ored in the Oswo|
00002970  72 64 20 62 75 66 66 65  72 20 28 6c 69 6e 65 73  |rd buffer (lines|
00002980  20 31 39 32 30 2d 31 39  34 30 29 2e 20 54 68 65  | 1920-1940). The|
00002990  20 66 69 72 73 74 20 70  61 72 74 20 6f 66 20 74  | first part of t|
000029a0  68 65 0d 2a 43 4f 50 59  20 63 6f 6d 6d 61 6e 64  |he.*COPY command|
000029b0  20 69 73 20 74 72 61 6e  73 66 65 72 65 64 20 69  | is transfered i|
000029c0  6e 74 6f 20 74 68 65 20  63 6f 6d 6d 61 6e 64 20  |nto the command |
000029d0  6c 69 6e 65 20 69 6e 74  65 72 70 72 65 74 65 72  |line interpreter|
000029e0  20 62 75 66 66 65 72 0d  28 6c 69 6e 65 73 20 31  | buffer.(lines 1|
000029f0  39 35 30 2d 32 30 31 30  29 20 61 6e 64 20 74 68  |950-2010) and th|
00002a00  65 20 6c 65 61 73 74 20  73 69 67 6e 69 66 69 63  |e least signific|
00002a10  61 6e 74 20 62 79 74 65  20 6f 66 20 74 68 65 20  |ant byte of the |
00002a20  61 64 64 72 65 73 73 20  6f 66 20 74 68 65 0d 66  |address of the.f|
00002a30  69 72 73 74 20 66 69 6c  65 20 69 6e 20 74 68 65  |irst file in the|
00002a40  20 64 72 69 76 65 20 30  20 63 61 74 61 6c 6f 67  | drive 0 catalog|
00002a50  75 65 20 69 73 20 73 74  6f 72 65 64 20 69 6e 20  |ue is stored in |
00002a60  74 68 65 20 7a 65 72 6f  20 70 61 67 65 20 70 6f  |the zero page po|
00002a70  69 6e 74 65 72 0d 74 6f  20 74 68 65 20 63 6f 6d  |inter.to the com|
00002a80  6d 61 6e 64 20 6c 69 6e  65 20 69 6e 74 65 72 70  |mand line interp|
00002a90  72 65 74 65 72 20 62 75  66 66 65 72 20 28 6c 69  |reter buffer (li|
00002aa0  6e 65 20 32 30 32 30 29  2e 20 54 68 65 20 64 72  |ne 2020). The dr|
00002ab0  69 76 65 20 30 0d 63 61  74 61 6c 6f 67 75 65 20  |ive 0.catalogue |
00002ac0  69 73 20 72 65 61 64 20  61 6e 64 20 73 74 6f 72  |is read and stor|
00002ad0  65 64 20 69 6e 20 74 68  65 20 73 65 63 6f 6e 64  |ed in the second|
00002ae0  20 70 61 67 65 20 6f 66  20 74 68 65 20 70 72 69  | page of the pri|
00002af0  76 61 74 65 0d 77 6f 72  6b 73 70 61 63 65 20 28  |vate.workspace (|
00002b00  6c 69 6e 65 73 20 32 30  33 30 2d 32 30 36 30 29  |lines 2030-2060)|
00002b10  2e 0d 0d 20 20 54 68 65  20 66 69 6c 65 73 20 61  |...  The files a|
00002b20  72 65 20 74 72 61 6e 73  66 65 72 65 64 2c 20 6f  |re transfered, o|
00002b30  6e 65 20 61 74 20 61 20  74 69 6d 65 2c 20 66 72  |ne at a time, fr|
00002b40  6f 6d 20 64 72 69 76 65  20 30 20 74 6f 20 64 72  |om drive 0 to dr|
00002b50  69 76 65 20 31 2e 0d 28  6c 69 6e 65 73 20 32 30  |ive 1..(lines 20|
00002b60  37 30 2d 32 33 32 30 29  2e 20 55 70 20 74 6f 20  |70-2320). Up to |
00002b70  33 31 20 66 69 6c 65 73  20 77 69 6c 6c 20 62 65  |31 files will be|
00002b80  20 63 6f 70 69 65 64 20  62 75 74 20 69 66 20 65  | copied but if e|
00002b90  69 74 68 65 72 20 74 68  65 20 63 61 74 0d 66 75  |ither the cat.fu|
00002ba0  6c 6c 20 6f 72 20 64 69  73 63 20 66 75 6c 6c 20  |ll or disc full |
00002bb0  65 72 72 6f 72 73 20 69  73 20 67 65 6e 65 72 61  |errors is genera|
00002bc0  74 65 64 20 62 79 20 74  68 65 20 44 46 53 20 74  |ted by the DFS t|
00002bd0  68 65 20 69 6e 74 65 72  70 72 65 74 65 72 20 77  |he interpreter w|
00002be0  69 6c 6c 0d 74 72 61 70  20 74 68 65 20 65 72 72  |ill.trap the err|
00002bf0  6f 72 20 28 6c 69 6e 65  73 20 36 31 30 2d 38 30  |or (lines 610-80|
00002c00  30 29 20 61 6e 64 20 70  61 73 73 20 63 6f 6e 74  |0) and pass cont|
00002c10  72 6f 6c 20 74 6f 20 74  68 65 20 6c 61 62 65 6c  |rol to the label|
00002c20  20 22 2e 63 68 61 6e 67  65 22 0d 28 6c 69 6e 65  | ".change".(line|
00002c30  20 38 39 30 29 2e 20 54  68 65 20 73 74 61 63 6b  | 890). The stack|
00002c40  20 69 73 20 70 75 6c 6c  65 64 20 73 69 78 20 74  | is pulled six t|
00002c50  69 6d 65 73 20 74 6f 20  62 61 6c 61 6e 63 65 20  |imes to balance |
00002c60  69 74 2e 20 54 68 65 20  73 74 61 63 6b 20 68 61  |it. The stack ha|
00002c70  73 0d 74 68 65 20 72 65  67 69 73 74 65 72 73 20  |s.the registers |
00002c80  66 72 6f 6d 20 74 68 65  20 53 57 52 20 69 6e 74  |from the SWR int|
00002c90  65 72 70 72 65 74 65 72  20 61 73 20 77 65 6c 6c  |erpreter as well|
00002ca0  20 61 73 20 74 68 65 20  73 74 61 74 75 73 20 72  | as the status r|
00002cb0  65 67 69 73 74 65 72 0d  61 6e 64 20 72 65 74 75  |egister.and retu|
00002cc0  72 6e 20 61 64 64 72 65  73 73 20 70 75 73 68 65  |rn address pushe|
00002cd0  64 20 6f 6e 20 77 68 65  6e 20 74 68 65 20 44 46  |d on when the DF|
00002ce0  53 20 42 52 4b 20 77 61  73 20 65 78 65 63 75 74  |S BRK was execut|
00002cf0  65 64 2e 20 54 68 65 73  65 20 63 61 6e 0d 61 6c  |ed. These can.al|
00002d00  6c 20 62 65 20 64 69 73  63 61 72 64 65 64 2e 20  |l be discarded. |
00002d10  54 68 65 20 70 72 6f 67  72 61 6d 20 70 72 6f 6d  |The program prom|
00002d20  70 74 73 20 74 68 65 20  75 73 65 72 20 74 6f 20  |pts the user to |
00002d30  63 68 61 6e 67 65 20 74  68 65 20 64 69 73 63 20  |change the disc |
00002d40  69 6e 0d 64 72 69 76 65  20 31 20 28 6c 69 6e 65  |in.drive 1 (line|
00002d50  73 20 39 36 30 2d 31 30  33 30 29 20 61 6e 64 20  |s 960-1030) and |
00002d60  74 68 65 6e 20 72 65 74  75 72 6e 73 20 63 6f 6e  |then returns con|
00002d70  74 72 6f 6c 20 74 6f 20  74 68 65 20 6c 6f 6f 70  |trol to the loop|
00002d80  0d 74 72 61 6e 73 66 65  72 69 6e 67 20 74 68 65  |.transfering the|
00002d90  20 66 69 6c 65 73 20 28  6c 69 6e 65 20 31 30 34  | files (line 104|
00002da0  30 20 61 6e 64 20 6c 69  6e 65 20 32 32 37 30 29  |0 and line 2270)|
00002db0  2e 0d 0d 20 20 57 68 65  6e 20 61 6c 6c 20 74 68  |...  When all th|
00002dc0  65 20 66 69 6c 65 73 20  68 61 76 65 20 62 65 65  |e files have bee|
00002dd0  6e 20 74 72 61 6e 73 66  65 72 65 64 20 66 72 6f  |n transfered fro|
00002de0  6d 20 64 72 69 76 65 20  30 20 74 6f 20 64 72 69  |m drive 0 to dri|
00002df0  76 65 20 31 2c 20 74 68  65 0d 70 72 6f 67 72 61  |ve 1, the.progra|
00002e00  6d 20 63 6c 65 61 72 73  20 74 68 65 20 75 74 69  |m clears the uti|
00002e10  6c 69 74 79 20 61 63 74  69 76 65 20 66 6c 61 67  |lity active flag|
00002e20  20 28 6c 69 6e 65 73 20  32 33 34 30 2d 32 33 36  | (lines 2340-236|
00002e30  30 29 2c 20 66 6c 75 73  68 65 73 20 61 6c 6c 0d  |0), flushes all.|
00002e40  74 68 65 20 62 75 66 66  65 72 73 20 28 6c 69 6e  |the buffers (lin|
00002e50  65 73 20 32 33 38 30 2d  32 34 30 30 29 2c 20 66  |es 2380-2400), f|
00002e60  69 6e 64 73 20 42 41 53  49 43 20 28 6c 69 6e 65  |inds BASIC (line|
00002e70  73 20 32 34 31 30 2d 32  34 34 30 29 20 61 6e 64  |s 2410-2440) and|
00002e80  0d 65 6e 74 65 72 73 20  42 41 53 49 43 20 28 6c  |.enters BASIC (l|
00002e90  69 6e 65 73 20 32 34 35  30 2d 32 34 36 30 29 20  |ines 2450-2460) |
00002ea0  77 68 69 63 68 20 63 6c  65 61 72 73 20 61 6c 6c  |which clears all|
00002eb0  20 65 72 72 6f 72 20 63  6f 6e 64 69 74 69 6f 6e  | error condition|
00002ec0  73 2e 0d 0d 20 20 54 6f  20 6d 6f 64 69 66 79 20  |s...  To modify |
00002ed0  46 49 4c 45 53 20 74 6f  20 70 61 73 73 20 63 6f  |FILES to pass co|
00002ee0  6e 74 72 6f 6c 20 62 61  63 6b 20 74 6f 20 74 68  |ntrol back to th|
00002ef0  65 20 6e 6f 72 6d 61 6c  20 65 72 72 6f 72 20 68  |e normal error h|
00002f00  61 6e 64 6c 69 6e 67 0d  72 6f 75 74 69 6e 65 20  |andling.routine |
00002f10  64 65 6c 65 74 65 20 6c  69 6e 65 73 20 39 33 30  |delete lines 930|
00002f20  2d 39 35 30 20 61 6e 64  20 32 34 31 30 2d 32 34  |-950 and 2410-24|
00002f30  36 30 2e 20 54 79 70 65  20 74 68 65 20 6e 65 77  |60. Type the new|
00002f40  20 6c 69 6e 65 20 32 34  31 30 2e 0d 0d 20 20 32  | line 2410...  2|
00002f50  34 31 30 20 4c 44 41 20  23 30 3a 52 54 53 0d 0d  |410 LDA #0:RTS..|
00002f60  54 68 65 20 70 72 6f 67  72 61 6d 20 77 69 6c 6c  |The program will|
00002f70  20 70 65 72 66 6f 72 6d  20 74 68 65 20 73 61 6d  | perform the sam|
00002f80  65 20 66 75 6e 63 74 69  6f 6e 20 62 75 74 20 72  |e function but r|
00002f90  65 70 6f 72 74 20 74 68  65 20 44 69 73 63 20 66  |eport the Disc f|
00002fa0  75 6c 6c 20 6f 72 0d 43  61 74 20 66 75 6c 6c 20  |ull or.Cat full |
00002fb0  65 72 72 6f 72 20 6d 65  73 73 61 67 65 20 61 74  |error message at|
00002fc0  20 74 68 65 20 65 6e 64  20 6f 66 20 74 68 65 20  | the end of the |
00002fd0  66 69 6c 65 20 74 72 61  6e 73 66 65 72 73 2e 0d  |file transfers..|
00002fe0  0d 20 20 59 6f 75 20 63  6f 75 6c 64 20 61 6c 73  |.  You could als|
00002ff0  6f 20 6d 6f 64 69 66 79  20 74 68 65 20 70 72 6f  |o modify the pro|
00003000  67 72 61 6d 20 74 6f 20  75 73 65 20 70 61 67 65  |gram to use page|
00003010  73 20 26 30 39 20 61 6e  64 20 26 30 41 20 69 6e  |s &09 and &0A in|
00003020  73 74 65 61 64 0d 6f 66  20 70 72 69 76 61 74 65  |stead.of private|
00003030  20 77 6f 72 6b 73 70 61  63 65 2e 20 54 68 69 73  | workspace. This|
00003040  20 77 6f 75 6c 64 20 6d  61 6b 65 20 74 68 65 20  | would make the |
00003050  70 72 6f 67 72 61 6d 20  73 68 6f 72 74 65 72 20  |program shorter |
00003060  61 6e 64 20 6e 6f 74 0d  72 61 69 73 65 20 4f 73  |and not.raise Os|
00003070  68 77 6d 20 61 6e 64 20  50 41 47 45 20 62 75 74  |hwm and PAGE but|
00003080  2c 20 69 66 20 79 6f 75  20 75 73 65 20 74 68 65  |, if you use the|
00003090  73 65 20 70 61 67 65 73  20 69 6e 73 74 65 61 64  |se pages instead|
000030a0  20 6f 66 20 70 72 69 76  61 74 65 0d 77 6f 72 6b  | of private.work|
000030b0  73 70 61 63 65 2c 20 79  6f 75 20 63 61 6e 20 6e  |space, you can n|
000030c0  6f 74 20 62 65 20 73 75  72 65 20 74 68 61 74 20  |ot be sure that |
000030d0  79 6f 75 72 20 77 6f 72  6b 73 70 61 63 65 20 77  |your workspace w|
000030e0  69 6c 6c 20 72 65 6d 61  69 6e 0d 75 6e 63 6f 72  |ill remain.uncor|
000030f0  72 75 70 74 65 64 20 28  73 65 65 20 4d 6f 64 75  |rupted (see Modu|
00003100  6c 65 20 31 31 29 2e 0d  0d 0d 0d 0d 20 20 20 31  |le 11)......   1|
00003110  30 20 52 45 4d 3a 20 46  49 4c 45 53 0d 20 20 20  |0 REM: FILES.   |
00003120  32 30 20 4d 4f 44 45 37  0d 20 20 20 33 30 20 48  |20 MODE7.   30 H|
00003130  49 4d 45 4d 3d 26 33 43  30 30 0d 20 20 20 34 30  |IMEM=&3C00.   40|
00003140  20 44 49 4d 20 73 61 76  65 20 35 30 0d 20 20 20  | DIM save 50.   |
00003150  35 30 20 64 69 66 66 3d  26 38 30 30 30 2d 48 49  |50 diff=&8000-HI|
00003160  4d 45 4d 0d 20 20 20 36  30 20 64 69 72 65 63 74  |MEM.   60 direct|
00003170  6f 72 79 3d 26 37 30 0d  20 20 20 37 30 20 70 72  |ory=&70.   70 pr|
00003180  69 76 61 74 65 3d 64 69  72 65 63 74 6f 72 79 2b  |ivate=directory+|
00003190  32 0d 20 20 20 38 30 20  63 61 74 62 75 66 66 3d  |2.   80 catbuff=|
000031a0  64 69 72 65 63 74 6f 72  79 2b 34 0d 20 20 20 39  |directory+4.   9|
000031b0  30 20 63 6c 69 62 75 66  66 3d 64 69 72 65 63 74  |0 clibuff=direct|
000031c0  6f 72 79 2b 36 0d 20 20  31 30 30 20 62 6c 6f 63  |ory+6.  100 bloc|
000031d0  6b 3d 64 69 72 65 63 74  6f 72 79 2b 38 0d 20 20  |k=directory+8.  |
000031e0  31 31 30 20 61 64 64 72  65 73 73 3d 64 69 72 65  |110 address=dire|
000031f0  63 74 6f 72 79 2b 31 30  0d 20 20 31 32 30 20 63  |ctory+10.  120 c|
00003200  6f 6d 76 65 63 3d 26 46  32 0d 20 20 31 33 30 20  |omvec=&F2.  130 |
00003210  72 6f 6d 6e 75 6d 62 65  72 3d 26 46 34 0d 20 20  |romnumber=&F4.  |
00003220  31 34 30 20 65 72 72 6f  72 6e 75 6d 3d 26 46 44  |140 errornum=&FD|
00003230  0d 20 20 31 35 30 20 65  72 72 73 74 61 63 6b 3d  |.  150 errstack=|
00003240  26 31 30 30 0d 20 20 31  36 30 20 77 6f 72 6b 73  |&100.  160 works|
00003250  70 61 63 65 3d 26 44 46  30 0d 20 20 31 37 30 20  |pace=&DF0.  170 |
00003260  6f 73 61 72 67 73 3d 26  46 46 44 41 0d 20 20 31  |osargs=&FFDA.  1|
00003270  38 30 20 6f 73 72 64 63  68 3d 26 46 46 45 30 0d  |80 osrdch=&FFE0.|
00003280  20 20 31 39 30 20 6f 73  61 73 63 69 3d 26 46 46  |  190 osasci=&FF|
00003290  45 33 0d 20 20 32 30 30  20 6f 73 6e 65 77 6c 3d  |E3.  200 osnewl=|
000032a0  26 46 46 45 37 0d 20 20  32 31 30 20 6f 73 77 6f  |&FFE7.  210 oswo|
000032b0  72 64 3d 26 46 46 46 31  0d 20 20 32 32 30 20 6f  |rd=&FFF1.  220 o|
000032c0  73 62 79 74 65 3d 26 46  46 46 34 0d 20 20 32 33  |sbyte=&FFF4.  23|
000032d0  30 20 6f 73 63 6c 69 3d  26 46 46 46 37 0d 20 20  |0 oscli=&FFF7.  |
000032e0  32 34 30 20 46 4f 52 20  70 61 73 73 20 3d 20 30  |240 FOR pass = 0|
000032f0  20 54 4f 20 32 20 53 54  45 50 20 32 0d 20 20 32  | TO 2 STEP 2.  2|
00003300  35 30 20 50 25 3d 48 49  4d 45 4d 0d 20 20 32 36  |50 P%=HIMEM.  26|
00003310  30 20 5b 20 20 20 20 20  20 20 4f 50 54 20 70 61  |0 [       OPT pa|
00003320  73 73 0d 20 20 32 37 30  20 20 20 20 20 20 20 20  |ss.  270        |
00003330  20 42 52 4b 0d 20 20 32  38 30 20 20 20 20 20 20  | BRK.  280      |
00003340  20 20 20 42 52 4b 0d 20  20 32 39 30 20 20 20 20  |   BRK.  290    |
00003350  20 20 20 20 20 42 52 4b  0d 20 20 33 30 30 20 20  |     BRK.  300  |
00003360  20 20 20 20 20 20 20 4a  4d 50 20 73 65 72 76 69  |       JMP servi|
00003370  63 65 2b 64 69 66 66 0d  20 20 33 31 30 20 20 20  |ce+diff.  310   |
00003380  20 20 20 20 20 20 4f 50  54 20 46 4e 65 71 75 62  |      OPT FNequb|
00003390  28 26 38 32 29 0d 20 20  33 32 30 20 20 20 20 20  |(&82).  320     |
000033a0  20 20 20 20 4f 50 54 20  46 4e 65 71 75 62 28 28  |    OPT FNequb((|
000033b0  63 6f 70 79 72 69 67 68  74 2b 64 69 66 66 29 20  |copyright+diff) |
000033c0  4d 4f 44 20 32 35 36 29  0d 20 20 33 33 30 20 20  |MOD 256).  330  |
000033d0  20 20 20 20 20 20 20 42  52 4b 0d 20 20 33 34 30  |       BRK.  340|
000033e0  20 2e 74 69 74 6c 65 0d  20 20 33 35 30 20 20 20  | .title.  350   |
000033f0  20 20 20 20 20 20 4f 50  54 20 46 4e 65 71 75 73  |      OPT FNequs|
00003400  28 22 46 49 4c 45 53 22  29 0d 20 20 33 36 30 20  |("FILES").  360 |
00003410  2e 63 6f 70 79 72 69 67  68 74 0d 20 20 33 37 30  |.copyright.  370|
00003420  20 20 20 20 20 20 20 20  20 42 52 4b 0d 20 20 33  |         BRK.  3|
00003430  38 30 20 20 20 20 20 20  20 20 20 4f 50 54 20 46  |80         OPT F|
00003440  4e 65 71 75 73 28 22 28  43 29 20 47 6f 72 64 6f  |Nequs("(C) Gordo|
00003450  6e 20 48 6f 72 73 69 6e  67 74 6f 6e 20 31 39 38  |n Horsington 198|
00003460  37 22 29 0d 20 20 33 39  30 20 20 20 20 20 20 20  |7").  390       |
00003470  20 20 42 52 4b 0d 20 20  34 30 30 20 2e 73 65 72  |  BRK.  400 .ser|
00003480  76 69 63 65 0d 20 20 34  31 30 20 20 20 20 20 20  |vice.  410      |
00003490  20 20 20 50 48 41 0d 20  20 34 32 30 20 20 20 20  |   PHA.  420    |
000034a0  20 20 20 20 20 43 4d 50  20 23 32 0d 20 20 34 33  |     CMP #2.  43|
000034b0  30 20 20 20 20 20 20 20  20 20 42 4e 45 20 74 72  |0         BNE tr|
000034c0  79 66 6f 75 72 0d 20 20  34 34 30 20 20 20 20 20  |yfour.  440     |
000034d0  20 20 20 20 54 59 41 0d  20 20 34 35 30 20 20 20  |    TYA.  450   |
000034e0  20 20 20 20 20 20 50 48  41 0d 20 20 34 36 30 20  |      PHA.  460 |
000034f0  20 20 20 20 20 20 20 20  53 54 41 20 77 6f 72 6b  |        STA work|
00003500  73 70 61 63 65 2c 58 0d  20 20 34 37 30 20 20 20  |space,X.  470   |
00003510  20 20 20 20 20 20 4c 44  41 20 23 30 0d 20 20 34  |      LDA #0.  4|
00003520  38 30 20 20 20 20 20 20  20 20 20 53 54 41 20 70  |80         STA p|
00003530  72 69 76 61 74 65 0d 20  20 34 39 30 20 20 20 20  |rivate.  490    |
00003540  20 20 20 20 20 53 54 59  20 70 72 69 76 61 74 65  |     STY private|
00003550  2b 31 0d 20 20 35 30 30  20 20 20 20 20 20 20 20  |+1.  500        |
00003560  20 4c 44 59 20 23 26 46  46 0d 20 20 35 31 30 20  | LDY #&FF.  510 |
00003570  20 20 20 20 20 20 20 20  53 54 41 20 28 70 72 69  |        STA (pri|
00003580  76 61 74 65 29 2c 59 20  5c 20 30 20 3d 20 75 74  |vate),Y \ 0 = ut|
00003590  69 6c 69 74 79 20 6f 66  66 0d 20 20 35 32 30 20  |ility off.  520 |
000035a0  20 20 20 20 20 20 20 20  50 4c 41 0d 20 20 35 33  |        PLA.  53|
000035b0  30 20 20 20 20 20 20 20  20 20 54 41 59 0d 20 20  |0         TAY.  |
000035c0  35 34 30 20 20 20 20 20  20 20 20 20 49 4e 59 20  |540         INY |
000035d0  20 20 20 20 20 20 20 20  20 20 5c 20 32 20 70 61  |          \ 2 pa|
000035e0  67 65 73 20 6f 66 0d 20  20 35 35 30 20 20 20 20  |ges of.  550    |
000035f0  20 20 20 20 20 49 4e 59  20 20 20 20 20 20 20 20  |     INY        |
00003600  20 20 20 5c 20 70 72 69  76 61 74 65 20 77 6f 72  |   \ private wor|
00003610  6b 73 70 61 63 65 0d 20  20 35 36 30 20 20 20 20  |kspace.  560    |
00003620  20 20 20 20 20 50 4c 41  0d 20 20 35 37 30 20 20  |     PLA.  570  |
00003630  20 20 20 20 20 20 20 52  54 53 0d 20 20 35 38 30  |       RTS.  580|
00003640  20 2e 74 72 79 66 6f 75  72 0d 20 20 35 39 30 20  | .tryfour.  590 |
00003650  20 20 20 20 20 20 20 20  43 4d 50 20 23 34 0d 20  |        CMP #4. |
00003660  20 36 30 30 20 20 20 20  20 20 20 20 20 42 45 51  | 600         BEQ|
00003670  20 75 6e 72 65 63 6f 67  6e 69 73 65 64 0d 20 20  | unrecognised.  |
00003680  36 31 30 20 20 20 20 20  20 20 20 20 43 4d 50 20  |610         CMP |
00003690  23 36 0d 20 20 36 32 30  20 20 20 20 20 20 20 20  |#6.  620        |
000036a0  20 42 4e 45 20 6f 75 74  0d 20 20 36 33 30 20 20  | BNE out.  630  |
000036b0  20 20 20 20 20 20 20 54  58 41 0d 20 20 36 34 30  |       TXA.  640|
000036c0  20 20 20 20 20 20 20 20  20 50 48 41 0d 20 20 36  |         PHA.  6|
000036d0  35 30 20 20 20 20 20 20  20 20 20 54 59 41 0d 20  |50         TYA. |
000036e0  20 36 36 30 20 20 20 20  20 20 20 20 20 50 48 41  | 660         PHA|
000036f0  0d 20 20 36 37 30 20 20  20 20 20 20 20 20 20 4c  |.  670         L|
00003700  44 58 20 72 6f 6d 6e 75  6d 62 65 72 0d 20 20 36  |DX romnumber.  6|
00003710  38 30 20 20 20 20 20 20  20 20 20 4c 44 41 20 77  |80         LDA w|
00003720  6f 72 6b 73 70 61 63 65  2c 58 0d 20 20 36 39 30  |orkspace,X.  690|
00003730  20 20 20 20 20 20 20 20  20 53 54 41 20 70 72 69  |         STA pri|
00003740  76 61 74 65 2b 31 0d 20  20 37 30 30 20 20 20 20  |vate+1.  700    |
00003750  20 20 20 20 20 4c 44 41  20 23 30 0d 20 20 37 31  |     LDA #0.  71|
00003760  30 20 20 20 20 20 20 20  20 20 53 54 41 20 70 72  |0         STA pr|
00003770  69 76 61 74 65 0d 20 20  37 32 30 20 20 20 20 20  |ivate.  720     |
00003780  20 20 20 20 4c 44 59 20  23 26 46 46 0d 20 20 37  |    LDY #&FF.  7|
00003790  33 30 20 20 20 20 20 20  20 20 20 4c 44 41 20 28  |30         LDA (|
000037a0  70 72 69 76 61 74 65 29  2c 59 0d 20 20 37 34 30  |private),Y.  740|
000037b0  20 20 20 20 20 20 20 20  20 42 45 51 20 6e 6f 74  |         BEQ not|
000037c0  6f 6e 0d 20 20 37 35 30  20 20 20 20 20 20 20 20  |on.  750        |
000037d0  20 49 4e 59 0d 20 20 37  36 30 20 20 20 20 20 20  | INY.  760      |
000037e0  20 20 20 4c 44 41 20 28  65 72 72 6f 72 6e 75 6d  |   LDA (errornum|
000037f0  29 2c 59 0d 20 20 37 37  30 20 20 20 20 20 20 20  |),Y.  770       |
00003800  20 20 43 4d 50 20 23 26  42 45 20 20 20 20 20 20  |  CMP #&BE      |
00003810  5c 20 43 61 74 20 66 75  6c 6c 0d 20 20 37 38 30  |\ Cat full.  780|
00003820  20 20 20 20 20 20 20 20  20 42 45 51 20 63 68 61  |         BEQ cha|
00003830  6e 67 65 0d 20 20 37 39  30 20 20 20 20 20 20 20  |nge.  790       |
00003840  20 20 43 4d 50 20 23 26  43 36 20 20 20 20 20 20  |  CMP #&C6      |
00003850  5c 20 44 69 73 63 20 66  75 6c 6c 0d 20 20 38 30  |\ Disc full.  80|
00003860  30 20 20 20 20 20 20 20  20 20 42 45 51 20 63 68  |0         BEQ ch|
00003870  61 6e 67 65 0d 20 20 38  31 30 20 2e 6e 6f 74 6f  |ange.  810 .noto|
00003880  6e 0d 20 20 38 32 30 20  20 20 20 20 20 20 20 20  |n.  820         |
00003890  50 4c 41 0d 20 20 38 33  30 20 20 20 20 20 20 20  |PLA.  830       |
000038a0  20 20 54 41 59 0d 20 20  38 34 30 20 20 20 20 20  |  TAY.  840     |
000038b0  20 20 20 20 50 4c 41 0d  20 20 38 35 30 20 20 20  |    PLA.  850   |
000038c0  20 20 20 20 20 20 54 41  58 0d 20 20 38 36 30 20  |      TAX.  860 |
000038d0  2e 6f 75 74 0d 20 20 38  37 30 20 20 20 20 20 20  |.out.  870      |
000038e0  20 20 20 50 4c 41 0d 20  20 38 38 30 20 20 20 20  |   PLA.  880    |
000038f0  20 20 20 20 20 52 54 53  0d 20 20 38 39 30 20 2e  |     RTS.  890 .|
00003900  63 68 61 6e 67 65 0d 20  20 39 30 30 20 20 20 20  |change.  900    |
00003910  20 20 20 20 20 50 4c 41  20 20 20 20 20 20 20 20  |     PLA        |
00003920  20 20 20 5c 20 59 0d 20  20 39 31 30 20 20 20 20  |   \ Y.  910    |
00003930  20 20 20 20 20 50 4c 41  20 20 20 20 20 20 20 20  |     PLA        |
00003940  20 20 20 5c 20 58 0d 20  20 39 32 30 20 20 20 20  |   \ X.  920    |
00003950  20 20 20 20 20 50 4c 41  20 20 20 20 20 20 20 20  |     PLA        |
00003960  20 20 20 5c 20 41 0d 20  20 39 33 30 20 20 20 20  |   \ A.  930    |
00003970  20 20 20 20 20 50 4c 41  20 20 20 20 20 20 20 20  |     PLA        |
00003980  20 20 20 5c 20 53 74 61  74 75 73 20 72 65 67 69  |   \ Status regi|
00003990  73 74 65 72 0d 20 20 39  34 30 20 20 20 20 20 20  |ster.  940      |
000039a0  20 20 20 50 4c 41 20 20  20 20 20 20 20 20 20 20  |   PLA          |
000039b0  20 5c 20 52 65 74 75 72  6e 0d 20 20 39 35 30 20  | \ Return.  950 |
000039c0  20 20 20 20 20 20 20 20  50 4c 41 20 20 20 20 20  |        PLA     |
000039d0  20 20 20 20 20 20 5c 20  61 64 64 72 65 73 73 0d  |      \ address.|
000039e0  20 20 39 36 30 20 20 20  20 20 20 20 20 20 4c 44  |  960         LD|
000039f0  58 20 23 28 73 77 61 70  64 69 73 63 2b 64 69 66  |X #(swapdisc+dif|
00003a00  66 29 20 4d 4f 44 20 32  35 36 0d 20 20 39 37 30  |f) MOD 256.  970|
00003a10  20 20 20 20 20 20 20 20  20 4c 44 59 20 23 28 73  |         LDY #(s|
00003a20  77 61 70 64 69 73 63 2b  64 69 66 66 29 20 44 49  |wapdisc+diff) DI|
00003a30  56 20 32 35 36 0d 20 20  39 38 30 20 20 20 20 20  |V 256.  980     |
00003a40  20 20 20 20 4a 53 52 20  70 72 69 6e 74 2b 64 69  |    JSR print+di|
00003a50  66 66 0d 20 20 39 39 30  20 2e 73 70 61 63 65 62  |ff.  990 .spaceb|
00003a60  61 72 0d 20 31 30 30 30  20 20 20 20 20 20 20 20  |ar. 1000        |
00003a70  20 4c 44 41 20 23 26 37  41 0d 20 31 30 31 30 20  | LDA #&7A. 1010 |
00003a80  20 20 20 20 20 20 20 20  4a 53 52 20 6f 73 62 79  |        JSR osby|
00003a90  74 65 20 20 20 20 5c 20  53 63 61 6e 20 6b 65 79  |te    \ Scan key|
00003aa0  62 6f 61 72 64 0d 20 31  30 32 30 20 20 20 20 20  |board. 1020     |
00003ab0  20 20 20 20 43 50 58 20  23 26 36 32 0d 20 31 30  |    CPX #&62. 10|
00003ac0  33 30 20 20 20 20 20 20  20 20 20 42 4e 45 20 73  |30         BNE s|
00003ad0  70 61 63 65 62 61 72 20  20 5c 20 57 61 69 74 20  |pacebar  \ Wait |
00003ae0  66 6f 72 20 53 70 61 63  65 0d 20 31 30 34 30 20  |for Space. 1040 |
00003af0  20 20 20 20 20 20 20 20  4a 4d 50 20 61 6e 6f 74  |        JMP anot|
00003b00  68 65 72 2b 64 69 66 66  0d 20 31 30 35 30 20 2e  |her+diff. 1050 .|
00003b10  75 6e 72 65 63 6f 67 6e  69 73 65 64 0d 20 31 30  |unrecognised. 10|
00003b20  36 30 20 20 20 20 20 20  20 20 20 54 58 41 0d 20  |60         TXA. |
00003b30  31 30 37 30 20 20 20 20  20 20 20 20 20 50 48 41  |1070         PHA|
00003b40  0d 20 31 30 38 30 20 20  20 20 20 20 20 20 20 54  |. 1080         T|
00003b50  59 41 0d 20 31 30 39 30  20 20 20 20 20 20 20 20  |YA. 1090        |
00003b60  20 50 48 41 0d 20 31 31  30 30 20 20 20 20 20 20  | PHA. 1100      |
00003b70  20 20 20 4c 44 58 20 23  26 46 46 0d 20 31 31 31  |   LDX #&FF. 111|
00003b80  30 20 2e 63 6f 6d 6c 6f  6f 70 0d 20 31 31 32 30  |0 .comloop. 1120|
00003b90  20 20 20 20 20 20 20 20  20 49 4e 58 0d 20 31 31  |         INX. 11|
00003ba0  33 30 20 20 20 20 20 20  20 20 20 4c 44 41 20 74  |30         LDA t|
00003bb0  69 74 6c 65 2b 64 69 66  66 2c 58 0d 20 31 31 34  |itle+diff,X. 114|
00003bc0  30 20 20 20 20 20 20 20  20 20 42 45 51 20 66 6f  |0         BEQ fo|
00003bd0  75 6e 64 0d 20 31 31 35  30 20 20 20 20 20 20 20  |und. 1150       |
00003be0  20 20 4c 44 41 20 28 63  6f 6d 76 65 63 29 2c 59  |  LDA (comvec),Y|
00003bf0  0d 20 31 31 36 30 20 20  20 20 20 20 20 20 20 49  |. 1160         I|
00003c00  4e 59 0d 20 31 31 37 30  20 20 20 20 20 20 20 20  |NY. 1170        |
00003c10  20 43 4d 50 20 23 41 53  43 28 22 2e 22 29 0d 20  | CMP #ASC("."). |
00003c20  31 31 38 30 20 20 20 20  20 20 20 20 20 42 45 51  |1180         BEQ|
00003c30  20 66 6f 75 6e 64 0d 20  31 31 39 30 20 20 20 20  | found. 1190    |
00003c40  20 20 20 20 20 41 4e 44  20 23 26 44 46 0d 20 31  |     AND #&DF. 1|
00003c50  32 30 30 20 20 20 20 20  20 20 20 20 43 4d 50 20  |200         CMP |
00003c60  74 69 74 6c 65 2b 64 69  66 66 2c 58 0d 20 31 32  |title+diff,X. 12|
00003c70  31 30 20 20 20 20 20 20  20 20 20 42 45 51 20 63  |10         BEQ c|
00003c80  6f 6d 6c 6f 6f 70 0d 20  31 32 32 30 20 20 20 20  |omloop. 1220    |
00003c90  20 20 20 20 20 50 4c 41  0d 20 31 32 33 30 20 20  |     PLA. 1230  |
00003ca0  20 20 20 20 20 20 20 54  41 59 0d 20 31 32 34 30  |       TAY. 1240|
00003cb0  20 20 20 20 20 20 20 20  20 50 4c 41 0d 20 31 32  |         PLA. 12|
00003cc0  35 30 20 20 20 20 20 20  20 20 20 54 41 58 0d 20  |50         TAX. |
00003cd0  31 32 36 30 20 20 20 20  20 20 20 20 20 50 4c 41  |1260         PLA|
00003ce0  0d 20 31 32 37 30 20 20  20 20 20 20 20 20 20 52  |. 1270         R|
00003cf0  54 53 0d 20 31 32 38 30  20 2e 66 6f 75 6e 64 0d  |TS. 1280 .found.|
00003d00  20 31 32 39 30 20 20 20  20 20 20 20 20 20 50 4c  | 1290         PL|
00003d10  41 0d 20 31 33 30 30 20  20 20 20 20 20 20 20 20  |A. 1300         |
00003d20  50 4c 41 0d 20 31 33 31  30 20 20 20 20 20 20 20  |PLA. 1310       |
00003d30  20 20 50 4c 41 0d 20 31  33 32 30 20 20 20 20 20  |  PLA. 1320     |
00003d40  20 20 20 20 4c 44 41 20  23 30 0d 20 31 33 33 30  |    LDA #0. 1330|
00003d50  20 20 20 20 20 20 20 20  20 54 41 58 0d 20 31 33  |         TAX. 13|
00003d60  34 30 20 20 20 20 20 20  20 20 20 54 41 59 0d 20  |40         TAY. |
00003d70  31 33 35 30 20 20 20 20  20 20 20 20 20 4a 53 52  |1350         JSR|
00003d80  20 6f 73 61 72 67 73 0d  20 31 33 36 30 20 20 20  | osargs. 1360   |
00003d90  20 20 20 20 20 20 43 4d  50 20 23 34 20 20 20 20  |      CMP #4    |
00003da0  20 20 20 20 5c 20 49 73  20 44 46 53 20 61 63 74  |    \ Is DFS act|
00003db0  69 76 65 3f 0d 20 31 33  37 30 20 20 20 20 20 20  |ive?. 1370      |
00003dc0  20 20 20 42 45 51 20 64  66 73 0d 20 31 33 38 30  |   BEQ dfs. 1380|
00003dd0  20 20 20 20 20 20 20 20  20 4c 44 41 20 23 28 77  |         LDA #(w|
00003de0  72 6f 6e 67 2b 64 69 66  66 29 20 4d 4f 44 20 32  |rong+diff) MOD 2|
00003df0  35 36 0d 20 31 33 39 30  20 20 20 20 20 20 20 20  |56. 1390        |
00003e00  20 53 54 41 20 61 64 64  72 65 73 73 0d 20 31 34  | STA address. 14|
00003e10  30 30 20 20 20 20 20 20  20 20 20 4c 44 41 20 23  |00         LDA #|
00003e20  28 77 72 6f 6e 67 2b 64  69 66 66 29 20 44 49 56  |(wrong+diff) DIV|
00003e30  20 32 35 36 0d 20 31 34  31 30 20 20 20 20 20 20  | 256. 1410      |
00003e40  20 20 20 53 54 41 20 61  64 64 72 65 73 73 2b 31  |   STA address+1|
00003e50  0d 20 31 34 32 30 20 20  20 20 20 20 20 20 20 4c  |. 1420         L|
00003e60  44 59 20 23 26 46 46 0d  20 31 34 33 30 20 2e 65  |DY #&FF. 1430 .e|
00003e70  72 72 6f 72 6c 6f 6f 70  0d 20 31 34 34 30 20 20  |rrorloop. 1440  |
00003e80  20 20 20 20 20 20 20 49  4e 59 0d 20 31 34 35 30  |       INY. 1450|
00003e90  20 20 20 20 20 20 20 20  20 4c 44 41 20 28 61 64  |         LDA (ad|
00003ea0  64 72 65 73 73 29 2c 59  0d 20 31 34 36 30 20 20  |dress),Y. 1460  |
00003eb0  20 20 20 20 20 20 20 53  54 41 20 65 72 72 73 74  |       STA errst|
00003ec0  61 63 6b 2c 59 0d 20 31  34 37 30 20 20 20 20 20  |ack,Y. 1470     |
00003ed0  20 20 20 20 42 50 4c 20  65 72 72 6f 72 6c 6f 6f  |    BPL errorloo|
00003ee0  70 0d 20 31 34 38 30 20  20 20 20 20 20 20 20 20  |p. 1480         |
00003ef0  4a 4d 50 20 65 72 72 73  74 61 63 6b 0d 20 31 34  |JMP errstack. 14|
00003f00  39 30 20 2e 64 66 73 0d  20 31 35 30 30 20 20 20  |90 .dfs. 1500   |
00003f10  20 20 20 20 20 20 4c 44  58 20 23 28 67 6f 2b 64  |      LDX #(go+d|
00003f20  69 66 66 29 20 4d 4f 44  20 32 35 36 0d 20 31 35  |iff) MOD 256. 15|
00003f30  31 30 20 20 20 20 20 20  20 20 20 4c 44 59 20 23  |10         LDY #|
00003f40  28 67 6f 2b 64 69 66 66  29 20 44 49 56 20 32 35  |(go+diff) DIV 25|
00003f50  36 0d 20 31 35 32 30 20  20 20 20 20 20 20 20 20  |6. 1520         |
00003f60  4a 53 52 20 70 72 69 6e  74 2b 64 69 66 66 0d 20  |JSR print+diff. |
00003f70  31 35 33 30 20 20 20 20  20 20 20 20 20 4a 53 52  |1530         JSR|
00003f80  20 6f 73 72 64 63 68 0d  20 31 35 34 30 20 20 20  | osrdch. 1540   |
00003f90  20 20 20 20 20 20 41 4e  44 20 23 26 44 46 0d 20  |      AND #&DF. |
00003fa0  31 35 35 30 20 20 20 20  20 20 20 20 20 50 48 41  |1550         PHA|
00003fb0  0d 20 31 35 36 30 20 20  20 20 20 20 20 20 20 4a  |. 1560         J|
00003fc0  53 52 20 6f 73 61 73 63  69 0d 20 31 35 37 30 20  |SR osasci. 1570 |
00003fd0  20 20 20 20 20 20 20 20  4a 53 52 20 6f 73 6e 65  |        JSR osne|
00003fe0  77 6c 0d 20 31 35 38 30  20 20 20 20 20 20 20 20  |wl. 1580        |
00003ff0  20 50 4c 41 0d 20 31 35  39 30 20 20 20 20 20 20  | PLA. 1590      |
00004000  20 20 20 43 4d 50 20 23  41 53 43 28 22 59 22 29  |   CMP #ASC("Y")|
00004010  0d 20 31 36 30 30 20 20  20 20 20 20 20 20 20 42  |. 1600         B|
00004020  45 51 20 79 65 73 0d 20  31 36 31 30 20 20 20 20  |EQ yes. 1610    |
00004030  20 20 20 20 20 4c 44 41  20 23 30 0d 20 31 36 32  |     LDA #0. 162|
00004040  30 20 20 20 20 20 20 20  20 20 52 54 53 0d 20 31  |0         RTS. 1|
00004050  36 33 30 20 2e 79 65 73  0d 20 31 36 34 30 20 20  |630 .yes. 1640  |
00004060  20 20 20 20 20 20 20 4a  53 52 20 6f 73 6e 65 77  |       JSR osnew|
00004070  6c 0d 20 31 36 35 30 20  20 20 20 20 20 20 20 20  |l. 1650         |
00004080  4c 44 58 20 72 6f 6d 6e  75 6d 62 65 72 0d 20 31  |LDX romnumber. 1|
00004090  36 36 30 20 20 20 20 20  20 20 20 20 4c 44 41 20  |660         LDA |
000040a0  77 6f 72 6b 73 70 61 63  65 2c 58 0d 20 31 36 37  |workspace,X. 167|
000040b0  30 20 20 20 20 20 20 20  20 20 53 54 41 20 62 6c  |0         STA bl|
000040c0  6f 63 6b 2b 31 0d 20 31  36 38 30 20 20 20 20 20  |ock+1. 1680     |
000040d0  20 20 20 20 53 54 41 20  63 6c 69 62 75 66 66 2b  |    STA clibuff+|
000040e0  31 0d 20 31 36 39 30 20  20 20 20 20 20 20 20 20  |1. 1690         |
000040f0  53 54 41 20 70 72 69 76  61 74 65 2b 31 0d 20 31  |STA private+1. 1|
00004100  37 30 30 20 20 20 20 20  20 20 20 20 53 54 41 20  |700         STA |
00004110  64 69 72 65 63 74 6f 72  79 2b 31 0d 20 31 37 31  |directory+1. 171|
00004120  30 20 20 20 20 20 20 20  20 20 43 4c 43 0d 20 31  |0         CLC. 1|
00004130  37 32 30 20 20 20 20 20  20 20 20 20 41 44 43 20  |720         ADC |
00004140  23 31 0d 20 31 37 33 30  20 20 20 20 20 20 20 20  |#1. 1730        |
00004150  20 53 54 41 20 63 61 74  62 75 66 66 2b 31 0d 20  | STA catbuff+1. |
00004160  31 37 34 30 20 20 20 20  20 20 20 20 20 4c 44 41  |1740         LDA|
00004170  20 23 26 38 30 0d 20 31  37 35 30 20 20 20 20 20  | #&80. 1750     |
00004180  20 20 20 20 53 54 41 20  62 6c 6f 63 6b 0d 20 31  |    STA block. 1|
00004190  37 36 30 20 20 20 20 20  20 20 20 20 4c 44 59 20  |760         LDY |
000041a0  23 38 0d 20 31 37 37 30  20 20 20 20 20 20 20 20  |#8. 1770        |
000041b0  20 53 54 59 20 63 61 74  62 75 66 66 0d 20 31 37  | STY catbuff. 17|
000041c0  38 30 20 20 20 20 20 20  20 20 20 49 4e 59 0d 20  |80         INY. |
000041d0  31 37 39 30 20 20 20 20  20 20 20 20 20 53 54 59  |1790         STY|
000041e0  20 64 69 72 65 63 74 6f  72 79 0d 20 31 38 30 30  | directory. 1800|
000041f0  20 20 20 20 20 20 20 20  20 4c 44 41 20 23 30 0d  |         LDA #0.|
00004200  20 31 38 31 30 20 20 20  20 20 20 20 20 20 53 54  | 1810         ST|
00004210  41 20 70 72 69 76 61 74  65 0d 20 31 38 32 30 20  |A private. 1820 |
00004220  20 20 20 20 20 20 20 20  4c 44 41 20 23 26 46 46  |        LDA #&FF|
00004230  0d 20 31 38 33 30 20 20  20 20 20 20 20 20 20 54  |. 1830         T|
00004240  41 59 0d 20 31 38 34 30  20 20 20 20 20 20 20 20  |AY. 1840        |
00004250  20 53 54 41 20 28 70 72  69 76 61 74 65 29 2c 59  | STA (private),Y|
00004260  20 5c 20 26 46 46 20 3d  20 75 74 69 6c 69 74 79  | \ &FF = utility|
00004270  20 6f 6e 0d 20 31 38 35  30 20 20 20 20 20 20 20  | on. 1850       |
00004280  20 20 49 4e 59 20 20 20  20 20 20 20 20 20 20 20  |  INY           |
00004290  5c 20 59 3d 30 0d 20 31  38 36 30 20 2e 64 61 74  |\ Y=0. 1860 .dat|
000042a0  61 6c 6f 6f 70 0d 20 31  38 37 30 20 20 20 20 20  |aloop. 1870     |
000042b0  20 20 20 20 4c 44 41 20  64 61 74 61 2b 64 69 66  |    LDA data+dif|
000042c0  66 2c 59 0d 20 31 38 38  30 20 20 20 20 20 20 20  |f,Y. 1880       |
000042d0  20 20 53 54 41 20 28 62  6c 6f 63 6b 29 2c 59 0d  |  STA (block),Y.|
000042e0  20 31 38 39 30 20 20 20  20 20 20 20 20 20 49 4e  | 1890         IN|
000042f0  59 0d 20 31 39 30 30 20  20 20 20 20 20 20 20 20  |Y. 1900         |
00004300  43 50 59 20 23 26 41 0d  20 31 39 31 30 20 20 20  |CPY #&A. 1910   |
00004310  20 20 20 20 20 20 42 43  43 20 64 61 74 61 6c 6f  |      BCC datalo|
00004320  6f 70 0d 20 31 39 32 30  20 20 20 20 20 20 20 20  |op. 1920        |
00004330  20 4c 44 59 20 23 32 0d  20 31 39 33 30 20 20 20  | LDY #2. 1930   |
00004340  20 20 20 20 20 20 4c 44  41 20 63 61 74 62 75 66  |      LDA catbuf|
00004350  66 2b 31 0d 20 31 39 34  30 20 20 20 20 20 20 20  |f+1. 1940       |
00004360  20 20 53 54 41 20 28 62  6c 6f 63 6b 29 2c 59 0d  |  STA (block),Y.|
00004370  20 31 39 35 30 20 20 20  20 20 20 20 20 20 4c 44  | 1950         LD|
00004380  59 20 23 30 0d 20 31 39  36 30 20 2e 63 6f 70 79  |Y #0. 1960 .copy|
00004390  6c 6f 6f 70 0d 20 31 39  37 30 20 20 20 20 20 20  |loop. 1970      |
000043a0  20 20 20 4c 44 41 20 63  6f 70 79 2b 64 69 66 66  |   LDA copy+diff|
000043b0  2c 59 0d 20 31 39 38 30  20 20 20 20 20 20 20 20  |,Y. 1980        |
000043c0  20 53 54 41 20 28 70 72  69 76 61 74 65 29 2c 59  | STA (private),Y|
000043d0  0d 20 31 39 39 30 20 20  20 20 20 20 20 20 20 49  |. 1990         I|
000043e0  4e 59 0d 20 32 30 30 30  20 20 20 20 20 20 20 20  |NY. 2000        |
000043f0  20 43 50 59 20 23 26 42  0d 20 32 30 31 30 20 20  | CPY #&B. 2010  |
00004400  20 20 20 20 20 20 20 42  43 43 20 63 6f 70 79 6c  |       BCC copyl|
00004410  6f 6f 70 0d 20 32 30 32  30 20 20 20 20 20 20 20  |oop. 2020       |
00004420  20 20 53 54 59 20 63 6c  69 62 75 66 66 0d 20 32  |  STY clibuff. 2|
00004430  30 33 30 20 20 20 20 20  20 20 20 20 4c 44 41 20  |030         LDA |
00004440  23 26 37 46 0d 20 32 30  34 30 20 20 20 20 20 20  |#&7F. 2040      |
00004450  20 20 20 4c 44 58 20 62  6c 6f 63 6b 0d 20 32 30  |   LDX block. 20|
00004460  35 30 20 20 20 20 20 20  20 20 20 4c 44 59 20 62  |50         LDY b|
00004470  6c 6f 63 6b 2b 31 0d 20  32 30 36 30 20 20 20 20  |lock+1. 2060    |
00004480  20 20 20 20 20 4a 53 52  20 6f 73 77 6f 72 64 20  |     JSR osword |
00004490  20 20 20 5c 20 52 65 61  64 20 63 61 74 61 6c 6f  |   \ Read catalo|
000044a0  67 75 65 0d 20 32 30 37  30 20 2e 63 61 74 61 6c  |gue. 2070 .catal|
000044b0  6f 67 75 65 0d 20 32 30  38 30 20 20 20 20 20 20  |ogue. 2080      |
000044c0  20 20 20 4c 44 59 20 23  30 0d 20 32 30 39 30 20  |   LDY #0. 2090 |
000044d0  2e 74 72 61 6e 73 66 65  72 0d 20 32 31 30 30 20  |.transfer. 2100 |
000044e0  20 20 20 20 20 20 20 20  4c 44 41 20 28 63 61 74  |        LDA (cat|
000044f0  62 75 66 66 29 2c 59 0d  20 32 31 31 30 20 20 20  |buff),Y. 2110   |
00004500  20 20 20 20 20 20 53 54  41 20 28 63 6c 69 62 75  |      STA (clibu|
00004510  66 66 29 2c 59 0d 20 32  31 32 30 20 20 20 20 20  |ff),Y. 2120     |
00004520  20 20 20 20 49 4e 59 0d  20 32 31 33 30 20 20 20  |    INY. 2130   |
00004530  20 20 20 20 20 20 43 50  59 20 23 37 0d 20 32 31  |      CPY #7. 21|
00004540  34 30 20 20 20 20 20 20  20 20 20 42 43 43 20 74  |40         BCC t|
00004550  72 61 6e 73 66 65 72 0d  20 32 31 35 30 20 20 20  |ransfer. 2150   |
00004560  20 20 20 20 20 20 4c 44  41 20 23 26 44 0d 20 32  |      LDA #&D. 2|
00004570  31 36 30 20 20 20 20 20  20 20 20 20 53 54 41 20  |160         STA |
00004580  28 63 6c 69 62 75 66 66  29 2c 59 0d 20 32 31 37  |(clibuff),Y. 217|
00004590  30 20 20 20 20 20 20 20  20 20 4c 44 41 20 28 63  |0         LDA (c|
000045a0  61 74 62 75 66 66 29 2c  59 0d 20 32 31 38 30 20  |atbuff),Y. 2180 |
000045b0  20 20 20 20 20 20 20 20  41 4e 44 20 23 26 37 46  |        AND #&7F|
000045c0  0d 20 32 31 39 30 20 20  20 20 20 20 20 20 20 43  |. 2190         C|
000045d0  4d 50 20 23 41 53 43 28  22 20 22 29 0d 20 32 32  |MP #ASC(" "). 22|
000045e0  30 30 20 20 20 20 20 20  20 20 20 42 43 43 20 66  |00         BCC f|
000045f0  69 6e 69 73 68 0d 20 32  32 31 30 20 20 20 20 20  |inish. 2210     |
00004600  20 20 20 20 4c 44 59 20  23 30 0d 20 32 32 32 30  |    LDY #0. 2220|
00004610  20 20 20 20 20 20 20 20  20 53 54 41 20 28 64 69  |         STA (di|
00004620  72 65 63 74 6f 72 79 29  2c 59 0d 20 32 32 33 30  |rectory),Y. 2230|
00004630  20 20 20 20 20 20 20 20  20 4c 44 41 20 63 61 74  |         LDA cat|
00004640  62 75 66 66 0d 20 32 32  34 30 20 20 20 20 20 20  |buff. 2240      |
00004650  20 20 20 43 4c 43 0d 20  32 32 35 30 20 20 20 20  |   CLC. 2250    |
00004660  20 20 20 20 20 41 44 43  20 23 38 0d 20 32 32 36  |     ADC #8. 226|
00004670  30 20 20 20 20 20 20 20  20 20 53 54 41 20 63 61  |0         STA ca|
00004680  74 62 75 66 66 0d 20 32  32 37 30 20 2e 61 6e 6f  |tbuff. 2270 .ano|
00004690  74 68 65 72 0d 20 32 32  38 30 20 20 20 20 20 20  |ther. 2280      |
000046a0  20 20 20 4c 44 58 20 23  30 0d 20 32 32 39 30 20  |   LDX #0. 2290 |
000046b0  20 20 20 20 20 20 20 20  4c 44 59 20 63 6c 69 62  |        LDY clib|
000046c0  75 66 66 2b 31 0d 20 32  33 30 30 20 20 20 20 20  |uff+1. 2300     |
000046d0  20 20 20 20 4a 53 52 20  6f 73 63 6c 69 0d 20 32  |    JSR oscli. 2|
000046e0  33 31 30 20 20 20 20 20  20 20 20 20 4c 44 41 20  |310         LDA |
000046f0  63 61 74 62 75 66 66 0d  20 32 33 32 30 20 20 20  |catbuff. 2320   |
00004700  20 20 20 20 20 20 42 4e  45 20 63 61 74 61 6c 6f  |      BNE catalo|
00004710  67 75 65 0d 20 32 33 33  30 20 2e 66 69 6e 69 73  |gue. 2330 .finis|
00004720  68 0d 20 32 33 34 30 20  20 20 20 20 20 20 20 20  |h. 2340         |
00004730  4c 44 41 20 23 30 0d 20  32 33 35 30 20 20 20 20  |LDA #0. 2350    |
00004740  20 20 20 20 20 4c 44 59  20 23 26 46 46 0d 20 32  |     LDY #&FF. 2|
00004750  33 36 30 20 20 20 20 20  20 20 20 20 53 54 41 20  |360         STA |
00004760  28 70 72 69 76 61 74 65  29 2c 59 20 5c 20 30 20  |(private),Y \ 0 |
00004770  3d 20 75 74 69 6c 69 74  79 20 6f 66 66 0d 20 32  |= utility off. 2|
00004780  33 37 30 20 20 20 20 20  20 20 20 20 4a 53 52 20  |370         JSR |
00004790  6f 73 6e 65 77 6c 0d 20  32 33 38 30 20 20 20 20  |osnewl. 2380    |
000047a0  20 20 20 20 20 4c 44 41  20 23 26 46 0d 20 32 33  |     LDA #&F. 23|
000047b0  39 30 20 20 20 20 20 20  20 20 20 4c 44 58 20 23  |90         LDX #|
000047c0  30 0d 20 32 34 30 30 20  20 20 20 20 20 20 20 20  |0. 2400         |
000047d0  4a 53 52 20 6f 73 62 79  74 65 20 20 20 20 5c 20  |JSR osbyte    \ |
000047e0  46 6c 75 73 68 20 62 75  66 66 65 72 73 0d 20 32  |Flush buffers. 2|
000047f0  34 31 30 20 20 20 20 20  20 20 20 20 4c 44 41 20  |410         LDA |
00004800  23 26 42 42 0d 20 32 34  32 30 20 20 20 20 20 20  |#&BB. 2420      |
00004810  20 20 20 4c 44 58 20 23  30 0d 20 32 34 33 30 20  |   LDX #0. 2430 |
00004820  20 20 20 20 20 20 20 20  4c 44 59 20 23 26 46 46  |        LDY #&FF|
00004830  0d 20 32 34 34 30 20 20  20 20 20 20 20 20 20 4a  |. 2440         J|
00004840  53 52 20 6f 73 62 79 74  65 20 20 20 20 5c 20 46  |SR osbyte    \ F|
00004850  69 6e 64 20 42 41 53 49  43 0d 20 32 34 35 30 20  |ind BASIC. 2450 |
00004860  20 20 20 20 20 20 20 20  4c 44 41 20 23 26 38 45  |        LDA #&8E|
00004870  0d 20 32 34 36 30 20 20  20 20 20 20 20 20 20 4a  |. 2460         J|
00004880  4d 50 20 6f 73 62 79 74  65 20 20 20 20 5c 20 45  |MP osbyte    \ E|
00004890  6e 74 65 72 20 42 41 53  49 43 0d 20 32 34 37 30  |nter BASIC. 2470|
000048a0  20 2e 70 72 69 6e 74 0d  20 32 34 38 30 20 20 20  | .print. 2480   |
000048b0  20 20 20 20 20 20 53 54  58 20 61 64 64 72 65 73  |      STX addres|
000048c0  73 0d 20 32 34 39 30 20  20 20 20 20 20 20 20 20  |s. 2490         |
000048d0  53 54 59 20 61 64 64 72  65 73 73 2b 31 0d 20 32  |STY address+1. 2|
000048e0  35 30 30 20 20 20 20 20  20 20 20 20 4c 44 41 20  |500         LDA |
000048f0  23 26 46 0d 20 32 35 31  30 20 20 20 20 20 20 20  |#&F. 2510       |
00004900  20 20 4c 44 58 20 23 30  0d 20 32 35 32 30 20 20  |  LDX #0. 2520  |
00004910  20 20 20 20 20 20 20 4a  53 52 20 6f 73 62 79 74  |       JSR osbyt|
00004920  65 20 20 20 20 5c 20 46  6c 75 73 68 20 62 75 66  |e    \ Flush buf|
00004930  66 65 72 73 0d 20 32 35  33 30 20 20 20 20 20 20  |fers. 2530      |
00004940  20 20 20 4c 44 59 20 23  30 0d 20 32 35 34 30 20  |   LDY #0. 2540 |
00004950  2e 70 72 69 6e 74 6c 6f  6f 70 0d 20 32 35 35 30  |.printloop. 2550|
00004960  20 20 20 20 20 20 20 20  20 4c 44 41 20 28 61 64  |         LDA (ad|
00004970  64 72 65 73 73 29 2c 59  0d 20 32 35 36 30 20 20  |dress),Y. 2560  |
00004980  20 20 20 20 20 20 20 42  45 51 20 65 6e 64 70 72  |       BEQ endpr|
00004990  69 6e 74 0d 20 32 35 37  30 20 20 20 20 20 20 20  |int. 2570       |
000049a0  20 20 4a 53 52 20 6f 73  61 73 63 69 0d 20 32 35  |  JSR osasci. 25|
000049b0  38 30 20 20 20 20 20 20  20 20 20 49 4e 59 0d 20  |80         INY. |
000049c0  32 35 39 30 20 20 20 20  20 20 20 20 20 4a 4d 50  |2590         JMP|
000049d0  20 70 72 69 6e 74 6c 6f  6f 70 2b 64 69 66 66 0d  | printloop+diff.|
000049e0  20 32 36 30 30 20 2e 65  6e 64 70 72 69 6e 74 0d  | 2600 .endprint.|
000049f0  20 32 36 31 30 20 20 20  20 20 20 20 20 20 52 54  | 2610         RT|
00004a00  53 0d 20 32 36 32 30 20  2e 64 61 74 61 0d 20 32  |S. 2620 .data. 2|
00004a10  36 33 30 20 20 20 20 20  20 20 20 20 4f 50 54 20  |630         OPT |
00004a20  46 4e 65 71 75 64 28 26  46 46 30 30 30 30 30 30  |FNequd(&FF000000|
00004a30  29 0d 20 32 36 34 30 20  20 20 20 20 20 20 20 20  |). 2640         |
00004a40  4f 50 54 20 46 4e 65 71  75 64 28 26 30 30 35 33  |OPT FNequd(&0053|
00004a50  30 33 46 46 29 0d 20 32  36 35 30 20 20 20 20 20  |03FF). 2650     |
00004a60  20 20 20 20 4f 50 54 20  46 4e 65 71 75 77 28 26  |    OPT FNequw(&|
00004a70  32 31 30 30 29 0d 20 32  36 36 30 20 2e 63 6f 70  |2100). 2660 .cop|
00004a80  79 0d 20 32 36 37 30 20  20 20 20 20 20 20 20 20  |y. 2670         |
00004a90  4f 50 54 20 46 4e 65 71  75 73 28 22 43 4f 50 59  |OPT FNequs("COPY|
00004aa0  20 30 20 31 20 2a 2e 22  29 0d 20 32 36 38 30 20  | 0 1 *."). 2680 |
00004ab0  2e 73 77 61 70 64 69 73  63 0d 20 32 36 39 30 20  |.swapdisc. 2690 |
00004ac0  20 20 20 20 20 20 20 20  4f 50 54 20 46 4e 65 71  |        OPT FNeq|
00004ad0  75 77 28 26 30 37 30 44  29 0d 20 32 37 30 30 20  |uw(&070D). 2700 |
00004ae0  20 20 20 20 20 20 20 20  4f 50 54 20 46 4e 65 71  |        OPT FNeq|
00004af0  75 73 28 22 49 6e 73 65  72 74 20 61 20 6e 65 77  |us("Insert a new|
00004b00  20 64 69 73 63 20 69 6e  20 22 29 0d 20 32 37 31  | disc in "). 271|
00004b10  30 20 20 20 20 20 20 20  20 20 4f 50 54 20 46 4e  |0         OPT FN|
00004b20  65 71 75 62 28 26 33 41  29 0d 20 32 37 32 30 20  |equb(&3A). 2720 |
00004b30  20 20 20 20 20 20 20 20  4f 50 54 20 46 4e 65 71  |        OPT FNeq|
00004b40  75 73 28 22 31 22 29 0d  20 32 37 33 30 20 20 20  |us("1"). 2730   |
00004b50  20 20 20 20 20 20 4f 50  54 20 46 4e 65 71 75 62  |      OPT FNequb|
00004b60  28 26 30 44 29 0d 20 32  37 34 30 20 20 20 20 20  |(&0D). 2740     |
00004b70  20 20 20 20 4f 50 54 20  46 4e 65 71 75 73 28 22  |    OPT FNequs("|
00004b80  61 6e 64 20 70 72 65 73  73 20 74 68 65 20 53 70  |and press the Sp|
00004b90  61 63 65 20 42 61 72 22  29 0d 20 32 37 35 30 20  |ace Bar"). 2750 |
00004ba0  20 20 20 20 20 20 20 20  4f 50 54 20 46 4e 65 71  |        OPT FNeq|
00004bb0  75 77 28 26 30 44 30 44  29 0d 20 32 37 36 30 20  |uw(&0D0D). 2760 |
00004bc0  20 20 20 20 20 20 20 20  42 52 4b 0d 20 32 37 37  |        BRK. 277|
00004bd0  30 20 2e 67 6f 0d 20 32  37 38 30 20 20 20 20 20  |0 .go. 2780     |
00004be0  20 20 20 20 4f 50 54 20  46 4e 65 71 75 73 28 22  |    OPT FNequs("|
00004bf0  43 6f 70 79 20 61 6c 6c  20 66 69 6c 65 73 20 66  |Copy all files f|
00004c00  72 6f 6d 20 22 29 0d 20  32 37 39 30 20 20 20 20  |rom "). 2790    |
00004c10  20 20 20 20 20 4f 50 54  20 46 4e 65 71 75 62 28  |     OPT FNequb(|
00004c20  26 33 41 29 0d 20 32 38  30 30 20 20 20 20 20 20  |&3A). 2800      |
00004c30  20 20 20 4f 50 54 20 46  4e 65 71 75 73 28 22 30  |   OPT FNequs("0|
00004c40  20 74 6f 20 22 29 0d 20  32 38 31 30 20 20 20 20  | to "). 2810    |
00004c50  20 20 20 20 20 4f 50 54  20 46 4e 65 71 75 62 28  |     OPT FNequb(|
00004c60  26 33 41 29 0d 20 32 38  32 30 20 20 20 20 20 20  |&3A). 2820      |
00004c70  20 20 20 4f 50 54 20 46  4e 65 71 75 73 28 22 31  |   OPT FNequs("1|
00004c80  22 29 0d 20 32 38 33 30  20 20 20 20 20 20 20 20  |"). 2830        |
00004c90  20 4f 50 54 20 46 4e 65  71 75 62 28 26 30 44 29  | OPT FNequb(&0D)|
00004ca0  0d 20 32 38 34 30 20 20  20 20 20 20 20 20 20 4f  |. 2840         O|
00004cb0  50 54 20 46 4e 65 71 75  73 28 22 47 6f 20 28 59  |PT FNequs("Go (Y|
00004cc0  2f 4e 29 20 3f 20 22 29  0d 20 32 38 35 30 20 20  |/N) ? "). 2850  |
00004cd0  20 20 20 20 20 20 20 42  52 4b 0d 20 32 38 36 30  |       BRK. 2860|
00004ce0  20 2e 77 72 6f 6e 67 0d  20 32 38 37 30 20 20 20  | .wrong. 2870   |
00004cf0  20 20 20 20 20 20 42 52  4b 0d 20 32 38 38 30 20  |      BRK. 2880 |
00004d00  20 20 20 20 20 20 20 20  42 52 4b 0d 20 32 38 39  |        BRK. 289|
00004d10  30 20 20 20 20 20 20 20  20 20 4f 50 54 20 46 4e  |0         OPT FN|
00004d20  65 71 75 73 28 22 44 46  53 20 6e 6f 74 20 61 63  |equs("DFS not ac|
00004d30  74 69 76 65 22 29 0d 20  32 39 30 30 20 20 20 20  |tive"). 2900    |
00004d40  20 20 20 20 20 42 52 4b  0d 20 32 39 31 30 20 20  |     BRK. 2910  |
00004d50  20 20 20 20 20 20 20 4f  50 54 20 46 4e 65 71 75  |       OPT FNequ|
00004d60  62 28 26 46 46 29 0d 20  32 39 32 30 20 2e 6c 61  |b(&FF). 2920 .la|
00004d70  73 74 62 79 74 65 0d 20  32 39 33 30 20 5d 0d 20  |stbyte. 2930 ]. |
00004d80  32 39 34 30 20 4e 45 58  54 0d 20 32 39 35 30 20  |2940 NEXT. 2950 |
00004d90  49 4e 50 55 54 27 22 53  61 76 65 20 66 69 6c 65  |INPUT'"Save file|
00004da0  6e 61 6d 65 20 3d 20 22  66 69 6c 65 6e 61 6d 65  |name = "filename|
00004db0  24 0d 20 32 39 36 30 20  49 46 20 66 69 6c 65 6e  |$. 2960 IF filen|
00004dc0  61 6d 65 24 3d 22 22 20  45 4e 44 0d 20 32 39 37  |ame$="" END. 297|
00004dd0  30 20 24 73 61 76 65 3d  22 53 41 56 45 20 22 2b  |0 $save="SAVE "+|
00004de0  66 69 6c 65 6e 61 6d 65  24 2b 22 20 22 2b 53 54  |filename$+" "+ST|
00004df0  52 24 7e 28 48 49 4d 45  4d 29 2b 22 20 22 2b 53  |R$~(HIMEM)+" "+S|
00004e00  54 52 24 7e 28 6c 61 73  0d 20 20 20 20 20 20 74  |TR$~(las.      t|
00004e10  62 79 74 65 29 2b 22 20  46 46 46 46 38 30 30 30  |byte)+" FFFF8000|
00004e20  20 46 46 46 46 38 30 30  30 22 0d 20 32 39 38 30  | FFFF8000". 2980|
00004e30  20 58 25 3d 73 61 76 65  20 4d 4f 44 20 32 35 36  | X%=save MOD 256|
00004e40  0d 20 32 39 39 30 20 59  25 3d 73 61 76 65 20 44  |. 2990 Y%=save D|
00004e50  49 56 20 32 35 36 0d 20  33 30 30 30 20 2a 4f 50  |IV 256. 3000 *OP|
00004e60  54 31 2c 32 0d 20 33 30  31 30 20 43 41 4c 4c 20  |T1,2. 3010 CALL |
00004e70  6f 73 63 6c 69 0d 20 33  30 32 30 20 2a 4f 50 54  |oscli. 3020 *OPT|
00004e80  31 2c 30 0d 20 33 30 33  30 20 45 4e 44 0d 20 33  |1,0. 3030 END. 3|
00004e90  30 34 30 20 44 45 46 46  4e 65 71 75 62 28 62 79  |040 DEFFNequb(by|
00004ea0  74 65 29 0d 20 33 30 35  30 20 3f 50 25 3d 62 79  |te). 3050 ?P%=by|
00004eb0  74 65 0d 20 33 30 36 30  20 50 25 3d 50 25 2b 31  |te. 3060 P%=P%+1|
00004ec0  0d 20 33 30 37 30 20 3d  70 61 73 73 0d 20 33 30  |. 3070 =pass. 30|
00004ed0  38 30 20 44 45 46 46 4e  65 71 75 77 28 77 6f 72  |80 DEFFNequw(wor|
00004ee0  64 29 0d 20 33 30 39 30  20 3f 50 25 3d 77 6f 72  |d). 3090 ?P%=wor|
00004ef0  64 20 4d 4f 44 20 32 35  36 0d 20 33 31 30 30 20  |d MOD 256. 3100 |
00004f00  50 25 3f 31 3d 77 6f 72  64 20 44 49 56 20 32 35  |P%?1=word DIV 25|
00004f10  36 0d 20 33 31 31 30 20  50 25 3d 50 25 2b 32 0d  |6. 3110 P%=P%+2.|
00004f20  20 33 31 32 30 20 3d 70  61 73 73 0d 20 33 31 33  | 3120 =pass. 313|
00004f30  30 20 44 45 46 46 4e 65  71 75 64 28 64 6f 75 62  |0 DEFFNequd(doub|
00004f40  6c 65 29 0d 20 33 31 34  30 20 21 50 25 3d 64 6f  |le). 3140 !P%=do|
00004f50  75 62 6c 65 0d 20 33 31  35 30 20 50 25 3d 50 25  |uble. 3150 P%=P%|
00004f60  2b 34 0d 20 33 31 36 30  20 3d 70 61 73 73 0d 20  |+4. 3160 =pass. |
00004f70  33 31 37 30 20 44 45 46  46 4e 65 71 75 73 28 73  |3170 DEFFNequs(s|
00004f80  74 72 69 6e 67 24 29 0d  20 33 31 38 30 20 24 50  |tring$). 3180 $P|
00004f90  25 3d 73 74 72 69 6e 67  24 0d 20 33 31 39 30 20  |%=string$. 3190 |
00004fa0  50 25 3d 50 25 2b 4c 45  4e 28 73 74 72 69 6e 67  |P%=P%+LEN(string|
00004fb0  24 29 0d 20 33 32 30 30  20 3d 70 61 73 73 0d     |$). 3200 =pass.|
00004fbf
30-09-88/T\SWR13.m0
30-09-88/T\SWR13.m1
30-09-88/T\SWR13.m2
30-09-88/T\SWR13.m4
30-09-88/T\SWR13.m5