; ~/RomWBW/branches/s100/Source/std.asm 1/19/2013 dwg - ; ; The purpose of this file is to define generic symbols and to include ; the appropriate std-*.inc file to bring in platform specifics. ; There are four classes of systems supported by N8VEM. ; 1. N8VEM Platforms that include ECB interface ; 2. ZETA Genrally N8VEM-like, but no ECB ; 3. N8 Generally N8VEM-like bt 180 and extra embedded devices ; 4. S100 Assumes Z80 Master CPU Card ; All the classes require certain generic definitions, and these are ; defined here prior to the inclusion of platform specific .inc files. ; It is unfortunate, but all the possible config items must be defined ; here because the config gets read before the specific std-*.inc's ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; TRUE .EQU 1 FALSE .EQU 0 ; ; PRIMARY HARDWARE PLATFORMS ; PLT_N8VEM .EQU 1 ; N8VEM ECB Z80 SBC PLT_ZETA .EQU 2 ; ZETA Z80 SBC PLT_N8 .EQU 3 ; N8 (HOME COMPUTER) Z180 SBC PLT_MK4 .EQU 4 PLT_S2I .EQU 5 ; SCSI2IDE PLT_S100 .EQU 6 ; S100COMPUTERS Z80 based system PLT_UNA .EQU 7 ; UNA BIOS ; ; RAM DISK INITIALIZATION OPTIONS ; CLR_NEVER .EQU 0 ; NEVER CLEAR RAM DISK CLR_AUTO .EQU 1 ; CLEAR RAM DISK IF INVALID DIR ENTRIES CLR_ALWAYS .EQU 2 ; ALWAYS CLEAR RAM DISK ; ; FLOPPY DISK MEDIA SELECTIONS (ID'S MUST BE INDEX OF ENTRY IN FCD_TBL) ; FDM720 .EQU 0 ; 3.5" FLOPPY, 720KB, 2 SIDES, 80 TRKS, 9 SECTORS FDM144 .EQU 1 ; 3.5" FLOPPY, 1.44MB, 2 SIDES, 80 TRKS, 18 SECTORS FDM360 .EQU 2 ; 5.25" FLOPPY, 360KB, 2 SIDES, 40 TRKS, 9 SECTORS FDM120 .EQU 3 ; 5.25" FLOPPY, 1.2MB, 2 SIDES, 80 TRKS, 15 SECTORS FDM111 .EQU 4 ; 8" FLOPPY, 1.11MB, 2 SIDES, 74 TRKS, 15 SECTORS ; ; MEDIA ID VALUES ; MID_NONE .EQU 0 MID_MDROM .EQU 1 MID_MDRAM .EQU 2 MID_RF .EQU 3 MID_HD .EQU 4 MID_FD720 .EQU 5 MID_FD144 .EQU 6 MID_FD360 .EQU 7 MID_FD120 .EQU 8 MID_FD111 .EQU 9 ; ; CONSOLE TERMINAL TYPE CHOICES ; TERM_TTY .EQU 0 TERM_ANSI .EQU 1 TERM_WYSE .EQU 2 TERM_VT52 .EQU 3 ; ; EMULATION TYPES ; EMUTYP_NONE .EQU 0 EMUTYP_TTY .EQU 1 EMUTYP_ANSI .EQU 2 ; ; SYSTEM GENERATION SETTINGS ; SYS_CPM .EQU 1 ; CPM (IMPLIES BDOS + CCP) SYS_ZSYS .EQU 2 ; ZSYSTEM OS (IMPLIES ZSDOS + ZCPR) ; DOS_BDOS .EQU 1 ; BDOS DOS_ZDDOS .EQU 2 ; ZDDOS VARIANT OF ZSDOS DOS_ZSDOS .EQU 3 ; ZSDOS ; CP_CCP .EQU 1 ; CCP COMMAND PROCESSOR CP_ZCPR .EQU 2 ; ZCPR COMMAND PROCESSOR ; ; CONFIGURE DOS (DOS) AND COMMAND PROCESSOR (CP) BASED ON SYSTEM SETTING (SYS) ; #IFNDEF BLD_SYS SYS .EQU SYS_CPM #ELSE SYS .EQU BLD_SYS #ENDIF ; #IF (SYS == SYS_CPM) DOS .EQU DOS_BDOS CP .EQU CP_CCP #DEFINE OSLBL "CP/M-80 2.2" #ENDIF ; #IF (SYS == SYS_ZSYS) DOS .EQU DOS_ZSDOS CP .EQU CP_ZCPR #DEFINE OSLBL "ZSDOS 1.1" #ENDIF ; ; INCLUDE VERSION AND BUILD SETTINGS ; #INCLUDE "ver.inc" ; ADD BIOSVER ; #INCLUDE "build.inc" ; INCLUDE USER CONFIG, ADD VARIANT, TIMESTAMP, & ROMSIZE ; ; INCLUDE PLATFORM SPECIFIC HARDWARE DEFINITIONS ; #IF ((PLATFORM == PLT_N8VEM) | (PLATFORM == PLT_ZETA)) #INCLUDE "n8vem.inc" #ENDIF ; #IF (PLATFORM == PLT_S2I) #INCLUDE "s2i.inc" #ENDIF ; #IF (PLATFORM == PLT_N8) #INCLUDE "n8.inc" #ENDIF ; #IF (PLATFORM == PLT_MK4) #INCLUDE "mk4.inc" #ENDIF ; #IF (PLATFORM == PLT_UNA) #INCLUDE "una.inc" #ENDIF ; ; CHARACTER DEVICE FUNCTIONS ; CF_INIT .EQU 0 CF_IN .EQU 1 CF_IST .EQU 2 CF_OUT .EQU 3 CF_OST .EQU 4 ; ; DISK OPERATIONS ; DOP_READ .EQU 0 ; READ OPERATION DOP_WRITE .EQU 1 ; WRITE OPERATION DOP_FORMAT .EQU 2 ; FORMAT OPERATION DOP_READID .EQU 3 ; READ ID OPERATION ; ; BIOS FUNCTIONS ; #IF (PLATFORM == PLT_UNA) BF_CIO .EQU $10 BF_CIOIN .EQU BF_CIO + 1 ; CHARACTER INPUT BF_CIOOUT .EQU BF_CIO + 2 ; CHARACTER OUTPUT BF_CIOIST .EQU BF_CIO + 3 ; CHARACTER INPUT STATUS BF_CIOOST .EQU BF_CIO + 4 ; CHARACTER OUTPUT STATUS ; BF_DIO .EQU $40 BF_DIORD .EQU BF_DIO + 2 ; DISK READ BF_DIOWR .EQU BF_DIO + 3 ; DISK WRITE #ELSE BF_CIO .EQU $00 BF_CIOIN .EQU BF_CIO + 0 ; CHARACTER INPUT BF_CIOOUT .EQU BF_CIO + 1 ; CHARACTER OUTPUT BF_CIOIST .EQU BF_CIO + 2 ; CHARACTER INPUT STATUS BF_CIOOST .EQU BF_CIO + 3 ; CHARACTER OUTPUT STATUS BF_CIOCFG .EQU BF_CIO + 4 ; CHARACTER I/O CONFIG ; BF_DIO .EQU $10 BF_DIORD .EQU BF_DIO + 0 ; DISK READ BF_DIOWR .EQU BF_DIO + 1 ; DISK WRITE BF_DIOST .EQU BF_DIO + 2 ; DISK STATUS BF_DIOMED .EQU BF_DIO + 3 ; DISK MEDIA BF_DIOID .EQU BF_DIO + 4 ; DISK IDENTIFY BF_DIOGETBUF .EQU BF_DIO + 8 ; DISK GET BUFFER ADR BF_DIOSETBUF .EQU BF_DIO + 9 ; DISK SET BUFFER ADR BF_DIODEVCNT .EQU BF_DIO + 10 ; DISK DEVICE COUNT BF_DIODEVINF .EQU BF_DIO + 11 ; DISK DEVICE INFO ; BF_RTC .EQU $20 BF_RTCGETTIM .EQU BF_RTC + 0 ; GET TIME BF_RTCSETTIM .EQU BF_RTC + 1 ; SET TIME BF_RTCGETBYT .EQU BF_RTC + 2 ; GET NVRAM BYTE BY INDEX BF_RTCSETBYT .EQU BF_RTC + 3 ; SET NVRAM BYTE BY INDEX BF_RTCGETBLK .EQU BF_RTC + 4 ; GET NVRAM DATA BLOCK BF_RTCSETBLK .EQU BF_RTC + 5 ; SET NVRAM DATA BLOCK ; BF_EMU .EQU $30 BF_EMUIN .EQU BF_EMU + 0 ; EMULATOR CHARACTER INPUT BF_EMUOUT .EQU BF_EMU + 1 ; EMULATOR CHARACTER OUTPUT BF_EMUIST .EQU BF_EMU + 2 ; EMULATOR CHARACTER INPUT STATUS BF_EMUOST .EQU BF_EMU + 3 ; EMULATOR CHARACTER OUTPUT STATUS BF_EMUCFG .EQU BF_EMU + 4 ; EMULATOR CHARACTER I/O CONFIG BF_EMUINI .EQU BF_EMU + 8 ; INITIALIZE EMULATION BF_EMUQRY .EQU BF_EMU + 9 ; QUERY EMULATION STATUS ; BF_VDA .EQU $40 BF_VDAINI .EQU BF_VDA + 0 ; INITIALIZE VDU BF_VDAQRY .EQU BF_VDA + 1 ; QUERY VDU STATUS BF_VDARES .EQU BF_VDA + 2 ; SOFT RESET VDU BF_VDASCS .EQU BF_VDA + 3 ; SET CURSOR STYLE BF_VDASCP .EQU BF_VDA + 4 ; SET CURSOR POSITION BF_VDASAT .EQU BF_VDA + 5 ; SET CHARACTER ATTRIBUTE BF_VDASCO .EQU BF_VDA + 6 ; SET CHARACTER COLOR BF_VDAWRC .EQU BF_VDA + 7 ; WRITE CHARACTER BF_VDAFIL .EQU BF_VDA + 8 ; FILL BF_VDACPY .EQU BF_VDA + 9 ; COPY BF_VDASCR .EQU BF_VDA + 10 ; SCROLL BF_VDAKST .EQU BF_VDA + 11 ; GET KEYBOARD STATUS BF_VDAKFL .EQU BF_VDA + 12 ; FLUSH KEYBOARD BUFFER BF_VDAKRD .EQU BF_VDA + 13 ; READ KEYBOARD ; BF_SYS .EQU $F0 BF_SYSSETBNK .EQU BF_SYS + 0 ; SET CURRENT BANK BF_SYSGETBNK .EQU BF_SYS + 1 ; GET CURRENT BANK BF_SYSCPY .EQU BF_SYS + 2 ; COPY TO/FROM RAM/ROM MEMORY BANK BF_SYSXCPY .EQU BF_SYS + 3 ; EXTENDED COPY SETUP BF_SYSATTR .EQU BF_SYS + 4 ; GET/SET SYSTEM ATTRIBUTE VALUE ;BF_SYSXXXX .EQU BF_SYS + 5 ; BF_SYSGETVER .EQU BF_SYS + 6 ; GET VERSION OF HBIOS #ENDIF ; ; SYSTEM ATTRIBUTE IDS ; AID_BOOTVOL .EQU 0 ; BOOT VOLUME, MSB=DEV/UNIT, LSB=LU AID_BOOTROM .EQU 0 ; BANK ID OF ROM PAGE BOOTED ; ; MEMORY LAYOUT ; SYS_SIZ .EQU $3000 ; COMBINED SIZE OF SYSTEM AREA (OS + HBIOS PROXY) HBBUF_SIZ .EQU 1024 ; INVARIANT HBIOS PHYSICAL DISK BUFFER, 1K HBX_SIZ .EQU $200 ; HBIOS PROXY SIZE (SUBJECT TO CHANGE) CPM_SIZ .EQU SYS_SIZ - HBX_SIZ ; NET SIZE OF ALL OS COMPONENTS (EXCLUDING HBIOS PROXY) CCP_SIZ .EQU $800 ; INVARIANT SIZE OF CCP BDOS_SIZ .EQU $E00 ; INVARIANT SIZE OF BDOS CBIOS_SIZ .EQU CPM_SIZ - CCP_SIZ - BDOS_SIZ ; CBIOS IS THE REMAINDER MEMTOP .EQU $10000 ; INVARIANT TOP OF Z80 ADDRESSABLE MEMORY BNKTOP .EQU $8000 ; BANK MEMORY BARRIER HBBUF_IMG .EQU BNKTOP - HBBUF_SIZ ; LOC OF DISK BUFFER IN HBIOS IMAGE BANK HBX_IMG .EQU BNKTOP - HBX_SIZ ; LOC OF HBX IMAGE IN HBIOS IMAGE BANK HBBUF_END .EQU BNKTOP ; END OF PHYSICAL DISK BUFFER IN HBIOS HBBUF_LOC .EQU HBBUF_END - HBBUF_SIZ ; START OF PHYSICAL DISK BUFFER HBX_END .EQU MEMTOP ; END OF HBIOS PROXY HBX_LOC .EQU HBX_END - HBX_SIZ ; START OF HBIOS PROXY CPM_END .EQU HBX_LOC ; END OF CPM COMPONENTS (INCLUDING CBIOS) CPM_LOC .EQU CPM_END - CPM_SIZ ; START OF CPM COMPONENTS CBIOS_END .EQU HBX_LOC ; END OF CBIOS CBIOS_LOC .EQU CBIOS_END - CBIOS_SIZ ; START OF CBIOS BDOS_END .EQU CBIOS_LOC ; END OF BDOS BDOS_LOC .EQU BDOS_END - BDOS_SIZ ; START OF BDOS CCP_END .EQU BDOS_LOC ; END OF CCP CCP_LOC .EQU CCP_END - CCP_SIZ ; START OF CCP CPM_ENT .EQU CBIOS_LOC ; CPM ENTRY POINT (IN CBIOS) CCP_ENT .EQU CPM_LOC ; COMMAND PROCESSOR ENTRY POINT (IN CCP) MON_LOC .EQU $C000 ; LOCATION OF MONITOR FOR RUNNING SYSTEM MON_SIZ .EQU $1000 ; SIZE OF MONITOR BINARY IMAGE MON_END .EQU MON_LOC + MON_SIZ ; END OF MONITOR MON_DSKY .EQU MON_LOC + (0 * 3) ; MONITOR ENTRY (DSKY) MON_SERIAL .EQU MON_LOC + (1 * 3) ; MONITOR ENTRY (SERIAL PORT) CBIOS_BOOT .EQU CBIOS_LOC + (0 * 3) CBIOS_WBOOT .EQU CBIOS_LOC + (1 * 3) CBIOS_CONST .EQU CBIOS_LOC + (2 * 3) CBIOS_CONIN .EQU CBIOS_LOC + (3 * 3) CBIOS_CONOUT .EQU CBIOS_LOC + (4 * 3) CBIOS_LIST .EQU CBIOS_LOC + (5 * 3) CBIOS_PUNCH .EQU CBIOS_LOC + (6 * 3) CBIOS_READER .EQU CBIOS_LOC + (7 * 3) CBIOS_HOME .EQU CBIOS_LOC + (8 * 3) CBIOS_SELDSK .EQU CBIOS_LOC + (9 * 3) CBIOS_SETTRK .EQU CBIOS_LOC + (10 * 3) CBIOS_SETSEC .EQU CBIOS_LOC + (11 * 3) CBIOS_SETDMA .EQU CBIOS_LOC + (12 * 3) CBIOS_READ .EQU CBIOS_LOC + (13 * 3) CBIOS_WRITE .EQU CBIOS_LOC + (14 * 3) CBIOS_LISTST .EQU CBIOS_LOC + (15 * 3) CBIOS_SECTRN .EQU CBIOS_LOC + (16 * 3) ; CDISK: .EQU 4 ; LOC IN PAGE 0 OF CURRENT DISK NUMBER 0=A,...,15=P IOBYTE: .EQU 3 ; LOC IN PAGE 0 OF I/O DEFINITION BYTE ; ; HBIOS PROXY COMMON DATA BLOCK ; EXACTLY 32 BYTES AT $FFE0-$FFFF ; HBX_XFC .EQU $10000 - $20 ; HBIOS PROXY INTERFACE AREA, 32 BYTES FIXED ; HBX_XFCDAT .EQU HBX_XFC ; DATA PORTION OF HBIOX PROXY INTERFACE AREA HB_CURBNK .EQU HBX_XFCDAT + 0 ; CURRENTLY ACTIVE LOW MEMORY BANK ID HB_PRVBNK .EQU HBX_XFCDAT + 1 ; PREVIOUS BANK (BANK SELECTED PRIOR TO CURRENT BANK) HB_SRCADR .EQU HBX_XFCDAT + 2 ; BNKCPY: DESTINATION BANK ID HB_SRCBNK .EQU HBX_XFCDAT + 4 ; BNKCPY: SOURCE BANK ID HB_DSTADR .EQU HBX_XFCDAT + 5 ; BNKCPY: DESTINATION ADDRESS HB_DSTBNK .EQU HBX_XFCDAT + 7 ; BNKCPY: SOURCE ADDRESS HB_CNT .EQU HBX_XFCDAT + 8 ; BNKCPY: COUNT ; HBX_XFCFNS .EQU HBX_XFC + $10 ; JUMP TABLE PORTION OF HBIOS PROXY INTERFACE AREA HB_INVOKE .EQU HBX_XFCFNS + (0 * 3) ; INVOKE HBIOS FUNCTION HB_BNKSEL .EQU HBX_XFCFNS + (1 * 3) ; SELECT LOW MEMORY BANK ID HB_BNKCPY .EQU HBX_XFCFNS + (2 * 3) ; INTERBANK MEMORY COPY HB_BNKCALL .EQU HBX_XFCFNS + (3 * 3) ; INTERBANK FUNCTION CALL HB_LOC .EQU HBX_XFCFNS + 12 ; ADDRESS OF HBIOS PROXY START HB_IDENT .EQU HBX_XFCFNS + 14 ; POINTER TO HBIOS IDENT DATA BLOCK