home *** CD-ROM | disk | FTP | other *** search
- ;**********************************************************
- ; 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