|
|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 163840 (0x28000)
Types: TextFile
Names: »SPZ.PRN«
└─⟦692ac107c⟧ Bits:30005923 PolyPascal-80 V3.10 arbejdsdiskette 1
└─⟦this⟧ »SPZ.PRN«
\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