home *** CD-ROM | disk | FTP | other *** search
- CROMEMCO Z80 Macro Assembler version 03.07 Nov 30, 1980 20:18:31 Page 0001
- *** CDOSCOPY ***
-
- 0001 ; Disk Copy Utility from CPM Users Group
- 0002 ; Modified for CDOS by Trevor Marshall
- 0003 ; Elec Eng Dept
- 0004 ; Uni W.A.
- 0005 ; Jan 1980
- 0006 ;
- 0007 ; Rewritten for 2.36 CDOS (Double Density)
- 0008 ; Automatic disk label checking,
- 0009 ; Sept 1980, Trevor Marshall
- 0010 ;
- 0011 ;
- (0100) 0012 ORG 100H
- 0100 C34201 R 0013 JP COPY
- 0014 ; BIOS FUNCTION CALLING TABLE
- 0103 CD2D01 0015 WBOOT: CALL BIOSGO
- 0106 CD2D01 0016 CONST: CALL BIOSGO
- 0109 CD2D01 0017 CONIN: CALL BIOSGO
- 010C CD2D01 0018 CONOUT: CALL BIOSGO
- 010F CD2D01 0019 LIST: CALL BIOSGO
- 0112 CD2D01 0020 PUNCH: CALL BIOSGO
- 0115 CD2D01 0021 READER: CALL BIOSGO
- 0118 CD2D01 0022 HOME: CALL BIOSGO
- 011B CD2D01 0023 SELDSK: CALL BIOSGO
- 011E CD2D01 0024 SETTRK: CALL BIOSGO
- 0121 CD2D01 0025 SETSEC: CALL BIOSGO
- 0124 CD2D01 0026 SETDMA: CALL BIOSGO
- 0127 CD2D01 0027 READ: CALL BIOSGO
- 012A CD2D01 0028 WRITE: CALL BIOSGO
- 012D E3 0029 BIOSGO: EX (SP),HL ; Get call addr in HL, save
- HL on stack
- 012E D5 0030 PUSH DE ; Save DE
- 012F EB 0031 EX DE,HL ; Move call addr to DE
- 0130 2A0100 0032 LD HL,(1) ; Get BIOS entry address
- 0133 19 0033 ADD HL,DE ; Add call addr to entry ad
- dr
- 0134 110601 0034 LD DE,[WBOOT+3]; Get start of table
- 0035 ; Subtract DE from HL in 8080 code (for compatibility)
- 0137 7B 0036 LD A,E
- 0138 2F 0037 CPL
- 0139 5F 0038 LD E,A
- 013A 7A 0039 LD A,D
- 013B 2F 0040 CPL
- 013C 57 0041 LD D,A ;Now have 1s compl of DE
- 013D 13 0042 INC DE ;2s compl
- 013E 19 0043 ADD HL,DE ;Done!
- 013F D1 0044 POP DE ; Restore DE
- 0140 E3 0045 EX (SP),HL ; Restore HL, put jump addr
- on stack
- 0141 C9 0046 RET ; Jump to BIOS routine
- 0047 ; Original coding by:
- 0048 ; L.E. HUGHES 8080SDC 77/10/29
- 0049 ;
- 0050 ; Modified by Trevor Marshall
- 0051 ; E.E.Dept
- 0052 ; Uni W.A.
- 0053 ;
- 0054 ; to work with any sized CDOS system
- 0055 ; and to prompt for drives
- 0056 ;
- 0057
- 0058 ; MISC SYMBOLS
- CROMEMCO Z80 Macro Assembler version 03.07 Nov 30, 1980 20:18:31 Page 0002
- *** CDOSCOPY ***
-
- 0059
- (000A) 0060 LF EQU 0AH ;LINE FEED
- (000D) 0061 CR EQU 0DH ;CARRIAGE RETURN
- 0062
- (0000) 0063 ITRK EQU 0 ;INITIAL TRACK TO COPY
- (004C) 0064 LTRK EQU 76 ;LAST TRACK TO COPY
- 0065
- (0005) 0066 BDOS: EQU 5
- 0067 ;
- 0142 210000 0068 COPY: LD HL,0
- 0145 39 0069 ADD HL,SP
- 0146 22E006 0070 LD (OLDSP),HL
- 0149 312207 0071 LD SP,STACK+64
- 0072 ;
- 0073 ; ALLOW USER TO MOUNT DISK(S) BEFORE PROCEEDING
- 0074
- 014C 0E96 0075 AGAIN: LD C,96H ;Turn drive motors off
- 014E CD0500 0076 CALL BDOS
- 0077 ;
- 0151 219704 0078 LD HL,CRLF
- 0154 CDFE02 0079 CALL WASC
- 0157 215504 0080 LD HL,STR1 ;PRINT 'Source Disk Drive,etc'
- 015A CDFE02 0081 CALL WASC
- 015D CD1503 0082 CALL RACC
- 0160 FE03 0083 CP 3 ;CTL-C ABORT
- 0162 CAF702 0084 JP Z,EXIT1
- 0165 CD0803 0085 CALL WACC
- 0168 D641 0086 SUB 'A'
- 016A DA4C01 R 0087 JP C,AGAIN ;Invalid entry
- 016D FE03 0088 CP 3
- 016F D24C01 R 0089 JP NC,AGAIN
- 0172 322E07 0090 LD (SOURCE),A
- 0175 219704 0091 LD HL,CRLF
- 0178 CDFE02 0092 CALL WASC
- 0093 ; Now prompt for destination
- 017B 219A04 0094 LD HL,STR1A
- 017E CDFE02 0095 CALL WASC
- 0181 CD1503 0096 CALL RACC
- 0184 CD0803 0097 CALL WACC
- 0187 D641 0098 SUB 'A'
- 0189 DA4C01 R 0099 JP C,AGAIN
- 018C FE03 0100 CP 3
- 018E D24C01 R 0101 JP NC,AGAIN
- 0191 322F07 0102 LD (DEST),A
- 0194 212E07 0103 LD HL,SOURCE
- 0197 4E 0104 LD C,(HL)
- 0198 B9 0105 CP A,C
- 0199 CA4C01 R 0106 JP Z,AGAIN
- 019C 219704 0107 LD HL,CRLF
- 019F CDFE02 0108 CALL WASC
- 0109
- 0110
- 0111 ; Now we must determine whether single or double
- 0112 ; density disks are in use, and check that we
- 0113 ; are not trying to copy between incompatible formats
- 0114 ;
- 0115 ; We will use the CDOS 1BH cal (Get disk allocation vec)
- 0116 ; as the disk labels are read before this call returns
- .
- 0117 ; This call returns the number of clusters in DE
- 0118 ;
- CROMEMCO Z80 Macro Assembler version 03.07 Nov 30, 1980 20:18:31 Page 0003
- *** CDOSCOPY ***
-
- 0119 ;
- 01A2 0E0D 0120 LD C,0DH ;Reset CDOS
- 01A4 CD0500 0121 CALL BDOS
- 0122 ;
- 01A7 3A2E07 0123 LD A,(SOURCE) ;Select Source drive
- 01AA 5F 0124 LD E,A
- 01AB 0E0E 0125 LD C,0EH
- 01AD CD0500 0126 CALL BDOS
- 0127 ;
- 01B0 0E1B 0128 LD C,1BH ;Get CLUSTER.SIZE size map
- 01B2 CD0500 0129 CALL BDOS ;for first disk
- 01B5 ED532207 0130 LD (ACLUSTERS),DE
- 0131 ;
- 01B9 3A2F07 0132 LD A,(DEST) ;Select Dest. drive
- 01BC 5F 0133 LD E,A
- 01BD 0E0E 0134 LD C,0EH
- 01BF CD0500 0135 CALL BDOS
- 0136 ;
- 01C2 0E1B 0137 LD C,1BH ;Get cluster size map
- 01C4 CD0500 0138 CALL BDOS ;for second disk
- 01C7 ED532407 0139 LD (BCLUSTERS),DE ;save it
- 01CB 2A2207 0140 LD HL,(ACLUSTERS) ;get it again
- 01CE AF 0141 XOR A
- 01CF ED52 0142 SBC HL,DE ;to compare them
- 01D1 7D 0143 LD A,L
- 01D2 B5 0144 OR A,L ;see if HL is zero
- 01D3 C20802 R 0145 JP NZ,SEND.DIFF.ERROR ;no
- 0146 ; Now display the disks in use and branch to copy S/R
- 01D6 7B 0147 LD A,E ;LSB of # clusters
- 01D7 FEFE 0148 CP A,0FEH ;D/D S/S?
- 01D9 CA2B03 0149 JP Z,SEND.DD.MSG
- 01DC FE60 0150 CP A,060H ;D/D D/S
- 01DE CA2103 0151 JP Z,SEND.DS.MSG
- 01E1 FEF3 0152 CP A,0F3H ;S/D S/S
- 01E3 2808 0153 JR Z,SEND.SD.MSG
- 01E5 FEF7 0154 CP A,0F7H ;S/D D/S
- 01E7 CA2103 0155 JP Z,SEND.DS.MSG ;Dont use this often,
- 0156 ;I wont bother to tidy it up
- 01EA C31302 R 0157 JP SEND.NON.STANDARD.MSG
- 0158 ;
- 01ED 114806 0159 SEND.SD.MSG: LD DE,SD.MSG
- 01F0 0E09 0160 LD C,9
- 01F2 CD0500 0161 CALL BDOS ;Print it
- 01F5 3E1B 0162 LD A,1BH ;Max sectors/trk+1
- 01F7 322907 0163 LD (SECTORS.PER.TRACK),A
- 01FA 218000 0164 LD HL,80H ;The sector size for S/D
- 01FD 222A07 0165 LD (DMA.INCR),HL
- 0200 21C506 0166 LD HL,SDMAP-1 ;Point to sector map
- 0203 222C07 0167 LD (SECTOR.MAP.ADDRESS),HL
- 0206 1810 0168 JR MAIN
- 0169 ;
- 0208 118706 0170 SEND.DIFF.ERROR: LD DE,DIFF.ERROR.MSG
- 020B 0E09 0171 L5: LD C,9
- 020D CD0500 0172 CALL BDOS
- 0210 C34C01 0173 JP AGAIN
- 0213 11A306 0174 SEND.NON.STANDARD.MSG: LD DE,NON.STANDARD.ERROR.MSG
- 0216 18F3 0175 JR L5
- 0176 ;
- 0177 ; BEGIN SINGLE DENSITY LOOP
- 0178
- 0218 117706 0179 MAIN: LD DE,MSG1 ;Finish disk msg
- CROMEMCO Z80 Macro Assembler version 03.07 Nov 30, 1980 20:18:31 Page 0004
- *** CDOSCOPY ***
-
- 021B 0E09 0180 LD C,9
- 021D CD0500 0181 CALL BDOS
- 0182 ;
- 0220 211A05 0183 LD HL,STR4 ;PRINT HEADER
- 0223 CDFE02 0184 CALL WASC
- 0226 216705 0185 LD HL,STR5
- 0229 CDFE02 0186 CALL WASC
- 0187 ;
- 022C 3E00 0188 LD A,ITRK ;INITIAL TRACK NUMBER
- 022E 323007 0189 LD (TRKNO),A
- 0190 COPY2:
- 0191 ; Check for CTL-C abort
- 0231 CD0601 0192 CALL CONST
- 0234 FE00 0193 CP 0
- 0236 CA4302 R 0194 JP Z,FT1
- 0239 CD0901 0195 CALL CONIN
- 023C E65F 0196 AND 5FH
- 023E FE03 0197 CP 3 ;CTL-C
- 0240 CAEE02 0198 JP Z,COPYX
- 0243 3A2E07 0199 FT1: LD A,(SOURCE) ;Select Source Disk
- 0246 4F 0200 LD C,A
- 0247 CD1B01 0201 CALL SELDSK
- 024A 3A3007 0202 LD A,(TRKNO) ;SET TRACK NUMBER
- 024D 4F 0203 LD C,A
- 024E CD1E01 0204 CALL SETTRK
- 0251 213A07 0205 LD HL,TBUF ;SET INITIAL DMA ADDRESS
- 0254 223207 0206 LD (DMAPTR),HL
- 0257 3E01 0207 LD A,1 ;INITIAL SECTOR NUMBER
- 0259 323107 0208 LD (SECNO),A
- 025C 3A3107 0209 COPY3: LD A,(SECNO) ;SET SECTOR NUMBER
- 025F 2A2C07 0210 LD HL,(SECTOR.MAP.ADDRESS)
- 0262 1600 0211 LD D,0
- 0264 5F 0212 LD E,A
- 0265 19 0213 ADD HL,DE
- 0266 4E 0214 LD C,(HL)
- 0267 CD2101 0215 CALL SETSEC
- 026A 2A3207 0216 LD HL,(DMAPTR) ;SET DMA ADDRESS
- 026D 44 0217 LD B,H
- 026E 4D 0218 LD C,L
- 026F CD2401 0219 CALL SETDMA
- 0272 CD2701 0220 CALL READ ;READ SECTOR
- 0275 2A3207 0221 LD HL,(DMAPTR) ;ADD INCR TO DMA PTR
- 0278 D5 0222 PUSH DE
- 0279 ED5B2A07 0223 LD DE,(DMA.INCR)
- 027D 19 0224 ADD HL,DE
- 027E D1 0225 POP DE
- 027F 223207 0226 LD (DMAPTR),HL
- 0282 213107 0227 LD HL,SECNO ;ADD 1 TO SECTOR NUMBER
- 0285 34 0228 INC (HL)
- 0286 7E 0229 LD A,(HL)
- 0287 212907 0230 LD HL,SECTORS.PER.TRACK
- 028A BE 0231 CP A,(HL) ;LOOP THRU ENTIRE TRACK
- 028B DA5C02 R 0232 JP C,COPY3
- 0233
- 0234 ; WRITE TBUF TO CURRENT TRACK ON DISK C
- 0235
- 028E 3A2F07 0236 LD A,(DEST) ;Select dest dsk
- 0291 4F 0237 LD C,A
- 0292 CD1B01 0238 CALL SELDSK
- 0295 3A3007 0239 LD A,(TRKNO) ;SET TRACK NUMBER
- 0298 4F ƒƒƒÅëâŃƒΣ#3Σ8â<αßπ8 0 8 ƒçŃ