|
DataMuseum.dkPresents historical artifacts from the history of: Jet Computer Jet80 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Jet Computer Jet80 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - 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