home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / NSTAR / NEWFRM14.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  10KB  |  344 lines

  1. ;**********************************************************
  2. ; WILL work with North Star Hard Disk
  3. ;                              *
  4. ;            NEWFORM  VERSION 1.4          *
  5. ;             12/02/82              *
  6. ;               R. L. Plouffe               *
  7. ;                              *
  8. ;    A patch overlay file for adding alternate      *
  9. ;    disk formats to North Star CP/M vers 1.1.0      *
  10. ;                              *
  11. MSIZE    EQU    32        ;MEMORY SIZE THIS VERS      *
  12.                 ;CHANGE TO YOUR SIZE HERE *
  13. OVERLAY    EQU    OVERLAY        ;COMPUTED SYSGEN OVERLAY  *
  14. ;                              *
  15. ;**********************************************************
  16. ;
  17. ; Vers 1.4 Changed location of F35 and F40 labels so that
  18. ; North Star Hard Disk will work properly. Must now use
  19. ; NEWCPY and NEWFMT versions (copier and formatter) that
  20. ; sign on and say 'as of Dec 2, 1982' or later.
  21. ;
  22. ; Vers 1.3 Fixed address in image of call argument to INIT
  23. ; routine. Marked @1.3
  24. ;
  25. ; Vers 1.2 Added conditional assembly for selection of one
  26. ; or both of the alternate formats.  Stuffed code so that
  27. ; the support code for hard disk users is left intact ex-
  28. ; cept for the last 80H of USER area which is overwritten
  29. ; by the directory buffer if the OCTAL equ is set true.
  30. ; That code is not used after boot anyhow and the dirbuf is
  31. ; not written until after boot. So, it doesn't hurt anything.
  32. ; If the alternate OCTAL format is selected, the 'ILLEGAL
  33. ; ACCESS' message in the bios is changed to 'NO'. (Done to 
  34. ; make some code space available for ALTOCTL rtne.)   rlp
  35. ; Vers 1.1  Fixed bug that prevented proper reading of a 
  36. ; Quad disk formatted for 80 tracks when mounted in an
  37. ; Octal drive and accessing files above 70 tracks.  Changes
  38. ; are marked by ;@1.1            rlp
  39. ;
  40. ;    *****This patch file was previously called
  41. ;    ALTFORM, ALTFRM, or ALTFOR with various version
  42. ;    numbers.  Those versions did not achieve the
  43. ;    complete degree of compatibility between all
  44. ;    of the disk formats supported by N* and this
  45. ;    patch.  This version DOES, so it is renamed
  46. ;    to NEWFORM and version number reset to 1.0.
  47. ;    PLEASE throw away previously named versions
  48. ;    and start over again with this one.
  49. ;
  50. ;    THIS VERSION ALSO NOW SUPPORTS AN ADDITIONAL
  51. ;    FORMAT FOR QUAD DRIVES THAT GIVES 40 TRACKS
  52. ;    PER SIDE AND IS COMPATIBLE WITH NORTH STAR
  53. ;    FORMAT FOR 35 TRACKS/SIDE. FORMAT BYTE IS D0H.
  54. ;
  55. ;    PATCH THIS INTO THE DISTRIBUTION VERSION
  56. ;    OF NORTH STAR CP/M VERSION 1.1.0 TO PROVIDE
  57. ;    AN ALTERNATE FORMAT WITH 2KB BLOCKS VS 4KB
  58. ;    FOR 96 TPI DRIVES.  YOUR FORMATTER MUST BE
  59. ;    MODIFIED TO PROVIDE A FORMAT BYTE = 0D2H.
  60. ;    SEE NEWFRMAT.COM FOR A FORMATTER THAT WILL
  61. ;    DO THIS. ALSO SEE NEWCOPY.COM FOR A COPY
  62. ;    PROGRAM THAT TOLERATES THE D0/D2H FORMAT BYTES.
  63. ;    MUST USE GENSYS41 TO WRITE TO YOUR SYSTEM TRACKS.
  64. ;
  65. ;    BY DISTRIBUTION VERSION, I MEAN WITH A USER
  66. ;    AREA **EXACTLY** AS GENERATED BY CPMGEN. OTHERWISE
  67. ;    YOU ARE ON YOUR OWN FOR FINDING A PLACE IN YOUR
  68. ;    CBIOS FOR THE 'NEWFORM' ROUTINES AND A SPACE OF
  69. ;    80H BYTES (CAN BE UNITIALIZED RAM) FOR REDIRECTING
  70. ;    THE DIRECTORY BUFFER IF 'OCTAL' IS SET TRUE.
  71. ;
  72. ;    CALL ME FOR A SOURCE OF NEWFRMT.COM, NEWCOPY.COM
  73. ;    AND GENSYS41.COM     703-524-2549 (it's a computer)
  74. ;
  75. ;    Thanks to Sigi Kluger and Frank Wancho for their help
  76. ;    in debugging this code.            RLP
  77. ;
  78. ;**********************************************************
  79. ;
  80. ;        EQUATES
  81. ;
  82. FALSE    EQU    0
  83. TRUE    EQU    NOT FALSE
  84. ;
  85. OCTAL    EQU    TRUE        ;Want alternate octal format
  86.                 ;for 2kb directory blocks?
  87. QUAD    EQU    TRUE        ;Want alternate quad format
  88.                 ;for 80 tracks?
  89. ;
  90. ;***********************************************************
  91. ;If you have a Hard Disk system, you will have to adjust the
  92. ;addresses of the CCP, BIOS and BDOS for a given MSIZE, and
  93. ;in any case you will have to adjust these components if
  94. ;you split the system around the disk controller PROM.
  95. ;
  96. BIOS    EQU    (MSIZE*1024)-0D00H    ;BASE OF BIOS
  97. CCP    EQU    BIOS-1600H
  98. BDOS    EQU    CCP+800H
  99. OVERLAY    EQU    2B00H-BIOS    ;COMPUTED OVERLAY
  100. USER    EQU    BIOS+700H    ;USER PATCH AREA
  101.     ;
  102. BUF    EQU    USER+200H
  103. JRZ    EQU    28H
  104. JRNZ    EQU    20H        ;z80 relative jumps
  105. JR    EQU    18H
  106. DPB3    EQU    BIOS+50EH    ;Quad
  107. DPB4    EQU    BIOS+51EH    ;N-drive (Octal)
  108. SEKTRK    EQU    BIOS+0CAEH
  109. TINUIT    EQU    BIOS+5ACH
  110. WRTDPH    EQU    BIOS+444H    ;routine in bios to
  111.                 ;write the Disk Parm Header
  112. ;
  113. ;**********************************************************
  114. ;This overlays the jump table at the base of the BIOS so
  115. ;that the code space used for jumps at the base of the
  116. ;USER area is free (24 bytes) for our use. Addresses must
  117. ;point to your routines if different from distribution
  118. ;version.
  119. ;
  120.     IF    QUAD
  121.     ORG    BIOS    
  122.     DS    3        ;boot
  123.     DS    3        ;wboot
  124.     JMP    BIOS+74DH    ;const
  125.     JMP    BIOS+71EH    ;conin
  126.     DS    3        ;consout
  127.     JMP    BIOS+763H    ;prtser
  128.     JMP    BIOS+756H    ;punch
  129.     JMP    BIOS+71EH    ;reader
  130.     DS    3        ;home
  131.     DS    3        ;seldsk
  132.     DS    3        ;settrk
  133.     DS    3        ;setsec
  134.     DS    3        ;setdma
  135.     DS    3        ;read
  136.     DS    3        ;write
  137.     JMP    BIOS+78AH    ;listst
  138. ;
  139.     ORG    BIOS+54BH
  140.     DW    BIOS+756H    ;address of CONOUT
  141.     ORG    CCP-100H+56H    ;arg of call to INIT @1.3
  142.     DW    BIOS+78CH    ;address of INIT routine
  143. ;
  144. ;**********************************************************
  145. ;Routine to patch and unpatch the Bios
  146. ;
  147.     ORG    USER
  148. STOREM:
  149.     STA    BIOS+105H
  150.     INR    A
  151.     STA    BIOS+10BH
  152.     STA    BIOS+668H
  153.     STA    BIOS+68EH
  154.     RAL            ;@1.1
  155.     ADI    3FH        ;@1.1
  156.     STA    BIOS+66DH    ;@1.1
  157.     RET
  158.     DB    0,0,0,0        ;do not expand - 24 bytes here
  159.     ENDIF    ;QUAD
  160. ;
  161. ;**********************************************************
  162. ;Alternate Disk Parameter Block for 96 tpi drives.  This
  163. ;version of NEWFORM now permits support of the original
  164. ;North Star format for N-drives as well as this one.
  165. ;
  166.     ORG    BIOS+32AH
  167.     IF    OCTAL
  168.     ;Double    density, double sided (2.x)
  169.     ;Format byte = D2H
  170.     ;Double track (96/in.)
  171.     ;
  172. N5    EQU    160    ;number of tracks
  173. SPT5    EQU    40    ;CPM sectors per track
  174. DRM5    EQU    127    ;directory size-1
  175. BLS5    EQU    2    ;block size (kbytes)
  176. SYSTRK5    EQU    2    ;reserved tracks
  177.     ;
  178. DSM5    EQU    -1+(((N5-SYSTRK5)*SPT5)/(8*BLS5))
  179. ;
  180.     DB    8*BLS5
  181.     ;
  182. DPB5:
  183.     DW    SPT5    ;SPT-sectors/track
  184.     DB    04    ;BSH-block shift factor
  185.     DB    8*BLS5-1;BLM-block mask
  186.     DB    BLS5-1-BLS5/2
  187.             ;EXM-null mask
  188.     DW    DSM5    ;DSM-disk size-1
  189.     DW    DRM5    ;DRM-directory max
  190.     DB    192    ;AL0-allocation 0
  191.     DB    0    ;AL1-allocation 1
  192.     DW    (DRM5+1)/4
  193.             ;CKS-check size
  194.     DW    SYSTRK5    ;OFF-track offset
  195.     ENDIF    ;OCTAL
  196. ;
  197. ;**********************************************************
  198. ;Alternate Disk Parameter Block for QUAD (48tpi) drives. This
  199. ;version of NEWFORM now permits support of the original
  200. ;North Star format for Quad drives as well as this one.
  201. ;
  202.     IF    QUAD
  203.     ;Double    density, double sided (2.x)
  204.     ;Format byte = D0H
  205.     ;
  206. N6    EQU    80    ;number of tracks
  207. SPT6    EQU    40    ;CPM sectors per track
  208. DRM6    EQU    63    ;directory size-1
  209. BLS6    EQU    2    ;block size (kbytes)
  210. SYSTRK6    EQU    2    ;reserved tracks
  211.     ;
  212. DSM6    EQU    -1+(((N6-SYSTRK6)*SPT6)/(8*BLS6))
  213. ;
  214.     DB    8*BLS6
  215.     ;
  216. DPB6:
  217.     DW    SPT6    ;SPT-sectors/track
  218.     DB    04    ;BSH-block shift factor
  219.     DB    8*BLS6-1;BLM-block mask
  220.     DB    BLS6-1    ;EXM-null mask
  221.     DW    DSM6    ;DSM-disk size-1
  222.     DW    DRM6    ;DRM-directory max
  223.     DB    128    ;AL0-allocation 0
  224.     DB    0    ;AL1-allocation 1
  225.     DW    (DRM6+1)/4
  226.             ;CKS-check size
  227.     DW    SYSTRK6    ;OFF-track offset
  228.     ENDIF    ;QUAD
  229. ;
  230.     IF    OCTAL
  231. ILLEGAL:
  232.     DB    'NO',80H
  233.             ;do not expand - 35 bytes here
  234. ;
  235. ;**********************************************************
  236. ;These routines are in-line with the bios SELDSK routine
  237. ;and permit the alternate formats above if your formatter
  238. ;is modified to place a 0D2H at the format byte location
  239. ;and formats 160 tracks for 96 tpi drives; and, a 0D0H
  240. ;format byte with formatting of 80 tracks for Quad drives.
  241. ;
  242.     ORG    BIOS+6A9H
  243. ALTOCTL:
  244.     MOV    A,B    ;get the format byte
  245.     LXI    D,DPB4-1
  246.     ANI    20H    ;see which format
  247. DB    JRNZ,    GODPH1-$-1
  248.     LXI    D,DPB5-1
  249. GODPH1:    JMP    WRTDPH    ;go write the Disk Parm Header
  250.     DB    0    ;do not expand - 15 bytes here
  251.     ENDIF    ;OCTAL
  252. ;
  253.     IF    QUAD
  254.     ORG    USER+115H
  255. ALTQUAD:
  256.     MOV    A,B    ;get the format byte
  257.     ANI    40H    ;see if double sided
  258. DB    JRZ,    GODPH2-$-1
  259.     MOV    A,B    ;get the format byte again
  260.     ANI    20H    ;see which format
  261. DB    JRNZ,    GODPH2-$-1
  262.     LXI    D,DPB6-1;point to Disk Parm Block for this
  263.             ;format.
  264. GODPH2:    JMP    WRTDPH    ;go write the Disk Parameter Header
  265. ;
  266. ;**********************************************************
  267. ;Routine to test for 80 track format and to patch or unpatch
  268. ;depending on 80/70 tracks.
  269. ;
  270. CKQUAD80:
  271.     LDA    F35
  272.     CALL    STOREM
  273.     LDA    BDOS+0DC6H ;get the disk size byte for
  274.                ;current disk access
  275.     CPI    DSM6
  276. DB    JRNZ,    COMRDWR-$-1
  277.     LDA    F40
  278.     CALL    STOREM
  279. COMRDWR
  280.     LHLD    SEKTRK
  281.     JMP    TINUIT
  282.     DB    0,0       ;do not expand - 43 bytes here
  283.     ENDIF    ;QUAD
  284. ;
  285. ;**********************************************************    
  286. ;These patches provide for moving the directory buffer so
  287. ;that the necessary scratch space for the disk allocation
  288. ;vectors (ALV's) is there. The ALV space is now 39H for
  289. ;each drive instead of 19H as in original N* release.  The
  290. ;Directory buffer has been moved to the last 80H of the 
  291. ;USER patch area since the support code contained therein
  292. ;is expendable after you have booted your system.
  293. ;The Disk Parameter Headers which get written by the BIOS 
  294. ;are moved down by 80H to provide for the expanded ALV space.
  295. ;ALV SPACE IS THUSLY EXPANDED **ONLY** IF YOU SELECT THE
  296. ;ALTERNATE OCTAL FORMAT TO BE TRUE.
  297. ;
  298.     IF    OCTAL
  299.     ORG    BIOS+460H
  300.     DW    DIRBUF
  301.     ORG    BIOS+46CH
  302.     DW    003DH
  303.     ORG    BIOS+481H
  304.     DW    DPBASE0-6AH
  305.     ORG    BIOS+484H
  306.     DW    006AH
  307.  
  308. DPBASE0    EQU    BUF+200H
  309. DIRBUF    EQU    USER+180H
  310. ;
  311.     ORG    BIOS+441H
  312.     JMP    ALTOCTL    ;puts the ALTOCTL routine in-line
  313.             ;with the SELDSK routine in bios.
  314.     ENDIF    ;OCTAL
  315. ;
  316.     IF    QUAD
  317. ;patches for quad drives to give 40 tracks per side
  318.     ORG    BIOS+437H
  319.     DW    ALTQUAD    ;to check for alt Quad format
  320. ;
  321.     ORG    BIOS+43EH
  322.     DW    ALTQUAD
  323. ;
  324.     ORG    BIOS+5A9H
  325.     JMP    CKQUAD80
  326.     ENDIF    ;QUAD
  327. ;
  328.     ORG    BIOS+6E5H
  329. ;These 2 bytes are used in the alternate Quad formatting scheme
  330. ;and are manipulated by the formatter, NEWFRMAT.COM.  So don't
  331. ;change or delete these bytes or their location.
  332. F35:    DB    22H
  333. F40:    DB    27H
  334. ;
  335.     IF    OCTAL
  336.     ORG    BIOS+693H
  337.     DW    ILLEGAL
  338.     ENDIF    ;OCTAL
  339. ;
  340. ;**********************************************************
  341. ;
  342.     END
  343.