;********************************************************** ; WILL work with North Star Hard Disk ; * ; NEWFORM VERSION 1.4 * ; 12/02/82 * ; R. L. Plouffe * ; * ; A patch overlay file for adding alternate * ; disk formats to North Star CP/M vers 1.1.0 * ; * MSIZE EQU 32 ;MEMORY SIZE THIS VERS * ;CHANGE TO YOUR SIZE HERE * OVERLAY EQU OVERLAY ;COMPUTED SYSGEN OVERLAY * ; * ;********************************************************** ; ; Vers 1.4 Changed location of F35 and F40 labels so that ; North Star Hard Disk will work properly. Must now use ; NEWCPY and NEWFMT versions (copier and formatter) that ; sign on and say 'as of Dec 2, 1982' or later. ; ; Vers 1.3 Fixed address in image of call argument to INIT ; routine. Marked @1.3 ; ; Vers 1.2 Added conditional assembly for selection of one ; or both of the alternate formats. Stuffed code so that ; the support code for hard disk users is left intact ex- ; cept for the last 80H of USER area which is overwritten ; by the directory buffer if the OCTAL equ is set true. ; That code is not used after boot anyhow and the dirbuf is ; not written until after boot. So, it doesn't hurt anything. ; If the alternate OCTAL format is selected, the 'ILLEGAL ; ACCESS' message in the bios is changed to 'NO'. (Done to ; make some code space available for ALTOCTL rtne.) rlp ; ; Vers 1.1 Fixed bug that prevented proper reading of a ; Quad disk formatted for 80 tracks when mounted in an ; Octal drive and accessing files above 70 tracks. Changes ; are marked by ;@1.1 rlp ; ; *****This patch file was previously called ; ALTFORM, ALTFRM, or ALTFOR with various version ; numbers. Those versions did not achieve the ; complete degree of compatibility between all ; of the disk formats supported by N* and this ; patch. This version DOES, so it is renamed ; to NEWFORM and version number reset to 1.0. ; PLEASE throw away previously named versions ; and start over again with this one. ; ; THIS VERSION ALSO NOW SUPPORTS AN ADDITIONAL ; FORMAT FOR QUAD DRIVES THAT GIVES 40 TRACKS ; PER SIDE AND IS COMPATIBLE WITH NORTH STAR ; FORMAT FOR 35 TRACKS/SIDE. FORMAT BYTE IS D0H. ; ; PATCH THIS INTO THE DISTRIBUTION VERSION ; OF NORTH STAR CP/M VERSION 1.1.0 TO PROVIDE ; AN ALTERNATE FORMAT WITH 2KB BLOCKS VS 4KB ; FOR 96 TPI DRIVES. YOUR FORMATTER MUST BE ; MODIFIED TO PROVIDE A FORMAT BYTE = 0D2H. ; SEE NEWFRMAT.COM FOR A FORMATTER THAT WILL ; DO THIS. ALSO SEE NEWCOPY.COM FOR A COPY ; PROGRAM THAT TOLERATES THE D0/D2H FORMAT BYTES. ; MUST USE GENSYS41 TO WRITE TO YOUR SYSTEM TRACKS. ; ; BY DISTRIBUTION VERSION, I MEAN WITH A USER ; AREA **EXACTLY** AS GENERATED BY CPMGEN. OTHERWISE ; YOU ARE ON YOUR OWN FOR FINDING A PLACE IN YOUR ; CBIOS FOR THE 'NEWFORM' ROUTINES AND A SPACE OF ; 80H BYTES (CAN BE UNITIALIZED RAM) FOR REDIRECTING ; THE DIRECTORY BUFFER IF 'OCTAL' IS SET TRUE. ; ; CALL ME FOR A SOURCE OF NEWFRMT.COM, NEWCOPY.COM ; AND GENSYS41.COM 703-524-2549 (it's a computer) ; ; Thanks to Sigi Kluger and Frank Wancho for their help ; in debugging this code. RLP ; ;********************************************************** ; ; EQUATES ; FALSE EQU 0 TRUE EQU NOT FALSE ; OCTAL EQU TRUE ;Want alternate octal format ;for 2kb directory blocks? QUAD EQU TRUE ;Want alternate quad format ;for 80 tracks? ; ;*********************************************************** ;If you have a Hard Disk system, you will have to adjust the ;addresses of the CCP, BIOS and BDOS for a given MSIZE, and ;in any case you will have to adjust these components if ;you split the system around the disk controller PROM. ; BIOS EQU (MSIZE*1024)-0D00H ;BASE OF BIOS CCP EQU BIOS-1600H BDOS EQU CCP+800H OVERLAY EQU 2B00H-BIOS ;COMPUTED OVERLAY USER EQU BIOS+700H ;USER PATCH AREA ; BUF EQU USER+200H JRZ EQU 28H JRNZ EQU 20H ;z80 relative jumps JR EQU 18H DPB3 EQU BIOS+50EH ;Quad DPB4 EQU BIOS+51EH ;N-drive (Octal) SEKTRK EQU BIOS+0CAEH TINUIT EQU BIOS+5ACH WRTDPH EQU BIOS+444H ;routine in bios to ;write the Disk Parm Header ; ;********************************************************** ;This overlays the jump table at the base of the BIOS so ;that the code space used for jumps at the base of the ;USER area is free (24 bytes) for our use. Addresses must ;point to your routines if different from distribution ;version. ; IF QUAD ORG BIOS DS 3 ;boot DS 3 ;wboot JMP BIOS+74DH ;const JMP BIOS+71EH ;conin DS 3 ;consout JMP BIOS+763H ;prtser JMP BIOS+756H ;punch JMP BIOS+71EH ;reader DS 3 ;home DS 3 ;seldsk DS 3 ;settrk DS 3 ;setsec DS 3 ;setdma DS 3 ;read DS 3 ;write JMP BIOS+78AH ;listst ; ORG BIOS+54BH DW BIOS+756H ;address of CONOUT ORG CCP-100H+56H ;arg of call to INIT @1.3 DW BIOS+78CH ;address of INIT routine ; ;********************************************************** ;Routine to patch and unpatch the Bios ; ORG USER STOREM: STA BIOS+105H INR A STA BIOS+10BH STA BIOS+668H STA BIOS+68EH RAL ;@1.1 ADI 3FH ;@1.1 STA BIOS+66DH ;@1.1 RET DB 0,0,0,0 ;do not expand - 24 bytes here ENDIF ;QUAD ; ;********************************************************** ;Alternate Disk Parameter Block for 96 tpi drives. This ;version of NEWFORM now permits support of the original ;North Star format for N-drives as well as this one. ; ORG BIOS+32AH IF OCTAL ;Double density, double sided (2.x) ;Format byte = D2H ;Double track (96/in.) ; N5 EQU 160 ;number of tracks SPT5 EQU 40 ;CPM sectors per track DRM5 EQU 127 ;directory size-1 BLS5 EQU 2 ;block size (kbytes) SYSTRK5 EQU 2 ;reserved tracks ; DSM5 EQU -1+(((N5-SYSTRK5)*SPT5)/(8*BLS5)) ; DB 8*BLS5 ; DPB5: DW SPT5 ;SPT-sectors/track DB 04 ;BSH-block shift factor DB 8*BLS5-1;BLM-block mask DB BLS5-1-BLS5/2 ;EXM-null mask DW DSM5 ;DSM-disk size-1 DW DRM5 ;DRM-directory max DB 192 ;AL0-allocation 0 DB 0 ;AL1-allocation 1 DW (DRM5+1)/4 ;CKS-check size DW SYSTRK5 ;OFF-track offset ENDIF ;OCTAL ; ;********************************************************** ;Alternate Disk Parameter Block for QUAD (48tpi) drives. This ;version of NEWFORM now permits support of the original ;North Star format for Quad drives as well as this one. ; IF QUAD ;Double density, double sided (2.x) ;Format byte = D0H ; N6 EQU 80 ;number of tracks SPT6 EQU 40 ;CPM sectors per track DRM6 EQU 63 ;directory size-1 BLS6 EQU 2 ;block size (kbytes) SYSTRK6 EQU 2 ;reserved tracks ; DSM6 EQU -1+(((N6-SYSTRK6)*SPT6)/(8*BLS6)) ; DB 8*BLS6 ; DPB6: DW SPT6 ;SPT-sectors/track DB 04 ;BSH-block shift factor DB 8*BLS6-1;BLM-block mask DB BLS6-1 ;EXM-null mask DW DSM6 ;DSM-disk size-1 DW DRM6 ;DRM-directory max DB 128 ;AL0-allocation 0 DB 0 ;AL1-allocation 1 DW (DRM6+1)/4 ;CKS-check size DW SYSTRK6 ;OFF-track offset ENDIF ;QUAD ; IF OCTAL ILLEGAL: DB 'NO',80H ;do not expand - 35 bytes here ; ;********************************************************** ;These routines are in-line with the bios SELDSK routine ;and permit the alternate formats above if your formatter ;is modified to place a 0D2H at the format byte location ;and formats 160 tracks for 96 tpi drives; and, a 0D0H ;format byte with formatting of 80 tracks for Quad drives. ; ORG BIOS+6A9H ALTOCTL: MOV A,B ;get the format byte LXI D,DPB4-1 ANI 20H ;see which format DB JRNZ, GODPH1-$-1 LXI D,DPB5-1 GODPH1: JMP WRTDPH ;go write the Disk Parm Header DB 0 ;do not expand - 15 bytes here ENDIF ;OCTAL ; IF QUAD ORG USER+115H ALTQUAD: MOV A,B ;get the format byte ANI 40H ;see if double sided DB JRZ, GODPH2-$-1 MOV A,B ;get the format byte again ANI 20H ;see which format DB JRNZ, GODPH2-$-1 LXI D,DPB6-1;point to Disk Parm Block for this ;format. GODPH2: JMP WRTDPH ;go write the Disk Parameter Header ; ;********************************************************** ;Routine to test for 80 track format and to patch or unpatch ;depending on 80/70 tracks. ; CKQUAD80: LDA F35 CALL STOREM LDA BDOS+0DC6H ;get the disk size byte for ;current disk access CPI DSM6 DB JRNZ, COMRDWR-$-1 LDA F40 CALL STOREM COMRDWR LHLD SEKTRK JMP TINUIT DB 0,0 ;do not expand - 43 bytes here ENDIF ;QUAD ; ;********************************************************** ;These patches provide for moving the directory buffer so ;that the necessary scratch space for the disk allocation ;vectors (ALV's) is there. The ALV space is now 39H for ;each drive instead of 19H as in original N* release. The ;Directory buffer has been moved to the last 80H of the ;USER patch area since the support code contained therein ;is expendable after you have booted your system. ;The Disk Parameter Headers which get written by the BIOS ;are moved down by 80H to provide for the expanded ALV space. ;ALV SPACE IS THUSLY EXPANDED **ONLY** IF YOU SELECT THE ;ALTERNATE OCTAL FORMAT TO BE TRUE. ; IF OCTAL ORG BIOS+460H DW DIRBUF ORG BIOS+46CH DW 003DH ORG BIOS+481H DW DPBASE0-6AH ORG BIOS+484H DW 006AH DPBASE0 EQU BUF+200H DIRBUF EQU USER+180H ; ORG BIOS+441H JMP ALTOCTL ;puts the ALTOCTL routine in-line ;with the SELDSK routine in bios. ENDIF ;OCTAL ; IF QUAD ;patches for quad drives to give 40 tracks per side ORG BIOS+437H DW ALTQUAD ;to check for alt Quad format ; ORG BIOS+43EH DW ALTQUAD ; ORG BIOS+5A9H JMP CKQUAD80 ENDIF ;QUAD ; ORG BIOS+6E5H ;These 2 bytes are used in the alternate Quad formatting scheme ;and are manipulated by the formatter, NEWFRMAT.COM. So don't ;change or delete these bytes or their location. F35: DB 22H F40: DB 27H ; IF OCTAL ORG BIOS+693H DW ILLEGAL ENDIF ;OCTAL ; ;********************************************************** ; END