CP/M MACRO ASSEM 2.0 #001 *** format program for cp/m ver. 2.0 *** ***************************************************************** * * * DISK FORMAT PROGRAM FOR DISK JOCKEY 2D CONTROLLER. * * VERSION 5.21 LAST MODIFIED 1 MAY 85 GLH/W6BSK * * ADDED FORMAT-SYSTEM-TRACKS-ONLY FEATURE * ***************************************************************** TITLE '*** format program for cp/m ver. 2.0 ***' 0100 ORG 100H 0209 = REVNUM EQU 521 ; REVISION NUMBER TIMES 10 0005 = BDOS EQU 5 ; CP/M ENTRY POINT 0000 = WBOOT EQU 0 ; WARM BOOT ENTRY E000 = ORIGIN EQU 0E000H ; START OF FIRMWARE ROM E3F8 = DISKIO EQU ORIGIN+3F8H ; UART INVERTED DATA PORT E3FF = DATREG EQU DISKIO+7 ; 1791 DATA REGISTER E3F9 = DRVSEL EQU DISKIO+1 ; UART INVERTED STATUS/FUNCTION E3FB = CSTALL EQU DISKIO+3 ; STALL REGISTER: DUMMY CALL E3FC = CMDREG EQU DISKIO+4 ; 1791 CONTROLLER STATUS/COMMAND 0008 = DSIDE EQU 008H ; DOUBLE-SIDED FLAG 000F = UNLOADB EQU 00FH ; UNLOAD COMMAND FOR B VERSION 00F4 = WTCMD EQU 0F4H ; WAIT COMMAND 0059 = SICMD EQU 059H 00D0 = IMMIRQ EQU 0D0H ; IMMEDIATE INTERRUPT REQUEST 0018 = UNLOADA EQU 018H ; UNLOAD COMMAND FOR A VERSION 0009 = RESTOR EQU 009H ; 0010 = INDEX EQU 010H 0004 = TRKZRO EQU 004H 0001 = INTRQA EQU 001H 0004 = INTRQB EQU 004H 090D = LHSDENB EQU 90DH 080C = LHDDENB EQU 80CH 0111 = LHSDENA EQU 111H 0010 = LHDDENA EQU 010H 000D = ACR EQU 00DH 000A = ALF EQU 00AH 0100 31DD06 START LXI SP,STACK 0103 2A07E0 LHLD ORIGIN+7 ;ADJUST 0106 23 INX H ; THE 0107 7E MOV A,M ; CALLING 0108 21E002 LXI H,STDVSL+1 ; ROUTINES 010B 110400 LXI D,4 ; FOR 010E 77 MOV M,A ; DIFFERENT 010F EE03 XRI 3 ; VERSIONS 0111 19 DAD D ; OF THE 0112 77 MOV M,A ; DISK 0113 19 DAD D ; JOCKEY 0114 77 MOV M,A ; CONTROLLER 0115 11C404 LXI D,SMESSG ;PRINT THE 0118 CDA402 CALL PBUFF ; SIGN ON MESSAGE 011B 11A604 CROK LXI D,DMESSG ;ECHO THE CR AND 011E CDA402 CALL PBUFF ; PRINT DRIVE SELECT 0121 CDA902 CALL RBUFF ;WAIT FOR RESPONSE CP/M MACRO ASSEM 2.0 #002 *** format program for cp/m ver. 2.0 *** 0124 FE4E CPI 'N' ; NEW PARAMETER 0126 CA1B01 JZ CROK ; REQUEST 0129 32A706 STA LETTER ;SAVE FOR EXIT 012C D641 SUI 'A' ;TEST FOR GOOD 012E F23A01 JP NOTLOW ; DRIVE SELECT 0131 119104 INPUTB LXI D,BMESSG ;PRINT THE BAD 0134 CDA402 CALL PBUFF ; INPUT MESSAGE 0137 C31B01 JMP CROK ; AND WAIT FOR INPUT 013A FE04 NOTLOW CPI 4 ;TEST FOR DRIVE 013C F23101 JP INPUTB ; SELECT TOO LARGE 013F 32A806 STA DRVNO ;SAVE DRIVE NO. 0142 11CB05 FMTSIZ LXI D,DENMSG ;SELECT THE SECTOR SIZE 0145 CDA402 CALL PBUFF 0148 CDA902 CALL RBUFF 014B FE4E CPI 'N' 014D CA1B01 JZ CROK 0150 D631 SUI '1' ;STRIP OFF ASCII BIAS 0152 F26601 JP SIZCHK 0155 119104 SIZERR LXI D,BMESSG 0158 CDA402 CALL PBUFF 015B C34201 JMP FMTSIZ 015E 3E02 SETSYS MVI A,2 0160 328002 STA SYSTRK 0163 C37C01 JMP SENDI 0166 FE04 SIZCHK CPI 4 0168 D25501 JNC SIZERR 016B 32AA06 STA NEWSIZE 016E 117B06 SYSONL LXI D,TMESSG 0171 CDA402 CALL PBUFF 0174 CDA902 CALL RBUFF 0177 FE59 CPI 'Y' 0179 CA5E01 JZ SETSYS 017C 112205 SENDI LXI D,IMESSG ;SEND OUT THE 017F 214E05 LXI H,JMESSG ; DISKETTE INSERT 0182 CD9902 CALL SENDMP ; MESSAGE 0185 CDA902 GETIN2 CALL RBUFF ;WAIT FOR RESPONSE 0188 FE4E CPI 'N' ;TEST FOR NEW 018A CA1B01 JZ CROK ; PARAMETER REQUEST 018D 11A406 PROCED LXI D,ACRALF 0190 CDA402 CALL PBUFF 0193 3AA806 LDA DRVNO ;GET THE DRIVE NO 0196 4F MOV C,A 0197 3E7F MVI A,177Q ;DRIVE SELECT BITS 0199 07 QLOOP RLC ;ROTATE SELECT BITS 019A 0D DCR C ; TO PROPER DRIVE 019B F29901 JP QLOOP ; POSITION 019E E63F ANI 3FH 01A0 32A906 STA SELECT ;SAVE FOR TRACK ROUTINE CP/M MACRO ASSEM 2.0 #003 *** format program for cp/m ver. 2.0 *** 01A3 CDDF02 CALL STDVSL 01A6 CDEB02 CALL MODEL 01A9 011101 LXI B,LHSDENA 01AC CAB201 JZ PREP 01AF 010D09 LXI B,LHSDENB 01B2 78 PREP MOV A,B 01B3 CDE302 CALL STBITS 01B6 79 MOV A,C 01B7 CDE302 CALL STBITS 01BA 21FCE3 LXI H,CMDREG 01BD 36D0 MVI M,IMMIRQ 01BF 3E40 MVI A,40H 01C1 3D WIRQD DCR A 01C2 C2C101 JNZ WIRQD 01C5 7E MOV A,M 01C6 1F RAR 01C7 DAEB01 JC NOTRDY 01CA 17 RAL 01CB 17 RAL 01CC DAEB01 JC NOTRDY 01CF 117C04 LXI D,WMESSG 01D2 17 RAL 01D3 DAEE01 JC NOTRDYX 01D6 110000 LXI D,0 01D9 CDFE02 CALL GTINDX 01DC CDE702 IXLOOP CALL GTSTAT 01DF E610 ANI INDEX 01E1 A8 XRA B 01E2 C2FB01 JNZ DOREST 01E5 1B DCX D 01E6 7A MOV A,D 01E7 B3 ORA E 01E8 C2DC01 JNZ IXLOOP 01EB 116D04 NOTRDY LXI D,RMESSG ;NOT READY MESSAGE 01EE EB NOTRDYX XCHG 01EF 116404 LXI D,AMESSG ;DRIVE MESSAGE 01F2 CD9902 CALL SENDMP ;SEND ERROR MESSAGE 01F5 CDF102 CALL UNLOAD 01F8 C37C01 JMP SENDI ;BACK FOR MORE INPUT 01FB 3609 DOREST MVI M,RESTOR 01FD 7E WRSTRS MOV A,M 01FE 1F RAR 01FF D2FD01 JNC WRSTRS 0202 7E WRSTRD MOV A,M 0203 1F RAR 0204 DA0202 JC WRSTRD 0207 7E MOV A,M 0208 E604 ANI TRKZRO 020A CAEB01 JZ NOTRDY 020D 011C04 LXI B,SDLIST 0210 21FF03 LXI H,DLIST 0213 CDE703 CALL OVLAY 0216 014004 LXI B,L128 0219 211204 LXI H,SLIST CP/M MACRO ASSEM 2.0 #004 *** format program for cp/m ver. 2.0 *** 021C CDE703 CALL OVLAY 021F 3E2A MVI A,'*' 0221 CDC402 CALL PCHAR 0224 CD0703 CALL INDEXP 0227 2600 MVI H,0 0229 CD2B03 CALL TRACK 022C 112303 LXI D,TABLE 022F 3AAA06 LDA NEWSIZE 0232 87 ADD A 0233 CA6002 JZ FINDIX 0236 6F MOV L,A 0237 2600 MVI H,0 0239 19 DAD D 023A 4E MOV C,M 023B 23 INX H 023C 46 MOV B,M 023D 211204 LXI H,SLIST 0240 CDE703 CALL OVLAY 0243 012E04 LXI B,DDLIST 0246 21FF03 LXI H,DLIST 0249 CDE703 CALL OVLAY 024C CDEB02 CALL MODEL 024F 011000 LXI B,LHDDENA 0252 CA5802 JZ LOADD 0255 010C08 LXI B,LHDDENB 0258 78 LOADD MOV A,B 0259 CDE302 CALL STBITS 025C 79 MOV A,C 025D CDE302 CALL STBITS 0260 CD0703 FINDIX CALL INDEXP 0263 2601 MVI H,1 0265 3E2A TKSTEP MVI A,'*' 0267 CDC402 CALL PCHAR 026A 11FCE3 LXI D,CMDREG 026D 3E59 MVI A,SICMD 026F 12 STAX D 0270 1A WSICMS LDAX D 0271 1F RAR 0272 D27002 JNC WSICMS 0275 1A WSICMD LDAX D 0276 1F RAR 0277 DA7502 JC WSICMD 027A CD2B03 CALL TRACK 027D 62 MOV H,D 027E 24 INR H 027F 3E4D MVI A,77 0280 = SYSTRK EQU $-1 0281 BC CMP H 0282 C26502 JNZ TKSTEP 0285 CDF102 CALL UNLOAD 0288 117D05 LXI D,FMESSG 028B CDA402 CALL PBUFF 028E CDA902 CALL RBUFF 0291 FE66 CPI 'f' 0293 CA1B01 JZ CROK 0296 C30000 JMP WBOOT CP/M MACRO ASSEM 2.0 #005 *** format program for cp/m ver. 2.0 *** 0299 E5 SENDMP PUSH H ;SAVE SECOND HALF 029A CDA402 CALL PBUFF ;SEND FIRST HALF 029D 3AA706 LDA LETTER ;PRINT THE 02A0 CDC402 CALL PCHAR ; LETTER 02A3 D1 POP D ;SEND THE SECOND 02A4 0E09 PBUFF MVI C,9 02A6 C30500 JMP BDOS 02A9 11D302 RBUFF LXI D,INBUFX 02AC 0E0A MVI C,10 02AE CD0500 CALL BDOS 02B1 3AD402 LDA INBUFX+1 02B4 A7 ANA A 02B5 3E0D MVI A,ACR 02B7 C8 RZ 02B8 3AD502 LDA INBUF 02BB FE61 CPI 'a' 02BD D8 RC 02BE FE7B CPI 'z'+1 02C0 D0 RNC 02C1 D620 SUI 40Q 02C3 C9 RET 02C4 E5 PCHAR PUSH H 02C5 C5 PUSH B 02C6 D5 PUSH D 02C7 F5 PUSH PSW 02C8 5F MOV E,A 02C9 0E02 MVI C,2 02CB CD0500 CALL BDOS 02CE F1 POP PSW 02CF D1 POP D 02D0 C1 POP B 02D1 E1 POP H 02D2 C9 RET 02D3 0A00 INBUFX DB 10,0 02D5 0000000000INBUF DB 0,0,0,0,0,0,0,0,0,0 02DF 32F9E3 STDVSL STA DISKIO+1 02E2 C9 RET 02E3 32FAE3 STBITS STA DISKIO+2 02E6 C9 RET 02E7 3AFAE3 GTSTAT LDA DISKIO+2 02EA C9 RET 02EB 3AF4E3 MODEL LDA DISKIO-4 02EE FEC9 CPI (RET) 02F0 C9 RET 02F1 CDEB02 UNLOAD CALL MODEL 02F4 3E18 MVI A,UNLOADA CP/M MACRO ASSEM 2.0 #006 *** format program for cp/m ver. 2.0 *** 02F6 CAE302 JZ STBITS 02F9 3E0F MVI A,UNLOADB 02FB C3E302 JMP STBITS 02FE CDEB02 GTINDX CALL MODEL 0301 0600 MVI B,0 0303 C8 RZ 0304 0610 MVI B,INDEX 0306 C9 RET 0307 CDFE02 INDEXP CALL GTINDX 030A CDE702 WINDXH CALL GTSTAT 030D E610 ANI INDEX 030F A8 XRA B 0310 CA0A03 JZ WINDXH 0313 CDE702 WINDXL CALL GTSTAT 0316 E610 ANI INDEX 0318 A8 XRA B 0319 C21303 JNZ WINDXL 031C C9 RET 031D CDFE02 INDXW CALL GTINDX 0320 C31303 JMP WINDXL 0323 4004 TABLE DW L128 0325 4904 DW L256 0327 5204 DW L512 0329 5B04 DW L1024 032B 3AA906 TRACK LDA SELECT 032E CDDF02 CALL STDVSL 0331 AF XRA A 0332 328B03 STA SIDENO 0335 CD4E03 CALL WTRACK 0338 CDE702 CALL GTSTAT 033B E608 ANI DSIDE 033D C0 RNZ 033E 3C INR A 033F 328B03 STA SIDENO 0342 3AA906 LDA SELECT 0345 E6EF ANI 357Q 0347 CDDF02 CALL STDVSL WIL 034A CD1D03 CALL INDXW 034D EB XCHG 034E 11FFE3 WTRACK LXI D,DATREG ;1791 DATA REG 0351 2E01 MVI L,1 ;INITIALIZE SECTOR REG 0353 01504E LXI B,4E50H ;DATA & COUNT 0354 = OVLD1 EQU $-2 0356 3EF4 MVI A,WTCMD ;ISSUE A WRITE 0358 32FCE3 STA CMDREG ; TRACK COMMAND 035B EB XCHG ;ADJUST THE REGISTERS 035C 70 WTL1 MOV M,B ;INDEX MARK 035D 0D DCR C ; PREAMBLE 035E C25C03 JNZ WTL1 ; FIELD 0361 010C00 LXI B,0CH ;DATA & COUNT CP/M MACRO ASSEM 2.0 #007 *** format program for cp/m ver. 2.0 *** 0362 = OVLD2 EQU $-2 0364 70 WTL2 MOV M,B ;INDEX MARK 0365 0D DCR C ; ZERO LEADER 0366 C26403 JNZ WTL2 ; FIELD 0369 36F6 OVLD3 MVI M,0F6H ;SPECIAL DOUBLE 036B 36F6 MVI M,0F6H ; DENSITY CLOCK 036D 36F6 MVI M,0F6H ; AND DATA MARK 036F 36FC WTL3 MVI M,0FCH ;INDEX MARK 0371 01324E LXI B,4E32H ;DATA & COUNT 0372 = OVLD4 EQU $-2 0374 70 WTL4 MOV M,B ;SECTOR MARK 0375 0D DCR C ; PREAMBLE 0376 C27403 JNZ WTL4 ; FIELD 0379 010C00 SLOOP LXI B,0CH ;DATA & COUNT 037A = OVLD5 EQU $-2 037C 70 WTL5 MOV M,B ;SECTOR MARK 037D 0D DCR C ; ZERO LEADER 037E C27C03 JNZ WTL5 ; FIELD 0381 36F5 OVLD6 MVI M,0F5H ;SPECIAL DOUBLE 0383 36F5 MVI M,0F5H ; DENSITY CLOCK 0385 36F5 MVI M,0F5H ; AND DATA MARK 0387 36FE WTL6 MVI M,0FEH ;SECTOR MARK 0389 72 MOV M,D ;TRACK NUMBER 038A 3600 MVI M,0 ;SIDE NUMBER 038B = SIDENO EQU $-1 038C 73 MOV M,E ;SECTOR NUMBER 038D 3601 MVI M,1 ;SECTOR LENGTH 038E = OVLS1 EQU $-1 038F 36F7 MVI M,0F7H ;CRC DATA BYTES 0391 1C INR E ;INCREMENT SECTOR 0392 01164E LXI B,4E16H ;DATA & COUNT 0393 = OVLD7 EQU $-2 0395 70 WTL7 MOV M,B ;SECTOR MARK 0396 0D DCR C ; POSTAMBLE 0397 C29503 JNZ WTL7 ; FIELD 039A 010C00 LXI B,0CH ;DATA & COUNT 039B = OVLD8 EQU $-2 039D 70 WTL8 MOV M,B ;DATA MARK 039E 0D DCR C ; ZERO LEADER 039F C29D03 JNZ WTL8 ; FIELD 03A2 36F5 OVLD9 MVI M,0F5H ;SPECIAL DOUBLE 03A4 36F5 MVI M,0F5H ; DENSITY CLOCK 03A6 36F5 MVI M,0F5H ; AND DATA MARK 03A8 36FB WTL9 MVI M,0FBH ;DATA MARK 03AA 0140E5 LXI B,0E540H ;DATA & COUNT 03AB = OVLS2 EQU $-2 03AD 70 WTL10 MOV M,B ;WRITE FIRST 03AE 0D DCR C ; QUARTER OF 03AF C2AD03 JNZ WTL10 ; SECTOR DATA 03B2 0E40 MVI C,40H ;COUNT 03B3 = OVLS3 EQU $-1 03B4 70 WTL11 MOV M,B ;WRITE SECOND 03B5 0D DCR C ; QUARTER OF 03B6 C2B403 JNZ WTL11 ; SECTOR DATA 03B9 0E40 MVI C,40H ;COUNT 03BA = OVLS4 EQU $-1 CP/M MACRO ASSEM 2.0 #008 *** format program for cp/m ver. 2.0 *** 03BB 70 WTL12 MOV M,B ;WRITE THIRD 03BC 0D DCR C ; QUARTER OF 03BD C2BB03 JNZ WTL12 ; SECTOR DATA 03C0 0E40 MVI C,40H ;COUNT 03C1 = OVLS5 EQU $-1 03C2 70 WTL13 MOV M,B ;WRITE FOURTH 03C3 0D DCR C ; QUARTER OF 03C4 C2C203 JNZ WTL13 ; SECTOR DATA 03C7 36F7 MVI M,0F7H ;CRC DATA BYTES 03C9 3E1B MVI A,27 ;LAST SECTOR + 1 03CA = OVLS6 EQU $-1 03CB 01364E LXI B,4E36H ;COUNT & DATA 03CC = OVLS7 EQU $-2 03CE 70 WTL14 MOV M,B ;DATA 03CF 0D DCR C ; POSTAMBLE 03D0 C2CE03 JNZ WTL14 ; FIELD 03D3 BB CMP E ;LAST SECTOR TEST 03D4 C27903 JNZ SLOOP 03D7 70 WTL15 MOV M,B ;FILL DATA 03D8 0D DCR C ; TO INDEX HOLE 03D9 C2D703 JNZ WTL15 03DC 70 WTL16 MOV M,B ;FILL DATA 03DD 0D DCR C ; TO INDEX HOLE 03DE C2DC03 JNZ WTL16 03E1 70 WTL17 MOV M,B ;FILL DATA 03E2 0D DCR C ; TO INDEX HOLE 03E3 C2E103 JNZ WTL17 03E6 C9 RET 03E7 7E OVLAY MOV A,M ;LENGTH OF LIST 03E8 E5 PUSH H ;SAVE LIST PTR 03E9 214E03 LXI H,WTRACK ;OVERLAY AREA 03EC E3 XTHL ; RECOVER POINTER 03ED 1600 MVI D,0 03EF 23 OVLAY1 INX H ;INCREMENT POINTER 03F0 5E MOV E,M ;GET OFFSET 03F1 E3 XTHL ;EXCHANGE POINTERS 03F2 19 DAD D ;ADD THE OFFSET 03F3 F5 PUSH PSW ;SAVE LENGTH COUNT 03F4 0A LDAX B ;GET REPLACEMENT DATA 03F5 77 MOV M,A ;DO THE REPLACEMENT 03F6 03 INX B ;NEXT REPLACEMENT DATA 03F7 F1 POP PSW ;RECOVER LENGTH COUNT 03F8 3D DCR A ;DECREMENT 03F9 E3 XTHL ;EXCHANGE POINTERS 03FA C2EF03 JNZ OVLAY1 03FD E1 POP H ;ADJUST STACK 03FE C9 RET * THE LISTS BELOW REPRESENTS THE DISTANCES * BETWEEN SUCCESSIVE LOCATIONS OF THE WTRACK * ROUTINE THAT ARE TO BE OVERLAID IN ORDER * THAT THE SAME ROUTINE WILL SERVE TO FORMAT * DIFFERENT SIZED AND DENSITY DISKETTE * SECTOR FORMATS CP/M MACRO ASSEM 2.0 #009 *** format program for cp/m ver. 2.0 *** 03FF 12 DLIST DB 18 ;LENGTH OF LIST 0400 06 DB OVLD1-WTRACK 0401 01 DB 1 0402 0D DB OVLD2-OVLD1-1 0403 07 DB OVLD3-OVLD2 0404 01 DB 1 0405 01 DB 1 0406 07 DB OVLD4-OVLD3-2 0407 01 DB 1 0408 07 DB OVLD5-OVLD4-1 0409 07 DB OVLD6-OVLD5 040A 01 DB 1 040B 01 DB 1 040C 10 DB OVLD7-OVLD6-2 040D 01 DB 1 040E 07 DB OVLD8-OVLD7-1 040F 07 DB OVLD9-OVLD8 0410 01 DB 1 0411 01 DB 1 0412 09 SLIST DB 9 ;LIST LENGTH 0413 40 DB OVLS1-WTRACK 0414 1D DB OVLS2-OVLS1 0415 01 DB 1 0416 07 DB OVLS3-OVLS2-1 0417 07 DB OVLS4-OVLS3 0418 07 DB OVLS5-OVLS4 0419 09 DB OVLS6-OVLS5 041A 02 DB OVLS7-OVLS6 041B 01 DB 1 * OVERLAY DATA FOR SINGLE DENSITY * FORMATTED DISKETTES 041C 28FF SDLIST DW 0FF28H 041E 06 DB 6 041F C36F03 JMP WTL3 0422 1AFF DW 0FF1AH 0424 06 DB 6 0425 C38703 JMP WTL6 0428 0BFF DW 0FF0BH 042A 06 DB 6 042B C3A803 JMP WTL9 * OVERLAY DATA FOR DOUBLE DENSITY * FORMATTED DISKETTES 042E 504E DDLIST DW 4E50H 0430 0C DB 0CH 0431 36F6 MVI M,0F6H 0433 36 DB 36H 0434 324E DW 4E32H 0436 0C DB 0CH 0437 36F5 MVI M,0F5H 0439 36 DB 36H 043A 164E DW 4E16H CP/M MACRO ASSEM 2.0 #010 *** format program for cp/m ver. 2.0 *** 043C 0C DB 0CH 043D 36F5 MVI M,0F5H 043F 36 DB 36H * OVERLAY DATA FOR SINGLE DENSITY * 26 SECTORS/TRACK 128 BYTE SECTORS 0440 00 L128 DB 0 0441 20E5 DW 0E520H 0443 20 DB 20H 0444 20 DB 20H 0445 20 DB 20H 0446 1B DB 27 0447 1BFF DW 0FF1BH * OVERLAY DATA FOR DOUBLE DENSITY * 26 SECTORS/TRACK 256 BYTE SECTORS 0449 01 L256 DB 1 044A 40E5 DW 0E540H 044C 40 DB 40H 044D 40 DB 40H 044E 40 DB 40H 044F 1B DB 27 0450 364E DW 4E36H * OVERLAY DATA FOR DOUBLE DENSITY * 15 SECTORS/TRACK 512 BYTE SECTORS 0452 02 L512 DB 2 0453 80E5 DW 0E580H 0455 80 DB 80H 0456 80 DB 80H 0457 80 DB 80H 0458 10 DB 16 0459 6A4E DW 4E6AH * OVERLAY DATA FOR DOUBLE DENSITY * 8 SECTORS/TRACK 1024 BYTE SECTORS 045B 03 L1024 DB 3 045C 00E5 DW 0E500H 045E 00 DB 0 045F 00 DB 0 0460 00 DB 0 0461 09 DB 9 0462 744E DW 4E74H 0464 0D0A AMESSG DB ACR,ALF 0466 4472697665 DB 'Drive $' 046D 206973206ERMESSG DB ' is not ready.$' 047C 2069732077WMESSG DB ' is write protected.$' 0491 0D0A BMESSG DB ACR,ALF 0493 496D70726F DB 'Improper response.$' CP/M MACRO ASSEM 2.0 #011 *** format program for cp/m ver. 2.0 *** 04A6 0D0A DMESSG DB ACR,ALF 04A8 53656C6563 DB 'Select drive (a,b,c,or d): $' 04C4 4469736B20SMESSG DB 'Disk Jockey 2d disk format program' 04E6 2072657669 DB ' revision ' 04F0 642E31 DB '0'+REVNUM/10,'.','0'+(REVNUM MOD 10) 04F3 0D0A DB ACR,ALF 04F5 5479706520 DB 'Type "^c" to return to cp/m, "n" to restart.$' 0522 0D0A IMESSG DB ACR,ALF 0524 496E736572 DB 'Insert a write enabled diskette in drive $' 054E 0D0A JMESSG DB ACR,ALF 0550 636C6F7365 DB 'close the drive door and then press return: $' 057D 0D0A FMESSG DB ACR,ALF 057F 46756E6374 DB 'Function complete.' 0591 0D0A DB ACR,ALF 0593 5479706520 DB 'Type return to return to CP/M, or f to format another: $' 05CB 0D0A DENMSG DB ACR,ALF 05CD 53656C6563 DB 'Select a sector size:' 05E2 0D0A DB ACR,ALF 05E4 2020202020 DB ' 1) 128 byte single density.' 0604 0D0A DB ACR,ALF 0606 2020202020 DB ' 2) 256 byte double density.' 0626 0D0A DB ACR,ALF 0628 2020202020 DB ' 3) 512 byte double density.' 0648 0D0A DB ACR,ALF 064A 2020202020 DB ' 4) 1024 byte double density.' 066B 0D0A DB ACR,ALF 066D 536563746F DB 'Sector size: $' 067B 0D0A TMESSG DB ACR,ALF 067D 2020202046 DB ' Format system tracks only? (y/n): $' 06A4 0D0A24 ACRALF DB ACR,ALF,'$' 06A7 00 LETTER DB 0 06A8 00 DRVNO DB 0 06A9 00 SELECT DB 0 06AA 00 NEWSIZE DB 0 06AB DS 50 06DD = STACK EQU $ 06DD END