mirror of https://github.com/wwarthen/RomWBW.git
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
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
|
|
|