Browse Source

Merge pull request #234 from wwarthen/dev

Dev
pull/252/head
b1ackmai1er 4 years ago
committed by GitHub
parent
commit
e4686cc50c
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 0
      Source/Apps/ZMD/-29sep88
  2. 24
      Source/Apps/ZMD/-notice.doc
  3. 10
      Source/Apps/ZMD/-zmd.for
  4. 37
      Source/Apps/ZMD/Build.cmd
  5. 10
      Source/Apps/ZMD/Clean.cmd
  6. 10
      Source/Apps/ZMD/Makefile
  7. 36
      Source/Apps/ZMD/autoinst.doc
  8. 88
      Source/Apps/ZMD/equates.ins
  9. 44
      Source/Apps/ZMD/mkcoms.sub
  10. 420
      Source/Apps/ZMD/zforp.z80
  11. 233
      Source/Apps/ZMD/zfors.z80
  12. 268
      Source/Apps/ZMD/zmap.z80
  13. BIN
      Source/Apps/ZMD/zmd.pdf
  14. 1144
      Source/Apps/ZMD/zmd.ws
  15. 4858
      Source/Apps/ZMD/zmd.z80
  16. 264
      Source/Apps/ZMD/zmdel.z80
  17. 916
      Source/Apps/ZMD/zmdhb.z80
  18. 637
      Source/Apps/ZMD/zmdhdr.z80
  19. 517
      Source/Apps/ZMD/znewp.z80
  20. 298
      Source/Apps/ZMD/znews.z80
  21. 5
      Source/Images/Build.cmd
  22. 3
      Source/Images/Makefile
  23. 2
      Source/Images/d_bp.txt
  24. 1
      Source/Images/d_cpm22.txt
  25. 1
      Source/Images/d_cpm3.txt
  26. 1
      Source/Images/d_nzcom.txt
  27. 1
      Source/Images/d_zpm3.txt
  28. 1
      Source/Images/d_zsdos.txt
  29. 2
      Source/ver.inc
  30. 2
      Source/ver.lib

0
Source/Apps/ZMD/-29sep88

24
Source/Apps/ZMD/-notice.doc

@ -0,0 +1,24 @@
-----------------------------------------------------------------------
Copyright (c) 1987, 1988 by Robert W. Kramer III, ALL RIGHTS RESERVED
Release 1.50 1569 40th St.
09/29/88 Rock Island, Il. 61201
Voice: (309) 786-6711, 24hr
RI RCPM-RDOS (128 Meg) Data: (309) 786-6227, 24hr, 300/1200/2400
-----------------------------------------------------------------------
USER AGREEMENT:
---------------
ZMD is free to use, providing program signon messages (my name, program
name, release date and copyright notices) remain intact as released.
You may modify any .Z80 file as you wish so long as your modified copy
is used for your own personal non-profit use and is NOT passed on to
any other party.
You are encouraged to distribute ZMD releases to any interested party
providing all files remain in their ORIGINAL UNMODIFIED RELEASE FORM
as distributed from RI RCPM-RDOS.


10
Source/Apps/ZMD/-zmd.for

@ -0,0 +1,10 @@
-----
ZMD150.LBR - CP/M Communications
09/29/88 - This release is super clean, super fast - and smaller.
Some major problems in the way Ymodem Batch protocol was implemented
on CP/M systems has been fixed, virtually eliminating all delays
between files. CPM3 systems can now run all ZMD programs with no
problems. Some other bug fixes, modifications and enhancements.
This is probably the last release of ZMD until ZMD with ZMODEM is
released. Bob Kramer - RI RCPM-RDOS (128 Mb) - (309) 786-6711


37
Source/Apps/ZMD/Build.cmd

@ -0,0 +1,37 @@
@echo off
setlocal
set TOOLS=..\..\..\Tools
set PATH=%TOOLS%\zx;%PATH%
set ZXBINDIR=%TOOLS%\cpm\bin\
set ZXLIBDIR=%TOOLS%\cpm\lib\
set ZXINCDIR=%TOOLS%\cpm\include\
zx z80asm -zmd/fm
zx l80 -zmd,zmd/n/e
zx z80asm -zmap/fm
zx l80 -zmap,zmap/n/e
zx z80asm -znews/fm
zx l80 -znews,znews/n/e
zx z80asm -znewp/fm
zx l80 -znewp,znewp/n/e
zx z80asm -zfors/fm
zx l80 -zfors,zfors/n/e
zx z80asm -zforp/fm
zx l80 -zforp,zforp/n/e
zx z80asm -zmdel/fm
zx l80 -zmdel,zmdel/n/e
zx z80asm -zmdhb/fh
zx mload25 zmd=zmd.com,zmdhb
copy /Y zmd.com ..\..\..\Binary\Apps\ || exit /b

10
Source/Apps/ZMD/Clean.cmd

@ -0,0 +1,10 @@
@echo off
setlocal
ren zmdsubs.rel zmdsubs.rel.sav
if exist *.rel del *.rel
ren zmdsubs.rel.sav zmdsubs.rel
if exist *.hex del *.hex
if exist *.prn del *.prn
if exist *.lst del *.lst
if exist *.com del *.com

10
Source/Apps/ZMD/Makefile

@ -0,0 +1,10 @@
OBJECTS = zmd.com
DEST = ../../../Binary/Apps
TOOLS = ../../../Tools
OTHERS = *.hex zmd.rel
include $(TOOLS)/Makefile.inc
zmd.com: zmd.rel zmdhb.hex
$(ZXCC) $(CPM)/L80 -zmd,zmd/n/e
$(ZXCC) $(CPM)/MLOAD25 zmd=zmd.com,zmdhb

36
Source/Apps/ZMD/autoinst.doc

@ -0,0 +1,36 @@
-----------------------------------------------------------------------
Copyright (c) 1987, 1988 by Robert W. Kramer III, ALL RIGHTS RESERVED
Release 1.50 1569 40th St.
09/29/88 Rock Island, Il. 61201
Voice: (309) 786-6711, 24hr
RI RCPM-RDOS (128 Meg) Data: (309) 786-6227, 24hr, 300/1200/2400
-----------------------------------------------------------------------
ZMD AUTO-INSTALL FEATURE
------------------------
ZINSTL can automatically install the new release of ZMD (and utilities)
with the use of the '!' option. ZINSTL ! will read all switch/toggle
configurations and port/modem/rtc overlays from your already installed
version of ZMD where you can then use them to install this new release.
Follow these steps:
1) Extract all files from ZMDnnn.LBR
2) Rename your already configured ZMD.COM to ZMD149.COM
3) Run ZINSTL (Release 1.50) with the '!' option: ZINSTL !
4) Answer any questions ZINSTL may ask
5) Use the 'J' option to save configurations
6) Rename ZMD150.COM to ZMD.COM
NOTE: This will not work with any other version of ZMD except for 1.49
and 1.50. Running ZINSTL without the ! option will cause it to run just
like you've all been used to. In the future, if the new release header
file ZMDHDR.Z80 becomes incompatible with that of the previous release
this feature will be disabled.


88
Source/Apps/ZMD/equates.ins

@ -0,0 +1,88 @@
;
; Version identification
;
VERS EQU 1 ; Release
MODLEV EQU 5 ; Major modification level
REV EQU 0 ; Minor revision number
VMONTH EQU 09 ; Version month
VDAY EQU 29 ; Version day
VYEAR EQU 88 ; Version year
;
;==========================================================================
;
NO EQU 0
YES EQU 0FFH
;
;--------------------------------------------------------------------------
; Define ASCII characters used
;--------------------------------------------------------------------------
SOH EQU 1 ; ^A - start of header
STX EQU 2 ; ^B - start of 1k header
CTRLC EQU 3 ; ^C - abort/break character
EOT EQU 4 ; ^D - end of transmission
ACK EQU 6 ; ^F - acknowledge
BELL EQU 7 ; ^G - bell
BS EQU 8 ; ^H - backspace
TAB EQU 9 ; ^I - horizontal tab
LF EQU 10 ; ^J - line feed
CTRLK EQU 11 ; ^K - abort character
CR EQU 13 ; ^M - carriage return
PAUSE EQU 19 ; ^S - pause request
NAK EQU 21 ; ^U - negative acknowledge
CANCEL EQU 24 ; ^X - cancel
EOF EQU 26 ; ^Z - end of file
CRC EQU 67 ; C - CRC request character
KSND EQU 75 ; K - 1k block request character
DEL EQU 127 ; Delete/Rubout
;
;
; Define standard CP/M BDOS equates
;
DIRCON EQU 6 ; Direct console output
PRINT EQU 9 ; Print string function
GETVER EQU 12 ; Get CP/M version
SELDSK EQU 14 ; Select drive
OPEN EQU 15 ; Open file
CLOSE EQU 16 ; Close file
SRCHF EQU 17 ; Search for first occurence
SRCHN EQU 18 ; Search for next occurence
DELETE EQU 19 ; Delete file
READ EQU 20 ; Read record
WRITE EQU 21 ; Write record
MAKE EQU 22 ; Make new file
RENAME EQU 23 ; Rename a file
CURDRV EQU 25 ; Get current drive
SETDMA EQU 26 ; Set DMA
SETFILE EQU 30 ; Set file attributes
SETUSR EQU 32 ; Set user area to receive file
RRDM EQU 33 ; Read random
WRDM EQU 34 ; Write random
FILSIZ EQU 35 ; Compute file size
SETRRD EQU 36 ; Set random record
BDOS EQU 0005H ; Address for BDOS jump vectors
TBUF EQU 0080H ; Default DMA address
FCB EQU 005CH ; System FCB
FCB1 EQU 006CH ; Secondary FCB area
FCBEXT EQU FCB+12 ; File extent
FCBRNO EQU FCB+32 ; Record number
RANDOM EQU FCB+33 ; Random record field
RLEN EQU 128 ; Record length
ITEMSZ EQU 16 ; Number of data bytes in each filename entry
;
;
TAGFIL EQU 7
DWNTAG EQU 6
NOSYS EQU 5
NOLBS EQU 4
NOCOMS EQU 3
NOCOMR EQU 2
RESERV1 EQU 1
ZCPR EQU 0
;
;
;
;--------------------------------------------------------------------------


44
Source/Apps/ZMD/mkcoms.sub

@ -0,0 +1,44 @@
;
;
; MKCOMS.SUB - 09/29/88 - Assemble/Link ZMD and utilities
;
; To use this file with M80, you'll have to edit all 'z80asm '
; to 'm80 ='. Older versions of M80 which truncate labels to 6
; bytes will not assemble the programs properly.
;
; --> MICROSOFT MACRO-80 v3.43 has been tested and proven to
; assemble them without error.
;
;
z80asm zmd/m
l80 zmd,zmd/n/e
era zmd.rel
;
z80asm zmap/m
l80 zmap,zmap/n/e
era zmap.rel
;
z80asm znews/m
l80 znews,znews/n/e
era znews.rel
;
z80asm znewp/m
l80 znewp,znewp/n/e
era znewp.rel
;
z80asm zfors/m
l80 zfors,zfors/n/e
era zfors.rel
;
z80asm zforp/m
l80 zforp,zforp/n/e
era zforp.rel
;
z80asm zmdel/m
l80 zmdel,zmdel/n/e
era zmdel.rel
;
;
; Done...
;


420
Source/Apps/ZMD/zforp.z80

@ -0,0 +1,420 @@
;
TITLE ZFORP.Z80 - 09/29/88 - ZMD Public Description Utility
; Copyrighted (c) 1987, 1988
; Robert W. Kramer III
PAGE
;- -;
; Update History ;
; ;
; Date Release Comments ;
; -------- ------- ---------------------------------------------- ;
; ;
; 09/29/88 v1.50 - No change(s) made to this file. ;
; 03/18/88 v1.49 - No change(s) made to this file ;
; 03/13/88 v1.48 - Redefined buffer table at end of programs. STACK;
; and filename buffers now EQUated with offsets ;
; from the last switch/toggle in program instead ;
; of with DS directive. ;
; - Some systems which do NOT have an interrupt ;
; driven keyboard may have noticed problems when ;
; an invalid key was entered in the ZNEWP, ZFORP ;
; and ZMDEL programs. In ZNEWP and ZFORP, if a ;
; CR was entered to pause the output, output was ;
; limited to one line at a time per key pressed. ;
; If an invalid key was hit, output would have ;
; remained in a paused state until one of the ;
; abort keys were pressed. This was difficult to ;
; find since my keyboard is interrupt driven and ;
; I could not duplicate the problem on my own ;
; system. ;
; 02/25/88 v1.47 - No change(s) made to this file ;
; 01/27/88 v1.46 - Some changes were made to ZMDSUBS that are not ;
; directly related to this file ;
; - Fixed typo in help guide reflecting '/' as the ;
; flag to force LF in search routine ;
; 01/17/88 v1.45 - First public release ;
; 12/24/87 v1.01 - Some trivial bugs fixed ;
; 11/10/87 v1.00 - Initial version ;
;- -;
;-------------------------------------------------------------------------;
; EXTERNAL Declarations: |
;-------------------------------------------------------------------------;
EXTRN CKABRT,CMDBUF,DBUF,ERXIT,EXIT,ILPRTB,LINCNT,NOFILE
EXTRN NOFOR,OLDDRV,OLDUSR,PRINTV,RECAR1,RECDR1,RENFCB
EXTRN RSDMA,SHONM4,STACK,TYPE,UCASE,NOFOR
;
;-------------------------------------------------------------------------;
; Program Starts Here |
;-------------------------------------------------------------------------;
.Z80
ASEG
ORG 100H ; Program starts
JP BEGIN ; Jump around configuration table
INCLUDE ZMDHDR.Z80 ; Include the ZMD header overlay
.REQUEST ZMDSUBS ; Include the ZMD subroutines
;
;
; Save CP/M stack, initialize new one for this program
;
BEGIN: LD (STACK),SP ; Save return address to CCP
LD SP,STACK ; Initialize new one for this program
;
; Get current drive/user and save for later
;
LD A,255
CALL RECAR1
LD (OLDUSR),A ; Save current user area
LD C,CURDRV
CALL BDOS
LD (OLDDRV),A ; Save current drive
;
; Tell em who we are
;
LD HL,PUBFOR
CALL PRINTV
;
; See if descriptions enabled
;
LD A,(DESCRIB)
OR A
JP NZ,BEGIN1
LD A,(MSGDESC)
OR A
JP Z,NOFOR
BEGIN1: CALL ILPRTB
DB '(S to Pause - C K or X Abort - ? for Help)'
DB CR,LF,LF,0
LD A,8
LD (LINCNT),A
;
; See if user wants file displayed 'nonstop' ($N)
;
LD A,(TBUF) ; Number of bytes in command tail
OR A ; Were there any?
LD (SHOWALL),A ; Tell rest of program
JP Z,OPNFIL ; Just go display the file if not
LD A,(FCB+1) ; Get first character on command line
CP '$' ; Must specify '$' first for pause disabling
JP NZ,CKHLP ; Nope, continue normal
LD A,(FCB+2) ; Get second character on command line
CP 'N' ; 'N' for nonstop display?
JP NZ,CKHLP ; No
XOR A
LD (SHOWALL),A ; Disable string search
LD (PAGLEN),A ; Else disable page pauses
JP OPNFIL
;
; See if requesting help
;
CKHLP: LD A,(TBUF+2) ; Get character after space
CP '?' ; ??
JP NZ,SAVTAIL ; No, save command tail for comparison
LD A,(TBUF+3) ; Any more chracters?
OR A
JP Z,HELP ; No, so must want HELP
;
; Move command line buffer to internal buffer
;
SAVTAIL:LD HL,TBUF ; Point to command line buffer
LD B,(HL) ; Character count is first byte into 'B'
LD DE,CMDBUF ; Destination is internal buffer
INC HL ; Increment to ' ', next INC gets first chr
LD A,(HL) ; Get this character
CP ' ' ; Is it a space?
JR Z,SVTAIL1 ; Yes, leave things alone
DEC HL ; No, decrement pointer
SVTAIL1:INC HL ; Increment to next character
LD A,(HL) ; Into A
LD (DE),A ; Store in internal buffer
INC DE ; Increment pointer
DJNZ SVTAIL1 ; One less character on command line
;
; Open FOR file
;
OPNFIL: LD A,(USER) ; Get user area to find FOR file
CALL RECAR1 ; Log into it
LD A,(DRIVE) ; Get drive to find FOR file
CALL RECDR1 ; Log into it
LD HL,FILE ; Initialize internal FCB1
LD DE,FORNAM ; With FOR filename
CALL RENFCB
LD DE,FILE ; Internal FCB1 contains filename
LD C,OPEN ; Now attempt open
CALL BDOS
INC A ; Open successful?
LD HL,FORNAM ; Point to FOR filename for 'not found'
JP Z,NOFILE ; No, inform user and abort
;
; Read a 128 byte record into DBUF at end of program
;
XOR A
LD (FILE+12),A ; Start with first extent
LD (FILE+32),A ; And first record
LD DE,DBUF ; Destination buffer
;
RDRECD: PUSH DE ; Save current data buffer address
CALL RSDMA ; Reset DMA
LD C,READ ; Read next record
LD DE,FILE ; From FOR file
CALL BDOS
POP DE ; Get current DBUF address back
OR A ; Read successful?
JP NZ,RERROR ; No, go check EOF
LD HL,TBUF ; 128 byte buffer in page 0
WRDLP: LD A,(LINEND) ; At end of line?
OR A
JP Z,WDLP1 ; No
XOR A
LD (LINEND),A ; Else we aren't anymore
LD A,(HL) ; Get the character
AND 7FH ; Strip parity
CP '-' ; Start of next description?
JP NZ,WDLP1 ; No
LD A,3
LD (DE),A ; Stuff a break for beginning of last descrip
JP SEARCH
WDLP1: LD A,(HL) ; Get character
AND 7FH ; Strip high bit
CP DEL ; Rubout?
JP Z,NEXT ; Yes, ignore and get next character
CP EOF ; EOF - End of file marker?
JP Z,ENDFIL ; Yes, all done
LD B,A ; Save character for now
LD A,(SHOWALL) ; Looking for specified string?
OR A
LD A,B ; Get our character back now
JP NZ,WDLP2 ; Yes, just write to memory
CALL TYPE ; Output to console
EX AF,AF' ; Save flags (NZ=displaying to console)
LD A,0 ; A=0 disables pausing while checking abort
EX AF,AF' ; Save it for now, get character back
JP WDLP3 ; And see if at end of line
WDLP2: LD (DE),A ; Else writing to memory
INC DE ; Next buffer position
EX AF,AF' ; Save flags (Z=writing to memory)
LD A,1 ; A=1 enables puasing while checking abort
EX AF,AF' ; Save it for now, get character back
WDLP3: CP LF ; Are we at end of line?
JP NZ,NEXT ; No get next character
LD A,(SHOWALL) ; Get string search toggle
LD (LINEND),A ; If set, at end of line, and writng to memory
EX AF,AF' ; AF'=1 enable pauses, disable if 0
CALL CKABRT ; Check for user abort (and pauses if A=1)
NEXT: INC L ; One more byte
JP Z,RDRECD ; If no more get next record
JP WRDLP ; Else get next character
;
; Search for a match with search string
;
SEARCH: PUSH HL ; Save HL
LD HL,CMDBUF ; Point to buffer containing command tail
SEARC1: LD (CMDPTR),HL ; Save command tail buffer pointer
LD HL,DBUF ; Disk buffer with FOR text
SEARC2: LD DE,(CMDPTR) ; Get command tail buffer pointer again
PUSH HL ; Save it (command tail pointer still in DE)
SEARC3: LD A,(DE) ; Get a character
CP '\' ; Force LF?
JP NZ,SEARC4 ; No
LD A,LF ; Else LF value in A for comparison
SEARC4: INC DE ; Increment to next command tail character
OR A ; Anything there?
JP Z,SEARC8 ; No
CP '|' ; String seperator?
JP Z,SEARC8 ; Yes
LD B,A ; Save character for compare
LD A,(HL) ; Get a FOR text character in A
CALL UCASE ; Convert it to uppercase
SEARC5: LD C,A ; Put FOR text character in C for now
INC HL ; And increment to next one
LD A,B ; Get comparison character back (from CMDBUF)
CP '?' ; Accept any character?
JP Z,SEARC3 ; Yes, call it a match
CP C ; Else are they the same?
JP Z,SEARC3 ; Yes, call it a match
POP HL ; Else get FOR buffer address back
INC HL ; Increment to next character
LD B,0 ; Initialize count to 0
LD A,(HL) ; Get next character from FOR buffer
CP CTRLC ; Beginning of description entry?
JP Z,SEARC6 ; Yes
CP 4 ; End of file?
JP NZ,SEARC2 ; No
INC B ; Else, show we hit end of buffer
SEARC6: LD HL,(CMDPTR) ; Get command tail pointer back
SEARC7: LD A,(HL) ; Get character from saved command tail
INC HL ; Point to next one
CP '|' ; Searching for multiple strings?
JP Z,SEARC1 ; Yes, go search next one
OR A ; Else are we all done?
JP NZ,SEARC7 ; No, keep looking
LD A,B ; Else see if at end of buffer
OR A
JP NZ,ENDFL1 ; Yes
LD DE,DBUF+1
POP HL ; Get record count back
JP NEXT ; Go get next
SEARC8: POP HL
LD A,CR
CALL TYPE ; Output CR for end of line
LD HL,DBUF
SEARC9: LD A,(HL) ; Get character
CP CTRLC ; Start of description?
JP Z,SEARC10 ; Yes, go get next character
CP 4 ; End of file?
JP Z,ENDFL1 ; Yes
CALL TYPE ; Output character to console
CP LF ; At end of line?
LD A,0 ; Disable page pauses
CALL Z,CKABRT ; Check for aborts
INC HL ; Next character
JP SEARC9 ; Loop until a ^C or ^D
SEARC10:POP HL
LD DE,DBUF+1
JP NEXT ; Go get next byte
;
; The following routine displays the help guide to the user
;
HELP: CALL PRTABT
DB CR,LF
DB 'Usage examples:'
DB CR,LF
DB CR,LF,' FOR Show entire file'
DB CR,LF,' FOR $N Show entire file without paging'
DB CR,LF,' FOR ZMD All descriptions containing string ''ZMD'''
DB CR,LF,' FOR ZMD|LU ''|'' seperates multiple strings to search'
DB CR,LF,' FOR \ZMD ''\'' forces line feed and looks at filenames'
DB CR,LF,' FOR ZM? ''?'' matches any character in this position'
DB CR,LF,0
LD A,(INCLDU)
OR A
JP Z,HELP1
CALL PRTABT
DB ' FOR (B0:) Descriptions for files received on B0:',0
HELP1: CALL PRTABT
DB CR,LF,0
LD A,(DSTAMP)
OR A
JP Z,HELP4
LD A,(EDATE)
OR A
JP Z,HELP2
CALL PRTABT
DB ' FOR ??/12',0
JP HELP3
HELP2: CALL PRTABT
DB ' FOR 12/??',0
HELP3: CALL PRTABT
DB ' Show files received in month of December',0
HELP4: CALL ERXIT
DB CR,LF,LF,LF,LF,'$'
;
; Inline print routine checks for user abort on each line feed
;
PRTABT: POP HL ; Get address following CALL
AM1: LD A,(HL) ; Character in A
OR A ; Null terminator?
JP Z,AM2 ; Yes, all done
CALL TYPE ; Else output to console
CP LF ; Was it a LF?
LD A,0 ; Enable page pauses
CALL Z,CKABRT ; Check for user abort, or pause request
INC HL ; Point to next character
JP AM1 ; Loop until a null
AM2: PUSH HL ; Current address in HL=return address
RET
;
;
RERROR: CP 1
JP Z,ENDFIL
CALL ERXIT
DB '-- Source file read error$'
;
ENDFIL: LD A,(SHOWALL)
OR A
JP Z,ENDFL1
LD A,4
LD (DE),A
JP SEARCH
ENDFL1: LD C,CLOSE
LD DE,FILE
CALL BDOS
CALL ERXIT
DB CR
DB '-----'
DB CR,LF
DB '-- End of file --$'
;
; These next are dummy routines to satisfy external ZMDSUBS requests.
; They do nothing, but leave alone
;
DONE:: JP EXIT
TIME:: RET
LINEND: DB 0
SHOWALL:DB 0
CMDPTR: DW 0
END


233
Source/Apps/ZMD/zfors.z80

@ -0,0 +1,233 @@
;
TITLE ZFORS.Z80 - 09/29/88 - ZMD Sysop Description Utility
; Copyrighted (c) 1987, 1988
; Robert W. Kramer III
PAGE
;- -;
; Update History ;
; ;
; Date Release Comments ;
; -------- ------- ---------------------------------------------- ;
; ;
; 09/29/88 v1.50 - Added trivial routines to display the user's ;
; prompt selections to screen. ;
; 03/13/88 v1.49 - No changes made to this file ;
; 03/13/88 v1.48 - Had a small problem with TPA fix which has been ;
; corrected. CHKTPA was calculating the total ;
; number of bytes available for DBUF, but wasn't ;
; clearing register L (forcing an even amount of ;
; sectors before initializing OUTSIZ buffer limit ;
; comparison word). This may have introduced ;
; minimal garbage to your FOR file if your FOR ;
; file is large enough to fill available TPA with ;
; ZMD, ZFORS or to the log file if running ZMDEL. ;
; - Rewrote OUTCHR routine in ZMDSUBS. ;
; - Redefined buffer table at end of programs. STACK;
; and filename buffers now EQUated with offsets ;
; from the last switch/toggle in program instead ;
; of with DS directive. ;
; - Some systems which do NOT have an interrupt ;
; driven keyboard may have noticed problems when ;
; an invalid key was entered in the ZNEWP, ZFORP ;
; and ZMDEL programs. In ZNEWP and ZFORP, if a ;
; CR was entered to pause the output, output was ;
; limited to one line at a time per key pressed. ;
; If an invalid key was hit, output would have ;
; remained in a paused state until one of the ;
; abort keys were pressed. This was difficult to ;
; find since my keyboard is interrupt driven and ;
; I could not duplicate the problem on my own ;
; system. ;
; 02/25/88 v1.47 - No change(s) made to this file
; 01/27/88 v1.46 - Set MODE to 255 so ZMDSUBS knows we might be ;
; running in local mode and not to worry if BYE ;
; is running or not when CHKENV checks to see ;
; which clock features are valid. ;
; 01/17/88 v1.45 - First public release ;
; 12/06/87 v1.02 - Fixed numerous trivial bugs. ;
;- -;
;-------------------------------------------------------------------------;
; EXTERNAL Declarations: |
;-------------------------------------------------------------------------;
EXTRN CLRLIN,DECOUT,DSCFLG,ERXIT,EXIT,FILCNT,GETDAT
EXTRN GETDSC,GETFN,GETKIND,ILPRTB,INPUT,NEWNAM,OLDDRV
EXTRN OLDUSR,OPNFOR,PRINTV,RECAR1,SHOCAT,STACK,TYPE
EXTRN UCASE,NOFOR,MODE
;
;-------------------------------------------------------------------------;
; Program Starts Here |
;-------------------------------------------------------------------------;
.Z80
ASEG
ORG 100H ; Program starts
JP BEGIN ; Jump around configuration table
INCLUDE ZMDHDR.Z80 ; Include the ZMD header overlay
.REQUEST ZMDSUBS ; Include the ZMD subroutines
;
;
; Save CP/M stack, initialize new one for this program
;
BEGIN: LD (STACK),SP ; Save return address to CCP
LD SP,STACK ; Initialize new one for this program
;
; Save current drive/user
;
LD A,255 ; Get current user
CALL RECAR1
LD (OLDUSR),A ; Store it
LD C,CURDRV ; Get current drive
CALL BDOS
LD (OLDDRV),A ; Store it
;
; Disable sleepy caller timeout and set description routines for up to
; 50 new entries
;
XOR A
LD (DESWAIT),A ; Disable sleepy caller timer
LD A,50
LD (FILCNT),A ; Allow up to 50 descriptions
LD A,255
LD (MODE),A ; Tell ZMDSUBS we're a sysop utility
;
; Display program name and version
;
BEGIN1: LD HL,SYSFOR ; Point to name of this program
CALL PRINTV ; Display it
LD A,(DESCRIB) ; Regular FOR descriptions?
OR A
JP NZ,MAKDESC ; Yes, skip next
LD A,(MSGDESC) ; BBS message base descriptions?
OR A
JP Z,NOFOR ; No, descriptions disabled
LD A,1
LD (DSCFLG),A ; Set flag to show message base descriptions
LD A,(PRUSR) ; Get the private user
LD (USER),A ; FOR destination
LD A,(PRDRV) ; Get the private drive
LD (DRIVE),A ; FOR destination
JP MAKFN ; Skip date stuff
;
; Get the date of the upload if suppose to.
;
MAKDESC:LD A,(DSTAMP) ; Datestamping description header?
OR A
JP Z,MAKFN ; No, go get filename
CALL ILPRTB
DB 'Date of upload: ',0
CALL GETDAT ; Get the date
;
; Get the filename (no spaces with '.' filename seperator)
;
MAKFN: CALL ILPRTB
DB CR,LF
DB ' Name of file: ',0
CALL GETFN ; Get filename
CALL CLRLIN ; Clear current line
LD A,B ; Get filename bytes remaining count in A
CP 11 ; Anything entered?
JP NZ,GOTNM1 ; Yes, skip this
;
; No filename was entered, check for save or abort, else continue
;
CALL ILPRTB
DB 'Save, Continue, Abort: ',0
CALL INPUT ; Get character
CALL UCASE ; Convert to uppercase
CP 'S' ; Save changes?
JP Z,OPNFOR ; Yes, write current buffer to FOR file
CP 'A' ; Abort program?
JP NZ,BEGIN1 ; No, get next character
CALL ILPRTB
DB CR
DB 'Abort with NO changes? ',0
CALL INPUT
CALL UCASE
CP 'Y'
JP NZ,BEGIN1
JP EXIT ; Then abort
;
; Display file descriptor/upload areas and get choice
;
GOTNM1: CALL GETKIND ; Get file category for description header
;
; Show the drive/user
;
LD A,(MSGDESC) ; Using BBS message base for descriptions?
OR A
JP NZ,SHOWDU ; Yes, show drive/user of uploaded file
LD A,(INCLDU) ; Include du in description header?
OR A
JP Z,SHOWFN ; No, then skip this stuff
SHOWDU: LD A,(DRV) ; Get upload drive
CALL TYPE ; Output to console
LD A,(USR) ; Get upload user area
LD H,0
LD L,A ; In A
CALL DECOUT ; Decimal output routine
LD A,':' ; Output colon
CALL TYPE
;
; Show the filename
;
SHOWFN: LD HL,NEWNAM
SHONM1: LD A,(HL)
CP LF
JP Z,SHOWCT
CALL TYPE
INC HL
JP SHONM1
;
; Show the file descriptor/upload area
;
SHOWCT: LD A,(ASKIND) ; Supposed to be showing file descriptor?
OR A
JP Z,MKENTRY ; No, get the description
CALL ILPRTB
DB ' - ',0
CALL SHOCAT ; If so, show it
;
; Get up to 7 lines for description
;
MKENTRY:CALL GETDSC ; Get up to 7 lines for description
JP NZ,BEGIN1 ; If none entered, or incorrect, skip next
LD IY,FILCNT ; Else point to maximum entries left
DEC (IY) ; One less to go
JP BEGIN1 ; Get next one
;
; These next are dummy routines to satisfy ZMDSUBS external requests.
; They do nothing, but leave them alone.
;
DONE:: JP EXIT ; Exit routine can take care of us
TIME:: RET
END


268
Source/Apps/ZMD/zmap.z80

@ -0,0 +1,268 @@
;
TITLE ZMAP.Z80 - 09/29/88 - ZMD System MAP Utility
; Copyrighted (c) 1988
; Robert W. Kramer III
PAGE
;- -;
; Update History ;
; ;
; Date Release Comments ;
; -------- ------- ---------------------------------------------- ;
; ;
; 09/29/88 v1.50 - Initial release ;
;- -;
;-------------------------------------------------------------------------;
; EXTERNAL Declarations: |
;-------------------------------------------------------------------------;
EXTRN EXIT,ILPRTB,OLDDRV,OLDUSR,PRINTV,RECAR1,STACK,TYPE
EXTRN KIND,CATADR,SHONM4,WHLCHK,DECOUT
;
;-------------------------------------------------------------------------;
; Program Starts Here |
;-------------------------------------------------------------------------;
.Z80
ASEG
ORG 100H ; Program starts
JP BEGIN ; Jump around configuration table
INCLUDE ZMDHDR.Z80 ; Include the ZMD header overlay
.REQUEST ZMDSUBS ; Include the ZMD subroutines
;
;
; Save CP/M stack, initialize new one for this program
;
BEGIN: LD (STACK),SP ; Save return address to CCP
LD SP,STACK ; Initialize new one for this program
;
; Save current drive/user
;
LD A,255 ; Get current user
CALL RECAR1
LD (OLDUSR),A ; Store it
LD C,CURDRV ; Get current drive
CALL BDOS
LD (OLDDRV),A ; Store it
;
;
; Display program name and version
;
BEGIN1: LD HL,MAPNAM ; Point to name of this program
CALL PRINTV ; Display it
LD A,(ASKAREA)
OR A
JP Z,NOTDEF ; Upload areas not enabled, Abort
CALL WHLCHK
JP Z,BEGIN2
LD A,1
LD (SPECIAL),A
BEGIN2: CALL HBORD
LD A,'A'
LD (KIND),A
LD A,(MAXTYP)
RRA
PUSH AF
LD A,(MAXTYP)
SUB A,'A'
RRA
LD C,A
POP AF
JP NC,NOTODD
LD A,1
LD (ISODD),A
NOTODD: INC C
LD A,'A'
ADD A,C
LD C,A ; C contains letter of 2nd column descriptors
LD A,(MAXTYP)
SUB A,'@'
LD B,A ; B contains binary number of descriptors
LD DE,DESTBL ; DE contains address to 26 byte table
LD A,C
EX AF,AF'
LD A,'A' ; Initialize first entry
SETLP: LD (DE),A
INC DE
INC A
EX AF,AF'
DJNZ SETLP
LD A,0
LD (DE),A ; Stuff terminator for display routines
;
; Main program loop
;
LOOP: LD A,(COLM)
OR A
JP NZ,DOCOL2
CALL ILPRTB
DB ' | ',0
JP ATEND
DOCOL2: CALL ILPRTB
DB ' || ',0
ATEND: CALL SHOWFD
CALL SHOWDU
LD A,(COLM)
OR A
JP Z,ATEND1
CALL ILPRTB
DB ' |'
DB CR,LF,0
XOR A
JP ATEND2
ATEND1: LD A,1
ATEND2: LD (COLM),A
LD HL,(TBLSAV)
INC HL
LD (TBLSAV),HL
LD A,(HL)
LD (KIND),A
OR A
JP NZ,LOOP
LD A,(ISODD)
OR A
JP Z,ISDN1
ISDONE: CALL ILPRTB
DB ' || ',0
LD A,(SPECIAL)
OR A
JP Z,IS1
CALL ILPRTB
DB ' ',0
IS1: CALL ILPRTB
DB ' |',CR,LF,0
ISDN1: CALL HBORD
CALL ILPRTB
DB CR,LF
DB ' Use FOR/NEW to view recent upload description/log listings.'
DB 0
JP EXIT
;
;
SHOWDU: LD A,(KIND)
SUB 'A'
RLA
RLA
LD D,0
LD E,A
LD IY,TYPTBL
ADD IY,DE
LD A,(IY)
CALL TYPE
LD A,(IY+1)
CALL SHODU1
CALL ILPRTB
DB ' ',0
LD A,(SPECIAL)
OR A
RET Z
LD A,(IY+2)
CALL TYPE
LD A,(IY+3)
SHODU1: CP 10
PUSH AF
LD H,0
LD L,A
CALL DECOUT
CALL ILPRTB
DB ':',0
POP AF
RET C
CALL ILPRTB
DB ' ',0
RET
;
;
SHOWFD: CALL CATADR
INC DE
INC DE
LD B,23
SHOFD1: LD A,(DE)
CALL TYPE
INC DE
DJNZ SHOFD1
CALL ILPRTB
DB ' ',0
RET
;
; Show horizontal border for top and bottom
;
HBORD: CALL ILPRTB
DB ' ================================================================',0
LD A,(SPECIAL)
OR A
JP Z,HBORD1
CALL ILPRTB
DB '==========',0
HBORD1: CALL ILPRTB
DB CR,LF,0
RET
NOTDEF: CALL ILPRTB
DB CR,LF
DB 'ZMD Upload Routing feature not enabled, ',0
LD HL,MAPNAM
CALL SHONM4
CALL ILPRTB
DB 'aborting...',0
JP EXIT
;
; These next are dummy routines to satisfy ZMDSUBS external requests.
; They do nothing, but leave them alone.
;
DONE:: JP EXIT ; Exit routine can take care of us
TIME:: RET
TBLSAV: DW DESTBL
DESTBL: DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ISODD: DB 0
COUNT: DB 0
COLM: DB 0
SPECIAL:DB 0
END


BIN
Source/Apps/ZMD/zmd.pdf

Binary file not shown.

1144
Source/Apps/ZMD/zmd.ws

File diff suppressed because it is too large

4858
Source/Apps/ZMD/zmd.z80

File diff suppressed because it is too large

264
Source/Apps/ZMD/zmdel.z80

@ -0,0 +1,264 @@
;
TITLE ZMDEL.Z80 - 09/29/88 - ZMD Sysop Transfer Log Purge Utility
; Copyrighted (c) 1987, 1988
; Robert W. Kramer III
PAGE
;- -;
; Update History ;
; ;
; Date Release Comments ;
; -------- ------- ---------------------------------------------- ;
; ;
; 09/29/88 v1.50 - No change(s) made to this file ;
; 03/18/88 v1.49 - No change(s) made to this file ;
; 03/13/88 v1.48 - Had a small problem with TPA fix which has been ;
; corrected. CHKTPA was calculating the total ;
; number of bytes available for DBUF, but wasn't ;
; clearing register L (forcing an even amount of ;
; sectors before initializing OUTSIZ buffer limit ;
; comparison word). This may have introduced ;
; minimal garbage to your FOR file if your FOR ;
; file is large enough to fill available TPA with ;
; ZMD, ZFORS or to the log file if running ZMDEL. ;
; - Rewrote OUTCHR routine in ZMDSUBS. ;
; - Redefined buffer table at end of programs. STACK;
; and filename buffers now EQUated with offsets ;
; from the last switch/toggle in program instead ;
; of with DS directive. ;
; - Some systems which do NOT have an interrupt ;
; driven keyboard may have noticed problems when ;
; an invalid key was entered in the ZNEWP, ZFORP ;
; and ZMDEL programs. In ZNEWP and ZFORP, if a ;
; CR was entered to pause the output, output was ;
; limited to one line at a time per key pressed. ;
; If an invalid key was hit, output would have ;
; remained in a paused state until one of the ;
; abort keys were pressed. This was difficult to ;
; find since my keyboard is interrupt driven and ;
; I could not duplicate the problem on my own ;
; system. ;
; 02/25/88 v1.47 - Fixed line count display routine. Number of ;
; lines read was being improperly decremented ;
; before displaying. Same fix included removing ;
; code that added an extra CR,LF to the beginning ;
; of the file. Count is now right. ;
; 01/27/88 v1.46 - Some changes were made to the ZMDSUBS file that ;
; are not directly related to this file ;
; 01/17/88 v1.45 - First public release ;
; 11/20/87 v1.00 - Initial version ;
;- -;
;-------------------------------------------------------------------------;
; EXTERNAL Declarations: |
;-------------------------------------------------------------------------;
EXTRN CKABRT,CLEARIT,CLRLIN,DBUF,DECOUT,ERXIT,EXIT,ILPRTB
EXTRN INPUT,NOFILE,NOLOG,NOROOM,OLDDRV,OLDUSR,OUTCHR,PRINTV
EXTRN RECAR1,RECDR1,RENFCB,RERROR,RSDMA,SHONM4,STACK,STDMA
EXTRN TDONE,TYPE,UCASE
;
;-------------------------------------------------------------------------;
; Program Starts Here |
;-------------------------------------------------------------------------;
.Z80
ASEG
ORG 100H ; Program starts
JP BEGIN ; Jump around configuration table
INCLUDE ZMDHDR.Z80 ; Include the ZMD header overlay
.REQUEST ZMDSUBS ; Include the ZMD subroutines
;
;
; Save CP/M stack, initialize new one for this program
;
BEGIN: LD (STACK),SP ; Save return address to CCP
LD SP,STACK
;
; Save current drive/user
;
LD A,255 ; Get user function
CALL RECAR1
LD (OLDUSR),A ; Save user area for later
LD C,CURDRV ; Get current drive function
CALL BDOS
LD (OLDDRV),A ; Save drive for later
;
; Tell em who we are and ask if they want to continue
;
LD HL,PRGUTL
CALL PRINTV
LD A,(LOGCAL) ; Log file enabled?
OR A
JP Z,NOLOG ; No, then don't run program
CALL ILPRTB
DB 'Purge all except "R" entries from log? ',0
LD A,0
LD (DESWAIT),A ; Disable sleepy caller timout
CALL INPUT
CALL UCASE
CP 'Y' ; Continue?
JP NZ,EXIT ; No, exit to CP/M
CALL CLRLIN
;
; Now log into drive/user area of ZMD.LOG
;
LD A,(LOGUSR) ; Get user area to find ZMD.LOG file
CALL RECAR1
LD A,(LOGDRV) ; Get drive to find ZMD.LOG file
CALL RECDR1
;
; Open the 'ZMD .LOG' file
;
LD DE,LOGNAM ; Point to LOG filename
LD HL,FILE ; Destination is internal FCB1
CALL RENFCB ; Initialize FCB
LD DE,FILE ; Point to ZMD.LOG FCB
LD C,OPEN ; Open file
CALL BDOS
INC A ; Does file exist?
LD HL,LOGNAM ; Point to log filename
JP Z,NOFILE ; No, inform user and abort to CP/M
;
; Open the ' .$$$' file
;
LD DE,TEMPFIL ; Point to temporary filename
LD HL,DEST ; Destination is internal FCB2
CALL RENFCB ; Initialize FCB
LD HL,FILE ; Point to default FCB
LD DE,DEST ;
LD BC,9 ; Move drive and filename bytes
LDIR
LD C,DELETE ; Delete possible '$$$' temporary file
LD DE,DEST
CALL BDOS
LD C,MAKE ; And make new one for this session
LD DE,DEST
CALL BDOS
INC A ; Successful create?
JP Z,NOROOM ; No, inform user and exit to CP/M
CALL ILPRTB ; Warn them of the wait
DB CR
DB 'Cleaning ',0
LD HL,LOGNAM
CALL SHONM4
RDRECD: CALL RSDMA ; Reset DMA
LD DE,FILE ; Read a record from ZMD.LOG
LD C,READ
CALL BDOS
OR A ; Read ok?
JP NZ,RERROR ; No, inform user and exit
LD HL,TBUF ; Point to first character in read buffer
GETBYT: LD A,(HL) ; Get a byte from read buffer
AND 7FH ; Strip parity bit
CP 7FH ; Del (Rubout)
JP Z,NEXT ; Yes, ignore it
CP EOF ; End of file marker
JP Z,TDONE ; Transfer done. Close and exit
LD B,A ; Save character
CP LF ; Was it a line feed?
JP Z,NEWLIN ; Yes toggle line counters, start new line
;
; LOGMODE is set to 0 everytime a line feed is encountered. If LOGMODE is
; is 0 at this point, the current byte is anylized as this log entry's
; mode of transfer. Only entries made in the 'R' receive mode are written
; to the new ZMD.$$$ file. Encountering an 'R' when LOGMODE is 0 causes
; KEEPER to be set non zero
;
LD A,(LOGMODE) ; Start of new line?
OR A
JP NZ,NXTBYT ; No, then we don't care what this byte is
INC A
LD (LOGMODE),A ; Else show we are not on LOGMODE byte anymore
LD A,B ; Get the character back
CP 'R' ; Is this an upload entry?
LD (KEEPER),A ; Indicate saving byte just in case
JP Z,NXTBYT ; Yes, leave KEEPER non-zero so it's written
XOR A
LD (KEEPER),A ; Else 0 keep flag (0=don't keep this entry)
NXTBYT: LD A,(KEEPER) ; Keeping this log entry?
OR A
JP Z,NEXT ; No, get next byte
;
; Place current byte in buffer and write to disk if buffer full
;
WRTBYT: LD A,B
CALL OUTCHR
NEXT: INC L ; Done with sector?
JP Z,RDRECD ; Yes, get another sector
JP GETBYT ; Else get another byte
NEWLIN: XOR A ; Zero accumulator
LD (LOGMODE),A ; Show current byte is log mode byte
LD IY,(LNSREAD) ; Get lines read counter
INC IY ; Add one more
LD (LNSREAD),IY
LD A,1 ; Disable page pauses
CALL CKABRT ; User abort?
LD A,(KEEPER) ; Are we keeping this entry?
OR A
JP Z,NEXT ; No, read another byte
LD IY,(LNSWROT) ; Get lines written count
INC IY ; Add one more
LD (LNSWROT),IY
JP WRTBYT
;
DONE:: CALL CLRLIN
CALL ILPRTB
DB CR,'Finished.'
DB CR,LF
DB ' ',0
LD HL,(LNSREAD)
CALL DECOUT
CALL ILPRTB
DB TAB
DB 'original lines',CR,LF
DB ' ',0
LD HL,(LNSWROT)
CALL DECOUT
CALL ILPRTB
DB TAB
DB 'retained lines ',0
JP EXIT
;
; These next are dummy routines to satisfy external ZMDSUBS requests.
; They do nothing, but leave alone.
;
TIME:: RET
KEEPER: DB 0
LOGMODE:DB 0
LNSREAD:DW 0
LNSWROT:DW 0
END


916
Source/Apps/ZMD/zmdhb.z80

@ -0,0 +1,916 @@
;=======================================================================
;
; XMHB.Z80 - XMODEM12 PATCH FILE FOR ROMWBW HBIOS
;
; Wayne Warthen - wwarthen@gmail.com
;
; 2020-05-23 WBW Rewrite for HBIOS FastPath(tm)
;
;=======================================================================
;
ASEG
;
BASE EQU 100H ; Start of CP/M normal program area
FCB EQU 005CH ; System FCB
;
BDOS EQU 0005H ; BDOS function dispatch vector
;
;=======================================================================
;
; Jump table: The jump table must be in exactly the same sequence as the
; one in ZMD.
;
ORG 0580H ; ZMD I/O overlay address
;
JP CONOUT ; must be 00000h if not used, see below
JP MINIT ; initialization routine (if needed)
JP UNINIT ; undo whatever 'MINIT' did (or return)
JPTBL:
JP SENDR ; send character (via pop psw)
JP CAROK ; test for carrier
;JP MDIN ; receive data byte (not present in ZMD)
JP GETCHR ; get character from modem
JP RCVRDY ; check receive ready
JP SNDRDY ; check send ready
JP SPEED ; get speed value for file transfer time
JP EXTRA1 ; extra for custom routine
JP EXTRA2 ; extra for custom routine
JP EXTRA3 ; extra for custom routine
;
ORG 0600H
;
; ZMD expects to find a byte with the baud rate code somewhere. For
; lack of a better location, we put it at 0600H. The highest baud
; rate code understood by ZMD is 9 which means 19200 baud. We just
; use that since we are almost certainly running faster than this.
;
BAUDCD DB 9 ; Baud rate storage
;
;-----------------------------------------------------------------------
;
; Output character to console
;
; This is intended to write file transfer progress to a RCPM
; BBS console. It is stubbed out because it will write to the
; active file transfer port when not using an RCPM.
;
CONOUT:
RET
;
;-----------------------------------------------------------------------
;
; Initialize modem
;
; This procedure has been usurped to dynamically detect the type
; of system we are running on and install the *real* jump table
; entries as appropriate.
;
MINIT:
;
; Scan the command line for a number. If found, this is used
; as the HBIOS unit number.
;
LD HL,FCB+1 ; Start after drive byte
LD B,8 ; Check 8 characters
MINIT1:
LD A,(HL) ; Get character
CP '0' ; Start of numerics
JR C,MINIT2 ; If below '0', continue scan
CP '9' ; Last numeric
JR NC,MINIT2 ; If above '9', continue scan
SUB '0' ; Got it, convert to binary
LD (UNIT),A ; Save it
LD A,' ' ; Space character to accum
LD (HL),A ; Remove numberic from FCB
JR MINIT3 ; Proceed with initialization
MINIT2:
INC HL
DJNZ MINIT1
MINIT3:
; Announce
LD DE,TAG ; Tagline
LD C,9 ; BDOS string display function
CALL BDOS ; Do it
;
; Identify BIOS (RomWBW HBIOS or UNA UBIOS)
CALL IDBIO ; 1=HBIOS, 2=UBIOS
LD (BIOID),A ; Save it
DEC A ; Test for HBIOS
JR Z,MINIT_HB ; Do HBIOS setup
DEC A ; Test for UBIOS
JR Z,MINIT_UB ; Do UBIOS setup
;
; Neither UNA nor RomWBW
LD DE,ERR_BIO ; BIOS error message
JP FAIL ; Print msg and bail out
;
MINIT_HB:
; Display RomWBW notification string
LD DE,HB_TAG ; BIOS notification string
LD C,9 ; BDOS string display function
CALL BDOS ; Do it
;
; Get CPU speed from RomWBW HBIOS and save it
LD B,0F8H ; HBIOS SYSGET function 0xF8
LD C,0F0H ; CPUINFO subfunction 0xF0
RST 08 ; Do it, L := CPU speed in MHz
LD A,L ; Move it to A
LD (CPUSPD),A ; Save it
;
; Get HBIOS bank id
LD BC,0F8F2H ; HBIOS SYSGET, Bank Info
RST 08 ; do it
JP NZ,APIERR ; handle API error
LD A,D ; BIOS bank id to A
LD (BIOSBID),A ; save it
;
LD A,(UNIT) ; get current unit specified
CP 0FFH ; check for undefined
JR NZ,MINIT_HB1 ; if not undefined, go ahead
;
; Lookup current console to use as default for transfer
LD B,0FAH ; HBIOS PEEK
LD A,(BIOSBID) ; get BIOS bank id
LD D,A ; ... and put in D
LD HL,100H + 12H ; HCB console unit address
RST 08 ; E := value
LD A,E ; put in A
LD (UNIT),A ; replace UNIT with console UNIT
;
MINIT_HB1:
; Get HBIOS device type
LD B,06H ; HBIOS DEVICE function 0x06
LD A,(UNIT) ; Get xfer unit
LD C,A ; Put in C
RST 08 ; Do it, D=device type
LD A,D ; Put result in A
CP 00H ; UART?
JP Z,MINIT_HB2 ; If so, do UART H/W init
CP 80H ; USB-FIFO?
JP Z,UF_INIT ; If so, do USB-FIFO H/W init
JP HB_INIT ; Otherwise, use BIOS I/O
;
MINIT_HB2:
; Handle UART driver special. If receive interrupts active,
; we must use BIOS I/O. Otherwise, direct UART I/O is best
LD B,06H ; Serial device function
LD A,(UNIT) ; Get xfer unit
LD C,A ; Put in C
RST 08 ; Do it, H = UART TYPE
BIT 7,H ; Check for interrupt driven receive
JP Z,UA_INIT ; If not, do direct UART I/O
JP HB_INIT ; else use BIOS I/O
;
MINIT_UB:
; Display UNA notification string
LD DE,UB_TAG ; BIOS notification string
LD C,9 ; BDOS string display function
CALL BDOS ; Do it
;
; Get CPU speed from UNA and save it
LD C,0F8H ; UNA BIOS Get PHI function
RST 08 ; Returns speed in Hz in DE:HL
LD B,4 ; Divide MHz in DE:HL by 100000H
MINIT_UB1:
SRL D ; ... to get approx CPU speed in
RR E ; ...MHz. Throw away HL, and
DJNZ MINIT_UB1 ; ...right shift DE by 4.
INC E ; Fix up for value truncation
LD A,E ; Put in A
LD (CPUSPD),A ; Save it
;
JP UB_INIT ; UNA BIOS init
;
MINIT_RET:
PUSH HL ; Save HL (JP table adr)
; Display handler label
LD C,9 ; BDOS string display function
CALL BDOS ; Do it
;
; Display port (unit number)
LD DE,COM_LBL ; Prefix
LD C,9 ; BDOS string display function
CALL BDOS ; Do it
LD A,(UNIT) ; Get unit number
ADD A,'0' ; Make displayable
LD E,A ; Put in E for display
LD C,2 ; BDOS console write char
CALL BDOS ; Do it
;
; Newline
LD C,9 ; BDOS string display function
LD DE,CRLF ; Newline
CALL BDOS ; Do it
;
; Copy real vectors into active jump table
POP HL ; Recover HL
LD DE,JPTBL ; Real jump table is destination
LD BC,7 * 3 ; Copy 7 3-byte entries
LDIR ; Do the copy
;
; Return with CPU speed in A
LD A,(CPUSPD) ; A := CPU speed in MHz
LD HL,(RCVSCL) ; HL := receive scalar
RET ; and return
;
;-----------------------------------------------------------------------
;
; Uninitialize modem
;
UNINIT:
LD A,(BIOID)
CP 1 ; Is HBIOS?
JR Z,HUNINIT ; Handle HBIOS
CP 2 ; Is UBIOS?
JR Z,UUNINIT ; Handle UBIOS
RET ; Just return
;
HUNINIT:
; HBIOS: Reset character device 0
LD B,04H ; HBIOS CIOINIT function 0x04
LD A,(UNIT) ; HBIOS serial unit number
LD C,A ; Put in C for func call
LD DE,-1 ; Reset w/ current settings
RST 08 ; Do it
RET ; not initialized, so no 'UN-INITIALIZE'
;
UUNINIT:
; UBIOS: Reset character device 0
LD C,10H ; UNA INIT function 0x10
LD A,(UNIT) ; UBIOS serial unit number
LD B,A ; Put in B for func call
LD DE,-1 ; Reset w/ current settings
RST 08 ; Do it
RET ; not initialized, so no 'UN-INITIALIZE'
;
; Identify active BIOS. RomWBW HBIOS=1, UNA UBIOS=2, else 0
;
IDBIO:
;
; Check for UNA (UBIOS)
LD A,(0FFFDH) ; fixed location of UNA API vector
CP 0C3H ; jp instruction?
JR NZ,IDBIO1 ; if not, not UNA
LD HL,(0FFFEH) ; get jp address
LD A,(HL) ; get byte at target address
CP 0FDH ; first byte of UNA push ix instruction
JR NZ,IDBIO1 ; if not, not UNA
INC HL ; point to next byte
LD A,(HL) ; get next byte
CP 0E5H ; second byte of UNA push ix instruction
JR NZ,IDBIO1 ; if not, not UNA, check others
LD A,2 ; UNA BIOS id = 2
RET ; and done
;
IDBIO1:
; Check for RomWBW (HBIOS)
LD HL,(0FFFEH) ; HL := HBIOS ident location
LD A,'W' ; First byte of ident
CP (HL) ; Compare
JR NZ,IDBIO2 ; Not HBIOS
INC HL ; Next byte of ident
LD A,~'W' ; Second byte of ident
CP (HL) ; Compare
JR NZ,IDBIO2 ; Not HBIOS
LD A,1 ; HBIOS BIOS id = 1
RET ; and done
;
IDBIO2:
; No idea what this is
XOR A ; Setup return value of 0
RET ; and done
;
HWERR:
; Failed to identify target comm hardware
LD DE,ERR_HW ; Hardware error message
JP FAIL ; Print message and bail out
;
APIERR:
; API returned unepected failure
LD DE,ERR_API ; API error message
JP FAIL ; Pprint message and bail out
;
FAIL:
; DE has error string address
LD C,9 ; BDOS string display function
CALL BDOS ; Do it
JP 0 ; Bail out!
;
;-----------------------------------------------------------------------
;
; The following are all dummy routines that are unused because MINIT
; dynamically installs the real jump table.
;
SENDR:
CAROK:
MDIN:
GETCHR:
RCVRDY:
SNDRDY:
SPEED:
EXTRA1:
EXTRA2:
EXTRA3:
RET
;
BIOID DB 0 ; BIOS ID, 1=HBIOS, 2=UBIOS
CPUSPD DB 10 ; CPU speed in MHz
RCVSCL DW 6600 ; RECV loop timeout scalar
UNIT DB 0FFH ; BIOS serial device unit number
BIOSBID DB 00H ; BIOS bank id
;
TAG DB "RomWBW, 30-May-2020$"
;
HB_LBL DB ", HBIOS FastPath$"
UB_LBL DB ", UNA UBIOS$"
UA_LBL DB ", UART$"
UF_LBL DB ", USB-FIFO$"
COM_LBL DB " on COM$"
;
UB_TAG DB " [UNA]$"
HB_TAG DB " [WBW]$"
;
CRLF DB 13, 10, "$"
;
ERR_BIO DB 13, 10, 13, 10, "++ Unknown BIOS ++", 13, 10, "$"
ERR_HW DB 13, 10, 13, 10, "++ Unknown Hardware ++", 13, 10, "$"
ERR_API DB 13, 10, 13, 10, "++ BIOS API Error ++", 13, 10, "$"
;
;=======================================================================
;=======================================================================
;
; RomWBW HBIOS Interface
;
;=======================================================================
;=======================================================================
;
; Following jump table is dynamically patched over initial jump
; table at program startup. See MINIT above. Note that only a
; subset of the jump table is overlaid (SENDR to SPEED).
;
HB_JPTBL:
JP HB_SENDR ; send character (via pop psw)
JP HB_CAROK ; test for carrier
;JP HB_MDIN ; receive data byte (not present in ZMD)
JP HB_GETCHR ; get character from modem
JP HB_RCVRDY ; check receive ready
JP HB_SNDRDY ; check send ready
JP HB_SPEED ; get speed value for file transfer time
;
;-----------------------------------------------------------------------
;
; HBIOS initialization
;
HB_INIT:
LD HL,2150 ; Smaller receive loop timeout scalar
LD (RCVSCL),HL ; ... to compensate for BIOS overhead
;
; Patch SENDR w/ FastPath addresses
LD BC,0F801H ; Get CIO func/data adr
LD D,01H ; Func=CIO OUT
LD A,(UNIT) ; get desired char unit
LD E,A ; and put in E
RST 08
JP NZ,APIERR ; handle API error
LD (HB_UDAT),DE ; Plug in data adr
LD (HB_SCFN),HL ; Plug in func adr
;
; Patch GETCHR/MDIN w/ FastPath addresses
LD BC,0F801H ; Get CIO func/data adr
LD D,00H ; Func=CIO IN
LD A,(UNIT) ; get desired char unit
LD E,A ; and put in E
RST 08
JP NZ,APIERR ; handle API error
LD (HB_GCFN),HL ; Plug in func adr
;
; Patch RCVRDY w/ FastPath addresses
LD BC,0F801H ; Get CIO func/data adr
LD D,02H ; Func=CIO IST
LD A,(UNIT) ; get desired char unit
LD E,A ; and put in E
RST 08
JP NZ,APIERR ; handle API error
LD (HB_RRFN),HL ; Plug in func adr
;
; Patch SNDRDY w/ FastPath addresses
LD BC,0F801H ; Get CIO func/data adr
LD D,03H ; Func=CIO OST
LD A,(UNIT) ; get desired char unit
LD E,A ; and put in E
RST 08
JP NZ,APIERR ; handle API error
LD (HB_SRFN),HL ; Plug in func adr
;
; Claim 1 MHz CPU to offset overhead of HBIOS
LD A,1
LD (CPUSPD),A ; Save it
;
LD HL,HB_JPTBL
LD DE,HB_LBL
JP MINIT_RET
;
;-----------------------------------------------------------------------
;
; Send character on top of stack
;
HB_SENDR:
POP AF ; get character to send from stack
PUSH BC
PUSH DE
PUSH HL
LD E,A ; character to E
LD IY,(HB_UDAT)
LD A,(BIOSBID) ; call into HBIOS bank
LD IX,0000H
HB_SCFN EQU $-2
CALL 0FFF9H ; HBIOS bank call
POP HL
POP DE
POP BC
RET
;
;-----------------------------------------------------------------------
;
; Test and report carrier status, Z set if carrier present
;
HB_CAROK:
XOR A ; not used, always indicate present
RET
;
;-----------------------------------------------------------------------
;
; Get a character
;
; GETCHR must not block
;
HB_GETCHR:
CALL HB_RCVRDY
RET NZ
; Fall thru if char ready
;
; MDIN can assume a character is ready
;
HB_MDIN:
PUSH BC
PUSH DE
PUSH HL
LD IY,(HB_UDAT)
LD A,(BIOSBID) ; call into HBIOS bank
LD IX,0000H
HB_GCFN EQU $-2
CALL 0FFF9H ; HBIOS bank call
LD A,E ; byte received to A
POP HL
POP DE
POP BC
RET
;
;-----------------------------------------------------------------------
;
; Test for character ready to receive, Z = ready
; Error code returned in A register
; *** Error code does not seem to be used ***
;
HB_RCVRDY:
PUSH BC
PUSH DE
PUSH HL
LD IY,(HB_UDAT)
LD A,(BIOSBID) ; call into HBIOS bank
LD IX,0000H
HB_RRFN EQU $-2
CALL 0FFF9H ; HBIOS bank call
SUB 1 ; CF set IFF zero
RL A ; CF to bit 0 of A
AND 01H ; set Z flag as needed
LD A,0 ; report no line errors
POP HL
POP DE
POP BC
RET
;
;-----------------------------------------------------------------------
;
; Test for ready to send a character, Z = ready
;
HB_SNDRDY:
PUSH BC
PUSH DE
PUSH HL
LD IY,(HB_UDAT)
LD A,(BIOSBID) ; call into HBIOS bank
LD IX,0000H
HB_SRFN EQU $-2
CALL 0FFF9H ; HBIOS bank call
SUB 1 ; CF set IFF zero
RL A ; CF to bit 0 of A
AND 01H ; set Z flag as needed
POP HL
POP DE
POP BC
RET
;
;-----------------------------------------------------------------------
;
; Report baud rate (index into SPTBL returned in register A)
;
HB_SPEED:
LD A,8 ; arbitrarily return 9600 baud
RET
;
;
;
HB_UDAT DW 0000H ; Unit data address
;
;
;=======================================================================
;=======================================================================
;
; UNA UBIOS Interface
;
;=======================================================================
;=======================================================================
;
; Following jump table is dynamically patched over initial jump
; table at program startup. See MINIT above. Note that only a
; subset of the jump table is overlaid (SENDR to SPEED).
;
UB_JPTBL:
JP UB_SENDR ; send character (via pop psw)
JP UB_CAROK ; test for carrier
;JP UB_MDIN ; receive data byte (not present in ZMD)
JP UB_GETCHR ; get character from modem
JP UB_RCVRDY ; check receive ready
JP UB_SNDRDY ; check send ready
JP UB_SPEED ; get speed value for file transfer time
;
;-----------------------------------------------------------------------
;
; UBIOS initialization
;
UB_INIT:
;
; TODO:
; - TEST!!!
; - ADJUST RCVSCL?
;
LD HL,3000 ; Smaller receive loop timeout scalar
LD (RCVSCL),HL ; ... to compensate for BIOS overhead
;
; Claim 1 MHz CPU to offset overhead of HBIOS
LD A,1
LD (CPUSPD),A ; Save it
;
LD HL,UB_JPTBL
LD DE,UB_LBL
JP MINIT_RET
;
;-----------------------------------------------------------------------
;
; Send character on top of stack
;
UB_SENDR:
POP AF ; get character to send from stack
PUSH BC
PUSH DE
PUSH HL
LD BC,0012H ; unit 0, func 12h (write char)
LD E,A ; character to E
RST 08
POP HL
POP DE
POP BC
RET
;
;-----------------------------------------------------------------------
;
; Test and report carrier status, Z set if carrier present
;
UB_CAROK:
XOR A ; not used, always indicate present
RET
;
;-----------------------------------------------------------------------
;
; Get a character
;
; GETCHR must not block
;
UB_GETCHR:
CALL UB_RCVRDY
RET NZ
; Fall thru if char ready
;
; MDIN can assume a character is ready
;
UB_MDIN:
PUSH BC
PUSH DE
PUSH HL
LD BC,0011H ; unit 0, func 12h (write char)
RST 08
LD A,E ; byte received to A
POP HL
POP DE
POP BC
RET
;
;-----------------------------------------------------------------------
;
; Test for character ready to receive, Z = ready
; Error code returned in A register
; *** Error code does not seem to be used ***
;
UB_RCVRDY:
PUSH BC
PUSH DE
PUSH HL
LD BC,0013H ; unit 0, func 13h (input stat)
RST 08
XOR A ; zero accum ; 4
CP E ; CF means not zero ; 4
CCF ; CF means zero ; 4
RLA ; ZF means not zero ; 4
LD A,0 ; report no line errors
POP HL
POP DE
POP BC
RET
;
;-----------------------------------------------------------------------
;
; Test for ready to send a character, Z = ready
;
UB_SNDRDY:
PUSH BC
PUSH DE
PUSH HL
LD BC,0014H ; unit 0, func 14h (output stat)
RST 08
XOR A ; zero accum ; 4
CP E ; CF means not zero ; 4
CCF ; CF means zero ; 4
RLA ; ZF means not zero ; 4
POP HL
POP DE
POP BC
RET
;
;-----------------------------------------------------------------------
;
; Report baud rate (index into SPTBL returned in register A)
;
UB_SPEED:
LD A,8 ; arbitrarily return 9600 baud
RET
;
;=======================================================================
;=======================================================================
;
; 8250-like UART
;
;=======================================================================
;=======================================================================
;
; UART constants
;
UA_SNDB EQU 20H ; bit to test for send ready
UA_SNDR EQU 20H ; value when ready to send
UA_RCVB EQU 01H ; bit to test for receive ready
UA_RCVR EQU 01H ; value when ready to receive
UA_PARE EQU 04H ; bit for parity error
UA_OVRE EQU 02H ; bit for overrun error
UA_FRME EQU 08H ; bit for framing error
UA_ERRS EQU UA_FRME | UA_OVRE | UA_PARE
;
; Following jump table is dynamically patched into real jump
; table at program startup. See MINIT above. Note that only a
; subset of the jump table is overlaid (SENDR to SPEED).
;
UA_JPTBL:
JP UA_SENDR ; send character (via pop psw)
JP UA_CAROK ; test for carrier
;JP UA_MDIN ; receive data byte (not present in ZMD)
JP UA_GETCHR ; get character from modem
JP UA_RCVRDY ; check receive ready
JP UA_SNDRDY ; check send ready
JP UA_SPEED ; get speed value for file transfer time
;
;-----------------------------------------------------------------------
;
; UART initialization
;
UA_INIT:
LD DE,13000 ; receive loop timeout scalar
LD (RCVSCL),DE ; ... for UART RCVRDY timing
;
LD A,L ; get base I/O port address
LD (UA_SCP),A ; set port value in SENDR
LD (UA_GCP),A ; set port value in GETCHR
ADD A,5 ; UART control port is 5 higher
LD (UA_RRP),A ; set port value in RCVRDY
LD (UA_SRP),A ; set port value in SNDRDY
;
LD HL,UA_JPTBL
LD DE,UA_LBL
JP MINIT_RET
;
;-----------------------------------------------------------------------
;
; Send character on top of stack
;
UA_SENDR:
POP AF ; get character to send from stack
OUT (0FFH),A ; send to port
UA_SCP EQU $-1 ; port value
RET
;
;-----------------------------------------------------------------------
;
; Test and report carrier status, Z set if carrier present
;
UA_CAROK:
XOR A ; not used, always indicate present
RET
;
;-----------------------------------------------------------------------
;
; Get a character
;
; GETCHR must not block
;
UA_GETCHR:
CALL UA_RCVRDY
RET NZ
; Fall thru if char ready
;
; MDIN can assume a character is ready
;
UA_MDIN:
IN A,(0FFH) ; read character from port
UA_GCP EQU $-1 ; port value
RET
;
;-----------------------------------------------------------------------
;
; Test for character ready to receive, Z = ready
; Error code returned in A register
; *** Error code does not seem to be used ***
;
UA_RCVRDY:
IN A,(0FFH) ; get modem status
UA_RRP EQU $-1 ; port value
AND UA_RCVB ; isolate ready bit
CP UA_RCVR ; test it (set flags)
LD A,0 ; report no line errors
;
RET
;
;-----------------------------------------------------------------------
;
; Test for ready to send a character, Z = ready
;
UA_SNDRDY:
IN A,(0FFH) ; get status
UA_SRP EQU $-1 ; port value
AND UA_SNDB ; isolate transmit ready bit
CP UA_SNDR ; test for ready value
RET
;
;-----------------------------------------------------------------------
;
; Report baud rate (index into SPTBL returned in register A)
;
UA_SPEED:
LD A,8 ; arbitrarily return 9600 baud
RET
;
;
;
UA_BASE DB 00H ; UART base port I/O address
UA_CTLP DB 00H ; UART control port I/O address
;
;
;=======================================================================
;=======================================================================
;
; WILL SOWERBUTTS ECB USB-FIFO
;
;=======================================================================
;=======================================================================
;
UF_BASE EQU 0CH
UF_DATA EQU (UF_BASE+0)
UF_STATUS EQU (UF_BASE+1)
UF_SEND_IMM EQU (UF_BASE+2)
;
; Following jump table is dynamically patched over initial jump
; table at program startup. See MINIT above. Note that only a
; subset of the jump table is overlaid (SENDR to SPEED).
;
UF_JPTBL:
JP UF_SENDR ; send character (via pop psw)
JP UF_CAROK ; test for carrier
;JP UF_MDIN ; receive data byte (not present in ZMD)
JP UF_GETCHR ; get character from modem
JP UF_RCVRDY ; check receive ready
JP UF_SNDRDY ; check send ready
JP UF_SPEED ; get speed value for file transfer time
;
;-----------------------------------------------------------------------
;
; USB-FIFO initialization
;
UF_INIT:
LD DE,12000 ; receive loop timeout scalar
LD (RCVSCL),DE ; ... for UART RCVRDY timing
;
LD A,L ; get base I/O port address (data port)
LD (UF_SCDP),A ; set data port in SENDR
LD (UF_GCDP),A ; set data port in GETCHR/MDIN
INC A ; bump to status port
LD (UF_RRSP),A ; set status port in RCVRDY
LD (UF_SRSP),A ; set status port in SNDRDY
INC A ; bump to send immediate port
LD (UF_SCIP),A ; set send immed port in SENDR
;
LD HL,UF_JPTBL
LD DE,UF_LBL
JP MINIT_RET
;
;-----------------------------------------------------------------------
;
; Send character on top of stack
;
UF_SENDR:
POP AF ; get character to send from stack
OUT (0FFH),A ; write to fifo
UF_SCDP EQU $-1 ; data port
OUT (0FFH),A ; send immediate
UF_SCIP EQU $-1 ; send immediate port
RET
;
;-----------------------------------------------------------------------
;
; Test and report carrier status, Z set if carrier present
;
UF_CAROK:
XOR A ; not used, always indicate present
RET
;
;-----------------------------------------------------------------------
;
; Get a character (assume character ready has already been tested)
;
; GETCHR must not block
;
UF_GETCHR:
CALL UF_RCVRDY ; check for char ready
RET NZ ; return if not
; Fall thru if char ready
;
; MDIN can assume a character is ready
;
UF_MDIN:
IN A,(0FFH) ; get char
UF_GCDP EQU $-1 ; data port
RET
;
;-----------------------------------------------------------------------
;
; Test for character ready to receive, Z = ready
; Error code returned in A register
; *** Error code does not seem to be used ***
;
UF_RCVRDY:
IN A,(0FFH) ; bit 7 = 0 if char avail, = 1 if no char.
UF_RRSP EQU $-1 ; status port
RLCA ; bit 0 = 0 if char avail, = 1 if no char.
AND 00000001B ; A = 0, ZF = 1 if no char, A = 1, ZF = 0 if char avail.
LD A,0 ; no errors
RET
;
;-----------------------------------------------------------------------
;
; Test for ready to send a character, Z = ready
;
UF_SNDRDY:
IN A,(0FFH) ; bit 0 = 0 if space avail, = 1 if full
UF_SRSP EQU $-1 ; status port
AND 00000001B ; A = 0, ZF = 1 if space avail, A = 1, ZF = 0 if full.
RET
;
;-----------------------------------------------------------------------
;
; Report baud rate (index into SPTBL returned in register A)
;
UF_SPEED:
LD A,8 ; arbitrarily return 9600 baud
RET
;
END

637
Source/Apps/ZMD/zmdhdr.z80

@ -0,0 +1,637 @@
;
TITLE ZMDHDR.Z80 - 09/29/88 - ZMD Configuration Header
; Copyrighted (c) 1987, 1988
; Robert W. Kramer III
PAGE
;- -;
; Update History ;
; ;
; Date Release Comments ;
; -------- ------- ---------------------------------------------- ;
; ;
; 09/29/88 v1.50 - Changed file descriptor table. (Sorry, but as ;
; many times as I am required to reassemble the ;
; ZMD system, it saves alot of time for me). ;
; 03/18/88 v1.49 - No change(s) were made to this file ;
; 03/13/88 v1.48 - Added STDBUF switch to enable/disable automatic ;
; calculation of memory available for DBUF. If ;
; enabled, CHKTPA will set OUTSIZ with an even ;
; paged maximum memory comparison word according ;
; to the address contained at location 6 and 7. ;
; The value set as end of program during assembly ;
; is subtracted from it. If BYE is NOT running, ;
; an additional 806H is subtracted. The LSB of ;
; the result is discarded and the new even paged ;
; value is stored for later comparison as maximum ;
; Read/Write memory available for disk buffer ;
; operations. ;
; ;
; * * SPECIAL NOTE * * MOST ALL systems will benefit by enabling this ;
; feature. Some special CP/M systems which place ;
; buffers below location (6 and 7), may need to ;
; disable this feature in which case DBUF size ;
; will be set to 16k. This fix consumed 1 more ;
; byte in the switch/value table below. Previous ;
; configuration headers are incompatible with this;
; release. Additional program code is 9 bytes. ;
; (See explaination at STDBUF:) ;
; ;
; 02/25/88 v1.47 - No change(s) made to configuration file ;
; 01/27/88 v1.46 - No change(s) made to configuration file ;
; 01/17/88 v1.45 - First public release ;
; 11/19/87 v1.00 - Initial version ;
;- -;
;-------------------------------------------------------------------------;
; Introduction |
;-------------------------------------------------------------------------;
;
; This document is a detailed listing of all the program option toggles
; and their functions within the ZMD environment which when used in
; conjunction with the source listings, install program and reference
; manual, provide all the necessary documentation to support program
; maintenance.
;
;-------------------------------------------------------------------------;
; EQUates Header |
;-------------------------------------------------------------------------;
INCLUDE EQUATES.INS ; Include system constant definitions
;
;-------------------------------------------------------------------------;
; PUBLIC Declarations: |
;-------------------------------------------------------------------------;
PUBLIC ACCMAP,ASKAREA,ASKIND,CLRSCRN,CLRSTR,DESWAIT,DRV
PUBLIC LOCOFF,MHZ,MINKSPD,MSPEED,PAGLEN,PRDRV,PRUSR,USR,WHEEL
PUBLIC WRAP,WRTLOC,CONOUT,MDINST,MDINP,MDOUTST,MDCARCK,MDOUTP
PUBLIC KNDTBL,TYPTBL,MAXTYP,DESCRIB,FORNAM,MSGDESC,DSTAMP
PUBLIC INCLDU,UNINIT,DRIVE,USER,LOGNAM,SETAREA,CLOCK,RTC
PUBLIC TIMEON,CREDIT,EDATE,DSPTOS,STDBUF
;
;-------------------------------------------------------------------------;
; EXTERNAL Declarations: |
;-------------------------------------------------------------------------;
EXTRN MONTH,DAY,YEAR,HOUR,MINUTE,DEST,FILE,ZMDNAM,INSNAM
EXTRN MAPNAM,PRGUTL,PUBFOR,PUBNEW,SYSFOR,PUBFOR,INSNAM
EXTRN SYSNEW,FCBCLR,FCBLOG,TEMPFIL,BCDBIN,TIMBUF,DUD,DUU
;
;-------------------------------------------------------------------------;
; Program configuration starts here |
;-------------------------------------------------------------------------;
;
; Options that are most often changed are marked with ';*' at the start of
; the comment line for that option. Simple systems not using time clocks,
; user logs, etc. will keep most of those 'NO'. RCPM systems running the
; usual bulletin board systems, etc., will change most of those to 'YES'.
;
MHZ: DB 10 ; Microprocessor speed - use integer 1,4,5, etc.
;MSPEED: DW 003CH ; Location of modem speed indicator byte
MSPEED: DW 0600H ; Location of modem speed indicator byte
; [WBW] placed in I/O overlay
WRTLOC: DB NO ; Set/reset WRTLOC so BYE won't hang up. Check
LOCOFF: DB 12 ; your BBS documentation - many modern systems
; don't need WRTLOC. If unsure, set WRTLOC to NO.
; Code to set and reset WRTLOC assumes the WRTLOC
; byte to be located "LOCOFF" bytes from the JP
; COLDBOOT instruction at the beginning of the BYE
; BIOS jump table. (YES for MBBS and PBBS).
STDBUF: DB NO ; If the size of your TPA cannot be calculated by
; using one of the two following methods, disable
; this by setting to NO. ZMD will Automatically
; calculate the maximum disk buffer size allowed. If
; enabled, CHKTPA will determine whether or not
; BYE is running, if so uses (0006)-1. Else
; subtracts 806H from (0006). If disabled, DBUF
; setting will be used as default (Normally set to
; 16k). Either way, if descriptions are allowed,
; the total number of uploads allowed is set based
; on the value of OUTSIZ divided by maximum bytes
; per description entry.
DESWAIT:DB 2 ; This is the number of minutes of inactivity during
; an upload description or Help Guide prompt before
; logging aborting the input routine. If the
; caller was entering a description, the current
; description buffer is written to disk before
; resetting your BYE program's disk write lock flag
; (WRTLOC), if enabled.
MINKSPD:DB 1 ; Minimum speed acceptable for 1k packet file
; transfers. If you are on a network such as PC
; Pursuit, and are able to RECEIVE incoming calls,
; set this byte to 1. The delays these networks
; use to send data back and forth make 1k packets
; advantageous to even 300 bps users. If you are
; not on a network such as PC Pursuit, it's simply
; a matter of preference, but why not let the 300
; bps callers experience the 1k packet transfers?
; (1 = 300, 5 = 1200, 6 = 2400, ..., 9 = 19,200)
BUFSIZ: DB 16 ; Normal disk systems can transfer 16k from
; computer to disk in 2-3-4 seconds and less. Some
; very slow 5-1/4" floppy systems (such as North
; Star) may take up to 20-30 seconds to transfer
; 16k. This would cause several timeouts at 10
; seconds each. If you experience any timeouts,
; try changing BUFSIZ to something smaller, perhaps
; 8k or even 4k.
CLRSCRN:DB NO ; Yes, you want ZMD to clear your screen locally
CLRSTR: DB 1AH,00H ; during display of batch file transfers and all
DB 00H,00H ; the help menus. If you set CLRSCRN to YES, enter
DB 00H,00H ; your clear screen sequence in the 6 bytes aside.
DB '$' ; (If your terminal uses ^Z, leave as is, 1AH = ^Z)
PAGLEN: DB 24 ; This is the number of lines to display in between
; [more] pauses. (Set to 0 to disable pauses).
;
;-------------------------------------------------------------------------;
; Timekeeping Considerations |
;-------------------------------------------------------------------------;
;
; If you have a clock installed (either in your BYE program or internal),
; set the following switches to your liking. If running ZMD without a
; clock, set these all NO.
;
CLOCK: DB NO ; Clock/date reader code installed in BYE program
RTC: DB NO ; Clock/date reader code installed at RTCTIM:
TIMEON: DB NO ; Restrict downloads to maximum time allowed
MAXMIN: DB 60 ; Total minutes allowed for downloads. This should
; be set if TIMEON is YES and CLOCK is NO.
DSPTOS: DB NO ; Yes to display 'Online nn minutes' messages
LHOUR: DW 0000H ; Logon hour address (If RTC). LHOUR+2 = logon
; minute address.
;
;-------------------------------------------------------------------------;
; Bit Map Layout |
;-------------------------------------------------------------------------;
;
; The following byte contains information corresponding to the filename
; bytes of the file being considered for transfer. Enabling any of the
; options causes ZMD to look at the high bit of the byte position
; indicated below (F1=filename byte 1, T2=file type byte 2, etc). These
; restrictions are always bypassed when using ZCPR and the WHEEL is set.
;
; Bit: 76543210 ; Correspond to definitions below
; ||||||||
ACCMAP: DB 11111101B ; Set any bits of this byte according
; __________\______/ ; to your own preference.
; /
;
; 7 | F1 | File not for distribution. If file is a ARK/ARC/LBR
; | | file, individual members may be downloaded (no Batch)
; 6 | F3 | File can be downloaded regardless of user's access
; 5 | T2 | $SYS files not sent or reported
; 4 | T3 | .??# files with labels not sent
; 3 | T1/2/3 | .COM files not sent or reported
; 2 | T1/2/3 | Rename .COM to .OBJ and .PRL to .OBP on receive
; 1 | -- | RESERVED FOR FUTURE USE
; 0 | T1/2/3 | .SYS, .NDR, .RCP, file extents not accepted. (ZCPR)
;
;-------------------------------------------------------------------------;
; ZCMD/ZCPR |
;-------------------------------------------------------------------------;
;
; If using ZCPR low memory bytes to keep track of maximum drive and user,
; set USEMAX to yes. ZMD will use the values at locations DRIVMAX and
; USRMAX for maximum drive/user. If USEMAX is NO, hardcode MAXDRV and
; MAXUSR to your own requirements.
;
WHEEL: DW 3EH ; Location of ZCPR wheel byte
USEMAX: DB NO ;*Use values at DRIVMAX and USRMAX for maximum
; (Else use MAXDRV and MAXUSR values)
DRIVMAX:DW 3DH ; ZCPR maximum drive memory byte
USRMAX: DW 3FH ; ZCPR maximum user memory byte
MAXDRV: DB 16 ; Maximum download drive allowed
MAXUSR: DB 16 ; Maximum download user allowed
;
;-------------------------------------------------------------------------;
; Access Restrictions |
;-------------------------------------------------------------------------;
;
; If ACCESS is YES, ZMD will inspect AFBYTE (located ACBOFF bytes from JP
; COLDBOOT) for the following flag data:
;
;
; Bit: 7 6 5 4 3 2 1 0
; | | | | | | | |
; Privileged user ---* | | | | | | |
; Upload -----* | | | | | |
; Download -------* | | | | | * Of these bits, only 3, 5, 6
; CP/M ---------+ | | | | and 7 are used by ZMD. Bit
; Write -----------* | | | numbers are powers of 2, with
; Read -------------+ | | bit 0 being least significant
; BBS ---------------+ | bit of byte.
; System -----------------+
;
;
ACCESS: DB NO ;*Yes, your system sets BYE's bit-mapped flag
; register to restrict user's ability to upload,
; download, use the 'RM' option to upload message
; files to your BBS's message base, or to use the
; 'RW' option for 'privileged user' upload without
; being required to give upload descriptions.
ACBOFF: DB 21 ; If you set ACCESS to YES, you 'might' need to
; set this to reflect the number of bytes from JP
; COLDBOOT to ACCESS byte. In most cases, leave
; alone.
;
;-------------------------------------------------------------------------;
; Upload Configurations |
;-------------------------------------------------------------------------;
;
MSGFIL: DB NO ; Some BBS's allow callers to upload preformatted
; text files which are appended to the message
; base. (MBBS and PBBS are examples of this). If
; you're running MBBS or PBBS and wish to support
; this, simply set MSGFIL to YES. Message file
; uploads go to PRDRV and PRUSR.
HIDEIT: DB NO ; Yes, make all normal uploads $SYS files. This
; way, new uploads will not appear in a DIRectory
; listing and cannot be viewed or even downloaded
; until they are cleared by SYSOP. (New uploads
; will show up when the WHEEL byte is ON and a $S
; option is used to show SYSTEM files. Use the $O
; option to list ONLY $SYS files. Reference will
; be made to these files in the in the NEW and FOR
; listings if those features are enabled). Private
; uploads, and uploads made with the WHEEL byte
; set are NOT made $SYS. You can use POWER or
; NSWEEP to set to $DIR.
;
;-------------------------------------------------------------------------;
; Upload Routing Options |
;-------------------------------------------------------------------------;
;
; The following equates determine what drive/user area uploads will be sent
; to. If you prefer to enable upload routing (ASKAREA set YES), you will
; have to set MAXTYP to the letter of the highest category you wish to
; support, and configure TYPTBL: and KNDTBL: tables below for your own
; system. Do NOT set ASKAREA and SETAREA both to YES.
;
ASKAREA:DB NO ;*Yes, you want upload routing to multiple drive
; and user areas. The caller will be asked what
; the file (or files) he is uploading are for and
; his uploads will then be forwarded to the
; appropriate area. You will need to set up the
; categories at KNDTBL: for your own system and
; set the drive/user area each category belongs on
; at label TYPTBL:. There can be up to 26 different
; drive/user and category combinations. This applies
; for both private and normal uploads. Upload
; routing is disabled when the WHEEL byte is set,
; in which case, normal uploads will go to the
; current drive/user area and private uploads will
; go to the drive/user equated at PRDRV and PRUSR.
SETAREA:DB NO ;*Yes, you wish to have all regular uploads sent
DRV: DB 'B' ; to the drive/user equated at DRV and USR to left.
USR: DB 0 ; If WHEEL byte is set, regular uploads will go to
; the current or specified drive/user. Unless you
; ASKAREA is YES, all private files uploaded with
; the 'RP' option will be sent to PRDRV and PRUSR
; regardless of WHEEL status.
PRDRV: DB 'H' ;*This is the drive/user area where ALL files sent
PRUSR: DB 15 ;*to the sysop with the 'RP' option will go (unless
; ASKAREA below is YES). This permits experimental
; files, replacement and/or proprietary programs to
; be sent to an area only accessible by the sysop.
; This is also the drive and user area where message
; files are uploaded, if MSGFIL is set YES. (If
; ASKAREA is YES, this is the drive/user where
; uploads will go when 'RP' is specified, and WHEEL
; is set). (If MSGDESC is YES, this is the drive
; and user area the FOR text file will be placed
; before appending it to the BBS system's message
; base).
CREDIT: DB NO ;*Yes, callers are given credit for the amount of
; time they spend uploading non-private files. A
; caller who spends 30 minutes sending an upload
; gets 30 minutes added to his TLOS. (You must
; set either CLOCK or TIMEON to YES to use this
; feature).
;
;-------------------------------------------------------------------------;
; Upload Description Options |
;-------------------------------------------------------------------------;
;
; This section has to do with upload descriptions. If you do not intend
; on implementing upload descriptions, set DESCRIB and MSGDESC to NO. The
; rest of these values are then ignored. If using descriptions, set ONLY
; one of these to YES, not both.
;
MSGDESC:DB NO ; Yes, your BBS system supports message uploads,
; and you prefer upload descriptions to be placed
; in your BBS message system (set DESCRIB NO).
; MBBS users need to install MFMSG.COM with the
; MBBSINIT program. Then set your BYE program to
; know about message file uploads by setting the
; MSGFIL option in BYE/MBYE to YES. If set YES,
; ZMD will produce a FOR text file when writing
; upload descriptions. This FOR file will go to
; the drive and user area equated at PRDRV and
; PRUSR just before being appended to your BBS
; system's message base.
DESCRIB:DB NO ;*Yes, requiring users to provide descriptions for
; any files they upload. These descriptions will
; be added to the current FOR file where they can
; be viewed by callers with the ZFORP utility.
; Sysop can add new descriptions with the ZFORS
; utility (See ZMD.WS for more information on ZMD
; support files). Uploads sent to the SYSOP private
; upload area will not be require descriptions, nor
; will files uploaded with the 'RW' option - user
; must be a privileged user (bit 7 in ACCESS byte
; set) or have WHEEL access and PUPOPT must be set
; YES to use the 'RW' option.
FORNAM: DB 'FOR ' ; Description text file (Must be 11 bytes)
DRIVE: DB 'A' ;*If using with DESCRIB set YES, you must indicate
USER: DB 14 ;*what drive/user you want the 'FOR' file to be
; placed.
;
; If DESCRIB above is set to YES, you'll have to tell ZMD what information
; you want included in the first line of each description. Code is included
; in ZMD to place all (any) information in the upload description header in
; in the same column position no matter what the filename or file category
; length is. The following illustrates a full implementation of DESCRIB.
;
; Example upload description header:
;
; -----
; ZMD150.LBR - Communications (C3:) Rcvd: 09/21/88
; / / /
; _______/ ______/ _______/
; ASKIND INCLDU DSTAMP
;
;
ASKIND: DB NO ;*Yes, ask for the category of uploads and write it
; into the upload description header. If you set
; this to YES, make sure you set MAXTYP below to
; the highest letter choice you wish to support and
; edit the text at KNDTBL: up to and including your
; MAXTYP setting. (Used only with DESCRIB).
INCLDU: DB YES ;*Yes, include the drive/user area of the uploaded
; file into the upload description header.
; (Used only with DESCRIB).
DSTAMP: DB YES ;*Yes, include the date the upload was received into
; the upload description header. (NO if no clock)
; (Used only with DESCRIB).
PUPOPT: DB YES ;*Yes, description request of file upload will be
; skipped when "RW" is used in the ZMD command line
; (i.e. ZMD RW FILE.EXT). This command may only be
; used by those considered "priviledged" users on
; your system or WHEEL users. Uploads of this type
; will be tagged in the ZMD.LOG file as private, so
; as not to display with the NEW command. (See
; ACCESS equate description above for information
; on 'priviledged' users).
WRAP: DB 64 ; Column position where word wrap will occur. If
; you are using MSGDESC and have problems with an
; 'Invalid format' error from MFMSG.COM, try setting
; WRAP to something smaller, like 62 or 63. (Word
; wrap can be disabled by the user with ^W during
; description entry. Enter 72 here to disable
; completely).
;
;-------------------------------------------------------------------------;
; Special Sysop Downloads |
;-------------------------------------------------------------------------;
;
SPLDRV: DB 'H' ;*Drive/user area for downloading private files
SPLUSR: DB 14 ;*from sysop. This permits him to put a special
; file in this area, then leave a private note
; to that person mentioning the name of the file
; and how to download it (ZMD SP filename.ext).
; Although anybody 'could' download that program,
; they don't know what (if any) files are there.
; A high degree of security exists, while the
; SYSOP still has the ability to make special
; files available. Thus any person can be a
; temporary 'privileged user'.
;
;-------------------------------------------------------------------------;
; File Transfer Log |
;-------------------------------------------------------------------------;
;
LOGCAL: DB NO ;*ZMD.LOG is produced if LOGCAL is set YES. All
; file transfers are logged. You can then use
; ZNEWP.COM to show listings of recent uploads.
EDATE: DB NO ; Yes, show date in ZMD.LOG in dd/mm/yy format
; instead of mm/dd/yy format.
LOGNAM: DB 'ZMD LOG' ; File transfer log (Must be 11 bytes)
LOGDRV: DB 'A' ;*Drive to find ZMD.LOG on.
LOGUSR: DB 14 ;*User area to find ZMD.LOG on.
LSTCLR: DB 'LASTCALR???' ; Last caller file (Must be 11 bytes)
LASTDRV:DB 'A' ;*Drive to find LASTCALR??? file on.
LASTUSR:DB 14 ;*User area to find LASTCALR??? file on.
LCNAME: DB 0 ;*Position of last caller's name in the LASTCALR???
; file. (MBBS is 11, PBBS is 0).
LOGLDS: DB NO ;*Count number of up/down loads since login. Your
UPLDS: DW 0054H ; BBS program can check UPLDS and DNLDS when a user
DNLDS: DW 0055H ; logs out and update either the user's file or a
; file for this purpose. You can either modify
; your BBS entry program to check the LASTCALR file
; before updating and then update (risky), or make
; a separate program that BYE calls when logging off
; a user (preferred). (YES for PBBS). Clear UPLDS
; and DNLDS to 0 from your BBS program when somebody
; logs in. NOTE: Clear ONLY when a user logs in,
; not when he re-enters the BBS program from CP/M.
;
;-------------------------------------------------------------------------;
; File Descriptors |
;-------------------------------------------------------------------------;
;
; This table defines the text to be included in upload description headers
; (DESCRIB and ASKIND) and/or defines categories for uploading to multiple
; drive/user areas (If ASKAREA and NOT SETAREA). Change as desired, if
; this list is not suitable. Do NOT remove any of the text at KNDTBL:.
; Simply edit the text below up to/and including your MAXTYP setting.
; MAXTYP below must be set to whatever letter your maximum choice will be.
; Make sure you leave all the following categories EXACTLY 31 bytes long
; (29 bytes of text plus the CR,LF equals 31) or you will be CERTAIN to
; have problems with the double column formatting later on in the program.
;
MAXTYP: DB 'W' ; Letter of highest category you will support.
KNDTBL: DB ' A) - BBS Lists, PC Pursuit ',CR,LF
DB ' B) - CP/M Modem Program ',CR,LF
DB ' C) - CP/M Utility ',CR,LF
DB ' D) - CP/M Lbr, Ark, Catalog',CR,LF
DB ' E) - CP/M Plus Specific ',CR,LF
DB ' F) - CP/M Games & Humor ',CR,LF
DB ' G) - CP/M Wordprocessing ',CR,LF
DB ' H) - CP/M Printer Utility ',CR,LF
DB ' I) - CP/M OS Enhancement ',CR,LF
DB ' J) - CP/M BBS Software ',CR,LF
DB ' K) - CP/M Assemb/Disassemb ',CR,LF
DB ' L) - CP/M Language (Other) ',CR,LF
DB ' M) - Turbo Pascal ',CR,LF
DB ' N) - dBase & Database ',CR,LF
DB ' O) - "C" ',CR,LF
DB ' P) - Text & Information ',CR,LF
DB ' Q) - DOS Modem Program ',CR,LF
DB ' R) - DOS BBS Software ',CR,LF
DB ' S) - DOS Language ',CR,LF
DB ' T) - DOS Assemb/Disassemb ',CR,LF
DB ' U) - DOS Lbr, Arc, Catalog ',CR,LF
DB ' V) - DOS Wordprocessing ',CR,LF
DB ' W) - DOS Printer Utility ',CR,LF
DB ' X) - DOS Games & Humor ',CR,LF
DB ' Y) - DOS Application ',CR,LF
DB ' Z) - DOS Utility ',CR,LF
DB 0 ; leave the table terminator alone.
;
;-------------------------------------------------------------------------;
; Upload Routing Table |
;-------------------------------------------------------------------------;
;
; If ASKAREA is set YES, then set these areas up to match the message text
; in KNDTBL: above. Note that PRIVATE uploads may be sent to a different
; drive as well as a different user area. Each entry is expressed as
; 'drive letter',user area. Simply set MAXTYP above to the highest
; letter choice supported. (Do NOT comment out any of the following
; storage bytes).
;
; _________
; NOTE: / A \ <--- 'A' Corresponds to category 'A' above
; 'A',1,'B',15,
; \ / \ /
; Normal upload --+ |
; Private upload -------+
;
TYPTBL:
; _________ _________ _________ _________
; / A \ / B \ / C \ / D \
DB 'B',1,'F',15, 'B',0,'F',15, 'B',2,'F',15, 'B',4,'F',15
; _________ _________ _________ _________
; / E \ / F \ / G \ / H \
DB 'B',5,'F',15, 'B',6,'F',15, 'C',0,'F',15, 'C',1,'F',15
; _________ _________ _________ _________
; / I \ / J \ / K \ / L \
DB 'C',2,'F',15, 'C',3,'F',15, 'A',1,'F',15, 'A',5,'F',15
; _________ _________ _________ _________
; / M \ / N \ / O \ / P \
DB 'A',2,'F',15, 'A',3,'F',15, 'A',4,'F',15, 'A',6,'F',15
; _________ _________ _________ _________
; / Q \ / R \ / S \ / T \
DB 'E',0,'F',15, 'E',1,'F',15, 'E',2,'F',15, 'E',3,'F',15
; _________ _________ _________ _________
; / U \ / V \ / W \ / X \
DB 'F',0,'F',15, 'F',1,'F',15, 'F',2,'F',15, 'F',3,'F',15
; _________ _________
; / Y \ / Z \
DB 'G',0,'F',15, 'H',0,'F',15
;
;=========================================================================;
;>>>>>>>>>>>>>> DO NOT CHANGE ANYTHING BEYOND THIS POINT <<<<<<<<<<<<<<<|
;=========================================================================;
;-------------------------------------------------------------------------;
; Version Identification |
;-------------------------------------------------------------------------;
;
; If/when INSTALL is first ran, it checks these next 3 bytes to make sure
; it is installing the proper version of ZMD.COM. If these bytes do not
; match, the INSTALL procedure will abort. (Don't change this one)
;
INSVERS:DB '150' ; Don't change this one
;
;-------------------------------------------------------------------------;
; User Definable Storage Bytes |
;-------------------------------------------------------------------------;
;
; If you make changes to the configuration table, make them here. You
; are allowed 2 bytes for switches, or storage for an address, etc. Any
; changes before this point and ZINSTL will not run.
;
SPARE1: DB 0 ; User definable storage
SPARE2: DB 0
;
;-------------------------------------------------------------------------;
; Clock/Date Reader Code |
;-------------------------------------------------------------------------;
;
; Install your clock/date reader code here. RTCTIM gets called to retrieve
; the current date and time. All values must be stored in binary form.
; A 6 byte clock buffer called TIMBUF can be used as a work area. Call
; BCDBIN to convert your BCD (Binary Coded Decimal) value in A to binary
; value in A. Delete all ';<=' lines; after installing your custom
; routine.
;
ORG 4FEH ; Allow 130 bytes for RTC insert
;
RTCTIM::LD A,0 ;<= Delete lines if reader code installed
LD (MONTH),A ;<= Current month (1-12)
LD (DAY),A ;<= Current date (1-31)
LD (YEAR),A ;<= Current year (0-99)
LD (MINUTE),A ;<= Current minute (0-59)
LD (HOUR),A ;<= Current hour (0-23)
RET
;
;-------------------------------------------------------------------------;
; Input/Output Patch Area |
;-------------------------------------------------------------------------;
ORG 580H ; Modem routine starts here
CONOUT: JP 0000H ; BIOS local console output routine address
MINIT: JP 0000H ; Startup initialization routine
UNINIT: JP 0000H ; Exit uninitialize routine
MDOUTP: JP 0000H ; Send character out modem
MDCARCK:JP 0000H ; Test for carrier
MDINP: JP 0000H ; Get character from modem
MDINST: JP 0000H ; Check receive ready
MDOUTST:JP 0000H ; Check send ready
;ORG 600H ; Allow 128 bytes for I/O overlay
ORG 1000H ; Allow for large I/O overlay
;
; Overlay ends here
;


517
Source/Apps/ZMD/znewp.z80

@ -0,0 +1,517 @@
;
TITLE ZNEWP.Z80 - 09/29/88 - ZMD Public Transfer Log Utility
; Copyrighted (c) 1987, 1988
; Robert W. Kramer III
;- -;
; Update History ;
; ;
; Date Release Comments ;
; -------- ------- ---------------------------------------------- ;
; ;
; 09/29/88 v1.50 - No change(s) made to this file ;
; 03/18/88 v1.49 - No change(s) made to this file ;
; 03/13/88 v1.48 - Redefined buffer table at end of programs. STACK;
; and filename buffers now EQUated with offsets ;
; from the last switch/toggle in program instead ;
; of with DS directive. ;
; - Some systems which do NOT have an interrupt ;
; driven keyboard may have noticed problems when ;
; an invalid key was entered in the ZNEWP, ZFORP ;
; and ZMDEL programs. In ZNEWP and ZFORP, if a ;
; CR was entered to pause the output, output was ;
; limited to one line at a time per key pressed. ;
; If an invalid key was hit, output would have ;
; remained in a paused state until one of the ;
; abort keys were pressed. This was difficult to ;
; find since my keyboard is interrupt driven and ;
; I could not duplicate the problem on my own ;
; system. ;
; 02/25/88 v1.47 - Fixed to determine if CLOCK is enabled before ;
; inserting spaces after 8 'date' positions. ;
; (Keeps caller name from being split with an ;
; extra space at column 52). ;
; 01/27/88 v1.46 - Now uses BDOS call 35 to calculate virtual size ;
; of log file (in records) which is returned in ;
; bytes 33 and 34 of log FCB. It then uses BDOS ;
; call 33 to compute the extent of the specified ;
; record number (bytes 33 and 34 of log FCB), ;
; decrements the record number for next random ;
; read and displays current record. This method ;
; of reading the log file allows for files up to ;
; 8,388,480 bytes in size to be displayed at an ;
; instant. ;
; 01/17/88 v1.45 - First public release ;
; 11/01/87 v1.00 - Initial version ;
;- -;
;-------------------------------------------------------------------------;
; EXTERNAL Declarations: |
;-------------------------------------------------------------------------;
EXTRN CKABRT,CLEARIT,DBUF,ERXIT,EXIT,ILPRTB,LINCNT,MODE
EXTRN NOFILE,NOLOG,OLDDRV,OLDUSR,PRINTV,PRIVATE,RECAR1
EXTRN RECDR1,RENFCB,RSDMA,SHONM4,STACK,TYPE,WHLCHK
;
;-------------------------------------------------------------------------;
; Program Starts Here |
;-------------------------------------------------------------------------;
.Z80
ASEG
ORG 100H ; Program starts
JP BEGIN ; Jump around configuration table
INCLUDE ZMDHDR.Z80 ; Include the ZMD header overlay
.REQUEST ZMDSUBS ; Include the ZMD subroutines
;
;
; Save CP/M stack, initialize new one for this program
;
BEGIN: LD (STACK),SP ; Save return address to CCP
LD SP,STACK ; Initialize new one for this program
;
; Get current drive/user
;
LD A,255 ; Get current user
CALL RECAR1
LD (OLDUSR),A ; Store it
LD C,CURDRV ; Get current drive
CALL BDOS
LD (OLDDRV),A ; Store it
;
; Tell em who we are
;
LD A,255 ; Need this so discrepency check will
LD (MODE),A ; Leave clock settings alone in case local
LD HL,PUBNEW ; Point to this filename
CALL PRINTV ; Display it
LD A,(LOGCAL) ; See if log file enabled
OR A
JP Z,NOLOG ; Don't run program if not
CALL ILPRTB
DB '(S to Pause - C K or X Abort)'
DB CR,LF,LF
DB 0
LD A,9 ; Leave program name on first screen
LD (LINCNT),A
;
; If WHEEL byte set, check to see if 'A' specified in command tail. If
; it is, set switch to display entire transfer log
;
CALL WHLCHK ; WHEEL byte set?
JP Z,BEGIN2 ; No don't look for options
LD A,(FCB+1) ; Get possible option
CP 'A' ; Want to show all of file?
JP NZ,BEGIN2 ; No
LD A,1
LD (SHOWALL),A ; Set to show all entries
LD A,8
LD (LINCNT),A
;
; See if user wants file displayed 'nonstop' ($N)
;
BEGIN2: LD HL,FCB+1 ; Get first character on command line
LD A,(HL) ; Into A
CP '$' ; Must specify '$' first
JP NZ,OPNLOG ; Nope, continue normal
INC HL ; Point to next byte
LD A,(HL) ; Into A for comparison
CP 'N' ; 'N' for nonstop display?
JP NZ,OPNLOG ; No
LD A,0
LD (PAGLEN),A ; Else disable page pauses
;
; Set drive/user to the log file area and open ZMD.LOG
;
OPNLOG: LD A,(LOGUSR) ; Set user area to ZMD.LOG area
CALL RECAR1
LD A,(LOGDRV) ; Set drive to ZMD.LOG area
CALL RECDR1
LD HL,FILE ; Destination is internal FCB
LD DE,LOGNAM ; For log filename
CALL RENFCB ; Initialize and rename
LD DE,FILE
LD C,OPEN ; Open log file
CALL BDOS
INC A ; Check for no open
LD HL,FILE+1
JP Z,NOFILE ; No file, exit
;
; See if special sysop access was allowed/requested. Display enabled
; message if so.
;
LD A,(SHOWALL) ; Showing entire transfer log?
OR A
JP Z,SHOHDR ; No, display header as usual
CALL ILPRTB
DB CR
DB '-- Sysop access enabled --',0
JP CALCSIZ
;
; Display all applicable field titles
;
SHOHDR: CALL ILPRTB
DB CR
DB 'D/u Filename Size Speed ',0
LD A,(CLOCK)
OR A
JP Z,SHOHDR1
CALL ILPRTB
DB ' Date Time ',0
SHOHDR1:CALL ILPRTB
DB ' Uploaded by'
DB CR,LF,0
;
; Get number of records in log file
;
CALCSIZ:LD DE,FILE ; Point to log FCB
LD C,FILSIZ ; Compute file size function
CALL BDOS
LD DE,DBUF+81 ; Point to beggining of write buffer
LD A,CR
LD (DE),A ; Force first CR
DEC E
;
; Decrement number of records left. If any left, read on into write
; buffer, otherwise close file and exit
;
NXTRCD: PUSH DE ; Save write buffer address
LD HL,FILE+33 ; Get current record counter
LD E,(HL) ; LSB record count
INC HL
LD D,(HL) ; MSB record count
DEC DE ; Decrement it
LD (HL),D ; Put it back
DEC HL
LD (HL),E
LD A,E
CP 0FFH ; Any more records?
JP NZ,RDRCD ; Yes, go read it
LD A,D ; Maybe not, check MSB
CP 0FFH ; Any more?
JP Z,TDONE ; No, all done
;
; Read a record from source file
;
RDRCD: CALL RSDMA ; Reset DMA to 80H
LD DE,FILE
LD C,RRDM ; Random read
CALL BDOS
POP DE ; Get write buffer address back
OR A ; Read ok?
JP NZ,RDERR ; Yes
LD HL,TBUF+127 ; End address of read buffer
LD B,128 ; Buffer is filled backwards
;
; Write record from disk to memory (in reverse order)
;
WRTBYT: LD A,(HL) ; Get byte from read buffer
AND 7FH ; Strip parity bit
CP LF ; End of line?
JP Z,DSPLIN ; Yes, show it if supposed to
CP 7FH ; Del (rubout)?
JP Z,NXTBYT ; Yes, ignore it
CP EOF ; End of file marker?
JP Z,NXTBYT ; Yes, ignore it
LD (DE),A
DEC E ; Decrement write buffer pointer
NXTBYT: DEC L ; Decrement read buffer pointer
DJNZ WRTBYT ; And character count, get next if any left
JP NXTRCD ; Else read another record
;
; Found end (CR) of current entry. Display it.
;
DSPLIN: DEC B ; Decrement character counter
PUSH AF ; Save flags
DEC L ; Decrement write buffer pointer
PUSH HL ; Save write address
PUSH BC ; Save character count
EX DE,HL ; HL now contains current buffer read address
LD (HL),A ; Store the LF
LD A,(SHOWALL) ; Show entire file?
OR A
JP NZ,NEXT ; Yes
INC L ; Else next character is transfer mode
LD A,(HL) ; Get it
DEC L ; Restore read pointer
CP 'R' ; Uploaded entry?
JP NZ,SENDLF1 ; No, ignore it and reset pointers
;
; Get next character from read buffer. If end of line, go display CR,LF.
;
NEXT: INC L ; Increment next read byte
LD A,(HL) ; Get character
LD B,A ; Into B
CP CR ; End of line?
JP Z,SENDLF ; Yes, send a CR,LF and reset pointers
LD A,(COLUMN) ; Get column count
CP 79 ; End of line?
JP Z,DSPLP2 ; Yes, start new line
OR A ; At beginning of line?
JP NZ,DSPLP3 ; No, continue
INC A
LD (COLUMN),A ; We aren't anymore
LD A,B ; Get the character back
LD (STORE),A ; Store it for later comparison
CP 'P' ; This entry private upload?
JP NZ,DSPLP1 ; No, check for regular upload
LD A,(SHOWALL) ; Yes, were we supposed to show entire file?
OR A
JP Z,DSPLP2 ; No, so ignore it
LD (PRIVATE),A ; Set private flag
JP DSPLP4 ; Go show it
DSPLP1: CP 'R' ; Regular upload?
JP Z,DSPLP4 ; Yes, keep the flag set
LD A,(SHOWALL)
OR A
JP NZ,DSPLP4
XOR A
LD (STORE),A
LD (COLUMN),A ; Start in column 0
JP NEXT
DSPLP2: XOR A
LD (STORE),A ; Otherwise reset flag to zero
DSPLP3: LD A,(STORE) ; Storing into memory?
OR A
JP Z,NEXT ; If not, exit
DSPLP4: LD A,(COLUMN) ; Increment the column counter
INC A
LD (COLUMN),A
CP 3 ; User's modem speed is in column 2
JP NZ,DSPLP5 ; If not column 2, continue
LD A,B ; Otherwise get the character
LD (STORE),A ; Store it for conversion to baud rate
JP NEXT ; Do not print the "MSPEED" number
DSPLP5: CP 11
JP C,NEXT ; Skip everything through column 10
;
; Display drive and user of file
;
CP 14
JP C,SEND ; Print everything through column 13
JP NZ,DSPFN
;
; If a private file, make a special note of it
;
LD A,(PRIVATE) ; Private entry?
OR A
JP Z,DSPDU ; No
XOR A ; Reset flag for next time
LD (PRIVATE),A
LD A,'*' ; Displays entry is private
CALL TYPE
LD B,' ' ; Keep our distance from next field
JP SEND
DSPDU: LD A,':' ; Stick in a colon after column 12
CALL TYPE
LD B,' ' ; Send a space
JP SEND
;
; Display filename and extent
;
DSPFN: CP 22 ; Print through column 20
JP C,SEND
JP NZ,DSPFT
LD A,B
CALL TYPE ; Send character in colum 21
LD B,'.' ; Add a period after the file name
JP SEND
DSPFT: CP 27
JP C,SEND ; Print file type and some spaces
CALL Z,PRTSPC
CP 39
JP C,NEXT ; Ignore the "big gap"
CP 43
JP C,SEND ; Print the file size
JP Z,DSPBD
JP DSPDAT
;
; Display the baud rate (300-19200 bps)
;
DSPBD: PUSH HL
LD A,(STORE)
CP '1'
JP Z,B300
CP '5'
JP Z,B1200
CP '6'
JP Z,B2400
CP '7'
JP Z,B4800
CP '8'
JP Z,B9600
CP '9'
JP Z,B19200
CALL ILPRTB
DB ' ',0
POP HL
JP NEXT ; Go get next byte from read buffer
B300: CALL ILPRTB
DB ' 3',0
JP BFINISH
B1200: CALL ILPRTB
DB ' 12',0
JP BFINISH
B2400: CALL ILPRTB
DB ' 24',0
JP BFINISH
B4800: CALL ILPRTB
DB ' 48',0
JP BFINISH
B9600: CALL ILPRTB
DB ' 96',0
JP BFINISH
B19200: CALL ILPRTB
DB ' 192',0
BFINISH:CALL ILPRTB
DB '00 bps ',0
POP HL
JP NEXT
;
; Display time and date
;
DSPDAT: LD A,(CLOCK) ; Clock enabled?
OR A
LD A,(COLUMN)
JP Z,SEND ; No, leave caller's name alone
CP 52
JP C,SEND ; Print the date
JP NZ,DSPTIM
CALL PRTSPC ; Keep our distance from next field
JP SEND
DSPTIM: CP 58
JP C,SEND ; Print the time
JP NZ,SEND
CALL PRTSPC ; Keep our distance from next field
;
; Display character in B
;
SEND: LD A,B ; Get the character back
CALL TYPE ; Display it
JP NEXT
;
; Reached end of entry. Send CR,LF and reset pointers
;
SENDLF: LD A,CR ; Output CR
CALL TYPE
LD A,LF ; And LF for next line
CALL TYPE
XOR A ; Enable page pauses for output
JP $+5
SENDLF1:LD A,1
CALL CKABRT ; Check for aborts/pauses
XOR A ; Start new line
LD (COLUMN),A ; And indicate column 0
LD DE,DBUF+80 ; Beginning of write buffer again
POP BC ; Number of characters left in buffer
POP HL ; Current read buffer address
POP AF ; Were there any characters left?
JP Z,NXTRCD ; No, get next record
JP WRTBYT ; Else get next character
;
; S u b r o u t i n e s
;-----------------------
;
; Routine to display a space - saves character in A on entry
;
PRTSPC: PUSH AF
LD A,' '
CALL TYPE
POP AF
RET
;
; Transfer is done - close destination file
;
TDONE: LD C,CLOSE
LD DE,FILE
CALL BDOS
CALL ERXIT
DB CR,LF
DB '-- End of listing','$'
;
RDERR: CALL ILPRTB
DB CR,LF
DB '-- Read Error: ',0
LD HL,FILE+1
CALL SHONM4
JP EXIT
;
;
; These next are just to satisfy ZMDSUBS external requests. Leave alone.
;
DONE:: JP EXIT
TIME:: RET
;
;
; Initialized storage area
;--------------------------
;
COLUMN: DB 0 ; Column of ZMD.LOG line
STORE: DB 0
SHOWALL:DB 0 ; 1=all transfers, 0=uploads only
END


298
Source/Apps/ZMD/znews.z80

@ -0,0 +1,298 @@
;
TITLE ZNEWS.Z80 - 09/29/88 - ZMD Sysop Transfer Log Utility
; Copyrighted (c) 1987, 1988
; Robert W. Kramer III
PAGE
;- -;
; Update History ;
; ;
; Date Release Comments ;
; -------- ------- ---------------------------------------------- ;
; ;
; 09/29/88 v1.50 - Fixed problem that caused a 'ZMD .L$$' file ;
; to not be deleted from directory after aborted ;
; sessions. ;
; - Also, was moving 9 filename bytes intead of 8, ;
; this is what caused the mysterious filename of ;
; '.L$$' as mentioned above. The filename left ;
; in the directory should have been '.$$$'. ;
; - Some minor cosmetic changes. ;
; 03/18/88 v1.49 - No change(s) made to this file ;
; 03/13/88 v1.48 - Redefined buffer table at end of programs. STACK;
; and filename buffers now EQUated with offsets ;
; from the last switch/toggle in program instead ;
; of with DS directive. ;
; 02/25/88 v1.47 - No change(s) made to this file
; 01/27/88 v1.46 - Some changes were made to ZMDSUBS file that are ;
; not directly related to this file ;
; 01/17/88 v1.45 - First public release ;
; 11/19/87 v1.00 - Initial version ;
;- -;
;
;-------------------------------------------------------------------------;
; EXTERNAL Declarations: |
;-------------------------------------------------------------------------;
EXTRN CASEFLG,CKABRT,CLEARIT,CMDBUF,DESC,DSTOR,DSTOR1,ERXIT
EXTRN EXIT,ILPRTB,INPUT,LNLNGTH,NOFILE,NOLOG,NOROOM,OLDDRV
EXTRN OLDUSR,OLINE,PRINTV,RECAR1,RECDR1,RENFCB,RERROR,RSDMA
EXTRN SHONM4,STACK,TDONE,UCASE
;
;-------------------------------------------------------------------------;
; Program Starts Here |
;-------------------------------------------------------------------------;
.Z80
ASEG
ORG 100H ; Program starts
JP BEGIN ; Jump around configuration table
INCLUDE ZMDHDR.Z80 ; Include the ZMD header overlay
.REQUEST ZMDSUBS ; Include the ZMD subroutines
;
;
; Save CP/M stack, initialize new one for this program
;
BEGIN: LD (STACK),SP ; Save current CCP stack address
LD SP,STACK ; Initialize new one for this program
;
; Get current drive/user area and store for later
;
LD A,255 ; Get current user area
CALL RECAR1
LD (OLDUSR),A ; Save it
LD C,CURDRV ; Get current drive
CALL BDOS
LD (OLDDRV),A ; Save it
;
; Display program name, version, and copyright notice
;
BEGIN1: LD HL,SYSNEW
CALL PRINTV
LD A,(LOGCAL) ; Log file enabled?
OR A
JP Z,NOLOG ; No, then don't run program
LD A,(GOTLAST) ; Already located last entry?
OR A
JP NZ,GTNEW ; Yes, then just show it
LD (DESWAIT),A ; Disable sleepy caller time out
CALL ILPRTB
DB 'Working.',0
;
; Log into log file drive/user
;
LD A,(LOGUSR) ; User area to find ZMD.LOG
CALL RECAR1
LD A,(LOGDRV) ; Drive to find ZMD.LOG
CALL RECDR1
;
; Open 'ZMD .LOG' file
;
LD DE,LOGNAM ; Current log filename
LD HL,FILE ; Internal FCB
CALL RENFCB ; Initialize
LD DE,FILE
LD C,OPEN ; Open log file
CALL BDOS
INC A ; ZMD.LOG file exist?
LD HL,LOGNAM
JP Z,NOFILE ; No, inform user and exit to CP/M
;
; Open 'ZMD .$$$' file
;
LD DE,TEMPFIL ; Current '$$$' filename
LD HL,DEST ; Internal FCB
CALL RENFCB ; Initialize
LD HL,FILE+1 ; Point to log filename
LD DE,DEST+1 ; And temporary filename
LD BC,8 ; Set to move filename bytes only
LDIR
LD C,OPEN ; Open new log file
LD DE,DEST
CALL BDOS
INC A ; Did file already exist?
LD C,DELETE ; Prepare for delete
LD DE,DEST
CALL NZ,BDOS ; Yes, delete existing file
LD C,MAKE ; Make new temporary file
LD DE,DEST
CALL BDOS
INC A
LD HL,DEST+1
JP Z,NOROOM ; Exit if no more disk space
;
; Read record from ZMD.LOG file
;
LD DE,CMDBUF ; Point to last log entry buffer
RDRECD: PUSH DE ; Save current buffer position
CALL RSDMA ; Reset DMA
LD DE,FILE
LD C,READ
CALL BDOS
POP DE ; Last entry buffer address
OR A ; Read ok?
JP NZ,RERROR ; No
;
; Now look for the end of the file overwriting OLINE with each entry found
; (from LF to LF). Upon ^Z (EOF) display last entry and get prompt for new
; one
;
LD HL,TBUF
WRDLP: LD A,(HL) ; Get a character
AND 7FH
CP 7FH ; Delete character?
JP Z,NEXT ; Yes, don't store this character
CP EOF ; End of file?
JP Z,GTNEW ; Yes, display last entry and get new one
LD (DE),A ; Else store character in last entry buffer
INC DE ; Next positition in last entry buffer
CP LF ; Was it a line feed?
JP NZ,NEXT ; No, get next character
;
; Check periodically (every LF) for user abort
;
LD A,1 ; Disable page pausing
CALL CKABRT ; Check for user requests
LD A,'$' ; Terminator for BDOS print function
LD (DE),A ; At end of last entry string
PUSH HL
LD HL,CMDBUF
CALL DSTOR1
POP HL
LD DE,CMDBUF
NEXT: INC L
JP Z,RDRECD
JP WRDLP
;
; Get new entry to ZMD.LOG. First display the last entry added to the file
; for use as a typing guide.
;
GTNEW: CALL ILPRTB
DB CR
DB 'Current format of ',0
LD HL,LOGNAM ; Point to log filename
CALL SHONM4
CALL SHWLAST ; Show last entry in log file
LD A,1
LD (GOTLAST),A ; Show we've found/displayed last entry
;
; Get the new entry. Process input - CR terminates entry.
;
LD A,79
LD (LNLNGTH+1),A ; Set for up to 79 character string
LD (WRAP),A ; Disable word wrap
LD (CASEFLG),A ; Convert all input to uppercase
CALL DESC ; Go get string
LD A,0
LD (CASEFLG),A ; Disable uppercase lock
JP Z,NOCHANG ; Z=CR entered on blank line
LD (HL),'$' ; Place a '$' for BDOS print function
;
; Done with entry, ask for verification before writing to disk
;
CALL ILPRTB
DB CR,LF
DB ' Repeating to verify:',0
CALL SHWLAST ; Show last entry
LD DE,OLINE ; Point to new entry buffer
LD C,PRINT ; BDOS print function
CALL BDOS
CALL ILPRTB
DB CR,LF
DB 'Correct? (Y/N): ',0
GETOK1: CALL INPUT ; Get repsonse
CALL UCASE ; Convert to uppercase
CP 'N' ; No?
JP NZ,GETOK2 ; Yes, all done
CALL ILPRTB
DB 'No.'
DB CR,LF,0
JP BEGIN1
GETOK2: CP 'Y' ; Yes?
JP NZ,GETOK1 ; Loop until we get a yes or no
CALL ILPRTB
DB CR
DB 'Writing log entry to ',0
LD HL,LOGNAM
CALL SHONM4
CALL ILPRTB
DB '...',0
CALL DSTOR ; Go store it in disk buffer
JP TDONE ; Transfer to disk
;
;
;-------------------
; UTILITIES SECTION
;-------------------
;
NOCHANG:CALL ILPRTB ; Else nothing typed, abort
DB CR,LF
DB '-- Log entry aborted... ',0
LD C,DELETE
LD DE,DEST
CALL BDOS ; Clean up (Erase 'ZMD .$$$' file)
JP EXIT
;
; Show last entry in ZMD.LOG file
;
SHWLAST:CALL ILPRTB
DB CR,LF,LF,0
LD DE,CMDBUF ; Point to last entry buffer
LD C,PRINT ; BDOS print function
JP BDOS
;
; These next are just dummy routines to satisfy external ZMDSUBS requests.
; They do nothing but leave alone.
;
DONE:: JP EXIT
TIME:: RET
GOTLAST:DB 0
END


5
Source/Images/Build.cmd

@ -1,13 +1,16 @@
@echo off
setlocal
::call BuildDisk.cmd bp wbw_hd512 || exit /b
::goto :eof
echo.
echo Building Floppy Disk Images...
echo.
call BuildDisk.cmd cpm22 wbw_fd144 ..\cpm22\cpm_wbw.sys || exit /b
call BuildDisk.cmd zsdos wbw_fd144 ..\zsdos\zsys_wbw.sys || exit /b
::call BuildDisk.cmd nzcom wbw_fd144 ..\zsdos\zsys_wbw.sys || exit /b
call BuildDisk.cmd cpm3 wbw_fd144 ..\cpm3\cpmldr.sys || exit /b
::call BuildDisk.cmd cpm3 wbw_fd144 ..\cpm3\cpmldr.sys || exit /b
::call BuildDisk.cmd zpm3 wbw_fd144 ..\cpm3\cpmldr.sys || exit /b
call BuildDisk.cmd ws4 wbw_fd144 || exit /b

3
Source/Images/Makefile

@ -3,8 +3,7 @@
#
SYSTEMS = ../CPM22/cpm_wbw.sys ../ZSDOS/zsys_wbw.sys ../CPM3/cpmldr.sys
FDIMGS = fd144_cpm22.img fd144_zsdos.img \
fd144_cpm3.img fd144_ws4.img
FDIMGS = fd144_cpm22.img fd144_zsdos.img fd144_ws4.img
HD512IMGS = hd512_cpm22.img hd512_zsdos.img hd512_nzcom.img \
hd512_cpm3.img hd512_zpm3.img hd512_ws4.img
# HDIMGS += hd512_bp.img

2
Source/Images/d_bp.txt

@ -31,6 +31,8 @@
../../Binary/Apps/zmterm.ovr 15:
../../Binary/Apps/zminit.ovr 15:
../../Binary/Apps/zmconfig.ovr 15:
../../Binary/Apps/zmd.com 15:
#
#../../Binary/Apps/i2clcd.com 2:
#../../Binary/Apps/i2cscan.com 2:

1
Source/Images/d_cpm22.txt

@ -27,6 +27,7 @@ d_cpm22/ReadMe.txt 0:
../../Binary/Apps/zmterm.ovr 0:
../../Binary/Apps/zminit.ovr 0:
../../Binary/Apps/zmconfig.ovr 0:
../../Binary/Apps/zmd.com 0:
#
#../../Binary/Apps/i2clcd.com 2:
#../../Binary/Apps/i2cscan.com 2:

1
Source/Images/d_cpm3.txt

@ -43,6 +43,7 @@
../../Binary/Apps/zmterm.ovr 0:
../../Binary/Apps/zminit.ovr 0:
../../Binary/Apps/zmconfig.ovr 0:
../../Binary/Apps/zmd.com 0:
#
#../../Binary/Apps/i2clcd.com 2:
#../../Binary/Apps/i2cscan.com 2:

1
Source/Images/d_nzcom.txt

@ -44,6 +44,7 @@ d_zsdos/u0/*.* 0:
../../Binary/Apps/zmterm.ovr 0:
../../Binary/Apps/zminit.ovr 0:
../../Binary/Apps/zmconfig.ovr 0:
../../Binary/Apps/zmd.com 0:
#
#../../Binary/Apps/i2clcd.com 2:
#../../Binary/Apps/i2cscan.com 2:

1
Source/Images/d_zpm3.txt

@ -42,6 +42,7 @@
../../Binary/Apps/zmterm.ovr 15:
../../Binary/Apps/zminit.ovr 15:
../../Binary/Apps/zmconfig.ovr 15:
../../Binary/Apps/zmd.com 15:
#
#../../Binary/Apps/i2clcd.com 2:
#../../Binary/Apps/i2cscan.com 2:

1
Source/Images/d_zsdos.txt

@ -40,6 +40,7 @@ d_cpm22/u0/XSUB.COM 0:
../../Binary/Apps/zmterm.ovr 0:
../../Binary/Apps/zminit.ovr 0:
../../Binary/Apps/zmconfig.ovr 0:
../../Binary/Apps/zmd.com 0:
#
#../../Binary/Apps/i2clcd.com 2:
#../../Binary/Apps/i2cscan.com 2:

2
Source/ver.inc

@ -2,4 +2,4 @@
#DEFINE RMN 1
#DEFINE RUP 1
#DEFINE RTP 0
#DEFINE BIOSVER "3.1.1-pre.125"
#DEFINE BIOSVER "3.1.1-pre.126"

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 1
rup equ 1
rtp equ 0
biosver macro
db "3.1.1-pre.125"
db "3.1.1-pre.126"
endm

Loading…
Cancel
Save