You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

215 lines
7.3 KiB

#ifndef _HTC_CPM_H
#define _HTC_CPM_H
/* Header file for CP/M routines for Z-80 C */
/* get basic definitions */
#ifndef _STDDEF
typedef int ptrdiff_t; /* result type of pointer difference */
typedef unsigned size_t; /* type yielded by sizeof */
#define _STDDEF
#ifndef NULL
#define NULL ((void *)0)
#endif NULL
extern int errno; /* system error number */
#endif _STDDEF
/* hitech.h has definitions for uchar, ushort etc */
#include <hitech.h>
#if z80
#define MAXFILE 8 /* max number of files open */
#else z80
#define MAXFILE 15 /* max number of files open */
#endif z80
#define SECSIZE 128 /* no. of bytes per sector */
extern struct fcb
{
uchar dr; /* 0: drive code */
char name[8]; /* 1: file name */
char ft[3]; /* 9: file type */
uchar ex; /* 12: file extent */
char fil[2]; /* 13: not used */
char rc; /* 15: number of records in present extent */
char dm[16]; /* 16: CP/M disk map */
char nr; /* 32: next record to read or write */
uchar ranrec[3]; /* 35: random record number (24 bit no.) */
long rwp; /* 38: read/write pointer in bytes */
uchar use; /* 42: use flag */
uchar uid; /* 43: user id belonging to this file */
long fsize; /* 44: file length in bytes */
} _fcb[MAXFILE];
extern short bdos(int, ...);
#define bdoshl bdos
#define bdose bdos
extern struct fcb* getfcb(void);
extern char * fcbname(short i);
extern short getuid(void);
extern short setuid(short);
extern uchar setfcb(struct fcb *, char *);
extern char * (*_passwd)(struct fcb *);
extern short bios(short fn, ...);
#define bios3 bios
/* flag values in fcb use */
#define U_READ 1 /* file open for reading */
#define U_WRITE 2 /* file open for writing */
#define U_RDWR 3 /* open for read and write */
#define U_CON 4 /* device is console */
#define U_RDR 5 /* device is reader */
#define U_PUN 6 /* device is punch */
#define U_LST 7 /* list device */
#define U_RSX 8 /* PIPEMGR RSX */
#define U_ERR 9 /* PIPEMGR stderr channel */
/* special character values */
#define CPMETX 032 /* ctrl-Z, CP/M end of file for text */
#define CPMRBT 003 /* ctrl-C, reboot CPM */
/* operating systems */
#define MPM 0x100 /* bit to test for MP/M */
#define CCPM 0x400 /* bit to test for CCP/M */
#define ISMPM() (bdoshl(CPMVERS)&MPM) /* macro to test for MPM */
/* what to do after you hit return */
#define EXIT (*(int (*)())0) /* where to go to reboot CP/M */
/* BDOS calls etc. */
#define CPMRCON 1 /* read console */
#define CPMWCON 2 /* write console */
#define CPMRRDR 3 /* read reader */
#define CPMWPUN 4 /* write punch */
#define CPMWLST 5 /* write list */
#define CPMDCIO 6 /* direct console I/O */
#define CPMGIOB 7 /* get I/O byte */
#define CPMSIOB 8 /* set I/O byte */
#define CPMWCOB 9 /* write console buffered */
#define CPMRCOB 10 /* read console buffered */
#define CPMICON 11 /* interrogate console ready */
#define CPMVERS 12 /* return version number */
#define CPMRDS 13 /* reset disk system */
#define CPMLGIN 14 /* log in and select disk */
#define CPMOPN 15 /* open file */
#define CPMCLS 16 /* close file */
#define CPMFFST 17 /* find first */
#define CPMFNXT 18 /* find next */
#define CPMDEL 19 /* delete file */
#define CPMREAD 20 /* read next record */
#define CPMWRIT 21 /* write next record */
#define CPMMAKE 22 /* create file */
#define CPMREN 23 /* rename file */
#define CPMILOG 24 /* get bit map of logged in disks */
#define CPMIDRV 25 /* interrogate drive number */
#define CPMSDMA 26 /* set DMA address for i/o */
#define CPMGALL 27 /* get allocation vector address */
#define CPMWPRD 28 /* write protect disk */
#define CPMGROV 29 /* get read-only vector */
#define CPMSATT 30 /* set file attributes */
#define CPMDPB 31 /* get disk parameter block */
#define CPMSUID 32 /* set/get user id */
#define CPMRRAN 33 /* read random record */
#define CPMWRAN 34 /* write random record */
#define CPMCFS 35 /* compute file size */
#define CPMSRAN 36 /* set random record */
#define CPMRDRV 37 /* reset drive */
#define CPMACDV 38 /* MP/M access drive */
#define CPMFRDV 39 /* MP/M free drive */
#define CPMWRZF 40 /* write random with zero fill */
#define CPMTWR 41 /* MP/M test and write record */
#define CPMLOKR 42 /* MP/M lock record */
#define CPMUNLR 43 /* MP/M unlock record */
#define CPMSMSC 44 /* CP/M+ set multi-sector count */
#define CPMERRM 45 /* CP/M+ set BDOS error mode */
#define CPMDFS 46 /* CP/M+ get disk free space */
#define CPMCHN 47 /* CP/M+ chain to program */
#define CPMFLSH 48 /* CP/M+ flush buffers */
#define CPMGZSD 48 /* ZSDOS get ZSDOS/ZDDOS version */
#define CPMSCB 49 /* access CP/M+ system control block */
#define CPMBIOS 50 /* CP/M+ direct BIOS call */
#define CPMDSEG 51 /* set DMA segment */
#define CPMGFTM 54 /* Z80DOS/ZPM3 get file time-stamp */
#define CPMSFTM 55 /* Z80DOS/ZPM3 set file time-stamp */
#define CPMLDOV 59 /* CP/M+ Load Overlay - requires LOADER RSX */
#define CPMRSX 60 /* CP/M+ call RSX */
#define CPMLGI 64 /* CP/Net login */
#define CPMLGO 65 /* CP/Net logout */
#define CPMSMSG 66 /* CP/Net send message */
#define CPMRMSG 67 /* CP/Net receive message */
#define CPMNETS 68 /* CP/Net get network status */
#define CPMGCFT 69 /* CP/Net get configuration table address */
#define CPMSCAT 70 /* CP/Net set compatibility attributes */
#define CPMGSVC 71 /* CP/Net get server configuration */
#define CPMFRBL 98 /* CP/M+ free blocks */
#define CPMTRNC 99 /* CP/M+ truncate file */
#define CPMSLBL 100 /* CP/M+ set directory label */
#define CPMDLD 101 /* CP/M+ get directory label data */
#define CPMGFTS 102 /* CP/M+ get file timestamp and password mode */
#define CPMWXFC 103 /* CP/M+ write file XFCB */
#define CPMSDAT 104 /* CP/M+ set date and time */
#define CPMGDAT 105 /* CP/M+ get date and time */
#define CPMSPWD 106 /* CP/M+ set default password */
#define CPMGSER 107 /* CP/M+ get serial number */
#define CPMRCOD 108 /* CP/M+ get/set return code */
#define CPMCMOD 109 /* CP/M+ get/set console mode */
#define CPMODEL 110 /* CP/M+ get/set output delimiter */
#define CPMPBLK 111 /* CP/M+ print block */
#define CPMLBLK 112 /* CP/M+ list block */
#define CPMPARS 152 /* CP/M+ parse filename */
/* CP/M BIOS functions. Numbers above 16 pertain to CP/M 3 only. */
enum BIOSfns
{
_BOOT = 0,
_WBOOT = 1,
_CONST = 2,
_CONIN = 3,
_CONOUT = 4,
_LIST = 5,
_PUNOUT = 6, /* CP/M 2.2 name */
_AUXOUT = 6, /* CP/M 3.1 name */
_RDRIN = 7, /* CP/M 2.2 name */
_AUXIN = 7, /* CP/M 3.1 name */
_LISTST = 15,
_CONOST = 17,
_AUXIST = 18,
_AUXOST = 19,
_DEVTBL = 20,
_DEVINI = 21,
_DRVTBL = 22,
_HOME = 8,
_SELDSK = 9,
_SETTRK = 10,
_SETSEC = 11,
_SETDMA = 12,
_READ = 13,
_WRITE = 14,
_SECTRN = 16,
_MULTIO = 23,
_FLUSH = 24,
_MOVE = 25,
_SELMEM = 27,
_SETBNK = 28,
_XMOVE = 29,
_TIME = 26,
_USERF = 30
};
#endif