Files
MZ80A_RFS/software/asm/cpm22-bios.asm

85 lines
5.2 KiB
NASM

;--------------------------------------------------------------------------------------------------------
;-
;- Name: cpm22-bios.asm
;- Created: January 2020
;- Author(s): Philip Smart
;- Description: CPM BIOS for CPM v2.23 on the Sharp MZ80A with the Rom Filing System.
;- Most of the code is stored in the ROM based CBIOS which is part of the
;- Rom Filing System upgrade. Declarations in this file are for tables
;- which need to reside in RAM.
;-
;- Credits: Some of the comments and parts of the deblocking/blocking algorithm come from the
; Z80-MBC2 project, (C) SuperFabius.
;- Copyright: (c) 2020-2023 Philip Smart <philip.smart@net2net.org>
;-
;- History: January 2020 - Initial creation.
;-
;--------------------------------------------------------------------------------------------------------
;- 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/>.
;--------------------------------------------------------------------------------------------------------
ORG CPMBIOS
; Boot strap code to setup the machine in order to run CPM and the CBIOS.
; Previously this used to be in the comment field of the tape header but with the
; advent of the SDCFS which doesnt store the comment, the bootstrap needs to be relocated.
; This code will be overwritten with the DP Headers on cold boot.
BOOTLDR: LD B, 0x10 ; Need to read the same location 16 times to enable I/O operations.
BOOTLDR2: LD A, (BNKCTRLRST)
DJNZ BOOTLDR2
LD A, 0x07
LD (BNKCTRL), A ; Setup the User ROM Bank default.
LD A, (MEMSW) ; Swap 0000:0FFF to C000:CFFF so lower location uses DRAM.
LD A, 0x02
LD (BNKSELMROM), A ; Setup the Monitor ROM bank default.
JP CBIOSSTART ; Cold start the CBIOS.
;------------------------------------------------------------------------------------------------------------
; DISK PARAMETER HEADER
;
; Disk parameter headers for disk 0 to 3
;
; +-------+------+------+------+----------+-------+-------+-------+
; | XLT | 0000 | 0000 | 0000 |DIRBUF | DPB | CSV | ALV |
; +------+------+------+-------+----------+-------+-------+-------+
; 16B 16B 16B 16B 16B 16B 16B 16B
;
; -XLT Address of the logical-to-physical translation vector, if used for this particular drive,
; or the value 0000H if no sector translation takes place (that is, the physical and
; logical sectornumbers are the same). Disk drives with identical sector skew factors share
; the same translatetables.
; -0000 Scratch pad values for use within the BDOS, initial value is unimportant.
; -DIRBUF Address of a 128-byte scratch pad area for directory operations within BDOS. All DPHs
; address the same scratch pad area.
; -DPB Address of a disk parameter block for this drive. Drives with identical disk characteristics
; address the same disk parameter block.
; -CSV Address of a scratch pad area used for software check for changed disks. This address is
; different for each DPH.
; -ALV Address of a scratch pad area used by the BDOS to keep disk storage allocation information.
; This address is different for each DPH.
;------------------------------------------------------------------------------------------------------------
;ALIGN_NOPS DPBASE ; Space for 2xROM, 2xFD, 3xSD or upto 7 drives
; These entries are created dynamically based on hardware available.
; NB. The Disk Parameter Blocks are stored in CBIOS ROM to save RAM space.
;------------------------------------------------------------------------------------------------------------
; CPN Disk work areas.
;------------------------------------------------------------------------------------------------------------
ALIGN_NOPS CDIRBUF ; Memory work areas, just allocate the space.
ALIGN_NOPS CSVALVMEM
ALIGN_NOPS CSVALVEND
ALIGN CBIOSDATA