DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦e6722da7f⟧ TextFile

    Length: 163840 (0x28000)
    Types: TextFile
    Names: »SPZ.PRN«

Derivation

└─⟦692ac107c⟧ Bits:30005923 PolyPascal-80 V3.10 arbejdsdiskette 1
    └─ ⟦this⟧ »SPZ.PRN« 

TextFile

\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1


                                	.Z80
                                	TITLE	SPZ - CP/M DISK UTILITY
                                
  0032                          $VER	DEFL	'2'			;VERSION NUMBER
  0035                          $MOD	DEFL	'5'			;MODIFICATION LEVEL
                                
  0000'   20 20 20 20           	DB	'             '
  0004'   20 20 20 20           
  0008'   20 20 20 20           
  000C'   20                    
  000D'   20 20 20 53           	DB	'   SUPERZAP 2   '
  0011'   55 50 45 52           
  0015'   5A 41 50 20           
  0019'   32 20 20 20           
  001D'   20 46 4F 52           	DB	' FOR SUPERBRAIN '
  0021'   20 53 55 50           
  0025'   45 52 42 52           
  0029'   41 49 4E 20           
  002D'   20 20 20 20           	DB	'                '
  0031'   20 20 20 20           
  0035'   20 20 20 20           
  0039'   20 20 20 20           
  003D'   20 20 20 20           	DB	'    W.M.DAVIDSON'
  0041'   57 2E 4D 2E           
  0045'   44 41 56 49           
  0049'   44 53 4F 4E           
  004D'   20 20 48 2E           	DB	'  H.J.SHELDRAKE '
  0051'   4A 2E 53 48           
  0055'   45 4C 44 52           
  0059'   41 4B 45 20           
  005D'   20 20 20 20           	DB      '                '
  0061'   20 20 20 20           
  0065'   20 20 20 20           
  0069'   20 20 20 20           
  006D'   20 20 20 20           	DB	'                '
  0071'   20 20 20 20           
  0075'   20 20 20 20           
  0079'   20 20 20 20           
                                
                                ;
                                ;	CURSOR CHARACTER EQUATES (MUST BE 01H TO 01FH)
                                ;
                                
  0008                          $LEFT	EQU	008H		;CURSOR LEFT  IS ^H
  000C                          $RIGHT	EQU	00CH		;CURSOR RIGHT IS ^L
  000B                          $UP	EQU	00BH		;CURSOR UP    IS ^K
  000A                          $DOWN	EQU	00AH		;CURSOR DOWN  IS ^J
  0009                          $TAB	EQU	009H		;CURSOR TAB   IS ^I
  001B                          $ESC	EQU	01BH		;ESCAPE       IS ESC
  0016                          $INSRT	EQU	'V'-040H	;INSERT       IS ^V
  0007                          $DELETE	EQU	'G'-040H	;DELETE       IS ^G
  0011                          $QUIT	EQU	'Q'-040H	;QUIT EDIT    IS ^Q
  001A                          $END	EQU	'Z'-040H	;END EDIT     IS ^Z
                                ;
                                ; SCREEN CONTROL FOR SUPERBRAIN
                                ;
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-1


  007D'   0C 00 00 00           CLSSTR:	DB	0CH,00H,00H,00H	;CLEAR SCREEN
  0081'   1B 7E 4B 00           CLLSTR:	DB	1BH,7EH,'K',00H	;CLEAR LINE
  0085'   1B 59 00 00           CRPSTR:	DB	1BH,'Y',00H,00H	;CURSOR POSITION PREFIX
  0089'   7F                    FLAGCH:	DB	7FH		;FLAG CHARACTER IN LIST MODE
                                
                                	.LIST
                                ;
                                ;---------------- GLOBAL EQUATES ----------------
                                ;
  000D                          CR	EQU	0DH
  000A                          LF	EQU	0AH
  0000                          FALSE	EQU	000H
  00FF                          TRUE	EQU	0FFH
  0080                          CMD	EQU	80H
  0080                          FBUFF	EQU	80H
                                ;
                                ;---------------- CPM SYSTEM CALL CODES
                                ;
  0005                          CPM	EQU	05H		;CPM CALL ADDRESS
  0006                          CONIO	EQU	06H		;DIRECT CONSOLE I/O
  000D                          RESET	EQU	0DH		;RESET DISK SYSTEM
  000E                          SETDEF	EQU	0EH		;SET DEFAULT DRIVE
  000F                          OPEN	EQU	0FH		;OPEN FILE
  0010                          CLOSE	EQU	10H		;CLOSE FILE
  0011                          FNDFST	EQU	11H		;FIND FIRST DIRECTORY MATCH
  0012                          FNDNXT	EQU	12H		;FIND NEXT DIRECTORY MATCH
  0019                          GETDEF	EQU	19H		;GET CURRENT DRIVE ID
  0021                          READRN	EQU	21H		;READ RANDOM RECORD
  0022                          WRITRN	EQU	22H		;WRITE RANDOM RECORD
  0023                          FILESZ	EQU	23H		;COMPUTE FILE SIZE
  0024                          SETRN	EQU	24H		;SET RANDOM RECORD
                                
                                ;
                                ;---------------- DEFAULT FCB IMAGE
                                ;
  005C                          WRKFCB	EQU	5CH		;DEFAULT FCB ADDRESS
  005C                          WRKDR	EQU	WRKFCB+0	;DRIVE
  005D                          WRKFN	EQU	WRKDR+1		;FILE NAME BODY
  0065                          WRKFT	EQU	WRKFN+8		;FILE NAME EXTENSION
  0068                          WRKEX	EQU	WRKFT+3		;EXTENT NUMBER
  0069                          WRKS1	EQU	WRKEX+1		;CPM RESERVED
  006A                          WRKS2	EQU	WRKS1+1		;CPM RESERVED
  006B                          WRKRC	EQU	WRKS2+1		;RECORD COUNT THIS EXTENT
  006C                          WRKMP	EQU	WRKRC+1		;ALLOCATION MAP FOR EXTENT
  007C                          WRKNR	EQU	WRKMP+16	;NEXT SEQUENTIAL RECORD
  007D                          WRKRR	EQU	WRKNR+1		;2 BYTE RANDOM RECORD NUMBER
  007F                          WRKOV	EQU	WRKRR+2		;RANDOM OVERFLOW FLAG
                                
  008A'   1DA2'                 FREESP:	DW	ENDCDE		;ALLOW USER CODE INSERTION
                                
                                ;
                                ;---------------- MESSAGES
                                ;
  0109                          HLAREA	EQU	0109H		;HELP   IN LINES 01-10 (01 FOR 09)
  0E08                          DRAREA	EQU	0E08H		;DIRECTORY LINES 14-21 (14 FOR 08)
                                
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-2


  008C'   00 1D 53 55           HDRMSG:	DB	0,29,'SUPERZAP VERSION ',$VER,'.',$MOD,0
  0090'   50 45 52 5A           
  0094'   41 50 20 56           
  0098'   45 52 53 49           
  009C'   4F 4E 20 32           
  00A0'   2E 35 00              
                                
                                ;
                                ;---------------- GLOBAL WORK AREAS
                                ;
  00A3'                         MEMRY:	DS	2		;FREE MEMORY SPACE
  00A5'   FF                    READST:	DB	0FFH		;RETURN CODE FROM READ OPERATIONS
  00A6'   00                    INCH:	DB	0		;INPUT CHARACTER
  00A7'   00                    TYCURC:	DB	0		;CURRENT CHARACTER FOR TYPE
  00A8'   0000                  RELREC:	DW	0		;CURRENT RECORD NUMBER
  00AA'                         BUFPOS:	DS	1
  00AB'                         BASEAD:	DS	3
  00AE'   0000                  SAVREC:	DW	0		;SAVE RECORD DURING SET
  00B0'   0000                  SAVFSC:	DW	0		;RECORD TO BE READ
  00B2'   00                    RO:	DB	0		;READ ONLY FILE FILE
  00B3'                         NEWDE@:	DS	2		;ADDRESS OF ENTRY JUST FOUND
  00B5'                         NXTDE@:	DS	2		;NEXT POSITION IN TABLE
  00B7'   0000                  TOPDE@:	DW	0		;TOP OF DIRECTORY TABLE
  00B9'   0000                  FSTDE@:	DW	0		;BOTTOM OF DIRECTORY TABLE
  00BB'   00                    DECNT:	DB	0		;NUMBER OF ENTRIES READ
  00BC'   00                    PRTCNT:	DB	0		;NUMBER OF ENTRIES DISPLAYED
  00BD'   00                    PRTENT:	DB	0		;ENTRY NUMBER TO BE PRINTED
  00BE'                         SELDE:	DS	1		;SELECTED DIRECTORY ENTRY
  00BF'   00                    DIROFF:	DB	0		;DIRECTORY DISPLAY OFFSET
  00C0'                         DEFDRV:	DS	1		;CURRENT DRIVE ID
  00C1'                         REQDRV:	DS	1		;REQUIRED DRIVE ID
  00C2'                         CURAN:	DS	1		;CURRENT ABSOLUTE DRIVE NUMBER
  00C3'   0000                  ERRFLD:	DW	0		;ERROR FIELD ON SCREEN
  00C5'   00                    	DB	0		;END OF FIELD MARK
  00C6'   0000                  ERRTXT:	DW	0		;ADDRESS EOF ERROR TEXT
  00C8'   0000                  PRVERR:	DW	0		;ADDRESS OF PREVIOUS TEXT
  00CA'   00                    WTG:	DB	0		;NEXT PROCESS MODE
  00CB'   3F 3F 3F 3F           AFNSTR:	DB	'???????????'
  00CF'   3F 3F 3F 3F           
  00D3'   3F 3F 3F              
  00D6'   44 53 4B 3A           DSKCMD:	DB	'DSK:'
  00DA'                         PGEPTR:	DS	2		;ADDRESS OF PAGE POINTER LIST
  00DC'                         CURPG@:	DS	2		;ADDRESS OF CURRENT PAGE ENTRY
  00DE'                         MAXPG@:	DS	2		;ADDRESS OF LAST PAGE ENTRY
  00E0'                         RPANEL:	DS	1		;DISPLAY PANEL REQUEST
                                ;
                                ; SCRATCHPAD DATA
                                ;
  00E1'                         SPADDR:	DS	2		;SCRATCHPAD BUFFER ADDRESS
  00E3'                         SPTYPE:	DS	1		;NONE/PHYSICAL/RELATIVE
  00E4'                         SPSECT:	DS	2		;SECTOR NUMBER
  00E6'                         SPDRIV:	DS	1		;ABSOLUTE DRIVE NUMBER
  00E7'                         SPNAME:	DS	12		;UFN OR TRACK NUMBER
  00F3'   00                    	DB	0		;END OF FIELD MARK
  00F4'   44 72 69 76           SPDMSG:	DB	'Drive ',0
  00F8'   65 20 00              
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-3


  00FB'   20 54 72 61           SPTMSG: DB	' Track ',0
  00FF'   63 6B 20 00           
  0103'   20 53 65 63           SPSMSG:	DB	' Sector ',0
  0107'   74 6F 72 20           
  010B'   00                    
  010C'   45 6D 70 74           SPEMTY:	DB	'Empty',0
  0110'   79 00                 
                                ;
                                ;---------------- LIST MODE FCB
                                ;
  0112'                         LMDFCB	EQU	$
                                
  0112'   00                    LMDDR:	DB	0		;DRIVE
  0113'                         LMDFN:	DS	8		;FILE NAME
  011B'                         LMDFT:	DS	3		;FILE TYPE
  011E'   00                    LMDEX:	DB	0		;EXTENT NUMBER
  011F'   00                    LMDS1:	DB	0
  0120'   00                    LMDS2:	DB	0
  0121'   00                    LMDRC:	DB	0		;RECORD COUNT
  0122'                         LMDD0:	DS	16		;CLUSTER ALLOC MAP
  0132'   00                    LMDCR:	DB	0		;CURRENT RECORD
                                
                                ;
                                ; LOCAL BIOS COPY - USED TO SIMPLIFY DIRECT BIOS CALLS
                                ;
  0133'                         LBIOS 	EQU	$		;START OF LOCAL BIOS
                                
  0133'                         WBOOT:	DS	3
  0136'                         CONST:	DS	3
  0139'                         CONIN:	DS	3
  013C'                         CONOUT:	DS	3
  013F'                         LIST:	DS	3
  0142'                         PUNCH:	DS	3
  0145'                         READER:	DS	3
  0148'                         HOME:	DS	3
  014B'                         SELDSK:	DS	3
  014E'                         SETTRK:	DS	3
  0151'                         SETSEC:	DS	3
  0154'                         SETDMA:	DS	3
  0157'                         READ:	DS	3
  015A'                         WRITE:	DS	3
  015D'                         LISTST:	DS	3
  0160'                         SECTRN:	DS	3
                                
  0163'                         ELBIOS	EQU	$		;END OF LOCAL BIOS
                                
                                ;
                                ; INIT - SPZ INITIALISATION
                                ;
                                	$RTN	INIT
  0163'                   +     INIT:	DS	0
  0163'   2A 0006               	LD	HL,(06H)
  0166'   F9                    	LD	SP,HL		;SET STACK TO BASE OF BDOS
  0167'   2A 0001               	LD	HL,(1)		;LOAD BIOS VECTOR ADDRESS
  016A'   11 0133'              	LD	DE,LBIOS
  016D'   01 0030               	LD	BC,ELBIOS-LBIOS
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-4


  0170'   ED B0                 	LDIR			;SET UP LOCAL BIOS VECTOR
  0172'   21 00CB'              	LD	HL,AFNSTR
  0175'   CD 162D'              	CALL	LSEL		;SET LIST SELECTION TO ALL
  0178'   2A 008A'              	LD	HL,(FREESP)	;FIND TOP OF PROG
  017B'   22 00E1'              	LD	(SPADDR),HL	;SET SCRATCHPAD ADDRESS
  017E'   11 0080               	LD	DE,080H
  0181'   19                    	ADD	HL,DE		
  0182'   22 00A3'              	LD	(MEMRY),HL	;PUT WORK AREA ABOVE SCRATCHPAD
  0185'   AF                    	XOR	A
  0186'   32 00E3'              	LD	(SPTYPE),A	;SET SCRATCHPAD EMPTY
  0189'   21 0000               	LD	HL,0
  018C'   22 00C6'              	LD	(ERRTXT),HL	;CLEAR ERROR MESSAGE FIELD
  018F'   22 00C8'              	LD	(PRVERR),HL	;AND PREVIOUS ERROR
  0192'   0E 19                 	LD	C,GETDEF
  0194'   CD 0005               	CALL	CPM		;GET DEFAULT DRIVE NUMBER
  0197'   32 00C0'              	LD	(DEFDRV),A	;SAVE IT
  019A'   32 00C2'              	LD	(CURAN),A	;SET CURRENT ABSOLUTE DISK NUMBER
  019D'   3A 005C               	LD	A,(WRKDR)
  01A0'   B7                    	OR	A
  01A1'   28 04                 	JR	Z,INIT01	;IF DRIVE ID IN COMMAND
  01A3'   3D                    	DEC	A
  01A4'   32 00C2'              	LD	(CURAN),A	;USE THAT AS CURRENT
  01A7'                         INIT01	EQU	$		;ENDIF
  01A7'   21 0080               	LD	HL,CMD		;POINT TO COMMAND AREA
  01AA'                         INIT02	EQU	$		;LOOP
  01AA'   23                    	INC	HL
  01AB'   7E                    	LD	A,(HL)
  01AC'   B7                    	OR	A
  01AD'   28 1E                 	JR	Z,INIT05	;QUIT IF END OF COMMAND
  01AF'   FE 20                 	CP	' '
  01B1'   28 F7                 	JR	Z,INIT02	;IGNORE SPACES
  01B3'   23                    	INC	HL
  01B4'   7E                    	LD	A,(HL)
  01B5'   FE 3A                 	CP	':'		
  01B7'   20 03                 	JR	NZ,INIT03	;IF CMD IS DRIVE ID
  01B9'   23                    	INC	HL		;SKIP PAST IT
  01BA'   18 01                 	JR	INIT04
  01BC'                         INIT03	EQU	$		;ELSE
  01BC'   2B                    	DEC	HL		;POINT TO FIRST CHARACTER
  01BD'                         INIT04	EQU	$		;ENDIF
  01BD'   11 00D6'              	LD	DE,DSKCMD
  01C0'   01 0004               	LD	BC,4
  01C3'   CD 1B0E'              	CALL	CPST
  01C6'   20 05                 	JR	NZ,INIT05	;IF DISK OPTION
  01C8'   CD 1C9C'              	CALL	SETP		;SET DISK MODE
  01CB'   18 20                 	JR	INIT06
  01CD'                         INIT05	EQU	$		;ELSE
  01CD'   CD 1C90'              	CALL	SETD		;ASSUME DIRECTORY MODE
  01D0'   21 005D               	LD	HL,WRKFN
  01D3'   7E                    	LD	A,(HL)
  01D4'   FE 20                 	CP	' '
  01D6'   28 15                 	JR	Z,INIT08	;IF NOT NULL OPTION
  01D8'   06 0B                 	LD	B,11
  01DA'                         INIT09	EQU	$		;LOOP
  01DA'   7E                    	LD	A,(HL)
  01DB'   FE 3F                 	CP	'?'
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-5


  01DD'   28 08                 	JR	Z,INIT10	;EXIT IF AFN INDICATED
  01DF'   23                    	INC	HL
  01E0'   10 F8                 	DJNZ	INIT09		;TILL FN AND FT SCANNED
  01E2'   CD 1C96'              	CALL	SETF		;MUST BE UFN
  01E5'   18 06                 	JR	INIT12
  01E7'                         INIT10	EQU	$		;ON '?' FOUND
  01E7'   21 005D               	LD	HL,WRKFN
  01EA'   CD 162D'              	CALL	LSEL		;SET LIST SELECTION TO AFN GIVEN
  01ED'                         INIT12	EQU	$		;ENDIF
  01ED'                         INIT08	EQU	$		;ENDIF
  01ED'                         INIT06	EQU	$		;ENDIF
  01ED'   3A 00C2'              	LD	A,(CURAN)	
  01F0'   CD 1958'              	CALL	CHDR		;INITIALISE DISK CONTROL BLOCKS
  01F3'   20 0C                 	JR	NZ,INIT13	;IF ILLEGAL DISK
  01F5'   3A 00C0'              	LD	A,(DEFDRV)
  01F8'   CD 1958'              	CALL	CHDR		;USE DEFAULT DISK
  01FB'   21 0223'              	LD	HL,ILDMSG
  01FE'   22 00C6'              	LD	(ERRTXT),HL	;SET ERROR MESSAGE
  0201'                         INIT13	EQU	$
                                ;
                                ; MAIN - SPZ MAINLINE
                                ;
                                	$RTN	MAIN
  0201'                   +     MAIN:	DS	0
  0201'                         MAIN01	EQU	$		;LOOP
  0201'   3A 00CA'              	LD	A,(WTG)
                                	$MTCH	MAINLS		;TEST CODE
  0204'   21 023D'        +     	LD	HL,MAINLS
  0207'   CD 1C31'        +     	CALL	MTCH
  020A'   20 08                 	JR	NZ,MAIN02	;IF INVALID ACTION EXIT
                                	$EXVA	MAINVC		;EXEC ACTION
  020C'   11 0242'        +     	LD	DE,MAINVC
  020F'   CD 1C43'        +     	CALL	DOIT
  0212'   18 ED                 	JR	MAIN01
  0214'                         MAIN02	EQU	$		;ENDLOOP
  0214'   CD 1CED'              	CALL	CLRS
  0217'   3A 00C0'              	LD	A,(DEFDRV)
  021A'   5F                    	LD	E,A
  021B'   0E 0E                 	LD	C,SETDEF
  021D'   CD 0005               	CALL	CPM		;RESTORE ORIGINAL DEFAULT
  0220'   C3 0000               	JP	0		;EXIT TO SYSTEM
                                
  0223'   2A 2A 20 49           ILDMSG:	DB	'** Invalid Disk Specified',0
  0227'   6E 76 61 6C           
  022B'   69 64 20 44           
  022F'   69 73 6B 20           
  0233'   53 70 65 63           
  0237'   69 66 69 65           
  023B'   64 00                 
                                ;
                                ; MAINLINE ACTION VECTOR
                                ;
  023D'   04 58 46 44           MAINLS:	DB	4,'XFDP'
  0241'   50                    
  0242'                         MAINVC	EQU	$
  0242'   024A'                 	DW	ENDR		;END RUN
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-6


  0244'   024F'                 	DW	FDMD		;FILE DISPLAY MODE
  0246'   06AB'                 	DW	DRMD		;DIRECTORY MODE
  0248'   0F99'                 	DW	PSMD		;PHYSICAL SECTOR MODE
                                
                                ;
                                ; ENDR - END SPZ RUN
                                ;
                                	$RTN	ENDR
  024A'                   +     ENDR:	DS	0
  024A'   AF                    	XOR	A
  024B'   32 00CA'              	LD	(WTG),A
  024E'   C9                    	RET
                                
                                ;
                                ; FDMD - FILE DISPLAY MODE
                                ;
                                	$RTN	FDMD
  024F'                   +     FDMD:	DS	0
  024F'   2A 030A'              	LD	HL,(FDMDER)
  0252'   22 00C3'              	LD	(ERRFLD),HL	;SET ERROR FIELD POINTER
  0255'   3E FF                 	LD	A,0FFH
  0257'   32 0461'              	LD	(FDMDSI),A	;REQUEST SI DISPLAY
  025A'   32 00E0'              	LD	(RPANEL),A	;REQUEST PANEL DISPLAY
  025D'   CD 0F53'              	CALL	TFLE
  0260'   3A 0F98'              	LD	A,(FLERR)
  0263'   B7                    	OR	A
  0264'   28 06                 	JR	Z,FDMD03	;IF FILE ERROR
  0266'   CD 1C90'              	CALL	SETD		;SET DIRECTORY MODE
  0269'   C3 02DB'              	JP	FDMD04
  026C'                         FDMD03	EQU	$		;ELSE
  026C'                         FDMD05	EQU	$		;LOOP
  026C'   3A 00E0'              	LD	A,(RPANEL)
  026F'   B7                    	OR	A
  0270'   28 25                 	JR	Z,FDMD11	;IF PANEL REQUIRED
  0272'   AF                    	XOR	A
  0273'   32 00E0'              	LD	(RPANEL),A	;RESET REQUEST
                                	$NPANEL	FDMDPN		;DISPLAY FILE MODE PANEL
  0276'   CD 1CFE'        +     	CALL	DHDR
  0279'   21 032A'        +     	LD	HL,FDMDPN	;POINT TO PANEL
  027C'   CD 1D30'        +     	CALL	DPNL		;DISPLAY IT
  027F'   21 030C'              	LD	HL,FILEMS	;POINT TO FILE MESSAGE
  0282'   3A 06AA'              	LD	A,(COMFLG)
  0285'   B7                    	OR	A
  0286'   28 03                 	JR	Z,FDMD09	;IF .COM FILE
  0288'   21 031B'              	LD	HL,LOADMS	;POINT TO LOAD MESSAGE
  028B'                         FDMD09	EQU	$		;ENDIF
  028B'   CD 1D3A'              	CALL	DFLD
                                	$FLD	FSPMSG
  028E'   21 042B'        +     	LD	HL,FSPMSG
  0291'   CD 1D3A'        +     	CALL	DFLD
  0294'   CD 05CF'              	CALL	DSPI		;DISPLAY SCRATCHPAD INFO
  0297'                         FDMD11	EQU	$		;ENDIF
  0297'   CD 1BFA'              	CALL	ERRP		;PROCESS ERRORS
  029A'   3A 0461'              	LD	A,(FDMDSI)
  029D'   B7                    	OR	A
  029E'   28 0D                 	JR	Z,FDMD10	;IF SI DISPLAY REQUIRED
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-7


  02A0'   CD 067E'              	CALL	DFSI		;DISPLAY FILE SECTOR INFO
  02A3'   21 0080               	LD	HL,FBUFF
  02A6'   CD 17C8'              	CALL	WRBF		;DISPLAY BUFFER CONTENTS
  02A9'   AF                    	XOR	A
  02AA'   32 0461'              	LD	(FDMDSI),A	;RESET REQUEST
  02AD'                         FDMD10	EQU	$		;ENDIF
  02AD'                         FDMD07	EQU	$		;LOOP
                                	$IFLD	SELMSG		;PROMPT SELMSG AND GET COMMAND
  02AD'   21 02DF'        +     	LD	HL,SELMSG		;POINT TO FIELD
  02B0'   CD 1D3A'        +     	CALL	DFLD			;DISPLAY IT
  02B3'   CD 1CC7'        +     	CALL	CHRF			;GET INPUT
                                	$MTCH	FDMDLS
  02B6'   21 0445'        +     	LD	HL,FDMDLS
  02B9'   CD 1C31'        +     	CALL	MTCH
  02BC'   28 05                 	JR	Z,FDMD06	;EXITIF VALID
  02BE'   CD 1CDD'              	CALL	ALRM		;SOUND THE ALARM
  02C1'   18 EA                 	JR	FDMD07
  02C3'                         FDMD06	EQU	$		;ENDLOOP
                                	$EXVA	FDMDVC
  02C3'   11 044F'        +     	LD	DE,FDMDVC
  02C6'   CD 1C43'        +     	CALL	DOIT
  02C9'   3A 00CA'              	LD	A,(WTG)
  02CC'   FE 46                 	CP	'F'
  02CE'   20 03                 	JR	NZ,FDMD08	;EXIT IF MODE NO LONGER F
  02D0'   C3 026C'              	JP	FDMD05
  02D3'                         FDMD08	EQU	$		;ENDLOOP
  02D3'   0E 10                 	LD	C,CLOSE
  02D5'   11 005C               	LD	DE,WRKFCB
  02D8'   CD 0005               	CALL	CPM
  02DB'                         FDMD04	EQU	$		;ENDIF
  02DB'   C9                    	RET
                                
  02DC'   43 4F 4D              COMSTR:	DB	'COM'		;.COM FILE TYPE
                                
                                ;
                                ; FILE DISPLAY MODE MESSAGES, PANEL AND ACTION VECTOR
                                ;
  02DF'   09 0A 53 65           SELMSG:	DB	9,10,'Select Function ===> ',00
  02E3'   6C 65 63 74           
  02E7'   20 46 75 6E           
  02EB'   63 74 69 6F           
  02EF'   6E 20 3D 3D           
  02F3'   3D 3E 20 00           
  02F7'   0B 24 45 6E           SETMSG:	DB	11,36,'Enter Hex Sector',0	;OVERLAID BY CURMSG
  02FB'   74 65 72 20           
  02FF'   48 65 78 20           
  0303'   53 65 63 74           
  0307'   6F 72 00              
  030A'   07 00                 FDMDER:	DB	7,0				;ERROR POSITION
  030C'   0B 35 46 69           FILEMS:	DB	11,53,'File Offset ',0
  0310'   6C 65 20 4F           
  0314'   66 66 73 65           
  0318'   74 20 00              
  031B'   0B 35 4C 6F           LOADMS:	DB	11,53,'Load Address',0
  031F'   61 64 20 41           
  0323'   64 64 72 65           
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-8


  0327'   73 73 00              
                                
  032A'   0E                    FDMDPN:	DB	14				;FIELD COUNT
  032B'   02 00 4E 20           	DB	02,00,'N  Next sector',0
  032F'   20 4E 65 78           
  0333'   74 20 73 65           
  0337'   63 74 6F 72           
  033B'   00                    
  033C'   03 00 50 20           	DB	03,00,'P  Previous sector',0
  0340'   20 50 72 65           
  0344'   76 69 6F 75           
  0348'   73 20 73 65           
  034C'   63 74 6F 72           
  0350'   00                    
  0351'   02 16 54 20           	DB	02,22,'T  Top of file',0
  0355'   20 54 6F 70           
  0359'   20 6F 66 20           
  035D'   66 69 6C 65           
  0361'   00                    
  0362'   03 16 45 20           	DB	03,22,'E  Last sector of file',0
  0366'   20 4C 61 73           
  036A'   74 20 73 65           
  036E'   63 74 6F 72           
  0372'   20 6F 66 20           
  0376'   66 69 6C 65           
  037A'   00                    
  037B'   02 36 5A 20           	DB	02,54,'Z  Exit from Superzap',0
  037F'   20 45 78 69           
  0383'   74 20 66 72           
  0387'   6F 6D 20 53           
  038B'   75 70 65 72           
  038F'   7A 61 70 00           
  0393'   03 36 4C 20           	DB	03,54,'L  Exit to file list',0
  0397'   20 45 78 69           
  039B'   74 20 74 6F           
  039F'   20 66 69 6C           
  03A3'   65 20 6C 69           
  03A7'   73 74 00              
  03AA'   04 00 43 20           	DB	04,00,'C  Change Sector',0
  03AE'   20 43 68 61           
  03B2'   6E 67 65 20           
  03B6'   53 65 63 74           
  03BA'   6F 72 00              
  03BD'   04 16 53 20           	DB	04,22,'S  Select Sector',0
  03C1'   20 53 65 6C           
  03C5'   65 63 74 20           
  03C9'   53 65 63 74           
  03CD'   6F 72 00              
  03D0'   04 36 58 20           	DB	04,54,'X  Scratchpad operations',0
  03D4'   20 53 63 72           
  03D8'   61 74 63 68           
  03DC'   70 61 64 20           
  03E0'   6F 70 65 72           
  03E4'   61 74 69 6F           
  03E8'   6E 73 00              
  03EB'   0B 04 46 69           	DB	11,04,'File-Name',0
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-9


  03EF'   6C 65 2D 4E           
  03F3'   61 6D 65 00           
  03F7'   0B 10 41 63           	DB	11,16,'Access',0
  03FB'   63 65 73 73           
  03FF'   00                    
  0400'   0B 24 43 75           CURMSG:	DB	11,36,'Current-Sector  ',0	;OVERLAID BY SETMSG
  0404'   72 72 65 6E           
  0408'   74 2D 53 65           
  040C'   63 74 6F 72           
  0410'   20 20 00              
  0413'   0C 00                 FILE:	DB	12,00
  0415'   64 3A                 DRIVNM:	DB	'd:'
  0417'   66 69 6C 65           FILENM:	DB	'filename.typ',0
  041B'   6E 61 6D 65           
  041F'   2E 74 79 70           
  0423'   00                    
  0424'   0C 11 52 2F           	DB	12,17,'R/'
  0428'   73 20 00              FDMDRS:	DB	's ',0				;ACCESS INDICATOR
  042B'   06 00 53 63           FSPMSG:	DB	06,00,'Scratchpad :- ',0
  042F'   72 61 74 63           
  0433'   68 70 61 64           
  0437'   20 3A 2D 20           
  043B'   00                    
                                ;
                                ; FILE STATISTICS FIELDS
                                ;
  043C'   0C 29 00              WRSNFL:	DB	12,41,0
  043F'   0C 37 00              WRFOFL:	DB	12,55,0
  0442'   0C 2D 00              SFSNIP:	DB	12,45,0
                                
  0445'   09 4E 43 50           FDMDLS:	DB	9,'NCPLTESZX'
  0449'   4C 54 45 53           
  044D'   5A 58                 
  044F'                         FDMDVC	EQU	$
  044F'   0462'                 	DW	NXFS		;NEXT FILE SECTOR
  0451'   049A'                 	DW	FSCH		;FILE SECTOR CHANGE
  0453'   0479'                 	DW	PRFS		;PREVIOUS FILE SECTOR
  0455'   1C90'                 	DW	SETD		;SELECT DIRECTORY MODE
  0457'   04BF'                 	DW	FRFS		;POSITION TO FIRST FILE SECTOR
  0459'   04CE'                 	DW	LSFS		;POSITION TO LAST FILE SECTOR
  045B'   04E6'                 	DW	SFSN		;SET FILE SECTOR NUMBER
  045D'   1CA2'                 	DW	SETX		;SET EXIT MODE
  045F'   0568'                 	DW	FSPM		;SCRATCHPAD MANAGER
                                
  0461'                         FDMDSI:	DS	1		;SI REQUEST FLAG
                                
                                ;
                                ; NXFS - READ NEXT FILE SECTOR
                                ;
                                	$RTN	NXFS
  0462'                   +     NXFS:	DS	0
  0462'   2A 00A8'              	LD	HL,(RELREC)
  0465'   23                    	INC	HL
  0466'   22 00A8'              	LD	(RELREC),HL	;INCREMENT RECORD NUMBER
  0469'   CD 1B96'              	CALL	RDFS		;ATTEMPT TO READ RECORD
  046C'   20 07                 	JR	NZ,NXFS02	;IF GOOD READ
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-10


  046E'   3E FF                 	LD	A,TRUE
  0470'   32 0461'              	LD	(FDMDSI),A	;REQUEST SI DISPLAY
  0473'   18 03                 	JR	NXFS01
  0475'                         NXFS02	EQU	$		;ELSE
  0475'   CD 1CDD'              	CALL	ALRM		;SOUND ALARM
  0478'                         NXFS01	EQU	$		;ENDIF
  0478'   C9                    	RET
                                
                                ;
                                ; PRFS - READ PREVIOUS FILE SECTOR
                                ;
                                	$RTN	PRFS
  0479'                   +     PRFS:	DS	0
  0479'   2A 00A8'              	LD	HL,(RELREC)
  047C'   7C                    	LD	A,H
  047D'   B5                    	OR	L
  047E'   20 05                 	JR	NZ,PRFS01	;IF RECORD ZERO
  0480'   CD 1CDD'              	CALL	ALRM		;SOUND ALARM
  0483'   18 14                 	JR	PRFS02
  0485'                         PRFS01	EQU	$
  0485'   2B                    	DEC	HL
  0486'   22 00A8'              	LD	(RELREC),HL	;DECREMENT RECORD POINTER
  0489'   CD 1B96'              	CALL	RDFS		;ATTEMPT TO READ IT
  048C'   20 08                 	JR	NZ,PRFS03	;IF GOOD READ
  048E'   3E FF                 	LD	A,TRUE
  0490'   32 0461'              	LD	(FDMDSI),A	;REQUEST SI DISPLAY
  0493'   C3 0499'              	JP	PRFS04
  0496'                         PRFS03	EQU	$		;ELSE
  0496'   CD 1CDD'              	CALL	ALRM		;SOUND ALARM
  0499'                         PRFS04	EQU	$		;ENDIF
  0499'                         PRFS02	EQU	$		;ENDIF
  0499'   C9                    	RET
                                
                                ;
                                ; FSCH - FILE SECTOR CHANGE
                                ;
                                	$RTN	FSCH
  049A'                   +     FSCH:	DS	0
  049A'   3A 00B2'              	LD	A,(RO)
  049D'   B7                    	OR	A
  049E'   28 05                 	JR	Z,FSCH01	;IF READ ONLY FILE
  04A0'   CD 1CDD'              	CALL	ALRM		;SOUND THE ALARM
  04A3'   18 19                 	JR	FSCH02
  04A5'                         FSCH01	EQU	$		;ELSE
  04A5'   CD 1648'              	CALL	SCCH		;GO INTO SECTOR CHANGE MODE
  04A8'   3A 16A1'              	LD	A,(SCCHWR)
  04AB'   B7                    	OR	A
  04AC'   28 05                 	JR	Z,FSCH03	;IF WRITE REQUIRED
  04AE'   CD 1BBE'              	CALL	WRFS		;WRITE OUT SECTOR
  04B1'   18 03                 	JR	FSCH04
  04B3'                         FSCH03	EQU	$		;ELSE
  04B3'   CD 1B96'              	CALL	RDFS		;READ SECTOR
  04B6'                         FSCH04	EQU	$		;ENDIF
  04B6'   3E FF                 	LD	A,TRUE
  04B8'   32 00E0'              	LD	(RPANEL),A	;REDISPLAY FILE MODE PANEL
  04BB'   32 0461'              	LD	(FDMDSI),A	;REQUEST SI DISPLAY
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-11


  04BE'                         FSCH02	EQU	$		;ENDIF
  04BE'   C9                    	RET			
                                
                                ;
                                ; FRFS - POSITION TO FIRST FILE SECTOR
                                ;
                                	$RTN	FRFS
  04BF'                   +     FRFS:	DS	0
  04BF'   21 0000               	LD	HL,0
  04C2'   22 00A8'              	LD	(RELREC),HL
  04C5'   CD 1B96'              	CALL	RDFS		;READ THE SECTOR
  04C8'   3E FF                 	LD	A,TRUE
  04CA'   32 0461'              	LD	(FDMDSI),A	;REQUEST SI DISPLAY
  04CD'   C9                    	RET
                                
                                ;
                                ; LSFS - POSITION TO LAST FILE SECTOR
                                ;
                                	$RTN	LSFS
  04CE'                   +     LSFS:	DS	0
  04CE'   11 005C               	LD	DE,WRKFCB
  04D1'   0E 23                 	LD	C,FILESZ	;COMPUTE FILE SIZE
  04D3'   CD 0005               	CALL	CPM
  04D6'   2A 007D               	LD	HL,(WRKRR)
  04D9'   2B                    	DEC	HL
  04DA'   22 00A8'              	LD	(RELREC),HL	;SET UP RECORD TO READ
  04DD'   CD 1B96'              	CALL	RDFS		;READ THE RECORD
  04E0'   3E FF                 	LD	A,TRUE
  04E2'   32 0461'              	LD	(FDMDSI),A	;REQUEST SI DISPLAY
  04E5'   C9                    	RET
                                
                                ;
                                ; SFSN - SET FILE SECTOR NUMBER
                                ;
                                	$RTN	SFSN
  04E6'                   +     SFSN:	DS	0
  04E6'   21 02DF'              	LD	HL,SELMSG
  04E9'   CD 1D48'              	CALL	CFLD		;CLEAR FUNCTION PROMPT
  04EC'   2A 00A8'              	LD	HL,(RELREC)
  04EF'   22 00AE'              	LD	(SAVREC),HL	;SAVE RECORD NUMBER
                                	$FLD	SETMSG		;DISPLAY SET MESSAGE
  04F2'   21 02F7'        +     	LD	HL,SETMSG
  04F5'   CD 1D3A'        +     	CALL	DFLD
  04F8'   21 0000               	LD	HL,0
  04FB'   22 00A8'              	LD	(RELREC),HL	;ZERO RECORD NUMBER
  04FE'                         SFSN01	EQU	$
  04FE'   CD 067E'              	CALL	DFSI		;DISPLAY FILE SECTOR INFO
                                	$IFLD	SFSNIP		;POSITION AND GET INPUT
  0501'   21 0442'        +     	LD	HL,SFSNIP		;POINT TO FIELD
  0504'   CD 1D3A'        +     	CALL	DFLD			;DISPLAY IT
  0507'   CD 1CC7'        +     	CALL	CHRF			;GET INPUT
                                	$MTCH	HEXCHR
  050A'   21 1947'        +     	LD	HL,HEXCHR
  050D'   CD 1C31'        +     	CALL	MTCH
  0510'   20 0C                 	JR	NZ,SFSN02	;IF VALID
  0512'   EB                    	EX	DE,HL		;DIGIT TO DE
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-12


  0513'   2A 00A8'              	LD	HL,(RELREC)
  0516'   CD 1BF4'              	CALL	H16D		;HL=HL*16+DIGIT
  0519'   22 00A8'              	LD	(RELREC),HL	;SAVE NEW RECORD NUMBER
  051C'   18 30                 	JR	SFSN03
  051E'                         SFSN02	EQU	$
  051E'   FE 1B                 	CP	$ESC
  0520'   20 08                 	JR	NZ,SFSN04	;ELSE IF ESC
  0522'   2A 00AE'              	LD	HL,(SAVREC)
  0525'   22 00A8'              	LD	(RELREC),HL	;RESTORE SECTOR NUMBER
  0528'   18 24                 	JR	SFSN03
  052A'                         SFSN04	EQU	$
  052A'   FE 08                 	CP	$LEFT
  052C'   20 0B                 	JR	NZ,SFSN06	;ELSE IF BACKSPACE
  052E'   21 00A9'              	LD	HL,RELREC+1
  0531'   AF                    	XOR	A
  0532'   ED 67                 	RRD
  0534'   2B                    	DEC	HL
  0535'   ED 67                 	RRD			;RELREC=RELREC/16
  0537'   18 15                 	JR	SFSN03
  0539'                         SFSN06	EQU	$
  0539'   FE 0D                 	CP	CR
  053B'   20 0E                 	JR	NZ,SFSN07	;ELSE IF C/R
  053D'   CD 1B96'              	CALL	RDFS		;READ SECTOR
  0540'   28 07                 	JR	Z,SFSN08	;IF BAD READ
  0542'   CD 1CDD'              	CALL	ALRM		;SOUND THE ALARM
  0545'   AF                    	XOR	A
  0546'   32 00A6'              	LD	(INCH),A	;DONT EXIT
  0549'                         SFSN08	EQU	$		;ENDIF
  0549'   18 03                 	JR	SFSN03
  054B'                         SFSN07	EQU	$		;ELSE 
  054B'   CD 1CDD'              	CALL	ALRM		;ERROR
  054E'                         SFSN03	EQU	$
  054E'   3A 00A6'              	LD	A,(INCH)
  0551'   FE 0D                 	CP	CR
  0553'   28 07                 	JR	Z,SFSN99	;EXITIF C/R
  0555'   FE 1B                 	CP	$ESC
  0557'   28 03                 	JR	Z,SFSN99	;OR ESC
  0559'   C3 04FE'              	JP	SFSN01
  055C'                         SFSN99	EQU	$		;ENDLOOP
                                	$FLD	CURMSG		;REDISPLAY CURRENT SECTOR MESSAGE
  055C'   21 0400'        +     	LD	HL,CURMSG
  055F'   CD 1D3A'        +     	CALL	DFLD
  0562'   3E FF                 	LD	A,TRUE
  0564'   32 0461'              	LD	(FDMDSI),A	;REQUEST DISPLAY
  0567'   C9                    	RET
                                ;
                                ; FSPM - FILE SCRATCHPAD MODE
                                ;
                                	$RTN	FSPM
  0568'                   +     FSPM:	DS	0
                                	$NPANEL	PSPMPN		;DISPLAY PANEL
  0568'   CD 1CFE'        +     	CALL	DHDR
  056B'   21 1534'        +     	LD	HL,PSPMPN	;POINT TO PANEL
  056E'   CD 1D30'        +     	CALL	DPNL		;DISPLAY IT
                                	$FLD	PSPCUR		;POSITION FOR CURRENT INFO
  0571'   21 15AA'        +     	LD	HL,PSPCUR
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-13


  0574'   CD 1D3A'        +     	CALL	DFLD
  0577'   3A 00C2'              	LD	A,(CURAN)
  057A'   C6 41                 	ADD	A,41H
  057C'   CD 1CCE'              	CALL	CHRO		;DISPLAY DRIVE
  057F'   3E 3A                 	LD	A,':'
  0581'   CD 1CCE'              	CALL	CHRO
                                	$STRO	FILENM
  0584'   21 0417'        +     	LD	HL,FILENM
  0587'   CD 1D62'        +     	CALL	STRO
                                	$STRO	SPSMSG
  058A'   21 0103'        +     	LD	HL,SPSMSG
  058D'   CD 1D62'        +     	CALL	STRO
                                	$HEXW	RELREC		;SECTOR
  0590'   2A 00A8'        +     	LD	HL,(RELREC)
  0593'   CD 1D8B'        +     	CALL	HEXW
                                	$FLD	PSPSPD		;POSITION FOR S/P DATA
  0596'   21 15BB'        +     	LD	HL,PSPSPD
  0599'   CD 1D3A'        +     	CALL	DFLD
  059C'   CD 161A'              	CALL	DSPD		;DISPLAY SCRATCHPAD DATA
  059F'   CD 05B8'              	CALL	SPCI		;GET COMMAND
                                	$EXVA	FSPMV		;PROCESS COMMAND
  05A2'   11 05B1'        +     	LD	DE,FSPMV
  05A5'   CD 1C43'        +     	CALL	DOIT
  05A8'   3E FF                 	LD	A,0FFH
  05AA'   32 00E0'              	LD	(RPANEL),A	;REQUEST PANEL
  05AD'   32 0461'              	LD	(FDMDSI),A	;REQUEST SECTOR INFO
  05B0'   C9                    	RET
                                
  05B1'   05B7'                 FSPMV:	DW	FSPX
  05B3'   0655'                 	DW	FLSP
  05B5'   0628'                 	DW	FXSP
                                
                                	$RTN	FSPX
  05B7'                   +     FSPX:	DS	0
  05B7'   C9                    	RET
                                ;
                                ; SPCI - GET SCRATCHPAD COMMAND
                                ;
                                	$RTN	SPCI
  05B8'                   +     SPCI:	DS	0
  05B8'                         SPCI01	EQU	$		;LOOP
                                	$IFLD	SELMSG		;GET COMMAND
  05B8'   21 02DF'        +     	LD	HL,SELMSG		;POINT TO FIELD
  05BB'   CD 1D3A'        +     	CALL	DFLD			;DISPLAY IT
  05BE'   CD 1CC7'        +     	CALL	CHRF			;GET INPUT
                                	$MTCH	PSPML
  05C1'   21 15CC'        +     	LD	HL,PSPML
  05C4'   CD 1C31'        +     	CALL	MTCH
  05C7'   28 05                 	JR	Z,SPCI02	;EXIT IF VALID
  05C9'   CD 1CDD'              	CALL	ALRM		;SOUND ALARM
  05CC'   18 EA                 	JR	SPCI01
  05CE'                         SPCI02	EQU	$		;ENDLOOP
  05CE'   C9                    	RET
                                ;
                                ; DSPI - DISPLAY S/P INFO
                                ;
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-14


                                	$RTN	DSPI
  05CF'                   +     DSPI:	DS	0
  05CF'   3A 00E3'              	LD	A,(SPTYPE)
  05D2'   B7                    	OR	A
  05D3'   20 08                 	JR	NZ,DSPI01	;IF EMPTY
                                	$STRO	SPEMTY
  05D5'   21 010C'        +     	LD	HL,SPEMTY
  05D8'   CD 1D62'        +     	CALL	STRO
  05DB'   18 4A                 	JR	DSPI02
  05DD'                         DSPI01	EQU	$
  05DD'   3D                    	DEC	A
  05DE'   20 28                 	JR	NZ,DSPI03	;ELSE IF PHYSICAL
                                	$STRO	SPDMSG
  05E0'   21 00F4'        +     	LD	HL,SPDMSG
  05E3'   CD 1D62'        +     	CALL	STRO
  05E6'   3A 00E6'              	LD	A,(SPDRIV)
  05E9'   C6 41                 	ADD	A,41H
  05EB'   CD 1CCE'              	CALL	CHRO		;DISPLAY DRIVE
                                	$STRO	SPTMSG
  05EE'   21 00FB'        +     	LD	HL,SPTMSG
  05F1'   CD 1D62'        +     	CALL	STRO
                                	$HEXW	SPNAME		;TRACK
  05F4'   2A 00E7'        +     	LD	HL,(SPNAME)
  05F7'   CD 1D8B'        +     	CALL	HEXW
                                	$STRO	SPSMSG
  05FA'   21 0103'        +     	LD	HL,SPSMSG
  05FD'   CD 1D62'        +     	CALL	STRO
                                	$HEXW	SPSECT		;SECTOR
  0600'   2A 00E4'        +     	LD	HL,(SPSECT)
  0603'   CD 1D8B'        +     	CALL	HEXW
  0606'   18 1F                 	JR	DSPI02
  0608'                         DSPI03	EQU	$		;ELSE FILE RELATIVE
  0608'   3A 00E6'              	LD	A,(SPDRIV)
  060B'   C6 41                 	ADD	A,041H
  060D'   CD 1CCE'              	CALL	CHRO
  0610'   3E 3A                 	LD	A,':'
  0612'   CD 1CCE'              	CALL	CHRO
                                	$STRO	SPNAME		;DISPLAY FILE NAME
  0615'   21 00E7'        +     	LD	HL,SPNAME
  0618'   CD 1D62'        +     	CALL	STRO
                                	$STRO	SPSMSG
  061B'   21 0103'        +     	LD	HL,SPSMSG
  061E'   CD 1D62'        +     	CALL	STRO
                                	$HEXW	SPSECT		;AND SECTOR
  0621'   2A 00E4'        +     	LD	HL,(SPSECT)
  0624'   CD 1D8B'        +     	CALL	HEXW
  0627'                         DSPI02	EQU	$		;ENDIF
  0627'   C9                    	RET
                                
                                ;
                                ; FXSP - EXCHANGE WITH SCRATCHPAD
                                ;
                                	$RTN	FXSP
  0628'                   +     FXSP:	DS	0
  0628'   3A 00E3'              	LD	A,(SPTYPE)
  062B'   B7                    	OR	A
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-15


  062C'   20 05                 	JR	NZ,FXSP01	;IF PAD EMPTY
  062E'   CD 1CDD'              	CALL	ALRM		;RING BELL
  0631'   18 21                 	JR	FXSP02
  0633'                         FXSP01	EQU	$		;ELSE
  0633'   3A 00B2'              	LD	A,(RO)
  0636'   B7                    	OR	A
  0637'   28 05                 	JR	Z,FXSP03	;IF READ ONLY
  0639'   CD 1CDD'              	CALL	ALRM		;ERROR
  063C'   18 16                 	JR	FXSP04		;ELSE
  063E'                         FXSP03	EQU	$
  063E'   ED 4B 00E1'           	LD	BC,(SPADDR)
  0642'   CD 0154'              	CALL	SETDMA		;SET CPM BUFFER
  0645'   CD 1BBE'              	CALL	WRFS		;WRITE BUFFER
  0648'   01 0080               	LD	BC,FBUFF
  064B'   CD 0154'              	CALL	SETDMA		;RESTORE DMA
  064E'   CD 0655'              	CALL	FLSP		;COPY OLD BUFFER
  0651'   CD 1B96'              	CALL	RDFS		;RE READ SECTOR
  0654'                         FXSP04	EQU	$		;ENDIF
  0654'                         FXSP02	EQU	$		;ENDIF
  0654'   C9                    	RET
                                ;
                                ; FLSP - LOAD SCRATCHPAD (LOGICAL)
                                ;
                                	$RTN	FLSP
  0655'                   +     FLSP:	DS	0
  0655'   21 0080               	LD	HL,FBUFF
  0658'   ED 5B 00E1'           	LD	DE,(SPADDR)
  065C'   01 0080               	LD	BC,128
  065F'   ED B0                 	LDIR			;COPY THE BUFFER
  0661'   3A 00C2'              	LD	A,(CURAN)
  0664'   32 00E6'              	LD	(SPDRIV),A	;SET DRIV
  0667'   21 0417'              	LD	HL,FILENM
  066A'   11 00E7'              	LD	DE,SPNAME
  066D'   01 000C               	LD	BC,12
  0670'   ED B0                 	LDIR			;COPY FILE NAME
  0672'   2A 00A8'              	LD	HL,(RELREC)
  0675'   22 00E4'              	LD	(SPSECT),HL
  0678'   3E 02                 	LD	A,2
  067A'   32 00E3'              	LD	(SPTYPE),A	;SET THE TYPE
  067D'   C9                    	RET
                                ;
                                ; DFSI - DISPLAY FILE SECTOR INFORMATION
                                ;
                                	$RTN	DFSI
  067E'                   +     DFSI:	DS	0
                                	$FLD	WRSNFL		;POSITION FOR SECTOR NUMBER
  067E'   21 043C'        +     	LD	HL,WRSNFL
  0681'   CD 1D3A'        +     	CALL	DFLD
                                	$HEXW	RELREC		;DISPLAY RECORD NUMBER
  0684'   2A 00A8'        +     	LD	HL,(RELREC)
  0687'   CD 1D8B'        +     	CALL	HEXW
                                	$FLD	WRFOFL		;POSITION FOR FILE OFFSET
  068A'   21 043F'        +     	LD	HL,WRFOFL
  068D'   CD 1D3A'        +     	CALL	DFLD
  0690'   2A 00A8'              	LD	HL,(RELREC)	;GET REC NO
  0693'   AF                    	XOR	A
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-16


  0694'   CB 3C                  	SRL	H
  0696'   CB 1D                 	RR	L
  0698'   1F                    	RRA
  0699'   32 00AD'              	LD	(BASEAD+2),A
  069C'   3A 06AA'              	LD	A,(COMFLG)
  069F'   B7                    	OR	A
  06A0'   28 01                 	JR	Z,DFSI01	;IF .COM FLAG
  06A2'   23                    	INC	HL
  06A3'                         DFSI01	EQU	$		;ENDIF
  06A3'   22 00AB'              	LD	(BASEAD),HL	;SAVE REC/2
  06A6'   CD 1869'              	CALL	PRTADR		;PRINT 3 BYTE ADDRESS
  06A9'   C9                    	RET
                                
  06AA'                         COMFLG:	DS	1		
                                
                                ;
                                ; DRMD - DIRECTORY MODE
                                ;
                                	$RTN	DRMD
  06AB'                   +     DRMD:	DS	0
  06AB'   2A 081B'              	LD	HL,(DRMDEF)
  06AE'   22 00C3'              	LD	(ERRFLD),HL	;SET PANEL ERROR FIELD
  06B1'   3E FF                 	LD	A,TRUE
  06B3'   32 0845'              	LD	(DRMDLD),A	;REQUEST LIST
  06B6'                         DRMD01	EQU	$		;LOOP
  06B6'   3A 0845'              	LD	A,(DRMDLD)
  06B9'   B7                    	OR	A
  06BA'   28 10                 	JR	Z,DRMD02	;IF LIST REQUIRED
                                	$NPANEL	DRMDPN		;DISPLAY DIRECTORY LIST PANEL
  06BC'   CD 1CFE'        +     	CALL	DHDR
  06BF'   21 06F6'        +     	LD	HL,DRMDPN	;POINT TO PANEL
  06C2'   CD 1D30'        +     	CALL	DPNL		;DISPLAY IT
  06C5'   CD 19D2'              	CALL	DLST		;DO DIRECTORY LIST
  06C8'   AF                    	XOR	A
  06C9'   32 0845'              	LD	(DRMDLD),A	;RESET LIST REQUEST
  06CC'                         DRMD02	EQU	$		;ENDIF
  06CC'                         DRMD06	EQU	$		;LOOP
  06CC'   CD 1BFA'              	CALL	ERRP		;PROCESS ERRORS
  06CF'   3A 00BE'              	LD	A,(SELDE)
  06D2'   CD 0904'              	CALL	DIRPOS		;POSITION OVER CURRENT ENTRY
  06D5'   CD 1CC7'              	CALL	CHRF
                                	$MTCH	DRMDLS
  06D8'   21 07F3'        +     	LD	HL,DRMDLS
  06DB'   CD 1C31'        +     	CALL	MTCH
  06DE'   28 05                 	JR	Z,DRMD05	;EXITIF VALID
  06E0'   CD 1CDD'              	CALL	ALRM		;SOUND ALARM
  06E3'   18 E7                 	JR	DRMD06
  06E5'                         DRMD05	EQU	$		;ENDLOOP
                                	$EXVA	DRMDVC		;PERFORM ACTION
  06E5'   11 0801'        +     	LD	DE,DRMDVC
  06E8'   CD 1C43'        +     	CALL	DOIT
  06EB'   3A 00CA'              	LD	A,(WTG)
  06EE'   FE 44                 	CP	'D'	
  06F0'   20 03                 	JR	NZ,DRMD07	;EXIT IF MODE NO LONGER D
  06F2'   C3 06B6'              	JP	DRMD01
  06F5'                         DRMD07	EQU	$		;ENDLOOP
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-17


  06F5'   C9                    	RET
                                
                                ;
                                ; DIRECTORY MODE PANEL AND VECTOR
                                ;
  06F6'   0C                    DRMDPN:	DB	12
  06F7'   02 00 5E 48           	DB	02,00,'^',$LEFT+040H,'  Cursor left',0
  06FB'   20 20 43 75           
  06FF'   72 73 6F 72           
  0703'   20 6C 65 66           
  0707'   74 00                 
  0709'   03 00 5E 4C           	DB	03,00,'^',$RIGHT+040H,'  Cursor right',0
  070D'   20 20 43 75           
  0711'   72 73 6F 72           
  0715'   20 72 69 67           
  0719'   68 74 00              
  071C'   04 00 5E 4B           	DB	04,00,'^',$UP+040H,'  Cursor up',0
  0720'   20 20 43 75           
  0724'   72 73 6F 72           
  0728'   20 75 70 00           
  072C'   05 00 5E 4A           	DB	05,00,'^',$DOWN+040H,'  Cursor down',0
  0730'   20 20 43 75           
  0734'   72 73 6F 72           
  0738'   20 64 6F 77           
  073C'   6E 00                 
  073E'   02 16 50 20           	DB	02,22,'P  Previous directory page',0
  0742'   20 50 72 65           
  0746'   76 69 6F 75           
  074A'   73 20 64 69           
  074E'   72 65 63 74           
  0752'   6F 72 79 20           
  0756'   70 61 67 65           
  075A'   00                    
  075B'   03 16 4E 20           	DB	03,22,'N  Next directory page',0
  075F'   20 4E 65 78           
  0763'   74 20 64 69           
  0767'   72 65 63 74           
  076B'   6F 72 79 20           
  076F'   70 61 67 65           
  0773'   00                    
  0774'   02 36 5A 20           	DB	02,54,'Z  Exit from Superzap',0
  0778'   20 45 78 69           
  077C'   74 20 66 72           
  0780'   6F 6D 20 53           
  0784'   75 70 65 72           
  0788'   7A 61 70 00           
  078C'   03 36 43 20           	DB	03,54,'C  Change disk',0
  0790'   20 43 68 61           
  0794'   6E 67 65 20           
  0798'   64 69 73 6B           
  079C'   00                    
  079D'   04 36 53 20           	DB	04,54,'S  Select track / sector',0
  07A1'   20 53 65 6C           
  07A5'   65 63 74 20           
  07A9'   74 72 61 63           
  07AD'   6B 20 2F 20           
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-18


  07B1'   73 65 63 74           
  07B5'   6F 72 00              
  07B8'   05 36 4D 20           	DB	05,54,'M  Set directory selection',0
  07BC'   20 53 65 74           
  07C0'   20 64 69 72           
  07C4'   65 63 74 6F           
  07C8'   72 79 20 73           
  07CC'   65 6C 65 63           
  07D0'   74 69 6F 6E           
  07D4'   00                    
                                
  07D5'   07 00 45 20           	DB	07,00,'E  Edit file',0
  07D9'   20 45 64 69           
  07DD'   74 20 66 69           
  07E1'   6C 65 00              
  07E4'   07 16 54 20           	DB	07,22,'T  Type file',0
  07E8'   20 54 79 70           
  07EC'   65 20 66 69           
  07F0'   6C 65 00              
                                
  07F3'   0D 08 0C 0B           DRMDLS:	DB	13,$LEFT,$RIGHT,$UP,$DOWN,CR,'EZCSMPNT'
  07F7'   0A 0D 45 5A           
  07FB'   43 53 4D 50           
  07FF'   4E 54                 
                                
  0801'   088B'                 DRMDVC:	DW	FBS
  0803'   08ED'                 	DW	FFS
  0805'   08A2'                 	DW	FUP
  0807'   08BA'                 	DW	FDN
  0809'   08D2'                 	DW	FNL
  080B'   0924'                 	DW	STFL
  080D'   1CA2'                 	DW	SETX
  080F'   0C26'                 	DW	CHDD
  0811'   1C9C'                 	DW	SETP
  0813'   0C89'                 	DW	SAFN
  0815'   0846'                 	DW	DIRP
  0817'   0867'                 	DW	DIRN
  0819'   095B'                 	DW	TYPE
                                
  081B'   09 00                 DRMDEF:	DB	9,0
  081D'   2A 2A 20 4E           NRFMSG:	DB	'** No records in file',0
  0821'   6F 20 72 65           
  0825'   63 6F 72 64           
  0829'   73 20 69 6E           
  082D'   20 66 69 6C           
  0831'   65 00                 
  0833'   2A 2A 20 46           FNFMSG:	DB	'** File not found',0
  0837'   69 6C 65 20           
  083B'   6E 6F 74 20           
  083F'   66 6F 75 6E           
  0843'   64 00                 
                                
  0845'                         DRMDLD:	DS	1		;LIST DIRECTORY REQUEST FLAG
                                
                                ;
                                ; DIRP - PAGE UP DIRECTORY
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-19


                                ;
                                	$RTN	DIRP
  0846'                   +     DIRP:	DS	0
  0846'   3A 00BF'              	LD	A,(DIROFF)
  0849'   B7                    	OR	A
  084A'   28 17                 	JR	Z,DIRP01	;IF NOT PAGE 0
  084C'   D6 20                 	SUB	32
  084E'   32 00BF'              	LD	(DIROFF),A	;SET PREV PAGE
  0851'   AF                    	XOR	A
  0852'   32 00BE'              	LD	(SELDE),A	;FIRST ENTRY ON PAGE
  0855'   CD 1BFA'              	CALL	ERRP
  0858'   21 0E08               	LD	HL,DRAREA
  085B'   CD 1B30'              	CALL	CLRA		;CLEAR AREA
  085E'   CD 19D2'              	CALL	DLST		;DISPLAY PAGE
  0861'   18 03                 	JR	DIRP02
  0863'                         DIRP01	EQU	$		;ELSE
  0863'   CD 1CDD'              	CALL	ALRM		;RING BELL
  0866'                         DIRP02	EQU	$		;ENDIF
  0866'   C9                    	RET
                                ;
                                ; DIRN - PAGE DOWN DIRECTORY
                                ;
                                	$RTN	DIRN
  0867'                   +     DIRN:	DS	0
  0867'   3A 00BF'              	LD	A,(DIROFF)
  086A'   C6 20                 	ADD	A,32		;POINT TO NEXT PAGE
  086C'   21 00BB'              	LD	HL,DECNT
  086F'   BE                    	CP	(HL)
  0870'   30 15                 	JR	NC,DIRN01	;IF AVAILABLE
  0872'   32 00BF'              	LD	(DIROFF),A	;SAVE NEW POINTER
  0875'   AF                    	XOR	A
  0876'   32 00BE'              	LD	(SELDE),A	;SET FIRST ENTRY ON PAGE
  0879'   CD 1BFA'              	CALL	ERRP
  087C'   21 0E08               	LD	HL,DRAREA
  087F'   CD 1B30'              	CALL	CLRA		;CLEAR DIRECTORY AREA
  0882'   CD 19D2'              	CALL	DLST		;DISPLAY DIRECTORY
  0885'   18 03                 	JR	DIRN02
  0887'                         DIRN01	EQU	$		;ELSE
  0887'   CD 1CDD'              	CALL	ALRM		;ALARM
  088A'                         DIRN02	EQU	$		;ENDIF
  088A'   C9                    	RET
                                
                                ;
                                ; FBS - BACKSPACE ID DIRECTORY
                                ;
                                	$RTN	FBS
  088B'                   +     FBS:	DS	0
  088B'   3A 00BF'              	LD	A,(DIROFF)
  088E'   47                    	LD	B,A
  088F'   21 00BB'              	LD	HL,DECNT
  0892'                         FBS01	EQU	$		;REPEAT
  0892'   3A 00BE'              	LD	A,(SELDE)
  0895'   3D                    	DEC	A
  0896'   E6 1F                 	AND	31
  0898'   32 00BE'              	LD	(SELDE),A	;SELECT PREVIOUS
  089B'   28 04                 	JR	Z,FBS02		;EXIT IF FIRST POSN
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-20


  089D'   80                    	ADD	A,B
  089E'   BE                    	CP	(HL)
  089F'   30 F1                 	JR	NC,FBS01	;UNTIL NEW<=MAX
  08A1'                         FBS02	EQU	$
  08A1'   C9                    	RET
                                ;
                                ; FUP - CURSOR UP IN DIRECTORY
                                ;
                                	$RTN	FUP
  08A2'                   +     FUP:	DS	0
  08A2'   3A 00BF'              	LD	A,(DIROFF)
  08A5'   47                    	LD	B,A
  08A6'   21 00BB'              	LD	HL,DECNT
  08A9'                         FUP01	EQU	$		;REPEAT
  08A9'   3A 00BE'              	LD	A,(SELDE)
  08AC'   D6 04                 	SUB	4
  08AE'   E6 1F                 	AND	31
  08B0'   32 00BE'              	LD	(SELDE),A	;1 LINE UP
  08B3'   28 04                 	JR	Z,FUP02		;EXIT IF FIRST POSN
  08B5'   80                    	ADD	A,B
  08B6'   BE                    	CP	(HL)
  08B7'   30 F0                 	JR	NC,FUP01	;UNTIL NEW<=MAX
  08B9'                         FUP02	EQU	$
  08B9'   C9                    	RET
                                ;
                                ; FDN - CURSOR DOWN IN DIRECTORY
                                ;
                                	$RTN	FDN
  08BA'                   +     FDN:	DS	0
  08BA'   3A 00BF'              	LD	A,(DIROFF)
  08BD'   47                    	LD	B,A
  08BE'   21 00BB'              	LD	HL,DECNT
  08C1'                         FDN01	EQU	$		;REPEAT
  08C1'   3A 00BE'              	LD	A,(SELDE)
  08C4'   C6 04                 	ADD	A,4
  08C6'   E6 1F                 	AND	31
  08C8'   32 00BE'              	LD	(SELDE),A	;1 LINE DOWN
  08CB'   28 04                 	JR	Z,FDN02
  08CD'   80                    	ADD	A,B
  08CE'   BE                    	CP	(HL)
  08CF'   30 F0                 	JR	NC,FDN01	;UNTIL NEW<=MAX
  08D1'                         FDN02	EQU	$
  08D1'   C9                    	RET
                                ;
                                ; FNL - C/R IN DIRECTORY
                                ;
                                	$RTN	FNL
  08D2'                   +     FNL:	DS	0
  08D2'   3A 00BF'              	LD	A,(DIROFF)
  08D5'   47                    	LD	B,A
  08D6'   21 00BB'              	LD	HL,DECNT
  08D9'                         FNL01	EQU	$		;REPEAT
  08D9'   3A 00BE'              	LD	A,(SELDE)	;PICK UP CURRENT
  08DC'   C6 04                 	ADD	A,4		;MOVE TO NEXT LINE
  08DE'   E6 1C                 	AND	01CH
  08E0'   32 00BE'              	LD	(SELDE),A	;START OF NEXT LINE
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-21


  08E3'   28 07                 	JR	Z,FNL02
  08E5'   80                    	ADD	A,B
  08E6'   21 00BB'              	LD	HL,DECNT
  08E9'   BE                    	CP	(HL)
  08EA'   30 ED                 	JR	NC,FNL01	;UNTIL NEW<=MAX
  08EC'                         FNL02	EQU	$
  08EC'   C9                    	RET
                                ;
                                ; FFS - CURSOR FORWARD IN DIRECTORY
                                ;
                                	$RTN	FFS
  08ED'                   +     FFS:	DS	0
  08ED'   3A 00BF'              	LD	A,(DIROFF)
  08F0'   47                    	LD	B,A		;GET START OF DISPLAY
  08F1'   21 00BB'              	LD	HL,DECNT
  08F4'                         FFS01	EQU	$		;REPEAT
  08F4'   3A 00BE'              	LD	A,(SELDE)
  08F7'   3C                    	INC	A
  08F8'   E6 1F                 	AND	31
  08FA'   32 00BE'              	LD	(SELDE),A	;NEXT ENTRY
  08FD'   28 04                 	JR	Z,FFS02
  08FF'   80                    	ADD	A,B
  0900'   BE                    	CP	(HL)
  0901'   30 F1                 	JR	NC,FFS01	;UNTIL NEW<=MAX
  0903'                         FFS02	EQU	$
  0903'   C9                    	RET
                                ;
                                ; DIRPOS - POSITION TO PRINT DIRECTORY ENTRY
                                ;
  0904'                         DIRPOS	EQU	$
  0904'   32 0923'              	LD	(DIRNUM),A	;SAVE ENTRY POSITION
  0907'   21 1832'              	LD	HL,LPTAB
  090A'   0F                    	RRCA
  090B'   0F                    	RRCA			;DIVIDE COUNT BY 4
  090C'   E6 0F                 	AND	0FH		;MAKE IT LINE COUNT
  090E'   CD 1C50'              	CALL	AAHL
  0911'   46                    	LD	B,(HL)		;PICK UP LINE POSN
  0912'   21 185A'              	LD	HL,DCTAB
  0915'   3A 0923'              	LD	A,(DIRNUM)	;PICK UP ENTRY AGAIN
  0918'   E6 03                 	AND	03		;MAKE COUNT INTO COLUM NUMBER
  091A'   CD 1C50'              	CALL	AAHL
  091D'   66                    	LD	H,(HL)		;GET COLUMN POSITION
  091E'   68                    	LD	L,B		;AND LINE NUMBER
  091F'   CD 1D19'              	CALL	CURS		;POSITION CURSOR
  0922'   C9                    	RET
  0923'                         DIRNUM:	DS	1
                                
                                ;
                                ; STFL - SELECT FILE
                                ;
                                	$RTN	STFL
  0924'                   +     STFL:	DS	0
  0924'   CD 092B'              	CALL	CFCB		;COPY FCB FROM DIR LIST
  0927'   CD 1C96'              	CALL	SETF		;SET FILE MODE
  092A'   C9                    	RET
                                ;
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-22


                                ; CFCB - COPY FCB FROM DIRECTORY LIST
                                ;
                                	$RTN	CFCB
  092B'                   +     CFCB:	DS	0
  092B'   3A 00BB'              	LD	A,(DECNT)
  092E'   B7                    	OR	A
  092F'   20 0B                 	JR	NZ,CFCB01	;IF NO FILES
  0931'   CD 1CDD'              	CALL	ALRM		;SOUND ALARM
  0934'   21 0833'              	LD	HL,FNFMSG
  0937'   22 00C6'              	LD	(ERRTXT),HL	;SET FILE NOT FOUND ERROR
  093A'   18 1E                 	JR	CFCB02
  093C'                         CFCB01	EQU	$		;ELSE
  093C'   3A 00BE'              	LD	A,(SELDE)	;GET SELECTED ENTRY NUMBER
  093F'   47                    	LD	B,A
  0940'   3A 00BF'              	LD	A,(DIROFF)
  0943'   80                    	ADD	A,B		;ADD DISPLAY START
  0944'   26 00                 	LD	H,0
  0946'   6F                    	LD	L,A
  0947'   ED 5B 00A3'           	LD	DE,(MEMRY)	;BASE OF TABLE
  094B'   CD 1BF4'              	CALL	H16D		;HL=HL*16+DE
  094E'   11 005D               	LD	DE,WRKFN	;START OF FILE NAME
  0951'   01 000B               	LD	BC,11
  0954'   ED B0                 	LDIR			;MOVE DE OVER TO FCB
  0956'   AF                    	XOR	A
  0957'   32 0068               	LD	(WRKEX),A
  095A'                         CFCB02	EQU	$		;ENDIF
  095A'   C9                    	RET
                                
                                ;
                                ; TYPE - TYPE SELECTED FILE
                                ;
                                	$RTN	TYPE
  095B'                   +     TYPE:	DS	0
  095B'   CD 092B'              	CALL	CFCB		;SET UP FCB
  095E'   CD 0F53'              	CALL	TFLE		;TEST FILE
  0961'   3A 0F98'              	LD	A,(FLERR)
  0964'   B7                    	OR	A
  0965'   C2 09E5'              	JP	NZ,TYPE01	;IF FILE FOUND
  0968'   AF                    	XOR	A
  0969'   32 00AA'              	LD	(BUFPOS),A	;BUFFER OFFSET 0
  096C'   32 00AC'              	LD	(BASEAD+1),A
  096F'   3C                    	INC	A
  0970'   32 00AB'              	LD	(BASEAD),A	;INITIALISE PAGE NUMBER 1
  0973'   CD 0BB9'              	CALL	TGET		;PRIME FIRST CHARACTER
  0976'   2A 00DA'              	LD	HL,(PGEPTR)
  0979'   22 00DC'              	LD	(CURPG@),HL	;SET CURRENT PAGE ENTRY TO FIRST
  097C'   22 00DE'              	LD	(MAXPG@),HL	;AND LAST
  097F'   3E FF                 	LD	A,0FFH
  0981'   32 0A96'              	LD	(TYPEX),A	;SET NO EXIT
  0984'   32 0A97'              	LD	(TYDSP),A	;REQUEST DISPLAY
  0987'                         TYPE03	EQU	$		;LOOP
  0987'   3A 0A97'              	LD	A,(TYDSP)
  098A'   B7                    	OR	A
  098B'   28 34                 	JR	Z,TYPE09	;IF DISPLAY REQUIRED
  098D'   AF                    	XOR	A
  098E'   32 0A97'              	LD	(TYDSP),A	;RESET REQUEST
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-23


                                	$NPANEL	TYPEPN		;DISPLAY PANEL
  0991'   CD 1CFE'        +     	CALL	DHDR
  0994'   21 09EB'        +     	LD	HL,TYPEPN	;POINT TO PANEL
  0997'   CD 1D30'        +     	CALL	DPNL		;DISPLAY IT
                                	$FLD	PGENUM
  099A'   21 0A67'        +     	LD	HL,PGENUM
  099D'   CD 1D3A'        +     	CALL	DFLD
                                	$HEXW	BASEAD		;DISPLAY PAGE NUMBER
  09A0'   2A 00AB'        +     	LD	HL,(BASEAD)
  09A3'   CD 1D8B'        +     	CALL	HEXW
                                	$FLD	TYPEFN
  09A6'   21 0A79'        +     	LD	HL,TYPEFN
  09A9'   CD 1D3A'        +     	CALL	DFLD
                                	$STRO	DRIVNM		;DISPLAY FILE NAME
  09AC'   21 0415'        +     	LD	HL,DRIVNM
  09AF'   CD 1D62'        +     	CALL	STRO
                                	$FLD	RECNUM
  09B2'   21 0A6F'        +     	LD	HL,RECNUM
  09B5'   CD 1D3A'        +     	CALL	DFLD
                                	$HEXW	RELREC		;DISPLAY RECORD NUMBER
  09B8'   2A 00A8'        +     	LD	HL,(RELREC)
  09BB'   CD 1D8B'        +     	CALL	HEXW
  09BE'   CD 0B05'              	CALL	TYPG		;DISPLAY PAGE
  09C1'                         TYPE09	EQU	$		;ENDIF
  09C1'                         TYPE06	EQU	$		;LOOP
                                	$IFLD	TYPIP		;GET COMMAND
  09C1'   21 0A7C'        +     	LD	HL,TYPIP		;POINT TO FIELD
  09C4'   CD 1D3A'        +     	CALL	DFLD			;DISPLAY IT
  09C7'   CD 1CC7'        +     	CALL	CHRF			;GET INPUT
                                	$MTCH	TYPLST
  09CA'   21 0A83'        +     	LD	HL,TYPLST
  09CD'   CD 1C31'        +     	CALL	MTCH
  09D0'   28 05                 	JR	Z,TYPE05	;EXITIF VALID
  09D2'   CD 1CDD'              	CALL	ALRM		;SOUND ALARM
  09D5'   18 EA                 	JR	TYPE06
  09D7'                         TYPE05	EQU	$		;ENDLOOP
                                	$EXVA	TYPVEC		;EXEC COMMAND
  09D7'   11 0A8A'        +     	LD	DE,TYPVEC
  09DA'   CD 1C43'        +     	CALL	DOIT
  09DD'   3A 0A96'              	LD	A,(TYPEX)
  09E0'   B7                    	OR	A
  09E1'   28 02                 	JR	Z,TYPE04	;EXITIF FLAG SET
  09E3'   18 A2                 	JR	TYPE03
  09E5'                         TYPE04	EQU	$		;ENDLOOP
  09E5'                         TYPE01	EQU	$		;ENDIF
  09E5'   3E FF                 	LD	A,TRUE
  09E7'   32 0845'              	LD	(DRMDLD),A	;REQUEST DIRECTORY LIST
  09EA'   C9                    	RET
                                
  09EB'   06                    TYPEPN:	DB	6
  09EC'   01 00 4E 20           	DB	01,00,'N  Next page',0
  09F0'   20 4E 65 78           
  09F4'   74 20 70 61           
  09F8'   67 65 00              
  09FB'   01 16 52 20           	DB	01,22,'R  Return after Paging',0
  09FF'   20 52 65 74           
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-24


  0A03'   75 72 6E 20           
  0A07'   61 66 74 65           
  0A0B'   72 20 50 61           
  0A0F'   67 69 6E 67           
  0A13'   00                    
  0A14'   01 32 4C 20           	DB	01,50,'L  Exit to file list',0
  0A18'   20 45 78 69           
  0A1C'   74 20 74 6F           
  0A20'   20 66 69 6C           
  0A24'   65 20 6C 69           
  0A28'   73 74 00              
  0A2B'   02 00 50 20           	DB	02,00,'P  Previous page',0
  0A2F'   20 50 72 65           
  0A33'   76 69 6F 75           
  0A37'   73 20 70 61           
  0A3B'   67 65 00              
  0A3E'   02 16 54 20           	DB	02,22,'T  Top of file',0
  0A42'   20 54 6F 70           
  0A46'   20 6F 66 20           
  0A4A'   66 69 6C 65           
  0A4E'   00                    
  0A4F'   02 32 5A 20           	DB	02,50,'Z  Exit from Superzap',0
  0A53'   20 45 78 69           
  0A57'   74 20 66 72           
  0A5B'   6F 6D 20 53           
  0A5F'   75 70 65 72           
  0A63'   7A 61 70 00           
                                
  0A67'   04 42 50 61           PGENUM:	DB	4,66,'Page ',0
  0A6B'   67 65 20 00           
  0A6F'   04 20 53 65           RECNUM:	DB	4,32,'Sector ',0
  0A73'   63 74 6F 72           
  0A77'   20 00                 
  0A79'   04 00 00              TYPEFN:	DB	4,0,0
  0A7C'   02 4D 3E 00           TYPIP:	DB	02,77,'>',0		;INPUT POSITION
  0A80'   06 00 00              TYPFL:	DB	6,0,0			;FIRST CHR POSITION
                                
  0A83'   06 4E 52 4C           TYPLST:	DB	6,'NRLPTZ'
  0A87'   50 54 5A              
  0A8A'   0A99'                 TYPVEC:	DW	TYPF
  0A8C'   0AB4'                 	DW	TYPR
  0A8E'   0AD0'                 	DW	TYPL
  0A90'   0AD5'                 	DW	TYPB
  0A92'   0AF1'                 	DW	TYPT
  0A94'   0AFD'                 	DW	TYPZ
                                
  0A96'                         TYPEX:	DS	1		;EXIT FLAG
  0A97'                         TYDSP:	DS	1		;DISPLAY REQUEST
  0A98'                         TYPEOP:	DS	1		;END OF PAGE
                                
                                ;
                                ; TYPF - FORWARD PAGE
                                ;
                                	$RTN	TYPF
  0A99'                   +     TYPF:	DS	0
  0A99'   3A 00A5'              	LD	A,(READST)
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-25


  0A9C'   B7                    	OR	A
  0A9D'   28 05                 	JR	Z,TYPF01	;IF EOF
  0A9F'   CD 1CDD'              	CALL	ALRM
  0AA2'   18 0F                 	JR	TYPF02
  0AA4'                         TYPF01	EQU	$		;ELSE
  0AA4'   2A 00DC'              	LD	HL,(CURPG@)
  0AA7'   11 0006               	LD	DE,6
  0AAA'   19                    	ADD	HL,DE
  0AAB'   22 00DC'              	LD	(CURPG@),HL	;UPDATE CURRENT POINTER
  0AAE'   3E FF                 	LD	A,0FFH
  0AB0'   32 0A97'              	LD	(TYDSP),A	;REQUEST DISPLAY
  0AB3'                         TYPF02	EQU	$
  0AB3'   C9                    	RET
                                
                                ;
                                ; TYPR - REURN AFTER PAGING
                                ;
                                	$RTN	TYPR
  0AB4'                   +     TYPR:	DS	0
  0AB4'   2A 00DC'              	LD	HL,(CURPG@)
  0AB7'   ED 5B 00DE'           	LD	DE,(MAXPG@)
  0ABB'   AF                    	XOR	A
  0ABC'   ED 52                 	SBC	HL,DE
  0ABE'   28 0F                 	JR	Z,TYPR01	;IF NOT END OF FILE
  0AC0'   EB                    	EX	DE,HL		;RESTORE TOP OF QUEUE
  0AC1'   11 0006               	LD	DE,6
  0AC4'   AF                    	XOR	A
  0AC5'   ED 52                 	SBC	HL,DE
  0AC7'   CD 0BAA'              	CALL	LPGE		;LOAD LAST PAGE
  0ACA'   3E FF                 	LD	A,0FFH
  0ACC'   32 0A97'              	LD	(TYDSP),A	;REQUEST DISPLAY
  0ACF'                         TYPR01	EQU	$		;ENDIF
  0ACF'   C9                    	RET
                                
                                ;
                                ; TYPL - EXIT TYPE TO DIR LIST
                                ;
                                	$RTN	TYPL
  0AD0'                   +     TYPL:	DS	0
  0AD0'   AF                    	XOR	A
  0AD1'   32 0A96'              	LD	(TYPEX),A	;REQUEST EXIT
  0AD4'   C9                    	RET
                                
                                ;
                                ; TYPB - PAGE BACKWARD
                                ;
                                	$RTN	TYPB
  0AD5'                   +     TYPB:	DS	0
  0AD5'   ED 5B 00DC'           	LD	DE,(CURPG@)
  0AD9'   2A 00DA'              	LD	HL,(PGEPTR)
  0ADC'   AF                    	XOR	A
  0ADD'   ED 52                 	SBC	HL,DE
  0ADF'   28 0F                 	JR	Z,TYPB01	;IF NOT TOP OF FILE
  0AE1'   EB                    	EX	DE,HL
  0AE2'   11 0006               	LD	DE,6
  0AE5'   AF                    	XOR	A
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-26


  0AE6'   ED 52                 	SBC	HL,DE
  0AE8'   CD 0BAA'              	CALL	LPGE		;LOAD PAGE DATA
  0AEB'   3E FF                 	LD	A,0FFH
  0AED'   32 0A97'              	LD	(TYDSP),A	;REQUEST DISPLAY
  0AF0'                         TYPB01	EQU	$		;ENDIF
  0AF0'   C9                    	RET
                                
                                ;
                                ; TYPT - PAGE TO TOP OF FILE
                                ;
                                	$RTN	TYPT
  0AF1'                   +     TYPT:	DS	0
  0AF1'   2A 00DA'              	LD	HL,(PGEPTR)
  0AF4'   CD 0BAA'              	CALL	LPGE		;LOAD FIRST PAGE
  0AF7'   3E FF                 	LD	A,0FFH
  0AF9'   32 0A97'              	LD	(TYDSP),A	;REQUEST DISPLAY
  0AFC'   C9                    	RET
                                
                                ;
                                ; TYPZ - EXIT TYPE TO CM/M
                                ;
                                	$RTN	TYPZ
  0AFD'                   +     TYPZ:	DS	0
  0AFD'   CD 1CA2'              	CALL	SETX		;EXIT SUPERZAP
  0B00'   AF                    	XOR	A
  0B01'   32 0A96'              	LD	(TYPEX),A	;REQUEST EXIT
  0B04'   C9                    	RET
                                
                                ;
                                ; TYPG - TYPE PAGE
                                ;
                                	$RTN	TYPG
  0B05'                   +     TYPG:	DS	0
  0B05'   CD 0B8D'              	CALL	QPGE		;PUT PAGE ON QUEUE
                                	$FLD	TYPFL		;POSITION FOR FIST CHAR
  0B08'   21 0A80'        +     	LD	HL,TYPFL
  0B0B'   CD 1D3A'        +     	CALL	DFLD
                                	$STRO	TYNPRF		;RIGHT MARGIN
  0B0E'   21 0B89'        +     	LD	HL,TYNPRF
  0B11'   CD 1D62'        +     	CALL	STRO
  0B14'   AF                    	XOR	A
  0B15'   32 0A98'              	LD	(TYPEOP),A	;RESET END OF PAGE
  0B18'   32 0B87'              	LD	(PGECOL),A
  0B1B'   32 0B88'              	LD	(PGELNE),A	;LINE 0 COL 0
  0B1E'                         TYPG01	EQU	$		;LOOP
  0B1E'   3A 0A98'              	LD	A,(TYPEOP)
  0B21'   B7                    	OR	A
  0B22'   20 52                 	JR	NZ,TYPG02	;EXIT IF EOP
  0B24'   3A 06AA'              	LD	A,(COMFLG)
  0B27'   B7                    	OR	A
  0B28'   3A 00A7'              	LD	A,(TYCURC)
  0B2B'   20 3B                 	JR	NZ,TYPG08	;IF NOT COM FILE
  0B2D'   FE 09                 	CP	009H
  0B2F'   20 0E                 	JR	NZ,TYPG04	;IF TAB
  0B31'                         TYPG05	EQU	$		;REPEAT
  0B31'   3E 20                 	LD	A,' '
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-27


  0B33'   CD 0BE7'              	CALL	TPUT		;PUT SPACE
  0B36'   3A 0B87'              	LD	A,(PGECOL)
  0B39'   E6 07                 	AND	7
  0B3B'   20 F4                 	JR	NZ,TYPG05	;UNTIL TAB STOP
  0B3D'   18 2C                 	JR	TYPG07
  0B3F'                         TYPG04	EQU	$
  0B3F'   FE 0D                 	CP	CR
  0B41'   20 25                 	JR	NZ,TYPG08	;ELSE IF C/R
  0B43'   3A 00A5'              	LD	A,(READST)
  0B46'   B7                    	OR	A
  0B47'   20 10                 	JR	NZ,TYPG11	;IF EOF
  0B49'   3A 00AA'              	LD	A,(BUFPOS)
  0B4C'   21 0080               	LD	HL,FBUFF
  0B4F'   CD 1C50'              	CALL	AAHL
  0B52'   7E                    	LD	A,(HL)
  0B53'   FE 0A                 	CP	00AH
  0B55'   20 02                 	JR	NZ,TYPG11	;OR NOT LINE FEED
  0B57'   18 07                 	JR	TYPG09
  0B59'                         TYPG11	EQU	$
  0B59'   3E 0D                 	LD	A,CR
  0B5B'   CD 0BE7'              	CALL	TPUT		;PUT CHAR
  0B5E'   18 06                 	JR	TYPG10
  0B60'                         TYPG09	EQU	$		;ELSE
  0B60'   CD 0C01'              	CALL	TYNL		;TAKE NEW LINE
  0B63'   CD 0BB9'              	CALL	TGET		;SKIP L/F IN FILE
  0B66'                         TYPG10	EQU	$		;ENDIF
  0B66'   18 03                 	JR	TYPG07
  0B68'                         TYPG08	EQU	$		;ELSE
  0B68'   CD 0BE7'              	CALL	TPUT		;PRINT CHR
  0B6B'                         TYPG07	EQU	$		;ENDIF
  0B6B'   3A 00A5'              	LD	A,(READST)
  0B6E'   B7                    	OR	A
  0B6F'   20 05                 	JR	NZ,TYPG02	;EXIT IF EOF
  0B71'   CD 0BB9'              	CALL	TGET		;GET NEXT CHR
  0B74'   18 A8                 	JR	TYPG01
  0B76'                         TYPG02	EQU	$		;ENDLOOP
  0B76'   2A 00AB'              	LD	HL,(BASEAD)
  0B79'   3E 01                 	LD	A,1
  0B7B'   85                    	ADD	A,L
  0B7C'   27                    	DAA
  0B7D'   6F                    	LD	L,A
  0B7E'   3E 00                 	LD	A,0
  0B80'   8C                    	ADC	A,H
  0B81'   27                    	DAA
  0B82'   67                    	LD	H,A
  0B83'   22 00AB'              	LD	(BASEAD),HL	;INC PAGE NUMBER
  0B86'                         TYPG03	EQU	$		;ENDIF
  0B86'   C9                    	RET
  0B87'                         PGECOL:	DS	1
  0B88'                         PGELNE:	DS	1
  0B89'   20 20 20 00           TYNPRF:	DB	'   ',0
                                ;
                                ; QPGE - PUT PAGE DATA ON QUEUE
                                ;
                                	$RTN	QPGE
  0B8D'                   +     QPGE:	DS	0
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-28


  0B8D'   2A 00DE'              	LD	HL,(MAXPG@)
  0B90'   ED 5B 00DC'           	LD	DE,(CURPG@)
  0B94'   AF                    	XOR	A
  0B95'   ED 52                 	SBC	HL,DE
  0B97'   20 10                 	JR	NZ,QPGE01	;IF AT END OF Q
  0B99'   21 00A7'              	LD	HL,TYCURC
  0B9C'   ED 5B 00DE'           	LD	DE,(MAXPG@)
  0BA0'   01 0006               	LD	BC,6
  0BA3'   ED B0                 	LDIR			;COPY PAGE DATA
  0BA5'   ED 53 00DE'           	LD	(MAXPG@),DE	;UPDATE MAX PTR
  0BA9'                         QPGE01	EQU	$		;ENDIF
  0BA9'   C9                    	RET
                                
                                ;
                                ; LPGE - LOAD PAGE DATA FROM QUEUE AT (HL)
                                
                                	$RTN	LPGE
  0BAA'                   +     LPGE:	DS	0
  0BAA'   22 00DC'              	LD	(CURPG@),HL	;SET CURRENT POINTER
  0BAD'   11 00A7'              	LD	DE,TYCURC
  0BB0'   01 0006               	LD	BC,6
  0BB3'   ED B0                 	LDIR			;COPY PAGE DATA
  0BB5'   CD 1B96'              	CALL	RDFS		;READ FIRST SECTOR OF PAGE
  0BB8'   C9                    	RET
                                
                                ;
                                ; TGET - GET CHARACTER FOR TYPE
                                ;
                                	$RTN	TGET
  0BB9'                   +     TGET:	DS	0
  0BB9'   3A 00A5'              	LD	A,(READST)
  0BBC'   B7                    	OR	A
  0BBD'   20 24                 	JR	NZ,TGET02	;IF NOT EOF
  0BBF'   21 00AA'              	LD	HL,BUFPOS
  0BC2'   7E                    	LD	A,(HL)		;GET CURRENT OFFSET
  0BC3'   34                    	INC	(HL)		;INC FOR NEXT GET
  0BC4'   21 0080               	LD	HL,FBUFF
  0BC7'   CD 1C50'              	CALL	AAHL		;POINT TO CURRENT CHARACTER
  0BCA'   7E                    	LD	A,(HL)
  0BCB'   32 00A7'              	LD	(TYCURC),A	;GET CHARACTER
  0BCE'   3A 00AA'              	LD	A,(BUFPOS)
  0BD1'   FE 80                 	CP	080H
  0BD3'   20 0E                 	JR	NZ,TGET01	;IF BUFPOS=80
  0BD5'   2A 00A8'              	LD	HL,(RELREC)
  0BD8'   23                    	INC	HL
  0BD9'   22 00A8'              	LD	(RELREC),HL	;SET NEXT SECTOR
  0BDC'   AF                    	XOR	A
  0BDD'   32 00AA'              	LD	(BUFPOS),A	;BUFFER OFFSET=0
  0BE0'   CD 1B96'              	CALL	RDFS		;READ SECTOR
  0BE3'                         TGET01	EQU	$		;ENDIF
  0BE3'                         TGET02	EQU	$		;ENDIF
  0BE3'   3A 00A7'              	LD	A,(TYCURC)	;RETURN CHARACTER
  0BE6'   C9                    	RET
                                
                                ;
                                ; TPUT - TYPE A CHARACTER
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-29


                                ;
                                	$RTN	TPUT
  0BE7'                   +     TPUT:	DS	0
  0BE7'   47                    	LD	B,A
  0BE8'   3A 0B87'              	LD	A,(PGECOL)
  0BEB'   FE 48                 	CP	72
  0BED'   20 03                 	JR	NZ,TPUT01	;IF COL=72
  0BEF'   CD 0C01'              	CALL	TYNL		;TAKE NEW LINE
  0BF2'                         TPUT01	EQU	$		;ENDIF
  0BF2'   3A 0A98'              	LD	A,(TYPEOP)
  0BF5'   B7                    	OR	A
  0BF6'   20 08                 	JR	NZ,TPUT02	;IF NOT EOP
  0BF8'   78                    	LD	A,B
  0BF9'   CD 1D6E'              	CALL	ASCO		;OUTPUT CHARACTER
  0BFC'   21 0B87'              	LD	HL,PGECOL
  0BFF'   34                    	INC	(HL)		;INC COL COUNT
  0C00'                         TPUT02	EQU	$		;ENDIF
  0C00'   C9                    	RET
                                
                                ;
                                ; TYNL - TYPE NEW LINE
                                ;
                                	$RTN	TYNL
  0C01'                   +     TYNL:	DS	0
  0C01'   AF                    	XOR	A
  0C02'   32 0B87'              	LD	(PGECOL),A	;SET COL 0
  0C05'   21 0B88'              	LD	HL,PGELNE
  0C08'   34                    	INC	(HL)		;INC LINE
  0C09'   3E 12                 	LD	A,18
  0C0B'   BE                    	CP	(HL)
  0C0C'   20 07                 	JR	NZ,TYNL01	;IF LINE = 18
  0C0E'   3E FF                 	LD	A,0FFH
  0C10'   32 0A98'              	LD	(TYPEOP),A	;SET END OF PAGE
  0C13'   18 10                 	JR	TYNL02
  0C15'                         TYNL01	EQU	$		;ELSE
  0C15'   3E 0D                 	LD	A,00DH
  0C17'   CD 1CCE'              	CALL	CHRO
  0C1A'   3E 0A                 	LD	A,00AH
  0C1C'   CD 1CCE'              	CALL	CHRO		;OTPUT CRLF
                                	$STRO	TYNPRF		;RIGHT MARGIN
  0C1F'   21 0B89'        +     	LD	HL,TYNPRF
  0C22'   CD 1D62'        +     	CALL	STRO
  0C25'                         TYNL02	EQU	$		;ENDIF
  0C25'   C9                    	RET
                                
                                ;
                                ; CHDD - CHANGE DIRECTORY DRIVE
                                ;
                                	$RTN	CHDD
  0C26'                   +     CHDD:	DS	0
  0C26'   21 0C4F'              	LD	HL,DSKMSG
  0C29'   CD 1D48'              	CALL	CFLD		;CLEAR PROMPT FIELD
  0C2C'   3E FF                 	LD	A,TRUE
  0C2E'   32 0845'              	LD	(DRMDLD),A	;REQUEST LIST ON RETURN
                                	$IFLD	DSKMSG		;PROMPT FOR DRIVE
  0C31'   21 0C4F'        +     	LD	HL,DSKMSG		;POINT TO FIELD
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-30


  0C34'   CD 1D3A'        +     	CALL	DFLD			;DISPLAY IT
  0C37'   CD 1CC7'        +     	CALL	CHRF			;GET INPUT
  0C3A'   FE 1B                 	CP	$ESC
  0C3C'   28 10                 	JR	Z,CHDD03	;IF NOT ESC
  0C3E'   D6 41                 	SUB	041H		;MAKE DRIVE ID
  0C40'   CD 1958'              	CALL	CHDR		;CHANGE DISK
  0C43'   20 05                 	JR	NZ,CHDD04	;IF ILLEGAL DISK
  0C45'   CD 1CDD'              	CALL	ALRM		;SOUND ALARM
  0C48'   18 04                 	JR	CHDD05
  0C4A'                         CHDD04	EQU	$		;ELSE
  0C4A'   AF                    	XOR	A
  0C4B'   32 00BE'              	LD	(SELDE),A	;SELECT FIRST ENTRY
  0C4E'                         CHDD05	EQU	$		;ENDIF
  0C4E'                         CHDD03	EQU	$		;ENDIF
  0C4E'   C9                    	RET
                                
  0C4F'   0C 14 45 6E           DSKMSG:	DB	12,20,'Enter Drive Name or press ESC ===>',0
  0C53'   74 65 72 20           
  0C57'   44 72 69 76           
  0C5B'   65 20 4E 61           
  0C5F'   6D 65 20 6F           
  0C63'   72 20 70 72           
  0C67'   65 73 73 20           
  0C6B'   45 53 43 20           
  0C6F'   3D 3D 3D 3E           
  0C73'   00                    
  0C74'   2A 2A 20 4E           NFDMSG:	DB	'** No Files on Drive',0
  0C78'   6F 20 46 69           
  0C7C'   6C 65 73 20           
  0C80'   6F 6E 20 44           
  0C84'   72 69 76 65           
  0C88'   00                    
                                
                                ;
                                ; SAFN - SET DIRECTORY LIST AFN
                                ;
                                	$RTN	SAFN
  0C89'                   +     SAFN:	DS	0
                                	$NPANEL	AFNPNL		;DISPLAY SET AFN PANEL
  0C89'   CD 1CFE'        +     	CALL	DHDR
  0C8C'   21 0D22'        +     	LD	HL,AFNPNL	;POINT TO PANEL
  0C8F'   CD 1D30'        +     	CALL	DPNL		;DISPLAY IT
  0C92'   3E FF                 	LD	A,TRUE
  0C94'   32 0845'              	LD	(DRMDLD),A	;REQUEST DIRECTORY LIST
  0C97'   21 0113'              	LD	HL,LMDFCB+1
  0C9A'   11 0D17'              	LD	DE,CPYAFN
  0C9D'   01 000B               	LD	BC,11
  0CA0'   ED B0                 	LDIR			;TAKE LOCAL COPY OF DIR SEARCH NAME
  0CA2'   CD 0E57'              	CALL	DAFN		;DISPLAY CURRENT MASK
  0CA5'   AF                    	XOR	A
  0CA6'   32 0D0F'              	LD	(IMODE),A	;RESET INSERT MODE
  0CA9'   32 0D10'              	LD	(NMODE),A	;SET FOR NAME PART
  0CAC'   32 0D11'              	LD	(AFNCNT),A	;SET COUNT=0
  0CAF'   2A 0DD5'              	LD	HL,(AFNPNM)
  0CB2'   22 0D12'              	LD	(AFNCUR),HL	;SET START ADDRESS ON SCREEN
  0CB5'   3E 08                 	LD	A,8
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-31


  0CB7'   32 0D16'              	LD	(AFNMAX),A	;SET LENGTH OF FIELD
  0CBA'   21 0D17'              	LD	HL,CPYAFN
  0CBD'   22 0D14'              	LD	(AFNCHP),HL	;SAVE START ADDRESS IN MEMORY
  0CC0'                         SAFN01	EQU	$		;LOOP
  0CC0'   CD 0F47'              	CALL	AFNC		;POSITION CURSOR
  0CC3'   CD 1CC7'              	CALL	CHRF		;GET A CHARACTER
  0CC6'   FE 0D                 	CP	CR
  0CC8'   28 2B                 	JR	Z,SAFN02	;EXITIF C/R
  0CCA'   FE 1B                 	CP	$ESC
  0CCC'   28 27                 	JR	Z,SAFN02	;OR ESCAPE
                                	$MTCH	AFNACD
  0CCE'   21 0DE4'        +     	LD	HL,AFNACD
  0CD1'   CD 1C31'        +     	CALL	MTCH
  0CD4'   20 08                 	JR	NZ,SAFN03	;IF VALID CONTROL
                                	$EXVA	AFNAVC		;PERFORM ACTION
  0CD6'   11 0DED'        +     	LD	DE,AFNAVC
  0CD9'   CD 1C43'        +     	CALL	DOIT
  0CDC'   18 15                 	JR	SAFN04
  0CDE'                         SAFN03	EQU	$		;ELSE
                                	$MTCH	AFNINV
  0CDE'   21 0D07'        +     	LD	HL,AFNINV
  0CE1'   CD 1C31'        +     	CALL	MTCH
  0CE4'   28 0A                 	JR	Z,SAFN05	;IF NOT IN ILLEGAL CHARACTER SET
  0CE6'   FE 20                 	CP	020H
  0CE8'   DA 0CF0'              	JP	C,SAFN05	;AND NOT CONTROL CHARACTER
  0CEB'   CD 0E7C'              	CALL	PAFN		;PUT CHARACTER IN STRING
  0CEE'   18 03                 	JR	SAFN06
  0CF0'                         SAFN05	EQU	$		;ELSE
  0CF0'   CD 1CDD'              	CALL	ALRM		;RING BELL
  0CF3'                         SAFN06	EQU	$		;ENDIF
  0CF3'                         SAFN04	EQU	$		;ENDIF
  0CF3'   18 CB                 	JR	SAFN01
  0CF5'                         SAFN02	EQU	$		;ENDLOOP
  0CF5'   FE 1B                 	CP	$ESC
  0CF7'   28 0D                 	JR	Z,SAFN99	;IF EXIT BY C/R
  0CF9'   21 0D17'              	LD	HL,CPYAFN
  0CFC'   CD 162D'              	CALL	LSEL		;COPY NEW NAME TO FCB
  0CFF'   CD 1A52'              	CALL	RDIR		;READ DIRECTORY
  0D02'   AF                    	XOR	A
  0D03'   32 00BE'              	LD	(SELDE),A	;RESET CURRENT SELECTION
  0D06'                         SAFN99	EQU	$		;ENDIF
  0D06'   C9                    	RET
                                
  0D07'   07 7F 3A 3B           AFNINV:	DB	7,07FH,':;<>ÆÅ'	;INVALID FILENAME CHARACTERS
  0D0B'   3C 3E 5B 5D           
  0D0F'                         IMODE:	DS	1		;INSERT ON/OFF
  0D10'                         NMODE:	DS	1		;IN NAME/EXT PART
  0D11'                         AFNCNT:	DS	1		;CURENT POSITION IN NAME
  0D12'                         AFNCUR:	DS	2		;CURSOR POSITION OF CURRENT FIELD
  0D14'                         AFNCHP:	DS	2		;ADDRESS OF CURRENT FIELD
  0D16'                         AFNMAX:	DS	1		;LENGTH OF CURRENT PART
  0D17'                         CPYAFN:	DS	11
                                
  0D22'                         AFNPNL	EQU	$
  0D22'   0A                    	DB	10		;FIELD COUNT
  0D23'   02 00 5E 48           	DB	02,00,'^',$LEFT+040H,'  Cursor Left',0
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-32


  0D27'   20 20 43 75           
  0D2B'   72 73 6F 72           
  0D2F'   20 4C 65 66           
  0D33'   74 00                 
  0D35'   02 1B 5E 4C           	DB	02,27,'^',$RIGHT+040H,'  Cursor Right',0
  0D39'   20 20 43 75           
  0D3D'   72 73 6F 72           
  0D41'   20 52 69 67           
  0D45'   68 74 00              
  0D48'   03 00 5E 47           	DB	03,00,'^',$DELETE+040H,'  Delete Character',0
  0D4C'   20 20 44 65           
  0D50'   6C 65 74 65           
  0D54'   20 43 68 61           
  0D58'   72 61 63 74           
  0D5C'   65 72 00              
  0D5F'   03 1B 5E 56           	DB	03,27,'^',$INSRT+040H,'  Insert On/Off',0  
  0D63'   20 20 49 6E           
  0D67'   73 65 72 74           
  0D6B'   20 4F 6E 2F           
  0D6F'   4F 66 66 00           
  0D73'   02 36 5E 49           	DB	02,54,'^',$TAB+040H,'  Edit Name/Type',0
  0D77'   20 20 45 64           
  0D7B'   69 74 20 4E           
  0D7F'   61 6D 65 2F           
  0D83'   54 79 70 65           
  0D87'   00                    
  0D88'   03 36 45 53           	DB	03,54,'ESC Use Current Selection',0
  0D8C'   43 20 55 73           
  0D90'   65 20 43 75           
  0D94'   72 72 65 6E           
  0D98'   74 20 53 65           
  0D9C'   6C 65 63 74           
  0DA0'   69 6F 6E 00           
  0DA4'   07 08 45 64           AFNMSG:	DB	7,08,'Edit File Name ===>',0
  0DA8'   69 74 20 46           
  0DAC'   69 6C 65 20           
  0DB0'   4E 61 6D 65           
  0DB4'   20 3D 3D 3D           
  0DB8'   3E 00                 
  0DBA'   07 25 3C 3D           	DB	7,37,'<=',0			;FILENAME END MARKER
  0DBE'   00                    
  0DBF'   09 0D 46 69           	DB	9,13,'File Type ===>',0
  0DC3'   6C 65 20 54           
  0DC7'   79 70 65 20           
  0DCB'   3D 3D 3D 3E           
  0DCF'   00                    
  0DD0'   09 20 3C 3D           	DB	9,32,'<=',0			;FILE TYPE END MARKER
  0DD4'   00                    
  0DD5'   07 1C 00              AFNPNM:	DB	7,28,0				;POSITION OF FILE NAME
  0DD8'   09 1C 00              AFNPEX:	DB	9,28,0				;POSITION OF FILE TYPE
                                
  0DDB'   05 1D 49 6E           INSMSG:	DB	05,29,'Insert',0
  0DDF'   73 65 72 74           
  0DE3'   00                    
                                
  0DE4'   08 08 0C 07           AFNACD:	DB	8,$LEFT,$RIGHT,$DELETE,$INSRT,$TAB,' .*'
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-33


  0DE8'   16 09 20 2E           
  0DEC'   2A                    
                                
  0DED'   0EBF'                 AFNAVC:	DW	AFNL		;CURSROR LEFT
  0DEF'   0EE4'                 	DW	AFNR		;CURSOR RIGHT
  0DF1'   0E07'                 	DW	AFND		;DELETE CHAR
  0DF3'   0F06'                 	DW	AFNI		;TOGGLE INSERT MODE
  0DF5'   0F1C'                 	DW	AFNT		;TOGGLE NAME MODE
  0DF7'   0E27'                 	DW	AFNS		;SPACE FILL FIELD
  0DF9'   0DFD'                 	DW	AFNP		;PERIOD
  0DFB'   0E30'                 	DW	AFNQ		; "?" FILL (USED BY "*")
                                ;
                                ; AFNP - PERIOD IN AFN
                                ;
                                	$RTN	AFNP
  0DFD'                   +     AFNP:	DS	0
  0DFD'   3A 0D10'              	LD	A,(NMODE)
  0E00'   B7                    	OR	A
  0E01'   20 03                 	JR	NZ,AFNP01	;IF IN NAME
  0E03'   CD 0E27'              	CALL	AFNS		;SPACE FILL
  0E06'                         AFNP01	EQU	$		;ENDIF
  0E06'   C9                    	RET
                                ;
                                ; AFND - DELETE CHARACTER IN AFN
                                ;
                                	$RTN	AFND
  0E07'                   +     AFND:	DS	0
  0E07'   2A 0D14'              	LD	HL,(AFNCHP)	;ADDRESS OF CURRENT FIELD
  0E0A'   3A 0D11'              	LD	A,(AFNCNT)
  0E0D'   4F                    	LD	C,A		;SAVE COUNT
  0E0E'   CD 1C50'              	CALL	AAHL		;ADDRESS OF CURRENT CHARACTER
  0E11'   54                    	LD	D,H
  0E12'   5D                    	LD	E,L		;DEST IN DE
  0E13'   23                    	INC	HL		;SOURCE IN HL
  0E14'   3A 0D16'              	LD	A,(AFNMAX)	;LENGTH OF FIELD
  0E17'   91                    	SUB	C		;LENGTH REMAINING
  0E18'   3D                    	DEC	A		;LENGTH TO MOVE
  0E19'   28 05                 	JR	Z,AFND01	;IF SOMETHING TO MOVE
  0E1B'   06 00                 	LD	B,0
  0E1D'   4F                    	LD	C,A		;SET UP COUNT
  0E1E'   ED B0                 	LDIR			;MOVE FIELD LEFT
  0E20'                         AFND01	EQU	$		;ENDIF
  0E20'   3E 20                 	LD	A,' '
  0E22'   12                    	LD	(DE),A		;BLANK LAST CHARACTER
  0E23'   CD 0E57'              	CALL	DAFN		;DISPLAY NEW AFN
  0E26'   C9                    	RET
                                ;
                                ; AFNS - SPACE FILL AFN
                                ;
                                	$RTN	AFNS
  0E27'                   +     AFNS:	DS	0
  0E27'   3E 20                 	LD	A,' '
  0E29'   32 0E39'              	LD	(FILLCH),A
  0E2C'   CD 0E3A'              	CALL	AFNF
  0E2F'   C9                    	RET
                                ;
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-34


                                ; AFNQ - "?" FILL AFN
                                ;
                                	$RTN	AFNQ
  0E30'                   +     AFNQ:	DS	0
  0E30'   3E 3F                 	LD	A,'?'
  0E32'   32 0E39'              	LD	(FILLCH),A
  0E35'   CD 0E3A'              	CALL	AFNF
  0E38'   C9                    	RET
                                
  0E39'                         FILLCH:	DS	1		;CHARACTER TO FILL AFN
                                
                                ;
                                ; AFNF - FILL AFN FIELD
                                ;
                                	$RTN	AFNF
  0E3A'                   +     AFNF:	DS	0
  0E3A'   2A 0D14'              	LD	HL,(AFNCHP)
  0E3D'   3A 0D11'              	LD	A,(AFNCNT)
  0E40'   47                    	LD	B,A		;SAVE COUNT
  0E41'   CD 1C50'              	CALL	AAHL		;POSITION IN FIELD
  0E44'   3A 0D16'              	LD	A,(AFNMAX)
  0E47'   90                    	SUB	B
  0E48'   47                    	LD	B,A		;SAVE COUNT
  0E49'   3A 0E39'              	LD	A,(FILLCH)
  0E4C'                         AFNF01	EQU	$		;REPEAT
  0E4C'   77                    	LD	(HL),A		;INSERT SPACE
  0E4D'   23                    	INC	HL		;POINT NEXT CHARACTER
  0E4E'   10 FC                 	DJNZ	AFNF01		;UNTIL END OF FIELD
  0E50'   CD 0E57'              	CALL	DAFN		;DISPLAY FIELD
  0E53'   CD 0F1C'              	CALL	AFNT		;POSITION IN OTHER HALF
  0E56'   C9                    	RET
                                
                                ;
                                ; DAFN - DISPLAY DIRECTORY SEARCH NAME
                                ;
                                	$RTN	DAFN
  0E57'                   +     DAFN:	DS	0
                                	$FLD	AFNPNM		;POSITION FOR NAME
  0E57'   21 0DD5'        +     	LD	HL,AFNPNM
  0E5A'   CD 1D3A'        +     	CALL	DFLD
  0E5D'   06 08                 	LD	B,8
  0E5F'   21 0D17'              	LD	HL,CPYAFN
  0E62'                         DAFN01	EQU	$		;LOOP
  0E62'   7E                    	LD	A,(HL)
  0E63'   CD 1CCE'              	CALL	CHRO		;PRINT A CHARCTER
  0E66'   23                    	INC	HL		;POINT TO NEXT
  0E67'   10 F9                 	DJNZ	DAFN01		;UNTIL END OF FIELD
                                	$FLD	AFNPEX		;POSITION FOR TYPE
  0E69'   21 0DD8'        +     	LD	HL,AFNPEX
  0E6C'   CD 1D3A'        +     	CALL	DFLD
  0E6F'   21 0D1F'              	LD	HL,CPYAFN+8
  0E72'   06 03                 	LD	B,3
  0E74'                         DAFN02	EQU	$		;REPEAT
  0E74'   7E                    	LD	A,(HL)
  0E75'   CD 1CCE'              	CALL	CHRO		;PRINT CHAR
  0E78'   23                    	INC	HL		;POINT TO NEXT
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-35


  0E79'   10 F9                 	DJNZ	DAFN02		;UNTIL END OF FIELD
  0E7B'   C9                    	RET
                                
                                ;
                                ; PAFN - PUT CHARACTER IN STRING
                                ;
                                	$RTN	PAFN
  0E7C'                   +     PAFN:	DS	0
  0E7C'   F5                    	PUSH	AF		;SAVE CHARACTER
  0E7D'   3A 0D0F'              	LD	A,(IMODE)
  0E80'   B7                    	OR	A	
  0E81'   28 03                 	JR	Z,PAFN01	;IF INSERT ON
  0E83'   CD 0EA1'              	CALL	AFNM		;MAKE SPACE
  0E86'                         PAFN01	EQU	$		;ENDIF
  0E86'   2A 0D14'              	LD	HL,(AFNCHP)	;GET CHARACTER POSITION
  0E89'   3A 0D11'              	LD	A,(AFNCNT)
  0E8C'   CD 1C50'              	CALL	AAHL		;ADD COUNT TO HL
  0E8F'   F1                    	POP	AF		;RESTORE CHARACTER
  0E90'   77                    	LD	(HL),A		;PUT IT IN STRING
  0E91'   CD 1CCE'              	CALL	CHRO		;DISPLAY CHARACTER
  0E94'   3A 0D0F'              	LD	A,(IMODE)
  0E97'   B7                    	OR	A
  0E98'   28 03                 	JR	Z,PAFN02	;IF INSERT ON
  0E9A'   CD 0E57'              	CALL	DAFN		;DISPLAY FULL NAME
  0E9D'                         PAFN02	EQU	$		;ENDIF
  0E9D'   CD 0EE4'              	CALL	AFNR		;MOVE CURSOR
  0EA0'   C9                    	RET
                                ;
                                ; AFNM - MAKE SPACE FOR INSERT
                                ;
                                	$RTN	AFNM
  0EA1'                   +     AFNM:	DS	0
  0EA1'   2A 0D14'              	LD	HL,(AFNCHP)	;ADDRESS OF CURRENT FIELD
  0EA4'   3A 0D16'              	LD	A,(AFNMAX)
  0EA7'   3D                    	DEC	A		;ADJUST COUNT TO OFFSET
  0EA8'   CD 1C50'              	CALL	AAHL		;ADDRESS OF LAST CHARACTER
  0EAB'   54                    	LD	D,H
  0EAC'   5D                    	LD	E,L		;DEST IN DE
  0EAD'   2B                    	DEC	HL		;SOURCE IN HL
  0EAE'   3A 0D11'              	LD	A,(AFNCNT)	;CURRENT OFFSET
  0EB1'   4F                    	LD	C,A
  0EB2'   3A 0D16'              	LD	A,(AFNMAX)
  0EB5'   91                    	SUB	C		;LENGTH REMAINING
  0EB6'   3D                    	DEC	A		;LENGTH TO MOVE
  0EB7'   28 05                 	JR	Z,AFNM01	;IF SOMETHING TO MOVE
  0EB9'   06 00                 	LD	B,0
  0EBB'   4F                    	LD	C,A		;SET UP COUNT
  0EBC'   ED B8                 	LDDR			;MOVE FIELD RIGHT
  0EBE'                         AFNM01	EQU	$		;ENDIF
  0EBE'   C9                    	RET
                                ;
                                ; AFNL - CURSOR LEFT IN AFN
                                ;
                                	$RTN	AFNL
  0EBF'                   +     AFNL:	DS	0
  0EBF'   3A 0D11'              	LD	A,(AFNCNT)
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-36


  0EC2'   B7                    	OR	A
  0EC3'   28 03                 	JR	Z,AFNL01	;IF NOT START OF FIELD
  0EC5'   3D                    	DEC	A		;POSITION TO PREVIOUS
  0EC6'   18 18                 	JR	AFNL02
  0EC8'                         AFNL01	EQU	$		;ELSE
  0EC8'   CD 0F1C'              	CALL	AFNT		;TOGGLE MODE
  0ECB'   3A 0D16'              	LD	A,(AFNMAX)	;GET END OF FIELD COUNT
  0ECE'   3D                    	DEC	A		;POINT TO LAST CHAR IN FIELD
  0ECF'   47                    	LD	B,A		;SET COUNT
  0ED0'   3D                    	DEC	A		;POINT TO PREVIOUS
  0ED1'   2A 0D14'              	LD	HL,(AFNCHP)
  0ED4'   CD 1C50'              	CALL	AAHL
  0ED7'   3E 20                 	LD	A,' '
  0ED9'                         AFNL03	EQU	$		;REPEAT
  0ED9'   BE                    	CP	(HL)
  0EDA'   20 03                 	JR	NZ,AFNL04	;EXITIF PREVIOUS NOT SPACE
  0EDC'   2B                    	DEC	HL
  0EDD'   10 FA                 	DJNZ	AFNL03		;UNTIL END OF FIELD
  0EDF'                         AFNL04	EQU	$		;ENDLOOP
  0EDF'   78                    	LD	A,B		;RESTORE COUNT
  0EE0'                         AFNL02	EQU	$		;ENDIF
  0EE0'   32 0D11'              	LD	(AFNCNT),A	;BACKSPACE POSITION
  0EE3'   C9                    	RET
                                
                                ;
                                ; AFNR - CURSOR RIGHT IN AFN
                                ;
                                	$RTN	AFNR
  0EE4'                   +     AFNR:	DS	0
  0EE4'   2A 0D14'              	LD	HL,(AFNCHP)
  0EE7'   3A 0D11'              	LD	A,(AFNCNT)
  0EEA'   CD 1C50'              	CALL	AAHL		;POINT TO CURRENT CHARACTER
  0EED'   7E                    	LD	A,(HL)
  0EEE'   FE 20                 	CP	' '
  0EF0'   20 05                 	JR	NZ,AFNR02	;IF SPACE
  0EF2'   CD 0F1C'              	CALL	AFNT		;CHANGE MODE
  0EF5'   18 0E                 	JR	AFNR03
  0EF7'                         AFNR02	EQU	$		;ELSE
  0EF7'   3A 0D16'              	LD	A,(AFNMAX)	;GET FIELD MAX
  0EFA'   21 0D11'              	LD	HL,AFNCNT
  0EFD'   34                    	INC	(HL)		;INC POSITION
  0EFE'   BE                    	CP	(HL)
  0EFF'   C2 0F05'              	JP	NZ,AFNR01	;IF OUT OF RANGE
  0F02'   CD 0F1C'              	CALL	AFNT		;TOGGLE MODE
  0F05'                         AFNR01	EQU	$		;ENDIF
  0F05'                         AFNR03	EQU	$		;ENDIF
  0F05'   C9                    	RET
                                ;
                                ; AFNI - TOGGLE AFN INSERT MODE
                                ;
                                	$RTN	AFNI
  0F06'                   +     AFNI:	DS	0
  0F06'   3A 0D0F'              	LD	A,(IMODE)
  0F09'   2F                    	CPL
  0F0A'   32 0D0F'              	LD	(IMODE),A	;TOGGLE MODE FLAG
  0F0D'   21 0DDB'              	LD	HL,INSMSG	;POINT TO INSERT MESSAGE
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-37


  0F10'   B7                    	OR	A
  0F11'   28 05                 	JR	Z,AFNI01	;IF NOW INSERT MODE
  0F13'   CD 1D3A'              	CALL	DFLD		;DISPLAY IT
  0F16'   18 03                 	JR	AFNI02
  0F18'                         AFNI01	EQU	$		;ELSE
  0F18'   CD 1D48'              	CALL	CFLD		;CLEAR IT
  0F1B'                         AFNI02	EQU	$		;ENDIF
  0F1B'   C9                    	RET
                                
                                ;
                                ; AFNT - TOGGLE AFN MODE
                                ;
                                	$RTN	AFNT
  0F1C'                   +     AFNT:	DS	0
  0F1C'   AF                    	XOR	A
  0F1D'   32 0D11'              	LD	(AFNCNT),A	;RESET COUNT
  0F20'   3A 0D10'              	LD	A,(NMODE)
  0F23'   2F                    	CPL
  0F24'   32 0D10'              	LD	(NMODE),A	;TOGLE MODE FLAG
  0F27'   B7                    	OR	A
  0F28'   20 0A                 	JR	NZ,AFNT01	;IF NOW NAME MODE
  0F2A'   3E 08                 	LD	A,8		;GET MAX LENGTH
  0F2C'   2A 0DD5'              	LD	HL,(AFNPNM)	;GET START POSITION
  0F2F'   11 0D17'              	LD	DE,CPYAFN
  0F32'   18 08                 	JR	AFNT02		
  0F34'                         AFNT01	EQU	$		;ELSE
  0F34'   3E 03                 	LD	A,3		;GET MAX FOR EXTENSION
  0F36'   2A 0DD8'              	LD	HL,(AFNPEX)	;GET POSITION FOR EXTENSION
  0F39'   11 0D1F'              	LD	DE,CPYAFN+8
  0F3C'                         AFNT02	EQU	$		;ENDIF
  0F3C'   32 0D16'              	LD	(AFNMAX),A	;SET MAX
  0F3F'   22 0D12'              	LD	(AFNCUR),HL	;SET START POSITION
  0F42'   ED 53 0D14'           	LD	(AFNCHP),DE	;SET START ADDRESS
  0F46'   C9                    	RET
                                
                                ;
                                ; AFNC - POSITION CURSOR IN AFN
                                ;
                                	$RTN	AFNC
  0F47'                   +     AFNC:	DS	0
  0F47'   2A 0D12'              	LD	HL,(AFNCUR)	;GET START OF FIELD
  0F4A'   3A 0D11'              	LD	A,(AFNCNT)	;GET OFFSET
  0F4D'   84                    	ADD	A,H
  0F4E'   67                    	LD	H,A		;OFFSET CURSOR
  0F4F'   CD 1D19'              	CALL	CURS		;POSITION CURSOR
  0F52'   C9                    	RET
                                
                                ;
                                ; TFLE - TEST FILE
                                ;
                                	$RTN	TFLE
  0F53'                   +     TFLE:	DS	0
  0F53'   AF                    	XOR	A
  0F54'   32 0F98'              	LD	(FLERR),A	;RESET ERROR FLAG
  0F57'   11 005C               	LD	DE,WRKFCB	;POINT TO WORK FCB
  0F5A'   0E 0F                 	LD	C,OPEN
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-38


  0F5C'   CD 0005               	CALL	CPM		;ATTEMPT TO OPEN FILE
  0F5F'   3C                    	INC	A
  0F60'   20 0E                 	JR	NZ,TFLE01	;IF OPEN ERROR
  0F62'   21 0833'              	LD	HL,FNFMSG
  0F65'   22 00C6'              	LD	(ERRTXT),HL	;SET FILE NOT FOUND ERROR
  0F68'   3E FF                 	LD	A,0FFH
  0F6A'   32 0F98'              	LD	(FLERR),A	;SET ERROR FLAG
  0F6D'   C3 0F97'              	JP	TFLE02
  0F70'                         TFLE01	EQU	$		;ELSE
  0F70'   21 0000               	LD	HL,0
  0F73'   22 00A8'              	LD	(RELREC),HL	;INITIALISE RECORD COUNTER
  0F76'   22 00B0'              	LD	(SAVFSC),HL
  0F79'   11 005D               	LD	DE,WRKFN
  0F7C'   CD 1B3F'              	CALL	FMTN
  0F7F'   3A 005C               	LD	A,(WRKDR)
  0F82'   C6 40                 	ADD	A,040H
  0F84'   32 0415'              	LD	(DRIVNM),A	;FORMAT NAME AND DRIVE
  0F87'   CD 1B96'              	CALL	RDFS		;READ SECTOR
  0F8A'   28 0B                 	JR	Z,TFLE03	;IF READ BAD
  0F8C'   21 081D'              	LD	HL,NRFMSG
  0F8F'   22 00C6'              	LD	(ERRTXT),HL	;SET NO RECORDS ON FILE ERROR
  0F92'   3E FF                 	LD	A,0FFH
  0F94'   32 0F98'              	LD	(FLERR),A	;SET ERROR FLAG
  0F97'                         TFLE03	EQU	$		;ENDIF
  0F97'                         TFLE02	EQU	$		;ENDIF
  0F97'   C9                    	RET
  0F98'                         FLERR:	DS	1
                                
                                ;
                                ; PSMD - PHYSICAL SECTOR MODE
                                ;
                                	$RTN	PSMD
  0F99'                   +     PSMD:	DS	0
  0F99'   2A 11BE'              	LD	HL,(PSMDER)
  0F9C'   22 00C3'              	LD	(ERRFLD),HL	;SET ERROR FIELD POINTER
  0F9F'   3E FF                 	LD	A,0FFH
  0FA1'   32 1011'              	LD	(PMNEWD),A	;FLAG NEW DISK
  0FA4'   32 00E0'              	LD	(RPANEL),A	;REQUEST PANEL
  0FA7'                         PSMD05	EQU	$		;LOOP 
  0FA7'   CD 185E'              	CALL	ZBSA		;CLEAR ADDRESS COUNTER
  0FAA'   3A 1011'              	LD	A,(PMNEWD)
  0FAD'   B7                    	OR	A
  0FAE'   CA 0FC8'              	JP	Z,PSMD01	;IF NEW DISK
  0FB1'   AF                    	XOR	A
  0FB2'   32 1011'              	LD	(PMNEWD),A	;RESET FLAG
  0FB5'   3A 00C2'              	LD	A,(CURAN)
  0FB8'   4F                    	LD	C,A
  0FB9'   CD 014B'              	CALL	SELDSK		;SELECT PHYSICAL DISK
  0FBC'   CD 0148'              	CALL	HOME		;HOME THE DISK
  0FBF'   21 0000               	LD	HL,0
  0FC2'   22 1037'              	LD	(PSMDTR),HL	;SET TRACK TO 0
  0FC5'   22 1039'              	LD	(PSMDSC),HL	;SET SECTOR TO 0
  0FC8'                         PSMD01	EQU	$		;ENDIF
  0FC8'   3A 00E0'              	LD	A,(RPANEL)
  0FCB'   B7                    	OR	A
  0FCC'   28 16                 	JR	Z,PSMD06	;IF PANEL REQUIRED
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-39


  0FCE'   AF                    	XOR	A
  0FCF'   32 00E0'              	LD	(RPANEL),A	;RESET FLAG
                                	$NPANEL	PSMDPN		;DISPLAY PHYSICAL MODE PANEL
  0FD2'   CD 1CFE'        +     	CALL	DHDR
  0FD5'   21 1085'        +     	LD	HL,PSMDPN	;POINT TO PANEL
  0FD8'   CD 1D30'        +     	CALL	DPNL		;DISPLAY IT
                                	$FLD	PSPMSG
  0FDB'   21 11C0'        +     	LD	HL,PSPMSG
  0FDE'   CD 1D3A'        +     	CALL	DFLD
  0FE1'   CD 05CF'              	CALL	DSPI		;DISPLAY SCRATCHPAD DATA
  0FE4'                         PSMD06	EQU	$
  0FE4'   CD 1250'              	CALL	PRDD		;READ AND DISPLAY SECTOR
  0FE7'   CD 1BFA'              	CALL	ERRP		;PROCESS ERROR MESSAGES
  0FEA'                         PSMD03	EQU	$		;LOOP
                                	$IFLD	SELMSG		;ISSUE SELMSG, GET COMMAND
  0FEA'   21 02DF'        +     	LD	HL,SELMSG		;POINT TO FIELD
  0FED'   CD 1D3A'        +     	CALL	DFLD			;DISPLAY IT
  0FF0'   CD 1CC7'        +     	CALL	CHRF			;GET INPUT
                                	$MTCH	PSMDLS
  0FF3'   21 11E6'        +     	LD	HL,PSMDLS
  0FF6'   CD 1C31'        +     	CALL	MTCH
  0FF9'   28 05                 	JR	Z,PSMD02	;EXITIF VALID
  0FFB'   CD 1CDD'              	CALL	ALRM		;SOUND THE ALARM
  0FFE'   18 EA                 	JR	PSMD03
  1000'                         PSMD02	EQU	$		;ENDLOOP
                                	$EXVA	PSMDVC		;EXEC ACTION
  1000'   11 11F3'        +     	LD	DE,PSMDVC
  1003'   CD 1C43'        +     	CALL	DOIT
  1006'   3A 00CA'              	LD	A,(WTG)
  1009'   FE 50                 	CP	'P'
  100B'   20 03                 	JR	NZ,PSMD04	;EXIT IF NEXT MODE <> P
  100D'   C3 0FA7'              	JP	PSMD05
  1010'                         PSMD04	EQU	$		;ENDLOOP
  1010'   C9                    	RET
  1011'                         PMNEWD:	DS	1		;NEW DISK FLAG
                                ;
                                ; LOCAL DISK PARAMETER HEADER
                                ;
  1012'                         DPHLCL	EQU	$
  1012'                         DPHXLT:	DS	2
  1014'                         	DS	6		;FILLER
  101A'                         DPHDIR:	DS	2
  101C'                         DPHDPB:	DS	2
  101E'                         DPHCSV:	DS	2
  1020'                         DPHALV:	DS	2
                                ;
                                ; LOCAL DISK PARAMETER BLOCK
                                ;
  1022'                         DPBLCL	EQU	$
  1022'                         DPBSPT:	DS	2		;CP/M LOGICAL SECTORS PER TRACK
  1024'                         DPBBSH:	DS	1
  1025'                         DPBBLM:	DS	1		;LOGICAL SECTORS PER BLOCK - 1
  1026'                         DPBEXM:	DS	1
  1027'                         DPBDSM:	DS	2		;FILE BLOCKS PER DISK
  1029'                         DPBDRM:	DS	2
  102B'                         DPBAL0:	DS	1
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-40


  102C'                         DPBAL1:	DS	1
  102D'                         DPBCKS:	DS	2
  102F'                         DPBOFF:	DS	2
                                ;
                                ; LOCAL DISK PARAMETER EXTENSIONS
                                ;
  1031'                         DPETPD:	DS	2		;TRACKS PER DISK
  1033'                         DPESPB:	DS	2		;SECTORS PER BLOCK
  1035'                         DPERSC:	DS	2		;RESERVED SECTORS
                                
                                
  1037'                         PSMDTR:	DS	2
  1039'                         PSMDSC:	DS	2
  103B'                         PSMDBL:	DS	2
                                
                                ;
                                ; PHYSICAL DISK MODE MESSAGES, PANEL AND ACTION VECTOR
                                ;
  103D'   0B 04 45 6E           TRKMSG:	DB	11,04,'Enter Hex Track',0	;OVERLAID BY CTRMSG
  1041'   74 65 72 20           
  1045'   48 65 78 20           
  1049'   54 72 61 63           
  104D'   6B 00                 
  104F'   0B 17 45 6E           SECMSG:	DB	11,23,'Enter Hex Sector',0	;OVERLAID BY CSCMSG
  1053'   74 65 72 20           
  1057'   48 65 78 20           
  105B'   53 65 63 74           
  105F'   6F 72 00              
  1062'   0B 2A 45 6E           BLKMSG:	DB	11,42,'Enter Hex Block',0	;OVERLAID BY CBLMSG
  1066'   74 65 72 20           
  106A'   48 65 78 20           
  106E'   42 6C 6F 63           
  1072'   6B 00                 
  1074'   0B 3D 45 6E           DIDMSG:	DB	11,61,'Enter Drive ID',0	;OVERLAID BY CDKMSG
  1078'   74 65 72 20           
  107C'   44 72 69 76           
  1080'   65 20 49 44           
  1084'   00                    
                                
  1085'   10                    PSMDPN:	DB	16				;FIELD COUNT
  1086'   02 00 4E 20           	DB	02,00,'N  Next sector',0
  108A'   20 4E 65 78           
  108E'   74 20 73 65           
  1092'   63 74 6F 72           
  1096'   00                    
  1097'   03 00 50 20           	DB	03,00,'P  Previous sector',0
  109B'   20 50 72 65           
  109F'   76 69 6F 75           
  10A3'   73 20 73 65           
  10A7'   63 74 6F 72           
  10AB'   00                    
  10AC'   04 00 49 20           	DB	04,00,'I  Next track',0
  10B0'   20 4E 65 78           
  10B4'   74 20 74 72           
  10B8'   61 63 6B 00           
  10BC'   05 00 4F 20           	DB	05,00,'O  Previous track',0
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-41


  10C0'   20 50 72 65           
  10C4'   76 69 6F 75           
  10C8'   73 20 74 72           
  10CC'   61 63 6B 00           
  10D0'   02 1B 54 20           	DB	02,27,'T  Select track',0
  10D4'   20 53 65 6C           
  10D8'   65 63 74 20           
  10DC'   74 72 61 63           
  10E0'   6B 00                 
  10E2'   03 1B 53 20           	DB	03,27,'S  Select sector',0
  10E6'   20 53 65 6C           
  10EA'   65 63 74 20           
  10EE'   73 65 63 74           
  10F2'   6F 72 00              
  10F5'   04 1B 42 20           	DB	04,27,'B  Select block',0
  10F9'   20 53 65 6C           
  10FD'   65 63 74 20           
  1101'   62 6C 6F 63           
  1105'   6B 00                 
  1107'   05 1B 44 20           	DB	05,27,'D  Select drive',0
  110B'   20 53 65 6C           
  110F'   65 63 74 20           
  1113'   64 72 69 76           
  1117'   65 00                 
  1119'   02 36 5A 20           	DB	02,54,'Z  Exit from Superzap',0
  111D'   20 45 78 69           
  1121'   74 20 66 72           
  1125'   6F 6D 20 53           
  1129'   75 70 65 72           
  112D'   7A 61 70 00           
  1131'   03 36 4C 20           	DB	03,54,'L  Exit to file list',0
  1135'   20 45 78 69           
  1139'   74 20 74 6F           
  113D'   20 66 69 6C           
  1141'   65 20 6C 69           
  1145'   73 74 00              
  1148'   04 36 58 20           	DB	04,54,'X  Scratchpad operations',0
  114C'   20 53 63 72           
  1150'   61 74 63 68           
  1154'   70 61 64 20           
  1158'   6F 70 65 72           
  115C'   61 74 69 6F           
  1160'   6E 73 00              
  1163'   05 36 43 20           	DB	05,54,'C  Change sector',0
  1167'   20 43 68 61           
  116B'   6E 67 65 20           
  116F'   73 65 63 74           
  1173'   6F 72 00              
                                
  1176'   0B 04 43 75           CTRMSG:	DB	11,04,'Current-Track  ',0	;OVERLAID BY TRKMSG
  117A'   72 72 65 6E           
  117E'   74 2D 54 72           
  1182'   61 63 6B 20           
  1186'   20 00                 
  1188'   0B 17 43 75           CSCMSG:	DB	11,23,'Current-Sector  ',0	;OVERLAID BY SECMSG
  118C'   72 72 65 6E           
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-42


  1190'   74 2D 53 65           
  1194'   63 74 6F 72           
  1198'   20 20 00              
  119B'   0B 2A 43 75           CBLMSG:	DB	11,42,'Current-Block  ',0	;OVERLAID BY BLKMSG
  119F'   72 72 65 6E           
  11A3'   74 2D 42 6C           
  11A7'   6F 63 6B 20           
  11AB'   20 00                 
  11AD'   0B 3D 43 75           CDKMSG:	DB	11,61,'Current-Drive ',0	;OVERLAID BY DIDMSG
  11B1'   72 72 65 6E           
  11B5'   74 2D 44 72           
  11B9'   69 76 65 20           
  11BD'   00                    
                                
  11BE'   08 00                 PSMDER:	DB	8,0		;ERROR FIELD
  11C0'   07 00 53 63           PSPMSG:	DB	07,00,'Scratchpad :- ',0
  11C4'   72 61 74 63           
  11C8'   68 70 61 64           
  11CC'   20 3A 2D 20           
  11D0'   00                    
                                ;
                                ; FILE STATISTICS FIELDS
                                ;
  11D1'   0C 0B 00              PSTRFL:	DB	12,11,0
  11D4'   0C 0F 00              PSTRIP:	DB	12,15,0
  11D7'   0C 1C 00              PSSCFL:	DB	12,28,0
  11DA'   0C 20 00              PSSCIP:	DB	12,32,0 
  11DD'   0C 2F 00              PSBLFL:	DB	12,47,0
  11E0'   0C 33 00              PSBLIP:	DB	12,51,0
  11E3'   0C 43 00              PSDKFL:	DB	12,67,0
                                
  11E6'   0C 4E 43 50           PSMDLS:	DB	12,'NCPSITOZLBDX'
  11EA'   53 49 54 4F           
  11EE'   5A 4C 42 44           
  11F2'   58                    
  11F3'                         PSMDVC	EQU	$
  11F3'   12C9'                 	DW	NXPS		;NEXT PHYSICAL SECTOR
  11F5'   1636'                 	DW	PSCH		;PHYSICAL SECTOR CHNAGE MODE
  11F7'   12E3'                 	DW	PRPS		;PREVIOUS PHYSICAL SECTOR
  11F9'   12F5'                 	DW	SPSN		;SET PHYSICAL SECTOR
  11FB'   1384'                 	DW	FRTR		;FORWARD TRACK
  11FD'   139B'                 	DW	SPTN		;SET PHYSICAL TRACK
  11FF'   142A'                 	DW	BWTR		;BACKWARD TRACK
  1201'   1CA2'                 	DW	SETX		;SET EXIT MODE
  1203'   120B'                 	DW	PTOD		;CHANGE TO DIRECTORY MODE
  1205'   1439'                 	DW	SPBL		;SET PHYSICAL BLOCK
  1207'   1215'                 	DW	CHPD		;CHANGE PHYSICAL DISK
  1209'   14E7'                 	DW	PSPM		;PHYSICAL S/P MANAGER
                                ;
                                ; PTOD - CHANGE TO DIRECTORY
                                ;
                                	$RTN	PTOD
  120B'                   +     PTOD:	DS	0
  120B'   3A 00C2'              	LD	A,(CURAN)
  120E'   CD 1958'              	CALL	CHDR		;RESET DISKS
  1211'   CD 1C90'              	CALL	SETD		;SET D MODE
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-43


  1214'   C9                    	RET
                                ;
                                ; CHPD - CHANGE PHYSICAL DISK
                                ;
                                	$RTN	CHPD
  1215'                   +     CHPD:	DS	0
                                	$FLD	DIDMSG		;DISPLAY PROMP
  1215'   21 1074'        +     	LD	HL,DIDMSG
  1218'   CD 1D3A'        +     	CALL	DFLD
  121B'                         CHPD01	EQU	$		;LOOP
                                	$FLD	PSDKFL		;POSITION FOR DISK ID
  121B'   21 11E3'        +     	LD	HL,PSDKFL
  121E'   CD 1D3A'        +     	CALL	DFLD
  1221'   3A 00C2'              	LD	A,(CURAN)	;GET ABSOLUTE DRIVE NUMBER
  1224'   C6 41                 	ADD	A,041H		;MAKE IT ALPHA
  1226'   CD 1CCE'              	CALL	CHRO		;DISPLAY DRIVE ID
  1229'   CD 1CC7'              	CALL	CHRF
  122C'   FE 1B                 	CP	$ESC
  122E'   28 10                 	JR	Z,CHPD02	;EXIT IF ESCAPE
  1230'   FE 0D                 	CP	CR
  1232'   28 0C                 	JR	Z,CHPD02	;OR CR
  1234'   D6 41                 	SUB	041H		;MAKE IT DISK NUMBER
  1236'   CD 1958'              	CALL	CHDR		;CHANGE DRIVE
  1239'   20 05                 	JR	NZ,CHPD02	;EXITIF NON ZERO DPH
  123B'   CD 1CDD'              	CALL	ALRM		;RING BELL
  123E'   18 DB                 	JR	CHPD01
  1240'                         CHPD02	EQU	$		;ENDLOOP
  1240'   FE 1B                 	CP	$ESC
  1242'   28 05                 	JR	Z,CHPD03	;IF NOT ESC
  1244'   3E FF                 	LD	A,0FFH
  1246'   32 1011'              	LD	(PMNEWD),A	;FLAG NEW DISK
  1249'                         CHPD03	EQU	$
                                	$FLD	CDKMSG		;REDISPLAY CURRENT
  1249'   21 11AD'        +     	LD	HL,CDKMSG
  124C'   CD 1D3A'        +     	CALL	DFLD
  124F'   C9                    	RET
                                
                                ;
                                ; PRDD - READ AND DISPLAY PHYSICAL SECTOR
                                ;
                                	$RTN	PRDD
  1250'                   +     PRDD:	DS	0
  1250'   CD 1BC7'              	CALL	PSRD		;READ PHYSICAL SECTOR
  1253'   21 0080               	LD	HL,FBUFF
  1256'   CD 17C8'              	CALL	WRBF		;DISPLAY BUFFER CONTENTS
  1259'   CD 1293'              	CALL	UBLK		;UPDATE BLOCK
  125C'   CD 1260'              	CALL	DPSI		;DISPLAY PHYSICAL SECTOR INFO
  125F'   C9                    	RET
                                ;
                                ; DPSI - DISPLAY SECTOR INFORMATION
                                ;
                                	$RTN	DPSI
  1260'                   +     DPSI:	DS	0
                                	$FLD	PSTRFL		;POSITION CURSOR FOR TRACK NUMBER
  1260'   21 11D1'        +     	LD	HL,PSTRFL
  1263'   CD 1D3A'        +     	CALL	DFLD
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-44


                                	$HEXW	PSMDTR		;DISPLAY TRACK
  1266'   2A 1037'        +     	LD	HL,(PSMDTR)
  1269'   CD 1D8B'        +     	CALL	HEXW
                                	$FLD	PSSCFL		;POSITION FOR SECTOR NUMBER
  126C'   21 11D7'        +     	LD	HL,PSSCFL
  126F'   CD 1D3A'        +     	CALL	DFLD
                                	$HEXW	PSMDSC		;DISPLAY SECTOR
  1272'   2A 1039'        +     	LD	HL,(PSMDSC)
  1275'   CD 1D8B'        +     	CALL	HEXW
                                	$FLD	PSBLFL		;POSITION FOR BLOCK NUMBER
  1278'   21 11DD'        +     	LD	HL,PSBLFL
  127B'   CD 1D3A'        +     	CALL	DFLD
                                	$HEXW	PSMDBL		;DISPLAY BLOCK
  127E'   2A 103B'        +     	LD	HL,(PSMDBL)
  1281'   CD 1D8B'        +     	CALL	HEXW
                                	$FLD	PSDKFL		;POSITION FOR DISK ID
  1284'   21 11E3'        +     	LD	HL,PSDKFL
  1287'   CD 1D3A'        +     	CALL	DFLD
  128A'   3A 00C2'              	LD	A,(CURAN)	;GET ABSOLUTE DRIVE NUMBER
  128D'   C6 41                 	ADD	A,041H		;MAKE IT ALPHA
  128F'   CD 1CCE'              	CALL	CHRO		;DISPLAY DRIVE ID
  1292'   C9                    	RET
                                
                                ;
                                ; UBLK - UPDATE BLOCK NUMBER
                                ;
                                	$RTN	UBLK
  1293'                   +     UBLK:	DS	0
  1293'   ED 5B 1037'           	LD	DE,(PSMDTR)
  1297'   ED 4B 1022'           	LD	BC,(DPBSPT)
  129B'   CD 1C57'              	CALL	MULT
  129E'   ED 5B 1039'           	LD	DE,(PSMDSC)
  12A2'   19                    	ADD	HL,DE		;CALCULATE ABSOLUTE SECTOR
  12A3'   ED 5B 1035'           	LD	DE,(DPERSC)
  12A7'   B7                    	OR	A
  12A8'   ED 52                 	SBC	HL,DE
  12AA'   30 05                 	JR	NC,UBLK01	;IF WITHIN SYSTEM AREA
  12AC'   11 0000               	LD	DE,0		;SET BLOCK ZERO
  12AF'   18 13                 	JR	UBLK02
  12B1'                         UBLK01	EQU	$		;ELSE
  12B1'   EB                    	EX	DE,HL
  12B2'   ED 4B 1033'           	LD	BC,(DPESPB)
  12B6'   CD 1C72'              	CALL	DIVD		;CALCULATE BLOCK NUMBER
  12B9'   2A 1027'              	LD	HL,(DPBDSM)
  12BC'   B7                    	OR	A
  12BD'   ED 52                 	SBC	HL,DE
  12BF'   30 03                 	JR	NC,UBLK04	;IF BLOCK NOT IN RANGE
  12C1'   11 0000               	LD	DE,0		;SET BLOCK ZERO
  12C4'                         UBLK04	EQU	$		;ENDIF
  12C4'                         UBLK02	EQU	$		;ENDIF
  12C4'   ED 53 103B'           	LD	(PSMDBL),DE	;SET NEW BLOCK NUMBER
  12C8'   C9                    	RET
                                
                                ;
                                ; NXPS - NEXT PHYSICAL SECTOR
                                ;
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-45


                                	$RTN	NXPS
  12C9'                   +     NXPS:	DS	0
  12C9'   2A 1039'              	LD	HL,(PSMDSC)
  12CC'   23                    	INC	HL
  12CD'   22 1039'              	LD	(PSMDSC),HL	;INCREMENT PHYSICAL SECTOR
  12D0'   ED 5B 1022'           	LD	DE,(DPBSPT)
  12D4'   B7                    	OR	A
  12D5'   ED 52                 	SBC	HL,DE
  12D7'   38 09                 	JR	C,NXPS01	;IF TRACK OVERFLOW
  12D9'   21 0000               	LD	HL,0
  12DC'   22 1039'              	LD	(PSMDSC),HL	;SET TO FIRST SECTOR
  12DF'   CD 1384'              	CALL	FRTR		;ADVANCE TRACK
  12E2'                         NXPS01	EQU	$		;ENDIF
  12E2'   C9                    	RET
                                
                                ;
                                ; PRPS - PREVIOUS PHSICAL SECTOR
                                ;
                                	$RTN	PRPS
  12E3'                   +     PRPS:	DS	0
  12E3'   2A 1039'              	LD	HL,(PSMDSC)
  12E6'   7C                    	LD	A,H
  12E7'   B5                    	OR	L
  12E8'   20 06                 	JR	NZ,PRPS01	;IF SECTOR IS ZERO
  12EA'   CD 142A'              	CALL	BWTR		;GO BACK A TRACK
  12ED'   2A 1022'              	LD	HL,(DPBSPT)	;SET UP FOR DECREMENT
  12F0'                         PRPS01	EQU	$		;ENDIF
  12F0'   2B                    	DEC	HL
  12F1'   22 1039'              	LD	(PSMDSC),HL	;DECREMENT TO PREVIOUS SECTOR
  12F4'   C9                    	RET
                                
                                ;
                                ; SPSN - SET PHYSICAL SECTOR NUMBER
                                ;
                                	$RTN	SPSN
  12F5'                   +     SPSN:	DS	0
  12F5'   21 02DF'              	LD	HL,SELMSG
  12F8'   CD 1D48'              	CALL	CFLD
  12FB'   2A 1039'              	LD	HL,(PSMDSC)
  12FE'   22 1382'              	LD	(SAVPSC),HL	;SAVE RECORD NUMBER
                                	$FLD	SECMSG		;DISPLAY SET SECTOR
  1301'   21 104F'        +     	LD	HL,SECMSG
  1304'   CD 1D3A'        +     	CALL	DFLD
  1307'   21 0000               	LD	HL,0
  130A'   22 1039'              	LD	(PSMDSC),HL	;ZERO RECORD NUMBER
  130D'                         SPSN01	EQU	$
  130D'   CD 1293'              	CALL	UBLK
  1310'   CD 1260'              	CALL	DPSI		;DISPLAY PHYSICAL SECTOR INFO
                                	$IFLD	PSSCIP		;POSITION AND GET INPUT
  1313'   21 11DA'        +     	LD	HL,PSSCIP		;POINT TO FIELD
  1316'   CD 1D3A'        +     	CALL	DFLD			;DISPLAY IT
  1319'   CD 1CC7'        +     	CALL	CHRF			;GET INPUT
                                	$MTCH	HEXCHR
  131C'   21 1947'        +     	LD	HL,HEXCHR
  131F'   CD 1C31'        +     	CALL	MTCH
  1322'   20 0C                 	JR	NZ,SPSN02	;IF VALID HEX
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-46


  1324'   EB                    	EX	DE,HL
  1325'   2A 1039'              	LD	HL,(PSMDSC)
  1328'   CD 1BF4'              	CALL	H16D		;HL=HL*16+DIGIT
  132B'   22 1039'              	LD	(PSMDSC),HL	;SAVE NEW SECTOR NUMBER
  132E'   18 3D                 	JR	SPSN03
  1330'                         SPSN02	EQU	$
  1330'   FE 1B                 	CP	$ESC
  1332'   20 08                 	JR	NZ,SPSN04	;ELSEIF ESCAPE
  1334'   2A 1382'              	LD	HL,(SAVPSC)
  1337'   22 1039'              	LD	(PSMDSC),HL	;RESTORE SECTOR NUMBER
  133A'   18 31                 	JR	SPSN03
  133C'                         SPSN04	EQU	$
  133C'   FE 08                 	CP	$LEFT
  133E'   20 0B                 	JR	NZ,SPSN05	;ELSEIF BACKSPACE
  1340'   21 103A'              	LD	HL,PSMDSC+1
  1343'   AF                    	XOR	A
  1344'   ED 67                 	RRD
  1346'   2B                    	DEC	HL
  1347'   ED 67                 	RRD			;SECTOR=SECTOR/16
  1349'   18 22                 	JR	SPSN03
  134B'                         SPSN05	EQU	$
  134B'   FE 0D                 	CP	CR
  134D'   20 1B                 	JR	NZ,SPSN06	;ELSEIF CR
  134F'   B7                    	OR	A
  1350'   2A 1039'              	LD	HL,(PSMDSC)
  1353'   ED 5B 1022'           	LD	DE,(DPBSPT)
  1357'   ED 52                 	SBC	HL,DE
  1359'   38 0D                 	JR	C,SPSN07	;IF SECTOR OUT OF RANGE
  135B'   CD 1CDD'              	CALL	ALRM		;SIGNAL ERROR
  135E'   2A 1382'              	LD	HL,(SAVPSC)
  1361'   22 1039'              	LD	(PSMDSC),HL	;RESTORE TO ORIGINAL
  1364'   AF                    	XOR	A
  1365'   32 00A6'              	LD	(INCH),A	;DONT EXIT
  1368'                         SPSN07	EQU	$
  1368'   18 03                 	JR	SPSN03
  136A'                         SPSN06	EQU	$		;ELSE
  136A'   CD 1CDD'              	CALL	ALRM		;ERROR
  136D'                         SPSN03	EQU	$		;ENDIF
  136D'   3A 00A6'              	LD	A,(INCH)
  1370'   FE 0D                 	CP	CR
  1372'   28 07                 	JR	Z,SPSN08	;EXIT IF CR
  1374'   FE 1B                 	CP	$ESC
  1376'   28 03                 	JR	Z,SPSN08	;EXIT IF ESC
  1378'   C3 130D'              	JP	SPSN01
  137B'                         SPSN08	EQU	$		;ENDLOOP
                                	$FLD	CSCMSG		;DISPLAY CURRENT SECTOR MESSAGE
  137B'   21 1188'        +     	LD	HL,CSCMSG
  137E'   CD 1D3A'        +     	CALL	DFLD
  1381'   C9                    	RET
                                
  1382'                         SAVPSC:	DS	2
                                
                                ;
                                ; FRTR - FORWARD TRACK
                                ;
                                	$RTN	FRTR
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-47


  1384'                   +     FRTR:	DS	0
  1384'   2A 1037'              	LD	HL,(PSMDTR)
  1387'   23                    	INC	HL
  1388'   22 1037'              	LD	(PSMDTR),HL
  138B'   ED 5B 1031'           	LD	DE,(DPETPD)
  138F'   B7                    	OR	A
  1390'   ED 52                 	SBC	HL,DE
  1392'   38 06                 	JR	C,FRTR01	;IF DISK OVERFLOW
  1394'   21 0000               	LD	HL,0
  1397'   22 1037'              	LD	(PSMDTR),HL	;SET TO FIRST TRACK
  139A'                         FRTR01	EQU	$
  139A'   C9                    	RET
                                
                                ;
                                ; SPTN - SET PHYSICAL TRACK NUMBER
                                ;
                                	$RTN	SPTN
  139B'                   +     SPTN:	DS	0
  139B'   21 02DF'              	LD	HL,SELMSG
  139E'   CD 1D48'              	CALL	CFLD
  13A1'   2A 1037'              	LD	HL,(PSMDTR)
  13A4'   22 1428'              	LD	(SAVPTR),HL	;SAVE TRACK NUMBER
                                	$FLD	TRKMSG		;DISPLAY TRKMSG
  13A7'   21 103D'        +     	LD	HL,TRKMSG
  13AA'   CD 1D3A'        +     	CALL	DFLD
  13AD'   21 0000               	LD	HL,0
  13B0'   22 1037'              	LD	(PSMDTR),HL	;ZERO TRACK NUMBER
  13B3'                         SPTN01	EQU	$
  13B3'   CD 1293'              	CALL	UBLK
  13B6'   CD 1260'              	CALL	DPSI		;DISPLAY PHYSICAL SECTOR INFO
                                	$IFLD	PSTRIP		;POSITION AND GET INPUT
  13B9'   21 11D4'        +     	LD	HL,PSTRIP		;POINT TO FIELD
  13BC'   CD 1D3A'        +     	CALL	DFLD			;DISPLAY IT
  13BF'   CD 1CC7'        +     	CALL	CHRF			;GET INPUT
                                	$MTCH	HEXCHR
  13C2'   21 1947'        +     	LD	HL,HEXCHR
  13C5'   CD 1C31'        +     	CALL	MTCH
  13C8'   20 0C                 	JR	NZ,SPTN02	;IF VALID HEX
  13CA'   EB                    	EX	DE,HL
  13CB'   2A 1037'              	LD	HL,(PSMDTR)
  13CE'   CD 1BF4'              	CALL	H16D		;HL=HL*16+DIGIT
  13D1'   22 1037'              	LD	(PSMDTR),HL	;SAVE NEW TRACK NUMBER
  13D4'   18 3D                 	JR	SPTN03
  13D6'                         SPTN02	EQU	$
  13D6'   FE 1B                 	CP	$ESC
  13D8'   20 08                 	JR	NZ,SPTN04	;ELSEIF ESCAPE
  13DA'   2A 1428'              	LD	HL,(SAVPTR)
  13DD'   22 1037'              	LD	(PSMDTR),HL	;RESTORE TRACK NUMBER
  13E0'   18 31                 	JR	SPTN03
  13E2'                         SPTN04	EQU	$
  13E2'   FE 08                 	CP	$LEFT
  13E4'   20 0B                 	JR	NZ,SPTN05	;ELSEIF BACKSPACE
  13E6'   21 1038'              	LD	HL,PSMDTR+1
  13E9'   AF                    	XOR	A
  13EA'   ED 67                 	RRD
  13EC'   2B                    	DEC	HL
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-48


  13ED'   ED 67                 	RRD			;TRACK=TRACK/16
  13EF'   18 22                 	JR	SPTN03
  13F1'                         SPTN05	EQU	$
  13F1'   FE 0D                 	CP	CR
  13F3'   20 1B                 	JR	NZ,SPTN06	;ELSEIF CR
  13F5'   B7                    	OR	A
  13F6'   2A 1037'              	LD	HL,(PSMDTR)
  13F9'   ED 5B 1031'           	LD	DE,(DPETPD)
  13FD'   ED 52                 	SBC	HL,DE
  13FF'   38 0D                 	JR	C,SPTN07	;IF TRACK OUT OF RANGE
  1401'   CD 1CDD'              	CALL	ALRM		;SIGNAL ERROR
  1404'   2A 1428'              	LD	HL,(SAVPTR)
  1407'   22 1037'              	LD	(PSMDTR),HL	;RESTORE TO ORIGINAL
  140A'   AF                    	XOR	A
  140B'   32 00A6'              	LD	(INCH),A	;DONT EXIT
  140E'                         SPTN07	EQU	$		;ENDIF
  140E'   18 03                 	JR	SPTN03
  1410'                         SPTN06	EQU	$		;ELSE
  1410'   CD 1CDD'              	CALL	ALRM		;ERROR
  1413'                         SPTN03	EQU	$		;ENDIF
  1413'   3A 00A6'              	LD	A,(INCH)
  1416'   FE 0D                 	CP	CR
  1418'   28 07                 	JR	Z,SPTN08	;EXIT IF CR
  141A'   FE 1B                 	CP	$ESC
  141C'   28 03                 	JR	Z,SPTN08	;EXIT IF ESC
  141E'   C3 13B3'              	JP	SPTN01
  1421'                         SPTN08	EQU	$		;ENDLOOP
                                	$FLD	CTRMSG		;REDISPLY TRACK MESSAGE
  1421'   21 1176'        +     	LD	HL,CTRMSG
  1424'   CD 1D3A'        +     	CALL	DFLD
  1427'   C9                    	RET
                                
  1428'                         SAVPTR:	DS	2
                                
                                ;
                                ; BWTR - BACKWARD TRACK
                                ;
                                	$RTN	BWTR
  142A'                   +     BWTR:	DS	0
  142A'   2A 1037'              	LD	HL,(PSMDTR)
  142D'   7C                    	LD	A,H
  142E'   B5                    	OR	L
  142F'   20 03                 	JR	NZ,BWTR01	;IF TRACK IS ZERO
  1431'   2A 1031'              	LD	HL,(DPETPD)	;SET UP FOR DECREMENT
  1434'                         BWTR01	EQU	$		;ENDIF
  1434'   2B                    	DEC	HL
  1435'   22 1037'              	LD	(PSMDTR),HL	;DECREMENT TO PREVIOUS TRACK
  1438'   C9                    	RET
                                
                                ;
                                ; SPBL - SET PHYSICAL BLOCK
                                ;
                                	$RTN	SPBL
  1439'                   +     SPBL:	DS	0
  1439'   21 02DF'              	LD	HL,SELMSG
  143C'   CD 1D48'              	CALL	CFLD
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-49


  143F'   2A 103B'              	LD	HL,(PSMDBL)
  1442'   22 14E5'              	LD	(SAVPBL),HL	;SAVE BLOCK NUMBER
                                	$FLD	BLKMSG		;DISPLAY BLKMSG
  1445'   21 1062'        +     	LD	HL,BLKMSG
  1448'   CD 1D3A'        +     	CALL	DFLD
  144B'   21 0000               	LD	HL,0
  144E'   22 103B'              	LD	(PSMDBL),HL	;ZERO BLOCK NUMBER
  1451'                         SPBL01	EQU	$
  1451'   CD 1260'              	CALL	DPSI		;DISPLAY PHYSICAL SECTOR INFO
                                	$IFLD	PSBLIP		;POSITION AND GET INPUT
  1454'   21 11E0'        +     	LD	HL,PSBLIP		;POINT TO FIELD
  1457'   CD 1D3A'        +     	CALL	DFLD			;DISPLAY IT
  145A'   CD 1CC7'        +     	CALL	CHRF			;GET INPUT
                                	$MTCH	HEXCHR
  145D'   21 1947'        +     	LD	HL,HEXCHR
  1460'   CD 1C31'        +     	CALL	MTCH
  1463'   20 0C                 	JR	NZ,SPBL02	;IF VALID HEX
  1465'   EB                    	EX	DE,HL
  1466'   2A 103B'              	LD	HL,(PSMDBL)
  1469'   CD 1BF4'              	CALL	H16D		;BLOCK=BLOCK*16+DIGIT
  146C'   22 103B'              	LD	(PSMDBL),HL	;SAVE NEW BLOCK NUMBER
  146F'   18 5F                 	JR	SPBL03
  1471'                         SPBL02	EQU	$
  1471'   FE 1B                 	CP	$ESC
  1473'   20 08                 	JR	NZ,SPBL04	;ELSEIF ESCAPE
  1475'   2A 14E5'              	LD	HL,(SAVPBL)
  1478'   22 103B'              	LD	(PSMDBL),HL	;RESTORE BLOCK NUMBER
  147B'   18 53                 	JR	SPBL03
  147D'                         SPBL04	EQU	$
  147D'   FE 08                 	CP	$LEFT
  147F'   20 0B                 	JR	NZ,SPBL05	;ELSEIF BACKSPACE
  1481'   21 103C'              	LD	HL,PSMDBL+1
  1484'   AF                    	XOR	A
  1485'   ED 67                 	RRD
  1487'   2B                    	DEC	HL
  1488'   ED 67                 	RRD			;BLOCK=BLOCK/16
  148A'   18 44                 	JR	SPBL03
  148C'                         SPBL05	EQU	$
  148C'   FE 0D                 	CP	CR
  148E'   20 3D                 	JR	NZ,SPBL06	;ELSEIF CR
  1490'   B7                    	OR	A
  1491'   ED 5B 103B'           	LD	DE,(PSMDBL)
  1495'   2A 1027'              	LD	HL,(DPBDSM)
  1498'   ED 52                 	SBC	HL,DE
  149A'   F2 14AC'              	JP	P,SPBL07	;IF BLOCK OUT OF RANGE
  149D'   CD 1CDD'              	CALL	ALRM		;SIGNAL ERROR
  14A0'   2A 14E5'              	LD	HL,(SAVPBL)
  14A3'   22 103B'              	LD	(PSMDBL),HL	;RESTORE TO ORIGINAL
  14A6'   AF                    	XOR	A
  14A7'   32 00A6'              	LD	(INCH),A	;DONT EXIT
  14AA'   18 1F                 	JR	SPBL08
  14AC'                         SPBL07	EQU	$		;ELSE
  14AC'   ED 5B 103B'           	LD	DE,(PSMDBL)
  14B0'   ED 4B 1033'           	LD	BC,(DPESPB)
  14B4'   CD 1C57'              	CALL	MULT
  14B7'   ED 5B 1035'           	LD	DE,(DPERSC)
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-50


  14BB'   19                    	ADD	HL,DE		;CALCULATE ABSOLUTE SECTOR
  14BC'   EB                    	EX	DE,HL
  14BD'   ED 4B 1022'           	LD	BC,(DPBSPT)
  14C1'   CD 1C72'              	CALL	DIVD
  14C4'   ED 53 1037'           	LD	(PSMDTR),DE	;SET TRACK
  14C8'   22 1039'              	LD	(PSMDSC),HL	;SET SECTOR
  14CB'                         SPBL08	EQU	$		;ENDIF
  14CB'   18 03                 	JR	SPBL03
  14CD'                         SPBL06	EQU	$		;ELSE
  14CD'   CD 1CDD'              	CALL	ALRM		;ERROR
  14D0'                         SPBL03	EQU	$		;ENDIF
  14D0'   3A 00A6'              	LD	A,(INCH)
  14D3'   FE 0D                 	CP	CR
  14D5'   28 07                 	JR	Z,SPBL09	;EXIT IF CR
  14D7'   FE 1B                 	CP	$ESC
  14D9'   28 03                 	JR	Z,SPBL09	;EXIT IF ESC
  14DB'   C3 1451'              	JP	SPBL01
  14DE'                         SPBL09	EQU	$		;ENDLOOP
                                	$FLD	CBLMSG		;REDISPLAY CURRENT BLOCK MESSAGE
  14DE'   21 119B'        +     	LD	HL,CBLMSG
  14E1'   CD 1D3A'        +     	CALL	DFLD
  14E4'   C9                    	RET
                                
  14E5'                         SAVPBL:	DS	2
                                
                                ;
                                ; PSPM - PHYSICAL SCRATCHPAD MODE
                                ;
                                	$RTN	PSPM
  14E7'                   +     PSPM:	DS	0
                                	$NPANEL	PSPMPN		;DISPLAY PANEL
  14E7'   CD 1CFE'        +     	CALL	DHDR
  14EA'   21 1534'        +     	LD	HL,PSPMPN	;POINT TO PANEL
  14ED'   CD 1D30'        +     	CALL	DPNL		;DISPLAY IT
                                	$FLD	PSPCUR		;POSITION FOR CURRENT INFO
  14F0'   21 15AA'        +     	LD	HL,PSPCUR
  14F3'   CD 1D3A'        +     	CALL	DFLD
                                	$STRO	SPDMSG
  14F6'   21 00F4'        +     	LD	HL,SPDMSG
  14F9'   CD 1D62'        +     	CALL	STRO
  14FC'   3A 00C2'              	LD	A,(CURAN)
  14FF'   C6 41                 	ADD	A,41H
  1501'   CD 1CCE'              	CALL	CHRO		;DISPLAY DRIVE
                                	$STRO	SPTMSG
  1504'   21 00FB'        +     	LD	HL,SPTMSG
  1507'   CD 1D62'        +     	CALL	STRO
                                	$HEXW	PSMDTR		;TRACK
  150A'   2A 1037'        +     	LD	HL,(PSMDTR)
  150D'   CD 1D8B'        +     	CALL	HEXW
                                	$STRO	SPSMSG
  1510'   21 0103'        +     	LD	HL,SPSMSG
  1513'   CD 1D62'        +     	CALL	STRO
                                	$HEXW	PSMDSC		;SECTOR
  1516'   2A 1039'        +     	LD	HL,(PSMDSC)
  1519'   CD 1D8B'        +     	CALL	HEXW
                                	$FLD	PSPSPD		;POSITION FOR S/P DATA
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-51


  151C'   21 15BB'        +     	LD	HL,PSPSPD
  151F'   CD 1D3A'        +     	CALL	DFLD
  1522'   CD 161A'              	CALL	DSPD
  1525'   CD 05B8'              	CALL	SPCI		;GET COMMAND
                                	$EXVA	PSPMV		;PROCESS COMMAND
  1528'   11 15D0'        +     	LD	DE,PSPMV
  152B'   CD 1C43'        +     	CALL	DOIT
  152E'   3E FF                 	LD	A,0FFH
  1530'   32 00E0'              	LD	(RPANEL),A	;REQUEST PANEL
  1533'   C9                    	RET
                                
  1534'   03                    PSPMPN:	DB	3
  1535'   02 00 45 53           	DB	2,0,'ESC Return to sector display',0
  1539'   43 20 52 65           
  153D'   74 75 72 6E           
  1541'   20 74 6F 20           
  1545'   73 65 63 74           
  1549'   6F 72 20 64           
  154D'   69 73 70 6C           
  1551'   61 79 00              
  1554'   03 00 43 20           	DB	3,0,'C   Copy current sector to scratchpad',0
  1558'   20 20 43 6F           
  155C'   70 79 20 63           
  1560'   75 72 72 65           
  1564'   6E 74 20 73           
  1568'   65 63 74 6F           
  156C'   72 20 74 6F           
  1570'   20 73 63 72           
  1574'   61 74 63 68           
  1578'   70 61 64 00           
  157C'   04 00 45 20           	DB	4,0,'E   Exchange current sector with scratchpad',0
  1580'   20 20 45 78           
  1584'   63 68 61 6E           
  1588'   67 65 20 63           
  158C'   75 72 72 65           
  1590'   6E 74 20 73           
  1594'   65 63 74 6F           
  1598'   72 20 77 69           
  159C'   74 68 20 73           
  15A0'   63 72 61 74           
  15A4'   63 68 70 61           
  15A8'   64 00                 
                                
  15AA'   0B 00 43 75           PSPCUR:	DB	11,0,'Current    :- ',0
  15AE'   72 72 65 6E           
  15B2'   74 20 20 20           
  15B6'   20 3A 2D 20           
  15BA'   00                    
  15BB'   0C 00 53 63           PSPSPD:	DB	12,0,'Scratchpad :- ',0
  15BF'   72 61 74 63           
  15C3'   68 70 61 64           
  15C7'   20 3A 2D 20           
  15CB'   00                    
                                
  15CC'   03 1B 43 45           PSPML:	DB	3,$ESC,'CE'
  15D0'   15D6'                 PSPMV:	DW	PSPX
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-52


  15D2'   15F6'                 	DW	PLSP
  15D4'   15D7'                 	DW	PXSP
                                
                                	$RTN	PSPX
  15D6'                   +     PSPX:	DS	0
  15D6'   C9                    	RET
                                
                                ;
                                ; PXSP - EXCHANGE WITH SCRATCHPAD
                                ;
                                	$RTN	PXSP
  15D7'                   +     PXSP:	DS	0
  15D7'   3A 00E3'              	LD	A,(SPTYPE)
  15DA'   B7                    	OR	A
  15DB'   20 05                 	JR	NZ,PXSP01	;IF PAD EMPTY
  15DD'   CD 1CDD'              	CALL	ALRM		;RING BELL
  15E0'   18 13                 	JR	PXSP02
  15E2'                         PXSP01	EQU	$		;ELSE
  15E2'   ED 4B 00E1'           	LD	BC,(SPADDR)
  15E6'   CD 0154'              	CALL	SETDMA		;SET CPM BUFFER
  15E9'   CD 1BEE'              	CALL	PSWR		;WRITE BUFFER
  15EC'   01 0080               	LD	BC,FBUFF
  15EF'   CD 0154'              	CALL	SETDMA		;RESTORE DMA
  15F2'   CD 15F6'              	CALL	PLSP		;COPY OLD BUFFER
  15F5'                         PXSP02	EQU	$		;ENDIF
  15F5'   C9                    	RET
                                ;
                                ; PLSP - LOAD SCRATCHPAD (PHYSICAL)
                                ;
                                	$RTN	PLSP
  15F6'                   +     PLSP:	DS	0
  15F6'   21 0080               	LD	HL,FBUFF
  15F9'   ED 5B 00E1'           	LD	DE,(SPADDR)
  15FD'   01 0080               	LD	BC,128
  1600'   ED B0                 	LDIR			;COPY THE BUFFER
  1602'   3A 00C2'              	LD	A,(CURAN)
  1605'   32 00E6'              	LD	(SPDRIV),A	;SET DRIV
  1608'   2A 1037'              	LD	HL,(PSMDTR)
  160B'   22 00E7'              	LD	(SPNAME),HL	;SET TRACK
  160E'   2A 1039'              	LD	HL,(PSMDSC)
  1611'   22 00E4'              	LD	(SPSECT),HL	;SET SECTOR
  1614'   3E 01                 	LD	A,1
  1616'   32 00E3'              	LD	(SPTYPE),A	;SET THE TYPE
  1619'   C9                    	RET
                                
                                ;
                                ; DSPD DISPLAY S/P DATA
                                ;
                                	$RTN	DSPD
  161A'                   +     DSPD:	DS	0
  161A'   CD 05CF'              	CALL	DSPI		;DISPLAY SP INFO
  161D'   3A 00E3'              	LD	A,(SPTYPE)
  1620'   B7                    	OR	A
  1621'   28 09                 	JR	Z,DSPD01	;IF SP NOT EMPTY
  1623'   CD 185E'              	CALL	ZBSA		;CLEAR ADDRESS COUNTER
  1626'   2A 00E1'              	LD	HL,(SPADDR)
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-53


  1629'   CD 17C8'              	CALL	WRBF		;DISPLAY IT
  162C'                         DSPD01	EQU	$		;ENDIF
  162C'   C9                    	RET
                                
                                ;
                                ; LSEL - LIST FILE SELECTION STUB MASK POINTED TO BY HL
                                ;
                                	$RTN	LSEL
  162D'                   +     LSEL:	DS	0
  162D'   11 0113'              	LD	DE,LMDFN
  1630'   01 000B               	LD	BC,11
  1633'   ED B0                 	LDIR
  1635'   C9                    	RET
                                ;
                                ; PSCH - PHYSICAL SECTOR CHANGE
                                ;
                                	$RTN	PSCH
  1636'                   +     PSCH:	DS	0
  1636'   CD 1648'              	CALL	SCCH		;GO INTO SECTOR CHANGE MODE
  1639'   3A 16A1'              	LD	A,(SCCHWR)
  163C'   B7                    	OR	A
  163D'   28 03                 	JR	Z,PSCH03	;IF WRITE REQUIRED
  163F'   CD 1BEE'              	CALL	PSWR		;WRITE OUT SECTOR
  1642'                         PSCH03	EQU	$		;ENDIF
  1642'   3E FF                 	LD	A,0FFH
  1644'   32 00E0'              	LD	(RPANEL),A	;REQUEST PANEL
  1647'   C9                    	RET			
                                
                                ;
                                ; SCCH - SECTOR CHANGE MODE
                                ;
                                	$RTN	SCCH
  1648'                   +     SCCH:	DS	0
  1648'   21 0109               	LD	HL,HLAREA
  164B'   CD 1B30'              	CALL	CLRA		;CLEAR THE HELP AREA
                                	$PANEL	SCCHPN		;DISPLAY SECTOR CHANGE PANEL
  164E'   21 16A2'        +     	LD	HL,SCCHPN	;POINT TO PANEL
  1651'   CD 1D30'        +     	CALL	DPNL		;DISPLAY IT
  1654'   3E 00                 	LD	A,FALSE
  1656'   32 16A1'              	LD	(SCCHWR),A	;WRITE FLAG FALSE
  1659'   32 18AA'              	LD	(ASCII),A	;ASCII FALSE
  165C'   32 16A0'              	LD	(SCCHEX),A	;EXIT FALSE
  165F'   32 18AB'              	LD	(LOORD),A	;START WITH HO HEX DIGIT
  1662'   AF                    	XOR	A
  1663'   32 00AA'              	LD	(BUFPOS),A	;BUFFER POSITION 0
  1666'                         SCCH03	EQU	$		;LOOP
  1666'   CD 1876'              	CALL	SLCP
  1669'   CD 1B84'              	CALL	UDCP		;POSITION CURSOR
  166C'   CD 1CA8'              	CALL	CHRI
  166F'   FE 20                 	CP	020H
  1671'   D2 1689'              	JP	NC,SCCH04	;IF CONTROL CODE
                                	$MTCH	SCCHLS
  1674'   21 1733'        +     	LD	HL,SCCHLS
  1677'   CD 1C31'        +     	CALL	MTCH
  167A'   28 05                 	JR	Z,SCCH05	;IF NOT VALID
  167C'   CD 1CDD'              	CALL	ALRM		;SOUND THE ALARM
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-54


  167F'   18 06                 	JR	SCCH06
  1681'                         SCCH05	EQU	$		;ELSE
                                	$EXVA	SCCHVC		;ACTION CONTROL CODE
  1681'   11 173C'        +     	LD	DE,SCCHVC
  1684'   CD 1C43'        +     	CALL	DOIT
  1687'                         SCCH06	EQU	$		;ENDIF
  1687'   18 0E                 	JR	SCCH08
  1689'                         SCCH04	EQU	$		;ELSE
  1689'   3A 18AA'              	LD	A,(ASCII)
  168C'   B7                    	OR	A
  168D'   28 05                 	JR	Z,SCCH09	;IF ASCII MODE
  168F'   CD 18CC'              	CALL	MACH		;MAKE ASCII CHANGE
  1692'   18 03                 	JR	SCCH10
  1694'                         SCCH09	EQU	$		;ELSE
  1694'   CD 18FA'              	CALL	MHCH		;MAKE HEX CHANGE
  1697'                         SCCH10	EQU	$		;ENDIF
  1697'                         SCCH08	EQU	$		;ENDIF
  1697'   3A 16A0'              	LD	A,(SCCHEX)
  169A'   B7                    	OR	A
  169B'   20 02                 	JR	NZ,SCCH11	;EXIT IF END OF UPDATES
  169D'   18 C7                 	JR	SCCH03
  169F'                         SCCH11	EQU	$		;ENDLOOP
  169F'   C9                    	RET
                                
  16A0'   00                    SCCHEX:	DB	0
  16A1'   00                    SCCHWR:	DB	0
                                
                                ;
                                ; SECTOR CHANGE MODE PANEL AND ACTION VECTOR
                                ;
  16A2'   08                    SCCHPN:	DB	8
  16A3'   02 00 5E 48           	DB	2,0,'^',$LEFT+040H,'  Cursor left',0
  16A7'   20 20 43 75           
  16AB'   72 73 6F 72           
  16AF'   20 6C 65 66           
  16B3'   74 00                 
  16B5'   02 28 5E 4C           	DB	2,40,'^',$RIGHT+040H,'  Cursor right',0
  16B9'   20 20 43 75           
  16BD'   72 73 6F 72           
  16C1'   20 72 69 67           
  16C5'   68 74 00              
  16C8'   03 00 5E 4B           	DB	3,0,'^',$UP+040H,'  Cursor up',0
  16CC'   20 20 43 75           
  16D0'   72 73 6F 72           
  16D4'   20 75 70 00           
  16D8'   03 28 5E 4A           	DB	3,40,'^',$DOWN+040H,'  Cursor down',0
  16DC'   20 20 43 75           
  16E0'   72 73 6F 72           
  16E4'   20 64 6F 77           
  16E8'   6E 00                 
  16EA'   04 00 5E 49           	DB	4,0,'^',$TAB+040H,'  Change Side',0
  16EE'   20 20 43 68           
  16F2'   61 6E 67 65           
  16F6'   20 53 69 64           
  16FA'   65 00                 
  16FC'   04 28 43 52           	DB	4,40,'CR  New Line',0
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-55


  1700'   20 20 4E 65           
  1704'   77 20 4C 69           
  1708'   6E 65 00              
  170B'   05 00 5E 51           	DB	5,0,'^',$QUIT+040H,'  Cancel changes',0
  170F'   20 20 43 61           
  1713'   6E 63 65 6C           
  1717'   20 63 68 61           
  171B'   6E 67 65 73           
  171F'   00                    
  1720'   05 28 5E 5A           	DB	5,40,'^',$END+040H,'  Save Changes',0
  1724'   20 20 53 61           
  1728'   76 65 20 43           
  172C'   68 61 6E 67           
  1730'   65 73 00              
                                
  1733'   08 08 09 0A           SCCHLS:	DB	8,$LEFT,$TAB,$DOWN,$UP,$RIGHT,CR,$END,$QUIT
  1737'   0B 0C 0D 1A           
  173B'   11                    
                                
  173C'                         SCCHVC	EQU	$
  173C'   174C'                 	DW	LEFT
  173E'   1769'                 	DW	TOGL
  1740'   1776'                 	DW	DOWN
  1742'   1781'                 	DW	UPWD
  1744'   178C'                 	DW	RGHT
  1746'   17A9'                 	DW	NWLN
  1748'   17B9'                 	DW	CHND
  174A'   17C2'                 	DW	QUIT
                                
                                ;
                                ; LEFT - MOVE CURSOR LEFT
                                ;
                                	$RTN	LEFT
  174C'                   +     LEFT:	DS	0
  174C'   3A 18AB'              	LD	A,(LOORD)
  174F'   B7                    	OR	A
  1750'   20 09                 	JR	NZ,LEFT01	;IF HIGH OR ASCII
  1752'   3A 00AA'              	LD	A,(BUFPOS)
  1755'   3D                    	DEC	A
  1756'   E6 7F                 	AND	07FH
  1758'   32 00AA'              	LD	(BUFPOS),A	;DECREMENT POSITION
  175B'                         LEFT01	EQU	$
  175B'   3A 18AA'              	LD	A,(ASCII)
  175E'   B7                    	OR	A
  175F'   20 07                 	JR	NZ,LEFT02	;IF HEX MODE
  1761'   3A 18AB'              	LD	A,(LOORD)
  1764'   2F                    	CPL
  1765'   32 18AB'              	LD	(LOORD),A	;TOGGLE DIGIT
  1768'                         LEFT02	EQU	$
  1768'   C9                    	RET
                                
                                ;
                                ; TOGL - TOGGLE BETWEEN HEX AND ASCII
                                ;
                                	$RTN	TOGL
  1769'                   +     TOGL:	DS	0
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-56


  1769'   3A 18AA'              	LD	A,(ASCII)
  176C'   2F                    	CPL
  176D'   32 18AA'              	LD	(ASCII),A	;TOGGLE MODE FLAG
  1770'   3E 00                 	LD	A,FALSE
  1772'   32 18AB'              	LD	(LOORD),A	;INDICATE HO DIGIT
  1775'   C9                    	RET
                                
                                ;
                                ; DOWN - MOVE CURSOR DOWN ONE LINE
                                ;
                                	$RTN	DOWN
  1776'                   +     DOWN:	DS	0
  1776'   3A 00AA'              	LD	A,(BUFPOS)
  1779'   C6 10                 	ADD	A,16
  177B'   E6 7F                 	AND	07FH
  177D'   32 00AA'              	LD	(BUFPOS),A
  1780'   C9                    	RET
                                
                                ;
                                ; UPWD - MOVE CURSOR UP ONE LINE
                                ;
                                	$RTN	UPWD
  1781'                   +     UPWD:	DS	0
  1781'   3A 00AA'              	LD	A,(BUFPOS)
  1784'   D6 10                 	SUB	16
  1786'   E6 7F                 	AND	07FH		;MODULO 128
  1788'   32 00AA'              	LD	(BUFPOS),A
  178B'   C9                    	RET
                                
                                ;
                                ; RGHT - MOVE CURSOR RIGHT
                                ;
                                	$RTN	RGHT
  178C'                   +     RGHT:	DS	0
  178C'   3A 18AA'              	LD	A,(ASCII)
  178F'   B7                    	OR	A
  1790'   20 07                 	JR	NZ,RGHT01	;IF HEX MODE
  1792'   3A 18AB'              	LD	A,(LOORD)
  1795'   2F                    	CPL			;TOGGLE HEX DIGIT
  1796'   32 18AB'              	LD	(LOORD),A
  1799'                         RGHT01	EQU	$		;ENDIF
  1799'   3A 18AB'              	LD	A,(LOORD)
  179C'   B7                    	OR	A
  179D'   20 09                 	JR	NZ,RIGH02	;IF HIGH ORD OR ASCII
  179F'   3A 00AA'              	LD	A,(BUFPOS)
  17A2'   3C                    	INC	A
  17A3'   E6 7F                 	AND	07FH
  17A5'   32 00AA'              	LD	(BUFPOS),A	;INCREMENT POSITION
  17A8'                         RIGH02	EQU	$		;ENDIF
  17A8'   C9                    	RET
                                
                                ;
                                ; NWLN - MOV CURSOR TO START OF NEW LINE
                                ;
                                	$RTN	NWLN
  17A9'                   +     NWLN:	DS	0
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-57


  17A9'   3E 00                 	LD	A,FALSE
  17AB'   32 18AB'              	LD	(LOORD),A	;INDICATE HO HEX DIGIT
  17AE'   3A 00AA'              	LD	A,(BUFPOS)
  17B1'   C6 10                 	ADD	A,16
  17B3'   E6 70                 	AND	070H
  17B5'   32 00AA'              	LD	(BUFPOS),A	;NEW BUFFER ADDR
  17B8'   C9                    	RET
                                
                                ;
                                ; CHND - CHANGE END AND WRITE
                                ;
                                	$RTN	CHND
  17B9'                   +     CHND:	DS	0
  17B9'   3E FF                 	LD	A,TRUE
  17BB'   32 16A0'              	LD	(SCCHEX),A	;SIGNAL EXIT
  17BE'   32 16A1'              	LD	(SCCHWR),A	;SIGNAL WRITE
  17C1'   C9                    	RET
                                
                                ;
                                ; QUIT - END WITHOUT SAVING UPDATES
                                ;
                                	$RTN	QUIT
  17C2'                   +     QUIT:	DS	0
  17C2'   3E FF                 	LD	A,TRUE
  17C4'   32 16A0'              	LD	(SCCHEX),A	;SIGNAL EXIT
  17C7'   C9                    	RET
                                
                                ;
                                ; WRBF - DISPLAY FILE DATA IN SECTOR BUFFER
                                ;
                                	$RTN	WRBF
  17C8'                   +     WRBF:	DS	0
  17C8'   EB                    	EX	DE,HL
  17C9'   AF                    	XOR	A
  17CA'   32 00AA'              	LD	(BUFPOS),A	;SET OFFSET TO 0
  17CD'                         WRBF01	EQU	$		;LOOP (HEX AND ASCII LINE)
  17CD'   D5                    	PUSH	DE		;SAVE BUFFER POINTER
  17CE'   D5                    	PUSH	DE		;AND FOR ASCII
  17CF'   AF                    	XOR	A
  17D0'   32 1B95'              	LD	(CPOS),A	;POSITION 1
  17D3'   CD 187D'              	CALL	STLP		;SET LINE CURSOR POSITION
  17D6'   CD 1B84'              	CALL	UDCP		;UPDATE CURSOR
  17D9'   CD 1869'              	CALL	PRTADR		;DISPLAY ADDRESS
  17DC'   3A 00AD'              	LD	A,(BASEAD+2)
  17DF'   C6 10                 	ADD	A,010H
  17E1'   32 00AD'              	LD	(BASEAD+2),A	;INC ADDR FOR NEXT LINE
  17E4'   CD 18AC'              	CALL	SHCP		;SET UP CURSOR POSN IN HEX AREA
  17E7'   CD 1B84'              	CALL	UDCP		;UPDATE CURSOR
  17EA'   D1                    	POP	DE		;GET CURRENT ADDRESS
  17EB'                         WRBF03	EQU	$		;LOOP (BYTES IN HEX)
  17EB'   1A                    	LD	A,(DE)		;GET CHARACTER THERE
  17EC'   13                    	INC	DE		;INCREMENT BUFF POINTER
  17ED'   CD 1D7E'              	CALL	HEXO		;PRINT BYTE
  17F0'   CD 1CE5'              	CALL	SPCO		;PRINT SPACE
  17F3'   21 00AA'              	LD	HL,BUFPOS
  17F6'   34                    	INC	(HL)		;INC TO NEXT COL
\f

SPZ - CP/M DISK UTILITY	MACRO-80 3.43	27-Jul-81	PAGE	1-58


  17F7'   3E 03                 	LD	A,3
  17F9'   A6                    	AND	(HL)
  17FA'   20 03                 	JR	NZ,WRBF04	;IF END OF GROUP
  17FC'   CD 1CE5'              	CALL	SPCO		;PRINT SPACE
  17FF'                         WRBF04	EQU	$		;ENDIF
  17FF'   3E 0F                 	LD	A,0FH
  1801'   A6                    	AND	(HL)
  1802'   20 E7                 	JR	NZ,WRBF03	;UNTIL 16 BYTES DISPLAYED
                                
  1804