From 82351f2c5fb4c3ad7ce7e1034769fac3564efdfc Mon Sep 17 00:00:00 2001 From: wayne Date: Sat, 8 Jun 2013 04:58:34 +0000 Subject: [PATCH] Reintegrate wbw -> trunk --- Apps/Source/Build.cmd | 24 +- Apps/Source/applvers.h | 6 +- Apps/Source/applvers.lib | 8 +- Apps/Source/cnfgdata.h | 2 +- Apps/Source/cpmbdos.h | 1 + Apps/Source/cpmname.c | 13 +- Apps/Source/infolist.h | 2 +- Apps/Source/map.c | 3 +- Apps/Source/memory.asm | 2 +- Apps/Source/meta.c | 13 +- Apps/Source/multifmt.c | 13 +- Apps/Source/setlabel.asm | 1 - Apps/Source/termtype.c | 287 +------------------ Apps/Source/view.c | 74 ++--- Doc/ChangeLog.txt | 2 + ReadMe.txt | 4 +- RomDsk/cfg_n8vem_mfp/1200.COM | Bin 0 -> 128 bytes RomDsk/cfg_n8vem_mfp/38400.COM | Bin 0 -> 128 bytes RomDsk/cfg_n8vem_mfp/9600.COM | Bin 0 -> 128 bytes RomDsk/cfg_n8vem_mfp/FLASHZ.COM | Bin 0 -> 800 bytes RomDsk/cfg_n8vem_mfp/LDTIM.COM | Bin 0 -> 3584 bytes RomDsk/cfg_n8vem_mfp/RTC.COM | Bin 0 -> 2048 bytes RomDsk/cfg_n8vem_mfp/T5.COM | Bin 0 -> 96 bytes RomDsk/cfg_n8vem_mfp/VT3.COM | Bin 0 -> 1278 bytes RomDsk/cfg_n8vem_mfp/XM.COM | Bin 0 -> 5375 bytes RomDsk/cfg_n8vem_mfp/XM5.COM | Bin 0 -> 3072 bytes RomList.txt | 32 ++- Source/bootapp.asm | 2 +- Source/bootrom.asm | 2 +- Source/cbios.asm | 18 +- Source/config_n8_2312.asm | 2 +- Source/config_n8_2511.asm | 2 +- Source/config_n8vem_ci.asm | 4 +- Source/config_n8vem_cvdu.asm | 2 +- Source/config_n8vem_dide.asm | 2 +- Source/config_n8vem_diskio.asm | 2 +- Source/config_n8vem_diskio3.asm | 2 +- Source/config_n8vem_dsd.asm | 2 +- Source/config_n8vem_mfp.asm | 102 +++++++ Source/config_n8vem_ppide.asm | 2 +- Source/config_n8vem_ppisd.asm | 2 +- Source/config_n8vem_propio.asm | 2 +- Source/config_n8vem_simh.asm | 2 +- Source/config_n8vem_std.asm | 2 +- Source/config_n8vem_vdu.asm | 2 +- Source/config_zeta_ppp.asm | 2 +- Source/config_zeta_std.asm | 2 +- Source/ppide.asm | 15 +- Source/std.asm | 1 + Source/syscfg.asm | 2 +- Source/uart.asm | 486 ++++++++++++++++++++++++++------ Source/ver.inc | 4 +- 52 files changed, 657 insertions(+), 496 deletions(-) create mode 100644 RomDsk/cfg_n8vem_mfp/1200.COM create mode 100644 RomDsk/cfg_n8vem_mfp/38400.COM create mode 100644 RomDsk/cfg_n8vem_mfp/9600.COM create mode 100644 RomDsk/cfg_n8vem_mfp/FLASHZ.COM create mode 100644 RomDsk/cfg_n8vem_mfp/LDTIM.COM create mode 100644 RomDsk/cfg_n8vem_mfp/RTC.COM create mode 100644 RomDsk/cfg_n8vem_mfp/T5.COM create mode 100644 RomDsk/cfg_n8vem_mfp/VT3.COM create mode 100644 RomDsk/cfg_n8vem_mfp/XM.COM create mode 100644 RomDsk/cfg_n8vem_mfp/XM5.COM create mode 100644 Source/config_n8vem_mfp.asm diff --git a/Apps/Source/Build.cmd b/Apps/Source/Build.cmd index 0bc71d5f..22460468 100644 --- a/Apps/Source/Build.cmd +++ b/Apps/Source/Build.cmd @@ -15,13 +15,15 @@ echo Building DWG.REL... echo. set TGT=dwg.rel if exist %TGT% del %TGT% -zx rmac printers -zx rmac memory -zx rmac banner -zx rmac terminal -zx rmac identity -zx rmac hbios -zx lib %TGT%=printers,memory,banner,terminal,identity,hbios +zx rmac printers.asm -$PN +zx rmac memory.asm -$PN +zx rmac banner.asm -$PN +zx rmac terminal.asm -$PN +zx rmac identity.asm -$PN +zx rmac hbios.asm -$PN +ZX rmac labelib.asm -$PN +zx rmac metadata.asm -$PN +zx lib %TGT%=printers,memory,banner,terminal,identity,hbios,labelib,metadata if not exist %TGT% echo *** Failed to build %TGT% *** && pause echo. @@ -52,7 +54,7 @@ echo Building ACCESS.COM... echo. set TGT=access.com if exist %TGT% del %TGT% -zx rmac access +zx rmac access.asm -$PN zx link access,dwg if not exist %TGT% echo *** Failed to build %TGT% *** && pause @@ -71,7 +73,7 @@ echo Building FINDFILE.COM... echo. set TGT=findfile.com if exist %TGT% del %TGT% -zx rmac findfile +zx rmac findfile.asm -$PN zx link findfile,dwg if not exist %TGT% echo *** Failed to build %TGT% *** && pause @@ -110,7 +112,7 @@ echo Building REM.COM... echo. set TGT=rem.com if exist %TGT% del %TGT% -zx rmac rem +zx rmac rem.asm -$PN zx link rem if not exist %TGT% echo *** Failed to build %TGT% *** && pause @@ -119,7 +121,7 @@ echo Building SETLABEL.COM... echo. set TGT=setlabel.com if exist %TGT% del %TGT% -zx rmac setlabel +zx rmac setlabel.asm -$PN zx link setlabel,dwg if not exist %TGT% echo *** Failed to build %TGT% *** && pause diff --git a/Apps/Source/applvers.h b/Apps/Source/applvers.h index 730953e5..cf162f5a 100644 --- a/Apps/Source/applvers.h +++ b/Apps/Source/applvers.h @@ -5,10 +5,10 @@ #define A_RMJ 2 #define A_RMN 5 #define A_RUP 0 -#define A_RTP 12 +#define A_RTP 13 -#define A_MONTH 5 -#define A_DAY 24 +#define A_MONTH 6 +#define A_DAY 7 #define A_YEAR 2013 #define A_YR 13 diff --git a/Apps/Source/applvers.lib b/Apps/Source/applvers.lib index bff8bf9a..b5f4af68 100644 --- a/Apps/Source/applvers.lib +++ b/Apps/Source/applvers.lib @@ -3,14 +3,14 @@ A$RMJ equ 2 A$RMN equ 5 A$RUP equ 0 -A$RTP equ 12 +A$RTP equ 13 -A$MONTH equ 5 -A$DAY equ 24 +A$MONTH equ 6 +A$DAY equ 7 A$YEAR equ 2013 date macro -dat db ' 5/24/2013$' +dat db ' 6/7/2013$' endm serial macro diff --git a/Apps/Source/cnfgdata.h b/Apps/Source/cnfgdata.h index eb1d15f8..b6737102 100644 --- a/Apps/Source/cnfgdata.h +++ b/Apps/Source/cnfgdata.h @@ -94,7 +94,7 @@ struct CNFGDATA { unsigned int idecapacity; unsigned char ppideenable; - unsigned char ppidemode; + unsigned char ppideiob; unsigned char ppidetrace; unsigned char ppide8bit; unsigned int ppidecapacity; diff --git a/Apps/Source/cpmbdos.h b/Apps/Source/cpmbdos.h index 5ee0c55f..ef1f5e26 100644 --- a/Apps/Source/cpmbdos.h +++ b/Apps/Source/cpmbdos.h @@ -34,6 +34,7 @@ #define RESETDRIVE 37 #define WRRANDFILL 38 +#define BDOSDEFDR 0 /* BDOS Default (current) Drive Number */ #define BDOSDRA 1 #define BDOSDRB 2 #define BDOSDRC 3 diff --git a/Apps/Source/cpmname.c b/Apps/Source/cpmname.c index c27b8855..d900b844 100644 --- a/Apps/Source/cpmname.c +++ b/Apps/Source/cpmname.c @@ -12,9 +12,11 @@ #define GETSYSCFG 0xF000 /* HBIOS function for Get System Configuration */ char None[] = "*None*"; +char Unk[] = "*Unknown*"; char * PltName[] = {None, "N8VEM Z80", "ZETA Z80", "N8 Z180"}; char * CIOName[] = {"UART", "ASCI", "VDU", "CVDU", "UPD7220", - "N8V", "PRPCON", "PPPCON", "CRT", "BAT", "NUL"}; + "N8V", "PRPCON", "PPPCON", Unk, Unk, Unk, Unk, Unk, + "CRT", "BAT", "NUL"}; char * DIOName[] = {"MD", "FD", "IDE", "ATAPI", "PPIDE", "SD", "PRPSD", "PPPSD", "HDSK"}; char * VDAName[] = {None, "VDU", "CVDU", "UPD7220", "N8V"}; @@ -123,8 +125,9 @@ prtcfg1(pSysCfg) pager(); pager(); - printf("Console: Default=%s, Alternate=%s, Init Baudrate=%d0", - CIOName[pCfg->defcon], CIOName[pCfg->altcon], + printf("Console: Default=%s:%d, Alternate=%s:%d, Init Baudrate=%d0", + CIOName[(pCfg->defcon) >> 4], pCfg->defcon & 0xF, + CIOName[(pCfg->altcon) >> 4], pCfg->altcon & 0xF, pCfg->conbaud); pager(); printf ("Default Video Display: %s, Default Emulation: %s", @@ -208,8 +211,8 @@ prtcfg2(pSysCfg) fmtenable(pCfg->ideenable), IDEModeName[pCfg->idemode], pCfg->idetrace, fmtbool(pCfg->ide8bit), pCfg->idecapacity); pager(); - printf("PPIDE %s, Mode=%s, TraceLevel=%d, 8bit=%s, Slow=%s, Size=%dMB", - fmtenable(pCfg->ppideenable), IDEModeName[pCfg->ppidemode], + printf("PPIDE %s, IOBase=0x%s, TraceLevel=%d, 8bit=%s, Slow=%s, Size=%dMB", + fmtenable(pCfg->ppideenable), fmthexbyte(pCfg->ppideiob, buf), pCfg->ppidetrace, fmtbool(pCfg->ppide8bit), fmtbool(pCfg->ppideslow), pCfg->ppidecapacity); pager(); diff --git a/Apps/Source/infolist.h b/Apps/Source/infolist.h index 38ccd4e3..a98c004b 100644 --- a/Apps/Source/infolist.h +++ b/Apps/Source/infolist.h @@ -8,7 +8,7 @@ struct INFOLIST { void * dpbmap; void * dphmap; void * ciomap; -} * pINFOLIST; +}; /********************/ /* eof - infolist.h */ diff --git a/Apps/Source/map.c b/Apps/Source/map.c index 6c59be75..91a83dcb 100644 --- a/Apps/Source/map.c +++ b/Apps/Source/map.c @@ -238,8 +238,7 @@ int main(argc,argv) char szDrive[32]; char szLuNum[32]; char szWP[2]; - - + struct INFOLIST * pINFOLIST; if(argc == 3) { diff --git a/Apps/Source/memory.asm b/Apps/Source/memory.asm index 314d0a95..b8cff4ed 100644 --- a/Apps/Source/memory.asm +++ b/Apps/Source/memory.asm @@ -1,5 +1,5 @@ ; memory.asm 2/1/2012 dwg - memory library implementation -; maclib z80 + maclib z80 ;memcpy macro h=src,d==dst,bc=size public x$memcpy diff --git a/Apps/Source/meta.c b/Apps/Source/meta.c index 6baa3550..add52dbd 100644 --- a/Apps/Source/meta.c +++ b/Apps/Source/meta.c @@ -1,6 +1,5 @@ /* meta.c 6/7/2012 dwg - view and edit the metadata */ - #include "stdio.h" #include "portab.h" #include "globals.h" @@ -47,10 +46,10 @@ display() rdsector(drive,0,11,&metadata); crtlc(METALINE+0,METACOL); - printf("metadata.signature = 0x%04x",metadata.signature); + printf("metadata.signature = 0x%x",metadata.signature); crtlc(METALINE+1,METACOL); - printf("metadata.platform = 0x%02x",metadata.platform); + printf("metadata.platform = 0x%x",metadata.platform); crtlc(METALINE+2,METACOL); printf("metadata.formatter = \""); @@ -93,16 +92,16 @@ display() } printf("\""); crtlc(METALINE+9,METACOL); - printf("metadata.infloc = 0x%04x",metadata.infloc); + printf("metadata.infloc = 0x%x",metadata.infloc); crtlc(METALINE+10,METACOL); - printf("metadata.cpmloc = 0x%04x",metadata.cpmloc); + printf("metadata.cpmloc = 0x%x",metadata.cpmloc); crtlc(METALINE+11,METACOL); - printf("metadata.cpmend = 0x%04x",metadata.cpmend); + printf("metadata.cpmend = 0x%x",metadata.cpmend); crtlc(METALINE+12,METACOL); - printf("metadata.cpment = 0x%04x",metadata.cpment); + printf("metadata.cpment = 0x%x",metadata.cpment); } diff --git a/Apps/Source/multifmt.c b/Apps/Source/multifmt.c index 60f21596..5f6e7576 100644 --- a/Apps/Source/multifmt.c +++ b/Apps/Source/multifmt.c @@ -219,7 +219,7 @@ clrdir(line,col) if(-1 != line) { crtlc(line,col-1); - printf("%3d",sectors-sector); + printf("%d",sectors-sector); } wrsector(gDrvNum,pDPB->off,sector,e5buffer,1); @@ -283,7 +283,7 @@ physfmt(lu) /* LU is not protected or override is enabled */ if(0==gTT) { - printf("Formatting LU# %3d%c",lu,0x0d); + printf("Formatting LU# %d%c",lu,0x0d); clrmeta(lu,-1,-1); clrdir(-1,-1); } else { @@ -291,14 +291,14 @@ physfmt(lu) line = lu / 16; crtlc(26-16-4+line,0); - printf("%3d...",lu & 0xf0); + printf("%d...",lu & 0xf0); col = lu & 15; clrmeta(lu,24-16-2+line,((80-64)/2)+(col*4)+1); clrdir( 24-16-2+line,((80-64)/2)+(col*4)+1); - crtlc(24-16-2+line,((80-64)/2)+(col*4)+1); - printf("OK"); + crtlc(24-16-2+line,((80-64)/2)+(col*4)); + printf(" OK"); } return TRUE; @@ -317,7 +317,7 @@ lformat() if(0 != gTT) { for(index=0;index<16;index++) { crtlc(24-16-2-2,((80-64)/2)+(index*4)); - printf("+%2d",index); + printf("+%d",index); } for(index=0;index<16;index++) { crtlc(24-16-2-1,((80-64)/2)+(index*4)); @@ -438,6 +438,7 @@ main(argc,argv) char *argv[]; { int retcode; + struct INFOLIST * pINFOLIST; hregbc = GETSYSCFG; /* function = Get System Config */ hregde = HIGHSEG; /* addr of dest (must be high) */ diff --git a/Apps/Source/setlabel.asm b/Apps/Source/setlabel.asm index 2b381094..66121cb2 100644 --- a/Apps/Source/setlabel.asm +++ b/Apps/Source/setlabel.asm @@ -64,7 +64,6 @@ around$bandata: printf 'Sorry, you can only label drives with reserved tracks' jmp main$exit off$ok: - lda drive$num ; using the default drive number mov c,a ; (presented in the C register) call x$label ; call the actual code in labelib.asm diff --git a/Apps/Source/termtype.c b/Apps/Source/termtype.c index 70b481de..1bbdb16d 100644 --- a/Apps/Source/termtype.c +++ b/Apps/Source/termtype.c @@ -2,292 +2,21 @@ #include "stdio.h" #include "applvers.h" - -/* declarations for HBIOS access */ -extern char hrega; -extern unsigned int hregbc; -extern unsigned int hregde; -extern unsigned int hreghl; -extern diagnose(); - -/* declaration dir BIOS and BDOS and low level calls */ -extern char xrega; -extern unsigned int xregbc; -extern unsigned int xregde; -extern unsigned int xreghl; -extern asmif(); /* asmif(0x0E6**,bc,de,hl); */ +#include "infolist.h" +#include "cnfgdata.h" +#include "syscfg.h" +#include "diagnose.h" +#include "asmiface.h" +#include "cpmbdos.h" +#include "cpmbios.h" #define BDOS 5 /* memory address of BDOS invocation */ -#define PRIFCB 0x5C /* memory address of primary FCB */ -#define SECFCB 0x6C /* memory address of secondary FCB */ -#define DEFBUF 0x80 /* memory address of default buffer */ #define HIGHSEG 0x0C000 /* memory address of system config */ #define GETSYSCFG 0x0F000 /* HBIOS function for Get System Configuration */ #define PUTSYSCFG 0x0F100 /* HBIOS function for Put System Configuration */ -#define TERMCPM 0 /* BDOS function for System Reset */ -#define CONIN 1 /* BDOS function for Console Input */ -#define CWRITE 2 /* BDOS function for Console Output */ -#define DIRCONIO 6 /* BDOS function for Direct Console I/O */ -#define PRINTSTR 9 /* BDOS function for Print String */ -#define RDCONBUF 10 /* BDOS function for Buffered Console Read */ -#define GETCONST 11 /* BDOS function for Get Console Status */ -#define RETVERNUM 12 /* BDOS function for Return Version Number */ -#define RESDISKSYS 13 /* BDOS function for Reset Disk System */ -#define SELECTDISK 14 /* BDOS function for Select Disk */ -#define FOPEN 15 /* BDOS function for File Open */ -#define FCLOSE 16 /* BDOS function for File Close */ -#define SEARCHFIRST 17 /* BDOS function for Search First */ -#define SEARCHNEXT 18 /* BDOS function for Search Next */ -#define FDELETE 19 /* BDOS function for File Delete */ -#define FREADSEQ 20 /* BDOS function for File Read Sequential */ -#define FWRITESEQ 21 /* BDOS function for File Write Sequential */ -#define FMAKEFILE 22 /* BDOS function for File Make */ -#define FRENAME 23 /* BDOS function for File Rename */ -#define RETLOGINVEC 24 /* BDOS function for Return Login Vector */ -#define RETCURRDISK 25 /* BDOS function for Return Current Disk */ -#define SETDMAADDR 26 /* BDOS function for Set DMA Address */ -#define GETALLOCVEC 27 /* BDOS function for Get Allocation Vector */ -#define WRPROTDISK 28 /* BDOS function for Write Protect Disk */ -#define GETROVECTOR 29 /* BDOS function for Get Read Only Vector */ -#define FSETATTRIB 30 /* BDOS function for File Set Attribute */ -#define GETDPBADDR 31 /* BDOS function for Get DPB Address */ -#define SETGETUSER 32 /* BDOS function for Set & Get User Number */ -#define FREADRANDOM 33 /* BDOS function for File Read Random */ -#define FWRITERAND 34 /* BDOS function for File Write Random */ -#define FCOMPSIZE 35 /* BDOS function for File Compare Size */ -#define SETRANDREC 36 /* BDOS function for Set Random Record # */ -#define RESETDRIVE 37 /* BDOS function for Reset Drive */ -#define WRRANDFILL 38 /* BDOS function for Write Random w/ Fill */ - -#define BDOSDEFDR 0 /* BDOS Default (current) Drive Number */ -#define BDOSDRA 1 /* BDOS Drive A: number */ -#define BDOSDRB 2 /* BDOS Drive B: number */ -#define BDOSDRC 3 /* BDOS Drive C: number */ -#define BDOSDRD 4 /* BDOS Drive D: number */ -#define BDOSDRE 5 /* BDOS Drive E: number */ -#define BDOSDRF 6 /* BDOS Drive F: number */ -#define BDOSDRG 7 /* BDOS Drive G: number */ -#define BDOSDRH 8 /* BDOS Drive H: number */ - -#define BIOSDRA 0 /* BIOS Drive A: number */ -#define BIOSDRB 1 /* BIOS Drive B: number */ -#define BIOSDRC 2 /* BIOS Drive C: number */ -#define BIOSDRD 3 /* BIOS Drive D: number */ -#define BIOSDRE 4 /* BIOS Drive E: number */ -#define BIOSDRF 5 /* BIOS Drive F: number */ -#define BIOSDRG 6 /* BIOS Drive G: number */ -#define BIOSDRH 7 /* BIOS Drive H: number */ - -struct FCB { - char drive; /* BDOS Drive Code */ - char filename[8]; /* space padded file name */ - char filetype[3]; /* space padded file extension */ - char filler[24]; /* remainder of FCB */ -}; - -struct FCB * pPriFcb = PRIFCB; /* pointer to Primary FCB structure */ - -struct FCB * pSecFcb = SECFCB; /* pointer to secondary FCB structure */ - -struct { - char length; /* length of commad tail */ - char tail[127]; /* command tail */ -} * pDefBuf = DEFBUF; - - -#define CURDRV 0x00004 -#define BIOSAD 0x0e600 /* base address of BIOS jumps */ - -/* addresses of BIOS jumps */ -#define pBOOT 0x0E600 -#define pWBOOT 0x0E603 -#define pCONST 0x0E606 -#define pCONIN 0x0E609 -#define pCONOUT 0x0E60C -#define pLIST 0x0E60F -#define pPUNCH 0x0E612 -#define pREADER 0x0E615 -#define pHOME 0x0E618 -#define pSELDSK 0x0E61B -#define pSETTRK 0x0E61E -#define pSETSEC 0x0E621 -#define pSETDMA 0x0E624 -#define pREAD 0x0E627 -#define pWRITE 0x0E62A -#define pLISTST 0x0E62D -#define pSECTRN 0x0E630 -#define pBNKSEL 0x0E633 -#define pGETLU 0x0E636 -#define pSETLU 0x0E639 -#define pGETINFO 0x0E63C - -struct JMP { - unsigned char opcode; /* JMP opcode */ - unsigned int address; /* JMP address */ -}; - -struct BIOS { - struct JMP boot; - struct JMP wboot; - struct JMP const; - struct JMP conin; - struct JMP conout; - struct JMP list; - struct JMP punch; - struct JMP reader; - struct JMP home; - struct JMP seldsk; - struct JMP settrk; - struct JMP setsec; - struct JMP setdma; - struct JMP read; - struct JMP write; - struct JMP listst; - struct JMP sectrn; - struct JMP bnksel; - struct JMP getlu; - struct JMP setlu; - struct JMP getinfo; - struct JMP rsvd1; - struct JMP rsvd2; - struct JMP rsvd3; - struct JMP rsvd4; - - char rmj; - char rmn; - char rup; - char rtp; - -} * pBIOS = 0xe600; - -/* pointer based Disk Parameter Block structure */ -struct DPB { - unsigned int spt; - unsigned char bsh; - unsigned char blm; - unsigned char exm; - unsigned int dsm; - unsigned int drm; - unsigned char al0; - unsigned int cks; - unsigned int off; -} * pDPB; - -/* pointer based Disk Parameter Header structure */ -struct DPH { - unsigned int xlt; - unsigned int rv1; - unsigned int rv2; - unsigned int rv3; - unsigned int dbf; - struct DPB * pDpb; - unsigned int csv; - unsigned int alv; - unsigned char sigl; - unsigned char sigu; - unsigned int current; - unsigned int number; -} * pDPH; - -/* pointer based Information List structure */ -struct INFOLIST { - int version; - void * banptr; - void * varloc; - void * tstloc; - void * dpbmap; - void * dphmap; - void * ciomap; -} * pINFOLIST; - -/* pointer based Configuration Data structure */ -struct CNFGDATA { - unsigned char rmj; - unsigned char rmn; - unsigned char rup; - unsigned char rtp; - unsigned char diskboot; - unsigned char devunit; - unsigned int bootlu; - unsigned char hour; - unsigned char minute; - unsigned char second; - unsigned char month; - unsigned char day; - unsigned char year; - unsigned char freq; - unsigned char platform; - unsigned char dioplat; - unsigned char vdumode; - unsigned int romsize; - unsigned int ramsize; - unsigned char clrramdk; - unsigned char dskyenable; - unsigned char uartenable; - unsigned char vduenable; - unsigned char fdenable; - unsigned char fdtrace; - unsigned char fdmedia; - unsigned char fdmediaalt; - unsigned char fdmauto; - unsigned char ideenable; - unsigned char idetrace; - unsigned char ide8bit; - unsigned int idecapacity; - unsigned char ppideenable; - unsigned char ppidetrace; - unsigned char ppide8bit; - unsigned int ppidecapacity; - unsigned char ppideslow; - unsigned char boottype; - unsigned char boottimeout; - unsigned char bootdefault; - unsigned int baudrate; - unsigned char ckdiv; - unsigned char memwait; - unsigned char iowait; - unsigned char cntlb0; - unsigned char cntlb1; - unsigned char sdenable; - unsigned char sdtrace; - unsigned int sdcapacity; - unsigned char sdcsio; - unsigned char sdcsiofast; - unsigned char defiobyte; - unsigned char termtype; - unsigned int revision; - unsigned char prpsdenable; - unsigned char prpsdtrace; - unsigned int prpsdcapacity; - unsigned char prpconenable; - unsigned int biossize; - unsigned char pppenable; - unsigned char pppsdenable; - unsigned char pppsdtrace; - unsigned int pppsdcapacity; - unsigned char pppconenable; - unsigned char prpenable; -} * pCNFGDATA; - - -struct JMP_TAG { - unsigned char opcode; - unsigned int address; -}; - - -/* pointer based System Configuration structure */ -struct SYSCFG { - struct JMP_TAG jmp; - void * cnfloc; - void * tstloc; - void * varloc; - struct CNFGDATA cnfgdata; - char filler[256-3-2-2-2-sizeof(struct CNFGDATA)]; -} * pSYSCFG = HIGHSEG; - +struct SYSCFG * pSYSCFG = HIGHSEG; #define TTY 0 #define ANSI 1 diff --git a/Apps/Source/view.c b/Apps/Source/view.c index 4ae39a29..e37384cb 100644 --- a/Apps/Source/view.c +++ b/Apps/Source/view.c @@ -23,28 +23,6 @@ #define GETSYSCFG 0x0F000 /* HBIOS function for Get System Configuration */ -/* -#include "cpmbind.h" -#include "cbioshdr.h" -#include "std.h" -#include "infolist.h" -#include "dphdpb.h" -#include "dphmap.h" -#include "metadata.h" -#include "setlunum.h" -#include "applvers.h" -#include "cpmbdos.h" -#include "ctermcap.h" -#include "diagnose.h" -*/ - - -#define BDOS 5 /* memory address of BDOS invocation */ -#define HIGHSEG 0x0C000 /* memory address of system config */ - -#define GETSYSCFG 0x0F000 /* HBIOS function for Get System Configuration */ - - /* Drive List Geometry */ #define COL1 0 #define COL2 (80/4) @@ -67,39 +45,31 @@ struct SYSCFG * pSYSCFG = HIGHSEG; - -/* -struct DPH * pDPH; -struct DPB * pDPB; -*/ - -/* int drive; */ - dispdpb(line,column,pDPB) int line; int column; struct DPB * pDPB; { crtlc(line+0,column); - printf("[%04x] spt =%04x",&pDPB->spt,pDPB->spt); + printf("[%x] spt =%x",&pDPB->spt,pDPB->spt); crtlc(line+1,column); - printf("[%04x] bsh =%02x",&pDPB->bsh,pDPB->bsh); + printf("[%x] bsh =%x",&pDPB->bsh,pDPB->bsh); crtlc(line+2,column); - printf("[%04x] blm =%02x",&pDPB->blm,pDPB->blm); + printf("[%x] blm =%x",&pDPB->blm,pDPB->blm); crtlc(line+3,column); - printf("[%04x] exm =%02x",&pDPB->exm,pDPB->exm); + printf("[%x] exm =%x",&pDPB->exm,pDPB->exm); crtlc(line+4,column); - printf("[%04x] dsm =%04x",&pDPB->dsm,pDPB->dsm); + printf("[%x] dsm =%x",&pDPB->dsm,pDPB->dsm); crtlc(line+5,column); - printf("[%04x] drm =%04x",&pDPB->drm,pDPB->drm); + printf("[%x] drm =%x",&pDPB->drm,pDPB->drm); crtlc(line+6,column); - printf("[%04x] al0 =%02x",&pDPB->al0,pDPB->al0); + printf("[%x] al0 =%x",&pDPB->al0,pDPB->al0); crtlc(line+7,column); - printf("[%04x] al1 =%02x",&pDPB->al1,pDPB->al1); + printf("[%x] al1 =%x",&pDPB->al1,pDPB->al1); crtlc(line+8,column); - printf("[%04x] cks =%04x",&pDPB->cks,pDPB->cks); + printf("[%x] cks =%x",&pDPB->cks,pDPB->cks); crtlc(line+9,column); - printf("[%04x] off =%04x",&pDPB->off,pDPB->off); + printf("[%x] off =%x",&pDPB->off,pDPB->off); } struct DPB * dispdph(drive,line,column) @@ -149,31 +119,31 @@ struct DPB * dispdph(drive,line,column) } - crtlc(line+0,column); printf("[%04x] xlt =%04x", + crtlc(line+0,column); printf("[%x] xlt =%x", &pDPH->xlt,pDPH->xlt); - crtlc(line+1,column); printf("[%04x] rv1 =%04x", + crtlc(line+1,column); printf("[%x] rv1 =%x", &pDPH->rv1,pDPH->rv1); - crtlc(line+2,column); printf("[%04x] rv2 =%04x", + crtlc(line+2,column); printf("[%x] rv2 =%x", &pDPH->rv2,pDPH->rv2); - crtlc(line+3,column); printf("[%04x] rv3 =%04x", + crtlc(line+3,column); printf("[%x] rv3 =%x", &pDPH->rv3,pDPH->rv3); - crtlc(line+4,column); printf("[%04x] dbf =%04x", + crtlc(line+4,column); printf("[%x] dbf =%x", &pDPH->dbf,pDPH->dbf); - crtlc(line+5,column); printf("[%04x] dpb =%04x", + crtlc(line+5,column); printf("[%x] dpb =%x", &pDPH->dpb,pDPH->dpb); - crtlc(line+6,column); printf("[%04x] csv =%04x", + crtlc(line+6,column); printf("[%x] csv =%x", &pDPH->csv,pDPH->csv); - crtlc(line+7,column); printf("[%04x] alv =%04x", + crtlc(line+7,column); printf("[%x] alv =%x", &pDPH->alv,pDPH->alv); if( ('L' == pDPH->sigl) && ('U' == pDPH->sigu) ) { crtlc(line+8,column); - printf("[%04x] sigl=%02x",&pDPH->sigl,pDPH->sigl); + printf("[%x] sigl=%x",&pDPH->sigl,pDPH->sigl); crtlc(line+9,column); - printf("[%04x] sigu=%02x",&pDPH->sigu,pDPH->sigu); + printf("[%x] sigu=%x",&pDPH->sigu,pDPH->sigu); crtlc(line+10,column); - printf("[%04x] curr=%04x",&pDPH->current,pDPH->current); + printf("[%x] curr=%x",&pDPH->current,pDPH->current); crtlc(line+11,column); - printf("[%04x] numb=%04x",&pDPH->number,pDPH->number); + printf("[%x] numb=%x",&pDPH->number,pDPH->number); } if(DSM720 == pDPB->dsm) { diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index 141c8661..38748ea6 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -18,6 +18,8 @@ Version 2.5 - WBW: Updated Apps built with Aztec C to use the TINY library - WBW: Updated CPMNAME application to reflect latest config data block - WBW: Support up to 4 UART devices +- WBW: Partial support for Multifunction / PIC (UART & PPIDE) +- WBW: Add chip detection to UART driver Version 2.1.1 ------------- diff --git a/ReadMe.txt b/ReadMe.txt index b4257b64..6a695573 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -8,8 +8,8 @@ Builders: Wayne Warthen (wwarthen@gmail.com) Douglas Goodall (douglas_goodall@mac.com) David Giles (vk5dg@internode.on.net) -Updated: 2013-05-24 -Version: 2.5 Beta 12 +Updated: 2013-06-07 +Version: 2.5 Beta 13 This is an adaptation of CP/M-80 2.2 and ZSDOS/ZCPR targeting ROMs for all N8VEM Z80 hardware variations diff --git a/RomDsk/cfg_n8vem_mfp/1200.COM b/RomDsk/cfg_n8vem_mfp/1200.COM new file mode 100644 index 0000000000000000000000000000000000000000..d00960b0f400151392390ab49b5636cdf3badc9d GIT binary patch literal 128 vcmZQzV6bbroNbqIIm3?Oa;6>gg3rRjoY+vxq z;YNel^nG0#Xq_eN`xXi1a>+F_v=&L`OcB2{Lxj}g0cW%prw+!+A7;|tw`g|N?MVcj zR=rM(-HeJX^m~;)B0fJk+*prWggzvaAMHDTwoIE+PuX}13^~?MWW5xT`fvmdItPN~0>*nGoA_)5M9nCw zSK7DW+f@tq3OYUlr(fZX8IhceX3MCbA4TJH%kSU|cCLJY*H$MG9uOlXr}4>ld0ut* z3g9%H)pU!WPZhV@cBv21E$N-!Qn}@Qeqlp?`5Lt zObS#5@&@Nj(V@UgOAK_?^N3zXt*ngcpjMdD(~IhHE7n;d3Xo-Tp(+}2Y@V?Kgy$xd zD+!clWW^}TdEMYhlAcO{FnwC8^x|nQYb9ktxZ}-~sxTzPXtv8Q?s_enkn#&poCn$F4s#LyTh%yg+;!)ea(3C2O5SGg`+=jHq}p`4tZ$e;oNKpcD$ Ha(w;*Z%_k{ literal 0 HcmV?d00001 diff --git a/RomDsk/cfg_n8vem_mfp/LDTIM.COM b/RomDsk/cfg_n8vem_mfp/LDTIM.COM new file mode 100644 index 0000000000000000000000000000000000000000..1b3e2d1010a4ef4f90247c6a50f800eb7ff0b6c3 GIT binary patch literal 3584 zcmds3e{2)?6@TA5=Nwza@deu2MWo-$rN!8d2|<+1Wp0)PNDDY9ra>et)FemZHL;ED z)XPYWnX3M|QdlKcO6smNvF(6CJ!EP*|K+|@Uyx>T!dq}KmL1RkxzCN!- zt@anvr0$fw`}%#~&(HUL-@S=S0`M2^JV3cc5QBOmWL_0A`_%>@+6ke;+7)bV57KSn zL4^jBp}`p491Zm<@keQ=5~r)Yt7wIl(w1m!I3DinPf}OQ3cBh$jg6G<9;R*H4c_Kx z3I$iv7Vma%OEeh|4-8aTt>6~GU-nA7f8pmF{ayMo5#aB~$Yh?FKpYbu)L*Ad7Ju?n zBHmtb7Nn)%OrN5>oIaU5OQ-bUYV(hdyBtzEI4`DMcBuuN8$1Dzr_;0Z*|1}=kAthW zK7EsgZ1=*r-dylP%^I^FTx*sxke21~3pefuJ5E@k0^~C)c06y#L>Wny&{R%BP?ukZ{ zp>Ra$ExKd!bmiufN>M(XNKz&rjwF(yfdQqrqj=_Hx+*eqDdNOafEgwv~}Q^oA01?Us^AQ$nY$gJB8*hG@G(jORLbPcAj_ie{2YQ zJhVB~OQW%5I2vKGd%fP!?r1!T+TeKHR6o{aQF<8h@Y zNm;>1zLDv{_=Uq4O6 zutr(22D)0>w_wrXz5HHW31Rw1b;gywL*clRppf&7XtTm7{-dQfyvj-BM)%Mmrc<RTv`5n1)=>9T0e0>v7q>OcjVTf<%zPDyv%SPwS z)HD;2XJ#&nGxZj14h2ggA;;yJrH;R$l-|uFXkgXHB+jx^?v%hXO@QcQQ<5a)r`=_Q zNjM8?qniba6=HxC!30y$_;aip@2V{Z2Y}RQ%H!er8q7ysye!Lk46t-#FgFxuP~d$G zB`L5p71s{?%#0UM~R*9SUhkvprVc15*!Kv zj=|QJwoBYg@E#W;JIFKShh&s=wFYS?8~i{#1nwhHLqJZ;htH%BsoE)^g1hL%_Zmn) zgVT+teI{tf<}1M`&X36@lNjbS6Cuk4F;!fw6~te0?&F+A-~$h)hO6Yo_FL-Yv>%ST zmSr0rAh;zy49=7%#pXLf@Wed{`#&)~bi>@;_nG@(F)7SQ@BSsr{mxoj7LymiAqZ9n zCzLf@Cp98x;~s%``6$ke{)ICR8z$)B2?1kMZ+VB)gKrS6o0}9j3feL5?8s|_S-pa1E)RC zou+l!?HjAX{RVN`D)nxW^S#3zr6zsMAztNNOAGoKN~NmZi?kr;C&a(-x#8}ny509% zZkIDZPR&B)V<6k_JSCpwrnUFD+|+mJHG+f3gs>m&W?z);|56JiB`_4RN~)J@S?=ih zn~t}{+ZD)TGlRNszE#`9o#_!TajJizVT9A-xPWojigoydz@mJ5ZvTOH*?xQeWx50v z5s19_l<;gAp_nQl=s9g4r&ibAZ_7&n&e^Z`i^A}@i_bbtIOA{=!hh~mUb@O@UOwmh zh)c=74;YzY;kl?aZ!I(+wYSa=PIIMrIg!pOI^fT;+;Zn)w{c+5VvQ@`8C% z+s~)uv-VrrD>2pf6Xa#JLEd)S*i7S^ZTd5~U=n_MB{qy}RVc4)pUZq7%Q6y9}q<4HuE?j;fj%1HEp4}`F#60GP_V;ehCYFoD3DpFCjvA4mBW1ID+ z#2_FbIDAE&imf? z-kbMkKCjBj8%T}I>qvc6UPI~=@+wjTato%MD*PYk+c2I(V+38s;#6z}wYM`UlYe96EwXFtE&V9gh z+?J(YUaC3o@$gfxwyix*YmfKJcB7fF7kKp}8mKNV)vn#))gugL=+f-kdcj3=U-8zJ z5ZB3Xs{_=%QiIHY`Nnj*$*DE!qH&wN^|$i{|3>S@W^jHw?ac6Rwsy$ke9Hf`hkBR# zTFl)SJUZ=!0v4Fug7X9N&!|C8N4|p&QMWznN2Dt9Py6`}Ncq9z zmk59BFn`nI7mUkf26M!FX-<6d_q|sWt03SqUYfx1AUyb zfkt5JK3-X8MnG9(Mu)P>3_)ozLsT}I(W%_0hI1-lNmmh*)p;J|CSCSX3rU~&Xcb8x z`e+SF@B3&SNev%uAn9`-Z6b>{N-u|ONDw;u88q!9a&fd7ooSp(w6iy~qwatdPtH9q z^vpdb9QjlFn(>yj(l$oDf5iy_4uweDGIr;;wRl@@G`xN&=4aHIBjf}65$3vR^z zU2yaEmf&XXpy&?SAB%3%z9qUbdqH$__LrhNXn!lZ3Huk(&DhJLG{Ytvfqq3!nrGHsKR@{mi>jE8=s$nsDoAX&Qwq-EyqKfj~mCjX+iH2G~0R+r1)b9(mX2H`wMcQU18cKTpSr zd*~g4oJR!mJVBl+PhMNY9u4~X1D)H~f3Mq3URt2CNAn_t-7thWo!bCOLhGAv&V5=FZ6f!uu6q;wJ?sgN)gu#2*vf9R?zXNWxpWf`;+9S?=8P%j#ORWrtPoC;S9%!-A{1b8r9f#d`U&x9vUoCJ4`_CK?r&-#Cb=Ew=bC6k?4@*p{iqGsw(`@RH3rOsv} zr?FNn8VWST5QJ$2<>JwFDwZSW>A}>Qe4Lue^qDL*Vv&5Da_Lk)NsL%zm@LEbNS3bY ZGdMq-iO1-y$GC@l;4(OlJ|03c*MII)ukio? literal 0 HcmV?d00001 diff --git a/RomDsk/cfg_n8vem_mfp/T5.COM b/RomDsk/cfg_n8vem_mfp/T5.COM new file mode 100644 index 0000000000000000000000000000000000000000..ab55d7594228814e098f59f869ebdc0853077c71 GIT binary patch literal 96 zcmdO5WKdRC7L;aW0w2Eg0 mD$|N()UMg8@Y^Z@D9ddN6j5LWYqd&b{HLdI3aIypwFm$o4;Rw_ literal 0 HcmV?d00001 diff --git a/RomDsk/cfg_n8vem_mfp/VT3.COM b/RomDsk/cfg_n8vem_mfp/VT3.COM new file mode 100644 index 0000000000000000000000000000000000000000..6290a6d3e0c7e921a575060ea62c3fbddd706b3e GIT binary patch literal 1278 zcmZuwOKe+36ut9i?ApPOoDfxsQZ=#Dl#r%Bw{C(-2M8?%3giQnHhkjJ4{_3z^q1KA zR?w)6sw*0V#1aXiE+`TR5UVCnkup=wB3NNTHe`_nLWbC_iHgFQJI@Xh5>NI$XYRdo z?!0^F*_5ash*~7-5i3Yts?OqVs?*{}(cmxW0d%>qa==Av;4k%!rM|at)la{Z5yA-) zjOc{CMzmj^BDzGLC)y*Eq}1wBF0dm+4OrWairsB!Q~kfRzDNZWpShg+jATl)>7*}x z(%)(zJ|mX0_a^UFKAh}``LkXv4u$%x$I z3a?3J8>dJac(_m9BxZ@)yf&4o9{GCqH^&hK2u%?uzPy0Dc+9S_a=dn~-K3VJvdPqa zqlSeJmvsQ9Cp5@rt19sKLic8<;^jqUUWz1iojA44UaXc$WpXQx*GV1vo%ph&gdR7b z*qDadYu32#`1yu)C*8&DgmtDjbiFR10-`=S;B8@R`7U!&}VK_YK=qcfr`MmNxYAv<>wz_##l~n2 zYSK`xKB5}tD?xqB)NP~)ybBn0l$tJ2T( zFEYgRarr6JRbb0L@joz}b94)=-oe-7klj zz9N%M56Us7$K@o`Bk}{L&&fWf<8q*=fI6HA?iRdKa3=Vpg1ZFYEO@!#`09C_fJuQO z`URg9c;eslI2{w%Kr=0KrU(r_AS>!ewydFc6E+c64Jt=7R$8#vFhPdl5%2og5AWoJyQNvwt5z?av=BeOH=W0Gj&a@9%j6VAt+*PY&)x|6}mxK}Y6oc+0_p*$exdk?q+PjvT;kuw&oO zM%?zF$2(D2cH*Z7-LF3L#?t`L9zS$=TOHOv_S|b-^#HH5J%8lHI~afY#n-nt0<<1| eq5bg&0RGfV(T*PUhhTIE0>C(oIao0NTmK&syVC*y literal 0 HcmV?d00001 diff --git a/RomDsk/cfg_n8vem_mfp/XM.COM b/RomDsk/cfg_n8vem_mfp/XM.COM new file mode 100644 index 0000000000000000000000000000000000000000..abcc6828ee42c017913236211641ddcf5558b163 GIT binary patch literal 5375 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 literal 0 HcmV?d00001 diff --git a/RomDsk/cfg_n8vem_mfp/XM5.COM b/RomDsk/cfg_n8vem_mfp/XM5.COM new file mode 100644 index 0000000000000000000000000000000000000000..8ea2b66108110674084d8d5a4be9e590645554e1 GIT binary patch literal 3072 zcmeHI?Qc_67(chY?Y*bEvWb%y1D=hEZXGad5Ur!8+}@2!*E?@JUZRtXQ5n#!%Q|oy zWzHDm2R{)L`G$$a4}NM)Bqbn*-8#~HnVJ;~_^~*y9OB_6NeD zAW=GFAtgfKS9T;R9UXy4(Br9cb(~5KlOu5wB_Ab+NK}pl-zF-7DR^c(sw~N&{c@G7 zfd*{!q=VjeZ0@8NMH&-k?{M@xKI1)&>5`p_yl)g|f8EUgvVo@_e)cymr*VFsekrom z9WEzeX5k)Bi332lg~BofCPx6QDhGmxNKC0XL-c}ecBhR_3*dqNVP9Iz)q$=6Q;GyI zRo9KiO`@H!SwJHSvFt?x9Wse_%2KE;BwO$roX?D#?-(PtEeODVn;183 zehGm3PUBWkHC?mc+8|6o>G5<$0($^y1svHER-}D^I+LetLX@qzy)QtZJ|QBYFzUHa<8Qh)O!6%P$i*%YFe03E^Etp$FKzfa2;5k?6_il zWrxEt?+|t)N^so-T0Q%?S^LJ$z#0Ynd#jsQG)TY@Zuh0|W#g{B^|E$?*Eic%k2h&I z?eqw!TxV9HV7Uu6zZ0^f`#F}Q6fXVmU|XvW$6?W|RrC5N+okW}F?gSWC!<3l-W6w$ z@uoBXIKQ`^gv>Y##Fb)-`md}uU)23o6rrYJyrq5^(>!cU&CGKTS87&P@Y>k|&$$r3 zpT6`jV1NWeZEdnDM`DEWx6Hsk0;fW!TnrC!k5I!ttjRj#D^P8V?+HQ)^{)1zhDDc^7)N5$u^J21CrV0 zTaKTn&pSrEgLoWV<<2`Y;I<55jpfwkw47RZ-a=v_h4!^Dp>1?RYg?Ew!X=s5-cYne zdU%%tR3S~#m>SyC#d=vYi7Kjk$g;qi$?-&-D1-3<$SFZhgP6X|ZXbCS(RORHH$Kux zqE>=ZRjyZi1_y_dBggxDhU1CRlEPi*{8m&}>pwn_Y9^?d76eE^c{3I7O_AXwNyP__ zlAdAmdP@sA(sSx)ap`$a6VZmX0@%N<)BLYQ^@?ss!lhFZgyv_=t|^2poUn_tR#tj_hv@EXs_wa&Gj#E z(60N%O&3y(un#lkLquCK5}8}X;gVpiY$HT^`?r??jb&y4(_eI`!or6bTKCNaJd zX9~G<;^NId-D(tOZQhiOpG0%Laf06jPwt|~KDv5cf@RTJP1oTJupGF~dck404Un#)vxPJKTv>Pu7ePEl#<$D@LBc3m>P?$~r2PCuwVcJ@IXaLJ3A)a0VRlmUeBn+MTY icX3f?lk}xx-oK)wCx*nKYZ$FO9ZxgxGz0%%2L1+F7h!t< literal 0 HcmV?d00001 diff --git a/RomList.txt b/RomList.txt index 35a2a012..c1237500 100644 --- a/RomList.txt +++ b/RomList.txt @@ -86,7 +86,22 @@ DRI CP/M (BDOS & CCP) for the Propeller found in the Support directory! - NOTE: Console defaults to VGA & PS/2 Keyboard. Short JP2 (one bit input port) to use the serial port as the console. - + + N8VEM_mfp.rom for N8VEM Z80 SBC V1/V2: + - 512KB ROM, 512KB RAM + - 38.4KB serial console baud rate + - Basic ROM/RAM disk (no floppy) + - Drives A:=ROM, B:=RAM, C:=PPIDE0-00, D:=PPIDE0-01, E:=PPIDE0-02, F:=PPIDE0-03 + - IDE support via Multifunction / PIC + - Second UART via Multifunction / PIC + + N8VEM_ci.rom for N8VEM Z80 SBC V1/V2: + - 512KB ROM, 512KB RAM + - 38.4KB serial console baud rate + - Basic ROM/RAM disk (no floppy/IDE) + - Drives A:=ROM, B:=RAM + - Cassette Interface mapped to RDR/PUN + N8VEM_simh.rom for N8VEM SIMH Simulator: - 512KB ROM, 512KB RAM - 38.4KB serial console baud rate @@ -217,6 +232,21 @@ ZSYSTEM (ZSDOS & ZCPR) - VDU board support - Drives A:=ROM, B:=RAM + N8VEM_mfp_z.rom for N8VEM Z80 SBC V1/V2: + - 512KB ROM, 512KB RAM + - 38.4KB serial console baud rate + - Basic ROM/RAM disk (no floppy) + - Drives A:=ROM, B:=RAM, C:=PPIDE0-00, D:=PPIDE0-01, E:=PPIDE0-02, F:=PPIDE0-03 + - IDE support via Multifunction / PIC + - Second UART via Multifunction / PIC + + N8VEM_ci_z.rom for N8VEM Z80 SBC V1/V2: + - 512KB ROM, 512KB RAM + - 38.4KB serial console baud rate + - Basic ROM/RAM disk (no floppy/IDE) + - Drives A:=ROM, B:=RAM + - Cassette Interface mapped to RDR/PUN + N8VEM_simh_Z.rom for N8VEM SIMH Simulator: - 512KB ROM, 512KB RAM - 38.4KB serial console baud rate diff --git a/Source/bootapp.asm b/Source/bootapp.asm index a38f3ef3..df858ff6 100644 --- a/Source/bootapp.asm +++ b/Source/bootapp.asm @@ -79,7 +79,7 @@ ; JP PHASE2 ; JUMP TO PHASE 2 BOOT IN UPPER MEMORY ; -STR_BOOT .DB "Boot$" +STR_BOOT .DB "RomWBW$" ; ; IMBED DIRECT SERIAL I/O ROUTINES ; diff --git a/Source/bootrom.asm b/Source/bootrom.asm index 81220311..64282d0b 100644 --- a/Source/bootrom.asm +++ b/Source/bootrom.asm @@ -62,7 +62,7 @@ ; JP PHASE2 ; JUMP TO PHASE 2 BOOT IN UPPER MEMORY ; -STR_BOOT .DB "Boot$" +STR_BOOT .DB "RomWBW$" ; ; IMBED DIRECT SERIAL I/O ROUTINES ; diff --git a/Source/cbios.asm b/Source/cbios.asm index bae57f5d..087d8967 100644 --- a/Source/cbios.asm +++ b/Source/cbios.asm @@ -512,9 +512,21 @@ READWRITE: #ENDIF LD A,(SEKDU) ; GET DEVICE/UNIT AND 0F0H ; ISOLATE DEVICE NIBBLE - JR Z,DIRRW ; DEVICE = 0 = MD, SO DIRECT R/W - JP BLKRW ; OTHERWISE, (DE)BLOCKING R/W - +; JR Z,DIRRW ; DEVICE = 0 = MD, SO DIRECT R/W +; JP BLKRW ; OTHERWISE, (DE)BLOCKING R/W + JR NZ,BLKRW ; DEVICE != 0, (DE)BLOCKING R/W +; + LD (STKSAV),SP ; SAVE STACK + LD SP,TMPSTK ; TEMP STACK + CALL DIRRW ; DEVICE = 0 = MD, SO DIRECT R/W + LD SP,(STKSAV) ; RESTORE STACK + RET ; DONE +; +; NEED TO FORCE STACK INTO UPPER MEMORY DUE TO PAGING OF LOWER MEMORY +; +STKSAV .DW 0 + .FILL 16 +TMPSTK .EQU $ ; ;================================================================================================== ; DIRECT READ/WRITE (NO (DE)BLOCKING, NO BUFFERING, 128 BYTE SECTOR) diff --git a/Source/config_n8_2312.asm b/Source/config_n8_2312.asm index a09dadf8..1bd44972 100644 --- a/Source/config_n8_2312.asm +++ b/Source/config_n8_2312.asm @@ -52,7 +52,7 @@ IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS! IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; PPIDEENABLE .EQU FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE) -PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3 +PPIDEIOB .EQU $60 ; PPIDE IOBASE PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE) PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) diff --git a/Source/config_n8_2511.asm b/Source/config_n8_2511.asm index 9df9cdf5..cd0f3786 100644 --- a/Source/config_n8_2511.asm +++ b/Source/config_n8_2511.asm @@ -52,7 +52,7 @@ IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS! IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; PPIDEENABLE .EQU FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE) -PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3 +PPIDEIOB .EQU $60 ; PPIDE IOBASE PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE) PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) diff --git a/Source/config_n8vem_ci.asm b/Source/config_n8vem_ci.asm index df910d33..8cc38960 100644 --- a/Source/config_n8vem_ci.asm +++ b/Source/config_n8vem_ci.asm @@ -1,6 +1,6 @@ ; ;================================================================================================== -; ROMWBW 2.X CONFIGURATION FOR N8VEM SBC +; ROMWBW 2.X CONFIGURATION FOR N8VEM SBC W/ CASSETTE INTERFACE ;================================================================================================== ; ; BUILD CONFIGURATION OPTIONS @@ -60,7 +60,7 @@ IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS! IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; PPIDEENABLE .EQU FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE) -PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3 +PPIDEIOB .EQU $60 ; PPIDE IOBASE PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE) PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) diff --git a/Source/config_n8vem_cvdu.asm b/Source/config_n8vem_cvdu.asm index e370653d..80a3bff8 100644 --- a/Source/config_n8vem_cvdu.asm +++ b/Source/config_n8vem_cvdu.asm @@ -56,7 +56,7 @@ IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS! IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; PPIDEENABLE .EQU TRUE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE) -PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3 +PPIDEIOB .EQU $60 ; PPIDE IOBASE PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE) PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) diff --git a/Source/config_n8vem_dide.asm b/Source/config_n8vem_dide.asm index 860e8709..49b23f79 100644 --- a/Source/config_n8vem_dide.asm +++ b/Source/config_n8vem_dide.asm @@ -56,7 +56,7 @@ IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS! IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; PPIDEENABLE .EQU FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE) -PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3 +PPIDEIOB .EQU $60 ; PPIDE IOBASE PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE) PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) diff --git a/Source/config_n8vem_diskio.asm b/Source/config_n8vem_diskio.asm index 4d58b1f5..0f75b2e4 100644 --- a/Source/config_n8vem_diskio.asm +++ b/Source/config_n8vem_diskio.asm @@ -56,7 +56,7 @@ IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS! IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; PPIDEENABLE .EQU FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE) -PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3 +PPIDEIOB .EQU $60 ; PPIDE IOBASE PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE) PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) diff --git a/Source/config_n8vem_diskio3.asm b/Source/config_n8vem_diskio3.asm index 9ad59f7d..12b882f6 100644 --- a/Source/config_n8vem_diskio3.asm +++ b/Source/config_n8vem_diskio3.asm @@ -56,7 +56,7 @@ IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS! IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; PPIDEENABLE .EQU TRUE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE) -PPIDEMODE .EQU PPIDEMODE_DIO3 ; PPIDEMODE_STD, PPIDEMODE_DIO3 +PPIDEIOB .EQU $20 ; PPIDE IOBASE IS $20 FOR DISKIO V3 PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE) PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) diff --git a/Source/config_n8vem_dsd.asm b/Source/config_n8vem_dsd.asm index f2f5bcaf..72cf7c8c 100644 --- a/Source/config_n8vem_dsd.asm +++ b/Source/config_n8vem_dsd.asm @@ -56,7 +56,7 @@ IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS! IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; PPIDEENABLE .EQU FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE) -PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3 +PPIDEIOB .EQU $60 ; PPIDE IOBASE PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE) PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) diff --git a/Source/config_n8vem_mfp.asm b/Source/config_n8vem_mfp.asm new file mode 100644 index 00000000..5b97d0fd --- /dev/null +++ b/Source/config_n8vem_mfp.asm @@ -0,0 +1,102 @@ +; +;================================================================================================== +; ROMWBW 2.X CONFIGURATION FOR N8VEM SBC W/ MULTIFUNCTION PIC +;================================================================================================== +; +; BUILD CONFIGURATION OPTIONS +; +CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS +; +DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, DIODEV_CRT, CIODEV_PRPCON, CIODEV_PPPCON +ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) +CONBAUD .EQU 38400 ; BAUDRATE FOR CONSOLE DURING HARDWARE INIT +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA DEVICE (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_N8V, VDADEV_UPD7220) +DEFEMU .EQU EMUTYP_TTY ; DEFAULT VDA EMULATION (EMUTYP_TTY, EMUTYP_ANSI, ...) +TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2 +; +RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! +CLRRAMDISK .EQU CLR_AUTO ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA) +; +DSKMAP .EQU DM_RAM ; DM_ROM, DM_RAM, DM_FD, DM_IDE, DM_PPIDE, DM_SD, DM_PRPSD, DM_PPPSD +; +DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE) +; +UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE) +UARTCNT .EQU 2 ; NUMBER OF UARTS +UART0IOB .EQU $68 ; UART0 IOBASE +UART0BAUD .EQU CONBAUD ; UART0 BAUDRATE +UART0FIFO .EQU TRUE ; UART0 TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY) +UART0AFC .EQU FALSE ; UART0 TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!) +UART1IOB .EQU $88 ; UART1 IOBASE AT $88 FOR MFPIC +UART1BAUD .EQU 38400 ; UART1 BAUDRATE IS 38400 FOR MFPIC +UART1FIFO .EQU TRUE ; UART1 FIFO ENABLED FOR MFPIC +UART1AFC .EQU FALSE ; UART1 AUTO FLOW CONTROL DISABLED FOR MFPIC (ENABLE IF DESIRED) +; +ASCIENABLE .EQU FALSE ; TRUE FOR Z180 ASCI SUPPORT +ASCI0BAUD .EQU 38400 ; ASCI0 BAUDRATE (IMPLEMENTED BY Z180_CNTLB0) +ASCI1BAUD .EQU 38400 ; ASCI1 BAUDRATE (IMPLEMENTED BY Z180_CNTLB1) +; +VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT +CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT +UPD7220ENABLE .EQU FALSE ; TRUE FOR uPD7220 BOARD SUPPORT +N8VENABLE .EQU FALSE ; TRUE FOR N8 (TMS9918) VIDEO/KBD SUPPORT +; +DEFIOBYTE .EQU $00 ; DEFAULT INITIAL VALUE FOR CP/M IOBYTE, $00=TTY, $01=CRT (MUST HAVE CRT HARDWARE) +ALTIOBYTE .EQU DEFIOBYTE ; ALT INITIAL VALUE (USED WHEN CONFIG JUMPER SHORTED) +WRTCACHE .EQU TRUE ; ENABLE WRITE CACHING IN CBIOS (DE)BLOCKING ALGORITHM +DSKTRACE .EQU FALSE ; ENABLE TRACING OF CBIOS DISK FUNCTION CALLS +; +FDENABLE .EQU FALSE ; TRUE FOR FLOPPY SUPPORT +FDMODE .EQU FDMODE_DIO ; FDMODE_DIO, FDMODE_ZETA, FDMODE_DIDE, FDMODE_N8, FDMODE_DIO3 +FDTRACE .EQU 1 ; 0=SILENT, 1=FATAL ERRORS, 2=ALL ERRORS, 3=EVERYTHING (ONLY RELEVANT IF FDENABLE = TRUE) +FDMEDIA .EQU FDM144 ; FDM720, FDM144, FDM360, FDM120 (ONLY RELEVANT IF FDENABLE = TRUE) +FDMEDIAALT .EQU FDM720 ; ALTERNATE MEDIA TO TRY, SAME CHOICES AS ABOVE (ONLY RELEVANT IF FDMAUTO = TRUE) +FDMAUTO .EQU TRUE ; SELECT BETWEEN MEDIA OPTS ABOVE AUTOMATICALLY +; +IDEENABLE .EQU FALSE ; TRUE FOR IDE SUPPORT +IDEMODE .EQU IDEMODE_DIO ; IDEMODE_DIO, IDEMODE_DIDE +IDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) +IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) +IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) +; +PPIDEENABLE .EQU TRUE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE) +PPIDEIOB .EQU $84 ; PPIDE IOBASE IS $84 FOR MFPIC (PRELIMINARY ADDRESS) +PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE) +PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) +PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) +PPIDESLOW .EQU FALSE ; ADD DELAYS TO HELP PROBLEMATIC HARDWARE (TRY THIS IF PPIDE IS UNRELIABLE) +; +SDENABLE .EQU FALSE ; TRUE FOR SD SUPPORT +SDMODE .EQU SDMODE_JUHA ; SDMODE_JUHA, SDMODE_CSIO, SDMODE_UART, SDMODE_PPI, SDMODE_DSD +SDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) +SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) +SDCSIOFAST .EQU FALSE ; TABLE-DRIVEN BIT INVERTER +; +PRPENABLE .EQU FALSE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) +PRPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) +PRPSDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PRPSDENABLE = TRUE) +PRPSDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) +PRPCONENABLE .EQU TRUE ; TRUE FOR PROPIO CONSOLE SUPPORT (PS/2 KBD & VGA VIDEO) +; +PPPENABLE .EQU FALSE ; TRUE FOR PARPORTPROP SUPPORT +PPPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) +PPPSDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPPENABLE = TRUE) +PPPSDCAPACITY .EQU 64 ; CAPACITY OF PPP SD DEVICE (IN MB) +PPPCONENABLE .EQU TRUE ; TRUE FOR PROPIO CONSOLE SUPPORT (PS/2 KBD & VGA VIDEO) +; +HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT +HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) +HDSKCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) +; +PPKENABLE .EQU FALSE ; TRUE FOR PARALLEL PORT KEYBOARD +PPKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPKENABLE = TRUE) +KBDENABLE .EQU FALSE ; TRUE FOR PS/2 KEYBOARD ON I8242 +KBDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF KBDENABLE = TRUE) +; +TTYENABLE .EQU FALSE ; INCLUDE TTY EMULATION SUPPORT +ANSIENABLE .EQU FALSE ; INCLUDE ANSI EMULATION SUPPORT +ANSITRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF ANSIENABLE = TRUE) +; +BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) +BOOT_TIMEOUT .EQU 20 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE +BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT diff --git a/Source/config_n8vem_ppide.asm b/Source/config_n8vem_ppide.asm index b9413318..17fdd800 100644 --- a/Source/config_n8vem_ppide.asm +++ b/Source/config_n8vem_ppide.asm @@ -56,7 +56,7 @@ IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS! IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; PPIDEENABLE .EQU TRUE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE) -PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3 +PPIDEIOB .EQU $60 ; PPIDE IOBASE PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE) PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) diff --git a/Source/config_n8vem_ppisd.asm b/Source/config_n8vem_ppisd.asm index 218e20ee..de1d7322 100644 --- a/Source/config_n8vem_ppisd.asm +++ b/Source/config_n8vem_ppisd.asm @@ -56,7 +56,7 @@ IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS! IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; PPIDEENABLE .EQU FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE) -PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3 +PPIDEIOB .EQU $60 ; PPIDE IOBASE PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE) PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) diff --git a/Source/config_n8vem_propio.asm b/Source/config_n8vem_propio.asm index 4bd25362..3dfcdfd3 100644 --- a/Source/config_n8vem_propio.asm +++ b/Source/config_n8vem_propio.asm @@ -56,7 +56,7 @@ IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS! IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; PPIDEENABLE .EQU FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE) -PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3 +PPIDEIOB .EQU $60 ; PPIDE IOBASE PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE) PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) diff --git a/Source/config_n8vem_simh.asm b/Source/config_n8vem_simh.asm index d0720ada..1cb159e8 100644 --- a/Source/config_n8vem_simh.asm +++ b/Source/config_n8vem_simh.asm @@ -56,7 +56,7 @@ IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS! IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; PPIDEENABLE .EQU FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE) -PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3 +PPIDEIOB .EQU $60 ; PPIDE IOBASE PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE) PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) diff --git a/Source/config_n8vem_std.asm b/Source/config_n8vem_std.asm index dcdc06a5..b3e9fca1 100644 --- a/Source/config_n8vem_std.asm +++ b/Source/config_n8vem_std.asm @@ -56,7 +56,7 @@ IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS! IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; PPIDEENABLE .EQU FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE) -PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3 +PPIDEIOB .EQU $60 ; PPIDE IOBASE PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE) PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) diff --git a/Source/config_n8vem_vdu.asm b/Source/config_n8vem_vdu.asm index 9b9fde0c..072aca6e 100644 --- a/Source/config_n8vem_vdu.asm +++ b/Source/config_n8vem_vdu.asm @@ -56,7 +56,7 @@ IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS! IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; PPIDEENABLE .EQU TRUE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE) -PPIDEMODE .EQU PPIDEMODE_DIO3 ; PPIDEMODE_STD, PPIDEMODE_DIO3 +PPIDEIOB .EQU $60 ; PPIDE IOBASE PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE) PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) diff --git a/Source/config_zeta_ppp.asm b/Source/config_zeta_ppp.asm index b4e9bd18..03d14257 100644 --- a/Source/config_zeta_ppp.asm +++ b/Source/config_zeta_ppp.asm @@ -56,7 +56,7 @@ IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS! IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; PPIDEENABLE .EQU FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE) -PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3 +PPIDEIOB .EQU $60 ; PPIDE IOBASE PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE) PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) diff --git a/Source/config_zeta_std.asm b/Source/config_zeta_std.asm index 6ff105e9..e2511fa7 100644 --- a/Source/config_zeta_std.asm +++ b/Source/config_zeta_std.asm @@ -56,7 +56,7 @@ IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS! IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; PPIDEENABLE .EQU TRUE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE) -PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3 +PPIDEIOB .EQU $60 ; PPIDE IOBASE PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE) PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) diff --git a/Source/ppide.asm b/Source/ppide.asm index bfbd3fc3..59828610 100644 --- a/Source/ppide.asm +++ b/Source/ppide.asm @@ -18,17 +18,10 @@ ; ; MAP PPI PORTS TO PPIDE PORTS ; -#IF (PPIDEMODE == PPIDEMODE_DIO3) -IDELSB .EQU 20H ; LSB -IDEMSB .EQU 21H ; MSB -IDECTL .EQU 22H ; CONTROL SIGNALS -PPI1CONT .EQU 23H ; CONTROL BYTE PPI 82C55 -#ELSE -IDELSB .EQU PPIA ; LSB -IDEMSB .EQU PPIB ; MSB -IDECTL .EQU PPIC ; CONTROL SIGNALS -PPI1CONT .EQU PPIX ; CONTROL BYTE PPI 82C55 -#ENDIF +IDELSB .EQU PPIDEIOB + 0 ; LSB +IDEMSB .EQU PPIDEIOB + 1 ; MSB +IDECTL .EQU PPIDEIOB + 2 ; CONTROL SIGNALS +PPI1CONT .EQU PPIDEIOB + 3 ; CONTROL BYTE PPI 82C55 ; ; PPI control bytes for read and write to IDE drive ; diff --git a/Source/std.asm b/Source/std.asm index d944ce43..16f2093f 100644 --- a/Source/std.asm +++ b/Source/std.asm @@ -98,6 +98,7 @@ IDEMODE_DIDE .EQU 2 ; DUAL IDE PPIDEMODE_NONE .EQU 0 PPIDEMODE_STD .EQU 1 ; STANDARD N8VEM PARALLEL PORT PPIDEMODE_DIO3 .EQU 2 ; DISKIO V3 PARALLEL PORT +PPIDEMODE_MFP .EQU 3 ; MULTIFUNCTION / PIC ; ; SD MODE SELECTIONS ; diff --git a/Source/syscfg.asm b/Source/syscfg.asm index 292f72a8..2b03e563 100644 --- a/Source/syscfg.asm +++ b/Source/syscfg.asm @@ -134,7 +134,7 @@ BOOTTIME .DB 0,0,0,0,0,0 ; SYSTEM STARTUP TIME (YY,MM,DD,HH,MM,SS) .DW IDECAPACITY .DB PPIDEENABLE - .DB PPIDEMODE + .DB PPIDEIOB .DB PPIDETRACE .DB PPIDE8BIT .DW PPIDECAPACITY diff --git a/Source/uart.asm b/Source/uart.asm index ec27d540..f55666a7 100644 --- a/Source/uart.asm +++ b/Source/uart.asm @@ -3,6 +3,35 @@ ; UART DRIVER (SERIAL PORT) ;================================================================================================== ; +UART_DEBUG .EQU FALSE +; +UART_NONE .EQU 0 ; UNKNOWN OR NOT PRESENT +UART_8250 .EQU 1 +UART_16450 .EQU 2 +UART_16550 .EQU 3 +UART_16550A .EQU 4 +UART_16550C .EQU 5 +UART_16650 .EQU 6 +UART_16750 .EQU 7 +UART_16850 .EQU 8 +; +UART_RBR .EQU 0 ; DLAB=0: RCVR BUFFER REG (READ) +UART_THR .EQU 0 ; DLAB=0: XMIT HOLDING REG (WRITE) +UART_IER .EQU 1 ; DLAB=0: INT ENABLE REG (READ) +UART_IIR .EQU 2 ; INT IDENT REGISTER (READ) +UART_FCR .EQU 2 ; FIFO CONTROL REG (WRITE) +UART_LCR .EQU 3 ; LINE CONTROL REG (READ/WRITE) +UART_MCR .EQU 4 ; MODEM CONTROL REG (READ/WRITE) +UART_LSR .EQU 5 ; LINE STATUS REG (READ) +UART_MSR .EQU 6 ; MODEM STATUS REG (READ) +UART_SCR .EQU 7 ; SCRATCH REGISTER (READ/WRITE) +UART_DLL .EQU 0 ; DLAB=1: DIVISOR LATCH (LS) (READ/WRITE) +UART_DLM .EQU 1 ; DLAB=1: DIVISOR LATCH (MS) (READ/WRITE) +UART_EFR .EQU 2 ; LCR=$BF: ENHANCED FEATURE REG (READ/WRITE) +; +#DEFINE UART_IN(RID) CALL UART_INP \ .DB RID +#DEFINE UART_OUT(RID) CALL UART_OUTP \ .DB RID +; #IF (UARTCNT >= 1) UART0_RBR .EQU UART0IOB + 0 ; DLAB=0: RCVR BUFFER REG (READ ONLY) UART0_THR .EQU UART0IOB + 0 ; DLAB=0: XMIT HOLDING REG (WRITE ONLY) @@ -16,8 +45,10 @@ UART0_MSR .EQU UART0IOB + 6 ; MODEM STATUS REG UART0_SCR .EQU UART0IOB + 7 ; SCRATCH REGISTER UART0_DLL .EQU UART0IOB + 0 ; DLAB=1: DIVISOR LATCH (LS) UART0_DLM .EQU UART0IOB + 1 ; DLAB=1: DIVISOR LATCH (MS) +UART0_EFR .EQU UART0IOB + 2 ; ENHANCED FEATURE (WHEN LCR = $BF) ; UART0_DIV .EQU (1843200 / (16 * UART0BAUD)) +; #ENDIF ; #IF (UARTCNT >= 2) @@ -33,6 +64,7 @@ UART1_MSR .EQU UART1IOB + 6 ; MODEM STATUS REG UART1_SCR .EQU UART1IOB + 7 ; SCRATCH REGISTER UART1_DLL .EQU UART1IOB + 0 ; DLAB=1: DIVISOR LATCH (LS) UART1_DLM .EQU UART1IOB + 1 ; DLAB=1: DIVISOR LATCH (MS) +UART1_EFR .EQU UART1IOB + 2 ; ENHANCED FEATURE (WHEN LCR = $BF) ; UART1_DIV .EQU (1843200 / (16 * UART1BAUD)) #ENDIF @@ -50,6 +82,7 @@ UART2_MSR .EQU UART2IOB + 6 ; MODEM STATUS REG UART2_SCR .EQU UART2IOB + 7 ; SCRATCH REGISTER UART2_DLL .EQU UART2IOB + 0 ; DLAB=1: DIVISOR LATCH (LS) UART2_DLM .EQU UART2IOB + 1 ; DLAB=1: DIVISOR LATCH (MS) +UART2_EFR .EQU UART2IOB + 2 ; ENHANCED FEATURE (WHEN LCR = $BF) ; UART2_DIV .EQU (1843200 / (16 * UART2BAUD)) #ENDIF @@ -67,6 +100,7 @@ UART3_MSR .EQU UART3IOB + 6 ; MODEM STATUS REG UART3_SCR .EQU UART3IOB + 7 ; SCRATCH REGISTER UART3_DLL .EQU UART3IOB + 0 ; DLAB=1: DIVISOR LATCH (LS) UART3_DLM .EQU UART3IOB + 1 ; DLAB=1: DIVISOR LATCH (MS) +UART3_EFR .EQU UART3IOB + 2 ; ENHANCED FEATURE (WHEN LCR = $BF) ; UART3_DIV .EQU (1843200 / (16 * UART3BAUD)) #ENDIF @@ -124,50 +158,25 @@ UART0_INIT: PRTS("UART0: IO=0x$") LD A,UART0IOB CALL PRTHEXBYTE - PRTS(" BAUD=$") - LD HL,UART0BAUD / 10 - CALL PRTDEC - PRTC('0') - - LD A,80H - OUT (UART0_LCR),A ; DLAB ON - LD A,UART0_DIV % $100 - OUT (UART0_DLL),A ; SET DIVISOR (LS) - LD A,UART0_DIV / $100 - OUT (UART0_DLM),A ; SET DIVISOR (MS) - - LD B,03H ; B = DEFAULT SETTING FOR MCR (DTR + RTS) - -#IF (UART0AFC) - PRTS(" AFC$") - LD A,$55 ; TEST VALUE - OUT (UART0_SCR),A ; SET SCRATCH REG TO TEST VALUE - LD A,0BFH - OUT (UART0_LCR),A ; SET LCR=$BF TO ATTEMPT TO ACCESS EFR - IN A,(UART0_SCR) ; READ SCRATCH REGISTER - CP $55 ; IF $55, NO EFR - JR NZ,UART0_AFC1 ; NZ, HAVE EFR, DO IT - SET 5,B ; ENABLE AUTO FLOW CONTROL - JR UART0_AFC2 -UART0_AFC1: - LD A,0C0H ; ENABLE CTS/RTS FLOW CONTROL - OUT (UART0_EFR),A ; SAVE IT -UART0_AFC2: -#ENDIF - - LD A,03H - OUT (UART0_LCR),A ; DLAB OFF, 8 DATA, 1 STOP, NO PARITY - - LD A,B ; LOAD MCR VALUE TO SET - OUT (UART0_MCR),A ; SAVE IT - +; + ; SETUP FOR GENERIC INIT ROUTINE + LD (UART_BASE),A ; IO BASE ADDRESS + LD DE,UART0BAUD / 10 ; BAUD RATE / 10 + LD (UART_BAUD),DE ; SAVE IT + LD DE,UART0_DIV ; DIVISOR + LD (UART_DIV),DE ; SAVE IT +; + ; MAP REQUESTED FEATURES TO FLAGS IN UART_FUNC + XOR A ; START WITH NO FEATURES #IF (UART0FIFO) -; LD A,07H ; ENABLE AND RESET FIFOS - LD A,01H ; ENABLE AND RESET FIFOS - OUT (UART0_FCR),A ; ENABLE FIFOS - PRTS(" FIFO$") + SET UART_FIFO,A ; TURN ON FIFO BIT IF REQUESTED #ENDIF - RET +#IF (UART0AFC) + SET UART_AFC,A ; TURN ON AFC BIT IF REQUESTED +#ENDIF + LD (UART_FUNC),A ; SAVE IT +; + JP UART_INITP ; HAND OFF TO GENERIC INIT CODE ; ; ; @@ -232,50 +241,25 @@ UART1_INIT: PRTS("UART1: IO=0x$") LD A,UART1IOB CALL PRTHEXBYTE - PRTS(" BAUD=$") - LD HL,UART1BAUD / 10 - CALL PRTDEC - PRTC('0') - - LD A,80H - OUT (UART1_LCR),A ; DLAB ON - LD A,UART1_DIV % $100 - OUT (UART1_DLL),A ; SET DIVISOR (LS) - LD A,UART1_DIV / $100 - OUT (UART1_DLM),A ; SET DIVISOR (MS) - - LD B,03H ; B = DEFAULT SETTING FOR MCR (DTR + RTS) - -#IF (UART1AFC) - PRTS(" AFC$") - LD A,$55 ; TEST VALUE - OUT (UART1_SCR),A ; SET SCRATCH REG TO TEST VALUE - LD A,0BFH - OUT (UART1_LCR),A ; SET LCR=$BF TO ATTEMPT TO ACCESS EFR - IN A,(UART1_SCR) ; READ SCRATCH REGISTER - CP $55 ; IF $55, NO EFR - JR NZ,UART1_AFC1 ; NZ, HAVE EFR, DO IT - SET 5,B ; ENABLE AUTO FLOW CONTROL - JR UART1_AFC2 -UART1_AFC1: - LD A,0C0H ; ENABLE CTS/RTS FLOW CONTROL - OUT (UART1_EFR),A ; SAVE IT -UART1_AFC2: -#ENDIF - - LD A,03H - OUT (UART1_LCR),A ; DLAB OFF, 8 DATA, 1 STOP, NO PARITY - - LD A,B ; LOAD MCR VALUE TO SET - OUT (UART1_MCR),A ; SAVE IT - +; + ; SETUP FOR GENERIC INIT ROUTINE + LD (UART_BASE),A ; IO BASE ADDRESS + LD DE,UART1BAUD / 10 ; BAUD RATE / 10 + LD (UART_BAUD),DE ; SAVE IT + LD DE,UART1_DIV ; DIVISOR + LD (UART_DIV),DE ; SAVE IT +; + ; MAP REQUESTED FEATURES TO FLAGS IN UART_FUNC + XOR A ; START WITH NO FEATURES #IF (UART1FIFO) -; LD A,07H ; ENABLE AND RESET FIFOS - LD A,01H ; ENABLE AND RESET FIFOS - OUT (UART1_FCR),A ; ENABLE FIFOS - PRTS(" FIFO$") + SET UART_FIFO,A ; TURN ON FIFO BIT IF REQUESTED #ENDIF - RET +#IF (UART1AFC) + SET UART_AFC,A ; TURN ON AFC BIT IF REQUESTED +#ENDIF + LD (UART_FUNC),A ; SAVE IT +; + JP UART_INITP ; HAND OFF TO GENERIC INIT CODE ; ; ; @@ -330,3 +314,337 @@ UART1_OST: RET ; #ENDIF +; +; UART INITIALIZATION ROUTINE +; +UART_INITP: + LD DE,400 ; WAIT 1/10 SEC FOR UART TO SEND PENDING + CALL VDELAY + + ; DETECT THE UART TYPE + CALL UART_DETECT ; DETERMINE UART TYPE + LD (UART_TYPE),A ; SAVE TYPE + + ; HL IS USED BELOW TO REFER TO FEATURE BITS ENABLED + LD HL,UART_FEAT ; HL POINTS TO FEATURE FLAGS BYTE + XOR A ; RESET ALL FEATRUES + LD (HL),A ; SAVE IT + + ; START OF UART INITIALIZATION, SET BAUD RATE + LD A,80H + UART_OUT(UART_LCR) ; DLAB ON + LD DE,(UART_DIV) + LD A,E + UART_OUT(UART_DLL) ; SET DIVISOR (LS) + LD A,D + UART_OUT(UART_DLM) ; SET DIVISOR (MS) + + ; SET LCR TO DEFAULT + LD A,$03 ; DLAB OFF, 8 DATA, 1 STOP, NO PARITY + UART_OUT(UART_LCR) ; SAVE IT + + ; SET MCR TO DEFAULT + LD A,$03 ; DTR + RTS + UART_OUT(UART_MCR) ; SAVE IT + + LD A,(UART_TYPE) ; GET UART TYPE + CP UART_16550A ; 16550A OR BETTER? + JR C,UART_INITP1 ; NOPE, SKIP FIFO & AFC FEATURES + + LD B,0 ; START BY ASSUMING NO FIFOS, FCR=0 + LD A,(UART_FUNC) ; LOAD FIFO ENABLE REQUEST VALUE + BIT UART_FIFO,A ; TEST FOR FIFO REQUESTED + JR Z,UART_FIFO1 ; NOPE + LD B,$07 ; VALUE TO ENABLE AND RESET FIFOS + SET UART_FIFO,(HL) ; RECORD FEATURE ENABLED +UART_FIFO1: + LD A,B ; MOVE VALUE TO A + UART_OUT(UART_FCR) ; DO IT + + LD A,(UART_TYPE) ; GET UART TYPE + CP UART_16550C ; 16550C OR BETTER? + JR C,UART_INITP1 ; NOPE, SKIP AFC FEATURES + + ; BRANCH BASED ON TYPE AFC CONFIGURATION (EFR OR MCR) + LD A,(UART_TYPE) ; GET UART TYPE + CP UART_16650 ; 16650? + JR Z,UART_AFC2 ; USE EFR REGISTER + CP UART_16850 ; 16750? + JR Z,UART_AFC2 ; USE EFR REGISTER + + ; SET AFC VIA MCR + LD B,$03 ; START WITH DEFAULT MCR + LD A,(UART_FUNC) ; LOAD AFC ENABLE REQUEST VALUE + BIT UART_AFC,A ; TEST FOR AFC REQUESTED + JR Z,UART_AFC1 ; NOPE + SET 5,B ; SET MCR BIT TO ENABLE AFC + SET UART_AFC,(HL) ; RECORD FEATURE ENABLED +UART_AFC1: + LD A,B ; MOVE VALUE TO Ar + UART_OUT(UART_MCR) ; SET AFC VALUE VIA MCR + JR UART_INITP1 ; AND CONTINUE + +UART_AFC2: ; SET AFC VIA EFR + LD A,$BF ; VALUE TO ACCESS EFR + UART_OUT(UART_LCR) ; SET VALUE IN LCR + + LD B,0 ; ASSUME AFC OFF, EFR=0 + LD A,(UART_FUNC) ; LOAD AFC ENABLE REQUEST VALUE + BIT UART_AFC,A ; TEST FOR AFC REQUESTED + JR Z,UART_AFC3 ; NOPE + LD B,$C0 ; ENABLE CTS/RTS FLOW CONTROL + SET UART_AFC,(HL) ; RECORD FEATURE ENABLED +UART_AFC3: + LD A,B ; MOVE VALUE TO A + UART_OUT(UART_EFR) ; SAVE IT + LD A,$03 ; NORMAL LCR VALUE + UART_OUT(UART_LCR) ; SAVE IT + +UART_INITP1: +#IF (UART_DEBUG) + PRTS(" [$") + + ; DEBUG: DUMP UART TYPE + LD A,(UART_TYPE) + CALL PRTHEXBYTE + + ; DEBUG: DUMP IIR + UART_IN(UART_IIR) + CALL PC_SPACE + CALL PRTHEXBYTE + + ; DEBUG: DUMP LCR + UART_IN(UART_LCR) + CALL PC_SPACE + CALL PRTHEXBYTE + + ; DEBUG: DUMP MCR + UART_IN(UART_MCR) + CALL PC_SPACE + CALL PRTHEXBYTE + + ; DEBUG: DUMP EFR + LD A,$BF + UART_OUT(UART_LCR) + UART_IN(UART_EFR) + PUSH AF + LD A,$03 + UART_OUT(UART_LCR) + POP AF + CALL PC_SPACE + CALL PRTHEXBYTE + + PRTC(']') +#ENDIF + + ; PRINT THE UART TYPE + LD A,(UART_TYPE) + RLCA + LD HL,UART_TYPE_MAP + LD D,0 + LD E,A + ADD HL,DE ; HL NOW POINTS TO MAP ENTRY + LD A,(HL) + INC HL + LD D,(HL) + LD E,A ; HL NOW POINTS TO STRING + CALL PC_SPACE + CALL WRITESTR ; PRINT THE STRING +; + ; ALL DONE IF NO UART WAS DETECTED + LD A,(UART_TYPE) + OR A + JR Z,UART_INITP3 +; + ; PRINT BAUD RATE + PRTS(" BAUD=$") + LD HL,(UART_BAUD) + CALL PRTDEC + PRTC('0') +; + ; PRINT FEATURES ENABLED + LD A,(UART_FEAT) + BIT UART_FIFO,A + JR Z,UART_INITP2 + PRTS(" FIFO$") +UART_INITP2: + BIT UART_AFC,A + JR Z,UART_INITP3 + PRTS(" AFC$") +UART_INITP3: +; + RET +; +; UART DETECTION ROUTINE +; +UART_DETECT: +; + ; SEE IF UART IS THERE BY CHECKING DLAB FUNCTIONALITY + XOR A ; ZERO ACCUM + UART_OUT(UART_IER) ; IER := 0 + LD A,$80 ; DLAB BIT ON + UART_OUT(UART_LCR) ; OUTPUT TO LCR (DLAB REGS NOW ACTIVE) + LD A,$5A ; LOAD TEST VALUE + UART_OUT(UART_DLM) ; OUTPUT TO DLM + UART_IN(UART_DLM) ; READ IT BACK + CP $5A ; CHECK FOR TEST VALUE + JR NZ,UART_DETECT_NONE ; NOPE, UNKNOWN UART OR NOT PRESENT + XOR A ; DLAB BIT OFF + UART_OUT(UART_LCR) ; OUTPUT TO LCR (DLAB REGS NOW INACTIVE) + UART_IN(UART_IER) ; READ IER + CP $5A ; CHECK FOR TEST VALUE + JR Z,UART_DETECT_NONE ; IF STILL $5A, UNKNOWN OR NOT PRESENT +; + ; TEST FOR FUNCTIONAL SCRATCH REG, IF NOT, WE HAVE AN 8250 + LD A,$5A ; LOAD TEST VALUE + UART_OUT(UART_SCR) ; PUT IT IN SCRATCH REGISTER + UART_IN(UART_SCR) ; READ IT BACK + CP $5A ; CHECK IT + JR NZ,UART_DETECT_8250 ; STUPID 8250 +; + ; TEST FOR EFR REGISTER WHICH IMPLIES 16650/850 + LD A,$BF ; VALUE TO ENABLE EFR + UART_OUT(UART_LCR) ; WRITE IT TO LCR + UART_IN(UART_SCR) ; READ SCRATCH REGISTER + CP $5A ; SPR STILL THERE? + JR NZ,UART_DETECT1 ; NOPE, HIDDEN, MUST BE 16650/850 +; + ; RESET LCR TO DEFAULT + XOR A ; ZERO ACCUM + UART_OUT(UART_LCR) ; RESET LCR +; + ; TEST FCR TO ISOLATE 16450/550/550A + LD A,$E7 ; TEST VALUE + UART_OUT(UART_FCR) ; PUT IT IN FCR + UART_IN(UART_IIR) ; READ BACK FROM IIR + BIT 6,A ; BIT 6 IS FIFO ENABLE, LO BIT + JR Z,UART_DETECT_16450 ; IF NOT SET, MUST BE 16450 + BIT 7,A ; BIT 7 IS FIFO ENABLE, HI BIT + JR Z,UART_DETECT_16550 ; IF NOT SET, MUST BE 16550 + BIT 5,A ; BIT 5 IS 64 BYTE FIFO + JR Z,UART_DETECT2 ; IF NOT SET, MUST BE 16550A/C + JR UART_DETECT_16750 ; ONLY THING LEFT IS 16750 +; +UART_DETECT1: ; PICK BETWEEN 16650/850 + ; NEED TO RESET LCR + XOR A ; DLAB BIT OFF + UART_OUT(UART_LCR) ; OUTPUT TO LCR (DLAB REGS NOW INACTIVE) + ; NOT SURE HOW TO DIFFERENTIATE 16650 FROM 16850 YET + JR UART_DETECT_16650 ; ASSUME 16650 + RET +; +UART_DETECT2: ; PICK BETWEEN 16650A/C + ; SET AFC BIT IN FCR + LD A,$20 ; SET AFC BIT, FCR:5 + UART_OUT(UART_FCR) ; WRITE NEW FCR VALUE +; + ; READ IT BACK, IF SET, WE HAVE 16550C + UART_IN(UART_FCR) ; READ BACK FCR + BIT 5,A ; CHECK AFC BIT + JR Z,UART_DETECT_16550A ; NOT SET, SO 16550A + JR UART_DETECT_16550C ; IS SET, SO 16550C +; +UART_DETECT_NONE: + LD A,UART_NONE + RET +; +UART_DETECT_8250: + LD A,UART_8250 + RET +; +UART_DETECT_16450: + LD A,UART_16450 + RET +; +UART_DETECT_16550: + LD A,UART_16550 + RET +; +UART_DETECT_16550A: + LD A,UART_16550A + RET +; +UART_DETECT_16550C: + LD A,UART_16550C + RET +; +UART_DETECT_16650: + LD A,UART_16650 + RET +; +UART_DETECT_16750: + LD A,UART_16750 + RET +; +UART_DETECT_16850: + LD A,UART_16850 + RET +; +; ROUTINES TO READ/WRITE PORTS INDIRECTLY +; +; READ VALUE OF UART PORT ON TOS INTO REGISTER A +; +UART_INP: + EX (SP),HL ; SWAP HL AND TOS + PUSH BC ; PRESERVE BC + LD A,(UART_BASE) ; GET UART IO BASE PORT + OR (HL) ; OR IN REGISTER ID BITS + LD C,A ; C := PORT + INC HL ; BUMP HL PAST REG ID PARM + IN A,(C) ; READ PORT INTO A + POP BC ; RESTORE BC + EX (SP),HL ; SWAP BACK HL AND TOS + RET +; +; WRITE VALUE IN REGISTER A TO UART PORT ON TOS +; +UART_OUTP: + EX (SP),HL ; SWAP HL AND TOS + PUSH BC ; PRESERVE BC + PUSH AF ; SAVE AF (VALUE TO WRITE) + LD A,(UART_BASE) ; GET UART IO BASE PORT + OR (HL) ; OR IN REGISTER ID BITS + LD C,A ; C := PORT + INC HL ; BUMP HL PAST REG ID PARM + POP AF ; RESTORE VALUE TO WRITE + OUT (C),A ; WRITE VALUE TO PORT + POP BC ; RESTORE BC + EX (SP),HL ; SWAP BACK HL AND TOS + RET +; +; +; +UART_TYPE_MAP: + .DW UART_STR_NONE + .DW UART_STR_8250 + .DW UART_STR_16450 + .DW UART_STR_16550 + .DW UART_STR_16550A + .DW UART_STR_16550C + .DW UART_STR_16650 + .DW UART_STR_16750 + .DW UART_STR_16850 + +UART_STR_NONE .DB "$" +UART_STR_8250 .DB "8250$" +UART_STR_16450 .DB "16450$" +UART_STR_16550 .DB "16550$" +UART_STR_16550A .DB "16550A$" +UART_STR_16550C .DB "16550C$" +UART_STR_16650 .DB "16650$" +UART_STR_16750 .DB "16750$" +UART_STR_16850 .DB "16850$" +; +; WORKING VARIABLES +; +UART_BASE .DB 0 ; BASE IO ADDRESS FOR ACTIVE UART +UART_TYPE .DB 0 ; UART TYPE DISCOVERED +UART_FEAT .DB 0 ; UART FEATURES DISCOVERED +UART_BAUD .DW 0 ; BAUD RATE +UART_DIV .DW 0 ; BAUD DIVISOR +UART_FUNC .DB 0 ; UART FUNCTIONS REQUESTED +; +; +; +UART_FIFO .EQU 0 ; FIFO ENABLE BIT +UART_AFC .EQU 1 ; AUTO FLOW CONTROL ENABLE BIT diff --git a/Source/ver.inc b/Source/ver.inc index 670de851..3a2cf10f 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -1,6 +1,6 @@ #DEFINE RMJ 2 #DEFINE RMN 5 #DEFINE RUP 0 -#DEFINE RTP 12 -#DEFINE BIOSVER "2.5 - Beta 12" +#DEFINE RTP 13 +#DEFINE BIOSVER "2.5 - Beta 13" #DEFINE REVISION 412