590 lines
38 KiB
NASM
590 lines
38 KiB
NASM
;--------------------------------------------------------------------------------------------------------
|
|
;-
|
|
;- Name: CPM_Definitions.asm
|
|
;- Created: January 2020
|
|
;- Author(s): Philip Smart
|
|
;- Description: Sharp MZ series CPM v2.23
|
|
;- Definitions for the Sharp MZ80A CPM v2.23 OS used in the RFS
|
|
;-
|
|
;- Credits:
|
|
;- Copyright: (c) 2019-23 Philip Smart <philip.smart@net2net.org>
|
|
;-
|
|
;- History: Jan 2020 - Initial version.
|
|
; May 2020 - Advent of the new RFS PCB v2.0, quite a few changes to accommodate the
|
|
; additional and different hardware. The SPI is now onboard the PCB and
|
|
; not using the printer interface card.
|
|
; Mar 2021 - Changes to work with the RFS v2.1 board.
|
|
;- Apr 2021 - Removed ROM and RAM Drive functionality as it provided no performance or
|
|
;- use benefit over SD which are much larger and RW.
|
|
;-
|
|
;--------------------------------------------------------------------------------------------------------
|
|
;- This source file is free software: you can redistribute it and-or modify
|
|
;- it under the terms of the GNU General Public License as published
|
|
;- by the Free Software Foundation, either version 3 of the License, or
|
|
;- (at your option) any later version.
|
|
;-
|
|
;- This source file is distributed in the hope that it will be useful,
|
|
;- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
;- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
;- GNU General Public License for more details.
|
|
;-
|
|
;- You should have received a copy of the GNU General Public License
|
|
;- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
;--------------------------------------------------------------------------------------------------------
|
|
|
|
;-----------------------------------------------
|
|
; Features.
|
|
;-----------------------------------------------
|
|
HW_SPI_ENA EQU 1 ; Set to 1 if hardware SPI is present on the RFS PCB v2 board.
|
|
SW_SPI_ENA EQU 0 ; Set to 1 if software SPI is present on the RFS PCB v2 board.
|
|
PP_SPI_ENA EQU 0 ; Set to 1 if using the SPI interface via the Parallel Port, ie. for RFS PCB v1 which doesnt have SPI onboard.
|
|
|
|
; Build time options, only set to '1' to build, '0' to disable, only 1 can be set to '1'.
|
|
; IF BUILD_VERSION = 0
|
|
BUILD_80C EQU 1 ; Build for an MZ-80A with a 40/80 column card.
|
|
BUILD_40C EQU 0 ; Build for a standard 40 column MZ-80A.
|
|
; ENDIF
|
|
; IF BUILD_VERSION = 1
|
|
;BUILD_80C EQU 0 ; Build for an MZ-80A with a 40/80 column card.
|
|
;BUILD_40C EQU 1 ; Build for a standard 40 column MZ-80A.
|
|
; ENDIF
|
|
|
|
;-----------------------------------------------
|
|
; Configurable settings.
|
|
;-----------------------------------------------
|
|
MAXRDRETRY EQU 002h
|
|
MAXWRRETRY EQU 002h
|
|
BLKSIZ EQU 4096 ; CP/M allocation size
|
|
HSTSIZ EQU 512 ; host disk sector size
|
|
HSTSPT EQU 32 ; host disk sectors/trk
|
|
HSTBLK EQU HSTSIZ/128 ; CP/M sects/host buff
|
|
CPMSPT EQU HSTBLK * HSTSPT ; CP/M sectors/track
|
|
SECMSK EQU HSTBLK-1 ; sector mask
|
|
WRALL EQU 0 ; write to allocated
|
|
WRDIR EQU 1 ; write to directory
|
|
WRUAL EQU 2 ; write to unallocated
|
|
TMRTICKINTV EQU 5 ; Number of 0.010mSec ticks per interrupt, ie. resolution of RTC.
|
|
MTROFFMSECS EQU 100 ; Time from last access to motor being switched off in seconds in TMRTICKINTV ticks.
|
|
IF BUILD_80C = 1
|
|
COLW EQU 80 ; Width of the display screen (ie. columns).
|
|
ELSE
|
|
COLW EQU 40 ; Width of the display screen (ie. columns).
|
|
ENDIF
|
|
ROW EQU 25 ; Number of rows on display screen.
|
|
SCRNSZ EQU COLW * ROW ; Total size, in bytes, of the screen display area.
|
|
SCRLW EQU COLW / 8 ; Number of 8 byte regions in a line for hardware scroll.
|
|
|
|
; BIOS equates
|
|
MAXDISKS EQU 7 ; Max number of Drives supported
|
|
KEYBUFSIZE EQU 16 ; Ensure this is a power of 2, max size 256.
|
|
|
|
; Debugging
|
|
ENADEBUG EQU 0 ; Enable debugging logic, 1 = enable, 0 = disable
|
|
|
|
|
|
;-----------------------------------------------
|
|
; Entry/compilation start points.
|
|
;-----------------------------------------------
|
|
CBIOSSTART EQU 0C000h
|
|
CBIOSDATA EQU CBIOSSTART - 0400H
|
|
UROMADDR EQU 0E800H ; Start of User ROM Address space.
|
|
FDCROMADDR EQU 0F000H
|
|
CBASE EQU 0A000H
|
|
CPMCCP EQU CBASE ; CP/M System entry
|
|
CPMBDOS EQU CPMCCP + 0806H ; BDOS entry
|
|
CPMBIOS EQU CPMCCP + 01600H ; Original CPM22 BIOS entry
|
|
CPMCOPYRMSG EQU CBASE+8 ; Copyright message stored in CP/M binary.
|
|
BOOT EQU CBIOSSTART + 0
|
|
WBOOT EQU CBIOSSTART + 3
|
|
WBOOTE EQU CBIOSSTART + 3
|
|
CONST EQU CBIOSSTART + 6
|
|
CONIN EQU CBIOSSTART + 9
|
|
CONOUT EQU CBIOSSTART + 12
|
|
LIST EQU CBIOSSTART + 15
|
|
PUNCH EQU CBIOSSTART + 18
|
|
READER EQU CBIOSSTART + 21
|
|
HOME EQU CBIOSSTART + 24
|
|
SELDSK EQU CBIOSSTART + 27
|
|
SETTRK EQU CBIOSSTART + 30
|
|
SETSEC EQU CBIOSSTART + 33
|
|
SETDMA EQU CBIOSSTART + 36
|
|
READ EQU CBIOSSTART + 39
|
|
WRITE EQU CBIOSSTART + 42
|
|
FRSTAT EQU CBIOSSTART + 45
|
|
SECTRN EQU CBIOSSTART + 48
|
|
UNUSED EQU CBIOSSTART + 51
|
|
BANKTOBANK EQU CBIOSSTART + 54
|
|
CCP EQU CBASE
|
|
CCPCLRBUF EQU CBASE + 3
|
|
DPBASE EQU CPMBIOS
|
|
CDIRBUF EQU CPMBIOS + (MAXDISKS * 16)
|
|
CSVALVMEM EQU CDIRBUF + 128
|
|
CSVALVEND EQU CBIOSDATA - 1 ;CSVALVMEM + 1253
|
|
IOBYT EQU 00003H ; IOBYTE address
|
|
CDISK EQU 00004H ; Address of Current drive name and user number
|
|
CPMUSERDMA EQU 00080h ; Default CPM User DMA address.
|
|
DPSIZE EQU 16 ; Size of a Disk Parameter Block
|
|
DPBLOCK0 EQU SCRN - (8 * DPSIZE) ; Location of the 1st DPB in the CBIOS Rom.
|
|
DPBLOCK1 EQU DPBLOCK0 + DPSIZE
|
|
DPBLOCK2 EQU DPBLOCK1 + DPSIZE
|
|
DPBLOCK3 EQU DPBLOCK2 + DPSIZE
|
|
DPBLOCK4 EQU DPBLOCK3 + DPSIZE
|
|
DPBLOCK5 EQU DPBLOCK4 + DPSIZE
|
|
DPBLOCK6 EQU DPBLOCK5 + DPSIZE
|
|
DPBLOCK7 EQU DPBLOCK6 + DPSIZE
|
|
|
|
;-------------------------------------------------------
|
|
; Function entry points in the CBIOS ROMS
|
|
;-------------------------------------------------------
|
|
UROMJMPTBL EQU UROMADDR + 00020H ; Position at beginning of each bank of an API jump table of public methods in the bank
|
|
|
|
; Public functions in CBIOS User ROM Bank 1 - utility functions, ie. Audio.
|
|
QREBOOT EQU 0 + UROMJMPTBL
|
|
QMELDY EQU 3 + UROMJMPTBL
|
|
QTEMP EQU 6 + UROMJMPTBL
|
|
QMSTA EQU 9 + UROMJMPTBL
|
|
QMSTP EQU 12 + UROMJMPTBL
|
|
QBEL EQU 15 + UROMJMPTBL
|
|
QMODE EQU 18 + UROMJMPTBL
|
|
QTIMESET EQU 21 + UROMJMPTBL
|
|
QTIMEREAD EQU 24 + UROMJMPTBL
|
|
QCHKKY EQU 27 + UROMJMPTBL
|
|
QGETKY EQU 30 + UROMJMPTBL
|
|
|
|
; Public functions in CBIOS User ROM Bank 2 - Screen / ANSI terminal functions.
|
|
QPRNT EQU 0 + UROMJMPTBL
|
|
QPRTHX EQU 3 + UROMJMPTBL
|
|
QPRTHL EQU 6 + UROMJMPTBL
|
|
QANSITERM EQU 9 + UROMJMPTBL
|
|
|
|
; Public functions in CBIOS User ROM Bank 3 - SD Card functions.
|
|
SD_INIT EQU 0 + UROMJMPTBL
|
|
SD_READ EQU 3 + UROMJMPTBL
|
|
SD_WRITE EQU 6 + UROMJMPTBL
|
|
SD_GETLBA EQU 9 + UROMJMPTBL
|
|
SDC_READ EQU 12 + UROMJMPTBL
|
|
SDC_WRITE EQU 15 + UROMJMPTBL
|
|
|
|
; Public functions in CBIOS User ROM Bank 4 - Floppy Disk Controller functions.
|
|
QDSKINIT EQU 0 + UROMJMPTBL
|
|
QSETDRVCFG EQU 3 + UROMJMPTBL
|
|
QSETDRVMAP EQU 6 + UROMJMPTBL
|
|
QSELDRIVE EQU 9 + UROMJMPTBL
|
|
QGETMAPDSK EQU 12 + UROMJMPTBL
|
|
QDSKREAD EQU 15 + UROMJMPTBL
|
|
QDSKWRITE EQU 18 + UROMJMPTBL
|
|
|
|
|
|
;-----------------------------------------------
|
|
; Memory mapped ports in hardware.
|
|
;-----------------------------------------------
|
|
SCRN: EQU 0D000H
|
|
ARAM: EQU 0D800H
|
|
DSPCTL: EQU 0DFFFH ; Screen 40/80 select register (bit 7)
|
|
KEYPA: EQU 0E000h
|
|
KEYPB: EQU 0E001h
|
|
KEYPC: EQU 0E002h
|
|
KEYPF: EQU 0E003h
|
|
CSTR: EQU 0E002h
|
|
CSTPT: EQU 0E003h
|
|
CONT0: EQU 0E004h
|
|
CONT1: EQU 0E005h
|
|
CONT2: EQU 0E006h
|
|
CONTF: EQU 0E007h
|
|
SUNDG: EQU 0E008h
|
|
TEMP: EQU 0E008h
|
|
MEMSW: EQU 0E00CH
|
|
MEMSWR: EQU 0E010H
|
|
INVDSP: EQU 0E014H
|
|
NRMDSP: EQU 0E015H
|
|
SCLDSP: EQU 0E200H
|
|
SCLBASE: EQU 0E2H
|
|
BNKCTRLRST: EQU 0EFF8H ; Bank control reset, returns all registers to power up default.
|
|
BNKCTRLDIS: EQU 0EFF9H ; Disable bank control registers by resetting the coded latch.
|
|
HWSPIDATA: EQU 0EFFBH ; Hardware SPI Data register (read/write).
|
|
HWSPISTART: EQU 0EFFCH ; Start an SPI transfer.
|
|
BNKSELMROM: EQU 0EFFDh ; Select RFS Bank1 (MROM)
|
|
BNKSELUSER: EQU 0EFFEh ; Select RFS Bank2 (User ROM)
|
|
BNKCTRL: EQU 0EFFFH ; Bank Control register (read/write).
|
|
|
|
;
|
|
; RFS v2 Control Register constants.
|
|
;
|
|
BBCLK EQU 1 ; BitBang SPI Clock.
|
|
SDCS EQU 2 ; SD Card Chip Select, active low.
|
|
BBMOSI EQU 4 ; BitBang MOSI (Master Out Serial In).
|
|
CDLTCH1 EQU 8 ; Coded latch up count bit 1
|
|
CDLTCH2 EQU 16 ; Coded latch up count bit 2
|
|
CDLTCH3 EQU 32 ; Coded latch up count bit 3
|
|
BK2A19 EQU 64 ; User ROM Device Select Bit 0 (or Address bit 19).
|
|
BK2A20 EQU 128 ; User ROM Device Select Bit 1 (or Address bit 20).
|
|
; BK2A20 : BK2A19
|
|
; 0 0 = Flash RAM 0 (default).
|
|
; 0 1 = Flash RAM 1.
|
|
; 1 0 = Flasm RAM 2 or Static RAM 0.
|
|
; 1 1 = Reserved.
|
|
|
|
BNKCTRLDEF EQU BBMOSI+SDCS+BBCLK ; Default on startup for the Bank Control register.
|
|
|
|
;-----------------------------------------------
|
|
; IO ports in hardware and values.
|
|
;-----------------------------------------------
|
|
SPI_OUT EQU 0FFH
|
|
SPI_IN EQU 0FEH
|
|
;
|
|
DOUT_LOW EQU 000H
|
|
DOUT_HIGH EQU 004H
|
|
DOUT_MASK EQU 004H
|
|
DIN_LOW EQU 000H
|
|
DIN_HIGH EQU 001H
|
|
CLOCK_LOW EQU 000H
|
|
CLOCK_HIGH EQU 002H
|
|
CLOCK_MASK EQU 0FDH
|
|
CS_LOW EQU 000H
|
|
CS_HIGH EQU 001H
|
|
|
|
;-----------------------------------------------
|
|
; Rom File System Header (MZF)
|
|
;-----------------------------------------------
|
|
RFS_ATRB: EQU 00000h ; Code Type, 01 = Machine Code.
|
|
RFS_NAME: EQU 00001h ; Title/Name (17 bytes).
|
|
RFS_SIZE: EQU 00012h ; Size of program.
|
|
RFS_DTADR: EQU 00014h ; Load address of program.
|
|
RFS_EXADR: EQU 00016h ; Exec address of program.
|
|
RFS_COMNT: EQU 00018h ; COMMENT
|
|
MZFHDRSZ EQU 128 ; Full MZF Header size
|
|
MZFHDRNCSZ EQU 24 ; Only the primary MZF data, no comment field.
|
|
RFSSECTSZ EQU 256
|
|
MROMSIZE EQU 4096
|
|
UROMSIZE EQU 2048
|
|
BANKSPERTRACK EQU (ROMSECTORSIZE * ROMSECTORS) / UROMSIZE ; (8) We currently only use the UROM for disk images.
|
|
SECTORSPERBANK EQU UROMSIZE / ROMSECTORSIZE ; (16)
|
|
SECTORSPERBLOCK EQU RFSSECTSZ/ROMSECTORSIZE ; (2)
|
|
ROMSECTORSIZE EQU 128
|
|
ROMSECTORS EQU 128
|
|
RAMDRVSECTORSIZE EQU 512
|
|
RAMDRVMAXBANK EQU (RAMDRVSIZE * 1024)/UROMSIZE ; Maximum Bank number for the RAM drive.
|
|
|
|
;ROMBK1: EQU 01016H ; CURRENT MROM BANK
|
|
;ROMBK2: EQU 01017H ; CURRENT USERROM BANK
|
|
;WRKROMBK1: EQU 01018H ; WORKING MROM BANK
|
|
;WRKROMBK2: EQU 01019H ; WORKING USERROM BANK
|
|
|
|
;-----------------------------------------------
|
|
; ROM Banks, 0-7 are reserved for alternative
|
|
; Monitor versions, CPM and RFS
|
|
; code in MROM bank,
|
|
; 0-7 are reserved for RFS code in
|
|
; the User ROM bank.
|
|
; 8-15 are reserved for CPM code in
|
|
; the User ROM bank.
|
|
;-----------------------------------------------
|
|
MROMPAGES EQU 8
|
|
USRROMPAGES EQU 12 ; Monitor ROM : User ROM
|
|
ROMBANK0 EQU 0 ; MROM SA1510 40 Char : RFS Bank 0 - Main RFS Entry point and functions.
|
|
ROMBANK1 EQU 1 ; MROM SA1510 80 Char : RFS Bank 1 - Floppy disk controller and utilities.
|
|
ROMBANK2 EQU 2 ; CPM 2.2 CBIOS : RFS Bank 2 - SD Card controller and utilities.
|
|
ROMBANK3 EQU 3 ; RFS Utilities : RFS Bank 3 - Cmdline tools (Memory, Printer, Help)
|
|
ROMBANK4 EQU 4 ; Free : RFS Bank 4 - CMT Utilities.
|
|
ROMBANK5 EQU 5 ; Free : RFS Bank 5
|
|
ROMBANK6 EQU 6 ; Free : RFS Bank 6
|
|
ROMBANK7 EQU 7 ; Free : RFS Bank 7 - Memory and timer test utilities.
|
|
ROMBANK8 EQU 8 ; : CBIOS Bank 1 - Utilities
|
|
ROMBANK9 EQU 9 ; : CBIOS Bank 2 - Screen / ANSI Terminal
|
|
ROMBANK10 EQU 10 ; : CBIOS Bank 3 - SD Card
|
|
ROMBANK11 EQU 11 ; : CBIOS Bank 4 - Floppy disk controller.
|
|
|
|
|
|
|
|
OBJCD EQU 001h
|
|
|
|
;-----------------------------------------------
|
|
; IO Registers
|
|
;-----------------------------------------------
|
|
FDC EQU 0D8h ; MB8866 IO Region 0D8h - 0DBh
|
|
FDC_CR EQU FDC + 000h ; Command Register
|
|
FDC_STR EQU FDC + 000h ; Status Register
|
|
FDC_TR EQU FDC + 001h ; Track Register
|
|
FDC_SCR EQU FDC + 002h ; Sector Register
|
|
FDC_DR EQU FDC + 003h ; Data Register
|
|
FDC_MOTOR EQU FDC + 004h ; DS[0-3] and Motor control. 4 drives DS= BIT 0 -> Bit 2 = Drive number, 2=1,1=0,0=0 DS0, 2=1,1=0,0=1 DS1 etc
|
|
; bit 7 = 1 MOTOR ON LOW (Active)
|
|
FDC_SIDE EQU FDC + 005h ; Side select, Bit 0 when set = SIDE SELECT LOW
|
|
|
|
;-----------------------------------------------
|
|
; Common character definitions.
|
|
;-----------------------------------------------
|
|
SCROLL EQU 001H ;Set scroll direction UP.
|
|
BELL EQU 007H
|
|
SPACE EQU 020H
|
|
TAB EQU 009H ;TAB ACROSS (8 SPACES FOR SD-BOARD)
|
|
CR EQU 00DH
|
|
LF EQU 00AH
|
|
FF EQU 00CH
|
|
CS EQU 0CH ; Clear screen
|
|
DELETE EQU 07FH
|
|
BACKS EQU 008H
|
|
SOH EQU 1 ; For XModem etc.
|
|
EOT EQU 4
|
|
ACK EQU 6
|
|
NAK EQU 015H
|
|
NUL EQU 000H
|
|
NULL EQU 000H
|
|
CTRL_A EQU 001H
|
|
CTRL_B EQU 002H
|
|
CTRL_C EQU 003H
|
|
CTRL_D EQU 004H
|
|
CTRL_E EQU 005H
|
|
CTRL_F EQU 006H
|
|
CTRL_G EQU 007H
|
|
CTRL_H EQU 008H
|
|
CTRL_I EQU 009H
|
|
CTRL_J EQU 00AH
|
|
CTRL_K EQU 00BH
|
|
CTRL_L EQU 00CH
|
|
CTRL_M EQU 00DH
|
|
CTRL_N EQU 00EH
|
|
CTRL_O EQU 00FH
|
|
CTRL_P EQU 010H
|
|
CTRL_Q EQU 011H
|
|
CTRL_R EQU 012H
|
|
CTRL_S EQU 013H
|
|
CTRL_T EQU 014H
|
|
CTRL_U EQU 015H
|
|
CTRL_V EQU 016H
|
|
CTRL_W EQU 017H
|
|
CTRL_X EQU 018H
|
|
CTRL_Y EQU 019H
|
|
CTRL_Z EQU 01AH
|
|
ESC EQU 01BH
|
|
CTRL_SLASH EQU 01CH
|
|
CTRL_LB EQU 01BH
|
|
CTRL_RB EQU 01DH
|
|
CTRL_CAPPA EQU 01EH
|
|
CTRL_UNDSCR EQU 01FH
|
|
CTRL_AT EQU 000H
|
|
NOKEY EQU 0F0H
|
|
CURSRIGHT EQU 0F1H
|
|
CURSLEFT EQU 0F2H
|
|
CURSUP EQU 0F3H
|
|
CURSDOWN EQU 0F4H
|
|
DBLZERO EQU 0F5H
|
|
INSERT EQU 0F6H
|
|
CLRKEY EQU 0F7H
|
|
HOMEKEY EQU 0F8H
|
|
BREAKKEY EQU 0FBH
|
|
GRAPHKEY EQU 0FCH
|
|
ALPHAKEY EQU 0FDH
|
|
|
|
|
|
; MMC/SD command (SPI mode)
|
|
CMD0 EQU 64 + 0 ; GO_IDLE_STATE
|
|
CMD1 EQU 64 + 1 ; SEND_OP_COND
|
|
ACMD41 EQU 0x40+41 ; SEND_OP_COND (SDC)
|
|
CMD8 EQU 64 + 8 ; SEND_IF_COND
|
|
CMD9 EQU 64 + 9 ; SEND_CSD
|
|
CMD10 EQU 64 + 10 ; SEND_CID
|
|
CMD12 EQU 64 + 12 ; STOP_TRANSMISSION
|
|
CMD13 EQU 64 + 13 ; SEND_STATUS
|
|
ACMD13 EQU 0x40+13 ; SD_STATUS (SDC)
|
|
CMD16 EQU 64 + 16 ; SET_BLOCKLEN
|
|
CMD17 EQU 64 + 17 ; READ_SINGLE_BLOCK
|
|
CMD18 EQU 64 + 18 ; READ_MULTIPLE_BLOCK
|
|
CMD23 EQU 64 + 23 ; SET_BLOCK_COUNT
|
|
ACMD23 EQU 0x40+23 ; SET_WR_BLK_ERASE_COUNT (SDC)
|
|
CMD24 EQU 64 + 24 ; WRITE_BLOCK
|
|
CMD25 EQU 64 + 25 ; WRITE_MULTIPLE_BLOCK
|
|
CMD32 EQU 64 + 32 ; ERASE_ER_BLK_START
|
|
CMD33 EQU 64 + 33 ; ERASE_ER_BLK_END
|
|
CMD38 EQU 64 + 38 ; ERASE
|
|
CMD55 EQU 64 + 55 ; APP_CMD
|
|
CMD58 EQU 64 + 58 ; READ_OCR
|
|
|
|
; Card type flags (CardType)
|
|
CT_MMC EQU 001H ; MMC ver 3
|
|
CT_SD1 EQU 002H ; SD ver 1
|
|
CT_SD2 EQU 004H ; SD ver 2
|
|
CT_SDC EQU CT_SD1|CT_SD2 ; SD
|
|
CT_BLOCK EQU 008H ; Block addressing
|
|
|
|
; Disk types.
|
|
DSKTYP_FDC EQU 0 ; Type of disk is a Floppy disk and handled by the FDC controller.
|
|
DSKTYP_ROM EQU 1 ; Type of disk is a ROM and handled by the ROM methods.
|
|
DSKTYP_SDC EQU 2 ; Type of disk is an SD Card and handled by the SD Card methods.
|
|
DSKTYP_RAM EQU 3 ; Type of disk is a RAM Drive handled by ROM/RAM methods.
|
|
|
|
;
|
|
; Rom Filing System constants.
|
|
;
|
|
RFS_DIRENT EQU 256 ; Directory entries in the RFS directory.
|
|
RFS_DIRENTSZ EQU 32 ; Size of a directory entry.
|
|
RFS_DIRSIZE EQU RFS_DIRENT * RFS_DIRENTSZ ; Total size of the directory.
|
|
RFS_BLOCKSZ EQU 65536 ; Size of a file block per directory entry.
|
|
RFS_DRIVES EQU 10 ; Number of RFS Drives (Images).
|
|
RFS_IMGSZ EQU RFS_DIRSIZE + (RFS_DIRENT * RFS_BLOCKSZ) ; Total size of the RFS image.
|
|
RFS_END_ADDR EQU 010000000H ; End of RFS/Start of CP/M.
|
|
|
|
;
|
|
; CPM constants
|
|
;
|
|
CPM_SD_SEC EQU 32
|
|
CPM_SD_TRK EQU 1024
|
|
CPM_SD_IMGSZ EQU CPM_SD_TRK * CPM_SD_SEC * SD_SECSIZE
|
|
|
|
;
|
|
; SD Card constants.
|
|
;
|
|
SD_SECSIZE EQU 512 ; Default size of an SD Sector
|
|
SD_SECPTRK EQU CPM_SD_SEC ; Sectors of SD_SECSIZE per virtual track.
|
|
SD_TRACKS EQU CPM_SD_TRK ; Number of virtual tracks per disk image.
|
|
SD_RETRIES EQU 00100H ; Number of retries before giving up.
|
|
|
|
|
|
;-----------------------------------------------
|
|
; BIOS WORK AREA (MZ80A)
|
|
;-----------------------------------------------
|
|
ORG CBIOSDATA
|
|
|
|
; Keyboard processing, ensure starts where LSB = 0.
|
|
VARSTART EQU $ ; Start of variables.
|
|
KEYBUF: DS virtual KEYBUFSIZE ; Interrupt driven keyboard buffer.
|
|
KEYCOUNT: DS virtual 1
|
|
KEYWRITE: DS virtual 2 ; Pointer into the buffer where the next character should be placed.
|
|
KEYREAD: DS virtual 2 ; Pointer into the buffer where the next character can be read.
|
|
KEYLAST: DS virtual 1 ; KEY LAST VALUE
|
|
KEYRPT: DS virtual 1 ; KEY REPEAT COUNTER
|
|
USRBANKSAV: DS virtual 1 ; Save user bank number when calling another user bank.
|
|
HLSAVE: DS virtual 2 ; Space to save HL register when manipulating stack.
|
|
ROMCTL DS virtual 1 ; Rom Paging control register contents.
|
|
;
|
|
SPV:
|
|
IBUFE: ; TAPE BUFFER (128 BYTES)
|
|
ATRB: DS virtual 1 ; ATTRIBUTE
|
|
NAME: DS virtual 17 ; FILE NAME
|
|
SIZE: DS virtual 2 ; BYTESIZE
|
|
DTADR: DS virtual 2 ; DATA ADDRESS
|
|
EXADR: DS virtual 2 ; EXECUTION ADDRESS
|
|
COMNT: DS virtual 92 ; Comment / code area of CMT header.
|
|
SWPW: DS virtual 10 ; SWEEP WORK
|
|
KDATW: DS virtual 2 ; KEY WORK
|
|
KANAF: DS virtual 1 ; KANA FLAG (01=GRAPHIC MODE)
|
|
DSPXY: DS virtual 2 ; DISPLAY COORDINATES
|
|
;DSPXYLST: DS virtual 2 ; Last known cursor position, to compare with DSPXY to detect changes.
|
|
MANG: DS virtual 6 ; COLUMN MANAGEMENT
|
|
MANGE: DS virtual 1 ; COLUMN MANAGEMENT END
|
|
PBIAS: DS virtual 1 ; PAGE BIAS
|
|
ROLTOP: DS virtual 1 ; ROLL TOP BIAS
|
|
MGPNT: DS virtual 1 ; COLUMN MANAG. POINTER
|
|
PAGETP: DS virtual 2 ; PAGE TOP
|
|
ROLEND: DS virtual 1 ; ROLL END
|
|
DS virtual 14 ; BIAS
|
|
FLASH: DS virtual 1 ; FLASHING DATA
|
|
SFTLK: DS virtual 1 ; SHIFT LOCK
|
|
REVFLG: DS virtual 1 ; REVERSE FLAG
|
|
FLSDT: DS virtual 1 ; CURSOR DATA
|
|
STRGF: DS virtual 1 ; STRING FLAG
|
|
DPRNT: DS virtual 1 ; TAB COUNTER
|
|
FLASHCTL: DS virtual 1 ; CURSOR FLASH CONTROL. BIT 0 = Cursor On/Off, BIT 1 = Cursor displayed.
|
|
DSPXYADDR: DS virtual 2 ; Address of last known position.
|
|
;AMPM: DS virtual 1 ; AMPM DATA
|
|
;TIMFG: DS virtual 1 ; TIME FLAG
|
|
SWRK: DS virtual 1 ; KEY SOUND FLAG
|
|
TEMPW: DS virtual 1 ; TEMPO WORK
|
|
ONTYO: DS virtual 1 ; ONTYO WORK
|
|
OCTV: DS virtual 1 ; OCTAVE WORK
|
|
RATIO: DS virtual 2 ; ONPU RATIO
|
|
;BUFER: DS virtual 81 ; GET LINE BUFFER
|
|
;KEYBUF: DS virtual 1 ; KEY BUFFER
|
|
DRVAVAIL DS virtual 1 ; Flag to indicate which drive controllers are available. Bit 2 = SD, Bit 1 = ROM, Bit 0 = FDC
|
|
TIMESEC DS virtual 6 ; RTC 48bit TIME IN MILLISECONDS
|
|
FDCCMD DS virtual 1 ; LAST FDC COMMAND SENT TO CONTROLLER.
|
|
MOTON DS virtual 1 ; MOTOR ON = 1, OFF = 0
|
|
INVFDCDATA: DS virtual 1 ; INVERT DATA COMING FROM FDC, 1 = INVERT, 0 = AS IS
|
|
TRK0FD1 DS virtual 1 ; FD 1 IS AT TRACK 0 = BIT 0 set
|
|
TRK0FD2 DS virtual 1 ; FD 2 IS AT TRACK 0 = BIT 0 set
|
|
TRK0FD3 DS virtual 1 ; FD 3 IS AT TRACK 0 = BIT 0 set
|
|
TRK0FD4 DS virtual 1 ; FD 4 IS AT TRACK 0 = BIT 0 set
|
|
RETRIES DS virtual 2 ; DATA READ RETRIES
|
|
TMPADR DS virtual 2 ; TEMPORARY ADDRESS STORAGE
|
|
TMPSIZE DS virtual 2 ; TEMPORARY SIZE
|
|
TMPCNT DS virtual 2 ; TEMPORARY COUNTER
|
|
;
|
|
CPMROMLOC: DS virtual 2 ; Upper Byte = ROM Bank, Lower Byte = Page of CPM Image.
|
|
;CPMROMDRV0: DS virtual 2 ; Upper Byte = ROM Bank, Lower Byte = Page of CPM Rom Drive Image Disk 0.
|
|
;CPMROMDRV1: DS virtual 2 ; Upper Byte = ROM Bank, Lower Byte = Page of CPM Rom Drive Image Disk 1.
|
|
NDISKS: DS virtual 1 ; Dynamically calculated number of disks on boot.
|
|
DISKMAP: DS virtual MAXDISKS ; Disk map of CPM logical to physical controller disk.
|
|
FDCDISK: DS virtual 1 ; Physical disk number.
|
|
SECPERTRK: DS virtual 1 ; Sectors per track for 1 head.
|
|
SECPERHEAD: DS virtual 1 ; Sectors per head.
|
|
SECTORCNT: DS virtual 1 ; Sector size as a count of how many sectors make 512 bytes.
|
|
DISKTYPE: DS virtual 1 ; Disk type of current selection.
|
|
MTROFFTIMER: DS virtual 1 ; Second down counter for FDC motor off.
|
|
;
|
|
SEKDSK: DS virtual 1 ; Seek disk number
|
|
SEKTRK: DS virtual 2 ; Seek disk track
|
|
SEKSEC: DS virtual 1 ; Seek sector number
|
|
SEKHST: DS virtual 1 ; Seek sector host
|
|
;
|
|
HSTDSK: DS virtual 1 ; Host disk number
|
|
HSTTRK: DS virtual 2 ; Host track number
|
|
HSTSEC: DS virtual 1 ; Host sector number
|
|
HSTWRT: DS virtual 1 ; Host write flag
|
|
HSTACT: DS virtual 1 ;
|
|
;
|
|
UNACNT: DS virtual 1 ; Unalloc rec cnt
|
|
UNADSK: DS virtual 1 ; Last unalloc disk
|
|
UNATRK: DS virtual 2 ; Last unalloc track
|
|
UNASEC: DS virtual 1 ; Last unalloc sector
|
|
;
|
|
ERFLAG: DS virtual 1 ; Error number, 0 = no error.
|
|
READOP: DS virtual 1 ; If read operation then 1, else 0 for write.
|
|
RSFLAG: DS virtual 1 ; Read sector flag.
|
|
WRTYPE: DS virtual 1 ; Write operation type.
|
|
TRACKNO: DS virtual 2 ; Host controller track number
|
|
SECTORNO: DS virtual 1 ; Host controller sector number
|
|
DMAADDR: DS virtual 2 ; Last DMA address
|
|
HSTBUF: DS virtual 512 ; Host buffer for disk sector storage
|
|
HSTBUFE:
|
|
|
|
SDVER: DS virtual 1 ; SD Card version.
|
|
SDCAP: DS virtual 1 ; SD Card capabilities..
|
|
SDSTARTSEC DS virtual 4 ; Starting sector of data to read/write from/to SD card.
|
|
SDBUF: DS virtual 11 ; SD Card command fram buffer for the command and response storage.
|
|
|
|
CURSORPSAV DS virtual 2 ; Cursor save position;default 0,0
|
|
HAVELOADED DS virtual 1 ; To show that a value has been put in for Ansi emualtor.
|
|
ANSIFIRST DS virtual 1 ; Holds first character of Ansi sequence
|
|
NUMBERBUF DS virtual 20 ; Buffer for numbers in Ansi
|
|
NUMBERPOS DS virtual 2 ; Address within buffer
|
|
CHARACTERNO DS virtual 1 ; Byte within Ansi sequence. 0=first,255=other
|
|
CURSORCOUNT DS virtual 1 ; 1/50ths of a second since last change
|
|
FONTSET DS virtual 1 ; Ansi font setup.
|
|
JSW_FF DS virtual 1 ; Byte value to turn on/off FF routine
|
|
JSW_LF DS virtual 1 ; Byte value to turn on/off LF routine
|
|
CHARACTER DS virtual 1 ; To buffer character to be printed.
|
|
CURSORPOS DS virtual 2 ; Cursor position, default 0,0.
|
|
BOLDMODE DS virtual 1
|
|
HIBRITEMODE DS virtual 1 ; 0 means on, &C9 means off
|
|
UNDERSCMODE DS virtual 1
|
|
ITALICMODE DS virtual 1
|
|
INVMODE DS virtual 1
|
|
CHGCURSMODE DS virtual 1
|
|
ANSIMODE DS virtual 1 ; 1 = on, 0 = off
|
|
COLOUR EQU 0
|
|
|
|
SPSAVE: DS virtual 2 ; CPM Stack save.
|
|
SPISRSAVE: DS virtual 2
|
|
; Stack space for the CBIOS.
|
|
MSGSTRBUF: DS virtual 128 ; Lower end of the stack space is for interbank message printing, ie.space for a string to print.
|
|
BIOSSTACK EQU $
|
|
; Stack space for the Interrupt Service Routine.
|
|
DS virtual 16 ; Max 8 stack pushes.
|
|
ISRSTACK EQU $
|
|
|
|
DBGSTACKP: DS virtual 2
|
|
DS virtual 36
|
|
DBGSTACK: EQU $
|
|
|
|
VAREND EQU $ ; End of variables
|