mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
Reload v2.1.1 to trunk
This commit is contained in:
143
trunk/Source/Build.ps1
Normal file
143
trunk/Source/Build.ps1
Normal file
@@ -0,0 +1,143 @@
|
||||
param([string]$Config = "", [string]$RomSize = "", [string]$CPUType = "", [string]$SYS = "", [string]$RomName = "")
|
||||
|
||||
while ($true)
|
||||
{
|
||||
$ConfigFile = "config_${Config}.asm"
|
||||
if (Test-Path $ConfigFile) {break}
|
||||
if ($Config -ne "") {Write-Host "${ConfigFile} does not exist!"}
|
||||
|
||||
"Configurations available:"
|
||||
Get-Item config_*.asm | foreach {Write-Host " >", $_.Name.Substring(7,$_.Name.Length - 11)}
|
||||
$Config = (Read-Host -prompt "Configuration").Trim()
|
||||
}
|
||||
|
||||
while ($true)
|
||||
{
|
||||
if (($RomSize -eq "512") -or ($RomSize -eq "1024")) {break}
|
||||
$RomSize = (Read-Host -prompt "ROM Size [512|1024]").Trim()
|
||||
}
|
||||
|
||||
while ($true)
|
||||
{
|
||||
if (($CPUType -eq "80") -or ($CPUType -eq "180")) {break}
|
||||
$CPUType = (Read-Host -prompt "CPU Type Z[80|180]").Trim()
|
||||
}
|
||||
|
||||
$SYS = $SYS.ToUpper()
|
||||
while ($true)
|
||||
{
|
||||
if (($SYS -eq "CPM") -or ($SYS -eq "ZSYS")) {break}
|
||||
$SYS = (Read-Host -prompt "System [CPM|ZSYS]").Trim().ToUpper()
|
||||
}
|
||||
|
||||
if ($RomName -eq "") {$RomName = $Config}
|
||||
while ($RomName -eq "")
|
||||
{
|
||||
$CP = (Read-Host -prompt "ROM Name [${Config}]").Trim()
|
||||
if ($RomName -eq "") {$RomName = $Config}
|
||||
}
|
||||
|
||||
$ErrorAction = 'Stop'
|
||||
|
||||
$TasmPath = '..\tools\tasm32'
|
||||
$CpmToolsPath = '..\tools\cpmtools'
|
||||
|
||||
$env:TASMTABS = $TasmPath
|
||||
$env:PATH = $TasmPath + ';' + $CpmToolsPath + ';' + $env:PATH
|
||||
|
||||
$OutDir = "../Output"
|
||||
$RomFmt = "rom${RomSize}KB"
|
||||
$BlankFile = "blank${RomSize}KB.dat"
|
||||
$ConfigFile = "Config_${Config}.asm"
|
||||
$RomDiskFile = "RomDisk.tmp"
|
||||
$RomFile = "${OutDir}/${RomName}.rom"
|
||||
$SysImgFile = "${OutDir}/${RomName}.sys"
|
||||
$LoaderFile = "${OutDir}/${RomName}.com"
|
||||
|
||||
""
|
||||
"Building ${RomName}: ${ROMSize}KB ROM configuration ${Config} for Z${CPUType}..."
|
||||
""
|
||||
|
||||
$TimeStamp = '"' + (Get-Date -Format 'yyMMddThhmm') + '"'
|
||||
$Variant = '"RomWBW-' + $Env:UserName + '"'
|
||||
|
||||
Function Asm($Component, $Opt, $Architecture=$CPUType, $Output="${Component}.bin")
|
||||
{
|
||||
$Cmd = "tasm -t${Architecture} -g3 ${Opt} ${Component}.asm ${Output}"
|
||||
$Cmd | write-host
|
||||
Invoke-Expression $Cmd | write-host
|
||||
if ($LASTEXITCODE -gt 0) {throw "TASM returned exit code $LASTEXITCODE"}
|
||||
}
|
||||
|
||||
Function Concat($InputFileList, $OutputFile)
|
||||
{
|
||||
Set-Content $OutputFile -Value $null
|
||||
foreach ($InputFile in $InputFileList)
|
||||
{
|
||||
Add-Content $OutputFile -Value ([System.IO.File]::ReadAllBytes($InputFile)) -Encoding byte
|
||||
}
|
||||
}
|
||||
|
||||
# Generate the build settings include file
|
||||
|
||||
@"
|
||||
; RomWBW Configured for ${Config}, $(Get-Date)
|
||||
;
|
||||
#DEFINE TIMESTAMP ${TimeStamp}
|
||||
#DEFINE VARIANT ${Variant}
|
||||
;
|
||||
ROMSIZE .EQU ${ROMSize} ; SIZE OF ROM IN KB
|
||||
;
|
||||
#INCLUDE "${ConfigFile}"
|
||||
;
|
||||
"@ | Out-File "build.inc" -Encoding ASCII
|
||||
|
||||
# Build components
|
||||
|
||||
if ($SYS -eq "CPM")
|
||||
{
|
||||
Asm 'ccpb03' -Output 'cp.bin'
|
||||
Asm 'bdosb01' -Output 'dos.bin'
|
||||
}
|
||||
if ($SYS -eq "ZSYS")
|
||||
{
|
||||
Asm 'zcprw' -Architecture '85' -Output 'cp.bin'
|
||||
Asm 'zsdos' -Output 'dos.bin'
|
||||
}
|
||||
|
||||
Asm 'syscfg'
|
||||
Asm 'cbios' "-dBLD_SYS=SYS_${SYS}"
|
||||
Asm 'dbgmon'
|
||||
Asm 'prefix'
|
||||
Asm 'bootrom'
|
||||
Asm 'bootapp'
|
||||
Asm 'loader'
|
||||
Asm 'pgzero'
|
||||
Asm 'bnk1'
|
||||
Asm 'hbfill'
|
||||
Asm 'romfill'
|
||||
|
||||
# Generate result files using components above
|
||||
|
||||
"Building ${RomName} output files..."
|
||||
|
||||
Concat 'cp.bin','dos.bin','cbios.bin' 'os.bin'
|
||||
Concat 'prefix.bin','os.bin' $SysImgFile
|
||||
Concat 'pgzero.bin','bootrom.bin','syscfg.bin','loader.bin','romfill.bin','dbgmon.bin','os.bin','hbfill.bin' 'rom0.bin'
|
||||
Concat 'pgzero.bin','bootrom.bin','syscfg.bin','loader.bin','bnk1.bin' 'rom1.bin'
|
||||
Concat 'bootapp.bin','syscfg.bin','loader.bin','bnk1.bin','dbgmon.bin','os.bin' $LoaderFile
|
||||
|
||||
# Create the RomDisk image
|
||||
|
||||
"Building ${RomSize}KB ${RomName} ROM disk data file..."
|
||||
|
||||
Copy-Item $BlankFile $RomDiskFile
|
||||
cpmcp -f $RomFmt $RomDiskFile ../RomDsk/${SYS}_${RomSize}KB/*.* 0:
|
||||
cpmcp -f $RomFmt $RomDiskFile ../RomDsk/cfg_${Config}/*.* 0:
|
||||
cpmcp -f $RomFmt $RomDiskFile ../Apps/core/*.* 0:
|
||||
cpmcp -f $RomFmt $RomDiskFile ../Output/${RomName}.sys 0:${SYS}.sys
|
||||
|
||||
Concat 'rom0.bin','rom1.bin',$RomDiskFile $RomFile
|
||||
|
||||
# Cleanup
|
||||
Remove-Item $RomDiskFile
|
||||
10
trunk/Source/Clean.cmd
Normal file
10
trunk/Source/Clean.cmd
Normal file
@@ -0,0 +1,10 @@
|
||||
@echo off
|
||||
if exist *.bin del *.bin
|
||||
if exist *.com del *.com
|
||||
if exist *.img del *.img
|
||||
if exist *.rom del *.rom
|
||||
if exist *.lst del *.lst
|
||||
if exist *.exp del *.exp
|
||||
if exist *.tmp del *.tmp
|
||||
if exist *.mrk del *.mrk
|
||||
if exist build.inc del build.inc
|
||||
1
trunk/Source/Make.cmd
Normal file
1
trunk/Source/Make.cmd
Normal file
@@ -0,0 +1 @@
|
||||
@..\tools\gcc\mingw32-make %*
|
||||
4
trunk/Source/MakeBlankROM.ps1
Normal file
4
trunk/Source/MakeBlankROM.ps1
Normal file
@@ -0,0 +1,4 @@
|
||||
# Create a "dummy" rom image, filled with hex E5
|
||||
#
|
||||
Set-Content -Value ([byte[]](0xE5) * (512KB - 64KB)) -Encoding byte -Path 'blank512KB.dat'
|
||||
Set-Content -Value ([byte[]](0xE5) * (1MB - 64KB)) -Encoding byte -Path 'blank1024KB.dat'
|
||||
2586
trunk/Source/bdosb01.asm
Normal file
2586
trunk/Source/bdosb01.asm
Normal file
File diff suppressed because it is too large
Load Diff
131
trunk/Source/bioshdr.inc
Normal file
131
trunk/Source/bioshdr.inc
Normal file
@@ -0,0 +1,131 @@
|
||||
; bioshdr.inc 5/10/2012 dwg - offsets into the BIOS Header data
|
||||
|
||||
B_BOOT .equ 0e600h
|
||||
B_WBOOT .equ 0e603h
|
||||
B_CONST .equ 0e606h
|
||||
B_CONIN .equ 0e609h
|
||||
B_CONOUT .equ 0e60ch
|
||||
B_LIST .equ 0e60fh
|
||||
B_PUNCH .equ 0e612h
|
||||
B_READER .equ 0e615h
|
||||
B_HOME .equ 0e618h
|
||||
B_SELDSK .equ 0e61bh
|
||||
B_SETTRK .equ 0e61eh
|
||||
B_SETSEC .equ 0e621h
|
||||
B_SETDMA .equ 0e624h
|
||||
B_READ .equ 0e627h
|
||||
B_WRITE .equ 0e62ah
|
||||
B_LISTST .equ 0e62dh
|
||||
B_SECTRN .equ 0e630h
|
||||
B_BNKSEL .equ 0e633h
|
||||
B_GETLU .equ 0e636h
|
||||
B_SETLU .equ 0e639h
|
||||
B_GETINFO .equ 0e63ch
|
||||
B_RSVD1 .equ 0e63fh
|
||||
B_RSVD2 .equ 0e642h
|
||||
B_RSVD3 .equ 0e645h
|
||||
B_RSVD4 .equ 0e648h
|
||||
|
||||
B_CNFGDATA .equ 0e64bh
|
||||
|
||||
B_RMJ .equ 0e64bh
|
||||
B_RMN .equ 0e64ch
|
||||
B_RUP .equ 0e64dh
|
||||
B_RTP .equ 0e64eh
|
||||
B_DSKBOOT .equ 0e64fh
|
||||
B_BOOTDRV .equ 0e650h
|
||||
|
||||
B_MONTH .equ 0e651h
|
||||
B_DAY .equ 0e652h
|
||||
B_YEAR .equ 0e653h
|
||||
|
||||
B_HOUR .equ 0e654h
|
||||
B_MIN .equ 0e655h
|
||||
B_SEC .equ 0e656h
|
||||
|
||||
; Config Proper Start Here
|
||||
|
||||
B_FREQ .equ 0e657h
|
||||
B_PLATFORM .equ B_FREQ+1
|
||||
B_DIOPLAT .equ B_PLATFORM+1
|
||||
B_VDUMODE .equ B_DIOPLAT+1
|
||||
B_ROMSIZE .equ B_VDUMODE+1
|
||||
B_RAMSIZE .equ B_ROMSIZE+2
|
||||
B_CLRRAMDSK .equ B_RAMSIZE+2
|
||||
B_DSKYENABLE .equ B_CLRRAMDSK+1
|
||||
B_UARTENABLE .equ B_DSKYENABLE+1
|
||||
B_VDUENABLE .equ B_UARTENABLE+1
|
||||
B_FDENABLE .equ B_VDUENABLE+1
|
||||
B_FDTRACE .equ B_FDENABLE+1
|
||||
B_FDMEDIA .equ B_FDTRACE+1
|
||||
B_FDMEDIAALT .equ B_FDMEDIA+1
|
||||
B_FDMAUTO .equ B_FDMEDIAALT+1
|
||||
B_IDEENABLE .equ B_FDMAUTO+1
|
||||
B_IDETRACE .equ B_IDEENABLE+1
|
||||
B_IDE8BIT .equ B_IDETRACE+1
|
||||
B_IDECAPACITY .equ B_IDE8BIT+1
|
||||
B_PPIDEENABLE .equ B_IDECAPACITY+2
|
||||
B_PPIDETRACE .equ B_PPIDEENABLE+1
|
||||
B_PPIDE8BIT .equ B_PPIDETRACE+1
|
||||
B_PPIDECAPACITY .equ B_PPIDE8BIT+1
|
||||
B_PPIDESLOW .equ B_PPIDECAPACITY+2
|
||||
B_BOOTTYPE .equ B_PPIDESLOW+1
|
||||
B_BAUDRATE .equ B_BOOTTYPE+1
|
||||
B_CLKDIV .equ B_BAUDRATE+2
|
||||
|
||||
B_MEMWAIT .equ B_CLKDIV+1
|
||||
B_IOWAIT .equ B_MEMWAIT+1
|
||||
B_CNTLB0 .equ B_IOWAIT+1
|
||||
B_CNTLB1 .equ B_CNTLB0+1
|
||||
B_SDCAPACITY .equ B_CNTLB1+1
|
||||
B_SDCSIO .equ B_SDCAPACITY+2
|
||||
B_SDCSIOFAST .equ B_SDCSIO+1
|
||||
B_DEFIOBYTE .equ B_SDCSIOFAST+1
|
||||
B_TERMTYPE .equ B_DEFIOBYTE+1
|
||||
B_REVISION .equ B_TERMTYPE+1
|
||||
B_PRPSDENABLE .equ B_REVISION+2
|
||||
B_PRPSDTRACE .equ B_PRPSDENABLE+1
|
||||
B_PRPSDCAPACITY .equ B_PRPSDTRACE+1
|
||||
B_PRPCONENABLE .equ B_PRPSDCAPACITY+2
|
||||
B_DATASIZE .equ B_PRPCONENABLE+1
|
||||
|
||||
|
||||
B_INFOVER .equ 0
|
||||
B_STRBANNER .equ B_INFOVER+2
|
||||
B_VARLOC .equ B_STRBANNER+2
|
||||
B_TSTLOC .equ B_VARLOC+2
|
||||
B_SECADR .equ B_TSTLOC+2
|
||||
B_SEKDSK .equ B_SECADR+2
|
||||
B_SEKTRK .equ B_SEKDSK+2
|
||||
B_SEKSEC .equ B_SEKTRK+2
|
||||
B_DSKOP .equ B_SEKSEC+2
|
||||
B_DMAADR .equ B_DSKOP+2
|
||||
B_DPHADR .equ B_DMAADR+2
|
||||
B_XLT .equ B_DPHADR+2
|
||||
B_HST .equ B_XLT+2
|
||||
B_DIRBF .equ B_HST+2
|
||||
B_DPBMAP .equ B_DIRBF+2
|
||||
B_DSKMAP .equ B_DPBMAP+2
|
||||
B_DPHMAP .equ B_DSKMAP+2
|
||||
B_CIOMAP .equ B_DPHMAP+2
|
||||
B_SECBUF .equ B_CIOMAP+2
|
||||
B_ORGFDDATA .equ B_SECBUF+2
|
||||
B_ORGIDEDATA .equ B_ORGFDDATA+2
|
||||
B_ORGSDDATA .equ B_ORGIDEDATA+2
|
||||
B_ORGPRPSDDATA .equ B_ORGSDDATA+2
|
||||
B_ORGPPPSDDATA .equ B_ORGPRPSDDATA+2
|
||||
B_INFOTBLSIZE .equ B_ORGPPPSDDATA+2
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;
|
||||
; eof - bioshdr.inc ;
|
||||
;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
1
trunk/Source/blank1024KB.dat
Normal file
1
trunk/Source/blank1024KB.dat
Normal file
File diff suppressed because one or more lines are too long
1
trunk/Source/blank512KB.dat
Normal file
1
trunk/Source/blank512KB.dat
Normal file
File diff suppressed because one or more lines are too long
502
trunk/Source/bnk1.asm
Normal file
502
trunk/Source/bnk1.asm
Normal file
@@ -0,0 +1,502 @@
|
||||
;__________________________________________________________________________________________________
|
||||
;
|
||||
; BANK1
|
||||
;__________________________________________________________________________________________________
|
||||
;
|
||||
|
||||
; bnk1.asm 5/23/2012 dwg Beta 4 - Enhanced SYS_GETCFG and SYS_SETCFG
|
||||
|
||||
|
||||
.ORG 1000H
|
||||
;
|
||||
; INCLUDE GENERIC STUFF
|
||||
;
|
||||
#INCLUDE "std.asm"
|
||||
;
|
||||
;==================================================================================================
|
||||
; BANK 1 ENTRY / JUMP TABLE
|
||||
;==================================================================================================
|
||||
;
|
||||
; THIS IS THE ENTRY DISPATCH POINT FOR BANK1
|
||||
;__________________________________________________________________________________________________
|
||||
;
|
||||
JP INITSYS
|
||||
JP BIOS_DISPATCH
|
||||
;
|
||||
;==================================================================================================
|
||||
; SYSTEM INITIALIZATION
|
||||
;==================================================================================================
|
||||
;
|
||||
; AT THIS POINT, IT IS ASSUMED WE ARE OPERATING FROM RAM PAGE 1
|
||||
;
|
||||
INITSYS:
|
||||
;
|
||||
; INSTALL HBIOS PROXY IN UPPER MEMORY
|
||||
;
|
||||
LD HL,HB_IMG
|
||||
LD DE,HB_LOC
|
||||
LD BC,HB_SIZ
|
||||
LDIR
|
||||
;
|
||||
LD HL,$8000 ; DEFAULT DISK XFR BUF ADDRESS
|
||||
LD (DIOBUF),HL ; SAVE IT
|
||||
;
|
||||
#IF (PLATFORM != PLT_N8)
|
||||
IN A,(RTC) ; RTC PORT, BIT 6 HAS STATE OF CONFIG JUMPER
|
||||
; LD A,40H ; *DEBUG* SIMULATE JUMPER OPEN
|
||||
; LD A,00H ; *DEBUG* SIMULATE JUMPER SHORTED
|
||||
AND 40H ; ISOLATE BIT 6
|
||||
JR Z,INITSYS1 ; IF BIT6=0, SHORTED, USE ALT CONSOLE
|
||||
LD A,DEFCON ; LOAD DEF CONSOLE DEVICE CODE
|
||||
JR INITSYS2 ; CONTINUE
|
||||
INITSYS1:
|
||||
LD A,ALTCON ; LOAD ALT CONSOLE DEVICE CODE
|
||||
INITSYS2:
|
||||
LD (CONDEV),A ; SET THE ACTIVE CONSOLE DEVICE
|
||||
#ENDIF
|
||||
;
|
||||
; PERFORM DEVICE INITIALIZATION
|
||||
;
|
||||
#IF (UARTENABLE)
|
||||
CALL UART_INIT
|
||||
#ENDIF
|
||||
#IF (VDUENABLE)
|
||||
CALL VDU_INIT
|
||||
#ENDIF
|
||||
#IF (PRPENABLE)
|
||||
CALL PRP_INIT
|
||||
#ENDIF
|
||||
#IF (PPPENABLE)
|
||||
CALL PPP_INIT
|
||||
#ENDIF
|
||||
#IF (DSKYENABLE)
|
||||
CALL DSKY_INIT
|
||||
#ENDIF
|
||||
#IF (FDENABLE)
|
||||
CALL FD_INIT
|
||||
#ENDIF
|
||||
#IF (IDEENABLE)
|
||||
CALL IDE_INIT
|
||||
#ENDIF
|
||||
#IF (PPIDEENABLE)
|
||||
CALL PPIDE_INIT
|
||||
#ENDIF
|
||||
#IF (SDENABLE)
|
||||
CALL SD_INIT
|
||||
#ENDIF
|
||||
#IF (HDSKENABLE)
|
||||
CALL HDSK_INIT
|
||||
#ENDIF
|
||||
;
|
||||
RET
|
||||
;
|
||||
;==================================================================================================
|
||||
; IDLE
|
||||
;==================================================================================================
|
||||
;
|
||||
;__________________________________________________________________________________________________
|
||||
;
|
||||
IDLE:
|
||||
#IF (FDENABLE)
|
||||
CALL FD_IDLE
|
||||
#ENDIF
|
||||
RET
|
||||
;
|
||||
;==================================================================================================
|
||||
; BIOS FUNCTION DISPATCHER
|
||||
;==================================================================================================
|
||||
;
|
||||
; MAIN BIOS FUNCTION
|
||||
; B: FUNCTION
|
||||
;__________________________________________________________________________________________________
|
||||
;
|
||||
BIOS_DISPATCH:
|
||||
LD A,B ; REQUESTED FUNCTION IS IN B
|
||||
CP BF_CIO + $10
|
||||
JR C,CIO_DISPATCH
|
||||
CP BF_DIO + $10
|
||||
JR C,DIO_DISPATCH
|
||||
CP BF_CLK + $10
|
||||
JR C,CLK_DISPATCH
|
||||
CP BF_VDU + $10
|
||||
JR C,CRT_DISPATCH
|
||||
|
||||
CP BF_SYS ; SKIP TO BF_SYS VALUE AT $F0
|
||||
CALL C,PANIC ; PANIC IF LESS THAN BF_SYS
|
||||
JR SYS_DISPATCH ; OTHERWISE SYS CALL
|
||||
CALL PANIC ; THIS SHOULD NEVER BE REACHED
|
||||
;
|
||||
; SETUP AND CALL CHARACTER DRIVER
|
||||
; B: FUNCTION
|
||||
; C: DEVICE/UNIT
|
||||
; E: CHARACTER IN/OUT
|
||||
;
|
||||
CIO_DISPATCH:
|
||||
LD A,C ; REQUESTED DEVICE/UNIT IS IN C
|
||||
AND $F0 ; ISOLATE THE DEVICE PORTION
|
||||
#IF (UARTENABLE)
|
||||
CP CIODEV_UART
|
||||
JP Z,UART_DISPATCH
|
||||
#ENDIF
|
||||
#IF (PRPENABLE & PRPCONENABLE)
|
||||
CP CIODEV_PRPCON
|
||||
JP Z,PRPCON_DISPATCH
|
||||
#ENDIF
|
||||
#IF (PPPENABLE & PPPCONENABLE)
|
||||
CP CIODEV_PPPCON
|
||||
JP Z,PPPCON_DISPATCH
|
||||
#ENDIF
|
||||
#IF (VDUENABLE)
|
||||
CP CIODEV_VDU
|
||||
JP Z,VDU_DISPATCH
|
||||
#ENDIF
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
DIO_DISPATCH:
|
||||
LD A,B
|
||||
|
||||
; DIO FUNCTIONS STARTING AT $18 ARE COMMON
|
||||
; AND DO NOT DISPATCH TO DRIVERS
|
||||
CP $18
|
||||
JR NC,DIO_COMMON
|
||||
|
||||
; DISPATCH FUCNTION TO APPROPRIATE DRIVER
|
||||
AND $0F ;
|
||||
|
||||
; HACK TO FILL IN HSTTRK AND HSTSEC
|
||||
; BUT ONLY FOR READ/WRITE FUNCTION CALLS
|
||||
; ULTIMATELY, HSTTRK AND HSTSEC ARE TO BE REMOVED
|
||||
CP 2
|
||||
JR NC,DIO_DISPATCH1
|
||||
LD (HSTTRK),HL
|
||||
LD (HSTSEC),DE
|
||||
DIO_DISPATCH1:
|
||||
LD A,C ; REQUESTED DEVICE/UNIT IS IN C
|
||||
LD (HSTDSK),A ; TEMP HACK TO FILL IN HSTDSK
|
||||
AND $F0 ; ISOLATE THE DEVICE PORTION
|
||||
#IF (FDENABLE)
|
||||
CP DIODEV_FD
|
||||
JP Z,FD_DISPATCH
|
||||
#ENDIF
|
||||
#IF (IDEENABLE)
|
||||
CP DIODEV_IDE
|
||||
JP Z,IDE_DISPATCH
|
||||
#ENDIF
|
||||
#IF (PPIDEENABLE)
|
||||
CP DIODEV_PPIDE
|
||||
JP Z,PPIDE_DISPATCH
|
||||
#ENDIF
|
||||
#IF (SDENABLE)
|
||||
CP DIODEV_SD
|
||||
JP Z,SD_DISPATCH
|
||||
#ENDIF
|
||||
#IF (PRPENABLE & PRPSDENABLE)
|
||||
CP DIODEV_PRPSD
|
||||
JP Z,PRPSD_DISPATCH
|
||||
#ENDIF
|
||||
#IF (PPPENABLE & PPPSDENABLE)
|
||||
CP DIODEV_PPPSD
|
||||
JP Z,PPPSD_DISPATCH
|
||||
#ENDIF
|
||||
#IF (HDSKENABLE)
|
||||
CP DIODEV_HDSK
|
||||
JP Z,HDSK_DISPATCH
|
||||
#ENDIF
|
||||
CALL PANIC
|
||||
;
|
||||
; HANDLE COMMON DISK FUNCTIONS (NOT DEVICE DRIVER SPECIFIC)
|
||||
;
|
||||
DIO_COMMON:
|
||||
SUB $18
|
||||
JR Z,DIO_GBA
|
||||
DEC A
|
||||
JR Z,DIO_SBA
|
||||
CALL PANIC
|
||||
;
|
||||
; DISK: GET BUFFER ADDRESS
|
||||
;
|
||||
DIO_GBA:
|
||||
LD HL,(DIOBUF)
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
; DISK: SET BUFFER ADDRESS
|
||||
;
|
||||
DIO_SBA:
|
||||
BIT 7,H ; IS HIGH ORDER BIT SET?
|
||||
CALL Z,PANIC ; IF NOT, ADR IS IN LOWER 32K, NOT ALLOWED!!!
|
||||
LD (DIOBUF),HL
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
CLK_DISPATCH:
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
CRT_DISPATCH:
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
SYS_DISPATCH:
|
||||
LD A,B
|
||||
CP BF_SYSGETCFG
|
||||
JR Z,SYS_GETCFG
|
||||
CP BF_SYSSETCFG
|
||||
JR Z,SYS_SETCFG
|
||||
CP BF_SYSBNKCPY
|
||||
JR Z,SYS_BNKCPY
|
||||
CALL PANIC
|
||||
;
|
||||
SYS_GETCFG:
|
||||
LD HL,$0200 ; SETUP SOURCE OF CONFIG DATA
|
||||
LD BC,$0100 ; SIZE OF CONFIG DATA
|
||||
LDIR ; COPY IT
|
||||
RET
|
||||
;
|
||||
SYS_SETCFG:
|
||||
LD HL,$0200 ; SETUP SOURCE OF CONFIG DATA
|
||||
LD BC,$0100
|
||||
EX DE,HL
|
||||
LDIR
|
||||
RET
|
||||
;
|
||||
SYS_BNKCPY:
|
||||
LD A,C ; BANK SELECTION TO A
|
||||
PUSH IX
|
||||
POP BC ; BC = BYTE COUNT TO COPY
|
||||
JP $FF03 ; JUST PASS CONTROL TO HBIOS STUB IN UPPER MEMORY
|
||||
;
|
||||
; COMMON ROUTINE THAT IS CALLED BY CHARACTER IO DRIVERS WHEN
|
||||
; AN IDLE CONDITION IS DETECTED (WAIT FOR INPUT/OUTPUT)
|
||||
;
|
||||
CIO_IDLE:
|
||||
LD HL,IDLECOUNT ; POINT TO IDLE COUNT
|
||||
DEC (HL) ; 256 TIMES?
|
||||
CALL Z,IDLE ; RUN IDLE PROCESS EVERY 256 ITERATIONS
|
||||
XOR A ; SIGNAL NO CHAR READY
|
||||
RET ; AND RETURN
|
||||
;
|
||||
;==================================================================================================
|
||||
; DEVICE DRIVERS
|
||||
;==================================================================================================
|
||||
;
|
||||
#IF (UARTENABLE)
|
||||
ORG_UART .EQU $
|
||||
#INCLUDE "uart.asm"
|
||||
SIZ_UART .EQU $ - ORG_UART
|
||||
.ECHO "UART occupies "
|
||||
.ECHO SIZ_UART
|
||||
.ECHO " bytes.\n"
|
||||
#ENDIF
|
||||
;
|
||||
#IF (VDUENABLE)
|
||||
ORG_VDU .EQU $
|
||||
#INCLUDE "vdu.asm"
|
||||
SIZ_VDU .EQU $ - ORG_VDU
|
||||
.ECHO "VDU occupies "
|
||||
.ECHO SIZ_VDU
|
||||
.ECHO " bytes.\n"
|
||||
#ENDIF
|
||||
;
|
||||
#IF (PRPENABLE)
|
||||
ORG_PRP .EQU $
|
||||
#INCLUDE "prp.asm"
|
||||
SIZ_PRP .EQU $ - ORG_PRP
|
||||
.ECHO "PRP occupies "
|
||||
.ECHO SIZ_PRP
|
||||
.ECHO " bytes.\n"
|
||||
#ENDIF
|
||||
;
|
||||
#IF (PPPENABLE)
|
||||
ORG_PPP .EQU $
|
||||
#INCLUDE "ppp.asm"
|
||||
SIZ_PPP .EQU $ - ORG_PPP
|
||||
.ECHO "PPP occupies "
|
||||
.ECHO SIZ_PPP
|
||||
.ECHO " bytes.\n"
|
||||
#ENDIF
|
||||
;
|
||||
#IF (FDENABLE)
|
||||
ORG_FD .EQU $
|
||||
#INCLUDE "fd.asm"
|
||||
SIZ_FD .EQU $ - ORG_FD
|
||||
.ECHO "FD occupies "
|
||||
.ECHO SIZ_FD
|
||||
.ECHO " bytes.\n"
|
||||
#ENDIF
|
||||
|
||||
#IF (IDEENABLE)
|
||||
ORG_IDE .EQU $
|
||||
#INCLUDE "ide.asm"
|
||||
SIZ_IDE .EQU $ - ORG_IDE
|
||||
.ECHO "IDE occupies "
|
||||
.ECHO SIZ_IDE
|
||||
.ECHO " bytes.\n"
|
||||
#ENDIF
|
||||
|
||||
#IF (PPIDEENABLE)
|
||||
ORG_PPIDE .EQU $
|
||||
#INCLUDE "ppide.asm"
|
||||
SIZ_PPIDE .EQU $ - ORG_PPIDE
|
||||
.ECHO "PPIDE occupies "
|
||||
.ECHO SIZ_PPIDE
|
||||
.ECHO " bytes.\n"
|
||||
#ENDIF
|
||||
|
||||
#IF (SDENABLE)
|
||||
ORG_SD .EQU $
|
||||
#INCLUDE "sd.asm"
|
||||
SIZ_SD .EQU $ - ORG_SD
|
||||
.ECHO "SD occupies "
|
||||
.ECHO SIZ_SD
|
||||
.ECHO " bytes.\n"
|
||||
#ENDIF
|
||||
|
||||
#IF (HDSKENABLE)
|
||||
ORG_HDSK .EQU $
|
||||
#INCLUDE "hdsk.asm"
|
||||
SIZ_HDSK .EQU $ - ORG_HDSK
|
||||
.ECHO "HDSK occupies "
|
||||
.ECHO SIZ_HDSK
|
||||
.ECHO " bytes.\n"
|
||||
#ENDIF
|
||||
;
|
||||
#DEFINE CIOMODE_CONSOLE
|
||||
#DEFINE DSKY_KBD
|
||||
#INCLUDE "util.asm"
|
||||
;
|
||||
;;;;#INCLUDE "memmgr.asm"
|
||||
;
|
||||
;==================================================================================================
|
||||
; BANK ONE GLOBAL DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
CONDEV .DB DEFCON
|
||||
;
|
||||
IDLECOUNT .DB 0
|
||||
;
|
||||
HSTDSK .DB 0 ; DISK IN BUFFER
|
||||
HSTTRK .DW 0 ; TRACK IN BUFFER
|
||||
HSTSEC .DW 0 ; SECTOR IN BUFFER
|
||||
;
|
||||
DIOBUF .DW $FD00 ; PTR TO 512 BYTE DISK XFR BUFFER
|
||||
;
|
||||
;==================================================================================================
|
||||
; FILL REMAINDER OF BANK
|
||||
;==================================================================================================
|
||||
;
|
||||
SLACK: .EQU (7F00H - $)
|
||||
.FILL SLACK,0FFH
|
||||
;
|
||||
.ECHO "BNK1 space remaining: "
|
||||
.ECHO SLACK
|
||||
.ECHO " bytes.\n"
|
||||
;
|
||||
;==================================================================================================
|
||||
; HBIOS UPPER MEMORY STUB
|
||||
;==================================================================================================
|
||||
;
|
||||
; THE FOLLOWING CODE IS RELOCATED TO THE TOP PAGE IN MEMORY TO HANDLE INVOCATION DISPATCHING
|
||||
;
|
||||
HB_IMG .EQU $
|
||||
.ORG HB_LOC
|
||||
;
|
||||
;==================================================================================================
|
||||
; HBIOS DISPATCH
|
||||
;==================================================================================================
|
||||
;
|
||||
; DISPATCH JUMP TABLE FOR UPPER MEMORY HBIOS FUNCTIONS
|
||||
;
|
||||
JP HB_INIT
|
||||
JP HB_BNKCPY
|
||||
;
|
||||
; MEMORY MANAGER
|
||||
;
|
||||
#INCLUDE "memmgr.asm"
|
||||
;
|
||||
;==================================================================================================
|
||||
; HBIOS BOOT ROUTINE
|
||||
;==================================================================================================
|
||||
;
|
||||
; SETUP RST 08 TO HANDLE MAIN BIOS FUNCTIONS
|
||||
;
|
||||
HB_INIT:
|
||||
LD A,0C3H ; $C3 = JP
|
||||
LD (8H),A
|
||||
LD HL,HB_ENTRY
|
||||
LD (9H),HL
|
||||
RET
|
||||
;
|
||||
;==================================================================================================
|
||||
; HBIOS BNKCPY ROUTINE
|
||||
;==================================================================================================
|
||||
;
|
||||
; SELECT A DESIGNATED RAM/ROM BANK INTO LOWER 32K, THEN PERFORM A BULK MEMORY COPY
|
||||
; A: BANK SELECTION (BIT 7: 1=RAM/0=ROM, BITS 0-6: BANK NUMBER)
|
||||
; DE: DESTINATION ADDRESS
|
||||
; HL: SOURCE ADDRESS
|
||||
; BC: COUNT OF BYTES TO COPY;
|
||||
;
|
||||
HB_BNKCPY:
|
||||
BIT 7,A ; CHECK BIT 7
|
||||
JR NZ,HB_BNKCPY1 ; RAM PAGE
|
||||
;
|
||||
CALL ROMPG ; SELECT ROM PAGE
|
||||
JR HB_BNKCPY2 ; GO TO COMMON STUFF
|
||||
;
|
||||
HB_BNKCPY1:
|
||||
RES 7,A ; CLEAR BIT 7
|
||||
CALL RAMPG ; SELECT RAM PAGE AND FALL THRU
|
||||
;
|
||||
HB_BNKCPY2:
|
||||
LDIR ; DO THE COPY
|
||||
LD A,1 ; RESELECT RAM PAGE 1
|
||||
CALL RAMPG ; DO IT
|
||||
RET ; BACK TO LOWER MEMORY
|
||||
;
|
||||
;==================================================================================================
|
||||
; HBIOS ENTRY FOR RST 08 PROCESSING
|
||||
;==================================================================================================
|
||||
;
|
||||
; ENTRY POINT FOR BIOS FUNCTIONS (TARGET OF RST 08)
|
||||
;
|
||||
HB_ENTRY:
|
||||
LD (STACKSAV),SP ; SAVE ORIGINAL STACK FRAME
|
||||
LD SP,STACK ; SETUP NEW STACK FRAME
|
||||
|
||||
PGRAMF(1) ; MAP RAM PAGE 1 INTO LOWER 32K
|
||||
|
||||
CALL 1003H ; CALL BANK 1 HBIOS FUNCTION DISPATCHER
|
||||
|
||||
PUSH AF ; SAVE AF (FUNCTION RETURN)
|
||||
PGRAMF(0) ; MAP RAM PAGE 0 INTO LOWER 32K
|
||||
POP AF ; RESTORE AF
|
||||
|
||||
LD SP,(STACKSAV) ; RESTORE ORIGINAL STACK FRAME
|
||||
|
||||
RET ; RETURN TO CALLER
|
||||
;
|
||||
; PRIVATE DATA
|
||||
;
|
||||
STACKSAV .DW 0
|
||||
;
|
||||
; JUST FOR FUN, PRIVATE STACK IS LOCATED AT TOP OF MEMORY...
|
||||
;
|
||||
STACK .EQU 0
|
||||
;
|
||||
;
|
||||
;
|
||||
HB_SLACK .EQU (HB_END - $)
|
||||
.ECHO "STACK space remaining: "
|
||||
.ECHO HB_SLACK
|
||||
.ECHO " bytes.\n"
|
||||
;
|
||||
.FILL HB_SLACK,0FFH
|
||||
;
|
||||
.END
|
||||
119
trunk/Source/bootapp.asm
Normal file
119
trunk/Source/bootapp.asm
Normal file
@@ -0,0 +1,119 @@
|
||||
;___BOOTAPP____________________________________________________________________________________________________________
|
||||
;
|
||||
; APPLICATION BOOT MANAGER
|
||||
;
|
||||
; USED TO LOAD AN APPLICATION IMAGE BASED COPY OF THE SYSTEM
|
||||
; REFER TO BANKEDBIOS.TXT FOR MORE INFORMATION.
|
||||
;______________________________________________________________________________________________________________________
|
||||
;
|
||||
;
|
||||
#INCLUDE "std.asm"
|
||||
;
|
||||
.ORG 0100H
|
||||
;
|
||||
DI ; NO INTERRUPTS
|
||||
IM 1 ; INTERRUPT MODE 1
|
||||
|
||||
;
|
||||
; PERFORM MINIMAL Z180 SPECIFIC INITIALIZATION
|
||||
;
|
||||
#IF (PLATFORM == PLT_N8)
|
||||
; SET BASE FOR CPU IO REGISTERS
|
||||
LD A,CPU_IOBASE
|
||||
OUT0 (CPU_ICR),A
|
||||
|
||||
; SET CPU CLOCK DIV
|
||||
LD A,Z180_CLKDIV << 7
|
||||
OUT0 (CPU_CCR),A
|
||||
|
||||
; SET WAIT STATES
|
||||
LD A,0 + (Z180_MEMWAIT << 6) | (Z180_IOWAIT << 4)
|
||||
OUT0 (CPU_DCNTL),A
|
||||
|
||||
; MMU SETUP
|
||||
LD A,80H
|
||||
OUT0 (CPU_CBAR),A ; SETUP FOR 32K/32K BANK CONFIG
|
||||
XOR A
|
||||
OUT0 (CPU_BBR),A ; BANK BASE = 0
|
||||
LD A,(RAMSIZE - 64) >> 2
|
||||
OUT0 (CPU_CBR),A ; COMMON BASE = LAST (TOP) BANK
|
||||
#ENDIF
|
||||
|
||||
;
|
||||
; RELOCATE MONITOR/OS CODE FROM 8000H TO C000H
|
||||
; - HBIOS PROXY AT $FF00 IS OVERLAID, BUT WE DON'T CARE
|
||||
; ABOUT IT ANYMORE, IT WILL BE REFRESHED DURING HBIOS
|
||||
; INIT LATER.
|
||||
;
|
||||
LD HL,8000H ; COPY MEMORY FROM 8000
|
||||
LD DE,0C000H ; TO C000
|
||||
LD BC,4000H ; COPY 16K
|
||||
LDIR
|
||||
;
|
||||
; COPY FIRST $1000 BYTES TO $8000 (UPPER, NON-BANKED MEMORY)
|
||||
; THIS INCLUDES OURSELVES AND THE LOADER CODE
|
||||
;
|
||||
;
|
||||
; RELOCATE BOOT PHASE 2 AND LOADER CODE FROM 0000H TO 8000H
|
||||
;
|
||||
LD HL,0000H ; COPY MEMORY FROM 0000
|
||||
LD DE,8000H ; TO 8000H
|
||||
LD BC,1000H ; COPY 1000H BYTES
|
||||
LDIR
|
||||
;
|
||||
JP PHASE2 ; JUMP TO PHASE 2 BOOT IN UPPER MEMORY
|
||||
;
|
||||
;______________________________________________________________________________________________________________________
|
||||
;
|
||||
; THIS IS THE PHASE 2 CODE THAT MUST EXECUTE IN UPPER MEMORY
|
||||
;
|
||||
.ORG $ + $8000 ; WE ARE NOW EXECUTING IN UPPER MEMORY
|
||||
;
|
||||
PHASE2:
|
||||
LD SP,9000H ; INIT BOOT STACK
|
||||
;
|
||||
; COPY RAMPG0 TO RAMPG1
|
||||
;
|
||||
LD HL,0000H ; HL = LOCATION IN LOMEM TO COPY FROM/TO
|
||||
LOOP:
|
||||
LD DE,09000H ; DE = BUFFER ADDRESS
|
||||
LD BC,1000H ; BYTES TO COPY (4K CHUNKS)
|
||||
PUSH BC ; SAVE COPY SIZE
|
||||
PUSH DE ; SAVE COPY DEST
|
||||
PUSH HL ; SAVE COPY SOURCE
|
||||
LD A,0 ; SELECT PAGE 1
|
||||
CALL RAMPG ; OF ROM FOR COPY
|
||||
LDIR ; COPY ROM -> BUFFER
|
||||
POP DE ; RESTORE SOURCE AS NEW DESTINATION
|
||||
POP HL ; RESTORE DESTINATION AS NEW SOURCE
|
||||
POP BC ; RESTORE COPY SIZE
|
||||
LD A,1 ; SELECT PAGE 1
|
||||
CALL RAMPG ; OF RAM FOR COPY
|
||||
LDIR ; COPY BUFFER -> RAM
|
||||
EX DE,HL ; GET LOMEM POINTER BACK TO HL
|
||||
LD A,H ; HIGH BYTE OF POINTER TO A
|
||||
CP 80H ; HIGH BYTE WILL BE 80H WHEN WE ARE DONE
|
||||
JP NZ,LOOP ; IF NOT DONE, LOOP TO DO NEXT 4K CHUNK
|
||||
;
|
||||
; INITIALIZE HBIOS AND JUMP TO LOADER
|
||||
;
|
||||
LD A,1 ; SETUP TO SELECT PAGE 1
|
||||
CALL RAMPG ; SELECT RAM PAGE 1 (WHICH IS NOW LOADED WITH BNK1 CODE)
|
||||
CALL 1000H ; CALL HBIOS INITIALIZATION
|
||||
CALL RAMPGZ ; MAKE SURE RAM PAGE ZERO IS MAPPED TO LOWER 32K
|
||||
CALL 0FF00H ; CALL HBIOS PROXY INITIALIZATION
|
||||
;
|
||||
JP 8400H ; JUMP TO LOADER
|
||||
;______________________________________________________________________________________________________________________
|
||||
;
|
||||
; NOTE THAT MEMORY MANAGER CODE IS IN UPPER MEMORY!
|
||||
;
|
||||
#INCLUDE "memmgr.asm"
|
||||
;______________________________________________________________________________________________________________________
|
||||
;
|
||||
; PAD OUT REMAINDER OF PAGE
|
||||
;
|
||||
.ORG $ - $8000 ; ORG BACK TO LOWER MEMORY
|
||||
.FILL $0200 - $,$FF ; PAD OUT REMAINDER OF PAGE
|
||||
;
|
||||
.END
|
||||
424
trunk/Source/bootgen.asm
Normal file
424
trunk/Source/bootgen.asm
Normal file
@@ -0,0 +1,424 @@
|
||||
;___BOOTGEN___________________________________________________________________________________________________________
|
||||
;
|
||||
; COPY THE SYSTEM TO THE BOOT SECTORS OF AN IDE HDD
|
||||
;
|
||||
; CREATED BY : DAN WERNER 09 12.2009
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;__CONSTANTS_________________________________________________________________________________________________________________________
|
||||
;
|
||||
CR: .EQU 0DH ; ASCII CARRIAGE RETURN CHARACTER
|
||||
LF: .EQU 0AH ; ASCII LINE FEED CHARACTER
|
||||
ESC: .EQU 1BH ; ASCII ESCAPE CHARACTER
|
||||
BS: .EQU 08H ; ASCII BACKSPACE CHARACTER
|
||||
|
||||
;
|
||||
;
|
||||
;
|
||||
;__MAIN_PROGRAM_____________________________________________________________________________________________________________________
|
||||
;
|
||||
.ORG 00100h ; FOR DEBUG IN CP/M (AS .COM)
|
||||
|
||||
|
||||
LD HL,(0001H) ; GET WBOOT ADDRESS
|
||||
LD BC,1603H ; GET CP/M TOP
|
||||
SBC HL,BC ;
|
||||
LD (CPMSTART),HL ; SET IT
|
||||
DEC HL ;
|
||||
LD SP,HL ; SETUP STACK
|
||||
|
||||
|
||||
; PARSE COMMAND LINE
|
||||
LD HL,0081H ; SET INDEX POINTER
|
||||
LD B,(0080H) ; NUMBER OF BYTES
|
||||
PARSECMD:
|
||||
LD A,(HL) ; GET DRIVE LETTER ON COMMAND LINE
|
||||
INC HL
|
||||
CP 20H ; IS SPACE?
|
||||
JP NZ,PARSEGOT ; JUMP ON NON-BLANK
|
||||
DJNZ PARSECMD ; LOOP
|
||||
PARSEERR:
|
||||
LD DE,MSG_VALID ;
|
||||
LD C,09H ; CP/M WRITE START STRING TO CONSOLE CALL
|
||||
CALL 0005H
|
||||
JP EXIT ; EXIT
|
||||
PARSEGOT:
|
||||
SUB 'A' ; TURN IT INTO A NUMERIC
|
||||
JP C,PARSEERR ;
|
||||
CP 16 ; VALID CP/M DRIVE?
|
||||
JP P,PARSEERR ;
|
||||
LD (DEVICENUMBER),A ; DEVICE ID
|
||||
; GET NUMBER OF SECTORS PER TRACK
|
||||
LD L,A ; L=DISK NUMBER 0,1,2,3,4
|
||||
LD H,0 ; HIGH ORDER ZERO
|
||||
ADD HL,HL ; *2
|
||||
ADD HL,HL ; *4
|
||||
ADD HL,HL ; *8
|
||||
ADD HL,HL ; *16 (SIZE OF EACH HEADER)
|
||||
PUSH HL ;
|
||||
POP DE
|
||||
LD HL,(0001H) ;
|
||||
LD BC,0058 ;
|
||||
ADD HL,BC ;
|
||||
ADD HL,DE ; HL= DPBASE(DISKNO*16)
|
||||
EX DE,HL ;
|
||||
LD A,(DE) ;
|
||||
LD L,A ;
|
||||
INC DE ;
|
||||
LD A,(DE) ;
|
||||
LD H,A ;
|
||||
EX DE,HL ;
|
||||
LD A,(DE) ;
|
||||
LD (SECTRACK),A ;
|
||||
INC DE ;
|
||||
LD A,(DE) ;
|
||||
LD (SECTRACK+1),A ;
|
||||
|
||||
LD DE,DRIVE_MSG ;
|
||||
LD C,09H ; CP/M WRITE START STRING TO CONSOLE CALL
|
||||
CALL 0005H
|
||||
LD A,(DEVICENUMBER) ;
|
||||
ADD A,'A' ;
|
||||
CALL COUT ;
|
||||
LD A,':' ;
|
||||
CALL COUT ;
|
||||
CALL CRLF ;
|
||||
|
||||
|
||||
LD DE,BASE_MSG ;
|
||||
LD C,09H ; CP/M WRITE START STRING TO CONSOLE CALL
|
||||
CALL 0005H
|
||||
LD HL,(CPMSTART) ;
|
||||
CALL PHL ;
|
||||
LD DE,END_MSG ;
|
||||
LD C,09H ; CP/M WRITE START STRING TO CONSOLE CALL
|
||||
CALL 0005H
|
||||
LD HL,(CPMEND) ;
|
||||
CALL PHL ;
|
||||
CALL CRLF ;
|
||||
|
||||
LD DE,SECTOR_MSG ;
|
||||
LD C,09H ; CP/M WRITE START STRING TO CONSOLE CALL
|
||||
CALL 0005H
|
||||
LD HL,(SECTRACK) ;
|
||||
CALL PHL ;
|
||||
CALL CRLF ;
|
||||
|
||||
|
||||
; RUN WITH GOOD OUTPUT
|
||||
|
||||
LD A,(DEVICENUMBER) ; SET DEVICE NUMBER
|
||||
LD C,A
|
||||
CALL SELDSK ; SELECT DISK
|
||||
|
||||
LD HL,000CH ; SET INITIAL SECTOR
|
||||
LD (CURSECTOR),HL
|
||||
|
||||
LD HL,0000H ; SET INITIAL TRACK
|
||||
LD (CURTRACK),HL ;
|
||||
|
||||
LD HL,(CPMSTART) ; SET BEGINNING OF CPM
|
||||
LD (CURADDRESS),HL ;
|
||||
|
||||
LD BC,(DMAAD) ; SETUP THE DMA AREA
|
||||
CALL SETDMA ;
|
||||
|
||||
LOOP:
|
||||
LD BC,(CURSECTOR) ; SET SECTOR
|
||||
CALL SETSEC ;
|
||||
LD BC,(CURTRACK) ;
|
||||
CALL SETTRK ;
|
||||
CALL COPYTODMA ; COPY BYTES TO DMA
|
||||
CALL WRITE ; WRITE SECTOR
|
||||
|
||||
LD HL,(CURADDRESS) ; IF IX>CPMEND, EXIT PROGRAM
|
||||
LD BC,(CPMEND) ;
|
||||
LD A,H ;
|
||||
CP B ;
|
||||
JP NZ,CONTINUE ;
|
||||
LD A,L ;
|
||||
CP C ;
|
||||
JP M,ENDLOOP ;
|
||||
CONTINUE:
|
||||
LD HL,(CURSECTOR) ; GET NEXT TRACK & SECTOR
|
||||
INC HL ;
|
||||
LD (CURSECTOR),HL ;
|
||||
LD BC,(SECTRACK) ;
|
||||
LD A,H ;
|
||||
CP B ;
|
||||
JP NZ,LOOP ;
|
||||
LD A,L ;
|
||||
CP C ;
|
||||
JP NZ,LOOP ;
|
||||
|
||||
LD HL,(CURTRACK) ;
|
||||
INC HL ;
|
||||
LD (CURTRACK),HL ;
|
||||
LD HL,0000H ;
|
||||
LD (CURSECTOR),HL ;
|
||||
JP LOOP ;
|
||||
|
||||
ENDLOOP:
|
||||
; WRITE CP/M BOOT START AND END ADDRESSES IN LAST TWO WORDS OF MEDIA INFO SECTOR
|
||||
LD BC,000BH ; SET SECTOR
|
||||
CALL SETSEC ;
|
||||
LD BC,0000H ;
|
||||
CALL SETTRK ;
|
||||
CALL READ ;
|
||||
LD HL,(DMAAD) ; SET ADDRESS IN BUFFER TO LAST TWO WORDS
|
||||
LD BC,122 ;
|
||||
ADD HL,BC ;
|
||||
LD A,(CPMSTART) ;
|
||||
LD (HL),A ;
|
||||
LD A,(CPMSTART+1) ;
|
||||
INC HL
|
||||
LD (HL),A ;
|
||||
LD A,(CPMEND) ;
|
||||
INC HL
|
||||
LD (HL),A ;
|
||||
LD A,(CPMEND+1) ;
|
||||
INC HL
|
||||
LD (HL),A ;
|
||||
LD A,(0001H) ;
|
||||
DEC A ;
|
||||
DEC A ;
|
||||
DEC A ;
|
||||
INC HL
|
||||
LD (HL),A ;
|
||||
LD A,(0002H) ;
|
||||
INC HL
|
||||
LD (HL),A ;
|
||||
CALL WRITE ; WRITE SECTOR
|
||||
|
||||
EXIT:
|
||||
|
||||
LD DE,MSG_END ;
|
||||
LD C,09H ; CP/M WRITE END STRING TO CONSOLE CALL
|
||||
CALL 0005H ;
|
||||
;
|
||||
LD C,00H ; CP/M SYSTEM RESET CALL
|
||||
CALL 0005H ; RETURN TO PROMPT
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;___COPYTODMA_____________________________________________________________________________________
|
||||
;
|
||||
; COPY CURRENT ADDRESS BLOCK TO DMA
|
||||
;_________________________________________________________________________________________________
|
||||
COPYTODMA:
|
||||
LD HL,(DMAAD) ; LOAD HL WITH DMA ADDRESS
|
||||
LD E,L ;
|
||||
LD D,H ; GET IT INTO DE
|
||||
LD HL,(CURADDRESS) ; GET RAM ADDRESS TO COPY
|
||||
LD BC,128 ; BC IS COUNTER FOR FIXED SIZE TRANSFER (128 BYTES)
|
||||
LDIR ; TRANSFER
|
||||
LD HL,(CURADDRESS) ; INCREMENT ADDRESS POINTER BY COPY SIZE
|
||||
LD BC,128 ;
|
||||
ADD HL,BC ;
|
||||
LD (CURADDRESS),HL ;
|
||||
RET
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;__HXOUT_________________________________________________________________________________________________________________________
|
||||
;
|
||||
; PRINT THE ACCUMULATOR CONTENTS AS HEX DATA ON THE SERIAL PORT
|
||||
;________________________________________________________________________________________________________________________________
|
||||
;
|
||||
HXOUT:
|
||||
PUSH BC ; SAVE BC
|
||||
LD B,A ;
|
||||
RLC A ; DO HIGH NIBBLE FIRST
|
||||
RLC A ;
|
||||
RLC A ;
|
||||
RLC A ;
|
||||
AND 0FH ; ONLY THIS NOW
|
||||
ADD A,30H ; TRY A NUMBER
|
||||
CP 3AH ; TEST IT
|
||||
JR C,OUT1 ; IF CY SET PRINT 'NUMBER'
|
||||
ADD A,07H ; MAKE IT AN ALPHA
|
||||
OUT1:
|
||||
CALL COUT ; SCREEN IT
|
||||
LD A,B ; NEXT NIBBLE
|
||||
AND 0FH ; JUST THIS
|
||||
ADD A,30H ; TRY A NUMBER
|
||||
CP 3AH ; TEST IT
|
||||
JR C,OUT2 ; PRINT 'NUMBER'
|
||||
ADD A,07H ; MAKE IT ALPHA
|
||||
OUT2:
|
||||
CALL COUT ; SCREEN IT
|
||||
POP BC ; RESTORE BC
|
||||
RET ;
|
||||
|
||||
|
||||
;__SPACE_________________________________________________________________________________________________________________________
|
||||
;
|
||||
; PRINT A SPACE CHARACTER ON THE SERIAL PORT
|
||||
;________________________________________________________________________________________________________________________________
|
||||
;
|
||||
SPACE:
|
||||
PUSH AF ; STORE AF
|
||||
LD A,20H ; LOAD A "SPACE"
|
||||
CALL COUT ; SCREEN IT
|
||||
POP AF ; RESTORE AF
|
||||
RET ; DONE
|
||||
|
||||
;__CRLF_________________________________________________________________________________________________________________________
|
||||
;
|
||||
; PRINT A CR/LF
|
||||
;________________________________________________________________________________________________________________________________
|
||||
;
|
||||
CRLF:
|
||||
PUSH AF ; STORE AF
|
||||
LD A,0DH ; LOAD A "SPACE"
|
||||
CALL COUT ; SCREEN IT
|
||||
LD A,0AH ; LOAD A "SPACE"
|
||||
CALL COUT ; SCREEN IT
|
||||
POP AF ; RESTORE AF
|
||||
RET ; DONE
|
||||
|
||||
;__COUT_________________________________________________________________________________________________________________________
|
||||
;
|
||||
; PRINT CONTENTS OF A
|
||||
;________________________________________________________________________________________________________________________________
|
||||
;
|
||||
COUT:
|
||||
PUSH BC ;
|
||||
PUSH AF ;
|
||||
PUSH HL ;
|
||||
PUSH DE ;
|
||||
|
||||
LD (COUT_BUFFER),A ;
|
||||
LD DE,COUT_BUFFER ;
|
||||
LD C,09H ; CP/M WRITE START STRING TO CONSOLE CALL
|
||||
CALL 0005H
|
||||
POP DE ;
|
||||
POP HL ;
|
||||
POP AF ;
|
||||
POP BC ;
|
||||
RET ; DONE
|
||||
|
||||
|
||||
|
||||
|
||||
;__PHL_________________________________________________________________________________________________________________________
|
||||
;
|
||||
; PRINT THE HL REG ON THE SERIAL PORT
|
||||
;________________________________________________________________________________________________________________________________
|
||||
;
|
||||
PHL:
|
||||
LD A,H ; GET HI BYTE
|
||||
CALL HXOUT ; DO HEX OUT ROUTINE
|
||||
LD A,L ; GET LOW BYTE
|
||||
CALL HXOUT ; HEX IT
|
||||
CALL SPACE ;
|
||||
RET ; DONE
|
||||
|
||||
COUT_BUFFER:
|
||||
.DB 00
|
||||
.DB "$"
|
||||
|
||||
BASE_MSG:
|
||||
.TEXT "CP/M IMAGE="
|
||||
.db "$"
|
||||
END_MSG:
|
||||
.TEXT "TO "
|
||||
.db "$"
|
||||
SECTOR_MSG:
|
||||
.TEXT "SECTORS/TRACK="
|
||||
.db "$"
|
||||
|
||||
DRIVE_MSG:
|
||||
.TEXT "DRIVE="
|
||||
.db "$"
|
||||
|
||||
|
||||
;__CBIOS_________________________________________________________________________________________________________________________
|
||||
;
|
||||
; CBIOS JUMP TABLE
|
||||
;________________________________________________________________________________________________________________________________
|
||||
;
|
||||
|
||||
SELDSK: ;SELECT DISK
|
||||
PUSH BC ;
|
||||
LD HL,(0001H) ;
|
||||
LD BC,0024 ;
|
||||
ADD HL,BC ;
|
||||
POP BC ;
|
||||
JP (HL) ;
|
||||
SETTRK: ;SET DISK TRACK ADDR
|
||||
PUSH BC ;
|
||||
LD HL,(0001H) ;
|
||||
LD BC,0027 ;
|
||||
ADD HL,BC ;
|
||||
POP BC ;
|
||||
JP (HL) ;
|
||||
SETSEC: ;SET DISK SECTOR ADDR
|
||||
PUSH BC ;
|
||||
LD HL,(0001H) ;
|
||||
LD BC,0030 ;
|
||||
ADD HL,BC ;
|
||||
POP BC ;
|
||||
JP (HL) ;
|
||||
SETDMA: ;SET DMA BUFFER ADDR
|
||||
PUSH BC ;
|
||||
LD HL,(0001H) ;
|
||||
LD BC,0033 ;
|
||||
ADD HL,BC ;
|
||||
POP BC ;
|
||||
JP (HL) ;
|
||||
READ: ;READ SECTOR
|
||||
PUSH BC ;
|
||||
LD HL,(0001H) ;
|
||||
LD BC,0036 ;
|
||||
ADD HL,BC ;
|
||||
POP BC ;
|
||||
JP (HL) ;
|
||||
WRITE: ;WRITE SECTOR
|
||||
PUSH BC ;
|
||||
LD HL,(0001H) ;
|
||||
LD BC,0039 ;
|
||||
ADD HL,BC ;
|
||||
POP BC ;
|
||||
JP (HL) ;
|
||||
|
||||
|
||||
|
||||
CURTRACK: .DW 0 ; CURRENT TRACK
|
||||
CURSECTOR: .DW 0 ; CURRENT SECTOR
|
||||
CURADDRESS: .DW 0 ; CURRENT CP/M ADDRESS
|
||||
DMAAD: .DW 5000H ; DIRECT MEMORY ADDRESS
|
||||
|
||||
CPMEND: .DW 0FDFFH ; END OF CP/M
|
||||
SECTRACK: .DW 0100H ; SECTORS PER TRACK
|
||||
CPMSTART: .DW 0D000H ; START OF CP/M
|
||||
DEVICENUMBER: .DB 2 ; DEVICE ID
|
||||
|
||||
|
||||
|
||||
MSG_END:
|
||||
.DB LF, CR ; LINE FEED AND CARRIAGE RETURN
|
||||
.TEXT "BOOTGEN COMPLETED."
|
||||
.DB LF, CR ; LINE FEED AND CARRIAGE RETURN
|
||||
.DB "$" ; LINE TERMINATOR
|
||||
MSG_VALID:
|
||||
.DB LF, CR ; LINE FEED AND CARRIAGE RETURN
|
||||
.TEXT "USAGE: BOOTGEN (DRIVE):"
|
||||
.DB LF, CR ; LINE FEED AND CARRIAGE RETURN
|
||||
.TEXT "(DRIVE) IS ANY VALID CP/M DRIVE:"
|
||||
.DB LF, CR ; LINE FEED AND CARRIAGE RETURN
|
||||
.DB "$" ; LINE TERMINATOR
|
||||
|
||||
|
||||
.END
|
||||
|
||||
|
||||
|
||||
109
trunk/Source/bootrom.asm
Normal file
109
trunk/Source/bootrom.asm
Normal file
@@ -0,0 +1,109 @@
|
||||
;___BOOTROM____________________________________________________________________________________________________________
|
||||
;
|
||||
; ROM BOOT MANAGER
|
||||
;
|
||||
; HARDWARE COLD START WILL JUMP HERE FOR INITIALIZATION
|
||||
; REFER TO BANKEDBIOS.TXT FOR MORE INFORMATION.
|
||||
;______________________________________________________________________________________________________________________
|
||||
;
|
||||
;
|
||||
#INCLUDE "std.asm"
|
||||
;
|
||||
.ORG 0100H
|
||||
;
|
||||
DI ; NO INTERRUPTS
|
||||
IM 1 ; INTERRUPT MODE 1
|
||||
|
||||
;
|
||||
; PERFORM MINIMAL Z180 SPECIFIC INITIALIZATION
|
||||
;
|
||||
#IF (PLATFORM == PLT_N8)
|
||||
; SET BASE FOR CPU IO REGISTERS
|
||||
LD A,CPU_IOBASE
|
||||
OUT0 (CPU_ICR),A
|
||||
|
||||
; SET CPU CLOCK DIV
|
||||
LD A,Z180_CLKDIV << 7
|
||||
OUT0 (CPU_CCR),A
|
||||
|
||||
; SET WAIT STATES
|
||||
LD A,0 + (Z180_MEMWAIT << 6) | (Z180_IOWAIT << 4)
|
||||
OUT0 (CPU_DCNTL),A
|
||||
|
||||
; MMU SETUP
|
||||
LD A,80H
|
||||
OUT0 (CPU_CBAR),A ; SETUP FOR 32K/32K BANK CONFIG
|
||||
XOR A
|
||||
OUT0 (CPU_BBR),A ; BANK BASE = 0
|
||||
LD A,(RAMSIZE - 64) >> 2
|
||||
OUT0 (CPU_CBR),A ; COMMON BASE = LAST (TOP) BANK
|
||||
#ENDIF
|
||||
|
||||
;
|
||||
; COPY ENTIRE CONTENTS OF ROM BANK 0 TO HI RAM
|
||||
; THIS INCLUDES OURSELVES AND THE LOADER CODE
|
||||
; - HBIOS PROXY AT $FF00 IS OVERLAID, BUT WE DON'T CARE
|
||||
; BECAUSE IT WILL BE REFRESHED DURING HBIOS
|
||||
; INIT LATER.
|
||||
;
|
||||
LD HL,0000H ; COPY MEMORY FROM LOMEM (0000H)
|
||||
LD DE,8000H ; TO HIMEM (8000H)
|
||||
LD BC,8000H ; COPY ENTIRE BANK, 8000H BYTES
|
||||
LDIR
|
||||
;
|
||||
JP PHASE2 ; JUMP TO PHASE 2 BOOT IN UPPER MEMORY
|
||||
;
|
||||
;______________________________________________________________________________________________________________________
|
||||
;
|
||||
; THIS IS THE PHASE 2 CODE THAT MUST EXECUTE IN UPPER MEMORY
|
||||
;
|
||||
.ORG $ + $8000 ; WE ARE NOW EXECUTING IN UPPER MEMORY
|
||||
;
|
||||
PHASE2:
|
||||
LD SP,9000H ; INIT BOOT STACK
|
||||
;
|
||||
; COPY ROMPG1 TO RAMPG1
|
||||
;
|
||||
LD HL,0000H ; HL = LOCATION IN LOMEM TO COPY FROM/TO
|
||||
LOOP:
|
||||
LD DE,09000H ; DE = BUFFER ADDRESS
|
||||
LD BC,1000H ; BYTES TO COPY (4K CHUNKS)
|
||||
PUSH BC ; SAVE COPY SIZE
|
||||
PUSH DE ; SAVE COPY DEST
|
||||
PUSH HL ; SAVE COPY SOURCE
|
||||
LD A,1 ; SELECT PAGE 1
|
||||
CALL ROMPG ; OF ROM FOR COPY
|
||||
LDIR ; COPY ROM -> BUFFER
|
||||
POP DE ; RESTORE SOURCE AS NEW DESTINATION
|
||||
POP HL ; RESTORE DESTINATION AS NEW SOURCE
|
||||
POP BC ; RESTORE COPY SIZE
|
||||
LD A,1 ; SELECT PAGE 1
|
||||
CALL RAMPG ; OF RAM FOR COPY
|
||||
LDIR ; COPY BUFFER -> RAM
|
||||
EX DE,HL ; GET LOMEM POINTER BACK TO HL
|
||||
LD A,H ; HIGH BYTE OF POINTER TO A
|
||||
CP 80H ; HIGH BYTE WILL BE 80H WHEN WE ARE DONE
|
||||
JP NZ,LOOP ; IF NOT DONE, LOOP TO DO NEXT 4K CHUNK
|
||||
;
|
||||
; INITIALIZE HBIOS AND JUMP TO LOADER
|
||||
;
|
||||
LD A,1 ; SETUP TO SELECT PAGE 1
|
||||
CALL RAMPG ; SELECT RAM PAGE 1 (WHICH IS NOW LOADED WITH BNK1 CODE)
|
||||
CALL 1000H ; CALL HBIOS INITIALIZATION
|
||||
CALL RAMPGZ ; MAKE SURE RAM PAGE ZERO IS MAPPED TO LOWER 32K
|
||||
CALL 0FF00H ; CALL HBIOS PROXY INITIALIZATION
|
||||
;
|
||||
JP 8400H ; JUMP TO LOADER
|
||||
;______________________________________________________________________________________________________________________
|
||||
;
|
||||
; NOTE THAT MEMORY MANAGER CODE IS IN UPPER MEMORY!
|
||||
;
|
||||
#INCLUDE "memmgr.asm"
|
||||
;______________________________________________________________________________________________________________________
|
||||
;
|
||||
; PAD OUT REMAINDER OF PAGE
|
||||
;
|
||||
.ORG $ - $8000 ; ORG BACK TO LOWER MEMORY
|
||||
.FILL $0200 - $,$FF ; PAD OUT REMAINDER OF PAGE
|
||||
;
|
||||
.END
|
||||
2123
trunk/Source/cbios.asm
Normal file
2123
trunk/Source/cbios.asm
Normal file
File diff suppressed because it is too large
Load Diff
1264
trunk/Source/ccpb03.asm
Normal file
1264
trunk/Source/ccpb03.asm
Normal file
File diff suppressed because it is too large
Load Diff
202
trunk/Source/cnfgdata.inc
Normal file
202
trunk/Source/cnfgdata.inc
Normal file
@@ -0,0 +1,202 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; cnfgdata.inc 6/02/2012 dwg - for 2.0 B8 ;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; 6/04/2012 dwg - add BOOTLU per Wayne email ;
|
||||
; 6/02/2012 dwg - change BOOTDISK to DEVUNIT ;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; 5/10/2012 dwg - cleanup for 2.0 architecture ;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; cnfgdata.inc 3/14/2012 dwg - for 2.0 X5 ;
|
||||
; 3/14/2012 dwg - retire LDRCON & DBGCON ;
|
||||
; cnfgdata.inc 3/04/2012 dwg - for 2.0.0.0 ;
|
||||
; 3/04/2012 dwg - added ptrs VAR_LOC & TST_LOC ;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
.DB RMJ,RMN,RUP,RTP ; config data version
|
||||
|
||||
; Loader data
|
||||
;
|
||||
; This area is for notes left by the loader from when the ccp/bdos/bios were
|
||||
; placed in memory and kicked off, this allows logging onto the boot drive on startup
|
||||
;
|
||||
DISKBOOT .DB FALSE ; FALSE if ROM BOOT, otherwise TRUE
|
||||
BOOTDEVICE .DB 0 ; if not ROM boot, has DEV/UNIT of boot device
|
||||
BOOTLU .DW 0 ; logical unit on dev/unit for boot
|
||||
.DB 0,0,0, 0,0,0 ; system startup time to be filled in by loader (from rtc)
|
||||
|
||||
;==================================================================================================
|
||||
; CONFIGURATION
|
||||
;==================================================================================================
|
||||
;
|
||||
; BUILD CONFIGURATION OPTIONS
|
||||
;
|
||||
|
||||
;CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS
|
||||
.DB CPUFREQ
|
||||
|
||||
;PLATFORM .EQU PLT_ZETA ; PLT_N8VEM, PLT_ZETA
|
||||
.DB PLATFORM
|
||||
|
||||
;DIOPLT .EQU DIOPLT_ZETA ; DIOPLT_NONE, DIOPLT_DISKIO, DIOPLT_ZETA, DIOPLT_DIDE, DIOPLT_N8, DIOPLT_DISKIO3
|
||||
.DB DIOPLT
|
||||
|
||||
;VDUMODE .EQU VDUPLT_NONE ; VDUPLT_NONE, VDUPLT_VDUV1, VDUPLT_PROPIO, VDUPLT_N8, VDUPLT_V2 (ONLY V1 IMPLEMENTED!)
|
||||
.DB VDUMODE
|
||||
|
||||
;ROMSIZE .EQU 512 ; SIZE OF ROM IN KB, MUST MATCH YOUR HARDWARE!!!
|
||||
.DW ROMSIZE
|
||||
|
||||
;RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!!
|
||||
.DW RAMSIZE
|
||||
|
||||
;CLRRAMDISK .EQU CLR_AUTO ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA)
|
||||
.DB CLRRAMDISK
|
||||
|
||||
|
||||
;DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
.DB DSKYENABLE
|
||||
|
||||
;UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
.DB UARTENABLE
|
||||
|
||||
;VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!)
|
||||
.DB VDUENABLE
|
||||
|
||||
|
||||
;FDENABLE .EQU TRUE ; TRUE FOR FLOPPY SUPPORT
|
||||
.DB FDENABLE
|
||||
|
||||
;FDTRACE .EQU 1 ; 0=SILENT, 1=FATAL ERRORS, 2=ALL ERRORS, 3=EVERYTHING (ONLY RELEVANT IF FDENABLE = TRUE)
|
||||
.DB FDTRACE
|
||||
|
||||
;FDMEDIA .EQU FDM720 ; FDM720 OR FDM144 (ONLY RELEVANT IF FDENABLE = TRUE)
|
||||
.DB FDMEDIA
|
||||
|
||||
;FDMEDIAALT .EQU FDM144 ; ALTERNATIVE MEDIA TO TRY
|
||||
.DB FDMEDIAALT
|
||||
|
||||
;FDMAUTO .EQU TRUE ; SELECT BETWEEN MEDIA OPTS ABOVE AUTOMATICALLY
|
||||
.DB FDMAUTO
|
||||
|
||||
|
||||
;IDEENABLE .EQU FALSE ; TRUE FOR IDE SUPPORT
|
||||
.DB IDEENABLE
|
||||
|
||||
;IDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE)
|
||||
.DB IDETRACE
|
||||
|
||||
;IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!)
|
||||
.DB IDE8BIT
|
||||
|
||||
;IDECAPACITY .EQU 64 ; SIZE OF DEVICE IN MEGABYTES
|
||||
.DW IDECAPACITY
|
||||
|
||||
;PPIDEENABLE .EQU TRUE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE)
|
||||
.DB PPIDEENABLE
|
||||
|
||||
;PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE)
|
||||
.DB PPIDETRACE
|
||||
|
||||
;PPIDE8BIT .EQU TRUE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!)
|
||||
.DB PPIDE8BIT
|
||||
|
||||
;PPIDECAPACITY .EQU 64
|
||||
.DW PPIDECAPACITY ; SIZE OF DEVICE IN MEGABYTES
|
||||
|
||||
; PPIDESLOW .EQU FALSE
|
||||
.DB PPIDESLOW ; Add NOPs to PPIDE driver for recovery time
|
||||
|
||||
;BOOTTYPE: .EQU BT_JP2 ; BT_UART, BT_DSKY, BT_JP2
|
||||
.DB BOOTTYPE
|
||||
|
||||
;BOOT_TIMEOUT .EQU 10 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE
|
||||
.DB BOOT_TIMEOUT
|
||||
|
||||
;BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT
|
||||
.DB BOOT_DEFAULT
|
||||
|
||||
;BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
|
||||
.DW BAUDRATE
|
||||
|
||||
#IF (PLATFORM == PLT_N8)
|
||||
;Z180_CLKDIV .EQU 1 ; 0=XTAL/2, 1=XTAL/1
|
||||
.DB Z180_CLKDIV
|
||||
|
||||
;Z180_MEMWAIT .EQU 0 ; MEMORY WAIT STATES TO INSERT (0-3)
|
||||
.DB Z180_MEMWAIT
|
||||
|
||||
;Z180_IOWAIT .EQU 3 ; IO WAIT STATES TO INSERT (0-3)
|
||||
.DB Z180_IOWAIT
|
||||
|
||||
;Z180_CNTLB0 .EQU 20H ; SERIAL PORT 0 DIV, SEE Z180 CLOCKING DOCUMENT
|
||||
.DB Z180_CNTLB0
|
||||
|
||||
;Z180_CNTLB1 .EQU 20H ; SERIAL PORT 1 DIV, SEE Z180 CLOCKING DOCUMENT
|
||||
.DB Z180_CNTLB1
|
||||
|
||||
.DB SDENABLE ; SD support boolean
|
||||
.DB SDTRACE ; SD trace type
|
||||
|
||||
;SDCAPACITY .EQU 64 ; DEVICE SIZE IN MEGABYTES
|
||||
.DW SDCAPACITY
|
||||
|
||||
.DB SDCSIO ; USE CSI/O PORT (boolean)
|
||||
.DB SDCSIOFAST ; USE FAST CSI/O ALGORITHM (boolean)
|
||||
#ELSE
|
||||
.DB 0E5h ; placeholder for Z180_CLKDIV
|
||||
.DB 0E5h ; placeholder for Z180_MEMWAIT
|
||||
.DB 0E5h ; placeholder for Z180_IOWAIT
|
||||
.DB 0E5h ; placeholder for Z180_CNTLB0
|
||||
.DB 0E5h ; placeholder for Z180_CNTLB1
|
||||
.DB 0e5h ; placeholder for SDENABLE
|
||||
.DB 0e5h ; placeholder for SDTARCE
|
||||
.DW 0e5e5h ; placeholder for SDCAPACITY
|
||||
.DB 0e5h ; placeholder for SDCSIO
|
||||
.DB 0e5h ; placeholder for SDCSIOFAST
|
||||
#ENDIF
|
||||
|
||||
; DEFIOBYTE .EQU $00 ; INITIAL VALUE FOR CP/M IOBYTE, $00=TTY, $01=CRT (MUST HAVE CRT HARDWARE);
|
||||
.DB DEFIOBYTE
|
||||
|
||||
; TERMTYPE .EQU TERM_TTY
|
||||
.DB TERMTYPE
|
||||
|
||||
; REVISION .EQU 500 ; approximate svn revision of source tree
|
||||
.DW REVISION
|
||||
|
||||
#IF (PRPSDENABLE)
|
||||
.DB PRPSDENABLE
|
||||
.DB PRPSDTRACE
|
||||
.DW PRPSDCAPACITY
|
||||
.DB PRPCONENABLE
|
||||
#ELSE
|
||||
.DB 0E5h ; placeholder for PRPSDENABLE
|
||||
.DB 0E5h ; placeholder for PRPSDTARCE
|
||||
.DW 0E5E5h ; placeholder for PRPSDCAPACITY
|
||||
.DB 0E5h ; placeholder for PRPCONENABLE
|
||||
#ENDIF
|
||||
|
||||
; DATASIZE .EQU 0700h ;
|
||||
.DW BIOSSIZE
|
||||
|
||||
;PPPENABLE .EQU FALSE ; TRUE FOR PARPORTPROP SUPPORT
|
||||
.DB PPPENABLE
|
||||
|
||||
;PPPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!)
|
||||
.DB PPPSDENABLE
|
||||
|
||||
;PPPSDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPPENABLE = TRUE)
|
||||
.DB PPPSDTRACE
|
||||
|
||||
;PPPSDCAPACITY .EQU 64 ; CAPACITY OF PPP SD DEVICE (IN MB)
|
||||
.DW PPPSDCAPACITY
|
||||
|
||||
;PPPCONENABLE .EQU TRUE ; TRUE FOR PROPIO CONSOLE SUPPORT (PS/2 KBD & VGA VIDEO)
|
||||
.DB PPPCONENABLE
|
||||
|
||||
; PRPENABLE .EQU FALSE
|
||||
.DB PRPENABLE
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;
|
||||
; eof - cnfgdata.inc ;
|
||||
;;;;;;;;;;;;;;;;;;;;;;
|
||||
92
trunk/Source/config_n8_2312.asm
Normal file
92
trunk/Source/config_n8_2312.asm
Normal file
@@ -0,0 +1,92 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; ROMWBW 2.X CONFIGURATION FOR N8 5/8/2012
|
||||
;==================================================================================================
|
||||
;
|
||||
; BUILD CONFIGURATION OPTIONS
|
||||
;
|
||||
CPUFREQ .EQU 20 ; IN MHZ, USED TO COMPUTE DELAY FACTORS
|
||||
;
|
||||
PLATFORM .EQU PLT_N8 ; PLT_N8VEM, PLT_ZETA, PLT_N8
|
||||
;
|
||||
DIOPLT .EQU 0 ; DEPRECATED
|
||||
;
|
||||
DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON
|
||||
ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED)
|
||||
;
|
||||
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)
|
||||
UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY)
|
||||
UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!)
|
||||
;
|
||||
VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!)
|
||||
VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!)
|
||||
;
|
||||
BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA
|
||||
;
|
||||
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 TRUE ; TRUE FOR FLOPPY SUPPORT
|
||||
FDMODE .EQU FDMODE_N8 ; 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 FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE)
|
||||
PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3
|
||||
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 TRUE ; TRUE FOR SD SUPPORT
|
||||
SDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE)
|
||||
SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB)
|
||||
SDCSIO .EQU TRUE ; TRUE IF USING THE CSIO PORT (N8 ONLY)
|
||||
SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY)
|
||||
PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
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)
|
||||
;
|
||||
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
|
||||
;
|
||||
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
|
||||
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
|
||||
;
|
||||
Z180_CLKDIV .EQU 1 ; 0=XTAL/2, 1=XTAL/1
|
||||
Z180_MEMWAIT .EQU 0 ; MEMORY WAIT STATES TO INSERT (0-3)
|
||||
Z180_IOWAIT .EQU 3 ; IO WAIT STATES TO INSERT (0-3)
|
||||
Z180_CNTLB0 .EQU 20H ; SERIAL PORT 0 DIV, SEE Z180 CLOCKING DOCUMENT
|
||||
Z180_CNTLB1 .EQU 20H ; SERIAL PORT 1 DIV, SEE Z180 CLOCKING DOCUMENT
|
||||
92
trunk/Source/config_n8_2511.asm
Normal file
92
trunk/Source/config_n8_2511.asm
Normal file
@@ -0,0 +1,92 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; ROMWBW 2.X CONFIGURATION FOR N8 5/8/2012
|
||||
;==================================================================================================
|
||||
;
|
||||
; BUILD CONFIGURATION OPTIONS
|
||||
;
|
||||
CPUFREQ .EQU 20 ; IN MHZ, USED TO COMPUTE DELAY FACTORS
|
||||
;
|
||||
PLATFORM .EQU PLT_N8 ; PLT_N8VEM, PLT_ZETA, PLT_N8
|
||||
;
|
||||
DIOPLT .EQU 0 ; DEPRECATED
|
||||
;
|
||||
DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON
|
||||
ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED)
|
||||
;
|
||||
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)
|
||||
UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY)
|
||||
UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!)
|
||||
;
|
||||
VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!)
|
||||
VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!)
|
||||
;
|
||||
BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA
|
||||
;
|
||||
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 TRUE ; TRUE FOR FLOPPY SUPPORT
|
||||
FDMODE .EQU FDMODE_N8 ; 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 FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE)
|
||||
PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3
|
||||
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 TRUE ; TRUE FOR SD SUPPORT
|
||||
SDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE)
|
||||
SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB)
|
||||
SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY)
|
||||
SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY)
|
||||
PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
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)
|
||||
;
|
||||
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
|
||||
;
|
||||
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
|
||||
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
|
||||
;
|
||||
Z180_CLKDIV .EQU 1 ; 0=XTAL/2, 1=XTAL/1
|
||||
Z180_MEMWAIT .EQU 0 ; MEMORY WAIT STATES TO INSERT (0-3)
|
||||
Z180_IOWAIT .EQU 3 ; IO WAIT STATES TO INSERT (0-3)
|
||||
Z180_CNTLB0 .EQU 20H ; SERIAL PORT 0 DIV, SEE Z180 CLOCKING DOCUMENT
|
||||
Z180_CNTLB1 .EQU 20H ; SERIAL PORT 1 DIV, SEE Z180 CLOCKING DOCUMENT
|
||||
86
trunk/Source/config_n8vem.asm
Normal file
86
trunk/Source/config_n8vem.asm
Normal file
@@ -0,0 +1,86 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; ROMWBW 2.X CONFIGURATION FOR N8VEM SBC 5/8/2012
|
||||
;==================================================================================================
|
||||
;
|
||||
; BUILD CONFIGURATION OPTIONS
|
||||
;
|
||||
CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS
|
||||
;
|
||||
PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8
|
||||
;
|
||||
DIOPLT .EQU 0 ; DEPRECATED
|
||||
;
|
||||
DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON
|
||||
ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED)
|
||||
;
|
||||
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)
|
||||
UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY)
|
||||
UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!)
|
||||
;
|
||||
VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!)
|
||||
VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!)
|
||||
;
|
||||
BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA
|
||||
;
|
||||
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 FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE)
|
||||
PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3
|
||||
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
|
||||
SDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE)
|
||||
SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB)
|
||||
SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY)
|
||||
SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY)
|
||||
PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
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)
|
||||
;
|
||||
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
|
||||
;
|
||||
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
|
||||
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
|
||||
86
trunk/Source/config_n8vem_dide.asm
Normal file
86
trunk/Source/config_n8vem_dide.asm
Normal file
@@ -0,0 +1,86 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; ROMWBW 2.X CONFIGURATION FOR N8VEM SBC 5/8/2012
|
||||
;==================================================================================================
|
||||
;
|
||||
; BUILD CONFIGURATION OPTIONS
|
||||
;
|
||||
CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS
|
||||
;
|
||||
PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8
|
||||
;
|
||||
DIOPLT .EQU 0 ; DEPRECATED
|
||||
;
|
||||
DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON
|
||||
ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED)
|
||||
;
|
||||
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)
|
||||
UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY)
|
||||
UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!)
|
||||
;
|
||||
VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!)
|
||||
VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!)
|
||||
;
|
||||
BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA
|
||||
;
|
||||
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 TRUE ; TRUE FOR FLOPPY SUPPORT
|
||||
FDMODE .EQU FDMODE_DIDE ; 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 TRUE ; TRUE FOR IDE SUPPORT
|
||||
IDEMODE .EQU IDEMODE_DIDE ; 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 FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE)
|
||||
PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3
|
||||
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
|
||||
SDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE)
|
||||
SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB)
|
||||
SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY)
|
||||
SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY)
|
||||
PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
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)
|
||||
;
|
||||
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
|
||||
;
|
||||
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
|
||||
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
|
||||
86
trunk/Source/config_n8vem_diskio.asm
Normal file
86
trunk/Source/config_n8vem_diskio.asm
Normal file
@@ -0,0 +1,86 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; ROMWBW 2.X CONFIGURATION FOR N8VEM SBC 5/8/2012
|
||||
;==================================================================================================
|
||||
;
|
||||
; BUILD CONFIGURATION OPTIONS
|
||||
;
|
||||
CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS
|
||||
;
|
||||
PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8
|
||||
;
|
||||
DIOPLT .EQU 0 ; DEPRECATED
|
||||
;
|
||||
DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON
|
||||
ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED)
|
||||
;
|
||||
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)
|
||||
UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY)
|
||||
UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!)
|
||||
;
|
||||
VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!)
|
||||
VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!)
|
||||
;
|
||||
BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA
|
||||
;
|
||||
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 TRUE ; 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 TRUE ; 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 FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE)
|
||||
PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3
|
||||
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
|
||||
SDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE)
|
||||
SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB)
|
||||
SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY)
|
||||
SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY)
|
||||
PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
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)
|
||||
;
|
||||
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
|
||||
;
|
||||
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
|
||||
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
|
||||
86
trunk/Source/config_n8vem_diskio3.asm
Normal file
86
trunk/Source/config_n8vem_diskio3.asm
Normal file
@@ -0,0 +1,86 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; ROMWBW 2.X CONFIGURATION FOR N8VEM SBC W/ DISKIO V3 5/8/2012
|
||||
;==================================================================================================
|
||||
;
|
||||
; BUILD CONFIGURATION OPTIONS
|
||||
;
|
||||
CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS
|
||||
;
|
||||
PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8
|
||||
;
|
||||
DIOPLT .EQU 0 ; DEPRECATED
|
||||
;
|
||||
DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON
|
||||
ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED)
|
||||
;
|
||||
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)
|
||||
UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY)
|
||||
UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!)
|
||||
;
|
||||
VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!)
|
||||
VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!)
|
||||
;
|
||||
BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA
|
||||
;
|
||||
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 TRUE ; TRUE FOR FLOPPY SUPPORT
|
||||
FDMODE .EQU FDMODE_DIO3 ; 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)
|
||||
PPIDEMODE .EQU PPIDEMODE_DIO3 ; PPIDEMODE_STD, PPIDEMODE_DIO3
|
||||
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
|
||||
SDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE)
|
||||
SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB)
|
||||
SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY)
|
||||
SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY)
|
||||
PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
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)
|
||||
;
|
||||
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
|
||||
;
|
||||
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
|
||||
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
|
||||
86
trunk/Source/config_n8vem_ppide.asm
Normal file
86
trunk/Source/config_n8vem_ppide.asm
Normal file
@@ -0,0 +1,86 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; ROMWBW 2.X CONFIGURATION FOR N8VEM SBC W/ PPIDE 5/8/2012
|
||||
;==================================================================================================
|
||||
;
|
||||
; BUILD CONFIGURATION OPTIONS
|
||||
;
|
||||
CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS
|
||||
;
|
||||
PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8
|
||||
;
|
||||
DIOPLT .EQU 0 ; DEPRECATED
|
||||
;
|
||||
DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON
|
||||
ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED)
|
||||
;
|
||||
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)
|
||||
UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY)
|
||||
UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!)
|
||||
;
|
||||
VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!)
|
||||
VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!)
|
||||
;
|
||||
BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA
|
||||
;
|
||||
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)
|
||||
PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3
|
||||
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
|
||||
SDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE)
|
||||
SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB)
|
||||
SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY)
|
||||
SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY)
|
||||
PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
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)
|
||||
;
|
||||
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
|
||||
;
|
||||
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
|
||||
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
|
||||
86
trunk/Source/config_n8vem_ppisd.asm
Normal file
86
trunk/Source/config_n8vem_ppisd.asm
Normal file
@@ -0,0 +1,86 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; ROMWBW 2.X CONFIGURATION FOR N8VEM SBC 5/8/2012
|
||||
;==================================================================================================
|
||||
;
|
||||
; BUILD CONFIGURATION OPTIONS
|
||||
;
|
||||
CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS
|
||||
;
|
||||
PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8
|
||||
;
|
||||
DIOPLT .EQU 0 ; DEPRECATED
|
||||
;
|
||||
DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON
|
||||
ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED)
|
||||
;
|
||||
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)
|
||||
UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY)
|
||||
UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!)
|
||||
;
|
||||
VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!)
|
||||
VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!)
|
||||
;
|
||||
BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA
|
||||
;
|
||||
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 FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE)
|
||||
PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3
|
||||
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 TRUE ; TRUE FOR SD SUPPORT
|
||||
SDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE)
|
||||
SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB)
|
||||
SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY)
|
||||
SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY)
|
||||
PPISD .EQU TRUE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
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)
|
||||
;
|
||||
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
|
||||
;
|
||||
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
|
||||
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
|
||||
86
trunk/Source/config_n8vem_propio.asm
Normal file
86
trunk/Source/config_n8vem_propio.asm
Normal file
@@ -0,0 +1,86 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; ROMWBW 2.X CONFIGURATION FOR N8VEM SBC 5/8/2012
|
||||
;==================================================================================================
|
||||
;
|
||||
; BUILD CONFIGURATION OPTIONS
|
||||
;
|
||||
CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS
|
||||
;
|
||||
PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8
|
||||
;
|
||||
DIOPLT .EQU 0 ; DEPRECATED
|
||||
;
|
||||
DEFCON .EQU CIODEV_PRPCON ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON
|
||||
ALTCON .EQU CIODEV_UART ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED)
|
||||
;
|
||||
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)
|
||||
UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY)
|
||||
UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!)
|
||||
;
|
||||
VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!)
|
||||
VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!)
|
||||
;
|
||||
BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA
|
||||
;
|
||||
DEFIOBYTE .EQU $01 ; DEFAULT INITIAL VALUE FOR CP/M IOBYTE, $00=TTY, $01=CRT (MUST HAVE CRT HARDWARE)
|
||||
ALTIOBYTE .EQU $00 ; 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 FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE)
|
||||
PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3
|
||||
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
|
||||
SDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE)
|
||||
SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB)
|
||||
SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY)
|
||||
SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY)
|
||||
PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
PRPENABLE .EQU TRUE ; 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)
|
||||
;
|
||||
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
|
||||
;
|
||||
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
|
||||
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
|
||||
86
trunk/Source/config_n8vem_vdu.asm
Normal file
86
trunk/Source/config_n8vem_vdu.asm
Normal file
@@ -0,0 +1,86 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; ROMWBW 2.X CONFIGURATION FOR N8VEM SBC W/ VDU 5/8/2012
|
||||
;==================================================================================================
|
||||
;
|
||||
; BUILD CONFIGURATION OPTIONS
|
||||
;
|
||||
CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS
|
||||
;
|
||||
PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8
|
||||
;
|
||||
DIOPLT .EQU 0 ; DEPRECATED
|
||||
;
|
||||
DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON
|
||||
ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED)
|
||||
;
|
||||
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)
|
||||
UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY)
|
||||
UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!)
|
||||
;
|
||||
VDUENABLE .EQU TRUE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!)
|
||||
VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!)
|
||||
;
|
||||
BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA
|
||||
;
|
||||
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 FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE)
|
||||
PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3
|
||||
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
|
||||
SDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE)
|
||||
SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB)
|
||||
SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY)
|
||||
SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY)
|
||||
PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
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)
|
||||
;
|
||||
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
|
||||
;
|
||||
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
|
||||
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
|
||||
86
trunk/Source/config_simh.asm
Normal file
86
trunk/Source/config_simh.asm
Normal file
@@ -0,0 +1,86 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; ROMWBW 2.X CONFIGURATION FOR SIMH EMULATOR 5/8/2012
|
||||
;==================================================================================================
|
||||
;
|
||||
; BUILD CONFIGURATION OPTIONS
|
||||
;
|
||||
CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS
|
||||
;
|
||||
PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8
|
||||
;
|
||||
DIOPLT .EQU 0 ; DEPRECATED
|
||||
;
|
||||
DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON
|
||||
ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED)
|
||||
;
|
||||
RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!!
|
||||
CLRRAMDISK .EQU CLR_ALWAYS ; 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)
|
||||
UARTFIFO .EQU FALSE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY)
|
||||
UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!)
|
||||
;
|
||||
VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!)
|
||||
VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!)
|
||||
;
|
||||
BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA
|
||||
;
|
||||
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 FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE)
|
||||
PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3
|
||||
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
|
||||
SDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE)
|
||||
SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB)
|
||||
SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY)
|
||||
SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY)
|
||||
PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
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 TRUE ; TRUE FOR HDSK SUPPORT
|
||||
HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE)
|
||||
HDSKCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB)
|
||||
;
|
||||
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
|
||||
;
|
||||
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
|
||||
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
|
||||
86
trunk/Source/config_zeta.asm
Normal file
86
trunk/Source/config_zeta.asm
Normal file
@@ -0,0 +1,86 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; ROMWBW 2.X CONFIGURATION FOR ZETA 5/8/2012
|
||||
;==================================================================================================
|
||||
;
|
||||
; BUILD CONFIGURATION OPTIONS
|
||||
;
|
||||
CPUFREQ .EQU 20 ; IN MHZ, USED TO COMPUTE DELAY FACTORS
|
||||
;
|
||||
PLATFORM .EQU PLT_ZETA ; PLT_N8VEM, PLT_ZETA, PLT_N8
|
||||
;
|
||||
DIOPLT .EQU 0 ; DEPRECATED
|
||||
;
|
||||
DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON
|
||||
ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED)
|
||||
;
|
||||
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)
|
||||
UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY)
|
||||
UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!)
|
||||
;
|
||||
VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!)
|
||||
VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!)
|
||||
;
|
||||
BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA
|
||||
;
|
||||
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 TRUE ; TRUE FOR FLOPPY SUPPORT
|
||||
FDMODE .EQU FDMODE_ZETA ; 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)
|
||||
PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3
|
||||
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
|
||||
SDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE)
|
||||
SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB)
|
||||
SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY)
|
||||
SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY)
|
||||
PPISD .EQU TRUE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
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)
|
||||
;
|
||||
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
|
||||
;
|
||||
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
|
||||
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
|
||||
86
trunk/Source/config_zeta_ppp.asm
Normal file
86
trunk/Source/config_zeta_ppp.asm
Normal file
@@ -0,0 +1,86 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; ROMWBW 2.X CONFIGURATION FOR ZETA W/ PPP 5/8/2012
|
||||
;==================================================================================================
|
||||
;
|
||||
; BUILD CONFIGURATION OPTIONS
|
||||
;
|
||||
CPUFREQ .EQU 20 ; IN MHZ, USED TO COMPUTE DELAY FACTORS
|
||||
;
|
||||
PLATFORM .EQU PLT_ZETA ; PLT_N8VEM, PLT_ZETA, PLT_N8
|
||||
;
|
||||
DIOPLT .EQU 0 ; DEPRECATED
|
||||
;
|
||||
DEFCON .EQU CIODEV_PPPCON ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON
|
||||
ALTCON .EQU CIODEV_UART ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED)
|
||||
;
|
||||
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)
|
||||
UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY)
|
||||
UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!)
|
||||
;
|
||||
VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!)
|
||||
VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!)
|
||||
;
|
||||
BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA
|
||||
;
|
||||
DEFIOBYTE .EQU $01 ; DEFAULT INITIAL VALUE FOR CP/M IOBYTE, $00=TTY, $01=CRT (MUST HAVE CRT HARDWARE)
|
||||
ALTIOBYTE .EQU $00 ; 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 TRUE ; TRUE FOR FLOPPY SUPPORT
|
||||
FDMODE .EQU FDMODE_ZETA ; 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 FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE)
|
||||
PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3
|
||||
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
|
||||
SDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE)
|
||||
SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB)
|
||||
SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY)
|
||||
SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY)
|
||||
PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
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 TRUE ; 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)
|
||||
;
|
||||
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
|
||||
;
|
||||
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
|
||||
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
|
||||
1590
trunk/Source/dbgmon.asm
Normal file
1590
trunk/Source/dbgmon.asm
Normal file
File diff suppressed because it is too large
Load Diff
341
trunk/Source/diskdefs
Normal file
341
trunk/Source/diskdefs
Normal file
@@ -0,0 +1,341 @@
|
||||
diskdef ibm-3740
|
||||
seclen 128
|
||||
tracks 77
|
||||
sectrk 26
|
||||
blocksize 1024
|
||||
maxdir 64
|
||||
skew 6
|
||||
boottrk 2
|
||||
os p2dos
|
||||
end
|
||||
|
||||
diskdef 4mb-hd
|
||||
seclen 128
|
||||
tracks 1024
|
||||
sectrk 32
|
||||
blocksize 2048
|
||||
maxdir 256
|
||||
skew 1
|
||||
boottrk 0
|
||||
os p2dos
|
||||
end
|
||||
|
||||
diskdef pcw
|
||||
seclen 512
|
||||
tracks 40
|
||||
sectrk 9
|
||||
blocksize 1024
|
||||
maxdir 64
|
||||
skew 1
|
||||
boottrk 1
|
||||
os 3
|
||||
end
|
||||
|
||||
diskdef pc1.2m
|
||||
seclen 512
|
||||
tracks 80
|
||||
# this format uses 15 sectors per track, but 30 per cylinder
|
||||
sectrk 30
|
||||
blocksize 4096
|
||||
maxdir 256
|
||||
skew 1
|
||||
boottrk 0
|
||||
os 3
|
||||
end
|
||||
|
||||
# CP/M 86 on 1.44MB floppies
|
||||
diskdef cpm86-144feat
|
||||
seclen 512
|
||||
tracks 160
|
||||
sectrk 18
|
||||
blocksize 4096
|
||||
maxdir 256
|
||||
skew 1
|
||||
boottrk 2
|
||||
os 3
|
||||
end
|
||||
|
||||
diskdef cf2dd
|
||||
seclen 512
|
||||
tracks 160
|
||||
sectrk 9
|
||||
blocksize 2048
|
||||
maxdir 256
|
||||
skew 1
|
||||
boottrk 1
|
||||
os 3
|
||||
end
|
||||
|
||||
#amstrad: values are read from super block (special name hardcoded)
|
||||
|
||||
# Royal alphatronic
|
||||
# setfdprm /dev/fd1 dd ssize=256 cyl=40 sect=16 head=2
|
||||
diskdef alpha
|
||||
seclen 256
|
||||
tracks 40
|
||||
sectrk 32
|
||||
blocksize 2048
|
||||
maxdir 128
|
||||
skew 1
|
||||
boottrk 2
|
||||
os 2.2
|
||||
end
|
||||
|
||||
# Apple II CP/M skew o Apple II DOS 3.3 skew
|
||||
diskdef apple-do
|
||||
seclen 256
|
||||
tracks 35
|
||||
sectrk 16
|
||||
blocksize 1024
|
||||
maxdir 64
|
||||
skew 0
|
||||
boottrk 3
|
||||
os 2.2
|
||||
end
|
||||
|
||||
# Apple II CP/M skew o Apple II PRODOS skew
|
||||
diskdef apple-po
|
||||
seclen 256
|
||||
tracks 35
|
||||
sectrk 16
|
||||
blocksize 1024
|
||||
maxdir 64
|
||||
skew 0
|
||||
boottrk 3
|
||||
os 2.2
|
||||
end
|
||||
|
||||
# MYZ80 hard drive (only works with libdsk, because it has a 256-byte header)
|
||||
diskdef myz80
|
||||
seclen 1024
|
||||
tracks 64
|
||||
sectrk 128
|
||||
blocksize 4096
|
||||
maxdir 1024
|
||||
skew 1
|
||||
boottrk 0
|
||||
os 3
|
||||
end
|
||||
|
||||
# Despite being Amstrad formats, CPC System and CPC Data don't have an Amstrad
|
||||
# superblock. You'll need to use libdsk to access them because the Linux
|
||||
# and Windows kernel drivers won't touch them.
|
||||
diskdef cpcsys
|
||||
seclen 512
|
||||
tracks 40
|
||||
sectrk 9
|
||||
blocksize 1024
|
||||
maxdir 64
|
||||
skew 1
|
||||
boottrk 2
|
||||
os 3
|
||||
end
|
||||
diskdef cpcdata
|
||||
seclen 512
|
||||
tracks 40
|
||||
sectrk 9
|
||||
blocksize 1024
|
||||
maxdir 64
|
||||
skew 1
|
||||
boottrk 0
|
||||
os 3
|
||||
end
|
||||
|
||||
# after being read in with no sector skew.
|
||||
diskdef nigdos
|
||||
seclen 512
|
||||
# NigDos double sided disk format, 42 tracks * 2 sides
|
||||
tracks 84
|
||||
sectrk 10
|
||||
blocksize 2048
|
||||
maxdir 128
|
||||
skew 1
|
||||
boottrk 0
|
||||
# this format wastes half of the directory entry
|
||||
logicalextents 1
|
||||
os 3
|
||||
end
|
||||
|
||||
diskdef epsqx10
|
||||
seclen 512
|
||||
tracks 40
|
||||
sectrk 20
|
||||
blocksize 2048
|
||||
maxdir 128
|
||||
skew 0
|
||||
boottrk 2
|
||||
os 2.2
|
||||
end
|
||||
|
||||
diskdef ibm-8ss
|
||||
seclen 512
|
||||
tracks 40
|
||||
sectrk 8
|
||||
blocksize 1024
|
||||
maxdir 64
|
||||
skew 0
|
||||
boottrk 1
|
||||
os 2.2
|
||||
end
|
||||
|
||||
diskdef ibm-8ds
|
||||
seclen 512
|
||||
tracks 40
|
||||
sectrk 8
|
||||
blocksize 1024
|
||||
maxdir 64
|
||||
skew 0
|
||||
boottrk 1
|
||||
os 2.2
|
||||
end
|
||||
|
||||
diskdef electroglas
|
||||
seclen 512
|
||||
tracks 80
|
||||
sectrk 10
|
||||
blocksize 2048
|
||||
maxdir 256
|
||||
skew 0
|
||||
boottrk 1
|
||||
os 3
|
||||
end
|
||||
|
||||
# IBM CP/M-86
|
||||
# setfdprm /dev/fd1 sect=8 dtr=1 hd ssize=512 tpi=48 head=1
|
||||
diskdef ibmpc-514ss
|
||||
seclen 512
|
||||
tracks 40
|
||||
sectrk 8
|
||||
blocksize 1024
|
||||
maxdir 64
|
||||
skew 1
|
||||
boottrk 1
|
||||
os 2.2
|
||||
end
|
||||
|
||||
# IBM CP/M-86
|
||||
# setfdprm /dev/fd1 sect=8 dtr=1 hd ssize=512 tpi=48
|
||||
diskdef ibmpc-514ds
|
||||
seclen 512
|
||||
tracks 80
|
||||
sectrk 8
|
||||
blocksize 2048
|
||||
maxdir 64
|
||||
skew 0
|
||||
boottrk 2
|
||||
os 2.2
|
||||
end
|
||||
|
||||
diskdef p112
|
||||
seclen 512
|
||||
tracks 160
|
||||
sectrk 18
|
||||
blocksize 2048
|
||||
maxdir 256
|
||||
skew 1
|
||||
boottrk 2
|
||||
os 3
|
||||
end
|
||||
|
||||
diskdef p112-old
|
||||
seclen 512
|
||||
tracks 160
|
||||
sectrk 18
|
||||
blocksize 2048
|
||||
maxdir 128
|
||||
skew 1
|
||||
boottrk 1
|
||||
os 3
|
||||
end
|
||||
|
||||
diskdef kpii
|
||||
seclen 512
|
||||
tracks 40
|
||||
sectrk 10
|
||||
blocksize 1024
|
||||
maxdir 32
|
||||
skew 0
|
||||
boottrk 1
|
||||
os 2.2
|
||||
end
|
||||
|
||||
# setfdprm /dev/fd0 dd sect=10
|
||||
diskdef interak
|
||||
seclen 512
|
||||
tracks 80
|
||||
sectrk 20
|
||||
blocksize 4096
|
||||
maxdir 256
|
||||
skew 1
|
||||
boottrk 2
|
||||
os 2.2
|
||||
end
|
||||
|
||||
# For 512KB ROM, less 32K for system image
|
||||
diskdef rom512KB
|
||||
seclen 128
|
||||
tracks 14
|
||||
sectrk 256
|
||||
blocksize 2048
|
||||
maxdir 256
|
||||
skew 1
|
||||
boottrk 0
|
||||
os 2.2
|
||||
end
|
||||
|
||||
# For 1024KB ROM, less 32K for system image
|
||||
diskdef rom1024KB
|
||||
seclen 128
|
||||
tracks 30
|
||||
sectrk 256
|
||||
blocksize 2048
|
||||
maxdir 256
|
||||
skew 1
|
||||
boottrk 0
|
||||
os 2.2
|
||||
end
|
||||
|
||||
# For N8VEM mass storage (4 raw partitions)
|
||||
diskdef hd0
|
||||
seclen 512
|
||||
tracks 65
|
||||
sectrk 256
|
||||
blocksize 4096
|
||||
maxdir 512
|
||||
skew 1
|
||||
boottrk 1
|
||||
os 2.2
|
||||
end
|
||||
|
||||
diskdef hd1
|
||||
seclen 512
|
||||
tracks 130
|
||||
sectrk 256
|
||||
blocksize 4096
|
||||
maxdir 512
|
||||
skew 1
|
||||
boottrk 66
|
||||
os 2.2
|
||||
end
|
||||
|
||||
diskdef hd2
|
||||
seclen 512
|
||||
tracks 195
|
||||
sectrk 256
|
||||
blocksize 4096
|
||||
maxdir 512
|
||||
skew 1
|
||||
boottrk 131
|
||||
os 2.2
|
||||
end
|
||||
|
||||
diskdef hd3
|
||||
seclen 512
|
||||
tracks 260
|
||||
sectrk 256
|
||||
blocksize 4096
|
||||
maxdir 512
|
||||
skew 1
|
||||
boottrk 196
|
||||
os 2.2
|
||||
end
|
||||
1635
trunk/Source/fd.asm
Normal file
1635
trunk/Source/fd.asm
Normal file
File diff suppressed because it is too large
Load Diff
173
trunk/Source/fd_data.asm
Normal file
173
trunk/Source/fd_data.asm
Normal file
@@ -0,0 +1,173 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; FLOPPY DISK DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
#IF (FDMEDIA == FDM720)
|
||||
#DEFINE FDDPB DPB_FD720 ; DPB_FD720 OR DPB_FD144
|
||||
#DEFINE FDCKS CKS_FD720
|
||||
#DEFINE FDALS ALS_FD720
|
||||
#ENDIF
|
||||
#IF (FDMEDIA == FDM144)
|
||||
#DEFINE FDDPB DPB_FD144 ; DPB_FD720 OR DPB_FD144
|
||||
#DEFINE FDCKS CKS_FD144
|
||||
#DEFINE FDALS ALS_FD144
|
||||
#ENDIF
|
||||
#IF (FDMEDIA == FDM360)
|
||||
#DEFINE FDDPB DPB_FD360 ; DPB_FD720 OR DPB_FD144
|
||||
#DEFINE FDCKS CKS_FD360
|
||||
#DEFINE FDALS ALS_FD360
|
||||
#ENDIF
|
||||
#IF (FDMEDIA == FDM120)
|
||||
#DEFINE FDDPB DPB_FD120 ; DPB_FD720 OR DPB_FD144
|
||||
#DEFINE FDCKS CKS_FD120
|
||||
#DEFINE FDALS ALS_FD120
|
||||
#ENDIF
|
||||
#IF (FDMEDIA == FDM111)
|
||||
#DEFINE FDDPB DPB_FD111 ; DPB_FD720 OR DPB_FD144
|
||||
#DEFINE FDCKS CKS_FD111
|
||||
#DEFINE FDALS ALS_FD111
|
||||
#ENDIF
|
||||
;
|
||||
;
|
||||
;
|
||||
.DB DIODEV_FD + 0
|
||||
FDDPH0: .DW 0000, 0000
|
||||
.DW 0000, 0000
|
||||
.DW DIRBF, FDDPB
|
||||
.DW FDCSV0, FDALV0
|
||||
.DB DIODEV_FD + 1
|
||||
FDDPH1: .DW 0000, 0000
|
||||
.DW 0000, 0000
|
||||
.DW DIRBF, FDDPB
|
||||
.DW FDCSV1, FDALV1
|
||||
; .EXPORT FDDPH0, FDDPH1
|
||||
;;
|
||||
;; DISK PARAMETER BLOCKS USED FOR FLOPPY DRIVER
|
||||
;;
|
||||
;; IBM 720KB 3.5" FLOPPY DRIVE, 80 TRKS, 36 SECS/TRK, 512 BYTES/SEC
|
||||
;; BLOCKSIZE (BLS) = 2K, DIRECTORY ENTRIES = 128
|
||||
;;
|
||||
;#IF ((FDMEDIA == FDM720) | (FDMEDIAALT == FDM720))
|
||||
;DPB_FD720:
|
||||
; .DW 36 ; SPT: SECTORS PER TRACK
|
||||
; .DB 4 ; BSH: BLOCK SHIFT FACTOR
|
||||
; .DB 15 ; BLM: BLOCK MASK
|
||||
; .DB 0 ; EXM: EXTENT MASK
|
||||
; .DW 350 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((720K - 18K OFF) / 2K BLS) - 1 = 350
|
||||
; .DW 127 ; DRM: DIR ENTRIES - 1 = 128 - 1 = 127
|
||||
; .DB 11000000B ; AL0: DIR BLK BIT MAP, FIRST BYTE
|
||||
; .DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE
|
||||
; .DW 32 ; CKS: DIRECTORY CHECK VECTOR SIZE = 128 / 4
|
||||
; .DW 4 ; OFF: RESERVED TRACKS = 4 TRKS * (512 B/SEC * 36 SEC/TRK) = 18K
|
||||
;#ELSE
|
||||
;DPB_FD720 .EQU 0
|
||||
;#ENDIF
|
||||
CKS_FD720 .EQU 32 ; CKS: DIR ENT / 4 = 128 / 4 = 32
|
||||
ALS_FD720 .EQU 44 ; ALS: BLKS / 8 = 351 / 8 = 44 (ROUNDED UP)
|
||||
; .EXPORT DPB_FD720
|
||||
;#ENDIF
|
||||
;;
|
||||
;; IBM 1.44MB 3.5" FLOPPY DRIVE, 80 TRKS, 72 SECS/TRK, 512 BYTES/SEC
|
||||
;; BLOCKSIZE (BLS) = 2K, DIRECTORY ENTRIES = 256
|
||||
;;
|
||||
;#IF ((FDMEDIA == FDM144) | (FDMEDIAALT == FDM144))
|
||||
;DPB_FD144:
|
||||
; .DW 72 ; SPT: SECTORS PER TRACK
|
||||
; .DB 4 ; BSH: BLOCK SHIFT FACTOR
|
||||
; .DB 15 ; BLM: BLOCK MASK
|
||||
; .DB 0 ; EXM: EXTENT MASK
|
||||
; .DW 710 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((1,440K - 18K OFF) / 2K BLS) - 1 = 710
|
||||
; .DW 255 ; DRM: DIR ENTRIES - 1 = 256 - 1 = 255
|
||||
; .DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE
|
||||
; .DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE
|
||||
; .DW 64 ; CKS: DIRECTORY CHECK VECTOR SIZE = 256 / 4
|
||||
; .DW 2 ; OFF: RESERVED TRACKS = 2 TRKS * (512 B/SEC * 72 SEC/TRK) = 18K
|
||||
;#ELSE
|
||||
;DPB_FD144 .EQU 0
|
||||
;#ENDIF
|
||||
CKS_FD144 .EQU 64 ; CKS: DIR ENT / 4 = 256 / 4 = 64
|
||||
ALS_FD144 .EQU 89 ; ALS: BLKS / 8 = 711 / 8 = 89 (ROUNDED UP)
|
||||
; .EXPORT DPB_FD144
|
||||
;#ENDIF
|
||||
;;
|
||||
;; IBM 360KB 5.25" FLOPPY DRIVE, 40 TRKS, 9 SECS/TRK, 512 BYTES/SEC
|
||||
;; BLOCKSIZE (BLS) = 2K, DIRECTORY ENTRIES = 128
|
||||
;;
|
||||
;#IF ((FDMEDIA == FDM360) | (FDMEDIAALT == FDM360))
|
||||
;DPB_FD360:
|
||||
; .DW 36 ; SPT: SECTORS PER TRACK
|
||||
; .DB 4 ; BSH: BLOCK SHIFT FACTOR
|
||||
; .DB 15 ; BLM: BLOCK MASK
|
||||
; .DB 0 ; EXM: EXTENT MASK
|
||||
; .DW 170 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((360K - 18K OFF) / 2K BLS) - 1 = 170
|
||||
; .DW 127 ; DRM: DIR ENTRIES - 1 = 128 - 1 = 127
|
||||
; .DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE
|
||||
; .DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE
|
||||
; .DW 32 ; CKS: DIRECTORY CHECK VECTOR SIZE = 128 / 4
|
||||
; .DW 4 ; OFF: RESERVED TRACKS = 4 TRKS * (512 B/SEC * 36 SEC/TRK) = 18K
|
||||
;#ELSE
|
||||
;DPB_FD360 .EQU 0
|
||||
;#ENDIF
|
||||
CKS_FD360 .EQU 32 ; CKS: DIR ENT / 4 = 128 / 4 = 32
|
||||
ALS_FD360 .EQU 89 ; ALS: BLKS / 8 = 171 / 8 = 22 (ROUNDED UP)
|
||||
; .EXPORT DPB_FD360
|
||||
;#ENDIF
|
||||
;;
|
||||
;; IBM 1.20MB 5.25" FLOPPY DRIVE, 80 TRKS, 60 SECS/TRK, 512 BYTES/SEC
|
||||
;; BLOCKSIZE (BLS) = 2K, DIRECTORY ENTRIES = 256
|
||||
;;
|
||||
;#IF ((FDMEDIA == FDM120) | (FDMEDIAALT == FDM120))
|
||||
;DPB_FD120:
|
||||
; .DW 60 ; SPT: SECTORS PER TRACK
|
||||
; .DB 4 ; BSH: BLOCK SHIFT FACTOR
|
||||
; .DB 15 ; BLM: BLOCK MASK
|
||||
; .DB 0 ; EXM: EXTENT MASK
|
||||
; .DW 591 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((1,200K - 15K OFF) / 2K BLS) - 1 = 591
|
||||
; .DW 255 ; DRM: DIR ENTRIES - 1 = 256 - 1 = 255
|
||||
; .DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE
|
||||
; .DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE
|
||||
; .DW 64 ; CKS: DIRECTORY CHECK VECTOR SIZE = 256 / 4
|
||||
; .DW 2 ; OFF: RESERVED TRACKS = 2 TRKS * (512 B/SEC * 60 SEC/TRK) = 15K
|
||||
;#ELSE
|
||||
;DPB_FD120 .EQU 0
|
||||
;#ENDIF
|
||||
CKS_FD120 .EQU 64 ; CKS: DIR ENT / 4 = 256 / 4 = 64
|
||||
ALS_FD120 .EQU 74 ; ALS: BLKS / 8 = 592 / 8 = 74 (ROUNDED UP)
|
||||
; .EXPORT DPB_FD120
|
||||
;#ENDIF
|
||||
;;
|
||||
;; IBM 1.11MB 8" FLOPPY DRIVE, 74 TRKS, 60 SECS/TRK, 512 BYTES/SEC
|
||||
;; BLOCKSIZE (BLS) = 2K, DIRECTORY ENTRIES = 256
|
||||
;;
|
||||
;#IF ((FDMEDIA == FDM111) | (FDMEDIAALT == FDM111))
|
||||
;DPB_FD111:
|
||||
; .DW 60 ; SPT: SECTORS PER TRACK
|
||||
; .DB 4 ; BSH: BLOCK SHIFT FACTOR
|
||||
; .DB 15 ; BLM: BLOCK MASK
|
||||
; .DB 0 ; EXM: EXTENT MASK
|
||||
; .DW 546 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((1,110K - 15K OFF) / 2K BLS) - 1 = 546
|
||||
; .DW 255 ; DRM: DIR ENTRIES - 1 = 256 - 1 = 255
|
||||
; .DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE
|
||||
; .DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE
|
||||
; .DW 64 ; CKS: DIRECTORY CHECK VECTOR SIZE = 256 / 4
|
||||
; .DW 2 ; OFF: RESERVED TRACKS = 2 TRKS * (512 B/SEC * 60 SEC/TRK) = 15K
|
||||
CKS_FD111 .EQU 64 ; CKS: DIR ENT / 4 = 256 / 4 = 64
|
||||
ALS_FD111 .EQU 69 ; ALS: BLKS / 8 = 592 / 8 = 74 (ROUNDED UP)
|
||||
; .EXPORT DPB_FD111
|
||||
;#ENDIF
|
||||
;
|
||||
;
|
||||
;
|
||||
#IF (FDMAUTO)
|
||||
; ASSUME WORST CASE SIZES
|
||||
FDCSV0: .FILL CKS_FD144
|
||||
FDALV0: .FILL ALS_FD144
|
||||
FDCSV1: .FILL CKS_FD144
|
||||
FDALV1: .FILL ALS_FD144
|
||||
#ELSE
|
||||
FDCSV0: .FILL FDCKS
|
||||
FDALV0: .FILL FDALS
|
||||
FDCSV1: .FILL FDCKS
|
||||
FDALV1: .FILL FDALS
|
||||
#ENDIF
|
||||
10
trunk/Source/hbfill.asm
Normal file
10
trunk/Source/hbfill.asm
Normal file
@@ -0,0 +1,10 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; FILLER FOR HBIOS PROXY, JUST A 256 BYTE FILLER
|
||||
;==================================================================================================
|
||||
;
|
||||
#INCLUDE "std.asm"
|
||||
;
|
||||
.FILL HB_SIZ,0FFH
|
||||
;
|
||||
.END
|
||||
278
trunk/Source/hdsk.asm
Normal file
278
trunk/Source/hdsk.asm
Normal file
@@ -0,0 +1,278 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; HDSK DISK DRIVER
|
||||
;==================================================================================================
|
||||
;
|
||||
; IO PORT ADDRESSES
|
||||
;
|
||||
HDSK_IO .EQU $FD
|
||||
;
|
||||
HDSK_CMDNONE .EQU 0
|
||||
HDSK_CMDRESET .EQU 1
|
||||
HDSK_CMDREAD .EQU 2
|
||||
HDSK_CMDWRITE .EQU 3
|
||||
HDSK_CMDPARAM .EQU 4
|
||||
;
|
||||
; STATUS
|
||||
;
|
||||
HDSKRC_OK .EQU 0
|
||||
;
|
||||
; UNIT CONFIGURATION
|
||||
;
|
||||
HDSK0_DEVICE .DB 11100000B ; LBA, MASTER DEVICE
|
||||
HDSK1_DEVICE .DB 11110000B ; LBA, SLAVE DEVICE
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_DISPATCH:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F
|
||||
JR Z,HDSK_RD
|
||||
DEC A
|
||||
JR Z,HDSK_WR
|
||||
DEC A
|
||||
JR Z,HDSK_ST
|
||||
DEC A
|
||||
JR Z,HDSK_MED
|
||||
CALL PANIC
|
||||
;
|
||||
HDSK_RD:
|
||||
JP HDSK_READ
|
||||
HDSK_WR:
|
||||
JP HDSK_WRITE
|
||||
HDSK_ST:
|
||||
JP HDSK_STATUS
|
||||
HDSK_MED:
|
||||
JP HDSK_MEDIA
|
||||
;
|
||||
; HDSK_MEDIA
|
||||
;
|
||||
HDSK_MEDIA:
|
||||
LD A,MID_HD
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_INIT:
|
||||
XOR A
|
||||
DEC A ; INITIAL STATUS IS NOT READY $FF
|
||||
LD (HDSK_STAT),A ; SAVE IT
|
||||
XOR A ; INIT SUCCEEDED
|
||||
RET ; RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_STATUS:
|
||||
LD A,(HDSK_STAT) ; LOAD STATUS
|
||||
OR A ; SET FLAGS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_READ:
|
||||
LD A,HDSK_CMDREAD
|
||||
JR HDSK_RW
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_WRITE:
|
||||
LD A,HDSK_CMDWRITE
|
||||
JR HDSK_RW
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_RW:
|
||||
LD (HDSK_CMD),A
|
||||
|
||||
; CLEAR RESULTS
|
||||
XOR A ; A = 0
|
||||
LD (HDSK_RC),A ; CLEAR RETURN CODE
|
||||
|
||||
; INIT IF NEEDED
|
||||
LD A,(HDSK_STAT) ; GET CURRENT STATUS
|
||||
OR A ; SET FLAGS
|
||||
CALL NZ,HDSK_RESET ; RESET IF NOT READY
|
||||
|
||||
; SET DEVICE
|
||||
LD A,(HSTDSK)
|
||||
AND 0FH
|
||||
LD (HDSK_DEVICE),A
|
||||
|
||||
; SET SECTOR (IGNORES MSB)
|
||||
LD A,(HSTSEC)
|
||||
LD (HDSK_SEC),A
|
||||
|
||||
; SET TRACK
|
||||
LD BC,(HSTTRK)
|
||||
LD (HDSK_TRK),BC
|
||||
|
||||
; SET TRANSFER ADDRESS
|
||||
LD BC,(DIOBUF)
|
||||
LD (HDSK_DMA),BC
|
||||
|
||||
; EXECUTE COMMAND
|
||||
LD B,7 ; SIZE OF PARAMETER BLOCK
|
||||
LD HL,HDSK_PARMBLK ; START ADDRESS OF PARAMETER BLOCK
|
||||
HDSK_RW1:
|
||||
LD A,(HL) ; GET BYTE OF PARAMETER BLOCK
|
||||
OUT (0FDH),A ; SEND IT TO PORT
|
||||
INC HL ; POINT TO NEXT BYTE
|
||||
DJNZ HDSK_RW1
|
||||
|
||||
IN A,(0FDH) ; GET RESULT CODE
|
||||
LD (HDSK_RC),A
|
||||
OR A
|
||||
JR Z,HDSK_OK
|
||||
JR HDSK_ERR
|
||||
|
||||
HDSK_ERR:
|
||||
XOR A
|
||||
DEC A ; A=$FF TO SIGNAL ERROR
|
||||
LD (HDSK_STAT),A ; SAVE IT
|
||||
#IF (HDSKTRACE >= 1)
|
||||
PUSH AF
|
||||
CALL HDSK_PRT
|
||||
POP AF
|
||||
#ENDIF
|
||||
RET
|
||||
|
||||
HDSK_OK:
|
||||
#IF (HDSKTRACE >= 2)
|
||||
CALL HDSK_PRT
|
||||
#ENDIF
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_RESET:
|
||||
LD B,32
|
||||
LD A,HDSK_CMDRESET
|
||||
HDSK_RESET1:
|
||||
OUT (0FDH),A
|
||||
DJNZ HDSK_RESET1
|
||||
|
||||
XOR A ; STATUS = OK
|
||||
LD (HDSK_STAT),A ; SAVE IT
|
||||
|
||||
#IF (HDSKTRACE >= 2)
|
||||
CALL NEWLINE
|
||||
LD DE,HDSKSTR_PREFIX
|
||||
CALL WRITESTR
|
||||
CALL PC_SPACE
|
||||
LD DE,HDSKSTR_RESET
|
||||
CALL WRITESTR
|
||||
#ENDIF
|
||||
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_PRT:
|
||||
CALL NEWLINE
|
||||
|
||||
LD DE,HDSKSTR_PREFIX
|
||||
CALL WRITESTR
|
||||
|
||||
CALL PC_SPACE
|
||||
LD DE,HDSKSTR_CMD
|
||||
CALL WRITESTR
|
||||
LD A,(HDSK_CMD)
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
CALL PC_SPACE
|
||||
CALL PC_LBKT
|
||||
LD A,(HDSK_CMD)
|
||||
LD DE,HDSKSTR_NONE
|
||||
CP HDSK_CMDNONE
|
||||
JP Z,HDSK_PRTCMD
|
||||
LD DE,HDSKSTR_RESET
|
||||
CP HDSK_CMDRESET
|
||||
JP Z,HDSK_PRTCMD
|
||||
LD DE,HDSKSTR_READ
|
||||
CP HDSK_CMDREAD
|
||||
JP Z,HDSK_PRTCMD
|
||||
LD DE,HDSKSTR_WRITE
|
||||
CP HDSK_CMDWRITE
|
||||
JP Z,HDSK_PRTCMD
|
||||
LD DE,HDSKSTR_PARAM
|
||||
CP HDSK_CMDPARAM
|
||||
JP Z,HDSK_PRTCMD
|
||||
LD DE,HDSKSTR_UNKCMD
|
||||
HDSK_PRTCMD:
|
||||
CALL WRITESTR
|
||||
CALL PC_RBKT
|
||||
|
||||
LD A,(HDSK_CMD)
|
||||
CP HDSK_CMDREAD
|
||||
JR Z,HDSK_PRTRW
|
||||
CP HDSK_CMDWRITE
|
||||
JR Z,HDSK_PRTRW
|
||||
RET
|
||||
|
||||
HDSK_PRTRW:
|
||||
CALL PC_SPACE
|
||||
LD A,(HDSK_DEVICE)
|
||||
CALL PRTHEXBYTE
|
||||
CALL PC_SPACE
|
||||
LD BC,(HDSK_TRK)
|
||||
CALL PRTHEXWORD
|
||||
CALL PC_SPACE
|
||||
LD A,(HDSK_SEC)
|
||||
CALL PRTHEXBYTE
|
||||
CALL PC_SPACE
|
||||
LD BC,(HDSK_DMA)
|
||||
CALL PRTHEXWORD
|
||||
|
||||
CALL PC_SPACE
|
||||
LD DE,HDSKSTR_ARROW
|
||||
CALL WRITESTR
|
||||
|
||||
CALL PC_SPACE
|
||||
LD DE,HDSKSTR_RC
|
||||
CALL WRITESTR
|
||||
LD A,(HDSK_RC)
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
CALL PC_SPACE
|
||||
CALL PC_LBKT
|
||||
LD A,(HDSK_RC)
|
||||
LD DE,HDSKSTR_RCOK
|
||||
CP HDSKRC_OK
|
||||
JP Z,HDSK_PRTRC
|
||||
LD DE,HDSKSTR_RCUNK
|
||||
|
||||
HDSK_PRTRC:
|
||||
CALL WRITESTR
|
||||
CALL PC_RBKT
|
||||
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSKSTR_PREFIX .TEXT "HDSK:$"
|
||||
HDSKSTR_CMD .TEXT "CMD=$"
|
||||
HDSKSTR_RC .TEXT "RC=$"
|
||||
HDSKSTR_ARROW .TEXT "-->$"
|
||||
HDSKSTR_NONE .TEXT "NONE$"
|
||||
HDSKSTR_RESET .TEXT "RESET$"
|
||||
HDSKSTR_READ .TEXT "READ$"
|
||||
HDSKSTR_WRITE .TEXT "WRITE$"
|
||||
HDSKSTR_PARAM .TEXT "PARAM$"
|
||||
HDSKSTR_UNKCMD .TEXT "UNKCMD$"
|
||||
HDSKSTR_RCOK .TEXT "OK$"
|
||||
HDSKSTR_RCUNK .TEXT "UNKNOWN ERROR$"
|
||||
;
|
||||
;==================================================================================================
|
||||
; HDSK DISK DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
HDSK_STAT .DB 0
|
||||
HDSK_RC .DB 0
|
||||
;
|
||||
HDSK_PARMBLK:
|
||||
HDSK_CMD .DB 0 ; HDSK_READ OR HDSK_WRITE
|
||||
HDSK_DEVICE .DB 0 ; 0 .. 7, DEFINES HARD DISK TO BE USED
|
||||
HDSK_SEC .DB 0 ; 0 .. 31, DEFINES SECTOR
|
||||
HDSK_TRK .DW 0 ; 0 .. 2047, DEFINES TRACK
|
||||
HDSK_DMA .DW 0 ; DEFINES WHERE RESULT IS PLACED IN MEMORY
|
||||
61
trunk/Source/hdsk_data.asm
Normal file
61
trunk/Source/hdsk_data.asm
Normal file
@@ -0,0 +1,61 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; HDSK DISK DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
HDSK_SLICETRKS .EQU 65 ; TRACKS PER SLICE
|
||||
HDSK_TRKSIZE .EQU 128 ; SIZE OF TRACK (IN KB)
|
||||
HDSK_SLICESIZE .EQU ((HDSK_SLICETRKS * HDSK_TRKSIZE) + 1023) / 1024 ; SIZE OF EACH SLICE (IN MB)
|
||||
HDSK_NUMSLICES .EQU HDSKCAPACITY / HDSK_SLICESIZE ; TOTAL SLICES IN DEVICE
|
||||
HDSK0_SLICEDEF .EQU 0 ; DEFAULT SLICE FOR UNIT 0
|
||||
HDSK1_SLICEDEF .EQU 1 ; DEFAULT SLICE FOR UNIT 1
|
||||
HDSK2_SLICEDEF .EQU 2 ; DEFAULT SLICE FOR UNIT 0
|
||||
HDSK3_SLICEDEF .EQU 3 ; DEFAULT SLICE FOR UNIT 1
|
||||
;
|
||||
.DB DIODEV_HDSK + 0
|
||||
HDSKDPH0 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW HDSKCSV0,HDSKALV0
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
HDSK0_SLICE .DW HDSK0_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW HDSK_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
.DB DIODEV_HDSK + 0
|
||||
HDSKDPH1 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW HDSKCSV1,HDSKALV1
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
HDSK1_SLICE .DW HDSK1_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW HDSK_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
.DB DIODEV_HDSK + 0
|
||||
HDSKDPH2 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW HDSKCSV2,HDSKALV2
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
HDSK2_SLICE .DW HDSK2_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW HDSK_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
.DB DIODEV_HDSK + 0
|
||||
HDSKDPH3 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW HDSKCSV3,HDSKALV3
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
HDSK3_SLICE .DW HDSK3_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW HDSK_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
HDSKCKS .EQU 0 ; CKS: 0 FOR NON-REMOVABLE MEDIA
|
||||
HDSKALS .EQU 256 ; ALS: BLKS / 8 = 2048 / 8 = 256 (ROUNDED UP)
|
||||
;
|
||||
HDSKCSV0: .FILL HDSKCKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
HDSKALV0: .FILL HDSKALS ; MAX OF 2048 DATA BLOCKS
|
||||
HDSKCSV1: .FILL HDSKCKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
HDSKALV1: .FILL HDSKALS ; MAX OF 2048 DATA BLOCKS
|
||||
HDSKCSV2: .FILL HDSKCKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
HDSKALV2: .FILL HDSKALS ; MAX OF 2048 DATA BLOCKS
|
||||
HDSKCSV3: .FILL HDSKCKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
HDSKALV3: .FILL HDSKALS ; MAX OF 2048 DATA BLOCKS
|
||||
509
trunk/Source/ide.asm
Normal file
509
trunk/Source/ide.asm
Normal file
@@ -0,0 +1,509 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; IDE DISK DRIVER
|
||||
;==================================================================================================
|
||||
;
|
||||
; IO PORT ADDRESSES
|
||||
;
|
||||
#IF (IDEMODE == IDEMODE_DIO)
|
||||
#IF (IDE8BIT)
|
||||
IDEDATA: .EQU 20H ; DATA PORT (8 BIT)
|
||||
#ELSE
|
||||
IDEDATALO: .EQU 20H ; DATA PORT (16 BIT LO BYTE)
|
||||
IDEDATAHI: .EQU 28H ; DATA PORT (16 BIT HI BYTE)
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
#IF (IDEMODE == IDEMODE_DIDE)
|
||||
#IF (IDE8BIT)
|
||||
IDEDATA: .EQU 20H ; DATA PORT (8 BIT OR 16 BIT PIO LO/HI BYTES)
|
||||
#ELSE
|
||||
IDEDATA: .EQU 28H ; DATA PORT (16 BIT PIO LO/HI BYTES)
|
||||
IDEDMA: .EQU 29H ; DATA PORT (16 BIT DMA LO/HI BYTES)
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
IDEERR: .EQU 21H ; READ: ERROR REGISTER; WRITE: PRECOMP
|
||||
IDESECTC: .EQU 22H ; SECTOR COUNT
|
||||
IDESECTN: .EQU 23H ; SECTOR NUMBER
|
||||
IDECYLLO: .EQU 24H ; CYLINDER LOW
|
||||
IDECYLHI: .EQU 25H ; CYLINDER HIGH
|
||||
IDEDEVICE: .EQU 26H ; DRIVE/HEAD
|
||||
IDESTTS: .EQU 27H ; READ: STATUS; WRITE: COMMAND
|
||||
IDECTRL: .EQU 2EH ; READ: ALTERNATIVE STATUS; WRITE; DEVICE CONTROL
|
||||
IDEADDR: .EQU 2FH ; DRIVE ADDRESS (READ ONLY)
|
||||
;
|
||||
;
|
||||
;
|
||||
IDECMD_READ .EQU 020H
|
||||
IDECMD_WRITE .EQU 030H
|
||||
IDECMD_SETFEAT .EQU 0EFH
|
||||
;
|
||||
IDERC_OK .EQU 0
|
||||
IDERC_CMDERR .EQU 1
|
||||
IDERC_RDYTO .EQU 2
|
||||
IDERC_BUFTO .EQU 3
|
||||
;
|
||||
; UNIT CONFIGURATION
|
||||
;
|
||||
IDE0_DEVICE .DB 11100000B ; LBA, MASTER DEVICE
|
||||
IDE1_DEVICE .DB 11110000B ; LBA, SLAVE DEVICE
|
||||
;
|
||||
;
|
||||
;
|
||||
IDE_DISPATCH:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F
|
||||
JR Z,IDE_RD
|
||||
DEC A
|
||||
JR Z,IDE_WR
|
||||
DEC A
|
||||
JR Z,IDE_ST
|
||||
DEC A
|
||||
JR Z,IDE_MED
|
||||
CALL PANIC
|
||||
;
|
||||
IDE_RD:
|
||||
JP IDE_READ
|
||||
IDE_WR:
|
||||
JP IDE_WRITE
|
||||
IDE_ST:
|
||||
JP IDE_STATUS
|
||||
IDE_MED:
|
||||
JP IDE_MEDIA
|
||||
;
|
||||
; IDE_MEDIA
|
||||
;
|
||||
IDE_MEDIA:
|
||||
LD A,MID_HD
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
IDE_INIT:
|
||||
CALL IDE_RESET
|
||||
XOR A
|
||||
DEC A ; INITIAL STATUS IS NOT READY $FF
|
||||
LD (IDE_STAT),A ; SAVE IT
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
IDE_STATUS:
|
||||
LD A,(IDE_STAT) ; LOAD STATUS
|
||||
OR A ; SET FLAGS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
IDE_READ:
|
||||
LD A,IDECMD_READ
|
||||
LD (IDE_CMD),A
|
||||
JP IDE_RW
|
||||
;
|
||||
;
|
||||
;
|
||||
IDE_WRITE:
|
||||
LD A,IDECMD_WRITE
|
||||
LD (IDE_CMD),A
|
||||
JP IDE_RW
|
||||
;
|
||||
;
|
||||
;
|
||||
IDE_RW:
|
||||
; CLEAR RESULTS
|
||||
XOR A ; A = 0
|
||||
LD (IDE_RC),A ; CLEAR RETURN CODE
|
||||
LD (IDE_STTS),A ; CLEAR SAVED STTS
|
||||
LD (IDE_ERRS),A ; CLEAR SAVED ERR
|
||||
|
||||
; INIT REQUIRED?
|
||||
LD A,(IDE_STAT) ; GET CURRENT STATUS
|
||||
OR A ; SET FLAGS
|
||||
JR Z,IDE_RW0 ; IF STATUS OK, BYPASS RESET
|
||||
|
||||
CALL IDE_RESET ; DO THE RESET
|
||||
|
||||
#IF (IDE8BIT)
|
||||
CALL IDE_WAITRDY
|
||||
|
||||
LD A,01H
|
||||
OUT (IDEERR),A
|
||||
LD A,IDECMD_SETFEAT
|
||||
OUT (IDESTTS),A
|
||||
CALL IDE_WAITRDY
|
||||
JP NC,IDE_ERR
|
||||
CALL IDE_CHKERR ; CHECK FOR ERRORS
|
||||
JP NC,IDE_ERR
|
||||
#IF (IDETRACE >= 2)
|
||||
CALL IDE_PRT
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
|
||||
IDE_RW0:
|
||||
CALL IDE_WAITRDY ; WAIT FOR DRIVE READY
|
||||
JP NC,IDE_ERR
|
||||
CALL IDE_SETUP ; SETUP CYL, TRK, HEAD
|
||||
LD A,(IDE_CMD)
|
||||
OUT (IDESTTS),A
|
||||
CALL IDE_WAITRDY ; WAIT FOR DRIVE READY
|
||||
JP NC,IDE_ERR
|
||||
CALL IDE_CHKERR ; CHECK FOR ERRORS
|
||||
JP NC,IDE_ERR
|
||||
CALL IDE_WAITBUF ; WAIT FOR BUFFER READY
|
||||
JP NC,IDE_ERR
|
||||
|
||||
LD A,(IDE_CMD) ; DISPATCH TO READ OR WRITE SPECIFIC LOGIC
|
||||
CP IDECMD_WRITE
|
||||
JP Z,IDE_RW1
|
||||
|
||||
CALL IDE_BUFRD ; READ BUFFER
|
||||
CALL IDE_WAITRDY ; WAIT FOR DRIVE READY
|
||||
JP NC,IDE_ERR
|
||||
CALL IDE_CHKERR ; CHECK FOR ERRORS
|
||||
JP NC,IDE_ERR
|
||||
JP IDE_OK
|
||||
|
||||
IDE_RW1:
|
||||
CALL IDE_BUFWR ; WRITE BUFFER
|
||||
CALL IDE_WAITRDY ; WAIT FOR DRIVE READY
|
||||
JP NC,IDE_ERR
|
||||
CALL IDE_CHKERR ; CHECK FOR ERRORS
|
||||
JP NC,IDE_ERR
|
||||
JP IDE_OK
|
||||
|
||||
IDE_ERR:
|
||||
XOR A
|
||||
DEC A ; A = $FF TO SIGNAL ERROR
|
||||
LD (IDE_STAT),A ; SAVE IT
|
||||
#IF (IDETRACE >= 1)
|
||||
PUSH AF
|
||||
CALL IDE_PRT
|
||||
POP AF
|
||||
#ENDIF
|
||||
RET
|
||||
|
||||
IDE_OK:
|
||||
#IF (IDETRACE >= 2)
|
||||
CALL IDE_PRT
|
||||
#ENDIF
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
IDE_RESET:
|
||||
LD A,000001110B ; NO INTERRUPTS, ASSERT RESET BOTH DRIVES
|
||||
OUT (IDECTRL),A
|
||||
LD DE,8 ; DELAY ABOUT 200ms
|
||||
CALL VDELAY
|
||||
LD A,000001010B ; NO INTERRUPTS, DEASSERT RESET
|
||||
OUT (IDECTRL),A
|
||||
XOR A
|
||||
LD (IDE_STAT),A ; STATUS OK
|
||||
RET ; SAVE IT
|
||||
;
|
||||
;
|
||||
;
|
||||
IDE_WAITRDY:
|
||||
LD DE,0 ; TIMEOUT IS 250us * 65536 = 15 SECONDS
|
||||
IDE_WBSY:
|
||||
PUSH DE
|
||||
LD DE,10 ; INNER LOOP DELAY IS 250us (25us * 10)
|
||||
CALL VDELAY
|
||||
POP DE
|
||||
DEC DE
|
||||
LD A,D
|
||||
OR E
|
||||
JP Z,IDE_TO
|
||||
IN A,(IDESTTS) ; READ STATUS
|
||||
LD (IDE_STTS),A ; SAVE IT
|
||||
AND 011000000b ; ISOLATE BUSY AND RDY BITS
|
||||
XOR 001000000b ; WE WANT BUSY(7) TO BE 0 AND RDY(6) TO BE 1
|
||||
JP NZ,IDE_WBSY
|
||||
SCF ; CARRY 1 = OK
|
||||
RET
|
||||
IDE_TO:
|
||||
LD A,IDERC_RDYTO
|
||||
LD (IDE_RC),A
|
||||
XOR A ; CARRY 0 = TIMEOUT
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
IDE_CHKERR:
|
||||
IN A,(IDESTTS) ; GET STATUS
|
||||
LD (IDE_STTS),A ; SAVE IT
|
||||
AND 000000001B ; ERROR BIT SET?
|
||||
SCF ; ASSUME NO ERR
|
||||
RET Z ; NO ERR, RETURN WITH CF SET
|
||||
|
||||
IN A,(IDEERR) ; READ ERROR FLAGS
|
||||
LD (IDE_ERRS),A ; SAVE IT
|
||||
|
||||
LD A,IDERC_CMDERR ; COMMAND ERROR
|
||||
LD (IDE_RC),A ; SAVE IT
|
||||
|
||||
OR A ; CLEAR CF TO SIGNAL ERROR
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
IDE_WAITBUF:
|
||||
LD DE,0
|
||||
IDE_WDRQ:
|
||||
CALL DELAY
|
||||
INC DE
|
||||
LD A,D
|
||||
OR E
|
||||
JP Z,IDE_TO2
|
||||
IN A,(IDESTTS) ; WAIT FOR DRIVE'S 512 BYTE READ BUFFER
|
||||
LD (IDE_STTS),A ; SAVE IT
|
||||
AND 000001000B ; TO FILL (OR READY TO FILL)
|
||||
JP Z,IDE_WDRQ
|
||||
SCF ; CARRY 1 = OK
|
||||
RET
|
||||
IDE_TO2:
|
||||
LD A,IDERC_BUFTO
|
||||
LD (IDE_RC),A
|
||||
XOR A ; CARRY 0 = TIMED OUT
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
IDE_BUFRD:
|
||||
LD HL,(DIOBUF)
|
||||
LD B,0
|
||||
|
||||
#IF (IDE8BIT | (IDEMODE == IDEMODE_DIDE))
|
||||
LD C,IDEDATA
|
||||
INIR
|
||||
INIR
|
||||
#ELSE
|
||||
LD C,IDEDATAHI
|
||||
IDE_BUFRD1:
|
||||
IN A,(IDEDATALO) ; READ THE LO BYTE
|
||||
LD (HL),A ; SAVE IN BUFFER
|
||||
INC HL ; INC BUFFER POINTER
|
||||
INI ; READ AND SAVE HI BYTE, INC HL, DEC B
|
||||
JP NZ,IDE_BUFRD1 ; LOOP AS NEEDED
|
||||
#ENDIF
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
IDE_BUFWR:
|
||||
LD HL,(DIOBUF)
|
||||
LD B,0
|
||||
|
||||
#IF (IDE8BIT | (IDEMODE == IDEMODE_DIDE))
|
||||
LD C,IDEDATA
|
||||
OTIR
|
||||
OTIR
|
||||
#ELSE
|
||||
LD C,IDEDATAHI
|
||||
IDE_BUFWR1:
|
||||
LD A,(HL) ; GET THE LO BYTE AND KEEP IT IN A FOR LATER
|
||||
INC HL ; BUMP TO NEXT BYTE IN BUFFER
|
||||
OUTI ; WRITE HI BYTE, INC HL, DEC B
|
||||
OUT (IDEDATALO),A ; NOW WRITE THE SAVED LO BYTE TO LO BYTE
|
||||
JP NZ,IDE_BUFWR1 ; LOOP AS NEEDED
|
||||
#ENDIF
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
IDE_SETUP:
|
||||
LD A,1
|
||||
OUT (IDESECTC),A
|
||||
|
||||
LD A,(HSTDSK) ; HSTDSK -> HEAD BIT 4 TO SELECT UNIT
|
||||
AND 0FH
|
||||
CP 0
|
||||
JP Z,IDE_SETUP_UNIT0
|
||||
CP 1
|
||||
JP Z,IDE_SETUP_UNIT1
|
||||
CALL NC,PANIC
|
||||
IDE_SETUP_UNIT0:
|
||||
LD A,(IDE0_DEVICE)
|
||||
; LD DE,(IDE0_OFFSET)
|
||||
JP IDE_SETUP1
|
||||
IDE_SETUP_UNIT1:
|
||||
LD A,(IDE1_DEVICE)
|
||||
; LD DE,(IDE1_OFFSET)
|
||||
JP IDE_SETUP1
|
||||
IDE_SETUP1:
|
||||
LD (IDE_DEVICE),A
|
||||
OUT (IDEDEVICE),A
|
||||
|
||||
LD HL,(HSTTRK) ; HSTTRK -> IDECYLHI/LO
|
||||
LD A,H
|
||||
LD (IDE_CYLHI),A
|
||||
OUT (IDECYLHI),A
|
||||
LD A,L
|
||||
LD (IDE_CYLLO),A
|
||||
OUT (IDECYLLO),A
|
||||
|
||||
LD BC,(HSTSEC) ; HSTSEC -> IDESECTN
|
||||
LD A,C
|
||||
LD (IDE_SEC),A
|
||||
OUT (IDESECTN),A
|
||||
|
||||
#IF (DSKYENABLE)
|
||||
CALL IDE_DSKY
|
||||
#ENDIF
|
||||
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
#IF (DSKYENABLE)
|
||||
IDE_DSKY:
|
||||
LD HL,DSKY_HEXBUF
|
||||
LD A,(IDE_DEVICE)
|
||||
LD (HL),A
|
||||
INC HL
|
||||
LD A,(IDE_CYLHI)
|
||||
LD (HL),A
|
||||
INC HL
|
||||
LD A,(IDE_CYLLO)
|
||||
LD (HL),A
|
||||
INC HL
|
||||
LD A,(IDE_SEC)
|
||||
LD (HL),A
|
||||
CALL DSKY_HEXOUT
|
||||
RET
|
||||
#ENDIF
|
||||
;
|
||||
;
|
||||
;
|
||||
IDE_PRT:
|
||||
CALL NEWLINE
|
||||
|
||||
LD DE,IDESTR_PREFIX
|
||||
CALL WRITESTR
|
||||
|
||||
CALL PC_SPACE
|
||||
LD DE,IDESTR_CMD
|
||||
CALL WRITESTR
|
||||
LD A,(IDE_CMD)
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
CALL PC_SPACE
|
||||
CALL PC_LBKT
|
||||
LD A,(IDE_CMD)
|
||||
LD DE,IDESTR_READ
|
||||
CP IDECMD_READ
|
||||
JP Z,IDE_PRTCMD
|
||||
LD DE,IDESTR_WRITE
|
||||
CP IDECMD_WRITE
|
||||
JP Z,IDE_PRTCMD
|
||||
LD DE,IDESTR_UNKCMD
|
||||
IDE_PRTCMD:
|
||||
CALL WRITESTR
|
||||
CALL PC_RBKT
|
||||
|
||||
CALL PC_SPACE
|
||||
LD A,(IDE_DEVICE)
|
||||
CALL PRTHEXBYTE
|
||||
LD A,(IDE_CYLHI)
|
||||
CALL PRTHEXBYTE
|
||||
LD A,(IDE_CYLLO)
|
||||
CALL PRTHEXBYTE
|
||||
LD A,(IDE_SEC)
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
CALL PC_SPACE
|
||||
LD DE,IDESTR_ARROW
|
||||
CALL WRITESTR
|
||||
|
||||
CALL PC_SPACE
|
||||
IN A,(IDESTTS)
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
CALL PC_SPACE
|
||||
IN A,(IDEERR)
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
CALL PC_SPACE
|
||||
LD DE,IDESTR_RC
|
||||
CALL WRITESTR
|
||||
LD A,(IDE_RC)
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
CALL PC_SPACE
|
||||
CALL PC_LBKT
|
||||
LD A,(IDE_RC)
|
||||
LD DE,IDESTR_RCOK
|
||||
CP IDERC_OK
|
||||
JP Z,IDE_PRTRC
|
||||
LD DE,IDESTR_RCCMDERR
|
||||
CP IDERC_CMDERR
|
||||
JP Z,IDE_PRTRC
|
||||
LD DE,IDESTR_RCRDYTO
|
||||
CP IDERC_RDYTO
|
||||
JP Z,IDE_PRTRC
|
||||
LD DE,IDESTR_RCBUFTO
|
||||
CP IDERC_BUFTO
|
||||
JP Z,IDE_PRTRC
|
||||
LD DE,IDESTR_RCUNK
|
||||
IDE_PRTRC:
|
||||
CALL WRITESTR
|
||||
CALL PC_RBKT
|
||||
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
IDESTR_PREFIX .TEXT "IDE:$"
|
||||
IDESTR_CMD .TEXT "CMD=$"
|
||||
IDESTR_RC .TEXT "RC=$"
|
||||
IDESTR_ARROW .TEXT "-->$"
|
||||
IDESTR_READ .TEXT "READ$"
|
||||
IDESTR_WRITE .TEXT "WRITE$"
|
||||
IDESTR_UNKCMD .TEXT "UNKCMD$"
|
||||
IDESTR_RCOK .TEXT "OK$"
|
||||
IDESTR_RCCMDERR .TEXT "COMMAND ERROR$"
|
||||
IDESTR_RCRDYTO .TEXT "READY TIMEOUT$"
|
||||
IDESTR_RCBUFTO .TEXT "BUFFER TIMEOUT$"
|
||||
IDESTR_RCUNK .TEXT "UNKNOWN ERROR$"
|
||||
;
|
||||
;==================================================================================================
|
||||
; IDE DISK DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
IDE_STAT .DB 0
|
||||
IDE_RC .DB 0
|
||||
;
|
||||
IDE_CMD: .DB 0
|
||||
IDE_DEVICE .DB 0
|
||||
IDE_CYLHI: .DB 0
|
||||
IDE_CYLLO: .DB 0
|
||||
IDE_SEC: .DB 0
|
||||
IDE_STTS: .DB 0
|
||||
IDE_ERRS .DB 0
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
; Error Register (ERR bit being set in the Status Register)
|
||||
;
|
||||
; Bit 7: BBK (Bad Block Detected) Set when a Bad Block is detected.
|
||||
; Bit 6: UNC (Uncorrectable Data Error) Set when Uncorrectable Error is encountered.
|
||||
; Bit 5: MC (Media Changed) Set to 0.
|
||||
; Bit 4: IDNF (ID Not Found) Set when Sector ID not found.
|
||||
; Bit 3: MCR (Media Change Request) Set to 0.
|
||||
; Bit 2: ABRT (Aborted Command) Set when Command Aborted due to drive error.
|
||||
; Bit 1: TKONF (Track 0 Not Found) Set when Executive Drive Diagnostic Command.
|
||||
; Bit 0: AMNF (Address mark Not Found) Set in case of a general error.
|
||||
;
|
||||
; Status Register (When the contents of this register are read by the host, the IREQ# bit is cleared)
|
||||
;
|
||||
; Bit 7: BSY (Busy) Set when the drive is busy and unable to process any new ATA commands.
|
||||
; Bit 6: DRDY (Data Ready) Set when the device is ready to accept ATA commands from the host.
|
||||
; Bit 5: DWF (Drive Write Fault) Always set to 0.
|
||||
; Bit 4: DSC (Drive Seek Complete) Set when the drive heads have been positioned over a specific track.
|
||||
; Bit 3: DRQ (Data Request) Set when device is ready to transfer a word or byte of data to or from the host and the device.
|
||||
; Bit 2: CORR (Corrected Data) Always set to 0.
|
||||
; Bit 1: IDX (Index) Always set to 0.
|
||||
; Bit 0: ERR (Error) Set when an error occurred during the previous ATA command.
|
||||
61
trunk/Source/ide_data.asm
Normal file
61
trunk/Source/ide_data.asm
Normal file
@@ -0,0 +1,61 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; IDE DISK DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
IDE_SLICETRKS .EQU 65 ; TRACKS PER SLICE
|
||||
IDE_TRKSIZE .EQU 128 ; SIZE OF TRACK (IN KB)
|
||||
IDE_SLICESIZE .EQU ((IDE_SLICETRKS * IDE_TRKSIZE) + 1023) / 1024 ; SIZE OF EACH SLICE (IN MB)
|
||||
IDE_NUMSLICES .EQU IDECAPACITY / IDE_SLICESIZE ; TOTAL SLICES IN DEVICE
|
||||
IDE0_SLICEDEF .EQU 0 ; DEFAULT SLICE FOR UNIT 0
|
||||
IDE1_SLICEDEF .EQU 1 ; DEFAULT SLICE FOR UNIT 1
|
||||
IDE2_SLICEDEF .EQU 2 ; DEFAULT SLICE FOR UNIT 0
|
||||
IDE3_SLICEDEF .EQU 3 ; DEFAULT SLICE FOR UNIT 1
|
||||
;
|
||||
.DB DIODEV_IDE + 0
|
||||
IDEDPH0 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW IDECSV0,IDEALV0
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
IDE0_SLICE .DW IDE0_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW IDE_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
.DB DIODEV_IDE + 0
|
||||
IDEDPH1 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW IDECSV1,IDEALV1
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
IDE1_SLICE .DW IDE1_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW IDE_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
.DB DIODEV_IDE + 0
|
||||
IDEDPH2 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW IDECSV2,IDEALV2
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
IDE2_SLICE .DW IDE2_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW IDE_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
.DB DIODEV_IDE + 0
|
||||
IDEDPH3 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW IDECSV3,IDEALV3
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
IDE3_SLICE .DW IDE3_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW IDE_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
IDECKS .EQU 0 ; CKS: 0 FOR NON-REMOVABLE MEDIA
|
||||
IDEALS .EQU 256 ; ALS: BLKS / 8 = 2048 / 8 = 256 (ROUNDED UP)
|
||||
;
|
||||
IDECSV0: .FILL IDECKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
IDEALV0: .FILL IDEALS ; MAX OF 2048 DATA BLOCKS
|
||||
IDECSV1: .FILL IDECKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
IDEALV1: .FILL IDEALS ; MAX OF 2048 DATA BLOCKS
|
||||
IDECSV2: .FILL IDECKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
IDEALV2: .FILL IDEALS ; MAX OF 2048 DATA BLOCKS
|
||||
IDECSV3: .FILL IDECKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
IDEALV3: .FILL IDEALS ; MAX OF 2048 DATA BLOCKS
|
||||
24
trunk/Source/infolist.inc
Normal file
24
trunk/Source/infolist.inc
Normal file
@@ -0,0 +1,24 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; infolist.inc 6/ 7/2012 dwg - removed DSK_MAP pointer ;
|
||||
; infolist.inc 5/16/2012 dwg - BIOS information pointers ;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
; The putpose of this table is to provide pointers that can
|
||||
; be used by utility programs to access BIOS internals for
|
||||
; debugging and informative purposes. Any time the format
|
||||
; changes, the first word should be incremented to the Apps
|
||||
; can determine the lineage of a specific BIOS. This table
|
||||
; was created in support of the 2.0.0.0 banked BIOS.
|
||||
|
||||
INFOLIST:
|
||||
.DW 2 ; INFOLIST version 2 6/7/2012
|
||||
.DW STR_BANNER
|
||||
.DW VAR_LOC
|
||||
.DW TST_LOC
|
||||
.DW DPB_MAP
|
||||
.DW DPH_MAP
|
||||
.DW CIO_MAP
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;
|
||||
; eof - infolist.inc ;
|
||||
;;;;;;;;;;;;;;;;;;;;;;
|
||||
795
trunk/Source/loader.asm
Normal file
795
trunk/Source/loader.asm
Normal file
@@ -0,0 +1,795 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; LOADER
|
||||
;==================================================================================================
|
||||
;
|
||||
; FIX!!! NEED TO SWITCH FROM CBIOS CALLS TO HBIOS CALLS!!!
|
||||
;
|
||||
; INCLUDE GENERIC STUFF
|
||||
;
|
||||
#INCLUDE "std.asm"
|
||||
;
|
||||
; 12/1/2011 dwg -
|
||||
DRIVES .EQU 1 ; control diskmap display function
|
||||
;
|
||||
.ORG 8400H
|
||||
;
|
||||
; SETUP OUR STACK
|
||||
LD SP,BL_STACK ; SET UP LOADER STACK
|
||||
|
||||
; SETUP CBIOS IOBYTE
|
||||
LD A,DEFIOBYTE ; LOAD DEFAULT IOBYTE
|
||||
LD (IOBYTE),A ; STORE IT
|
||||
|
||||
#IF (PLATFORM != PLT_N8)
|
||||
IN A,(RTC) ; RTC PORT, BIT 6 HAS STATE OF CONFIG JUMPER
|
||||
; LD A,40H ; *DEBUG* SIMULATE JUMPER OPEN
|
||||
; LD A,00H ; *DEBUG* SIMULATE JUMPER SHORTED
|
||||
AND 40H ; ISOLATE BIT 6
|
||||
JR Z,INIT1 ; IF BIT6=0, SHORTED, USE ALT IOBYTE
|
||||
LD A,DEFIOBYTE ; LOAD DEF IOBYTE VALUE
|
||||
JR INIT2 ; CONTINUE
|
||||
INIT1:
|
||||
LD A,ALTIOBYTE ; LOAD ALT IOBYTE VALUE
|
||||
INIT2:
|
||||
LD (IOBYTE),A ; SET THE ACTIVE IOBYTE
|
||||
#ENDIF
|
||||
|
||||
; RUN THE BOOT LOADER MENU
|
||||
JP DOBOOTMENU
|
||||
;
|
||||
;__DOBOOT________________________________________________________________________________________________________________________
|
||||
;
|
||||
; PERFORM BOOT FRONT PANEL ACTION
|
||||
;________________________________________________________________________________________________________________________________
|
||||
;
|
||||
|
||||
DOBOOTMENU:
|
||||
LD DE,STR_BANNER
|
||||
CALL WRITESTR
|
||||
|
||||
CALL LISTDRIVES
|
||||
LD DE,STR_BOOTMENU
|
||||
CALL WRITESTR
|
||||
|
||||
#IF (DSKYENABLE)
|
||||
LD HL,BOOT ; POINT TO BOOT MESSAGE
|
||||
CALL SEGDISPLAY ; DISPLAY MESSAGE
|
||||
#ENDIF
|
||||
|
||||
#IF (BOOTTYPE == BT_AUTO)
|
||||
LD BC,1000 * BOOT_TIMEOUT
|
||||
LD (BL_TIMEOUT),BC
|
||||
#ENDIF
|
||||
|
||||
DB_BOOTLOOP:
|
||||
;
|
||||
; CHECK FOR CONSOLE BOOT KEYPRESS
|
||||
;
|
||||
#IF (UARTENABLE | VDUENABLE | (PRPENABLE & PRPCONENABLE) | (PPPENABLE & PPPCONENABLE))
|
||||
CALL CST
|
||||
OR A
|
||||
JR Z,DB_CONEND
|
||||
CALL CINUC
|
||||
CP 'S' ; SETUP
|
||||
JR Z,GOSETUP
|
||||
CP 'M' ; MONITOR
|
||||
JR Z,GOMONUART
|
||||
CP 'R' ; ROM BOOT
|
||||
JR Z,GOROM
|
||||
CP 'A' ; A-P, DISK BOOT
|
||||
JR C,DB_INVALID
|
||||
CP 'P' + 1 ; HMMM... 'M' DRIVE CONFLICTS WITH MONITOR SELECTION
|
||||
JR NC,DB_INVALID
|
||||
SUB 'A'
|
||||
JR GOBOOTDISK
|
||||
DB_CONEND:
|
||||
#ENDIF
|
||||
;
|
||||
; CHECK FOR DSKY BOOT KEYPRESS
|
||||
;
|
||||
#IF (DSKYENABLE)
|
||||
CALL KY_STAT ; GET KEY FROM KB INTO A
|
||||
OR A
|
||||
JR Z,DB_DSKYEND
|
||||
CALL KY_GET
|
||||
CP KY_GO ; GO = MONITOR
|
||||
JR Z,GOMONDSKY
|
||||
CP KY_BO ; BO = BOOT ROM
|
||||
JR Z,GOROM
|
||||
CP 0AH ; A-F, DISK BOOT
|
||||
JR C,DB_INVALID
|
||||
CP 0FH + 1
|
||||
JR NC,DB_INVALID
|
||||
SUB 0AH
|
||||
JR GOBOOTDISK
|
||||
; LD HL,BOOT ; POINT TO BOOT MESSAGE
|
||||
; LD A,00H ; BLANK OUT SELECTION,IT WAS INVALID
|
||||
; LD (HL),A ; STORE IT IN DISPLAY BUFFER
|
||||
; CALL SEGDISPLAY ; DISPLAY THE BUFFER
|
||||
DB_DSKYEND:
|
||||
#ENDIF
|
||||
;
|
||||
; IF CONFIGURED, CHECK FOR AUTOBOOT TIMEOUT
|
||||
;
|
||||
#IF (BOOTTYPE == BT_AUTO)
|
||||
|
||||
; DELAY FOR 1MS TO MAKE TIMEOUT CALC EASY
|
||||
LD DE,40
|
||||
CALL VDELAY
|
||||
|
||||
; CHECK/INCREMENT TIMEOUT
|
||||
LD BC,(BL_TIMEOUT)
|
||||
DEC BC
|
||||
LD (BL_TIMEOUT),BC
|
||||
LD A,B
|
||||
OR C
|
||||
JR NZ,DB_BOOTLOOP
|
||||
|
||||
; TIMEOUT EXPIRED, PERFORM DEFAULT BOOT ACTION
|
||||
LD A,BOOT_DEFAULT
|
||||
CP 'M' ; MONITOR
|
||||
JR Z,GOMONUART
|
||||
CP 'R' ; ROM BOOT
|
||||
JR Z,GOROM
|
||||
CP 'A' ; A-P, DISK BOOT
|
||||
JR C,DB_INVALID
|
||||
CP 'P' + 1 ; HMMM... DRIVE M CONFLICTS WITH "MONITOR" SELECTION
|
||||
JR NC,DB_INVALID
|
||||
SUB 'A'
|
||||
JR GOBOOTDISK
|
||||
#ENDIF
|
||||
|
||||
JP DB_BOOTLOOP
|
||||
;
|
||||
; BOOT OPTION PROCESSING
|
||||
;
|
||||
DB_INVALID:
|
||||
LD DE,STR_INVALID
|
||||
CALL WRITESTR
|
||||
JP DOBOOTMENU
|
||||
;
|
||||
GOSETUP:
|
||||
LD DE,STR_SETUP
|
||||
CALL WRITESTR
|
||||
JP DOSETUPMENU
|
||||
;
|
||||
GOMONUART:
|
||||
LD DE,STR_BOOTMON
|
||||
CALL WRITESTR
|
||||
JP MON_UART
|
||||
;
|
||||
GOMONDSKY:
|
||||
LD DE,STR_BOOTMON
|
||||
CALL WRITESTR
|
||||
JP MON_DSKY
|
||||
;
|
||||
GOROM:
|
||||
LD DE,STR_BOOTROM
|
||||
CALL WRITESTR
|
||||
JP CPM_ENT
|
||||
;
|
||||
GOBOOTDISK:
|
||||
LD C,A
|
||||
LD DE,STR_BOOTDISK
|
||||
CALL WRITESTR
|
||||
JP BOOTDISK
|
||||
;
|
||||
; BOOT FROM DISK DRIVE
|
||||
;
|
||||
BOOTDISK:
|
||||
LD DE,STR_BOOTDISK1
|
||||
CALL WRITESTR
|
||||
|
||||
; SAVE BOOT DRIVE
|
||||
LD A,C
|
||||
LD (BL_BOOTDRIVE),A
|
||||
|
||||
; SAVE BOOT DEVICE/SLICE
|
||||
CALL CBIOS_GETDSK
|
||||
LD A,B
|
||||
LD (BL_BOOTDEVICE),A
|
||||
LD (BL_BOOTLU),DE
|
||||
|
||||
; SELECT THE REQUESTED DRIVE
|
||||
LD A,(BL_BOOTDRIVE) ; GET CBIOS BOOT DRIVE BACK
|
||||
LD C,A ; MOVE TO C
|
||||
LD E,0 ; BIT0=0 IN E MEANS FIRST SELECT
|
||||
CALL CBIOS_SELDSK ; CALL CBIOS DSKSEL TO GET DPH ADDRESS
|
||||
|
||||
; IF HL=0, SELDSK FAILED! SELECTED DRIVE IS NOT AVAILABLE
|
||||
LD A,H
|
||||
OR L
|
||||
JP Z,DB_NODISK
|
||||
|
||||
; ; *DEBUG* PRINT DPH ADDRESS
|
||||
; CALL NEWLINE
|
||||
; PUSH HL
|
||||
; POP BC
|
||||
; CALL PRTHEXWORD
|
||||
|
||||
; BUMP HL TO POINT TO DPB AND LOAD IT
|
||||
LD DE,10
|
||||
ADD HL,DE ; HL = ADDRESS OF ADDRESS OF DPB
|
||||
LD A,(HL) ; DEREFERENCE
|
||||
INC HL
|
||||
LD H,(HL)
|
||||
LD L,A ; NOW HL = ADDRESS OF DPB
|
||||
|
||||
; ; *DEBUG* PRINT DPB ADDRESS
|
||||
; CALL PC_SPACE
|
||||
; PUSH HL
|
||||
; POP BC
|
||||
; CALL PRTHEXWORD
|
||||
|
||||
; FIRST WORD OF DPB IS SECTORS PER TRACK, SAVE IT
|
||||
LD C,(HL)
|
||||
INC HL
|
||||
LD B,(HL) ; NOW BC = SECTORS PER TRACK
|
||||
; LD BC,36 ; *DEBUG*
|
||||
LD (BL_LDSPT),BC ; SAVE IT
|
||||
|
||||
LD DE,12 ; POINT TO DPB OFFSET FIELD
|
||||
ADD HL,DE
|
||||
LD A,(HL)
|
||||
INC HL
|
||||
OR (HL)
|
||||
JP Z,DB_NOBOOT ; IF OFFSET = ZERO, THERE IS NO BOOT AREA!!!
|
||||
|
||||
; ; *DEBUG* PRINT SECTORS PER TRACK
|
||||
; CALL PC_SPACE
|
||||
; CALL PRTHEXWORD
|
||||
|
||||
; SETUP TO LOAD METADATA
|
||||
LD BC,BL_METABUF
|
||||
CALL CBIOS_SETDMA
|
||||
LD BC,0
|
||||
CALL CBIOS_SETTRK
|
||||
LD BC,11
|
||||
CALL CBIOS_SETSEC
|
||||
|
||||
; READ META DATA
|
||||
CALL CBIOS_READ
|
||||
OR A
|
||||
JP NZ,DB_ERR
|
||||
|
||||
; ; PRINT SIGNATURE
|
||||
; CALL NEWLINE
|
||||
; LD DE,STR_SIG
|
||||
; CALL WRITESTR
|
||||
; LD BC,(BL_SIG)
|
||||
; CALL PRTHEXWORD
|
||||
|
||||
; CHECK SIGNATURE
|
||||
LD BC,(BL_SIG)
|
||||
LD A,$A5
|
||||
CP B
|
||||
JP NZ,DB_NOBOOT
|
||||
LD A,$5A
|
||||
CP C
|
||||
JP NZ,DB_NOBOOT
|
||||
|
||||
; PRINT CPMLOC VALUE
|
||||
CALL NEWLINE
|
||||
LD DE,STR_CPMLOC
|
||||
CALL WRITESTR
|
||||
LD BC,(BL_CPMLOC)
|
||||
CALL PRTHEXWORD
|
||||
|
||||
; PRINT CPMEND VALUE
|
||||
CALL PC_SPACE
|
||||
LD DE,STR_CPMEND
|
||||
CALL WRITESTR
|
||||
LD BC,(BL_CPMEND)
|
||||
CALL PRTHEXWORD
|
||||
|
||||
; PRINT CPMENT VALUE
|
||||
CALL PC_SPACE
|
||||
LD DE,STR_CPMENT
|
||||
CALL WRITESTR
|
||||
LD BC,(BL_CPMENT)
|
||||
CALL PRTHEXWORD
|
||||
CALL PC_SPACE
|
||||
|
||||
LD DE,STR_LABEL
|
||||
CALL WRITESTR
|
||||
LD A,(BL_TERM) ; Display Disk Label if Present
|
||||
CP '$' ; (dwg 2/7/2012)
|
||||
JP NZ,NO_LABEL ; pick up string terminator for label
|
||||
LD DE,BL_LABEL ; if it is there, then a printable
|
||||
CALL WRITESTR ; label is there as wellm even if spaces.
|
||||
NO_LABEL: ;
|
||||
|
||||
;
|
||||
; SETUP BL_CPM... STUFF
|
||||
;
|
||||
; COMPUTE BL_SIZ
|
||||
LD HL,(BL_CPMEND)
|
||||
LD DE,(BL_CPMLOC)
|
||||
SCF
|
||||
CCF
|
||||
SBC HL,DE
|
||||
LD (BL_LDSIZ),HL
|
||||
|
||||
; SETUP FOR DATA LOAD
|
||||
LD HL,BL_LDLOC
|
||||
LD (BL_LDCLOC),HL
|
||||
LD DE,(BL_LDSIZ)
|
||||
ADD HL,DE
|
||||
LD (BL_LDEND),HL
|
||||
LD BC,0
|
||||
LD (BL_LDCTRK),BC
|
||||
LD BC,12
|
||||
LD (BL_LDCSEC),BC
|
||||
|
||||
; ; *DEBUG* PRINT SPT, SEC, TRK, SIZ, END
|
||||
; CALL NEWLINE
|
||||
; LD BC,(BL_LDSPT)
|
||||
; CALL PRTHEXWORD
|
||||
; CALL PC_SPACE
|
||||
; LD BC,(BL_LDCSEC)
|
||||
; CALL PRTHEXWORD
|
||||
; CALL PC_SPACE
|
||||
; LD BC,(BL_LDCTRK)
|
||||
; CALL PRTHEXWORD
|
||||
; CALL PC_SPACE
|
||||
; LD BC,(BL_LDSIZ)
|
||||
; CALL PRTHEXWORD
|
||||
; CALL PC_SPACE
|
||||
; LD BC,(BL_LDEND)
|
||||
; CALL PRTHEXWORD
|
||||
|
||||
; LOADING MESSAGE
|
||||
CALL NEWLINE
|
||||
LD DE,STR_LOADING
|
||||
CALL WRITESTR
|
||||
;
|
||||
; LOADING LOOP
|
||||
;
|
||||
DB_LOOP:
|
||||
; SETUP TO READ SECTOR
|
||||
LD BC,(BL_LDCTRK)
|
||||
; CALL NEWLINE ; *DEBUG*
|
||||
; CALL PRTHEXWORD ; *DEBUG*
|
||||
CALL CBIOS_SETTRK
|
||||
|
||||
LD BC,(BL_LDCSEC)
|
||||
; CALL PC_SPACE ; *DEBUG*
|
||||
; CALL PRTHEXWORD ; *DEBUG*
|
||||
CALL CBIOS_SETSEC
|
||||
LD BC,(BL_LDCLOC)
|
||||
; CALL PC_SPACE ; *DEBUG*
|
||||
; CALL PRTHEXWORD ; *DEBUG*
|
||||
CALL CBIOS_SETDMA
|
||||
|
||||
; READ IT
|
||||
CALL CBIOS_READ
|
||||
OR A
|
||||
JP NZ,DB_ERR
|
||||
CALL PC_PERIOD
|
||||
|
||||
; ; *DEBUG* PRINT FIRST WORD OF DATA LOADED
|
||||
; CALL PC_SPACE
|
||||
; LD HL,(BL_LDCLOC)
|
||||
; LD A,(HL)
|
||||
; INC HL
|
||||
; LD B,(HL)
|
||||
; LD C,A
|
||||
; CALL PRTHEXWORD
|
||||
|
||||
; INCREMENT MEMORY POINTER
|
||||
LD HL,(BL_LDCLOC)
|
||||
LD DE,128
|
||||
ADD HL,DE
|
||||
LD (BL_LDCLOC),HL
|
||||
|
||||
; CHECK TO SEE IF WE ARE DONE
|
||||
LD DE,(BL_LDEND)
|
||||
LD A,H
|
||||
CP D
|
||||
JR NZ,DB_CONT
|
||||
LD A,L
|
||||
CP E
|
||||
JR NZ,DB_CONT
|
||||
|
||||
JP DB_DONE
|
||||
|
||||
DB_CONT:
|
||||
; INCREMENT SECTOR
|
||||
LD BC,(BL_LDCSEC)
|
||||
INC BC
|
||||
LD (BL_LDCSEC),BC
|
||||
|
||||
; TEST FOR END OF TRACK (LDCSEC/BC == LDSPT/DE)
|
||||
LD DE,(BL_LDSPT)
|
||||
LD A,C
|
||||
CP E
|
||||
JR NZ,DB_LOOP ; B != D, NOT AT EOT
|
||||
LD A,B
|
||||
CP D
|
||||
JR NZ,DB_LOOP ; C != E, NOT AT EOT
|
||||
|
||||
; END OF TRACK, RESET SECTOR & INCREMENT TRACK
|
||||
LD BC,0
|
||||
LD (BL_LDCSEC),BC
|
||||
LD BC,(BL_LDCTRK)
|
||||
INC BC
|
||||
LD (BL_LDCTRK),BC
|
||||
|
||||
JP DB_LOOP
|
||||
|
||||
DB_NODISK:
|
||||
; SELDSK DID NOT LIKE DRIVE SELECTION
|
||||
LD DE,STR_NODISK
|
||||
CALL WRITESTR
|
||||
JP DOBOOTMENU
|
||||
|
||||
DB_NOBOOT:
|
||||
; DISK IS NOT BOOTABLE
|
||||
LD DE,STR_NOBOOT
|
||||
CALL WRITESTR
|
||||
JP DOBOOTMENU
|
||||
|
||||
DB_ERR:
|
||||
; I/O ERROR DURING BOOT ATTEMPT
|
||||
LD DE,STR_BOOTERR
|
||||
CALL WRITESTR
|
||||
JP DOBOOTMENU
|
||||
|
||||
DB_DONE:
|
||||
CALL NEWLINE
|
||||
; ; *DEBUG*
|
||||
; CALL NEWLINE
|
||||
; LD BC,BL_LDLOC
|
||||
; CALL PRTHEXWORD
|
||||
; CALL PC_SPACE
|
||||
; LD BC,(BL_CPMLOC)
|
||||
; CALL PRTHEXWORD
|
||||
; CALL PC_SPACE
|
||||
; LD BC,(BL_LDSIZ)
|
||||
; CALL PRTHEXWORD
|
||||
; CALL PC_SPACE
|
||||
; LD BC,(BL_CPMENT)
|
||||
; CALL PRTHEXWORD
|
||||
|
||||
; JP DOBOOTMENU ; *DEBUG*
|
||||
|
||||
; ALL DONE, NOW RELOCATE IMAGE BY COPYING
|
||||
LD DE,(BL_LDSIZ) ; BYTES TO MOVE
|
||||
LD HL,(BL_CPMLOC)
|
||||
ADD HL,DE
|
||||
DEC HL ; HL = PTR TO DEST (TOP)
|
||||
PUSH HL ; SAVE IT
|
||||
LD HL,BL_LDLOC
|
||||
ADD HL,DE
|
||||
DEC HL ; HL = PTR TO SRC (TOP)
|
||||
POP DE ; RECOVER DEST PTR
|
||||
LD BC,(BL_LDSIZ) ; BC = BYTES TO COPY
|
||||
LDDR
|
||||
|
||||
; PATCH BOOT DRIVE INFO INTO CONFIG DATA
|
||||
LD A,1
|
||||
CALL RAMPG
|
||||
LD HL,$020D ; LOCATION OF BOOTINFO IN SYSCFG IN RAM PAGE 0
|
||||
CALL PATBI
|
||||
CALL RAMPGZ
|
||||
|
||||
; ; IF BILOC IS SET, THEN ALSO PATCH BOOT INFO INTO OS IMAGE
|
||||
; LD HL,(BL_BILOC)
|
||||
; LD A,H
|
||||
; OR L
|
||||
; CALL NZ,PATBI ; PATCH IF BL_BILOC <> 0
|
||||
|
||||
; JUMP TO COLD BOOT ENTRY
|
||||
LD HL,(BL_CPMENT)
|
||||
JP (HL)
|
||||
|
||||
PATBI:
|
||||
; PATCH BOOT DRIVE INFO AT ADDRESS SPECIFIED BY HL
|
||||
LD A,TRUE ; BOOT FROM DISK = TRUE
|
||||
LD (HL),A ; SAVE IT
|
||||
INC HL
|
||||
LD A,(BL_BOOTDEVICE) ; GET BOOT DEVICE/UNIT
|
||||
LD (HL),A ; SAVE IT
|
||||
INC HL
|
||||
LD DE,(BL_BOOTLU) ; GET BOOT LU
|
||||
LD (HL),E ; SAVE LSB
|
||||
INC HL
|
||||
LD (HL),D ; SAVE MSB
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
DOSETUPMENU:
|
||||
LD DE,STR_SETUPMENU
|
||||
CALL WRITESTR
|
||||
CALL CINUC
|
||||
|
||||
CP 'F' ; FORMAT RAM DISK
|
||||
JP Z,FMTRAMDSK
|
||||
CP 'X' ; EXIT
|
||||
JP Z,DOBOOTMENU
|
||||
JP DOSETUPMENU ; NO VALID KEY, LOOP
|
||||
;
|
||||
FMTRAMDSK:
|
||||
JP DOSETUPMENU
|
||||
;
|
||||
; DISPLAY LIST OF DRIVES
|
||||
;
|
||||
LISTDRIVES:
|
||||
#IF (DRIVES)
|
||||
call NEWLINE
|
||||
|
||||
ld c,0 ; start with drive 0
|
||||
ld b,16 ; loop through 16 drives
|
||||
dmloop:
|
||||
push bc ; preserve drive and loop counter
|
||||
ld a,c ; drive letter into a
|
||||
add a,'A' ; convert to alpha version of drive letter
|
||||
ld (BL_TMPDRV),a ; save it for printing if needed
|
||||
call CBIOS_GETDSK ; get drive into, c still has drive number
|
||||
or a ; set flags on result
|
||||
jr nz,dmdone ; error, skip this drive
|
||||
ld (BL_TMPLU),de ; save lu for later
|
||||
ld a,b ; device/unit into a for matching below
|
||||
|
||||
ld de,str_devrom
|
||||
cp DIODEV_MD+0 ; ROM
|
||||
jr z,dmprt
|
||||
|
||||
ld de,str_devram
|
||||
cp DIODEV_MD+1 ; RAM
|
||||
jr z,dmprt
|
||||
|
||||
and $f0 ; after ram/rom, compare on high nibble only
|
||||
|
||||
ld de,str_devfd
|
||||
cp DIODEV_FD ; floppy disk
|
||||
jr z,dmprt
|
||||
|
||||
ld de,str_devide
|
||||
cp DIODEV_IDE ; IDE
|
||||
jr z,dmprt
|
||||
|
||||
ld de,str_devatapi
|
||||
cp DIODEV_ATAPI ; ATAPI
|
||||
jr z,dmprt
|
||||
|
||||
ld de,str_devppide
|
||||
cp DIODEV_PPIDE ; PPIDE
|
||||
jr z,dmprt
|
||||
|
||||
ld de,str_devsd
|
||||
cp DIODEV_SD ; Generic SD
|
||||
jr z,dmprt
|
||||
|
||||
ld de,str_devprpsd
|
||||
cp DIODEV_PRPSD ; PropIO SD
|
||||
jr z,dmprt
|
||||
|
||||
ld de,str_devpppsd
|
||||
cp DIODEV_PPPSD ; ParPortProp SD
|
||||
jr z,dmprt
|
||||
|
||||
ld de,str_devhdsk
|
||||
cp DIODEV_HDSK ; SIMH HDSK
|
||||
jr z,dmprt
|
||||
|
||||
jr dmdone
|
||||
|
||||
dmprt:
|
||||
ld a,(BL_TMPDRV) ; recover drive letter
|
||||
call COUT ; print it
|
||||
ld a,'=' ; load equal sign
|
||||
call COUT ; print it
|
||||
call WRITESTR ; print device name now (str ptr in de)
|
||||
ld a,b ; a = device/unit
|
||||
and $f0 ; isolate device
|
||||
jr z,dmprt1 ; bypass unit printing for mem disk
|
||||
ld a,b ; a = device/unit
|
||||
and $0f ; remove device nibble
|
||||
add a,'0' ; convert to alpha
|
||||
call COUT ; print unit number
|
||||
ld a,h ; load slice max msb
|
||||
or l ; compare to lsb
|
||||
jr z,dmprt1 ; if zero, no lu support
|
||||
ld a,'-' ; slice prefix
|
||||
call COUT ; print slice prefix
|
||||
ld de,(BL_TMPLU) ; recover LU
|
||||
ld a,e ; ignore msb, load lsb in a
|
||||
call PRTHEXBYTE ; print it
|
||||
|
||||
dmprt1:
|
||||
call PC_SPACE ; padding
|
||||
|
||||
dmdone:
|
||||
pop bc ; recover drive num and loop counter
|
||||
inc c ; increment drive number
|
||||
dec b ; decrement loop counter
|
||||
jp nz,dmloop ; loop if more drives to check
|
||||
ret ; done
|
||||
#ENDIF
|
||||
;
|
||||
#IF (DSKYENABLE)
|
||||
;
|
||||
;
|
||||
;__SEGDISPLAY________________________________________________________________________________________
|
||||
;
|
||||
; DISPLAY CONTENTS OF DISPLAYBUF IN DECODED HEX BITS 0-3 ARE DISPLAYED DIG, BIT 7 IS DP
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
SEGDISPLAY:
|
||||
PUSH AF ; STORE AF
|
||||
PUSH BC ; STORE BC
|
||||
PUSH HL ; STORE HL
|
||||
LD BC,0007H
|
||||
ADD HL,BC
|
||||
LD B,08H ; SET DIGIT COUNT
|
||||
LD A,40H+30H ; SET CONTROL PORT 7218 TO OFF
|
||||
OUT (PIOC),A ; OUTPUT
|
||||
CALL DELAY ; WAIT
|
||||
LD A,0F0H ; SET CONTROL TO 1111 (DATA COMING, HEX DECODE,NO DECODE, NORMAL)
|
||||
|
||||
SEGDISPLAY1: ;
|
||||
OUT (PIOA),A ; OUTPUT TO PORT
|
||||
LD A,80H+30H ; STROBE WRITE PULSE WITH CONTROL=1
|
||||
OUT (PIOC),A ; OUTPUT TO PORT
|
||||
CALL DELAY ; WAIT
|
||||
LD A,40H+30H ; SET CONTROL PORT 7218 TO OFF
|
||||
OUT (PIOC),A ; OUTPUT
|
||||
|
||||
SEGDISPLAY_LP:
|
||||
LD A,(HL) ; GET DISPLAY DIGIT
|
||||
OUT (PIOA),A ; OUT TO PIOA
|
||||
LD A,00H+30H ; SET WRITE STROBE
|
||||
OUT (PIOC),A ; OUT TO PIOC
|
||||
CALL DELAY ; DELAY
|
||||
LD A,40H+30H ; SET CONTROL PORT OFF
|
||||
OUT (PIOC),A ; OUT TO PIOC
|
||||
CALL DELAY ; WAIT
|
||||
DEC HL ; INC POINTER
|
||||
DJNZ SEGDISPLAY_LP ; LOOP FOR NEXT DIGIT
|
||||
POP HL ; RESTORE HL
|
||||
POP BC ; RESTORE BC
|
||||
POP AF ; RESTORE AF
|
||||
RET
|
||||
#ENDIF
|
||||
;
|
||||
;__TEXT_STRINGS_________________________________________________________________________________________________________________
|
||||
;
|
||||
; STRINGS
|
||||
;_____________________________________________________________________________________________________________________________
|
||||
;
|
||||
STR_BOOTDISK .DB "BOOT FROM DISK\r\n$"
|
||||
STR_BOOTDISK1 .DB "\r\nReading disk information...$"
|
||||
STR_BOOTMON .DB "START MONITOR\r\n$"
|
||||
STR_BOOTROM .DB "BOOT FROM ROM\r\n$"
|
||||
STR_INVALID .DB "INVALID SELECTION\r\n$"
|
||||
STR_SETUP .DB "SYSTEM SETUP\r\n$"
|
||||
STR_SIG .DB "SIGNATURE=$"
|
||||
STR_CPMLOC .DB "LOC=$"
|
||||
STR_CPMEND .DB "END=$"
|
||||
STR_CPMENT .DB "ENT=$"
|
||||
STR_LABEL .DB "LABEL=$"
|
||||
STR_LOADING .DB "\r\nLoading$"
|
||||
STR_NODISK .DB "\r\nNo disk!$"
|
||||
STR_NOBOOT .DB "\r\nDisk not bootable!$"
|
||||
STR_BOOTERR .DB "\r\nBoot failure!$"
|
||||
;
|
||||
STR_BANNER:
|
||||
.DB "\r\n\r\n", PLATFORM_NAME, " Boot Loader v", BIOSVER
|
||||
.DB " (", VARIANT, "-", TIMESTAMP, ")\r\n$"
|
||||
STR_BOOTMENU:
|
||||
.DB "\r\nBoot: (M)onitor, (R)OM, or Drive Letter ===> $"
|
||||
;
|
||||
STR_SETUPMENU:
|
||||
.DB "\r\n\r\n", PLATFORM_NAME, " Setup & Configuration v", BIOSVER
|
||||
.DB " (", VARIANT, "-", TIMESTAMP, ")\r\n\r\n"
|
||||
; .DB "(F)ormat RAM Disk\r\n"
|
||||
.DB "e(X)it Setup\r\n"
|
||||
.DB "\r\n===> $"
|
||||
;
|
||||
.IF DSKYENABLE
|
||||
BOOT:
|
||||
; . . t o o b
|
||||
.DB 00H, 00H, 80H, 80H, 094H, 09DH, 09DH, 09FH
|
||||
.ENDIF
|
||||
;
|
||||
#DEFINE CIOMODE_CBIOS
|
||||
#DEFINE DSKY_KBD
|
||||
#INCLUDE "util.asm"
|
||||
;
|
||||
#INCLUDE "memmgr.asm"
|
||||
;
|
||||
; READ A CONSOLE CHARACTER AND CONVERT TO UPPER CASE
|
||||
;
|
||||
CINUC:
|
||||
CALL CIN
|
||||
AND 7FH ; STRIP HI BIT
|
||||
CP 'A' ; KEEP NUMBERS, CONTROLS
|
||||
RET C ; AND UPPER CASE
|
||||
CP 7BH ; SEE IF NOT LOWER CASE
|
||||
RET NC
|
||||
AND 5FH ; MAKE UPPER CASE
|
||||
RET
|
||||
;
|
||||
;==================================================================================================
|
||||
; WORKING DATA STORAGE
|
||||
;==================================================================================================
|
||||
;
|
||||
; WE USE A 256 BYTE AREA JUST AT THE START OF RAM (TOP 32KB)
|
||||
; FOR WORKING DATA STORAGE. THE FIRST 128 BYTES ARE RESERVED
|
||||
; TO LOAD THE BLOCK CONTAINING THE BOOT LOAD METADATA. THE
|
||||
; METADATA IS IN THE LAST 6 BYTES OF THIS BLOCK.
|
||||
;
|
||||
;__________________________________________________________________________________________________
|
||||
;
|
||||
;BL_METABUF .ORG 8000H ; START OF RAM
|
||||
BL_METABUF .EQU $
|
||||
BL_SIG .DW 0 ; SIGNATURE (WILL BE 0A55AH IF SET)
|
||||
BL_PLATFORM .DB 0 ; Formatting Platform
|
||||
BL_DEVICE .DB 0 ; Formatting Device
|
||||
BL_FORMATTER .FILL 8,0 ; Formatting Program
|
||||
BL_DRIVE .DB 0 ; Physical Disk Drive #
|
||||
BL_LU .DW 0 ; Logical Unit (slice)
|
||||
;
|
||||
; .ORG (BL_METABUF + 128 - 32)
|
||||
.FILL (BL_METABUF + 128) - $ - 32
|
||||
BL_PROTECT .DB 0 ; write protect boolean
|
||||
BL_UPDATES .DW 0 ; update counter
|
||||
BL_RMJ .DB 0 ; RMJ Major Version Number
|
||||
BL_RMN .DB 0 ; RMN Minor Version Number
|
||||
BL_RUP .DB 0 ; RUP Update Number
|
||||
BL_RTP .DB 0 ; RTP Patch Level
|
||||
BL_LABEL .FILL 16,0 ; 16 Character Drive Label
|
||||
BL_TERM .DB 0 ; LABEL TERMINATOR ('$')
|
||||
BL_BILOC .DW 0 ; LOC TO PATCH BOOT DRIVE INFO TO (IF NOT ZERO)
|
||||
BL_CPMLOC .DW 0 ; FINAL RAM DESTINATION FOR CPM/CBIOS
|
||||
BL_CPMEND .DW 0 ; END ADDRESS FOR LOAD
|
||||
BL_CPMENT .DW 0 ; CP/M ENTRY POINT (CBIOS COLD BOOT)
|
||||
;
|
||||
; WORKING STORAGE STARTS HERE
|
||||
;
|
||||
BL_STACKSIZ .EQU 40H
|
||||
.FILL BL_STACKSIZ,0
|
||||
BL_STACK .EQU $
|
||||
;
|
||||
BL_LDSPT .DW 0 ; SECTORS PER TRACK FOR LOAD DEVICE
|
||||
BL_LDCTRK .DW 0 ; CURRENT TRACK FOR LOAD
|
||||
BL_LDCSEC .DW 0 ; CURRENT SECTOR FOR LOAD
|
||||
BL_LDCLOC .DW 0 ; CURRENT MEM LOC BEING LOADED
|
||||
BL_LDEND .DW 0 ; RAM LOCATION TO STOP LOAD
|
||||
BL_LDSIZ .DW 0 ; SIZE OF CPM/CBIOS IMAGE TO LOAD
|
||||
BL_TIMEOUT .DW 0 ; AUTOBOOT TIMEOUT COUNTDOWN COUNTER
|
||||
BL_BOOTDRIVE .DB 0 ; TEMPORARY STORAGE FOR BOOT DRIVE
|
||||
BL_BOOTDEVICE .DB 0 ; TEMPORARY STORAGE FOR BOOT DEVICE/UNIT
|
||||
BL_BOOTLU .DW 0 ; TEMPORARY STORAGE FOR BOOT LU
|
||||
BL_TMPDRV .DB 0 ; TEMP STORAGE FOR DRIVE LETTER
|
||||
BL_TMPLU .DW 0 ; TEMP STORAGE FOR LU
|
||||
;
|
||||
BL_LDLOC .EQU 100H ; LOAD IMAGE HERE BEFORE RELOCATING
|
||||
;
|
||||
#IF (DRIVES)
|
||||
str_devrom .DB "ROM$"
|
||||
str_devram .DB "RAM$"
|
||||
str_devfd .DB "FD$"
|
||||
str_devide .DB "IDE$"
|
||||
str_devatapi .DB "ATAPI$"
|
||||
str_devppide .DB "PPIDE$"
|
||||
str_devsd .DB "SD$"
|
||||
str_devprpsd .DB "PRPSD$"
|
||||
str_devpppsd .DB "PPPSD$"
|
||||
str_devhdsk .DB "HDSK$"
|
||||
#ENDIF
|
||||
;
|
||||
;==================================================================================================
|
||||
; FILL REMAINDER OF BANK
|
||||
;==================================================================================================
|
||||
;
|
||||
SLACK: .EQU (9000H - $)
|
||||
.FILL SLACK
|
||||
;
|
||||
.ECHO "LOADER space remaining: "
|
||||
.ECHO SLACK
|
||||
.ECHO " bytes.\n"
|
||||
.END
|
||||
209
trunk/Source/makefile
Normal file
209
trunk/Source/makefile
Normal file
@@ -0,0 +1,209 @@
|
||||
#
|
||||
# GCC based makefile
|
||||
#
|
||||
# 05/24/2012 2.0 wbw - changed to handle HBIOS
|
||||
#
|
||||
# 01/11/2011 1.4 wbw - added support for ZSDOS/ZDDOS/ZCPR
|
||||
#
|
||||
# 12/22/2011 1.3 wbw - removed all built-in config stuff, operation is now entirely
|
||||
# dependent on variables CONFIG, ROMSIZE, and CPU
|
||||
#
|
||||
# 12/02/2011 1.3 wbw - replaced makever functionality with built-in makefile stuff
|
||||
#
|
||||
# 11/29/2011 1.3 dwg - uses makever to generate stdincl.inc from the version.hpp file
|
||||
#
|
||||
# 11/19/2011 1.3 dwg - added n8vem_vdu to "usage" and "all" rules
|
||||
# enhanced clean to get files in $(OUTDIR)
|
||||
# added custom to "all" rule
|
||||
|
||||
#
|
||||
# The operation of this makefile is entirely dependent on the setting
|
||||
# of three variables: CONFIG, ROMSIZE, and CPU:
|
||||
#
|
||||
# CONFIG determines which configuration to build which means that
|
||||
# it will determine the config_xxx.asm config settings file to
|
||||
# include as well as the output file names. So, for example,
|
||||
# if CONFIG is "n8vem", the config_n8vem.asm file will be used
|
||||
# for BIOS configuration settings and the output files will be
|
||||
# n8vem.rom, n8vem.sys, and n8vem.com.
|
||||
#
|
||||
# ROMSIZE specifies the size of the ROM image to be produced and
|
||||
# currently must be either "1024" for a 1MB ROM or "512" for a
|
||||
# 512KB ROM.
|
||||
#
|
||||
# CPU specifies the instruction set to be used in assembly and
|
||||
# must be either "80" for Z80 or "180" for Z180. Currently,
|
||||
# you should use 180 for N8 ROMs and 80 for everything else.
|
||||
#
|
||||
# SYS specifies the system variant to build in. CPM will
|
||||
# build traditional CP/M. ZSYS will build ZSystem which
|
||||
# currently means ZSDOS 1.2 & ZCPR 1.0
|
||||
#
|
||||
# ROMNAME names the output file. It defaults to
|
||||
# CONFIG. The output of the build will be:
|
||||
# <ROMNAME>.rom, <ROMNAME>.sys, and <ROMNAME>.com.
|
||||
#
|
||||
# These variables can be passed into the makefile by the command
|
||||
# line, hardcoded in this file, or set as environment variables
|
||||
# in the OS. To use a command line, use the following format:
|
||||
#
|
||||
# make CONFIG=<config> ROMSIZE=<romsize> CPU=<cpu> SYS=<sys> ROMNAME=<romname>
|
||||
#
|
||||
# An example of this is:
|
||||
#
|
||||
# make CONFIG=n8vem ROMSIZE=512 CPU=80 SYS=CPM ROMNAME=n8vem
|
||||
#
|
||||
# Alternatively, you can specify the variables by hardcoding them
|
||||
# in this file. To do so, uncomment the five lines after these
|
||||
# comments and change the values as desired.
|
||||
# If the variables are specified this way, you would then invoke
|
||||
# the make by simply using "make"
|
||||
#
|
||||
# If you want to set them as environment variables, you can
|
||||
# do this with commands like the following at an OS command
|
||||
# prompt or in a batch file:
|
||||
#
|
||||
# SET CONFIG=n8vem
|
||||
# SET ROMSIZE=512
|
||||
# SET CPU=80
|
||||
# SET SYS=CPM
|
||||
# SET ROMNAME=n8vem
|
||||
#
|
||||
# Note: use "make clean" to delete temporary and output files
|
||||
#
|
||||
# A good idea is to do a clean with every build and this can be
|
||||
# accomplished on one command line doing something like this:
|
||||
#
|
||||
# make clean all CONFIG=n8vem ROMSIZE=512 CPU=80 SYS=CPM ROMNAME=n8vem
|
||||
#
|
||||
# or, if you are using hard coded variables above:
|
||||
#
|
||||
# make clean all
|
||||
#
|
||||
# Uncomment and update values below to hardcode settings:
|
||||
#
|
||||
#CONFIG := n8vem
|
||||
#ROMSIZE := 512
|
||||
#CPU := 80
|
||||
#SYS := CPM
|
||||
#ROMNAME := n8vem
|
||||
|
||||
ifndef ROMNAME
|
||||
ROMNAME := $(CONFIG)
|
||||
endif
|
||||
|
||||
CPMTOOLSPATH := ../tools/cpmtools
|
||||
CPMCP := $(CPMTOOLSPATH)/cpmcp.exe
|
||||
|
||||
ROMDSKFILES := ../RomDsk/$(SYS)_$(ROMSIZE)KB/*.* ../RomDsk/cfg_$(CONFIG)/*.* ../Apps/core/*.*
|
||||
|
||||
ifeq "$(SYS)" "CPM"
|
||||
DOSBIN := bdosb01.bin
|
||||
CPBIN := ccpb03.bin
|
||||
else
|
||||
DOSBIN := zsdos.bin
|
||||
CPBIN := zcprw.bin
|
||||
endif
|
||||
|
||||
OUTDIR := ..\Output
|
||||
|
||||
TASMPATH := ../tools/tasm32
|
||||
TASM := $(TASMPATH)/tasm.exe
|
||||
TASMTABS := $(TASMPATH)
|
||||
export TASMTABS
|
||||
|
||||
ASMOPT80 := -t$(CPU) -g3
|
||||
ASMOPT85 := -t85 -g3
|
||||
|
||||
ASM80 := $(TASM) $(ASMOPT80)
|
||||
ASM85 := $(TASM) $(ASMOPT85)
|
||||
ASMIMG := $(TASM) $(ASMOPT80) -b -fE5
|
||||
|
||||
NULL :=
|
||||
SPACE := ${NULL} ${NULL}
|
||||
|
||||
%.bin: %.asm
|
||||
$(ASM80) $< $@
|
||||
|
||||
%.com: %.asm
|
||||
$(ASM80) $< $@
|
||||
|
||||
%.img: %.asm
|
||||
$(ASMIMG) $< $@
|
||||
|
||||
%.exe: %.cpp
|
||||
$(CC) $< -o $@
|
||||
|
||||
ifneq ($(MAKECMDGOALS),clean)
|
||||
ifeq "$(and $(CONFIG), $(ROMSIZE), $(CPU), $(SYS), $(ROMNAME))" ""
|
||||
$(error Usage: make CONFIG=<config> ROMSIZE=[512|1024] CPU=[80|180] SYS=[CPM|ZSYS] ROMNAME=<romname>)
|
||||
endif
|
||||
endif
|
||||
|
||||
all: $(OUTDIR)\$(ROMNAME).rom $(OUTDIR)\$(ROMNAME).sys $(OUTDIR)\$(ROMNAME).com
|
||||
|
||||
build.inc:
|
||||
echo ; >$@
|
||||
echo ; RomWBW Configured for $(CONFIG), %date% %time% >>$@
|
||||
echo ; >>$@
|
||||
echo #DEFINE TIMESTAMP "%date:~-4,4%%date:~-10,2%%date:~-7,2%T%time:~0,2%%time:~3,2%" >>$@
|
||||
echo #DEFINE VARIANT "WBW-%username%" >>$@
|
||||
echo ; >>$@
|
||||
echo ROMSIZE .EQU $(ROMSIZE) >>$@
|
||||
echo ; >>$@
|
||||
echo #INCLUDE "config_$(CONFIG).asm" >>$@
|
||||
echo ; >>$@
|
||||
|
||||
bootrom.bin : bootrom.asm std.asm build.inc ver.inc
|
||||
$(TASM) $(ASMOPT80) $< $@
|
||||
|
||||
bootapp.bin : bootapp.asm std.asm build.inc ver.inc
|
||||
$(TASM) $(ASMOPT80) $< $@
|
||||
|
||||
pgzero.bin : pgzero.asm std.asm build.inc ver.inc
|
||||
$(TASM) $(ASMOPT80) $< $@
|
||||
|
||||
zcprw.bin : zcprw.asm zcpr.asm
|
||||
$(TASM) $(ASMOPT85) $< $@
|
||||
|
||||
zsdos.bin : zsdos.asm zsdos.lib zsdos-gp.z80
|
||||
$(TASM) $(ASMOPT80) $< $@
|
||||
|
||||
cbios.bin: cbios.asm fd_data.asm ide_data.asm ppide_data.asm sd_data.asm prp_data.asm ppp_data.asm uart.asm vdu.asm std.asm ver.inc build.inc
|
||||
$(TASM) $(ASMOPT80) -dBLD_SYS=SYS_$(SYS) $< $@
|
||||
|
||||
dbgmon.bin: dbgmon.asm std.asm ver.inc build.inc
|
||||
|
||||
syscfg.bin: syscfg.asm std.asm build.inc ver.inc
|
||||
|
||||
os.bin: $(CPBIN) $(DOSBIN) cbios.bin
|
||||
copy /B $(subst $(SPACE),+,$(^)) $@
|
||||
|
||||
rom0.bin: pgzero.bin bootrom.bin syscfg.bin loader.bin romfill.bin dbgmon.bin os.bin hbfill.bin
|
||||
copy /B $(subst $(SPACE),+,$(^)) $@
|
||||
|
||||
rom1.bin: pgzero.bin bootrom.bin syscfg.bin loader.bin bnk1.bin
|
||||
copy /B $(subst $(SPACE),+,$(^)) $@
|
||||
|
||||
$(OUTDIR)\$(ROMNAME).rom: rom0.bin rom1.bin $(ROMDISKFILES) $(OUTDIR)\$(ROMNAME).sys
|
||||
copy blank$(ROMSIZE)KB.dat RomDisk.tmp
|
||||
$(CPMCP) -f rom$(ROMSIZE)KB RomDisk.tmp $(ROMDSKFILES) 0:
|
||||
$(CPMCP) -f rom$(ROMSIZE)KB RomDisk.tmp ../Output/$(ROMNAME).sys 0:$(SYS).sys
|
||||
copy /B rom0.bin+rom1.bin+RomDisk.tmp $@
|
||||
|
||||
$(OUTDIR)\$(ROMNAME).com: bootapp.bin syscfg.bin loader.bin bnk1.bin dbgmon.bin os.bin
|
||||
copy /B $(subst $(SPACE),+,$(^)) $@
|
||||
|
||||
$(OUTDIR)\$(ROMNAME).sys: prefix.bin os.bin
|
||||
copy /B $(subst $(SPACE),+,$(^)) $@
|
||||
|
||||
clean:
|
||||
if exist *.bin del *.bin
|
||||
if exist *.com del *.com
|
||||
if exist *.img del *.img
|
||||
if exist *.rom del *.rom
|
||||
if exist *.lst del *.lst
|
||||
if exist *.exp del *.exp
|
||||
if exist *.tmp del *.tmp
|
||||
if exist build.inc del build.inc
|
||||
if exist $(OUTDIR)\*.* erase /Q $(OUTDIR)\*.*
|
||||
206
trunk/Source/makefile.linux
Normal file
206
trunk/Source/makefile.linux
Normal file
@@ -0,0 +1,206 @@
|
||||
#
|
||||
# GCC based makefile
|
||||
#
|
||||
# 06/18/2012 2.0 dgg - updated for v2.0
|
||||
#
|
||||
# 02/22/2012 1.5 dgg - modified for assembly under Linux
|
||||
#
|
||||
# 01/11/2011 1.4 wbw - added support for ZSDOS/ZDDOS/ZCPR
|
||||
#
|
||||
# 12/22/2011 1.3 wbw - removed all built-in config stuff, operation is now entirely
|
||||
# dependent on variables CONFIG, ROMSIZE, and CPU
|
||||
#
|
||||
# 12/02/2011 1.3 wbw - replaced makever functionality with built-in makefile stuff
|
||||
#
|
||||
# 11/29/2011 1.3 dwg - uses makever to generate stdincl.inc from the version.hpp file
|
||||
#
|
||||
# 11/19/2011 1.3 dwg - added n8vem_vdu to "usage" and "all" rules
|
||||
# enhanced clean to get files in $(OUTDIR)
|
||||
# added custom to "all" rule
|
||||
|
||||
#
|
||||
# The operation of this makefile is entirely dependent on the setting
|
||||
# of three variables: CONFIG, ROMSIZE, and CPU:
|
||||
#
|
||||
# CONFIG determines which configuration to build which means that
|
||||
# it will determine the config_xxx.asm config settings file to
|
||||
# include as well as the output file names. So, for example,
|
||||
# if CONFIG is "n8vem", the config_n8vem.asm file will be used
|
||||
# for BIOS configuration settings and the output files will be
|
||||
# n8vem.rom, n8vem.sys, and n8vem.com.
|
||||
#
|
||||
# ROMSIZE specifies the size of the ROM image to be produced and
|
||||
# currently must be either "1024" for a 1MB ROM or "512" for a
|
||||
# 512KB ROM.
|
||||
#
|
||||
# CPU specifies the instruction set to be used in assembly and
|
||||
# must be either "80" for Z80 or "180" for Z180. Currently,
|
||||
# you should use 180 for N8 ROMs and 80 for everything else.
|
||||
#
|
||||
# SYS specifies the system variant to build in. CPM will
|
||||
# build traditional CP/M. ZSYS will build ZSystem which
|
||||
# currently means ZSDOS 1.2 & ZCPR 1.0
|
||||
#
|
||||
# ROMNAME names the output file. It defaults to
|
||||
# CONFIG. The output of the build will be:
|
||||
# <ROMNAME>.rom, <ROMNAME>.sys, and <ROMNAME>.com.
|
||||
#
|
||||
# These variables can be passed into the makefile by the command
|
||||
# line, hardcoded in this file, or set as environment variables
|
||||
# in the OS. To use a command line, use the following format:
|
||||
#
|
||||
# make CONFIG=<config> ROMSIZE=<romsize> CPU=<cpu> SYS=<sys> ROMNAME=<romname>
|
||||
#
|
||||
# An example of this is:
|
||||
#
|
||||
# make CONFIG=n8vem ROMSIZE=512 CPU=80 SYS=CPM ROMNAME=n8vem
|
||||
#
|
||||
# Alternatively, you can specify the variables by hardcoding them
|
||||
# in this file. To do so, uncomment the five lines after these
|
||||
# comments and change the values as desired.
|
||||
# If the variables are specified this way, you would then invoke
|
||||
# the make by simply using "make"
|
||||
#
|
||||
# If you want to set them as environment variables, you can
|
||||
# do this with commands like the following at an OS command
|
||||
# prompt or in a batch file:
|
||||
#
|
||||
# SET CONFIG=n8vem
|
||||
# SET ROMSIZE=512
|
||||
# SET CPU=80
|
||||
# SET SYS=CPM
|
||||
# SET ROMNAME=n8vem
|
||||
#
|
||||
# Note: use "make clean" to delete temporary and output files
|
||||
#
|
||||
# A good idea is to do a clean with every build and this can be
|
||||
# accomplished on one command line doing something like this:
|
||||
#
|
||||
# make clean all CONFIG=n8vem ROMSIZE=512 CPU=80 SYS=CPM ROMNAME=n8vem
|
||||
#
|
||||
# or, if you are using hard coded variables above:
|
||||
#
|
||||
# make clean all
|
||||
#
|
||||
# Uncomment and update values below to hardcode settings:
|
||||
#
|
||||
#CONFIG := n8vem
|
||||
#ROMSIZE := 512
|
||||
#CPU := 80
|
||||
#SYS := CPM
|
||||
#ROMNAME := n8vem
|
||||
|
||||
ifndef ROMNAME
|
||||
ROMNAME := $(CONFIG)
|
||||
endif
|
||||
|
||||
CPMCP := /usr/bin/cpmcp
|
||||
|
||||
ROMDSKFILES := ../RomDsk/$(SYS)_$(ROMSIZE)KB/*.* ../RomDsk/cfg_$(CONFIG)/*.* ../Apps/core/*.*
|
||||
|
||||
ifeq "$(SYS)" "CPM"
|
||||
DOSBIN := bdosb01.bin
|
||||
CPBIN := ccpb03.bin
|
||||
else
|
||||
DOSBIN := zsdos.bin
|
||||
CPBIN := zcprw.bin
|
||||
endif
|
||||
|
||||
OUTDIR := ../Output
|
||||
|
||||
TASM := /usr/local/bin/tasm
|
||||
TASMTABS := /usr/local/lib
|
||||
export TASMTABS
|
||||
|
||||
ASMOPT80 := -t$(CPU) -g3
|
||||
ASMOPT85 := -t85 -g3
|
||||
|
||||
ASM80 := $(TASM) $(ASMOPT80)
|
||||
ASM85 := $(TASM) $(ASMOPT85)
|
||||
ASMIMG := $(TASM) $(ASMOPT80) -b -fE5
|
||||
|
||||
NULL :=
|
||||
SPACE := ${NULL} ${NULL}
|
||||
|
||||
%.bin: %.asm
|
||||
$(ASM80) $< $@
|
||||
|
||||
%.com: %.asm
|
||||
$(ASM80) $< $@
|
||||
|
||||
%.img: %.asm
|
||||
$(ASMIMG) $< $@
|
||||
|
||||
%.exe: %.cpp
|
||||
$(CC) $< -o $@
|
||||
|
||||
ifneq ($(MAKECMDGOALS),clean)
|
||||
ifeq "$(and $(CONFIG), $(ROMSIZE), $(CPU), $(SYS), $(ROMNAME))" ""
|
||||
$(error Usage: make CONFIG=<config> ROMSIZE=[512|1024] CPU=[80|180] SYS=[CPM|ZSYS] ROMNAME=<romname>)
|
||||
endif
|
||||
endif
|
||||
|
||||
all: $(OUTDIR)/$(ROMNAME).rom $(OUTDIR)/$(ROMNAME).sys $(OUTDIR)/$(ROMNAME).com
|
||||
|
||||
build.inc:
|
||||
echo ';' >$@
|
||||
echo -n '; RomWBW Configured for '$(CONFIG)' ' >>$@
|
||||
date >> $@
|
||||
echo ; >>$@
|
||||
echo -n '#DEFINE TIMESTAMP "' >>$@
|
||||
date '+%Y %m %d %H%M"' >>$@
|
||||
echo ; >>$@
|
||||
echo '#DEFINE VARIANT "WBW-$(USERNAME)"' >>$@
|
||||
echo ; >>$@
|
||||
echo ROMSIZE .EQU $(ROMSIZE) >>$@
|
||||
echo ; >>$@
|
||||
echo '#INCLUDE "config_'$(CONFIG)'.asm"' >>$@
|
||||
echo ; >>$@
|
||||
|
||||
bootrom.bin : bootrom.asm std.asm build.inc ver.inc
|
||||
$(TASM) $(ASMOPT80) $< $@
|
||||
|
||||
bootapp.bin : bootapp.asm std.asm build.inc ver.inc
|
||||
$(TASM) $(ASMOPT80) $< $@
|
||||
|
||||
pgzero.bin : pgzero.asm std.asm build.inc ver.inc
|
||||
$(TASM) $(ASMOPT80) $< $@
|
||||
|
||||
zcprw.bin : zcprw.asm zcpr.asm
|
||||
$(TASM) $(ASMOPT85) $< $@
|
||||
|
||||
zsdos.bin : zsdos.asm zsdos.lib zsdos-gp.z80
|
||||
$(TASM) $(ASMOPT80) $< $@
|
||||
|
||||
cbios.bin: cbios.asm fd_data.asm ide_data.asm ppide_data.asm sd_data.asm prp_data.asm ppp_data.asm uart.asm vdu.asm std.asm ver.inc build.inc
|
||||
$(TASM) $(ASMOPT80) -dBLD_SYS=SYS_$(SYS) $< $@
|
||||
|
||||
dbgmon.bin: dbgmon.asm std.asm ver.inc build.inc
|
||||
|
||||
syscfg.bin: syscfg.asm std.asm build.inc ver.inc
|
||||
|
||||
os.bin: $(CPBIN) $(DOSBIN) cbios.bin
|
||||
cat $(CPBIN) $(DOSBIN) cbios.bin >>$@
|
||||
|
||||
rom0.bin: pgzero.bin bootrom.bin syscfg.bin loader.bin romfill.bin dbgmon.bin os.bin hbfill.bin
|
||||
cat pgzero.bin bootrom.bin syscfg.bin loader.bin romfill.bin dbgmon.bin os.bin hbfill.bin >>$@
|
||||
|
||||
rom1.bin: pgzero.bin bootrom.bin syscfg.bin loader.bin bnk1.bin
|
||||
cat pgzero.bin bootrom.bin syscfg.bin loader.bin bnk1.bin >>$@
|
||||
|
||||
$(OUTDIR)/$(ROMNAME).rom: rom0.bin rom1.bin $(ROMDISKFILES) $(OUTDIR)/$(ROMNAME).sys
|
||||
cp blank$(ROMSIZE)KB.dat RomDisk.tmp
|
||||
$(CPMCP) -f rom$(ROMSIZE)KB RomDisk.tmp $(ROMDSKFILES) 0:
|
||||
$(CPMCP) -f rom$(ROMSIZE)KB RomDisk.tmp ../Output/$(ROMNAME).sys 0:$(SYS).sys
|
||||
cat rom0.bin rom1.bin RomDisk.tmp >>$@
|
||||
|
||||
$(OUTDIR)/$(ROMNAME).com: bootapp.bin syscfg.bin loader.bin bnk1.bin dbgmon.bin os.bin
|
||||
cat bootapp.bin syscfg.bin loader.bin bnk1.bin dbgmon.bin os.bin >>$@
|
||||
|
||||
$(OUTDIR)/$(ROMNAME).sys: prefix.bin os.bin
|
||||
cat prefix.bin os.bin >>$@
|
||||
|
||||
clean:
|
||||
rm -f *.bin *.com *.img *.rom *.lst *.exp *.tmp
|
||||
rm -f build.inc
|
||||
rm -f $(OUTDIR)/*.*
|
||||
79
trunk/Source/memmgr.asm
Normal file
79
trunk/Source/memmgr.asm
Normal file
@@ -0,0 +1,79 @@
|
||||
;==================================================================================================
|
||||
; MEMORY PAGE MANAGEMENT
|
||||
;==================================================================================================
|
||||
;
|
||||
; PAGE THE REQUESTED 32K BLOCK OF RAM/ROM INTO THE LOWER 32K OF CPU ADDRESS SPACE.
|
||||
; LOAD DESIRED PAGE INDEX INTO A AND CALL EITHER RAMPG OR ROMPG AS DESIRED.
|
||||
; RAMPGZ AND ROMPGZ ARE SHORTCUTS TO PAGE IN THE RAM/ROM ZERO PAGE.
|
||||
;______________________________________________________________________________________________________________________
|
||||
;
|
||||
#IF (PLATFORM = PLT_N8)
|
||||
RAMPGZ: ; SELECT RAM PAGE ZERO
|
||||
XOR A
|
||||
|
||||
RAMPG:
|
||||
RLCA
|
||||
RLCA
|
||||
RLCA
|
||||
OUT0 (CPU_BBR),A
|
||||
LD A,DEFACR | 80H
|
||||
OUT0 (ACR),A
|
||||
RET
|
||||
;
|
||||
ROMPGZ: ; SELECT ROM PAGE ZERO
|
||||
XOR A
|
||||
|
||||
ROMPG:
|
||||
OUT0 (RMAP),A
|
||||
XOR A
|
||||
OUT0 (CPU_BBR),A
|
||||
LD A,DEFACR
|
||||
OUT0 (ACR),A
|
||||
RET
|
||||
#ELSE
|
||||
RAMPGZ: ; SELECT RAM PAGE ZERO
|
||||
XOR A
|
||||
|
||||
RAMPG:
|
||||
OR 80H ; TURN ON BIT 7 TO SELECT RAM PAGES
|
||||
JR PGSEL
|
||||
|
||||
ROMPGZ: ; SELECT ROM PAGE ZERO
|
||||
XOR A
|
||||
|
||||
ROMPG:
|
||||
AND 7FH ; TURN OFF BIT 7 TO SELECT ROM PAGES
|
||||
JR PGSEL
|
||||
|
||||
PGSEL:
|
||||
OUT (MPCL_ROM),A
|
||||
OUT (MPCL_RAM),A
|
||||
RET
|
||||
#ENDIF
|
||||
|
||||
;
|
||||
;______________________________________________________________________________________________________________________
|
||||
;
|
||||
; MACROS TO PERFORM RAM/ROM PAGE SELECTION INTO LOWER 32K OF MEMORY SPACE
|
||||
; PGRAM(P) SELECT RAM PAGE P
|
||||
; PGRAMF(P) SELECT RAM PAGE P, FAST VERSION ASSUMES CURRENT PAGE IS A RAM PAGE
|
||||
; PGROM(P) SELECT ROM PAGE P
|
||||
; PGROMF(P) SELECT ROM PAGE P, FAST VERSION ASSUMES CURRENT PAGE IS A ROM PAGE
|
||||
;
|
||||
; REGISTER A IS DESTROYED
|
||||
;______________________________________________________________________________________________________________________
|
||||
;
|
||||
|
||||
#IF (PLATFORM = PLT_N8)
|
||||
#DEFINE PGRAM(P) LD A,P << 3 \ OUT0 (CPU_BBR),A \ LD A,DEFACR | 80H \ OUT0 (ACR),A
|
||||
#DEFINE PGRAMF(P) LD A,P << 3 \ OUT0 (CPU_BBR),A
|
||||
|
||||
#DEFINE PGROM(P) LD A,P \ OUT0 (RMAP),A \ XOR A \ OUT0 (CPU_BBR),A \ LD A,DEFACR \ OUT0 (ACR),A
|
||||
#DEFINE PGROMF(P) LD A,P \ OUT0 (RMAP),A
|
||||
#ELSE
|
||||
#DEFINE PGRAM(P) LD A,P | 80H \ OUT (MPCL_ROM),A \ OUT (MPCL_RAM),A
|
||||
#DEFINE PGRAMF(P) LD A,P | 80H \ OUT (MPCL_RAM),A
|
||||
|
||||
#DEFINE PGROM(P) LD A,P & 7FH \ OUT (MPCL_ROM),A \ OUT (MPCL_RAM),A
|
||||
#DEFINE PGROMF(P) LD A,P & 7FH \ OUT (MPCL_ROM),A
|
||||
#ENDIF
|
||||
28
trunk/Source/pgzero.asm
Normal file
28
trunk/Source/pgzero.asm
Normal file
@@ -0,0 +1,28 @@
|
||||
;___PGZERO_____________________________________________________________________________________________________________
|
||||
;
|
||||
.ORG 0000H
|
||||
;
|
||||
; NORMAL PAGE ZERO SETUP, RET/RETI/RETN AS APPROPRIATE
|
||||
;
|
||||
.FILL (000H - $),0FFH ; RST 0
|
||||
JP 0100H ; JUMP TO BOOT CODE
|
||||
.FILL (008H - $),0FFH ; RST 8
|
||||
RET
|
||||
.FILL (010H - $),0FFH ; RST 10
|
||||
RET
|
||||
.FILL (018H - $),0FFH ; RST 18
|
||||
RET
|
||||
.FILL (020H - $),0FFH ; RST 20
|
||||
RET
|
||||
.FILL (028H - $),0FFH ; RST 28
|
||||
RET
|
||||
.FILL (030H - $),0FFH ; RST 30
|
||||
RET
|
||||
.FILL (038H - $),0FFH ; INT
|
||||
RETI
|
||||
.FILL (066H - $),0FFH ; NMI
|
||||
RETN
|
||||
;
|
||||
.FILL (100H - $),0FFH
|
||||
;
|
||||
.END
|
||||
674
trunk/Source/ppide.asm
Normal file
674
trunk/Source/ppide.asm
Normal file
@@ -0,0 +1,674 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; PPIDE DISK DRIVER
|
||||
;==================================================================================================
|
||||
;
|
||||
; 11/29/2011 dwg - DOUGDEBUG controls the embedded NOPs which adjust for
|
||||
; recovery time while using the parallel port to talk to the PPIDE and IDE
|
||||
; device. Using this stabilized by Zeta (8MHz) with a CF chip.
|
||||
;
|
||||
; 12/02/2011 wbw - renamed DOUGDEBUG to PPIDESLOW and exposed in config
|
||||
; PPIDESLOW now controls the RECOVERY macro definition.
|
||||
;
|
||||
#IF (PPIDESLOW)
|
||||
#DEFINE RECOVERY NOP\ NOP\ NOP\ NOP
|
||||
#ELSE
|
||||
#DEFINE RECOVERY ;
|
||||
#ENDIF
|
||||
;
|
||||
; 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 PIOA ; LSB
|
||||
IDEMSB .EQU PIOB ; MSB
|
||||
IDECTL .EQU PIOC ; CONTROL SIGNALS
|
||||
PPI1CONT .EQU PIOX ; CONTROL BYTE PPI 82C55
|
||||
#ENDIF
|
||||
;
|
||||
; PPI control bytes for read and write to IDE drive
|
||||
;
|
||||
RD_IDE_8255 .EQU 10010010B ; IDE_8255_CTL OUT, IDE_8255_LSB/MSB INPUT
|
||||
WR_IDE_8255 .EQU 10000000B ; ALL THREE PORTS OUTPUT
|
||||
;
|
||||
; IDE CONTROL LINES FOR USE WITH IDE_8255_CTL. CHANGE THESE 8
|
||||
; CONSTANTS TO REFLECT WHERE EACH SIGNAL OF THE 8255 EACH OF THE
|
||||
; IDE CONTROL SIGNALS IS CONNECTED. ALL THE CONTROL SIGNALS MUST
|
||||
; BE ON THE SAME PORT, BUT THESE 8 LINES LET YOU CONNECT THEM TO
|
||||
; WHICHEVER PINS ON THAT PORT.
|
||||
;
|
||||
PPIDE_A0_LINE .EQU 01H ; DIRECT FROM 8255 TO IDE INTERFACE
|
||||
PPIDE_A1_LINE .EQU 02H ; DIRECT FROM 8255 TO IDE INTERFACE
|
||||
PPIDE_A2_LINE .EQU 04H ; DIRECT FROM 8255 TO IDE INTERFACE
|
||||
PPIDE_CS0_LINE .EQU 08H ; INVERTER BETWEEN 8255 AND IDE INTERFACE
|
||||
PPIDE_CS1_LINE .EQU 10H ; INVERTER BETWEEN 8255 AND IDE INTERFACE
|
||||
PPIDE_WR_LINE .EQU 20H ; INVERTER BETWEEN 8255 AND IDE INTERFACE
|
||||
PPIDE_RD_LINE .EQU 40H ; INVERTER BETWEEN 8255 AND IDE INTERFACE
|
||||
PPIDE_RST_LINE .EQU 80H ; INVERTER BETWEEN 8255 AND IDE INTERFACE
|
||||
;
|
||||
;------------------------------------------------------------------
|
||||
; MORE SYMBOLIC CONSTANTS... THESE SHOULD NOT BE CHANGED, UNLESS OF
|
||||
; COURSE THE IDE DRIVE INTERFACE CHANGES, PERHAPS WHEN DRIVES GET
|
||||
; TO 128G AND THE PC INDUSTRY WILL DO YET ANOTHER KLUDGE.
|
||||
;
|
||||
; SOME SYMBOLIC CONSTANTS FOR THE IDE REGISTERS, WHICH MAKES THE
|
||||
; CODE MORE READABLE THAN ALWAYS SPECIFYING THE ADDRESS PINS
|
||||
;
|
||||
PPIDE_DATA .EQU PPIDE_CS0_LINE
|
||||
PPIDE_ERROR .EQU PPIDE_CS0_LINE + PPIDE_A0_LINE
|
||||
PPIDE_SEC_CNT .EQU PPIDE_CS0_LINE + PPIDE_A1_LINE
|
||||
PPIDE_SECTOR .EQU PPIDE_CS0_LINE + PPIDE_A1_LINE + PPIDE_A0_LINE
|
||||
PPIDE_CYL_LSB .EQU PPIDE_CS0_LINE + PPIDE_A2_LINE
|
||||
PPIDE_CYL_MSB .EQU PPIDE_CS0_LINE + PPIDE_A2_LINE + PPIDE_A0_LINE
|
||||
PPIDE_HEAD .EQU PPIDE_CS0_LINE + PPIDE_A2_LINE + PPIDE_A1_LINE
|
||||
PPIDE_COMMAND .EQU PPIDE_CS0_LINE + PPIDE_A2_LINE + PPIDE_A1_LINE + PPIDE_A0_LINE
|
||||
PPIDE_STTS .EQU PPIDE_CS0_LINE + PPIDE_A2_LINE + PPIDE_A1_LINE + PPIDE_A0_LINE
|
||||
PPIDE_CONTROL .EQU PPIDE_CS1_LINE + PPIDE_A2_LINE + PPIDE_A1_LINE
|
||||
PPIDE_ASTTS .EQU PPIDE_CS1_LINE + PPIDE_A2_LINE + PPIDE_A1_LINE + PPIDE_A0_LINE
|
||||
;
|
||||
; IDE COMMAND CONSTANTS. THESE SHOULD NEVER CHANGE.
|
||||
;
|
||||
PPIDECMD_RECAL .EQU 010H
|
||||
PPIDECMD_READ .EQU 020H
|
||||
PPIDECMD_WRITE .EQU 030H
|
||||
PPIDECMD_INIT .EQU 091H
|
||||
PPIDECMD_ID .EQU 0ECH
|
||||
PPIDECMD_SPINDOWN .EQU 0E0H
|
||||
PPIDECMD_SPINUP .EQU 0E1H
|
||||
PPIDECMD_SETFEAT .EQU 0EFH
|
||||
;
|
||||
PPIDERC_OK .EQU 0
|
||||
PPIDERC_CMDERR .EQU 1
|
||||
PPIDERC_RDYTO .EQU 2
|
||||
PPIDERC_BUFTO .EQU 3
|
||||
;
|
||||
; UNIT CONFIGURATION
|
||||
;
|
||||
PPIDE0_DEVICE .DB 11100000B ; LBA, MASTER DEVICE
|
||||
PPIDE1_DEVICE .DB 11110000B ; LBA, SLAVE DEVICE
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDE_DISPATCH:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F
|
||||
JR Z,PPIDE_RD
|
||||
DEC A
|
||||
JR Z,PPIDE_WR
|
||||
DEC A
|
||||
JR Z,PPIDE_ST
|
||||
DEC A
|
||||
JR Z,PPIDE_MED
|
||||
CALL PANIC
|
||||
;
|
||||
PPIDE_RD:
|
||||
JP PPIDE_XREAD
|
||||
PPIDE_WR:
|
||||
JP PPIDE_XWRITE
|
||||
PPIDE_ST:
|
||||
JP PPIDE_STATUS
|
||||
PPIDE_MED:
|
||||
JP PPIDE_MEDIA
|
||||
;
|
||||
; PPIDE_MEDIA
|
||||
;
|
||||
PPIDE_MEDIA:
|
||||
LD A,MID_HD
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDE_INIT:
|
||||
CALL PPIDE_RESET
|
||||
XOR A
|
||||
DEC A ; INITIAL STATUS IS NOT READY $FF
|
||||
LD (PPIDE_STAT),A ; SAVE IT
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDE_STATUS:
|
||||
LD A,(PPIDE_STAT) ; LOAD STATUS
|
||||
OR A ; SET FLAGS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDE_XREAD:
|
||||
LD A,PPIDECMD_READ
|
||||
LD (PPIDEP_CMD),A
|
||||
JP PPIDE_RW
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDE_XWRITE:
|
||||
LD A,PPIDECMD_WRITE
|
||||
LD (PPIDEP_CMD),A
|
||||
JP PPIDE_RW
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDE_RW:
|
||||
; CLEAR RESULTS
|
||||
XOR A ; A = 0
|
||||
LD (PPIDE_RC),A ; CLEAR RETURN CODE
|
||||
LD (PPIDEP_STTS),A ; CLEAR SAVED STTS
|
||||
LD (PPIDEP_ERR),A ; CLEAR SAVED ERR
|
||||
|
||||
; INIT REQUIRED?
|
||||
LD A,(PPIDE_STAT)
|
||||
OR A ; SET FLAGS
|
||||
JR Z,PPIDE_RW0 ; IF STATUS OK, BYPASS RESET
|
||||
|
||||
CALL PPIDE_RESET ; DO THE RESET
|
||||
|
||||
#IF (PPIDE8BIT)
|
||||
CALL PPIDE_WAITRDY
|
||||
|
||||
LD C,01H
|
||||
LD A,PPIDE_ERROR
|
||||
CALL PPIDE_WRITE
|
||||
LD C,PPIDECMD_SETFEAT
|
||||
LD A,PPIDE_COMMAND
|
||||
CALL PPIDE_WRITE
|
||||
CALL PPIDE_WAITRDY
|
||||
JP NC,PPIDE_ERR
|
||||
CALL PPIDE_CHKERR ; CHECK FOR ERRORS
|
||||
JP NC,PPIDE_ERR
|
||||
#IF (PPIDETRACE >= 2)
|
||||
CALL IDE_PRT
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
|
||||
PPIDE_RW0:
|
||||
CALL PPIDE_WAITRDY ; WAIT FOR DRIVE READY
|
||||
JP NC,PPIDE_ERR
|
||||
CALL PPIDE_SETUP ; SETUP CYL, TRK, HEAD
|
||||
LD A,(PPIDEP_CMD)
|
||||
LD C,A
|
||||
LD A,PPIDE_COMMAND
|
||||
CALL PPIDE_WRITE
|
||||
CALL PPIDE_WAITRDY ; WAIT FOR DRIVE READY
|
||||
JP NC,PPIDE_ERR
|
||||
CALL PPIDE_CHKERR ; CHECK FOR ERRORS
|
||||
JP NC,PPIDE_ERR
|
||||
CALL PPIDE_WAITBUF ; WAIT FOR BUFFER READY
|
||||
JP NC,PPIDE_ERR
|
||||
|
||||
LD A,(PPIDEP_CMD) ; DISPATCH TO READ OR WRITE SPECIFIC LOGIC
|
||||
CP PPIDECMD_WRITE
|
||||
JP Z,PPIDE_RW1
|
||||
|
||||
CALL PPIDE_BUFRD ; READ BUFFER
|
||||
CALL PPIDE_WAITRDY ; WAIT FOR DRIVE READY
|
||||
JP NC,PPIDE_ERR
|
||||
CALL PPIDE_CHKERR ; CHECK FOR ERRORS
|
||||
JP NC,PPIDE_ERR
|
||||
JP PPIDE_OK
|
||||
|
||||
PPIDE_RW1:
|
||||
CALL PPIDE_BUFWR ; WRITE BUFFER
|
||||
CALL PPIDE_WAITRDY ; WAIT FOR DRIVE READY
|
||||
JP NC,PPIDE_ERR
|
||||
CALL PPIDE_CHKERR ; CHECK FOR ERRORS
|
||||
JP NC,PPIDE_ERR
|
||||
JP PPIDE_OK
|
||||
|
||||
PPIDE_ERR:
|
||||
XOR A
|
||||
DEC A ; A = $FF TO SIGNAL ERROR
|
||||
LD (PPIDE_STAT),A ; SAVE IT
|
||||
#IF (PPIDETRACE >= 1)
|
||||
PUSH AF
|
||||
CALL PPIDE_PRT
|
||||
POP AF
|
||||
#ENDIF
|
||||
RET
|
||||
|
||||
PPIDE_OK:
|
||||
#IF (PPIDETRACE >= 2)
|
||||
CALL PPIDE_PRT
|
||||
#ENDIF
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDE_RESET:
|
||||
LD C,000001110B ; NO INTERRUPTS, ASSERT RESET BOTH DRIVES
|
||||
LD A,PPIDE_CONTROL
|
||||
CALL PPIDE_WRITE
|
||||
LD DE,8 ; DELAY ABOUT 200ms
|
||||
CALL VDELAY
|
||||
LD C,000000010B ; NO INTERRUPTS, DEASSERT RESET
|
||||
LD A,PPIDE_CONTROL
|
||||
CALL PPIDE_WRITE
|
||||
XOR A ; STATUS OK
|
||||
LD (PPIDE_STAT),A ; SAVE IT
|
||||
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDE_WAITRDY:
|
||||
LD DE,0 ; TIMEOUT IS 250us * 65536 = 15 SECONDS
|
||||
PPIDE_WBSY:
|
||||
PUSH DE
|
||||
LD DE,10 ; INNER LOOP DELAY IS 250us (25us * 10)
|
||||
CALL VDELAY
|
||||
POP DE
|
||||
DEC DE
|
||||
LD A,D
|
||||
OR E
|
||||
JP Z,PPIDE_TO
|
||||
LD A,PPIDE_STTS
|
||||
CALL PPIDE_READ
|
||||
LD A,C
|
||||
LD (PPIDEP_STTS),A ; SAVE IT
|
||||
AND 011000000B ; ISOLATE BUSY AND RDY BITS
|
||||
XOR 001000000B ; WE WANT BUSY(7) TO BE 0 AND RDY(6) TO BE 1
|
||||
JP NZ,PPIDE_WBSY
|
||||
SCF ; CARRY 1 = OK
|
||||
RET
|
||||
PPIDE_TO:
|
||||
LD A,PPIDERC_RDYTO
|
||||
LD (PPIDE_RC),A
|
||||
XOR A ; CARRY 0 = TIMEOUT
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDE_CHKERR:
|
||||
LD A,PPIDE_STTS
|
||||
CALL PPIDE_READ
|
||||
LD A,C
|
||||
LD (PPIDEP_STTS),A ; SAVE IT
|
||||
AND 000000001B ; ERROR BIT SET?
|
||||
SCF ; ASSUME NO ERR
|
||||
RET Z ; NO ERR, RETURN WITH CF SET
|
||||
|
||||
LD A,PPIDE_ERROR
|
||||
CALL PPIDE_READ
|
||||
LD A,C
|
||||
LD (PPIDEP_ERR),A ; SAVE IT
|
||||
|
||||
LD A,PPIDERC_CMDERR ; COMMAND ERROR
|
||||
LD (PPIDE_RC),A ; SAVE IT
|
||||
|
||||
OR A ; CLEAR CF TO SIGNAL ERROR
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDE_WAITBUF:
|
||||
LD DE,0
|
||||
PPIDE_WDRQ:
|
||||
CALL DELAY
|
||||
INC DE
|
||||
LD A,D
|
||||
OR E
|
||||
JP Z,PPIDE_TO2
|
||||
LD A,PPIDE_STTS
|
||||
CALL PPIDE_READ
|
||||
LD A,C
|
||||
LD (PPIDEP_STTS),A ; SAVE IT
|
||||
AND 010001000B ; TO FILL (OR READY TO FILL)
|
||||
XOR 000001000B
|
||||
JP NZ,PPIDE_WDRQ
|
||||
SCF ; CARRY 1 = OK
|
||||
RET
|
||||
PPIDE_TO2:
|
||||
LD A,PPIDERC_BUFTO
|
||||
LD (PPIDE_RC),A
|
||||
XOR A ; CARRY 0 = TIMED OUT
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
#IF (PPIDE8BIT)
|
||||
PPIDE_BUFRD:
|
||||
LD HL,(DIOBUF)
|
||||
LD DE,200H
|
||||
PPIDE_BUFRD1:
|
||||
LD A,PPIDE_DATA
|
||||
CALL PPIDE_READ
|
||||
LD (HL),C
|
||||
INC HL
|
||||
DEC DE
|
||||
LD A,D
|
||||
OR E
|
||||
JP NZ,PPIDE_BUFRD1
|
||||
RET
|
||||
#ELSE
|
||||
PPIDE_BUFRD:
|
||||
LD HL,(DIOBUF)
|
||||
LD D,0
|
||||
PPIDE_BUFRD1:
|
||||
LD A,PPIDE_DATA
|
||||
CALL PPIDE_READ
|
||||
LD (HL),C
|
||||
INC HL
|
||||
LD (HL),B
|
||||
INC HL
|
||||
DEC D
|
||||
JP NZ,PPIDE_BUFRD1
|
||||
RET
|
||||
#ENDIF
|
||||
;
|
||||
;
|
||||
;
|
||||
#IF (PPIDE8BIT)
|
||||
PPIDE_BUFWR:
|
||||
LD HL,(DIOBUF)
|
||||
LD DE,200H
|
||||
PPIDE_BUFWR1:
|
||||
LD C,(HL)
|
||||
LD A,PPIDE_DATA
|
||||
CALL PPIDE_WRITE
|
||||
INC HL
|
||||
DEC DE
|
||||
LD A,D
|
||||
OR E
|
||||
JP NZ,PPIDE_BUFWR1
|
||||
#ELSE
|
||||
PPIDE_BUFWR:
|
||||
LD HL,(DIOBUF)
|
||||
LD D,0
|
||||
PPIDE_BUFWR1:
|
||||
LD C,(HL)
|
||||
INC HL
|
||||
LD B,(HL)
|
||||
INC HL
|
||||
LD A,PPIDE_DATA
|
||||
CALL PPIDE_WRITE
|
||||
DEC D
|
||||
JP NZ,PPIDE_BUFWR1
|
||||
RET
|
||||
#ENDIF
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDE_SETUP:
|
||||
LD C,1
|
||||
LD A,PPIDE_SEC_CNT
|
||||
CALL PPIDE_WRITE
|
||||
|
||||
LD A,(HSTDSK) ; HSTDSK -> HEAD BIT 4 TO SELECT UNIT
|
||||
AND 0FH
|
||||
CP 0
|
||||
JP Z,PPIDE_SETUP_UNIT0
|
||||
CP 1
|
||||
JP Z,PPIDE_SETUP_UNIT1
|
||||
CALL PANIC
|
||||
PPIDE_SETUP_UNIT0:
|
||||
LD A,(PPIDE0_DEVICE)
|
||||
; LD DE,(PPIDE0_OFFSET)
|
||||
JP PPIDE_SETUP1
|
||||
PPIDE_SETUP_UNIT1:
|
||||
LD A,(PPIDE1_DEVICE)
|
||||
; LD DE,(PPIDE1_OFFSET)
|
||||
JP PPIDE_SETUP1
|
||||
PPIDE_SETUP1:
|
||||
LD (PPIDEP_HEAD),A
|
||||
LD C,A
|
||||
LD A,PPIDE_HEAD
|
||||
CALL PPIDE_WRITE
|
||||
|
||||
LD HL,(HSTTRK) ; HSTTRK -> IDECYLHI/LO
|
||||
LD A,H
|
||||
LD (PPIDEP_CYLHI),A
|
||||
LD C,A
|
||||
LD A,PPIDE_CYL_MSB
|
||||
CALL PPIDE_WRITE
|
||||
LD A,L
|
||||
LD (PPIDEP_CYLLO),A
|
||||
LD C,A
|
||||
LD A,PPIDE_CYL_LSB
|
||||
CALL PPIDE_WRITE
|
||||
|
||||
LD BC,(HSTSEC) ; HSTSEC -> IDESECTN
|
||||
LD A,C
|
||||
LD (PPIDEP_SEC),A
|
||||
LD C,A
|
||||
LD A,PPIDE_SECTOR
|
||||
CALL PPIDE_WRITE
|
||||
|
||||
#IF (DSKYENABLE)
|
||||
CALL PPIDE_DSKY
|
||||
#ENDIF
|
||||
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDE_READ:
|
||||
PUSH AF ; save register value
|
||||
LD A,RD_IDE_8255
|
||||
OUT (PPI1CONT),A ; Config 8255 chip, read mode
|
||||
RECOVERY
|
||||
POP AF ; restore register value
|
||||
|
||||
OUT (IDECTL),A ; Drive address onto control lines
|
||||
RECOVERY
|
||||
OR PPIDE_RD_LINE ; assert RD pin
|
||||
|
||||
OUT (IDECTL),A
|
||||
RECOVERY
|
||||
|
||||
PUSH AF ; save register value
|
||||
IN A,(IDELSB) ; read lower byte
|
||||
RECOVERY
|
||||
LD C,A ; save in reg C
|
||||
|
||||
IN A,(IDEMSB) ; read upper byte
|
||||
RECOVERY
|
||||
LD B,A ; save in reg C
|
||||
|
||||
POP AF ; restore register value
|
||||
XOR PPIDE_RD_LINE ; de-assert RD signal
|
||||
OUT (IDECTL),A
|
||||
RECOVERY
|
||||
|
||||
XOR A
|
||||
OUT (IDECTL),A ; Deassert all control pins
|
||||
RECOVERY
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDE_WRITE:
|
||||
PUSH AF ; save IDE register value
|
||||
LD A,WR_IDE_8255
|
||||
OUT (PPI1CONT),A ; Config 8255 chip, write mode
|
||||
RECOVERY
|
||||
|
||||
LD A,C ; get value to be written
|
||||
OUT (IDELSB),A
|
||||
RECOVERY
|
||||
|
||||
LD A,B ; get value to be written
|
||||
OUT (IDEMSB),A
|
||||
RECOVERY
|
||||
|
||||
|
||||
POP AF ; get saved IDE register
|
||||
OUT (IDECTL),A ; Drive address onto control lines
|
||||
RECOVERY
|
||||
OR PPIDE_WR_LINE ; assert write pin
|
||||
OUT (IDECTL),A
|
||||
RECOVERY
|
||||
|
||||
XOR PPIDE_WR_LINE ; de assert WR pin
|
||||
OUT (IDECTL),A ; Drive address onto control lines
|
||||
RECOVERY
|
||||
|
||||
XOR A
|
||||
OUT (IDECTL),A ; release bus signals
|
||||
RECOVERY
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
#IF (DSKYENABLE)
|
||||
PPIDE_DSKY:
|
||||
LD HL,DSKY_HEXBUF
|
||||
LD A,(PPIDEP_HEAD)
|
||||
LD (HL),A
|
||||
INC HL
|
||||
LD A,(PPIDEP_CYLHI)
|
||||
LD (HL),A
|
||||
INC HL
|
||||
LD A,(PPIDEP_CYLLO)
|
||||
LD (HL),A
|
||||
INC HL
|
||||
LD A,(PPIDEP_SEC)
|
||||
LD (HL),A
|
||||
CALL DSKY_HEXOUT
|
||||
RET
|
||||
#ENDIF
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDE_PRT:
|
||||
CALL NEWLINE
|
||||
|
||||
LD DE,PPIDESTR_PREFIX
|
||||
CALL WRITESTR
|
||||
|
||||
CALL PC_SPACE
|
||||
LD DE,PPIDESTR_CMD
|
||||
CALL WRITESTR
|
||||
LD A,(PPIDEP_CMD)
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
CALL PC_SPACE
|
||||
CALL PC_LBKT
|
||||
LD A,(PPIDEP_CMD)
|
||||
LD DE,PPIDESTR_READ
|
||||
CP PPIDECMD_READ
|
||||
JP Z,PPIDE_PRTCMD
|
||||
LD DE,PPIDESTR_WRITE
|
||||
CP PPIDECMD_READ
|
||||
JP Z,PPIDE_PRTCMD
|
||||
LD DE,PPIDESTR_UNKCMD
|
||||
PPIDE_PRTCMD:
|
||||
CALL WRITESTR
|
||||
CALL PC_RBKT
|
||||
|
||||
CALL PC_SPACE
|
||||
LD A,(PPIDEP_HEAD)
|
||||
CALL PRTHEXBYTE
|
||||
LD A,(PPIDEP_CYLHI)
|
||||
CALL PRTHEXBYTE
|
||||
LD A,(PPIDEP_CYLLO)
|
||||
CALL PRTHEXBYTE
|
||||
LD A,(PPIDEP_SEC)
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
CALL PC_SPACE
|
||||
LD DE,PPIDESTR_ARROW
|
||||
CALL WRITESTR
|
||||
|
||||
CALL PC_SPACE
|
||||
LD A,PPIDE_STTS
|
||||
CALL PPIDE_READ
|
||||
LD A,C
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
CALL PC_SPACE
|
||||
LD A,PPIDE_ERROR
|
||||
CALL PPIDE_READ
|
||||
LD A,C
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
CALL PC_SPACE
|
||||
LD DE,PPIDESTR_RC
|
||||
CALL WRITESTR
|
||||
LD A,(PPIDE_RC)
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
CALL PC_SPACE
|
||||
CALL PC_LBKT
|
||||
LD A,(PPIDE_RC)
|
||||
LD DE,PPIDESTR_RCOK
|
||||
CP PPIDERC_OK
|
||||
JP Z,PPIDE_PRTRC
|
||||
LD DE,PPIDESTR_RCCMDERR
|
||||
CP PPIDERC_CMDERR
|
||||
JP Z,PPIDE_PRTRC
|
||||
LD DE,PPIDESTR_RCRDYTO
|
||||
CP PPIDERC_RDYTO
|
||||
JP Z,PPIDE_PRTRC
|
||||
LD DE,PPIDESTR_RCBUFTO
|
||||
CP PPIDERC_BUFTO
|
||||
JP Z,PPIDE_PRTRC
|
||||
LD DE,PPIDESTR_RCUNK
|
||||
PPIDE_PRTRC:
|
||||
CALL WRITESTR
|
||||
CALL PC_RBKT
|
||||
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDESTR_PREFIX .TEXT "PPIDE:$"
|
||||
PPIDESTR_CMD .TEXT "CMD=$"
|
||||
PPIDESTR_RC .TEXT "RC=$"
|
||||
PPIDESTR_ARROW .TEXT "-->$"
|
||||
PPIDESTR_READ .TEXT "READ$"
|
||||
PPIDESTR_WRITE .TEXT "WRITE$"
|
||||
PPIDESTR_UNKCMD .TEXT "UNKCMD"
|
||||
PPIDESTR_RCOK .TEXT "OK$"
|
||||
PPIDESTR_RCCMDERR .TEXT "COMMAND ERROR$"
|
||||
PPIDESTR_RCRDYTO .TEXT "READY TIMEOUT$"
|
||||
PPIDESTR_RCBUFTO .TEXT "BUFFER TIMEOUT$"
|
||||
PPIDESTR_RCUNK .TEXT "UNKNOWN ERROR$"
|
||||
;
|
||||
;==================================================================================================
|
||||
; PPIDE DISK DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
PPIDE_STAT .DB 0
|
||||
PPIDE_RC .DB 0
|
||||
;
|
||||
; PPIDE PARAMETERS
|
||||
;
|
||||
PPIDEP_CMD .DB 0
|
||||
PPIDEP_HEAD .DB 0
|
||||
PPIDEP_CYLHI .DB 0
|
||||
PPIDEP_CYLLO .DB 0
|
||||
PPIDEP_SEC .DB 0
|
||||
PPIDEP_STTS .DB 0
|
||||
PPIDEP_ERR .DB 0
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
; Error Register (ERR bit being set in the Status Register)
|
||||
;
|
||||
; Bit 7: BBK (Bad Block Detected) Set when a Bad Block is detected.
|
||||
; Bit 6: UNC (Uncorrectable Data Error) Set when Uncorrectable Error is encountered.
|
||||
; Bit 5: MC (Media Changed) Set to 0.
|
||||
; Bit 4: IDNF (ID Not Found) Set when Sector ID not found.
|
||||
; Bit 3: MCR (Media Change Request) Set to 0.
|
||||
; Bit 2: ABRT (Aborted Command) Set when Command Aborted due to drive error.
|
||||
; Bit 1: TKONF (Track 0 Not Found) Set when Executive Drive Diagnostic Command.
|
||||
; Bit 0: AMNF (Address mark Not Found) Set in case of a general error.
|
||||
;
|
||||
; Status Register (When the contents of this register are read by the host, the IREQ# bit is cleared)
|
||||
;
|
||||
; Bit 7: BSY (Busy) Set when the drive is busy and unable to process any new ATA commands.
|
||||
; Bit 6: DRDY (Data Ready) Set when the device is ready to accept ATA commands from the host.
|
||||
; Bit 5: DWF (Drive Write Fault) Always set to 0.
|
||||
; Bit 4: DSC (Drive Seek Complete) Set when the drive heads have been positioned over a specific track.
|
||||
; Bit 3: DRQ (Data Request) Set when device is ready to transfer a word or byte of data to or from the host and the device.
|
||||
; Bit 2: CORR (Corrected Data) Always set to 0.
|
||||
; Bit 1: IDX (Index) Always set to 0.
|
||||
; Bit 0: ERR (Error) Set when an error occurred during the previous ATA command.
|
||||
61
trunk/Source/ppide_data.asm
Normal file
61
trunk/Source/ppide_data.asm
Normal file
@@ -0,0 +1,61 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; PPIDE DISK DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
PPIDE_SLICETRKS .EQU 65 ; TRACKS PER SLICE
|
||||
PPIDE_TRKSIZE .EQU 128 ; SIZE OF TRACK (IN KB)
|
||||
PPIDE_SLICESIZE .EQU ((PPIDE_SLICETRKS * PPIDE_TRKSIZE) + 1023) / 1024 ; SIZE OF EACH SLICE (IN MB)
|
||||
PPIDE_NUMSLICES .EQU PPIDECAPACITY / PPIDE_SLICESIZE ; TOTAL SLICES IN DEVICE
|
||||
PPIDE0_SLICEDEF .EQU 0 ; DEFAULT SLICE FOR UNIT 0
|
||||
PPIDE1_SLICEDEF .EQU 1 ; DEFAULT SLICE FOR UNIT 1
|
||||
PPIDE2_SLICEDEF .EQU 2 ; DEFAULT SLICE FOR UNIT 0
|
||||
PPIDE3_SLICEDEF .EQU 3 ; DEFAULT SLICE FOR UNIT 1
|
||||
;
|
||||
.DB DIODEV_PPIDE + 0
|
||||
PPIDEDPH0 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW PPIDECSV0,PPIDEALV0
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
PPIDE0_SLICE .DW PPIDE0_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW PPIDE_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
.DB DIODEV_PPIDE + 0
|
||||
PPIDEDPH1 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,0FFFFH
|
||||
.DW PPIDECSV1,PPIDEALV1
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
PPIDE1_SLICE .DW PPIDE1_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW PPIDE_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
.DB DIODEV_PPIDE + 0
|
||||
PPIDEDPH2 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,0FFFFH
|
||||
.DW PPIDECSV2,PPIDEALV2
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
PPIDE2_SLICE .DW PPIDE2_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW PPIDE_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
.DB DIODEV_PPIDE + 0
|
||||
PPIDEDPH3 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,0FFFFH
|
||||
.DW PPIDECSV3,PPIDEALV3
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
PPIDE3_SLICE .DW PPIDE3_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW PPIDE_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
PPIDECKS .EQU 0 ; CKS: 0 FOR NON-REMOVABLE MEDIA
|
||||
PPIDEALS .EQU 256 ; ALS: BLKS / 8 = 2048 / 8 = 256 (ROUNDED UP)
|
||||
;
|
||||
PPIDECSV0: .FILL PPIDECKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
PPIDEALV0: .FILL PPIDEALS ; MAX OF 2048 DATA BLOCKS
|
||||
PPIDECSV1: .FILL PPIDECKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
PPIDEALV1: .FILL PPIDEALS ; MAX OF 2048 DATA BLOCKS
|
||||
PPIDECSV2: .FILL PPIDECKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
PPIDEALV2: .FILL PPIDEALS ; MAX OF 2048 DATA BLOCKS
|
||||
PPIDECSV3: .FILL PPIDECKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
PPIDEALV3: .FILL PPIDEALS ; MAX OF 2048 DATA BLOCKS
|
||||
472
trunk/Source/ppp.asm
Normal file
472
trunk/Source/ppp.asm
Normal file
@@ -0,0 +1,472 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; PARPORTPROP DRIVER
|
||||
;==================================================================================================
|
||||
;
|
||||
; COMMAND BYTES
|
||||
;
|
||||
PPP_CMDNOP .EQU $00 ; DO NOTHING
|
||||
PPP_CMDECHOBYTE .EQU $01 ; RECEIVE A BYTE, INVERT IT, SEND IT BACK
|
||||
PPP_CMDECHOBUF .EQU $02 ; RECEIVE 512 BYTE BUFFER, SEND IT BACK
|
||||
;
|
||||
PPP_CMDDSKRES .EQU $10 ; RESTART SD CARD SUPPORT
|
||||
PPP_CMDDSKSTAT .EQU $11 ; SEND LAST SD CARD STATUS (4 BYTES)
|
||||
PPP_CMDDSKPUT .EQU $12 ; PPI -> SECTOR BUFFER -> PPP
|
||||
PPP_CMDDSKGET .EQU $13 ; PPP -> SECTOR BUFFER -> PPI
|
||||
PPP_CMDDSKRD .EQU $14 ; READ SCTOR FROM SD CARD INTO PPP BUFFER, RETURN 1 BYTE STATUS
|
||||
PPP_CMDDSKWR .EQU $15 ; WRITE SECTOR TO SD CARD FROM PPP BUFFER, RETURN 1 BYTE STATUS
|
||||
;
|
||||
PPP_CMDVIDOUT .EQU $20 ; WRITE A BYTE TO THE TERMINAL EMULATOR
|
||||
;
|
||||
PPP_CMDKBDSTAT .EQU $30 ; RETURN A BYTE WITH NUMBER OF CHARACTERS IN BUFFER
|
||||
PPP_CMDKBDRD .EQU $31 ; RETURN A CHARACTER, WAIT IF NECESSARY
|
||||
;
|
||||
PPP_CMDSPKTONE .EQU $40 ; EMIT SPEAKER TONE AT SPECIFIED FREQUENCY AND DURATION
|
||||
;
|
||||
PPP_CMDSIOINIT .EQU $50 ; RESET SERIAL PORT AND ESTABLISH A NEW BAUD RATE (4 BYTE BAUD RATE)
|
||||
PPP_CMDSIORX .EQU $51 ; RECEIVE A BYTE IN FROM SERIAL PORT
|
||||
PPP_CMDSIOTX .EQU $52 ; TRANSMIT A BYTE OUT OF THE SERIAL PORT
|
||||
PPP_CMDSIORXST .EQU $53 ; SERIAL PORT RECEIVE STATUS (RETURNS # BYTES OF RX BUFFER USED)
|
||||
PPP_CMDSIOTXST .EQU $54 ; SERIAL PORT TRANSMIT STATUS (RETURNS # BYTES OF TX BUFFER SPACE AVAILABLE)
|
||||
PPP_CMDSIORXFL .EQU $55 ; SERIAL PORT RECEIVE BUFFER FLUSH
|
||||
PPP_CMDSIOTXFL .EQU $56 ; SERIAL PORT TRANSMIT BUFFER FLUSH (NOT IMPLEMENTED)
|
||||
;
|
||||
PPP_CMDRESET .EQU $F0 ; SOFT RESET PROPELLER
|
||||
;
|
||||
; GLOBAL PARPORTPROP INITIALIZATION
|
||||
;
|
||||
PPP_INIT:
|
||||
LD A,$9B ; PPI MODE 0, ALL PINS INPUT
|
||||
OUT (PIOX),A ; SEND IT
|
||||
|
||||
LD A,11000010B ; PPI MODE 2 (BI HANDSHAKE), PC0-2 OUT, PB IN
|
||||
OUT (PIOX),A
|
||||
|
||||
CALL DELAY ; PROBABLY NOT NEEDED
|
||||
|
||||
LD A,00000000B ; SET PC0 -> 0
|
||||
OUT (PIOX),A
|
||||
LD A,00000010B ; SET PC1 -> 0
|
||||
OUT (PIOX),A
|
||||
LD A,00000101B ; SET PC2 -> 1 - ASSERT RESET ON PPP
|
||||
OUT (PIOX),A
|
||||
LD A,00000110B ; SET PC3 -> 0
|
||||
OUT (PIOX),A
|
||||
|
||||
CALL DELAY ; PROBABLY NOT NEEDED
|
||||
|
||||
IN A,(PIOA) ; CLEAR GARBAGE???
|
||||
|
||||
CALL DELAY ; PROBABLY NOT NEEDED
|
||||
|
||||
LD A,00000001B ; SET CMD FLAG
|
||||
OUT (PIOX),A ; SEND IT
|
||||
LD E,PPP_CMDRESET
|
||||
CALL PUTBYTE ; SEND THE COMMAND BYTE
|
||||
CALL DELAY
|
||||
LD A,00000000B ; CLEAR CMD FLAG
|
||||
OUT (PIOX),A
|
||||
|
||||
LD A,00000100B ; SET PC2 -> 0 - DEASSERT RESET ON PPP
|
||||
OUT (PIOX),A
|
||||
|
||||
CALL DELAY ; PROBABLY NOT NEEDED
|
||||
|
||||
LD BC,0
|
||||
INIT1:
|
||||
PUSH BC
|
||||
CALL DELAY
|
||||
CALL DELAY
|
||||
CALL DELAY
|
||||
CALL DELAY
|
||||
IN A,(PIOA)
|
||||
POP BC
|
||||
CP $AA
|
||||
RET Z
|
||||
DEC BC
|
||||
LD A,B
|
||||
OR C
|
||||
JR NZ,INIT1
|
||||
|
||||
CALL NEWLINE
|
||||
LD DE,PPPSTR_TIMEOUT
|
||||
CALL WRITESTR
|
||||
|
||||
CALL PPPSD_INIT ; SD CARD INITIALIZATION
|
||||
|
||||
RET
|
||||
;
|
||||
;==================================================================================================
|
||||
; PARPORTPROP CONSOLE DRIVER
|
||||
;==================================================================================================
|
||||
;
|
||||
; DISPATCH FOR CONSOLE SUBFUNCTIONS
|
||||
;
|
||||
PPPCON_DISPATCH:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JR Z,PPPCON_IN ; JUMP IF CHARACTER IN
|
||||
DEC A ; NEXT SUBFUNCTION
|
||||
JR Z,PPPCON_OUT ; JUMP IF CHARACTER OUT
|
||||
DEC A ; NEXT SUBFUCNTION
|
||||
JR Z,PPPCON_IST ; JUMP IF INPUT STATUS
|
||||
DEC A ; NEXT SUBFUNCTION
|
||||
JR Z,PPPCON_OST ; JUMP IF OUTPUT STATUS
|
||||
CALL PANIC ; OTHERWISE SOMETHING IS BADLY BROKEN
|
||||
;
|
||||
; CHARACTER INPUT
|
||||
; WAIT FOR A CHARACTER AND RETURN IT IN E
|
||||
;
|
||||
PPPCON_IN:
|
||||
CALL PPPCON_IST ; CHECK FOR CHAR PENDING
|
||||
JR Z,PPPCON_IN ; WAIT FOR IT IF NECESSARY
|
||||
LD D,PPP_CMDKBDRD ; CMD = KEYBOARD READ
|
||||
CALL SENDCMD ; SEND COMMAND
|
||||
CALL GETBYTE ; GET CHARACTER READ
|
||||
XOR A ; CLEAR A (SUCCESS)
|
||||
RET ; AND RETURN
|
||||
;
|
||||
; CHARACTER INPUT STATUS
|
||||
; RETURN STATUS IN A, 0 = NOTHING PENDING, > 0 CHAR PENDING
|
||||
;
|
||||
PPPCON_IST:
|
||||
LD D,PPP_CMDKBDSTAT ; CMD = KEYBOARD STATUS
|
||||
CALL SENDCMD ; SEND COMMAND
|
||||
CALL GETBYTE ; GET RESPONSE
|
||||
LD A,E ; MOVE IT TO A
|
||||
OR A ; SET FLAGS
|
||||
RET NZ ; A <> 0, CHAR(S) PENDING
|
||||
JP CIO_IDLE ; OTHERWISE RET VIA IDLE PROCESSING
|
||||
;
|
||||
; CHARACTER OUTPUT
|
||||
; WRITE CHARACTER IN E
|
||||
;
|
||||
PPPCON_OUT:
|
||||
CALL PPPCON_OST ; CHECK FOR OUTPUT READY
|
||||
JR Z,PPPCON_OUT ; WAIT IF NECESSARY
|
||||
LD D,PPP_CMDVIDOUT ; CMD = VIDEO OUTPUT
|
||||
CALL SENDCMD ; SEND COMMAND
|
||||
CALL PUTBYTE ; SEND IT
|
||||
RET ; RETURN
|
||||
;
|
||||
; CHARACTER OUTPUT STATUS
|
||||
; RETURN STATUS IN A, 0 = NOT READY, > 0 READY TO SEND
|
||||
; CONSOLE IS ALWAYS READY TO SEND (SYNCHRONOUS OUTPUT)
|
||||
;
|
||||
PPPCON_OST:
|
||||
XOR A ; SET A=$01 TO SIGNAL READY
|
||||
INC A
|
||||
RET
|
||||
;
|
||||
;==================================================================================================
|
||||
; PARPORTPROP SD CARD DRIVER
|
||||
;==================================================================================================
|
||||
;
|
||||
PPPSD_DISPATCH:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F
|
||||
JP Z,PPPSD_READ ; READ
|
||||
DEC A
|
||||
JP Z,PPPSD_WRITE ; WRITE
|
||||
DEC A
|
||||
JP Z,PPPSD_STATUS ; STATUS
|
||||
DEC A
|
||||
JP Z,PPPSD_MEDIA ; MEDIA ID
|
||||
CALL PANIC
|
||||
;
|
||||
; SETUP FOR SUBSEQUENT ACCESS
|
||||
; INIT CARD IF NOT READY OR ON DRIVE LOG IN
|
||||
;
|
||||
PPPSD_MEDIA:
|
||||
; REINITIALIZE THE CARD HERE TO DETERMINE PRESENCE
|
||||
CALL PPPSD_INITCARD
|
||||
LD A,MID_NONE ; ASSUME FAILURE
|
||||
RET NZ
|
||||
|
||||
; ALL IS WELL, RETURN MEDIA IDENTIFIER
|
||||
LD A,MID_HD ; SET MEDIA ID
|
||||
RET
|
||||
;
|
||||
; SD CARD INITIALIZATION
|
||||
;
|
||||
PPPSD_INIT:
|
||||
; MARK DRIVE NOT READY
|
||||
; HARDWARE INIT DEFERRED UNTIL DRIVE SELECT
|
||||
XOR A
|
||||
DEC A
|
||||
LD (PPPSD_STAT),A
|
||||
RET
|
||||
;
|
||||
; REPORT SD CARD READY STATE
|
||||
;
|
||||
PPPSD_STATUS:
|
||||
LD A,(PPPSD_STAT) ; GET THE CURRENT READY STATUS
|
||||
OR A
|
||||
RET
|
||||
;
|
||||
; READ AN LBA BLOCK FROM THE SD CARD
|
||||
;
|
||||
PPPSD_READ:
|
||||
CALL PPPSD_CHKCARD ; CHECK / REINIT CARD AS NEEDED
|
||||
RET NZ ; BAIL OUT ON ERROR
|
||||
|
||||
; READ A SECTOR
|
||||
CALL PPPSD_SETBLK ; SETUP PPP_LBA WITH BLOCK NUMBER
|
||||
LD D,PPP_CMDDSKRD ; COMMAND = DSKWR
|
||||
CALL SENDCMD ; SEND COMMAND
|
||||
CALL PPPSD_SENDBLK ; SEND THE LBA BLOCK NUMBER
|
||||
CALL GETBYTE
|
||||
LD A,E
|
||||
LD (PPPSD_STAT),A ; SAVE STATUS
|
||||
CALL PPPSD_PRTREAD ; PRINT DIAGNOSTICS AS NEEDED
|
||||
OR A ; SET FLAGS
|
||||
RET NZ ; BAIL OUT ON ERROR
|
||||
|
||||
; GET THE SECTOR DATA
|
||||
LD D,PPP_CMDDSKGET ; COMMAND = DSKGET
|
||||
CALL SENDCMD ; SEND COMMAND
|
||||
|
||||
; READ THE SECTOR DATA
|
||||
LD BC,512
|
||||
LD HL,(DIOBUF)
|
||||
DSKREAD1:
|
||||
CALL GETBYTE
|
||||
LD (HL),E
|
||||
INC HL
|
||||
DEC BC
|
||||
LD A,B
|
||||
OR C
|
||||
JP NZ,DSKREAD1
|
||||
|
||||
XOR A ; SUCCESS
|
||||
RET
|
||||
;
|
||||
; WRITE AN LBA BLOCK TO THE SD CARD
|
||||
;
|
||||
PPPSD_WRITE:
|
||||
CALL PPPSD_CHKCARD ; CHECK / REINIT CARD AS NEEDED
|
||||
RET NZ ; BAIL OUT ON ERROR
|
||||
|
||||
CALL PPPSD_SETBLK ; SETUP THE LBA BLOCK INDEX
|
||||
|
||||
; PUT THE SECTOR DATA
|
||||
LD D,PPP_CMDDSKPUT ; COMMAND = DSKPUT
|
||||
CALL SENDCMD ; SEND COMMAND
|
||||
|
||||
; SEND OVER THE SECTOR CONTENTS
|
||||
LD BC,512
|
||||
LD HL,(DIOBUF)
|
||||
DSKWRITE1:
|
||||
LD E,(HL)
|
||||
INC HL
|
||||
CALL PUTBYTE
|
||||
DEC BC
|
||||
LD A,B
|
||||
OR C
|
||||
JP NZ,DSKWRITE1
|
||||
|
||||
; WRITE THE SECTOR
|
||||
LD D,PPP_CMDDSKWR ; COMMAND = DSKWR
|
||||
CALL SENDCMD
|
||||
CALL PPPSD_SENDBLK ; SEND THE LBA BLOCK NUMBER
|
||||
CALL GETBYTE
|
||||
LD A,E
|
||||
LD (PPPSD_STAT),A ; SAVE STATUS
|
||||
CALL PPPSD_PRTWRITE ; PRINT DIAGNOSTICS AS NEEDED
|
||||
OR A ; SET FLAGS
|
||||
RET ; ALL DONE
|
||||
;
|
||||
; REINITIALIZE THE SD CARD
|
||||
;
|
||||
PPPSD_INITCARD:
|
||||
; RESET & STATUS DISK
|
||||
LD D,PPP_CMDDSKRES ; COMMAND = DSKRESET
|
||||
CALL SENDCMD
|
||||
CALL GETBYTE
|
||||
LD A,E
|
||||
LD (PPPSD_STAT),A ; SAVE UPDATED STATUS
|
||||
OR A
|
||||
RET ; Z/NZ SET, A HAS RESULT CODE
|
||||
;
|
||||
; CHECK THE SD CARD, ATTEMPT TO REINITIALIZE IF NEEDED
|
||||
;
|
||||
PPPSD_CHKCARD:
|
||||
LD A,(PPPSD_STAT) ; GET STATUS
|
||||
OR A ; SET FLAGS
|
||||
CALL NZ,PPPSD_INITCARD ; INIT CARD IF NOT READY
|
||||
RET ; RETURN WITH STATUS IN A
|
||||
;
|
||||
; SET UP LBA BLOCK INDEX BASED ON HSTTRK AND HSTSEC
|
||||
; NOTE THAT BYTE ORDER IS LITTLE ENDIAN FOR PROPLELLER!
|
||||
; SEE MAPPING IN COMMENTS
|
||||
; NOTE THAT HSTSEC:MSB IS UNUSED
|
||||
;
|
||||
PPPSD_SETBLK:
|
||||
LD HL,PPP_LBA + 3 ; WORK BACKWARDS, START WITH END OF LBA
|
||||
XOR A ; MSB OF LBA IS ALWAYS ZERO
|
||||
LD (HL),A ; LBAHI:MSB = 0
|
||||
DEC HL ; POINT TO NEXT BYTE
|
||||
LD DE,(HSTTRK) ; DE = HSTTRK
|
||||
LD (HL),D ; LBAHI:LSB = D = HSTTRK:MSB
|
||||
DEC HL ; POINT TO NEXT BYTE
|
||||
LD (HL),E ; LBALO:MSB = E = HSTTRK:LSB
|
||||
DEC HL ; POINT TO NEXT BYTE
|
||||
LD A,(HSTSEC) ; A = HSTSEC:LSB
|
||||
LD (HL),A ; LBALO:LSB = A = HSTSEC:LSB
|
||||
RET
|
||||
;
|
||||
; SEND INDEX OF BLOCK TO READ FROM SD CARD
|
||||
; 32 BIT VALUE (4 BYTES)
|
||||
; NOTE THAT BYTES ARE SENT REVERSED, PROPELLER IS LITTLE ENDIAN
|
||||
;
|
||||
PPPSD_SENDBLK:
|
||||
LD HL,PPP_LBA
|
||||
LD B,4
|
||||
PPPSD_SENDBLK1:
|
||||
LD E,(HL)
|
||||
INC HL
|
||||
CALL PUTBYTE
|
||||
DJNZ PPPSD_SENDBLK1
|
||||
RET
|
||||
;
|
||||
; PRINT DIAGNOSTICS AFTER COMMAND EXECUTION
|
||||
;
|
||||
PPPSD_PRTREAD:
|
||||
LD DE,PPPSTR_READ
|
||||
JR PPPSD_PRT
|
||||
|
||||
PPPSD_PRTWRITE:
|
||||
LD DE,PPPSTR_WRITE
|
||||
JR PPPSD_PRT
|
||||
|
||||
PPPSD_PRT:
|
||||
OR A
|
||||
#IF (PPPSDTRACE == 0)
|
||||
RET
|
||||
#ELSE
|
||||
#IF (PPPSDTRACE == 1)
|
||||
RET Z
|
||||
#ENDIF
|
||||
PUSH AF
|
||||
CALL NEWLINE
|
||||
LD DE,PPPSTR_PREFIX ; PRINT DRIVER PREFIX
|
||||
CALL WRITESTR
|
||||
CALL PC_SPACE
|
||||
CALL WRITESTR ; PRINT FUNCTION
|
||||
CALL PPPSD_PRTBLK ; PRINT BLOCK NUMBER
|
||||
CALL PC_SPACE
|
||||
LD DE,PPPSTR_ARROW ; PRINT ARROW
|
||||
CALL WRITESTR
|
||||
CALL PC_SPACE
|
||||
POP AF
|
||||
PUSH AF
|
||||
CALL PRTHEXBYTE ; PRINT RESULT BYTE
|
||||
CALL NZ,PPPSD_PRTERR ; PRINT DETAILED ERROR VALUE IF APPROPRIATE
|
||||
POP AF
|
||||
RET ; RET WITH A = STATUS
|
||||
|
||||
PPPSD_PRTBLK:
|
||||
CALL PC_SPACE
|
||||
LD HL,PPP_LBA + 4
|
||||
LD B,4
|
||||
PPPSD_PRTBLK1:
|
||||
DEC HL
|
||||
LD A,(HL)
|
||||
CALL PRTHEXBYTE
|
||||
DJNZ PPPSD_PRTBLK1
|
||||
RET
|
||||
|
||||
PPPSD_PRTERR:
|
||||
LD D,PPP_CMDDSKSTAT
|
||||
CALL SENDCMD
|
||||
|
||||
LD HL,PPP_DSKSTAT
|
||||
LD B,4
|
||||
PPPSD_PRTERR1:
|
||||
CALL GETBYTE
|
||||
LD (HL),E
|
||||
INC HL
|
||||
DJNZ PPPSD_PRTERR1
|
||||
|
||||
CALL PC_LBKT
|
||||
LD BC,(PPP_DSKSTHI)
|
||||
CALL PRTHEXWORD
|
||||
LD BC,(PPP_DSKSTLO)
|
||||
CALL PRTHEXWORD
|
||||
CALL PC_RBKT
|
||||
|
||||
RET
|
||||
#ENDIF
|
||||
;
|
||||
;==================================================================================================
|
||||
; PPPSD DISK DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
PPPSD_STAT .DB 0
|
||||
;
|
||||
PPP_LBA:
|
||||
PPP_LBALO .DW 0
|
||||
PPP_LBAHI .DW 0
|
||||
PPP_DSKSTAT:
|
||||
PPP_DSKSTLO .DW 0
|
||||
PPP_DSKSTHI .DW 0
|
||||
;
|
||||
PPPSTR_PREFIX .TEXT "PPPDSK:$"
|
||||
PPPSTR_CMD .TEXT "CMD=$"
|
||||
PPPSTR_READ .TEXT "READ$"
|
||||
PPPSTR_WRITE .TEXT "WRITE$"
|
||||
;PPPSTR_RC .TEXT "RC=$"
|
||||
PPPSTR_ARROW .TEXT "-->$"
|
||||
PPPSTR_ERR .TEXT "ERR=$"
|
||||
;PPPSTR_RCOK .TEXT "OK$"
|
||||
;PPPSTR_RCRDYTO .TEXT "READY TIMEOUT$"
|
||||
;
|
||||
;==================================================================================================
|
||||
; GLOBAL PPP DRIVER FUNCTIONS
|
||||
;==================================================================================================
|
||||
;
|
||||
PUTBYTE:
|
||||
IN A,(PIOC)
|
||||
BIT 7,A
|
||||
JR Z,PUTBYTE
|
||||
LD A,E
|
||||
OUT (PIOA),A
|
||||
RET
|
||||
;
|
||||
GETBYTE:
|
||||
IN A,(PIOC)
|
||||
BIT 5,A
|
||||
JR Z,GETBYTE
|
||||
IN A,(PIOA)
|
||||
LD E,A
|
||||
RET
|
||||
;
|
||||
SENDCMD:
|
||||
IN A,(PIOA) ; DISCARD ANYTHING PENDING
|
||||
; WAIT FOR OBF HIGH (OUTPUT BUFFER TO BE EMPTY)
|
||||
IN A,(PIOC)
|
||||
BIT 7,A
|
||||
JR Z,SENDCMD
|
||||
|
||||
LD A,00000001B ; SET CMD FLAG
|
||||
OUT (PIOX),A ; SEND IT
|
||||
|
||||
SENDCMD0:
|
||||
IN A,(PIOC)
|
||||
BIT 7,A
|
||||
JR Z,SENDCMD0
|
||||
LD A,D
|
||||
OUT (PIOA),A
|
||||
|
||||
SENDCMD1:
|
||||
; WAIT FOR OBF HIGH (BYTE HAS BEEN RECEIVED)
|
||||
IN A,(PIOC)
|
||||
BIT 7,A
|
||||
JR Z,SENDCMD1
|
||||
; TURN OFF CMD
|
||||
LD A,00000000B ; CLEAR CMD FLAG
|
||||
OUT (PIOX),A
|
||||
|
||||
RET
|
||||
;
|
||||
PPPSTR_TIMEOUT .TEXT "ParPortProp not responding!$"
|
||||
61
trunk/Source/ppp_data.asm
Normal file
61
trunk/Source/ppp_data.asm
Normal file
@@ -0,0 +1,61 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; PPPSD DISK DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
PPPSD_SLICETRKS .EQU 65 ; TRACKS PER SLICE
|
||||
PPPSD_TRKSIZE .EQU 128 ; SIZE OF TRACK (IN KB)
|
||||
PPPSD_SLICESIZE .EQU ((PPPSD_SLICETRKS * PPPSD_TRKSIZE) + 1023) / 1024 ; SIZE OF EACH SLICE (IN MB)
|
||||
PPPSD_NUMSLICES .EQU PPPSDCAPACITY / PPPSD_SLICESIZE ; TOTAL SLICES IN DEVICE
|
||||
PPPSD0_SLICEDEF .EQU 0 ; DEFAULT SLICE FOR UNIT 0
|
||||
PPPSD1_SLICEDEF .EQU 1 ; DEFAULT SLICE FOR UNIT 1
|
||||
PPPSD2_SLICEDEF .EQU 2 ; DEFAULT SLICE FOR UNIT 0
|
||||
PPPSD3_SLICEDEF .EQU 3 ; DEFAULT SLICE FOR UNIT 1
|
||||
;
|
||||
.DB DIODEV_PPPSD + 0
|
||||
PPPSDDPH0 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW PPPSDCSV0,PPPSDALV0
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
PPPSD0_SLICE .DW PPPSD0_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW PPPSD_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
.DB DIODEV_PPPSD + 0
|
||||
PPPSDDPH1 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW PPPSDCSV1,PPPSDALV1
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
PPPSD1_SLICE .DW PPPSD1_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW PPPSD_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
.DB DIODEV_PPPSD + 0
|
||||
PPPSDDPH2 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW PPPSDCSV2,PPPSDALV2
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
PPPSD2_SLICE .DW PPPSD2_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW PPPSD_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
.DB DIODEV_PPPSD + 0
|
||||
PPPSDDPH3 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW PPPSDCSV3,PPPSDALV3
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
PPPSD3_SLICE .DW PPPSD3_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW PPPSD_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
PPPSDCKS .EQU 0 ; CKS: 0 FOR NON-REMOVABLE MEDIA
|
||||
PPPSDALS .EQU 256 ; ALS: BLKS / 8 = 2048 / 8 = 256 (ROUNDED UP)
|
||||
;
|
||||
PPPSDCSV0 .FILL PPPSDCKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
PPPSDALV0 .FILL PPPSDALS ; MAX OF 2048 DATA BLOCKS
|
||||
PPPSDCSV1 .FILL PPPSDCKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
PPPSDALV1 .FILL PPPSDALS ; MAX OF 2048 DATA BLOCKS
|
||||
PPPSDCSV2 .FILL PPPSDCKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
PPPSDALV2 .FILL PPPSDALS ; MAX OF 2048 DATA BLOCKS
|
||||
PPPSDCSV3 .FILL PPPSDCKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
PPPSDALV3 .FILL PPPSDALS ; MAX OF 2048 DATA BLOCKS
|
||||
53
trunk/Source/prefix.asm
Normal file
53
trunk/Source/prefix.asm
Normal file
@@ -0,0 +1,53 @@
|
||||
;----------------------------------------------------------------------------
|
||||
; PREFIX.ASM
|
||||
;
|
||||
; PUT AT THE HEAD OF BOOT.BIN TO XFER TO A FLOPPY DISK
|
||||
;
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
; 5/11/2012 dwg - changed offset to BIOS booting fixup location
|
||||
; 3/ 2/2012 dwg - fixed BOOT_INFO_LOC (moved when jump added for bnksel)
|
||||
; 2/15/2012 dwg - added origin data written by formatter
|
||||
; 2/ 5/2012 dwg - added version quad, updates counter, and write protect boolean to metadata
|
||||
; 1/ 9/2012 wbw - added signature
|
||||
; 1/ 5/2012 dwg - added version of build generating system image
|
||||
; 1/ 5/2012 dwg - added drive label to metadata for 1.4
|
||||
|
||||
#INCLUDE "std.asm"
|
||||
|
||||
BYT .EQU 1 ; used to describe METADATA_SIZE below
|
||||
WRD .EQU 2
|
||||
|
||||
SECTOR_SIZE .EQU 512
|
||||
BLOCK_SIZE .EQU 128
|
||||
PREFIX_SIZE .EQU (3 * SECTOR_SIZE) ; 3 SECTORS
|
||||
METADATA_SIZE .EQU BYT+WRD+(4*BYT)+16+BYT+WRD+WRD+WRD+WRD ; (as defined below)
|
||||
|
||||
BOOT_INFO_LOC .EQU CPM_ENT + 04BH
|
||||
; PTR TO LOCATION TO RECORD BOOT INFO IN MEMORY IMAGE
|
||||
; FIXUP REQUIRED WHEN BIOS HEADER CHANGES
|
||||
|
||||
.ORG 0000H
|
||||
JP CPM_ENT
|
||||
;
|
||||
.FILL ((PREFIX_SIZE - BLOCK_SIZE) - $),00H
|
||||
PR_SIG .DW 0A55AH ; SIGNATURE GOES HERE
|
||||
|
||||
PR_PLATFORM .DB 0
|
||||
PR_DEVICE .DB 0
|
||||
PR_FORMATTER .DB 0,0,0,0,0,0,0,0
|
||||
PR_DRIVE .DB 0
|
||||
PR_LOG_UNIT .DW 0
|
||||
|
||||
;
|
||||
.FILL ((PREFIX_SIZE - METADATA_SIZE) - $),00H
|
||||
.DB 0 ; write protect boolean
|
||||
.DW 0 ; starting update number
|
||||
.DB RMJ,RMN,RUP,RTP
|
||||
.DB "Unlabeled Drive ","$"
|
||||
.DW BOOT_INFO_LOC ; PTR TO LOCATION TO STORE DISKBOOT & BOOTDRIVE (SEE CNFGDATA)
|
||||
.DW CPM_LOC ; CCP START
|
||||
.DW CPM_END ; END OF CBIOS
|
||||
.DW CPM_ENT ; COLD BOOT LOCATION
|
||||
|
||||
.END
|
||||
357
trunk/Source/prp.asm
Normal file
357
trunk/Source/prp.asm
Normal file
@@ -0,0 +1,357 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; PROPIO DRIVER
|
||||
;==================================================================================================
|
||||
;
|
||||
;
|
||||
; GLOBAL PARPORTPROP INITIALIZATION
|
||||
;
|
||||
PRP_INIT:
|
||||
CALL PRPSD_INIT ; SD CARD INITIALIZATION
|
||||
|
||||
RET
|
||||
;
|
||||
;==================================================================================================
|
||||
; PROPIO CONSOLE DRIVER
|
||||
;==================================================================================================
|
||||
;
|
||||
PRPCON_CMD .EQU $40 ; PROPIO CONSOLE COMMAND PORT (WHEN WRITTEN)
|
||||
PRPCON_STATUS .EQU $40 ; PROPIO CONSOLE STATUS PORT (WHEN READ)
|
||||
PRPCON_DATA .EQU $41 ; PROPIO CONSOLE DATA PORT (READ=KBD, WRITE=DISPLAY)
|
||||
;
|
||||
PRPCON_BUSY .EQU $80 ; BIT SET WHEN PROPIO CONSOLE INTERFACE IS BUSY
|
||||
PRPCON_ERR .EQU $40 ; BIT SET WHEN PROPIO CONSOLE ERROR HAS OCCURRED
|
||||
PRPCON_KBDRDY .EQU $20 ; BIT SET WHEN KEYBOARD BUF HAS A BYTE READY (BUF FULL)
|
||||
PRPCON_DSPRDY .EQU $10 ; BIT SET WHEN DISPLAY BUF IS READY FOR A BYTE (BUF EMPTY)
|
||||
;
|
||||
;
|
||||
;
|
||||
PRPCON_DISPATCH:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JR Z,PRPCON_IN
|
||||
DEC A
|
||||
JR Z,PRPCON_OUT
|
||||
DEC A
|
||||
JR Z,PRPCON_IST
|
||||
DEC A
|
||||
JR Z,PRPCON_OST
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
PRPCON_IN:
|
||||
CALL PRPCON_IST ; CHECK FOR CHAR PENDING
|
||||
JR Z,PRPCON_IN ; WAIT FOR IT IF NECESSARY
|
||||
IN A,(PRPCON_DATA) ; READ THE CHAR FROM PROPIO
|
||||
LD E,A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PRPCON_IST:
|
||||
IN A,(PRPCON_STATUS) ; READ LINE STATUS REGISTER
|
||||
AND PRPCON_KBDRDY | PRPCON_BUSY ; ISOLATE KBDRDY AND BUSY
|
||||
SUB PRPCON_KBDRDY ; KBD RDY BUT NOT BUSY?
|
||||
JR Z,PRPCON_IST1 ; YES, GO TO READY LOGIC
|
||||
JP CIO_IDLE
|
||||
PRPCON_IST1:
|
||||
DEC A ; SET A=$FF TO SIGNAL READY
|
||||
RET ; RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
PRPCON_OUT:
|
||||
CALL PRPCON_OST ; CHECK FOR OUTPUT READY
|
||||
JR Z,PRPCON_OUT ; WAIT IF NECESSARY
|
||||
LD A,E ; RECOVER THE CHAR TO WRITE
|
||||
OUT (PRPCON_DATA),A ; WRITE THE CHAR TO PROPIO
|
||||
RET
|
||||
;
|
||||
PRPCON_OST:
|
||||
IN A,(PRPCON_STATUS) ; READ LINE STATUS REGISTER
|
||||
AND PRPCON_DSPRDY | PRPCON_BUSY ; ISOLATE DSPRDY AND BUSY
|
||||
SUB PRPCON_DSPRDY ; DSP RDY BUT NOT BUSY?
|
||||
JR Z,PRPCON_OST1 ; YES, GO TO READY LOGIC
|
||||
JP CIO_IDLE
|
||||
PRPCON_OST1:
|
||||
DEC A ; SET A=$FF TO SIGNAL READY
|
||||
RET ; RETURN
|
||||
;
|
||||
;==================================================================================================
|
||||
; PRPSD DISK DRIVER
|
||||
;==================================================================================================
|
||||
;
|
||||
; IO PORT ADDRESSES
|
||||
;
|
||||
PRPSD_DSKCMD .EQU 42H
|
||||
PRPSD_DSKST .EQU 42H
|
||||
PRPSD_DSKIO .EQU 43H
|
||||
;
|
||||
PRPSD_CMDRESET .EQU 10H
|
||||
PRPSD_CMDINIT .EQU 20H
|
||||
PRPSD_CMDREAD .EQU 30H
|
||||
PRPSD_CMDPREP .EQU 40H
|
||||
PRPSD_CMDWRITE .EQU 50H
|
||||
;
|
||||
PRPSD_STBUSY .EQU 80H
|
||||
PRPSD_STERR .EQU 40H
|
||||
PRPSD_STOVR .EQU 20H
|
||||
PRPSD_STTO .EQU 10H
|
||||
;
|
||||
;
|
||||
;
|
||||
PRPSD_DISPATCH:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F
|
||||
JR Z,PRPSD_RD
|
||||
DEC A
|
||||
JR Z,PRPSD_WR
|
||||
DEC A
|
||||
JR Z,PRPSD_ST
|
||||
DEC A
|
||||
JR Z,PRPSD_MED
|
||||
CALL PANIC
|
||||
;
|
||||
PRPSD_RD:
|
||||
JP PRPSD_READ
|
||||
PRPSD_WR:
|
||||
JP PRPSD_WRITE
|
||||
PRPSD_ST:
|
||||
JP PRPSD_STATUS
|
||||
PRPSD_MED:
|
||||
JP PRPSD_MEDIA
|
||||
;
|
||||
; PRPSD_MEDIA
|
||||
;
|
||||
PRPSD_MEDIA:
|
||||
; REINITIALIZE THE CARD HERE
|
||||
CALL PRPSD_INITCARD
|
||||
LD A,MID_NONE ; ASSUME FAILURE
|
||||
RET NZ
|
||||
|
||||
; ALL IS WELL, RETURN MEDIA IDENTIFIER
|
||||
LD A,MID_HD ; SET MEDIA ID
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PRPSD_INIT:
|
||||
; MARK DRIVE NOT READY
|
||||
; HARDWARE INIT DEFERRED UNTIL DRIVE SELECT
|
||||
XOR A
|
||||
DEC A
|
||||
LD (PRPSD_STAT),A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PRPSD_STATUS:
|
||||
LD A,(PRPSD_STAT) ; GET THE CURRENT READY STATUS
|
||||
OR A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PRPSD_READ:
|
||||
CALL PRPSD_CHKCARD ; CHECK / REINIT CARD AS NEEDED
|
||||
RET NZ ; BAIL OUT ON ERROR
|
||||
|
||||
LD A,PRPSD_CMDRESET
|
||||
CALL PRPSD_SNDCMD
|
||||
RET NZ ; RETURN ON FAILURE, A = STATUS
|
||||
|
||||
CALL PRPSD_SETBLK
|
||||
|
||||
LD A,PRPSD_CMDREAD
|
||||
CALL PRPSD_SNDCMD
|
||||
RET NZ ; RETURN ON FAILURE, A = STATUS
|
||||
|
||||
LD C,PRPSD_DSKIO
|
||||
LD B,0
|
||||
LD HL,(DIOBUF)
|
||||
INIR
|
||||
INIR
|
||||
|
||||
OR A ; SET FLAGS
|
||||
RET ; RETURN WITH A = STATUS
|
||||
;
|
||||
;
|
||||
;
|
||||
PRPSD_WRITE:
|
||||
CALL PRPSD_CHKCARD ; CHECK / REINIT CARD AS NEEDED
|
||||
RET NZ ; BAIL OUT ON ERROR
|
||||
|
||||
LD A,PRPSD_CMDRESET
|
||||
CALL PRPSD_SNDCMD
|
||||
RET NZ ; RETURN ON FAILURE, A = STATUS
|
||||
|
||||
CALL PRPSD_SETBLK
|
||||
|
||||
LD A,PRPSD_CMDPREP
|
||||
CALL PRPSD_SNDCMD
|
||||
RET NZ ; RETURN ON FAILURE, A = STATUS
|
||||
|
||||
LD C,PRPSD_DSKIO
|
||||
LD B,0
|
||||
LD HL,(DIOBUF)
|
||||
OTIR
|
||||
OTIR
|
||||
|
||||
LD A,PRPSD_CMDWRITE
|
||||
CALL PRPSD_SNDCMD
|
||||
RET NZ ; RETURN ON FAILURE, A = STATUS
|
||||
|
||||
OR A ; SET FLAGS
|
||||
RET ; RETURN WITH A = STATUS
|
||||
;
|
||||
;
|
||||
;
|
||||
PRPSD_SNDCMD:
|
||||
LD (PRPSD_CMD),A
|
||||
OUT (PRPSD_DSKCMD),A
|
||||
NOP ; SETTLE
|
||||
NOP ; SETTLE
|
||||
LD BC,0
|
||||
PRPSD_SNDCMD1:
|
||||
IN A,(PRPSD_DSKST)
|
||||
BIT 7,A
|
||||
JR Z,PRPSD_SNDCMD2 ; RET WITH A = STATUS
|
||||
LD E,A ; SAVE STATUS
|
||||
CALL DELAY
|
||||
DEC BC
|
||||
LD A,B
|
||||
OR C
|
||||
JR NZ,PRPSD_SNDCMD1
|
||||
LD A,E ; RECOVER STATUS
|
||||
OR PRPSD_STTO ; SET TIMEOUT BIT
|
||||
PRPSD_SNDCMD2:
|
||||
LD (PRPSD_STAT),A
|
||||
JR PRPSD_PRT ; RET WITH A = STATUS
|
||||
;
|
||||
;
|
||||
;
|
||||
PRPSD_INITCARD:
|
||||
; RESET INTERFACE, RETURN WITH NZ ON FAILURE
|
||||
LD A,PRPSD_CMDRESET
|
||||
CALL PRPSD_SNDCMD
|
||||
RET NZ ; NZ SET, A HAS ERROR CODE
|
||||
|
||||
; REQUEST HARDWARE INIT, RESULT IN A, Z/NZ SET
|
||||
LD A,PRPSD_CMDINIT
|
||||
CALL PRPSD_SNDCMD
|
||||
RET ; Z/NZ SET, A HAS RESULT CODE
|
||||
;
|
||||
; CHECK THE SD CARD, ATTEMPT TO REINITIALIZE IF NEEDED
|
||||
;
|
||||
PRPSD_CHKCARD:
|
||||
LD A,(PRPSD_STAT) ; GET STATUS
|
||||
OR A ; SET FLAGS
|
||||
CALL NZ,PRPSD_INITCARD ; INIT CARD IF NOT READY
|
||||
RET ; RETURN WITH STATUS IN A
|
||||
;
|
||||
; SEND INDEX OF BLOCK TO READ FROM SD CARD
|
||||
; 32 BIT VALUE (4 BYTES)
|
||||
; NOTE THAT BYTES ARE SENT REVERSED, PROPELLER IS LITTLE ENDIAN
|
||||
;
|
||||
PRPSD_SETBLK:
|
||||
LD DE,PRPSD_BLK + 3
|
||||
LD A,(HSTSEC) ; A = LSB OF OS SECTOR
|
||||
CALL PRPSD_SETBLK1
|
||||
LD HL,(HSTTRK) ; GET OS TRACK VALUE
|
||||
LD A,L ; EXTRACT LSB
|
||||
CALL PRPSD_SETBLK1
|
||||
LD A,H ; EXTRACT MSB
|
||||
CALL PRPSD_SETBLK1
|
||||
XOR A ; A = 0, NOT USED
|
||||
CALL PRPSD_SETBLK1
|
||||
RET
|
||||
PRPSD_SETBLK1:
|
||||
OUT (PRPSD_DSKIO),A ; SEND IT
|
||||
LD (DE),A
|
||||
DEC DE
|
||||
RET
|
||||
|
||||
PRPSD_PRT:
|
||||
BIT 6,A
|
||||
#IF (PRPSDTRACE == 0)
|
||||
RET
|
||||
#ELSE
|
||||
#IF (PRPSDTRACE == 1)
|
||||
RET Z
|
||||
#ENDIF
|
||||
PUSH AF
|
||||
CALL NEWLINE
|
||||
CALL PC_LBKT
|
||||
CALL PRTHEXWORD
|
||||
CALL PC_RBKT
|
||||
CALL PC_SPACE
|
||||
LD DE,PRPSTR_PREFIX
|
||||
CALL WRITESTR
|
||||
CALL PC_SPACE
|
||||
LD DE,PRPSTR_CMD
|
||||
CALL WRITESTR
|
||||
LD A,(PRPSD_CMD)
|
||||
CALL PRTHEXBYTE
|
||||
CP PRPSD_CMDREAD
|
||||
CALL Z,PRPSD_PRTBLK
|
||||
CP PRPSD_CMDWRITE
|
||||
CALL Z,PRPSD_PRTBLK
|
||||
CALL PC_SPACE
|
||||
LD DE,PRPSTR_ARROW
|
||||
CALL WRITESTR
|
||||
CALL PC_SPACE
|
||||
POP AF
|
||||
PUSH AF
|
||||
CALL PRTHEXBYTE
|
||||
BIT 6,A
|
||||
CALL NZ,PRPSD_PRTERR
|
||||
POP AF
|
||||
RET ; RET WITH A = STATUS
|
||||
|
||||
PRPSD_PRTBLK:
|
||||
CALL PC_SPACE
|
||||
LD HL,PRPSD_BLK
|
||||
LD B,4
|
||||
PRPSD_PRTBLK1:
|
||||
LD A,(HL)
|
||||
CALL PRTHEXBYTE
|
||||
INC HL
|
||||
DJNZ PRPSD_PRTBLK1
|
||||
RET
|
||||
|
||||
PRPSD_PRTERR:
|
||||
LD B,4
|
||||
PRPSD_PRTERR1:
|
||||
IN A,(PRPSD_DSKIO)
|
||||
PUSH AF
|
||||
DJNZ PRPSD_PRTERR1
|
||||
CALL PC_SPACE
|
||||
LD DE,PRPSTR_ERR
|
||||
CALL WRITESTR
|
||||
LD B,4
|
||||
PRPSD_PRTERR2:
|
||||
POP AF
|
||||
CALL PRTHEXBYTE
|
||||
DJNZ PRPSD_PRTERR2
|
||||
RET
|
||||
#ENDIF
|
||||
;
|
||||
;
|
||||
;
|
||||
PRPSTR_PREFIX .TEXT "PRPDSK:$"
|
||||
PRPSTR_CMD .TEXT "CMD=$"
|
||||
;PRPSTR_RC .TEXT "RC=$"
|
||||
PRPSTR_ARROW .TEXT "-->$"
|
||||
PRPSTR_ERR .TEXT "ERR=$"
|
||||
;PRPSTR_RCOK .TEXT "OK$"
|
||||
;PRPSTR_RCRDYTO .TEXT "READY TIMEOUT$"
|
||||
;
|
||||
;==================================================================================================
|
||||
; PRPSD DISK DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
PRPSD_STAT .DB 0
|
||||
;
|
||||
PRPSD_CMD .DB 0
|
||||
PRPSD_BLK .DB 0, 0, 0, 0
|
||||
61
trunk/Source/prp_data.asm
Normal file
61
trunk/Source/prp_data.asm
Normal file
@@ -0,0 +1,61 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; PRPSD DISK DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
PRPSD_SLICETRKS .EQU 65 ; TRACKS PER SLICE
|
||||
PRPSD_TRKSIZE .EQU 128 ; SIZE OF TRACK (IN KB)
|
||||
PRPSD_SLICESIZE .EQU ((PRPSD_SLICETRKS * PRPSD_TRKSIZE) + 1023) / 1024 ; SIZE OF EACH SLICE (IN MB)
|
||||
PRPSD_NUMSLICES .EQU PRPSDCAPACITY / PRPSD_SLICESIZE ; TOTAL SLICES IN DEVICE
|
||||
PRPSD0_SLICEDEF .EQU 0 ; DEFAULT SLICE FOR UNIT 0
|
||||
PRPSD1_SLICEDEF .EQU 1 ; DEFAULT SLICE FOR UNIT 1
|
||||
PRPSD2_SLICEDEF .EQU 2 ; DEFAULT SLICE FOR UNIT 0
|
||||
PRPSD3_SLICEDEF .EQU 3 ; DEFAULT SLICE FOR UNIT 1
|
||||
;
|
||||
.DB DIODEV_PRPSD + 0
|
||||
PRPSDDPH0 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW PRPSDCSV0,PRPSDALV0
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
PRPSD0_SLICE .DW PRPSD0_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW PRPSD_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
.DB DIODEV_PRPSD + 0
|
||||
PRPSDDPH1 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW PRPSDCSV1,PRPSDALV1
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
PRPSD1_SLICE .DW PRPSD1_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW PRPSD_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
.DB DIODEV_PRPSD + 0
|
||||
PRPSDDPH2 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW PRPSDCSV2,PRPSDALV2
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
PRPSD2_SLICE .DW PRPSD2_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW PRPSD_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
.DB DIODEV_PRPSD + 0
|
||||
PRPSDDPH3 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW PRPSDCSV3,PRPSDALV3
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
PRPSD3_SLICE .DW PRPSD3_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW PRPSD_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
PRPSDCKS .EQU 0 ; CKS: 0 FOR NON-REMOVABLE MEDIA
|
||||
PRPSDALS .EQU 256 ; ALS: BLKS / 8 = 2048 / 8 = 256 (ROUNDED UP)
|
||||
;
|
||||
PRPSDCSV0 .FILL PRPSDCKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
PRPSDALV0 .FILL PRPSDALS ; MAX OF 2048 DATA BLOCKS
|
||||
PRPSDCSV1 .FILL PRPSDCKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
PRPSDALV1 .FILL PRPSDALS ; MAX OF 2048 DATA BLOCKS
|
||||
PRPSDCSV2 .FILL PRPSDCKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
PRPSDALV2 .FILL PRPSDALS ; MAX OF 2048 DATA BLOCKS
|
||||
PRPSDCSV3 .FILL PRPSDCKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
PRPSDALV3 .FILL PRPSDALS ; MAX OF 2048 DATA BLOCKS
|
||||
8
trunk/Source/romfill.asm
Normal file
8
trunk/Source/romfill.asm
Normal file
@@ -0,0 +1,8 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; FILLER FOR ROM PAGE 0 (SEE BANKEDBIOS.TXT)
|
||||
;==================================================================================================
|
||||
;
|
||||
.FILL 3000H
|
||||
;
|
||||
.END
|
||||
957
trunk/Source/sd.asm
Normal file
957
trunk/Source/sd.asm
Normal file
@@ -0,0 +1,957 @@
|
||||
;
|
||||
;=============================================================================
|
||||
; SD DISK DRIVER
|
||||
;=============================================================================
|
||||
;
|
||||
; - CATER FOR THE VARIOUS SDCARD HARDWARE VERSIONS
|
||||
; CSIO IS FOR N8-2312 PRODUCTION BOARDS AND MODIFIED N8-2511 PROTOTYPE BOARDS
|
||||
; RTC IS FOR UNMODIFIED N8-2511 BOARDS AND N8VEM/ZETA USING JUHA MINI-BOARDS
|
||||
; PPISD IS FOR A PPISD MINI-BOARD CONNECTED TO 26-PIN PPI HEADER
|
||||
; - MAKE RTC A PSEUDO-REGISTER FOR NON-CSIO
|
||||
; - PERFORM BOOT INITIALIZATION OF RTC SOMEWHERE ELSE???
|
||||
; - PUT RELEVANT RTC BITS TO A KNOWN STATE AT ALL I/O ENTRY POINTS
|
||||
;
|
||||
; CONTROL BITS
|
||||
;
|
||||
#IF (PLATFORM==PLT_N8)
|
||||
SD_CS .EQU $04 ; RTC BIT 2, SD CARD SELECT (ACTIVE HI)
|
||||
#IF (!SDCSIO)
|
||||
SD_CLK .EQU $02 ; RTC BIT 1, SD CLOCK
|
||||
SD_DOUT .EQU $01 ; RTC BIT 0, SD DATA OUT
|
||||
SD_DIN .EQU $40 ; RTC BIT 6, SD DATA IN
|
||||
#ENDIF
|
||||
#ELSE
|
||||
#IF (PPISD)
|
||||
SD_CS .EQU $10 ; PC4, SD CARD SELECT (ACTIVE LO)
|
||||
SD_CLK .EQU $02 ; PC1, SD CLOCK
|
||||
SD_DOUT .EQU $01 ; PC0, SD DATA OUT
|
||||
SD_DIN .EQU $80 ; PB7, SD DATA IN
|
||||
#ELSE
|
||||
SD_CS .EQU $04 ; RTC BIT 2, SD CARD SELECT (ACTIVE HI)
|
||||
SD_CLK .EQU $40 ; RTC BIT 6, SD CLOCK
|
||||
SD_DOUT .EQU $80 ; RTC BIT 7, DATA OUT TO SD-CARD
|
||||
SD_DIN .EQU $40 ; RTC BIT 6, DATA IN FROM SD-CARD
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
|
||||
;#IF (!SDCSIO)
|
||||
;#IF (PLATFORM = PLT_N8)
|
||||
;SD_CS .EQU $04 ; RTC BIT 2, SD CARD SELECT
|
||||
;SD_CLK .EQU $02 ; RTC BIT 1, SD CLOCK
|
||||
;SD_DOUT .EQU $01 ; RTC BIT 0, SD DATA OUT
|
||||
;SD_DIN .EQU $40 ; RTC BIT 6, SD DATA IN
|
||||
;#ELSE ; Zeta or Z80-SBC MK II
|
||||
;SD_CS .EQU $04 ; RTC BIT 2, SD CARD SELECT
|
||||
;SD_CLK .EQU $40 ; RTC BIT 6, SD CLOCK
|
||||
;SD_DOUT .EQU $80 ; RTC BIT 7, DATA OUT TO SD-CARD
|
||||
;SD_DIN .EQU $40 ; RTC BIT 6, DATA IN FROM SD-CARD
|
||||
;#ENDIF
|
||||
;#ENDIF
|
||||
;
|
||||
; SD CARD COMMANDS
|
||||
;
|
||||
SD_CMD0 .EQU $40 | 0 ; GO_IDLE_STATE
|
||||
SD_CMD1 .EQU $40 | 1 ; SEND_OP_COND
|
||||
SD_CMD8 .EQU $40 | 8 ; SEND_IF_COND
|
||||
SD_CMD9 .EQU $40 | 9 ; SEND_CSD
|
||||
SD_CMD10 .EQU $40 | 10 ; SEND_CID
|
||||
SD_CMD16 .EQU $40 | 16 ; SET_BLOCKLEN
|
||||
SD_CMD17 .EQU $40 | 17 ; READ_SINGLE_BLOCK
|
||||
SD_CMD24 .EQU $40 | 24 ; WRITE_BLOCK
|
||||
SD_CMD55 .EQU $40 | 55 ; APP_CMD
|
||||
SD_CMD58 .EQU $40 | 58 ; READ_OCR
|
||||
; SD APPLICATION SPECIFIC COMMANDS
|
||||
SD_ACMD41 .EQU $40 | 41 ; SD_APP_OP_COND
|
||||
;
|
||||
; SD CARD TYPE
|
||||
;
|
||||
SD_TYPEUNK .EQU 0
|
||||
SD_TYPEMMC .EQU 1
|
||||
SD_TYPESDSC .EQU 2
|
||||
SD_TYPESDHC .EQU 3
|
||||
;
|
||||
;
|
||||
;
|
||||
SD_DISPATCH:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F
|
||||
JR Z,SD_READ
|
||||
DEC A
|
||||
JR Z,SD_WRITE
|
||||
DEC A
|
||||
JR Z,SD_STATUS
|
||||
DEC A
|
||||
JR Z,SD_MEDIA
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
SD_MEDIA:
|
||||
; INITIALIZE THE SD CARD TO ACCOMMODATE HOT SWAPPING
|
||||
CALL SD_INITCARD
|
||||
LD A,MID_NONE ; ASSUME FAILURE
|
||||
RET NZ ; INIT FAILED, RETURN WITH HL=0
|
||||
|
||||
; SET READY AND RETURN
|
||||
XOR A
|
||||
LD (SD_STAT),A ; SD_STAT = 0 = OK
|
||||
LD A,MID_HD
|
||||
RET
|
||||
;
|
||||
SD_INIT:
|
||||
LD A,20H ; PUT RTC LATCH TO IDLE
|
||||
OUT (RTC),A
|
||||
#IF (PPISD)
|
||||
LD A,82H ; PPI PORT A=OUT, B=IN, C=OUT
|
||||
OUT (PIOX),A
|
||||
LD A,30H ; PC4,5 /CS HIGH
|
||||
OUT (PIOC),A
|
||||
#ENDIF
|
||||
XOR A
|
||||
DEC A
|
||||
LD (SD_STAT),A
|
||||
RET
|
||||
;
|
||||
SD_STATUS:
|
||||
LD A,(SD_STAT)
|
||||
OR A
|
||||
RET
|
||||
;
|
||||
SD_READ:
|
||||
JP SD_RDSEC
|
||||
;
|
||||
SD_WRITE:
|
||||
JP SD_WRSEC
|
||||
;
|
||||
;=============================================================================
|
||||
; SD INTERFACE ROUTINES
|
||||
;=============================================================================
|
||||
;
|
||||
; SD_SENDCLKS: A=RTC MASK, B=# OF CLK TRANSITIONS
|
||||
; For bit bang versions B is number of transitions
|
||||
; For PPISD B is number of bits
|
||||
; For CSIO B is number of bytes
|
||||
SD_SENDCLKS:
|
||||
#IF (!SDCSIO)
|
||||
#IF (PPISD)
|
||||
LD A,03 ;PC1=1, TOGGLE CLOCK
|
||||
OUT (PIOX),A
|
||||
NOP
|
||||
LD A,02 ;PC1=0, RESET CLOCK
|
||||
OUT (PIOX),A
|
||||
#ELSE
|
||||
OUT (RTC),A
|
||||
XOR SD_CLK ; TOGGLE CLOCK BIT
|
||||
#ENDIF
|
||||
DJNZ SD_SENDCLKS
|
||||
RET
|
||||
#ELSE
|
||||
SD_SENDCLKS1:
|
||||
CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING
|
||||
LD A,0FFH
|
||||
OUT0 (CPU_TRDR),A ; put byte in buffer
|
||||
IN0 A,(CPU_CNTR)
|
||||
SET 4,A ; set transmit enable
|
||||
OUT0 (CPU_CNTR),A
|
||||
DJNZ SD_SENDCLKS
|
||||
RET
|
||||
|
||||
SD_WAITTX: ; WAIT FOR TX EMPTY
|
||||
IN0 A,(CPU_CNTR) ; get CSIO status
|
||||
BIT 4,A ; Tx empty?
|
||||
JR NZ,SD_WAITTX
|
||||
RET
|
||||
|
||||
SD_WAITRX:
|
||||
IN0 A,(CPU_CNTR) ; wait for receiver to finish
|
||||
BIT 5,A
|
||||
JR NZ,SD_WAITRX
|
||||
RET
|
||||
#ENDIF
|
||||
;
|
||||
; COMPLETE A TRANSACTION - PRESERVE AF
|
||||
;
|
||||
SD_DONE:
|
||||
PUSH AF
|
||||
#IF (!SDCSIO)
|
||||
#IF (PPISD)
|
||||
LD A,30H
|
||||
OUT (PIOC),A ;PC4=1 /CS INACTIVE
|
||||
LD B,16
|
||||
#ELSE
|
||||
XOR A
|
||||
LD B,17
|
||||
#ENDIF
|
||||
CALL SD_SENDCLKS
|
||||
#ELSE
|
||||
CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING
|
||||
IN A,(RTC)
|
||||
AND ~SD_CS ; CLEAR CS
|
||||
OUT (RTC),A
|
||||
LD B,2
|
||||
CALL SD_SENDCLKS
|
||||
#ENDIF
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; SEND ONE BYTE
|
||||
;
|
||||
SD_PUT:
|
||||
#IF (PPISD)
|
||||
; CALL PRTHEXBYTE ; *DEBUG*
|
||||
LD C,A ; C=BYTE TO SEND
|
||||
LD B,8 ; SEND 8 BITS (LOOP 8 TIMES)
|
||||
LD A,08H ;PC4=0, /CS ACTIVE
|
||||
OUT (PIOX),A
|
||||
SD_PUT1:
|
||||
RL C ;ROTATE NEXT BIT FROM C INTO CF
|
||||
LD A,01 ;PC0=1, DATA OUT=1
|
||||
JR C,SD_PUT2
|
||||
LD A,00 ;PC0=0, DATA OUT =0
|
||||
SD_PUT2:
|
||||
OUT (PIOX),A ;SEND DATA OUT
|
||||
LD A,03 ;PC1=1, TOGGLE CLOCK
|
||||
OUT (PIOX),A
|
||||
LD A,02 ;PC1=0, RESET CLOCK
|
||||
OUT (PIOX),A
|
||||
DJNZ SD_PUT1 ;REPEAT FOR ALL 8 BITS
|
||||
RET
|
||||
#ELSE
|
||||
#IF (!SDCSIO)
|
||||
; CALL PRTHEXBYTE ; *DEBUG*
|
||||
LD C,A ; C=BYTE TO SEND
|
||||
LD B,8 ; SEND 8 BITS (LOOP 8 TIMES)
|
||||
SD_PUT1:
|
||||
#IF (PLATFORM=PLT_N8)
|
||||
LD A,2 ; SD_CS >> 1 (SD_CS WILL BE SET AFTER ROTATE)
|
||||
RL C ; ROTATE NEXT BIT FROM C INTO CF
|
||||
RLA ; ROTATE CF INTO A:0, SD_DOUT is RTC:0
|
||||
#ELSE
|
||||
LD A,8 ; SD_CS WILL BE IN BIT2 AFTER ROTATE
|
||||
RL C ; ROTATE NEXT BIT FROM C INTO CF
|
||||
RRA ; ROTATE CARRY INTO A:7, SD_DOUT is RTC:7
|
||||
#ENDIF
|
||||
OUT (RTC),A ; CLOCK LOW (ABOUT TO SEND BIT)
|
||||
OR SD_CLK ; SET CLOCK BIT
|
||||
OUT (RTC),A ; CLOCK HIGH (SEND BIT)
|
||||
DJNZ SD_PUT1 ; REPEAT FOR ALL 8 BITS
|
||||
AND ~SD_CLK ; RESET CLOCK
|
||||
OUT (RTC),A ; LEAVE WITH CLOCK LOW
|
||||
RET
|
||||
#ELSE
|
||||
CALL MIRROR ; MSB<-->LSB mirror bits, result in C
|
||||
CALL SD_WAITRX ; MAKE SURE WE ARE DONE SENDING
|
||||
OUT0 (CPU_TRDR),C ; put byte in buffer
|
||||
IN0 A,(CPU_CNTR)
|
||||
SET 4,A ; set transmit enable
|
||||
OUT0 (CPU_CNTR),A
|
||||
RET ; let it do the rest
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
; RECEIVE ONE BYTE
|
||||
;
|
||||
SD_GET:
|
||||
#IF (PPISD)
|
||||
LD B,8 ; RECEIVE 8 BITS (LOOP 8 TIMES)
|
||||
SD_GET1:
|
||||
IN A,(PIOB) ; GET BIT FROM SD-CARD
|
||||
RLA ; ROTATE PB7 INTO CARRY
|
||||
RL C ; ROTATE CARRY INTO C
|
||||
LD A,03 ; PC1=1, TOGGLE CLOCK
|
||||
OUT (PIOX),A
|
||||
LD A,02 ; PC1=0, RESET CLOCK
|
||||
OUT (PIOX),A
|
||||
DJNZ SD_GET1 ; REPEAT FOR ALL 8 BITS
|
||||
LD A,C ; GET BYTE RECEIVED INTO A
|
||||
; CALL PRTHEXBYTE ; *DEBUG*
|
||||
RET
|
||||
#ELSE
|
||||
#IF (!SDCSIO)
|
||||
LD B,8 ; RECEIVE 8 BITS (LOOP 8 TIMES)
|
||||
SD_GET1:
|
||||
IN A,(RTC) ; GET RTC BITS
|
||||
RLA ; ROTATE RTC:6 (SD_IN) INTO CF
|
||||
RLA
|
||||
RL C ; ROTATE CF INTO C:0
|
||||
LD A,SD_CS | SD_DOUT | SD_CLK
|
||||
OUT (RTC),A ; CLOCK HIGH (ACK BIT RECEIVED)
|
||||
AND ~SD_CLK ; RESET CLOCK BIT
|
||||
OUT (RTC),A ; CLOCK LOW (READY FOR NEXT BIT)
|
||||
DJNZ SD_GET1 ; REPEAT FOR ALL 8 BITS
|
||||
LD A,C ; GET BYTE RECEIVED INTO A
|
||||
; CALL PRTHEXBYTE ; *DEBUG*
|
||||
RET
|
||||
#ELSE
|
||||
CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING
|
||||
IN0 A,(CPU_CNTR) ; get CSIO status
|
||||
SET 5,A ; start receiver
|
||||
OUT0 (CPU_CNTR),A
|
||||
CALL SD_WAITRX
|
||||
IN0 A,(CPU_TRDR) ; get received byte
|
||||
CALL MIRROR ; MSB<-->LSB mirror bits
|
||||
LD A,C ; keep result
|
||||
RET
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
|
||||
#IF (SDCSIO)
|
||||
MIRROR: ; MSB<-->LSB mirror bits in A, result in C
|
||||
#IF (!SDCSIOFAST) ; slow speed, least code space
|
||||
LD B,8 ; bit counter
|
||||
MIRROR1:
|
||||
RLA ; rotate bit 7 into carry
|
||||
RR C ; rotate carry into result
|
||||
DJNZ MIRROR1 ; do all 8 bits
|
||||
RET
|
||||
#ELSE ; fastest but uses most code space
|
||||
LD BC,MIRTAB ; 256 byte mirror table
|
||||
ADD A,C ; add offset
|
||||
LD C,A
|
||||
JR NC,MIRROR2
|
||||
INC B
|
||||
MIRROR2:
|
||||
LD A,(BC) ; get result
|
||||
LD C,A ; return result in C
|
||||
RET
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
|
||||
;
|
||||
; SELECT CARD AND WAIT FOR IT TO BE READY ($FF)
|
||||
;
|
||||
SD_WAITRDY:
|
||||
#IF (PPISD)
|
||||
LD A,21H ;/CS ACTIVE (PC4), DOUT=1 (PC0)
|
||||
OUT (PIOC),A
|
||||
#ELSE
|
||||
IN A,(RTC)
|
||||
#IF (!SDCSIO)
|
||||
OR SD_CS | SD_DOUT ; SET SD_CS (CHIP SELECT)
|
||||
#ELSE
|
||||
CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING
|
||||
OR SD_CS ; SET SD_CS (CHIP SELECT)
|
||||
#ENDIF
|
||||
OUT (RTC),A
|
||||
#ENDIF
|
||||
LD DE,0 ; LOOP MAX (TIMEOUT)
|
||||
SD_WAITRDY1:
|
||||
; CALL PC_SPACE ; *DEBUG*
|
||||
CALL SD_GET
|
||||
; CALL PRTHEXBYTE ; *DEBUG*
|
||||
; XOR A ; *DEBUG* TO SIMULATE READY TIMEOUT
|
||||
INC A ; $FF -> $00
|
||||
RET Z ; IF READY, RETURN
|
||||
DEC DE
|
||||
LD A,D
|
||||
OR E
|
||||
JR NZ,SD_WAITRDY1 ; KEEP TRYING UNTIL TIMEOUT
|
||||
LD A,$FF ; SIGNAL TIMEOUT ERROR
|
||||
OR A ; SET FLAGS
|
||||
RET ; TIMEOUT
|
||||
;
|
||||
; SD_GETDATA
|
||||
;
|
||||
SD_GETDATA:
|
||||
PUSH BC ; SAVE LENGTH TO RECEIVE
|
||||
LD DE,$7FFF ; LOOP MAX (TIMEOUT)
|
||||
SD_GETDATA1:
|
||||
CALL SD_GET
|
||||
CP $FF ; WANT BYTE != $FF
|
||||
JR NZ,SD_GETDATA2 ; NOT $FF, MOVE ON
|
||||
DEC DE
|
||||
BIT 7,D
|
||||
JR Z,SD_GETDATA1 ; KEEP TRYING UNTIL TIMEOUT
|
||||
SD_GETDATA2:
|
||||
LD (SD_TOK),A
|
||||
POP DE ; RESTORE LENGTH TO RECEIVE
|
||||
CP $FE ; PACKET START?
|
||||
JR NZ,SD_GETDATA4 ; NOPE, ABORT, A HAS ERROR CODE
|
||||
LD HL,(DIOBUF) ; RECEIVE BUFFER
|
||||
SD_GETDATA3:
|
||||
CALL SD_GET ; GET NEXT BYTE
|
||||
LD (HL),A ; SAVE IT
|
||||
INC HL
|
||||
DEC DE
|
||||
LD A,D
|
||||
OR E
|
||||
JR NZ,SD_GETDATA3 ; LOOP FOR ALL BYTES
|
||||
CALL SD_GET ; DISCARD CRC BYTE 1
|
||||
CALL SD_GET ; DISCARD CRC BYTE 2
|
||||
XOR A ; RESULT IS ZERO
|
||||
SD_GETDATA4:
|
||||
RET
|
||||
;
|
||||
; SD_PUTDATA
|
||||
;
|
||||
SD_PUTDATA:
|
||||
PUSH BC ; SAVE LENGTH TO SEND
|
||||
|
||||
LD A,$FE ; PACKET START
|
||||
CALL SD_PUT ; SEND IT
|
||||
|
||||
POP DE ; RESTORE LENGTH TO SEND
|
||||
LD HL,(DIOBUF) ; RECEIVE BUFFER
|
||||
SD_PUTDATA1:
|
||||
LD A,(HL) ; GET NEXT BYTE TO SEND
|
||||
CALL SD_PUT ; SEND IF
|
||||
INC HL
|
||||
DEC DE
|
||||
LD A,D
|
||||
OR E
|
||||
JR NZ,SD_PUTDATA1 ; LOOP FOR ALL BYTES
|
||||
LD A,$FF ; DUMMY CRC BYTE
|
||||
CALL SD_PUT
|
||||
LD A,$FF ; DUMMY CRC BYTE
|
||||
CALL SD_PUT
|
||||
LD DE,$7FFF ; LOOP MAX (TIMEOUT)
|
||||
SD_PUTDATA2:
|
||||
CALL SD_GET
|
||||
CP $FF ; WANT BYTE != $FF
|
||||
JR NZ,SD_PUTDATA3 ; NOT $FF, MOVE ON
|
||||
DEC DE
|
||||
BIT 7,D
|
||||
JR Z,SD_PUTDATA2 ; KEEP TRYING UNTIL TIMEOUT
|
||||
SD_PUTDATA3:
|
||||
AND $1F
|
||||
LD (SD_TOK),A
|
||||
CP $05
|
||||
RET NZ
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
; SETUP COMMAND BUFFER
|
||||
;
|
||||
SD_SETCMD0: ; NO PARMS
|
||||
LD HL,SD_CMDBUF
|
||||
LD (HL),A
|
||||
INC HL
|
||||
XOR A
|
||||
LD (HL),A
|
||||
INC HL
|
||||
LD (HL),A
|
||||
INC HL
|
||||
LD (HL),A
|
||||
INC HL
|
||||
LD (HL),A
|
||||
INC HL
|
||||
LD A,$FF
|
||||
LD (HL),A
|
||||
RET
|
||||
;
|
||||
SD_SETCMDP: ; W/ PARMS IN BC & DE
|
||||
CALL SD_SETCMD0
|
||||
LD HL,SD_CMDP0
|
||||
LD (HL),B
|
||||
INC HL
|
||||
LD (HL),C
|
||||
INC HL
|
||||
LD (HL),D
|
||||
INC HL
|
||||
LD (HL),E
|
||||
RET
|
||||
;
|
||||
; EXECUTE A SD CARD COMMAND
|
||||
;
|
||||
SD_EXEC:
|
||||
XOR A
|
||||
LD (SD_RC),A
|
||||
LD (SD_TOK),A
|
||||
LD HL,SD_CMDBUF
|
||||
LD E,6 ; COMMANDS ARE 6 BYTES
|
||||
SD_EXEC1:
|
||||
#IF (SDCSIO)
|
||||
CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING
|
||||
IN A,(RTC)
|
||||
OR SD_CS ; SET CS
|
||||
OUT (RTC),A
|
||||
#ENDIF
|
||||
LD A,(HL)
|
||||
CALL SD_PUT
|
||||
INC HL
|
||||
DEC E
|
||||
JR NZ,SD_EXEC1
|
||||
LD DE,$100 ; LOOP MAX (TIMEOUT)
|
||||
SD_EXEC2:
|
||||
CALL SD_GET
|
||||
OR A ; SET FLAGS
|
||||
JP P,SD_EXEC3 ; IF HIGH BIT IS 0, WE HAVE RESULT
|
||||
DEC DE
|
||||
BIT 7,D
|
||||
JR Z,SD_EXEC2
|
||||
SD_EXEC3:
|
||||
LD (SD_RC),A
|
||||
#IF (SDTRACE >= 2)
|
||||
CALL SD_PRTTRN
|
||||
#ENDIF
|
||||
#IF (DSKYENABLE)
|
||||
CALL SD_DSKY
|
||||
#ENDIF
|
||||
RET
|
||||
;
|
||||
SD_EXECCMD0: ; EXEC COMMAND, NO PARMS
|
||||
CALL SD_SETCMD0
|
||||
JR SD_EXEC
|
||||
;
|
||||
SD_EXECCMDP: ; EXEC CMD W/ PARMS IN BC/DE
|
||||
CALL SD_SETCMDP
|
||||
JR SD_EXEC
|
||||
;
|
||||
; PUT CARD IN IDLE STATE
|
||||
;
|
||||
SD_GOIDLE:
|
||||
; SMALL DELAY HERE HELPS SOME CARDS
|
||||
LD DE,200 ; 5 MILISECONDS
|
||||
CALL VDELAY
|
||||
|
||||
; PUT CARD IN IDLE STATE
|
||||
LD A,SD_CMD0 ; CMD0 = ENTER IDLE STATE
|
||||
CALL SD_SETCMD0
|
||||
LD A,$95
|
||||
LD (SD_CMDBUF+5),A ; SET CRC=$95
|
||||
CALL SD_EXEC ; EXEC CMD
|
||||
CP $01 ; IN IDLE STATE?
|
||||
CALL SD_DONE
|
||||
RET
|
||||
;
|
||||
; INIT CARD
|
||||
;
|
||||
SD_INITCARD:
|
||||
#IF (PPISD)
|
||||
LD A,82H ; PPI PORT A=OUT, B=IN, C=OUT
|
||||
OUT (PIOX),A
|
||||
LD A,30H ; PC4,5 /CS HIGH
|
||||
OUT (PIOC),A
|
||||
#ENDIF
|
||||
LD A,20H ; PUT RTC LATCH TO IDLE
|
||||
OUT (RTC),A
|
||||
|
||||
#IF (SDCSIO)
|
||||
; CSIO SETUP
|
||||
; LD A,02 ; 18MHz/20 <= 400kHz
|
||||
LD A,06 ; ???
|
||||
OUT0 (CPU_CNTR),A
|
||||
#ENDIF
|
||||
CALL SD_DONE ; SEEMS TO HELP SOME CARDS...
|
||||
|
||||
#IF (!SDCSIO)
|
||||
#IF (PPISD)
|
||||
LD A,21H ; /CS=0, DOUT=1, CLK=0
|
||||
OUT (PIOC),A
|
||||
LD B,07FH ; 127 CLOCKS (255 TRANSITIONS STARTING WITH LO)
|
||||
#ELSE
|
||||
LD A,SD_CS | SD_DOUT ; CS=HI, DOUT=HI
|
||||
LD B,0FFH ; 127 CLOCKS (255 TRANSITIONS STARTING WITH LO)
|
||||
#ENDIF
|
||||
#ELSE
|
||||
CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING
|
||||
IN A,(RTC)
|
||||
OR SD_CS ; SET CS
|
||||
OUT (RTC),A
|
||||
LD B,16
|
||||
#ENDIF
|
||||
CALL SD_SENDCLKS ; INIT DELAY + GO SPI MODE
|
||||
|
||||
; WAIT FOR CARD TO BE READY FOR A COMMAND
|
||||
CALL SD_WAITRDY
|
||||
JP NZ,SD_ERRRDYTO
|
||||
|
||||
; PUT CARD IN IDLE STATE
|
||||
CALL SD_GOIDLE
|
||||
CALL NZ,SD_GOIDLE ; SOME CARDS REQUIRE A SECOND ATTEMPT
|
||||
JP NZ,SD_ERRCMD ; GIVE UP
|
||||
|
||||
SD_INITCARD00:
|
||||
LD A,SD_TYPESDSC ; ASSUME SDSC CARD TYPE
|
||||
LD (SD_TYPE),A ; SAVE IT
|
||||
|
||||
; CMD8 IS REQUIRED FOR V2 CARDS. FAILURE HERE IS OK AND
|
||||
; JUST MEANS THAT IT IS A V1.X CARD
|
||||
LD A,SD_CMD8
|
||||
|
||||
LD BC,0
|
||||
LD D,1 ; VHS=1, 2.7-3.6V
|
||||
LD E,$AA ; CHECK PATTERN
|
||||
CALL SD_SETCMDP
|
||||
LD A,$87
|
||||
LD (SD_CMDBUF+5),A ; SET CRC=$87
|
||||
CALL SD_EXEC ; EXEC CMD
|
||||
AND ~$01
|
||||
JR NZ,SD_INITCARD0
|
||||
|
||||
; CMD8 WORKED, SO THIS IS V2 CARD
|
||||
; NEED TO CONSUME EXTRA CMD8 RESPONSE BYTES (4)
|
||||
CALL SD_GET
|
||||
CALL SD_GET
|
||||
CALL SD_GET
|
||||
CALL SD_GET
|
||||
|
||||
SD_INITCARD0:
|
||||
CALL SD_DONE
|
||||
|
||||
LD B,0 ; LOOP LIMIT (TIMEOUT)
|
||||
SD_INITCARD1:
|
||||
; CALL SD_APP_OP_COND UNTIL CARD IS READY (NOT IDLE)
|
||||
LD DE,200 ; 5 MILLISECONDS
|
||||
CALL VDELAY
|
||||
LD A,SD_CMD55 ; APP CMD IS NEXT
|
||||
PUSH BC
|
||||
CALL SD_EXECCMD0
|
||||
POP BC
|
||||
AND ~$01 ; ONLY 0 (OK) OR 1 (IDLE) ARE OK
|
||||
CALL SD_DONE
|
||||
JP NZ,SD_ERRCMD
|
||||
LD A,SD_ACMD41 ; SD_APP_OP_COND
|
||||
PUSH BC
|
||||
LD BC,$4000 ; INDICATE WE SUPPORT HC
|
||||
LD DE,$0000
|
||||
CALL SD_EXECCMDP
|
||||
POP BC
|
||||
PUSH AF
|
||||
AND ~$01
|
||||
CALL SD_DONE
|
||||
POP AF
|
||||
; LD A,$01 ; *DEBUG* TO SIMULATE INIT TIMEOUT ERROR
|
||||
CP $00 ; INIT DONE?
|
||||
JR Z,SD_INITCARD2 ; YUP, MOVE ON
|
||||
CP $01 ; IDLE?
|
||||
JP NZ,SD_ERRCMD ; NOPE, MUST BE CMD ERROR, ABORT
|
||||
DJNZ SD_INITCARD1 ; KEEP CHECKING
|
||||
LD A,$FF ; SIGNAL TIMEOUT
|
||||
OR A
|
||||
JP SD_ERRINITTO
|
||||
|
||||
SD_INITCARD2:
|
||||
; CMD58 RETURNS THE 32 BIT OCR REGISTER, WE WANT TO CHECK
|
||||
; BIT 30, IF SET THIS IS SDHC/XC CARD
|
||||
LD A,SD_CMD58
|
||||
CALL SD_EXECCMD0
|
||||
CALL NZ,SD_DONE
|
||||
JP NZ,SD_ERRCMD
|
||||
|
||||
; CMD58 WORKED, GET OCR DATA AND SET CARD TYPE
|
||||
CALL SD_GET ; BITS 31-24
|
||||
AND $40 ; ISOLATE BIT 30 (CCS)
|
||||
JR Z,SD_INITCARD21 ; NOT HC/XC, BYPASS
|
||||
LD A,SD_TYPESDHC ; CARD TYPE = SDHC
|
||||
LD (SD_TYPE),A ; SAVE IT
|
||||
SD_INITCARD21:
|
||||
CALL SD_GET ; BITS 23-16, DISCARD
|
||||
CALL SD_GET ; BITS 15-8, DISCARD
|
||||
CALL SD_GET ; BITS 7-0, DISCARD
|
||||
CALL SD_DONE
|
||||
|
||||
; SET OUR DESIRED BLOCK LENGTH (512 BYTES)
|
||||
LD A,SD_CMD16 ; SET_BLOCK_LEN
|
||||
LD BC,0
|
||||
LD DE,512
|
||||
CALL SD_EXECCMDP
|
||||
CALL SD_DONE
|
||||
JP NZ,SD_ERRCMD
|
||||
|
||||
#IF (SDTRACE >= 2)
|
||||
CALL NEWLINE
|
||||
LD DE,SDSTR_SDTYPE
|
||||
CALL WRITESTR
|
||||
LD A,(SD_TYPE)
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
|
||||
; RET NZ ; IF ERROR, ABORT NOW WITH A SET CORRECTLY
|
||||
|
||||
#IF (SDCSIO)
|
||||
CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING
|
||||
XOR A ; NOW SET CSIO PORT TO FULL SPEED
|
||||
OUT (CPU_CNTR),A
|
||||
#ENDIF
|
||||
|
||||
XOR A ; A = 0 (STATUS = OK)
|
||||
LD (SD_STAT),A ; SAVE IT
|
||||
RET ; RETURN WITH A=0, AND Z SET
|
||||
;;
|
||||
;; GET AND PRINT CSD, CID
|
||||
;;
|
||||
;SD_CARDINFO:
|
||||
; LD A,SD_CMD9 ; SEND_CSD
|
||||
; CALL SD_EXECCMD0
|
||||
; CALL SD_DONE
|
||||
; JP NZ,SD_ERRCMD ; ABORT IF PROBLEM
|
||||
; LD BC,16 ; 16 BYTES OF CSD
|
||||
; CALL SD_GETDATA
|
||||
; CALL SD_DONE
|
||||
;
|
||||
; LD DE,SDSTR_CSD
|
||||
; CALL WRITESTR
|
||||
; LD DE,SECBUF
|
||||
; LD A,16
|
||||
; CALL PRTHEXBUF
|
||||
;
|
||||
; LD A,SD_CMD10 ; SEND_CID
|
||||
; CALL SD_EXECCMD0
|
||||
; CALL SD_DONE
|
||||
; JP NZ,SD_ERRCMD ; ABORT IF PROBLEM
|
||||
; LD BC,16 ; 16 BYTES OF CID
|
||||
; CALL SD_GETDATA
|
||||
; CALL SD_DONE
|
||||
;
|
||||
; LD DE,SDSTR_CID
|
||||
; CALL WRITESTR
|
||||
; LD DE,SECBUF
|
||||
; LD A,16
|
||||
; CALL PRTHEXBUF
|
||||
;
|
||||
; RET
|
||||
;
|
||||
; READ ONE SECTOR
|
||||
;
|
||||
|
||||
;
|
||||
; CHECK THE SD CARD, ATTEMPT TO REINITIALIZE IF NEEDED
|
||||
;
|
||||
SD_CHKCARD:
|
||||
LD A,(SD_STAT) ; GET STATUS
|
||||
OR A ; SET FLAGS
|
||||
CALL NZ,SD_INITCARD ; INIT CARD IF NOT READY
|
||||
RET ; RETURN WITH STATUS IN A
|
||||
|
||||
SD_RDSEC:
|
||||
CALL SD_CHKCARD ; CHECK / REINIT CARD AS NEEDED
|
||||
RET NZ
|
||||
|
||||
CALL SD_WAITRDY ; WAIT FOR CARD TO BE READY FOR A COMMAND
|
||||
JP NZ,SD_ERRRDYTO ; HANDLE NOT READY TIMEOUT ERROR
|
||||
|
||||
CALL SD_SETADDR ; SETUP BLOCK ADDRESS
|
||||
|
||||
LD A,SD_CMD17 ; READ_SINGLE_BLOCK
|
||||
CALL SD_EXECCMDP ; EXEC CMD WITH BLOCK ADDRESS AS PARM
|
||||
CALL NZ,SD_DONE ; TRANSACTION DONE IF ERROR OCCURRED
|
||||
JP NZ,SD_ERRCMD ; ABORT ON ERROR
|
||||
|
||||
LD BC,512 ; LENGTH TO READ
|
||||
CALL SD_GETDATA ; GET THE BLOCK
|
||||
CALL SD_DONE
|
||||
JP NZ,SD_ERRDATA ; DATA XFER ERROR
|
||||
RET
|
||||
;
|
||||
; WRITE ONE SECTOR
|
||||
;
|
||||
SD_WRSEC:
|
||||
CALL SD_CHKCARD ; CHECK / REINIT CARD AS NEEDED
|
||||
RET NZ
|
||||
|
||||
CALL SD_WAITRDY ; WAIT FOR CARD TO BE READY FOR A COMMAND
|
||||
JP NZ,SD_ERRRDYTO ; HANDLE NOT READY TIMEOUT ERROR
|
||||
|
||||
CALL SD_SETADDR ; SETUP BLOCK ADDRESS
|
||||
|
||||
LD A,SD_CMD24 ; WRITE_BLOCK
|
||||
CALL SD_EXECCMDP ; EXEC CMD WITH BLOCK ADDRESS AS PARM
|
||||
CALL NZ,SD_DONE ; TRANSACTION DONE IF ERROR OCCURRED
|
||||
JP NZ,SD_ERRCMD ; ABORT ON ERROR
|
||||
|
||||
LD BC,512 ; LENGTH TO WRITE
|
||||
CALL SD_PUTDATA ; PUT THE BLOCK
|
||||
CALL SD_DONE
|
||||
JP NZ,SD_ERRDATA ; DATA XFER ERROR
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
SD_SETADDR:
|
||||
LD A,(SD_TYPE)
|
||||
CP SD_TYPESDSC
|
||||
JR Z,SD_SETADDRSDSC
|
||||
CP SD_TYPESDHC
|
||||
JR Z,SD_SETADDRSDHC
|
||||
CALL PANIC
|
||||
|
||||
SD_SETADDRSDSC:
|
||||
LD HL,(HSTSEC)
|
||||
LD E,0
|
||||
LD D,L
|
||||
LD HL,(HSTTRK)
|
||||
LD C,L
|
||||
LD B,H
|
||||
XOR A
|
||||
RL D
|
||||
RL C
|
||||
RL B
|
||||
RET
|
||||
|
||||
SD_SETADDRSDHC:
|
||||
LD A,(HSTSEC) ; GET SECTOR (LSB ONLY)
|
||||
LD E,A ; PUT IN E
|
||||
LD HL,(HSTTRK) ; GET TRACK
|
||||
LD D,L ; TRACK LSB -> D
|
||||
LD C,H ; TRACK MSB -> C
|
||||
LD B,0 ; B ALWAYS ZERO
|
||||
RET
|
||||
;
|
||||
; HANDLE READY TIMEOUT ERROR
|
||||
;
|
||||
SD_ERRRDYTO:
|
||||
#IF (SDTRACE >= 1)
|
||||
CALL SD_PRTPREFIX
|
||||
LD DE,SDSTR_ERRRDYTO
|
||||
#ENDIF
|
||||
JR SD_CARDERR
|
||||
;
|
||||
; HANDLE INIT TIMEOUT ERROR
|
||||
;
|
||||
SD_ERRINITTO:
|
||||
#IF (SDTRACE >= 1)
|
||||
CALL SD_PRTPREFIX
|
||||
LD DE,SDSTR_ERRINITTO
|
||||
#ENDIF
|
||||
JR SD_CARDERR
|
||||
;
|
||||
; HANDLE COMMAND ERROR
|
||||
;
|
||||
SD_ERRCMD:
|
||||
#IF (SDTRACE == 1)
|
||||
CALL SD_PRTTRN
|
||||
#ENDIF
|
||||
#IF (SDTRACE >= 1)
|
||||
LD DE,SDSTR_ERRCMD
|
||||
#ENDIF
|
||||
JR SD_CARDERR
|
||||
;
|
||||
; HANDLE COMMAND ERROR
|
||||
;
|
||||
SD_ERRDATA:
|
||||
#IF (SDTRACE == 1)
|
||||
CALL SD_PRTTRN
|
||||
#ENDIF
|
||||
#IF (SDTRACE >= 1)
|
||||
LD DE,SDSTR_ERRDATA
|
||||
#ENDIF
|
||||
JR SD_CARDERR
|
||||
;
|
||||
; GENERIC ERROR HANDLER, DE POINTS TO ERROR STRING
|
||||
;
|
||||
SD_CARDERR:
|
||||
PUSH AF
|
||||
XOR A
|
||||
DEC A
|
||||
LD A,FALSE
|
||||
LD (SD_STAT),A
|
||||
#IF (SDTRACE >= 1)
|
||||
CALL PC_SPACE
|
||||
CALL PC_LBKT
|
||||
CALL WRITESTR
|
||||
CALL PC_RBKT
|
||||
#ENDIF
|
||||
POP AF
|
||||
LD (SD_STAT),A
|
||||
RET
|
||||
;
|
||||
; PRINT DIAGNONSTIC PREFIX
|
||||
;
|
||||
SD_PRTPREFIX:
|
||||
CALL NEWLINE
|
||||
LD DE,SDSTR_PREFIX
|
||||
CALL WRITESTR
|
||||
RET
|
||||
;
|
||||
; PRT COMMAND TRACE
|
||||
;
|
||||
SD_PRTTRN:
|
||||
PUSH AF
|
||||
|
||||
CALL SD_PRTPREFIX
|
||||
|
||||
LD DE,SD_CMDBUF
|
||||
LD A,6
|
||||
CALL PRTHEXBUF
|
||||
CALL PC_SPACE
|
||||
LD DE,SDSTR_ARROW
|
||||
CALL WRITESTR
|
||||
CALL PC_SPACE
|
||||
|
||||
LD DE,SDSTR_RC
|
||||
CALL WRITESTR
|
||||
LD A,(SD_RC)
|
||||
CALL PRTHEXBYTE
|
||||
CALL PC_SPACE
|
||||
|
||||
LD DE,SDSTR_TOK
|
||||
CALL WRITESTR
|
||||
LD A,(SD_TOK)
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
POP AF
|
||||
RET
|
||||
|
||||
;
|
||||
; DISPLAY COMMAND, LOW ORDER WORD OF PARMS, AND RC
|
||||
;
|
||||
#IF (DSKYENABLE)
|
||||
SD_DSKY:
|
||||
PUSH AF
|
||||
LD HL,DSKY_HEXBUF
|
||||
LD A,(SD_CMD)
|
||||
LD (HL),A
|
||||
INC HL
|
||||
LD A,(SD_CMDP2)
|
||||
LD (HL),A
|
||||
INC HL
|
||||
LD A,(SD_CMDP3)
|
||||
LD (HL),A
|
||||
INC HL
|
||||
LD A,(SD_RC)
|
||||
CALL DSKY_HEXOUT
|
||||
POP AF
|
||||
RET
|
||||
#ENDIF
|
||||
;
|
||||
;
|
||||
;
|
||||
#IF (SDCSIOFAST)
|
||||
MIRTAB: .DB 00H, 80H, 40H, 0C0H, 20H, 0A0H, 60H, 0E0H, 10H, 90H, 50H, 0D0H, 30H, 0B0H, 70H, 0F0H
|
||||
.DB 08H, 88H, 48H, 0C8H, 28H, 0A8H, 68H, 0E8H, 18H, 98H, 58H, 0D8H, 38H, 0B8H, 78H, 0F8H
|
||||
.DB 04H, 84H, 44H, 0C4H, 24H, 0A4H, 64H, 0E4H, 14H, 94H, 54H, 0D4H, 34H, 0B4H, 74H, 0F4H
|
||||
.DB 0CH, 8CH, 4CH, 0CCH, 2CH, 0ACH, 6CH, 0ECH, 1CH, 9CH, 5CH, 0DCH, 3CH, 0BCH, 7CH, 0FCH
|
||||
.DB 02H, 82H, 42H, 0C2H, 22H, 0A2H, 62H, 0E2H, 12H, 92H, 52H, 0D2H, 32H, 0B2H, 72H, 0F2H
|
||||
.DB 0AH, 8AH, 4AH, 0CAH, 2AH, 0AAH, 6AH, 0EAH, 1AH, 9AH, 5AH, 0DAH, 3AH, 0BAH, 7AH, 0FAH
|
||||
.DB 06H, 86H, 46H, 0C6H, 26H, 0A6H, 66H, 0E6H, 16H, 96H, 56H, 0D6H, 36H, 0B6H, 76H, 0F6H
|
||||
.DB 0EH, 8EH, 4EH, 0CEH, 2EH, 0AEH, 6EH, 0EEH, 1EH, 9EH, 5EH, 0DEH, 3EH, 0BEH, 7EH, 0FEH
|
||||
.DB 01H, 81H, 41H, 0C1H, 21H, 0A1H, 61H, 0E1H, 11H, 91H, 51H, 0D1H, 31H, 0B1H, 71H, 0F1H
|
||||
.DB 09H, 89H, 49H, 0C9H, 29H, 0A9H, 69H, 0E9H, 19H, 99H, 59H, 0D9H, 39H, 0B9H, 79H, 0F9H
|
||||
.DB 05H, 85H, 45H, 0C5H, 25H, 0A5H, 65H, 0E5H, 15H, 95H, 55H, 0D5H, 35H, 0B5H, 75H, 0F5H
|
||||
.DB 0DH, 8DH, 4DH, 0CDH, 2DH, 0ADH, 6DH, 0EDH, 1DH, 9DH, 5DH, 0DDH, 3DH, 0BDH, 7DH, 0FDH
|
||||
.DB 03H, 83H, 43H, 0C3H, 23H, 0A3H, 63H, 0E3H, 13H, 93H, 53H, 0D3H, 33H, 0B3H, 73H, 0F3H
|
||||
.DB 0BH, 8BH, 4BH, 0CBH, 2BH, 0ABH, 6BH, 0EBH, 1BH, 9BH, 5BH, 0DBH, 3BH, 0BBH, 7BH, 0FBH
|
||||
.DB 07H, 87H, 47H, 0C7H, 27H, 0A7H, 67H, 0E7H, 17H, 97H, 57H, 0D7H, 37H, 0B7H, 77H, 0F7H
|
||||
.DB 0FH, 8FH, 4FH, 0CFH, 2FH, 0AFH, 6FH, 0EFH, 1FH, 9FH, 5FH, 0DFH, 3FH, 0BFH, 7FH, 0FFH
|
||||
#ENDIF
|
||||
;
|
||||
;
|
||||
;
|
||||
SDSTR_PREFIX .TEXT "SD:$"
|
||||
SDSTR_ARROW .TEXT "-->$"
|
||||
SDSTR_RC .TEXT "RC=$"
|
||||
SDSTR_TOK .TEXT "TOK=$"
|
||||
SDSTR_OK .TEXT "OK$"
|
||||
SDSTR_ERR .TEXT "ERR$"
|
||||
SDSTR_ERRRDYTO .TEXT "READY TIMEOUT$"
|
||||
SDSTR_ERRINITTO .TEXT "INIT TIMEOUT$"
|
||||
SDSTR_ERRCMD .TEXT "CMD ERR$"
|
||||
SDSTR_ERRDATA .TEXT "DATA ERR$"
|
||||
SDSTR_SDTYPE .TEXT "SD CARD TYPE: $"
|
||||
;
|
||||
;==================================================================================================
|
||||
; SD DISK DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
SD_STAT .DB 0
|
||||
SD_TYPE .DB 0
|
||||
SD_RC .DB 0
|
||||
SD_TOK .DB 0
|
||||
SD_CMDBUF .EQU $
|
||||
SD_CMD .DB 0
|
||||
SD_CMDP0 .DB 0
|
||||
SD_CMDP1 .DB 0
|
||||
SD_CMDP2 .DB 0
|
||||
SD_CMDP3 .DB 0
|
||||
SD_CMDCRC .DB 0
|
||||
61
trunk/Source/sd_data.asm
Normal file
61
trunk/Source/sd_data.asm
Normal file
@@ -0,0 +1,61 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; IDE DISK DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
SD_SLICETRKS .EQU 65 ; TRACKS PER SLICE
|
||||
SD_TRKSIZE .EQU 128 ; SIZE OF TRACK (IN KB)
|
||||
SD_SLICESIZE .EQU ((SD_SLICETRKS * SD_TRKSIZE) + 1023) / 1024 ; SIZE OF EACH SLICE (IN MB)
|
||||
SD_NUMSLICES .EQU SDCAPACITY / SD_SLICESIZE ; TOTAL SLICES IN DEVICE
|
||||
SD0_SLICEDEF .EQU 0 ; DEFAULT SLICE FOR UNIT 0
|
||||
SD1_SLICEDEF .EQU 1 ; DEFAULT SLICE FOR UNIT 1
|
||||
SD2_SLICEDEF .EQU 2 ; DEFAULT SLICE FOR UNIT 0
|
||||
SD3_SLICEDEF .EQU 3 ; DEFAULT SLICE FOR UNIT 1
|
||||
;
|
||||
.DB DIODEV_SD + 0
|
||||
SDDPH0 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW SDCSV0,SDALV0
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
SD0_SLICE .DW SD0_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW SD_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
.DB DIODEV_SD + 0
|
||||
SDDPH1 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW SDCSV1,SDALV1
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
SD1_SLICE .DW SD1_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW SD_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
.DB DIODEV_SD + 0
|
||||
SDDPH2 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW SDCSV2,SDALV2
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
SD2_SLICE .DW SD2_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW SD_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
.DB DIODEV_SD + 0
|
||||
SDDPH3 .DW 0000,0000
|
||||
.DW 0000,0000
|
||||
.DW DIRBF,DPB_HD
|
||||
.DW SDCSV3,SDALV3
|
||||
.DB "LU" ; LOGICAL UNIT ENHANCEMENT SIGNATURE
|
||||
SD3_SLICE .DW SD3_SLICEDEF ; CURRENTLY ACTIVE SLICE
|
||||
.DW SD_NUMSLICES ; NUMBER OF SLICES AVAILABLE
|
||||
;
|
||||
SDCKS .EQU 0 ; CKS: 0 FOR NON-REMOVABLE MEDIA
|
||||
SDALS .EQU 256 ; ALS: BLKS / 8 = 2048 / 8 = 256 (ROUNDED UP)
|
||||
;
|
||||
SDCSV0: .FILL SDCKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
SDALV0: .FILL SDALS ; MAX OF 2048 DATA BLOCKS
|
||||
SDCSV1: .FILL SDCKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
SDALV1: .FILL SDALS ; MAX OF 2048 DATA BLOCKS
|
||||
SDCSV2: .FILL SDCKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
SDALV2: .FILL SDALS ; MAX OF 2048 DATA BLOCKS
|
||||
SDCSV3: .FILL SDCKS ; NO DIRECTORY CHECKSUM, NON-REMOVABLE DRIVE
|
||||
SDALV3: .FILL SDALS ; MAX OF 2048 DATA BLOCKS
|
||||
577
trunk/Source/std.asm
Normal file
577
trunk/Source/std.asm
Normal file
@@ -0,0 +1,577 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; STANDARD INCLUDE STUFF
|
||||
;==================================================================================================
|
||||
;
|
||||
; 5/21/2012 2.0.0.0 dwg - added B1F0PEEK & B1F0POKE
|
||||
;
|
||||
; 5/11/2012 2.0.0.0 dwg - moved BIOS JMPS together
|
||||
;
|
||||
; 3/04/2012 2.0.0.0 dwg - added CBIOS_BNKSEL for new BIOS jump (OEM extension)
|
||||
;
|
||||
; 2/21/2012 dwg - added TERM_VT52 terminal type for VDU
|
||||
; 12/12/2011 dwg - changed TERM_NOT_SPEC to TERM_TTY & TTY=0 ANSI=1 WYSE=2
|
||||
;
|
||||
; 12/11/2011 dwg - added TERM_ANSI and TERM_WYSE for TERMTYPE
|
||||
;
|
||||
; 11/29/2011 dwg - now uses dynamically generated include file
|
||||
; instead of static definitions.
|
||||
;
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
;
|
||||
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
|
||||
;
|
||||
; BOOT STYLE
|
||||
;
|
||||
BT_MENU .EQU 1 ; WAIT FOR MENU SELECTION AT LOADER PROMPT
|
||||
BT_AUTO .EQU 2 ; AUTO SELECT BOOT_DEFAULT AFTER BOOT_TIMEOUT
|
||||
;
|
||||
; VDU MODE SELECTIONS
|
||||
;
|
||||
VDUMODE_VDU .EQU 1 ; ORIGINAL ECB VDU (6545 CHIP)
|
||||
VDUMODE_CVDU .EQU 2 ; ECB VDU COLOR (PENDING HARDWARE DEVELOPMENT)
|
||||
VDUMODE_N8 .EQU 3 ; N8 ONBOARD VIDEO SUBSYSTEM (NOT IMPLEMENTED)
|
||||
;
|
||||
; CHARACTER DEVICES
|
||||
;
|
||||
CIODEV_UART .EQU $00
|
||||
CIODEV_PRPCON .EQU $10
|
||||
CIODEV_VDU .EQU $20
|
||||
CIODEV_CVDU .EQU $30
|
||||
CIODEV_PPPCON .EQU $40
|
||||
CIODEV_BAT .EQU $E0
|
||||
CIODEV_NUL .EQU $F0
|
||||
;
|
||||
; DISK DEVICES (ONLY FIRST NIBBLE RELEVANT, SECOND NIBBLE RESERVED FOR UNIT)
|
||||
;
|
||||
DIODEV_MD .EQU $00
|
||||
DIODEV_FD .EQU $10
|
||||
DIODEV_IDE .EQU $20
|
||||
DIODEV_ATAPI .EQU $30
|
||||
DIODEV_PPIDE .EQU $40
|
||||
DIODEV_SD .EQU $50
|
||||
DIODEV_PRPSD .EQU $60
|
||||
DIODEV_PPPSD .EQU $70
|
||||
DIODEV_HDSK .EQU $80
|
||||
;
|
||||
; 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
|
||||
;
|
||||
; DISK MAP SELECTION OPTIONS
|
||||
;
|
||||
DM_ROM .EQU 1 ; ROM DRIVE PRIORITY
|
||||
DM_RAM .EQU 2 ; RAM DRIVE PRIORITY
|
||||
DM_FD .EQU 3 ; FLOPPY DRIVE PRIORITY
|
||||
DM_IDE .EQU 4 ; IDE DRIVE PRIORITY
|
||||
DM_PPIDE .EQU 5 ; PPIDE DRIVE PRIORITY
|
||||
DM_SD .EQU 6 ; SD DRIVE PRIORITY
|
||||
DM_PRPSD .EQU 7 ; PROPIO SD DRIVE PRIORITY
|
||||
DM_PPPSD .EQU 8 ; PROPIO SD DRIVE PRIORITY
|
||||
DM_HDSK .EQU 9 ; SIMH HARD DISK DRIVE PRIORITY
|
||||
;
|
||||
; 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_HD .EQU 3
|
||||
MID_FD720 .EQU 4
|
||||
MID_FD144 .EQU 5
|
||||
MID_FD360 .EQU 6
|
||||
MID_FD120 .EQU 7
|
||||
MID_FD111 .EQU 8
|
||||
;
|
||||
; FD MODE SELECTIONS
|
||||
;
|
||||
FDMODE_DIO .EQU 1 ; DISKIO V1
|
||||
FDMODE_ZETA .EQU 2 ; ZETA
|
||||
FDMODE_DIDE .EQU 3 ; DUAL IDE
|
||||
FDMODE_N8 .EQU 4 ; N8
|
||||
FDMODE_DIO3 .EQU 5 ; DISKIO V3
|
||||
;
|
||||
; IDE MODE SELECTIONS
|
||||
;
|
||||
IDEMODE_DIO .EQU 1 ; DISKIO V1
|
||||
IDEMODE_DIDE .EQU 2 ; DUAL IDE
|
||||
;
|
||||
; PPIDE MODE SELECTIONS
|
||||
;
|
||||
PPIDEMODE_STD .EQU 1 ; STANDARD N8VEM PARALLEL PORT
|
||||
PPIDEMODE_DIO3 .EQU 2 ; DISKIO V3 PARALLEL PORT
|
||||
;
|
||||
; CONSOLE DEVICE CHOICES FOR LDRCON AND DBGCON IN CONFIG SETTINGS
|
||||
;
|
||||
CON_UART .EQU 1
|
||||
CON_VDU .EQU 2
|
||||
CON_PRP .EQU 3
|
||||
CON_PPP .EQU 4
|
||||
;
|
||||
; CONSOLE TERMINAL TYPE CHOICES
|
||||
;
|
||||
TERM_TTY .EQU 0
|
||||
TERM_ANSI .EQU 1
|
||||
TERM_WYSE .EQU 2
|
||||
TERM_VT52 .EQU 3
|
||||
;
|
||||
; 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.2C"
|
||||
#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
|
||||
;
|
||||
#IF (PLATFORM != PLT_N8)
|
||||
;
|
||||
; N8VEM HARDWARE IO PORT ADDRESSES AND MEMORY LOCATIONS
|
||||
;
|
||||
MPCL_RAM .EQU 78H ; BASE IO ADDRESS OF RAM MEMORY PAGER CONFIGURATION LATCH
|
||||
MPCL_ROM .EQU 7CH ; BASE IO ADDRESS OF ROM MEMORY PAGER CONFIGURATION LATCH
|
||||
RTC .EQU 70H ; ADDRESS OF RTC LATCH AND INPUT PORT
|
||||
|
||||
;__HARDWARE_INTERFACES________________________________________________________________________________________________________________
|
||||
;
|
||||
; PIO 82C55 I/O IS DECODED TO PORT 60-67
|
||||
;
|
||||
PIOA .EQU 60H ; PORT A
|
||||
PIOB .EQU 61H ; PORT B
|
||||
PIOC .EQU 62H ; PORT C
|
||||
PIOX .EQU 63H ; PIO CONTROL PORT
|
||||
;
|
||||
; 16C550 SERIAL LINE UART
|
||||
;
|
||||
SIO_BASE .EQU 68H
|
||||
SIO_RBR .EQU SIO_BASE + 0 ; DLAB=0: RCVR BUFFER REG (READ ONLY)
|
||||
SIO_THR .EQU SIO_BASE + 0 ; DLAB=0: XMIT HOLDING REG (WRITE ONLY)
|
||||
SIO_IER .EQU SIO_BASE + 1 ; DLAB=0: INT ENABLE REG
|
||||
SIO_IIR .EQU SIO_BASE + 2 ; INT IDENT REGISTER (READ ONLY)
|
||||
SIO_FCR .EQU SIO_BASE + 2 ; FIFO CONTROL REG (WRITE ONLY)
|
||||
SIO_LCR .EQU SIO_BASE + 3 ; LINE CONTROL REG
|
||||
SIO_MCR .EQU SIO_BASE + 4 ; MODEM CONTROL REG
|
||||
SIO_LSR .EQU SIO_BASE + 5 ; LINE STATUS REG
|
||||
SIO_MSR .EQU SIO_BASE + 6 ; MODEM STATUS REG
|
||||
SIO_SCR .EQU SIO_BASE + 7 ; SCRATCH REGISTER
|
||||
SIO_DLL .EQU SIO_BASE + 0 ; DLAB=1: DIVISOR LATCH (LS)
|
||||
SIO_DLM .EQU SIO_BASE + 1 ; DLAB=1: DIVISOR LATCH (MS)
|
||||
;
|
||||
#ENDIF ; (PLATFORM != PLT_N8)
|
||||
;
|
||||
#IF (PLATFORM == PLT_N8)
|
||||
;
|
||||
; Z180 REGISTERS
|
||||
;
|
||||
CPU_IOBASE .EQU 40H ; ONLY RELEVANT FOR Z180
|
||||
;
|
||||
CPU_CNTLA0: .EQU CPU_IOBASE+$00 ;ASCI0 control A
|
||||
CPU_CNTLA1: .EQU CPU_IOBASE+$01 ;ASCI1 control A
|
||||
CPU_CNTLB0: .EQU CPU_IOBASE+$02 ;ASCI0 control B
|
||||
CPU_CNTLB1: .EQU CPU_IOBASE+$03 ;ASCI1 control B
|
||||
CPU_STAT0: .EQU CPU_IOBASE+$04 ;ASCI0 status
|
||||
CPU_STAT1: .EQU CPU_IOBASE+$05 ;ASCI1 status
|
||||
CPU_TDR0: .EQU CPU_IOBASE+$06 ;ASCI0 transmit
|
||||
CPU_TDR1: .EQU CPU_IOBASE+$07 ;ASCI1 transmit
|
||||
CPU_RDR0: .EQU CPU_IOBASE+$08 ;ASCI0 receive
|
||||
CPU_RDR1: .EQU CPU_IOBASE+$09 ;ASCI1 receive
|
||||
CPU_CNTR: .EQU CPU_IOBASE+$0A ;CSI/O control
|
||||
CPU_TRDR: .EQU CPU_IOBASE+$0B ;CSI/O transmit/receive
|
||||
CPU_TMDR0L: .EQU CPU_IOBASE+$0C ;Timer 0 data lo
|
||||
CPU_TMDR0H: .EQU CPU_IOBASE+$0D ;Timer 0 data hi
|
||||
CPU_RLDR0L: .EQU CPU_IOBASE+$0E ;Timer 0 reload lo
|
||||
CPU_RLDR0H: .EQU CPU_IOBASE+$0F ;Timer 0 reload hi
|
||||
CPU_TCR: .EQU CPU_IOBASE+$10 ;Timer control
|
||||
;
|
||||
CPU_ASEXT0: .EQU CPU_IOBASE+$12 ;ASCI0 extension control (Z8S180)
|
||||
CPU_ASEXT1: .EQU CPU_IOBASE+$13 ;ASCI1 extension control (Z8S180)
|
||||
;
|
||||
CPU_TMDR1L: .EQU CPU_IOBASE+$14 ;Timer 1 data lo
|
||||
CPU_TMDR1H: .EQU CPU_IOBASE+$15 ;Timer 1 data hi
|
||||
CPU_RLDR1L: .EQU CPU_IOBASE+$16 ;Timer 1 reload lo
|
||||
CPU_RLDR1H: .EQU CPU_IOBASE+$17 ;Timer 1 reload hi
|
||||
CPU_FRC: .EQU CPU_IOBASE+$18 ;Free running counter
|
||||
|
||||
CPU_ASTC0L: .EQU CPU_IOBASE+$1A ;ASCI0 Time constant lo (Z8S180)
|
||||
CPU_ASTC0H: .EQU CPU_IOBASE+$1B ;ASCI0 Time constant hi (Z8S180)
|
||||
CPU_ASTC1L: .EQU CPU_IOBASE+$1C ;ASCI1 Time constant lo (Z8S180)
|
||||
CPU_ASTC1H: .EQU CPU_IOBASE+$1D ;ASCI1 Time constant hi (Z8S180)
|
||||
CPU_CMR: .EQU CPU_IOBASE+$1E ;Clock multiplier (latest Z8S180)
|
||||
CPU_CCR: .EQU CPU_IOBASE+$1F ;CPU control (Z8S180)
|
||||
;
|
||||
CPU_SAR0L: .EQU CPU_IOBASE+$20 ;DMA0 source addr lo
|
||||
CPU_SAR0H: .EQU CPU_IOBASE+$21 ;DMA0 source addr hi
|
||||
CPU_SAR0B: .EQU CPU_IOBASE+$22 ;DMA0 source addr bank
|
||||
CPU_DAR0L: .EQU CPU_IOBASE+$23 ;DMA0 dest addr lo
|
||||
CPU_DAR0H: .EQU CPU_IOBASE+$24 ;DMA0 dest addr hi
|
||||
CPU_DAR0B: .EQU CPU_IOBASE+$25 ;DMA0 dest addr bank
|
||||
CPU_BCR0L: .EQU CPU_IOBASE+$26 ;DMA0 byte count lo
|
||||
CPU_BCR0H: .EQU CPU_IOBASE+$27 ;DMA0 byte count hi
|
||||
CPU_MAR1L: .EQU CPU_IOBASE+$28 ;DMA1 memory addr lo
|
||||
CPU_MAR1H: .EQU CPU_IOBASE+$29 ;DMA1 memory addr hi
|
||||
CPU_MAR1B: .EQU CPU_IOBASE+$2A ;DMA1 memory addr bank
|
||||
CPU_IAR1L: .EQU CPU_IOBASE+$2B ;DMA1 I/O addr lo
|
||||
CPU_IAR1H: .EQU CPU_IOBASE+$2C ;DMA1 I/O addr hi
|
||||
CPU_IAR1B: .EQU CPU_IOBASE+$2D ;DMA1 I/O addr bank (Z8S180)
|
||||
CPU_BCR1L: .EQU CPU_IOBASE+$2E ;DMA1 byte count lo
|
||||
CPU_BCR1H: .EQU CPU_IOBASE+$2F ;DMA1 byte count hi
|
||||
CPU_DSTAT: .EQU CPU_IOBASE+$30 ;DMA status
|
||||
CPU_DMODE: .EQU CPU_IOBASE+$31 ;DMA mode
|
||||
CPU_DCNTL: .EQU CPU_IOBASE+$32 ;DMA/WAIT control
|
||||
CPU_IL: .EQU CPU_IOBASE+$33 ;Interrupt vector load
|
||||
CPU_ITC: .EQU CPU_IOBASE+$34 ;INT/TRAP control
|
||||
;
|
||||
CPU_RCR: .EQU CPU_IOBASE+$36 ;Refresh control
|
||||
;
|
||||
CPU_CBR: .EQU CPU_IOBASE+$38 ;MMU common base register
|
||||
CPU_BBR: .EQU CPU_IOBASE+$39 ;MMU bank base register
|
||||
CPU_CBAR .EQU CPU_IOBASE+$3A ;MMU common/bank area register
|
||||
;
|
||||
CPU_OMCR: .EQU CPU_IOBASE+$3E ;Operation mode control
|
||||
CPU_ICR: .EQU $3F ;I/O control register (not relocated!!!)
|
||||
;
|
||||
; N8 ONBOARD I/O REGISTERS
|
||||
;
|
||||
N8_IOBASE .EQU $80
|
||||
;
|
||||
PIO .EQU N8_IOBASE+$00
|
||||
PIOA .EQU PIO+$00 ; PORT A
|
||||
PIOB .EQU PIO+$01 ; PORT B
|
||||
PIOC .EQU PIO+$02 ; PORT C
|
||||
PIOX .EQU PIO+$03 ; PIO CONTROL PORT
|
||||
;
|
||||
PIO2 .EQU N8_IOBASE+$04
|
||||
PIO2A .EQU PIO2+$00 ; PORT A
|
||||
PIO2B .EQU PIO2+$01 ; PORT B
|
||||
PIO2C .EQU PIO2+$02 ; PORT C
|
||||
PIO2X .EQU PIO2+$03 ; PIO CONTROL PORT
|
||||
;
|
||||
RTC: .EQU N8_IOBASE+$08 ;RTC latch and buffer
|
||||
;FDC: .EQU N8_IOBASE+$0C ;Floppy disk controller
|
||||
;UTIL: .EQU N8_IOBASE+$10 ;Floppy disk utility
|
||||
ACR: .EQU N8_IOBASE+$14 ;auxillary control register
|
||||
RMAP: .EQU N8_IOBASE+$16 ;ROM page register
|
||||
VDP: .EQU N8_IOBASE+$18 ;Video Display Processor (TMS9918A)
|
||||
PSG: .EQU N8_IOBASE+$1C ;Programmable Sound Generator (AY-3-8910)
|
||||
;
|
||||
DEFACR .EQU $1B
|
||||
;
|
||||
#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
|
||||
;
|
||||
; DISK DRIVER FUNCTIONS
|
||||
;
|
||||
DF_READY .EQU 1
|
||||
DF_SELECT .EQU 2
|
||||
DF_READ .EQU 3
|
||||
DF_WRITE .EQU 4
|
||||
DF_FORMAT .EQU 5
|
||||
;
|
||||
; BIOS FUNCTIONS
|
||||
;
|
||||
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_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_DIOGBA .EQU BF_DIO + 8 ; DISK GET BUFFER ADR
|
||||
BF_DIOSBA .EQU BF_DIO + 9 ; DISK SET BUFFER ADR
|
||||
;
|
||||
BF_CLK .EQU $20
|
||||
BF_CLKRD .EQU BF_CLK + 0
|
||||
BF_CLKWR .EQU BF_CLK + 1
|
||||
;
|
||||
BF_VDU .EQU $30
|
||||
BF_VDUIN .EQU BF_VDU + 0 ; VDU CHARACTER INPUT
|
||||
BF_VDUOUT .EQU BF_VDU + 1 ; VDU CHARACTER OUTPUT
|
||||
BF_VDUIST .EQU BF_VDU + 2 ; VDU CHARACTER INPUT STATUS
|
||||
BF_VDUOST .EQU BF_VDU + 3 ; VDU CHARACTER OUTPUT STATUS
|
||||
BF_VDUXY .EQU BF_VDU + 4 ; VDU CURSOR POSITION X/Y
|
||||
;
|
||||
BF_SYS .EQU $F0
|
||||
BF_SYSGETCFG .EQU BF_SYS + 0 ; GET CONFIGURATION DATA BLOCK
|
||||
BF_SYSSETCFG .EQU BF_SYS + 1 ; SET CONFIGURATION DATA BLOCK
|
||||
BF_SYSBNKCPY .EQU BF_SYS + 2 ; COPY TO/FROM RAM/ROM MEMORY BANK
|
||||
;
|
||||
;
|
||||
; MEMORY LAYOUT
|
||||
;
|
||||
CPM_LOC .EQU 0D000H ; CONFIGURABLE: LOCATION OF CPM FOR RUNNING SYSTEM
|
||||
CPM_SIZ .EQU 2F00H ; SIZE OF CPM IMAGE (CCP + BDOS + CBIOS (INCLUDING DATA))
|
||||
CPM_END .EQU CPM_LOC + CPM_SIZ
|
||||
;
|
||||
CCP_LOC .EQU CPM_LOC ; START OF COMMAND PROCESSOR
|
||||
CCP_SIZ .EQU 800H
|
||||
CCP_END .EQU CCP_LOC + CCP_SIZ
|
||||
;
|
||||
BDOS_LOC .EQU CCP_END ; START OF BDOS
|
||||
BDOS_SIZ .EQU 0E00H
|
||||
BDOS_END .EQU BDOS_LOC + BDOS_SIZ
|
||||
;
|
||||
CBIOS_LOC .EQU BDOS_END
|
||||
CBIOS_SIZ .EQU CPM_END - CBIOS_LOC
|
||||
CBIOS_END .EQU CBIOS_LOC + CBIOS_SIZ
|
||||
;
|
||||
CPM_ENT .EQU CBIOS_LOC
|
||||
;
|
||||
HB_LOC .EQU CPM_END
|
||||
HB_SIZ .EQU 100H
|
||||
HB_END .EQU HB_LOC + HB_SIZ
|
||||
;
|
||||
MON_LOC .EQU 0C000H ; LOCATION OF MONITOR FOR RUNNING SYSTEM
|
||||
MON_SIZ .EQU 01000H ; SIZE OF MONITOR BINARY IMAGE
|
||||
MON_END .EQU MON_LOC + MON_SIZ
|
||||
MON_DSKY .EQU MON_LOC ; MONITOR ENTRY (DSKY)
|
||||
MON_UART .EQU MON_LOC + 3 ; MONITOR ENTRY (UART)
|
||||
;
|
||||
CBIOS_BOOT .EQU CBIOS_LOC + 0
|
||||
CBIOS_WBOOT .EQU CBIOS_LOC + 3
|
||||
CBIOS_CONST .EQU CBIOS_LOC + 6
|
||||
CBIOS_CONIN .EQU CBIOS_LOC + 9
|
||||
CBIOS_CONOUT .EQU CBIOS_LOC + 12
|
||||
CBIOS_LIST .EQU CBIOS_LOC + 15
|
||||
CBIOS_PUNCH .EQU CBIOS_LOC + 18
|
||||
CBIOS_READER .EQU CBIOS_LOC + 21
|
||||
CBIOS_HOME .EQU CBIOS_LOC + 24
|
||||
CBIOS_SELDSK .EQU CBIOS_LOC + 27
|
||||
CBIOS_SETTRK .EQU CBIOS_LOC + 30
|
||||
CBIOS_SETSEC .EQU CBIOS_LOC + 33
|
||||
CBIOS_SETDMA .EQU CBIOS_LOC + 36
|
||||
CBIOS_READ .EQU CBIOS_LOC + 39
|
||||
CBIOS_WRITE .EQU CBIOS_LOC + 42
|
||||
CBIOS_LISTST .EQU CBIOS_LOC + 45
|
||||
CBIOS_SECTRN .EQU CBIOS_LOC + 48
|
||||
;
|
||||
; EXTENDED CBIOS FUNCTIONS
|
||||
;
|
||||
CBIOS_BNKSEL .EQU CBIOS_LOC + 51
|
||||
CBIOS_GETDSK .EQU CBIOS_LOC + 54
|
||||
CBIOS_SETDSK .EQU CBIOS_LOC + 57
|
||||
CBIOS_GETINFO .EQU CBIOS_LOC + 60
|
||||
;
|
||||
; PLACEHOLDERS FOR FUTURE CBIOS EXTENSIONS
|
||||
;
|
||||
CBIOS_RSVD1 .EQU CBIOS_LOC + 63
|
||||
CBIOS_RSVD2 .EQU CBIOS_LOC + 76
|
||||
CBIOS_RSVD3 .EQU CBIOS_LOC + 69
|
||||
CBIOS_RSVD4 .EQU CBIOS_LOC + 72
|
||||
;
|
||||
CDISK: .EQU 00004H ; LOC IN PAGE 0 OF CURRENT DISK NUMBER 0=A,...,15=P
|
||||
IOBYTE: .EQU 00003H ; LOC IN PAGE 0 OF I/O DEFINITION BYTE.
|
||||
;
|
||||
; MEMORY CONFIGURATION
|
||||
;
|
||||
MSIZE .EQU 59 ; CP/M VERSION MEMORY SIZE IN KILOBYTES
|
||||
;
|
||||
; "BIAS" IS ADDRESS OFFSET FROM 3400H FOR MEMORY SYSTEMS
|
||||
; THAN 16K (REFERRED TO AS "B" THROUGHOUT THE TEXT)
|
||||
;
|
||||
BIAS: .EQU (MSIZE-20)*1024
|
||||
CCP: .EQU 3400H+BIAS ; BASE OF CCP
|
||||
BDOS: .EQU CCP+806H ; BASE OF BDOS
|
||||
BIOS: .EQU CCP+1600H ; BASE OF BIOS
|
||||
CCPSIZ: .EQU 00800H
|
||||
;
|
||||
#IF (PLATFORM == PLT_N8VEM)
|
||||
#DEFINE PLATFORM_NAME "N8VEM Z80 SBC"
|
||||
#ENDIF
|
||||
#IF (PLATFORM == PLT_ZETA)
|
||||
#DEFINE PLATFORM_NAME "ZETA Z80 SBC"
|
||||
#ENDIF
|
||||
#IF (PLATFORM == PLT_N8)
|
||||
#DEFINE PLATFORM_NAME "N8 Z180 SBC"
|
||||
#ENDIF
|
||||
;
|
||||
#IF (DSKYENABLE)
|
||||
#DEFINE DSKYLBL ", DSKY"
|
||||
#ELSE
|
||||
#DEFINE DSKYLBL ""
|
||||
#ENDIF
|
||||
;
|
||||
#IF (VDUENABLE)
|
||||
#DEFINE VDULBL ", VDU"
|
||||
#ELSE
|
||||
#DEFINE VDULBL ""
|
||||
#ENDIF
|
||||
;
|
||||
#IF (FDENABLE)
|
||||
#IF (FDMAUTO)
|
||||
#DEFINE FDLBL ", FLOPPY (AUTOSIZE)"
|
||||
#ELSE
|
||||
#IF (FDMEDIA == FDM720)
|
||||
#DEFINE FDLBL ", FLOPPY (720KB)"
|
||||
#ENDIF
|
||||
#IF (FDMEDIA == FDM144)
|
||||
#DEFINE FDLBL ", FLOPPY (1.44MB)"
|
||||
#ENDIF
|
||||
#IF (FDMEDIA == FDM120)
|
||||
#DEFINE FDLBL ", FLOPPY (1.20MB)"
|
||||
#ENDIF
|
||||
#IF (FDMEDIA == FDM360)
|
||||
#DEFINE FDLBL ", FLOPPY (360KB)"
|
||||
#ENDIF
|
||||
#IF (FDMEDIA == FDM111)
|
||||
#DEFINE FDLBL ", FLOPPY (1.11MB)"
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
#ELSE
|
||||
#DEFINE FDLBL ""
|
||||
#ENDIF
|
||||
;
|
||||
#IF (IDEENABLE)
|
||||
#IF (IDEMODE == IDEMODE_DIO)
|
||||
#DEFINE IDELBL ", IDE (DISKIO)"
|
||||
#ENDIF
|
||||
#IF (IDEMODE == IDEMODE_DIDE)
|
||||
#DEFINE IDELBL ", IDE (DUAL IDE)"
|
||||
#ENDIF
|
||||
#ELSE
|
||||
#DEFINE IDELBL ""
|
||||
#ENDIF
|
||||
;
|
||||
#IF (PPIDEENABLE)
|
||||
#IF (PPIDEMODE == PPIDEMODE_STD)
|
||||
#DEFINE PPIDELBL ", PPIDE (STD)"
|
||||
#ENDIF
|
||||
#IF (PPIDEMODE == PPIDEMODE_DIO3)
|
||||
#DEFINE PPIDELBL ", PPIDE (DISKIO V3)"
|
||||
#ENDIF
|
||||
#ELSE
|
||||
#DEFINE PPIDELBL ""
|
||||
#ENDIF
|
||||
;
|
||||
#IF (SDENABLE)
|
||||
#DEFINE SDLBL ", SD CARD"
|
||||
#ELSE
|
||||
#DEFINE SDLBL ""
|
||||
#ENDIF
|
||||
;
|
||||
#IF (IDEENABLE)
|
||||
#DEFINE IDELBL ", IDE"
|
||||
#ELSE
|
||||
#DEFINE IDELBL ""
|
||||
#ENDIF
|
||||
;
|
||||
#IF (PPIDEENABLE)
|
||||
#DEFINE PPIDELBL ", PPIDE"
|
||||
#ELSE
|
||||
#DEFINE PPIDELBL ""
|
||||
#ENDIF
|
||||
|
||||
#IF (SDENABLE)
|
||||
#DEFINE SDLBL ", SD CARD"
|
||||
#ELSE
|
||||
#DEFINE SDLBL ""
|
||||
#ENDIF
|
||||
|
||||
#IF (PRPENABLE)
|
||||
#IF (PRPCONENABLE & PRPSDENABLE)
|
||||
#DEFINE PRPLBL ", PROPIO (CONSOLE, SD CARD)"
|
||||
#ENDIF
|
||||
#IF (PRPCONENABLE & !PRPSDENABLE)
|
||||
#DEFINE PRPLBL ", PROPIO (CONSOLE)"
|
||||
#ENDIF
|
||||
#IF (!PRPCONENABLE & PRPSDENABLE)
|
||||
#DEFINE PRPLBL ", PROPIO (SD CARD)"
|
||||
#ENDIF
|
||||
#IF (!PRPCONENABLE & !PRPSDENABLE)
|
||||
#DEFINE PRPLBL ", PROPIO ()"
|
||||
#ENDIF
|
||||
#ELSE
|
||||
#DEFINE PRPLBL ""
|
||||
#ENDIF
|
||||
|
||||
#IF (PPPENABLE)
|
||||
#IF (PPPCONENABLE & PPPSDENABLE)
|
||||
#DEFINE PPPLBL ", PARPORTPROP (CONSOLE, SD CARD)"
|
||||
#ENDIF
|
||||
#IF (PPPCONENABLE & !PPPSDENABLE)
|
||||
#DEFINE PPPLBL ", PARPORTPROP (CONSOLE)"
|
||||
#ENDIF
|
||||
#IF (!PPPCONENABLE & PPPSDENABLE)
|
||||
#DEFINE PPPLBL ", PARPORTPROP (SD CARD)"
|
||||
#ENDIF
|
||||
#IF (!PPPCONENABLE & !PPPSDENABLE)
|
||||
#DEFINE PPPLBL ", PARPORTPROP ()"
|
||||
#ENDIF
|
||||
#ELSE
|
||||
#DEFINE PPPLBL ""
|
||||
#ENDIF
|
||||
|
||||
.ECHO "Configuration: "
|
||||
.ECHO PLATFORM_NAME
|
||||
.ECHO DSKYLBL
|
||||
.ECHO VDULBL
|
||||
.ECHO FDLBL
|
||||
.ECHO IDELBL
|
||||
.ECHO PPIDELBL
|
||||
.ECHO SDLBL
|
||||
.ECHO PRPLBL
|
||||
.ECHO PPPLBL
|
||||
.ECHO "\n"
|
||||
34
trunk/Source/syscfg.asm
Normal file
34
trunk/Source/syscfg.asm
Normal file
@@ -0,0 +1,34 @@
|
||||
;___SYSCFG_____________________________________________________________________________________________________________
|
||||
;
|
||||
; syscfg.asm 3/04/2012 2.0.0.0 dwg - added required configuration information
|
||||
;
|
||||
; Include standard BIOS definitions
|
||||
;
|
||||
#INCLUDE "std.asm"
|
||||
;
|
||||
.ORG 0000H ; ALL ADDRESSES GENERATED WILL BE ZERO BASED
|
||||
;
|
||||
JP 0000H ; DUMMY JP INSTRUCTION FOR COMPATIBILITY
|
||||
;
|
||||
; Reserved for Configuration Information
|
||||
;
|
||||
.DW cnf_loc
|
||||
.DW tst_loc1
|
||||
.DW var_loc1
|
||||
;
|
||||
; BIOS configuration data
|
||||
;
|
||||
cnf_loc:
|
||||
#INCLUDE "cnfgdata.inc"
|
||||
;
|
||||
; Build information strings
|
||||
;
|
||||
tst_loc1 .DB TIMESTAMP
|
||||
var_loc1 .DB VARIANT
|
||||
.DB '$' ; provide terminator for variable length field
|
||||
;
|
||||
.EXPORT DISKBOOT,BOOTDEVICE,BOOTLU
|
||||
;
|
||||
.FILL 200H - $,$FF
|
||||
;
|
||||
.END
|
||||
229
trunk/Source/uart.asm
Normal file
229
trunk/Source/uart.asm
Normal file
@@ -0,0 +1,229 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; UART DRIVER (SERIAL PORT)
|
||||
;==================================================================================================
|
||||
;
|
||||
#IF (PLATFORM != PLT_N8)
|
||||
UART0_DIV .EQU (1843200 / (16 * BAUDRATE))
|
||||
#ENDIF
|
||||
;
|
||||
; CHARACTER DEVICE DRIVER ENTRY
|
||||
; A: RESULT (OUT), CF=ERR
|
||||
; B: FUNCTION (IN)
|
||||
; C: CHARACTER (IN/OUT)
|
||||
; E: DEVICE/UNIT (IN)
|
||||
;
|
||||
;
|
||||
UART_DISPATCH:
|
||||
#IF (PLATFORM == PLT_N8)
|
||||
LD A,C ; GET DEVICE/UNIT
|
||||
AND $0F ; ISOLATE UNIT
|
||||
JR Z,UART0
|
||||
DEC A
|
||||
JR Z,UART1
|
||||
CALL PANIC
|
||||
#ENDIF
|
||||
;
|
||||
UART0:
|
||||
; LD C,E ; FIX: COMPAT W/OLD DRIVERS, GET CHAR INTO C
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JR Z,UART0_IN
|
||||
DEC A
|
||||
JR Z,UART0_OUT
|
||||
DEC A
|
||||
JR Z,UART0_IST
|
||||
DEC A
|
||||
JR Z,UART0_OST
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
UART_INIT:
|
||||
#IF (PLATFORM == PLT_N8)
|
||||
; ASCI0
|
||||
LD A,66H
|
||||
OUT0 (CPU_ASEXT0),A
|
||||
LD A,64H
|
||||
OUT0 (CPU_CNTLA0),A
|
||||
LD A,Z180_CNTLB0
|
||||
OUT0 (CPU_CNTLB0),A
|
||||
|
||||
; ASCI1
|
||||
LD A,66H
|
||||
OUT0 (CPU_ASEXT1),A
|
||||
LD A,64H
|
||||
OUT0 (CPU_CNTLA1),A
|
||||
LD A,Z180_CNTLB1
|
||||
OUT0 (CPU_CNTLB1),A
|
||||
#ELSE
|
||||
LD A,80H
|
||||
OUT (SIO_LCR),A ; DLAB ON
|
||||
LD A,UART0_DIV
|
||||
OUT (SIO_DLL),A ; SET DIVISOR (LS)
|
||||
LD A,00H
|
||||
OUT (SIO_DLM),A ; SET DIVISOR (MS)
|
||||
|
||||
LD B,03H ; B = DEFAULT SETTING FOR MCR (DTR + RTS)
|
||||
|
||||
#IF (UARTAFC)
|
||||
LD A,$55 ; TEST VALUE
|
||||
OUT (SIO_SCR),A ; SET SCRATCH REG TO TEST VALUE
|
||||
LD A,0BFH
|
||||
OUT (SIO_LCR),A ; SET LCR=$BF TO ATTEMPT TO ACCESS EFR
|
||||
IN A,(SIO_SCR) ; READ SCRATCH REGISTER
|
||||
CP $55 ; IF $55, NO EFR
|
||||
JR NZ,UART_AFC1 ; NZ, HAVE EFR, DO IT
|
||||
SET 5,B ; ENABLE AUTO FLOW CONTROL
|
||||
JR UART_AFC2
|
||||
UART_AFC1:
|
||||
LD A,0C0H ; ENABLE CTS/RTS FLOW CONTROL
|
||||
OUT (SIO_EFR),A ; SAVE IT
|
||||
UART_AFC2:
|
||||
#ENDIF
|
||||
|
||||
LD A,03H
|
||||
OUT (SIO_LCR),A ; DLAB OFF, 8 DATA, 1 STOP, NO PARITY
|
||||
|
||||
LD A,B ; LOAD MCR VALUE TO SET
|
||||
OUT (SIO_MCR),A ; SAVE IT
|
||||
|
||||
#IF (UARTFIFO)
|
||||
LD A,07H ; ENABLE AND RESET FIFOS
|
||||
OUT (SIO_FCR),A
|
||||
#ENDIF
|
||||
|
||||
#ENDIF
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
UART0_IN:
|
||||
CALL UART0_IST
|
||||
OR A
|
||||
JR Z,UART0_IN
|
||||
#IF (PLATFORM == PLT_N8)
|
||||
IN0 A,(CPU_RDR0) ; READ THE CHAR FROM THE UART
|
||||
#ELSE
|
||||
IN A,(SIO_RBR) ; READ THE CHAR FROM THE UART
|
||||
#ENDIF
|
||||
LD E,A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
UART0_IST:
|
||||
#IF (PLATFORM == PLT_N8)
|
||||
; CHECK FOR ERROR FLAGS
|
||||
IN0 A,(CPU_STAT0)
|
||||
AND 70H ; PARITY, FRAMING, OR OVERRUN ERROR
|
||||
JR Z,UART0_IST1 ; ALL IS WELL, CHECK FOR DATA
|
||||
|
||||
; CLEAR ERROR(S) OR NOTHING FURTHER CAN BE RECEIVED!!!
|
||||
IN0 A,(CPU_CNTLA0)
|
||||
RES 3,A ; CLEAR EFR (ERROR FLAG RESET)
|
||||
OUT0 (CPU_CNTLA0),A
|
||||
|
||||
UART0_IST1: ; CHECK FOR STAT0.RDRF (DATA READY)
|
||||
IN0 A,(CPU_STAT0) ; READ LINE STATUS REGISTER
|
||||
AND $80 ; TEST IF DATA IN RECEIVE BUFFER
|
||||
#ELSE
|
||||
IN A,(SIO_LSR) ; READ LINE STATUS REGISTER
|
||||
AND $01 ; TEST IF DATA IN RECEIVE BUFFER
|
||||
#ENDIF
|
||||
JP Z,CIO_IDLE ; DO IDLE PROCESSING
|
||||
LD A,$01 ; SIGNAL DATA PENDING
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
UART0_OUT:
|
||||
CALL UART0_OST
|
||||
OR A
|
||||
JR Z,UART0_OUT
|
||||
LD A,E
|
||||
#IF (PLATFORM == PLT_N8)
|
||||
OUT0 (CPU_TDR0),A
|
||||
#ELSE
|
||||
OUT (SIO_THR),A ; THEN WRITE THE CHAR TO UART
|
||||
#ENDIF
|
||||
RET
|
||||
;
|
||||
UART0_OST:
|
||||
#IF (PLATFORM == PLT_N8)
|
||||
IN0 A,(CPU_STAT0)
|
||||
AND $02
|
||||
JR Z,UART0_OST
|
||||
#ELSE
|
||||
IN A,(SIO_LSR) ; READ LINE STATUS REGISTER
|
||||
AND $20
|
||||
JR Z,UART0_OST ; IF NOT REPEAT
|
||||
#ENDIF
|
||||
JP Z,CIO_IDLE ; DO IDLE PROCESSING
|
||||
LD A,$01 ; SIGNAL DATA PENDING
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
#IF (PLATFORM == PLT_N8)
|
||||
;
|
||||
UART1:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JR Z,UART0_IN
|
||||
DEC A
|
||||
JR Z,UART0_OUT
|
||||
DEC A
|
||||
JR Z,UART0_IST
|
||||
DEC A
|
||||
JR Z,UART0_OST
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
UART1_IN:
|
||||
CALL UART1_IST
|
||||
OR A
|
||||
JR Z,UART1_IN
|
||||
IN0 A,(CPU_RDR1) ; READ THE CHAR FROM THE UART
|
||||
LD E,A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
UART1_IST:
|
||||
; CHECK FOR ERROR FLAGS
|
||||
IN0 A,(CPU_STAT1)
|
||||
AND 70H ; PARITY, FRAMING, OR OVERRUN ERROR
|
||||
JR Z,UART1_IST1 ; ALL IS WELL, CHECK FOR DATA
|
||||
|
||||
; CLEAR ERROR(S) OR NOTHING FURTHER CAN BE RECEIVED!!!
|
||||
IN0 A,(CPU_CNTLA1)
|
||||
RES 3,A ; CLEAR EFR (ERROR FLAG RESET)
|
||||
OUT0 (CPU_CNTLA1),A
|
||||
|
||||
UART1_IST1: ; CHECK FOR STAT0.RDRF (DATA READY)
|
||||
IN0 A,(CPU_STAT1) ; READ LINE STATUS REGISTER
|
||||
AND $80 ; TEST IF DATA IN RECEIVE BUFFER
|
||||
JP Z,CIO_IDLE ; DO IDLE PROCESSING
|
||||
LD A,$01 ; SIGNAL DATA PENDING
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
UART1_OUT:
|
||||
CALL UART1_OST
|
||||
OR A
|
||||
JR Z,UART1_OUT
|
||||
LD A,E
|
||||
OUT0 (CPU_TDR1),A
|
||||
RET
|
||||
;
|
||||
UART1_OST:
|
||||
IN0 A,(CPU_STAT1)
|
||||
AND $02
|
||||
JR Z,UART1_OST
|
||||
JP Z,CIO_IDLE ; DO IDLE PROCESSING
|
||||
LD A,$01 ; SIGNAL DATA PENDING
|
||||
RET
|
||||
#ENDIF
|
||||
632
trunk/Source/util.asm
Normal file
632
trunk/Source/util.asm
Normal file
@@ -0,0 +1,632 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; UTILITY FUNCTIONS
|
||||
;==================================================================================================
|
||||
;
|
||||
;
|
||||
CHR_CR .EQU 0DH
|
||||
CHR_LF .EQU 0AH
|
||||
CHR_BS .EQU 08H
|
||||
CHR_ESC .EQU 1BH
|
||||
;
|
||||
;__________________________________________________________________________________________________
|
||||
;
|
||||
; UTILITY PROCS TO PRINT SINGLE CHARACTERS WITHOUT TRASHING ANY REGISTERS
|
||||
;
|
||||
PC_SPACE:
|
||||
PUSH AF
|
||||
LD A,' '
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_PERIOD:
|
||||
PUSH AF
|
||||
LD A,'.'
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_COLON:
|
||||
PUSH AF
|
||||
LD A,':'
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_COMMA:
|
||||
PUSH AF
|
||||
LD A,','
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_LBKT:
|
||||
PUSH AF
|
||||
LD A,'['
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_RBKT:
|
||||
PUSH AF
|
||||
LD A,']'
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_LPAREN:
|
||||
PUSH AF
|
||||
LD A,'('
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_RPAREN:
|
||||
PUSH AF
|
||||
LD A,')'
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_ASTERISK:
|
||||
PUSH AF
|
||||
LD A,'*'
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_CR:
|
||||
PUSH AF
|
||||
LD A,CHR_CR
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_LF:
|
||||
PUSH AF
|
||||
LD A,CHR_LF
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_PRTCHR:
|
||||
CALL COUT
|
||||
POP AF
|
||||
RET
|
||||
|
||||
NEWLINE:
|
||||
CALL PC_CR
|
||||
CALL PC_LF
|
||||
RET
|
||||
;
|
||||
; PRINT THE HEX BYTE VALUE IN A
|
||||
;
|
||||
PRTHEXBYTE:
|
||||
PUSH AF
|
||||
PUSH DE
|
||||
LD DE,HEXSTRBUF
|
||||
CALL HEXSTRBYTE
|
||||
LD A,'$'
|
||||
LD (DE),A
|
||||
LD DE,HEXSTRBUF
|
||||
CALL WRITESTR
|
||||
POP DE
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; PRINT THE HEX WORD VALUE IN BC
|
||||
;
|
||||
PRTHEXWORD:
|
||||
PUSH AF
|
||||
LD A,B
|
||||
CALL PRTHEXBYTE
|
||||
LD A,C
|
||||
CALL PRTHEXBYTE
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; CONVERT VALUE IN A TO A 2 CHARACTER HEX STRING AT DE
|
||||
;
|
||||
HEXCHR .TEXT "0123456789ABCDEF"
|
||||
;
|
||||
HEXSTRBYTE:
|
||||
PUSH BC
|
||||
PUSH HL
|
||||
PUSH AF
|
||||
LD BC,0
|
||||
RRA
|
||||
RRA
|
||||
RRA
|
||||
RRA
|
||||
AND 0FH
|
||||
LD C,A
|
||||
LD HL,HEXCHR
|
||||
ADD HL,BC
|
||||
LD A,(HL)
|
||||
LD (DE),A
|
||||
INC DE
|
||||
POP AF
|
||||
PUSH AF
|
||||
LD BC,0
|
||||
AND 0FH
|
||||
LD C,A
|
||||
LD HL,HEXCHR
|
||||
ADD HL,BC
|
||||
LD A,(HL)
|
||||
LD (DE),A
|
||||
INC DE
|
||||
POP AF
|
||||
POP HL
|
||||
POP BC
|
||||
RET
|
||||
;
|
||||
; CONVERT VALUE IN BC TO A 4 CHARACTER HEX STRING AT DE
|
||||
;
|
||||
HEXSTRWORD:
|
||||
LD A,B
|
||||
CALL HEXSTRBYTE
|
||||
LD A,C
|
||||
CALL HEXSTRBYTE
|
||||
RET
|
||||
|
||||
;
|
||||
; PRINT A BYTE BUFFER IN HEX POINTED TO BY DE
|
||||
; REGISTER A HAS SIZE OF BUFFER
|
||||
;
|
||||
PRTHEXBUF:
|
||||
CP 0 ; EMPTY BUFFER?
|
||||
JP Z,PRTHEXBUF2
|
||||
|
||||
LD B,A
|
||||
PRTHEXBUF1:
|
||||
CALL PC_SPACE
|
||||
LD A,(DE)
|
||||
CALL PRTHEXBYTE
|
||||
INC DE
|
||||
DJNZ PRTHEXBUF1
|
||||
JP PRTHEXBUFX
|
||||
|
||||
PRTHEXBUF2:
|
||||
CALL PC_SPACE
|
||||
LD DE,STR_EMPTY
|
||||
CALL WRITESTR
|
||||
|
||||
PRTHEXBUFX:
|
||||
RET
|
||||
;
|
||||
; OUTPUT A '$' TERMINATED STRING
|
||||
;
|
||||
WRITESTR:
|
||||
PUSH AF
|
||||
WRITESTR1:
|
||||
LD A,(DE)
|
||||
CP '$' ; TEST FOR STRING TERMINATOR
|
||||
JP Z,WRITESTR2
|
||||
CALL COUT
|
||||
INC DE
|
||||
JP WRITESTR1
|
||||
WRITESTR2:
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; PANIC: TRY TO DUMP MACHINE STATE AND HALT
|
||||
;
|
||||
PANIC:
|
||||
PUSH HL
|
||||
PUSH DE
|
||||
PUSH BC
|
||||
PUSH AF
|
||||
LD DE,STR_PANIC
|
||||
CALL WRITESTR
|
||||
LD DE,STR_AF
|
||||
CALL WRITESTR
|
||||
POP BC
|
||||
CALL PRTHEXWORD
|
||||
LD DE,STR_BC
|
||||
CALL WRITESTR
|
||||
POP BC
|
||||
CALL PRTHEXWORD
|
||||
LD DE,STR_DE
|
||||
CALL WRITESTR
|
||||
POP BC
|
||||
CALL PRTHEXWORD
|
||||
LD DE,STR_HL
|
||||
CALL WRITESTR
|
||||
POP BC
|
||||
CALL PRTHEXWORD
|
||||
LD DE,STR_PC
|
||||
CALL WRITESTR
|
||||
POP BC
|
||||
CALL PRTHEXWORD
|
||||
LD DE,STR_SP
|
||||
CALL WRITESTR
|
||||
LD (PANIC_SP),SP
|
||||
LD BC,(PANIC_SP)
|
||||
CALL PRTHEXWORD
|
||||
JP 0
|
||||
;
|
||||
;==================================================================================================
|
||||
; CONSOLE CHARACTER I/O HELPER ROUTINES (REGISTERS PRESERVED)
|
||||
;==================================================================================================
|
||||
;
|
||||
; OUTPUT CHARACTER FROM A
|
||||
COUT:
|
||||
PUSH AF
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
#IFDEF CIOMODE_CONSOLE
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
LD E,A
|
||||
LD A,(CONDEV)
|
||||
LD C,A
|
||||
LD B,BF_CIOOUT
|
||||
CALL BIOS_DISPATCH
|
||||
#ENDIF
|
||||
#IFDEF CIOMODE_CBIOS
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
LD C,A
|
||||
CALL CBIOS_CONOUT
|
||||
#ENDIF
|
||||
#IFNDEF CIOMODE_NONDOS
|
||||
LD E,A
|
||||
LD C,03H
|
||||
CALL 0005H
|
||||
#ENDIF
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; INPUT CHARACTER TO A
|
||||
;
|
||||
CIN:
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
#IFDEF CIOMODE_CONSOLE
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
LD A,(CONDEV)
|
||||
LD C,A
|
||||
LD B,BF_CIOIN
|
||||
CALL BIOS_DISPATCH
|
||||
LD A,E
|
||||
#ENDIF
|
||||
#IFDEF CIOMODE_CBIOS
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
CALL CBIOS_CONIN
|
||||
#ENDIF
|
||||
#IFNDEF CIOMODE_NONDOS
|
||||
LD C,01H
|
||||
CALL 0005H
|
||||
#ENDIF
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
RET
|
||||
;
|
||||
; RETURN INPUT STATUS IN A (0 = NO CHAR, !=0 CHAR WAITING)
|
||||
;
|
||||
CST:
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
#IFDEF CIOMODE_CONSOLE
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
LD B,BF_CIOIST
|
||||
LD A,(CONDEV)
|
||||
LD C,A
|
||||
CALL BIOS_DISPATCH
|
||||
#ENDIF
|
||||
#IFDEF CIOMODE_CBIOS
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
CALL CBIOS_CONST
|
||||
#ENDIF
|
||||
#IFNDEF CIOMODE_NONDOS
|
||||
LD C,0BH
|
||||
CALL 0005H
|
||||
#ENDIF
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
RET
|
||||
;
|
||||
STR_PANIC .DB "\r\n\r\n>>> FATAL ERROR:$"
|
||||
STR_AF .DB " AF=$"
|
||||
STR_BC .DB " BC=$"
|
||||
STR_DE .DB " DE=$"
|
||||
STR_HL .DB " HL=$"
|
||||
STR_PC .DB " PC=$"
|
||||
STR_SP .DB " SP=$"
|
||||
;
|
||||
; INDIRECT JUMP TO ADDRESS IN HL
|
||||
;
|
||||
; MOSTLY USEFUL TO PERFORM AN INDIRECT CALL LIKE:
|
||||
; LD HL,xxxx
|
||||
; CALL JPHL
|
||||
;
|
||||
JPHL: JP (HL)
|
||||
;
|
||||
; DELAY ABOUT 25us (100 TSTATES INCLUDING CALL AND RET)
|
||||
;
|
||||
; TOTAL T STATES = ((B*13) + 51)
|
||||
; 4MHZ CPU, B=4, 103 T STATES = 25.75us
|
||||
; 8MHZ CPU, B=12, 207 TSTATES = 25.875us
|
||||
; B = ((2 * FREQ) - 4)
|
||||
;
|
||||
DELAY: ; 17 T STATES (FOR CALL)
|
||||
PUSH BC ; 11 T STATES
|
||||
LD B,((CPUFREQ * 2) - 4) ; 8 T STATES
|
||||
DJNZ $ ; (B*13) - 5 T STATES
|
||||
POP BC ; 10 T STATES
|
||||
RET ; 10 T STATES
|
||||
;
|
||||
; DELAY 25us * VALUE IN DE (VARIABLE DELAY)
|
||||
;
|
||||
VDELAY:
|
||||
CALL DELAY
|
||||
DEC DE
|
||||
LD A,D
|
||||
OR E
|
||||
JP NZ,VDELAY
|
||||
RET
|
||||
;
|
||||
; DELAY ABOUT 0.5 SECONDS = 25us * 20,000
|
||||
;
|
||||
LDELAY:
|
||||
PUSH DE
|
||||
LD DE,20000
|
||||
CALL VDELAY
|
||||
POP DE
|
||||
RET
|
||||
;
|
||||
; MULTIPLY 8-BIT VALUES
|
||||
; IN: MULTIPLY H WITH E
|
||||
; OUT: HL = RESULT
|
||||
;
|
||||
MULT8:
|
||||
LD D,0
|
||||
LD L,D
|
||||
LD B,8
|
||||
MULT8_LOOP:
|
||||
ADD HL,HL
|
||||
JR NC,MULT8_NOADD
|
||||
ADD HL,DE
|
||||
MULT8_NOADD:
|
||||
DJNZ MULT8_LOOP
|
||||
RET
|
||||
;
|
||||
;==================================================================================================
|
||||
; DSKY KEYBOARD ROUTINES
|
||||
;==================================================================================================
|
||||
;
|
||||
#IF (DSKYENABLE)
|
||||
;
|
||||
; ____C0______C1______C2______C3__
|
||||
;B5 | 20 D 60 E A0 F E0 BO
|
||||
;B4 | 10 A 50 B 90 C D0 GO
|
||||
;B3 | 08 7 48 8 88 9 C8 EX
|
||||
;B2 | 04 4 44 5 84 6 C4 DE
|
||||
;B1 | 02 1 42 2 82 3 C2 EN
|
||||
;B0 | 01 FW 41 0 81 BK C1 CL
|
||||
;
|
||||
KY_0 .EQU 000H
|
||||
KY_1 .EQU 001H
|
||||
KY_2 .EQU 002H
|
||||
KY_3 .EQU 003H
|
||||
KY_4 .EQU 004H
|
||||
KY_5 .EQU 005H
|
||||
KY_6 .EQU 006H
|
||||
KY_7 .EQU 007H
|
||||
KY_8 .EQU 008H
|
||||
KY_9 .EQU 009H
|
||||
KY_A .EQU 00AH
|
||||
KY_B .EQU 00BH
|
||||
KY_C .EQU 00CH
|
||||
KY_D .EQU 00DH
|
||||
KY_E .EQU 00EH
|
||||
KY_F .EQU 00FH
|
||||
KY_FW .EQU 010H ; FORWARD
|
||||
KY_BK .EQU 011H ; BACKWARD
|
||||
KY_CL .EQU 012H ; CLEAR
|
||||
KY_EN .EQU 013H ; ENTER
|
||||
KY_DE .EQU 014H ; DEPOSIT
|
||||
KY_EX .EQU 015H ; EXAMINE
|
||||
KY_GO .EQU 016H ; GO
|
||||
KY_BO .EQU 017H ; BOOT
|
||||
;
|
||||
;__DSKY_INIT_________________________________________________________________________________________
|
||||
;
|
||||
; CHECK FOR KEY PRESS, SAVE RAW VALUE, RETURN STATUS
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
DSKY_INIT:
|
||||
LD A,82H
|
||||
OUT (PIOX),A
|
||||
LD A,30H ;disable /CS on PPISD card(s)
|
||||
OUT (PIOC),A
|
||||
XOR A
|
||||
LD (KY_BUF),A
|
||||
RET
|
||||
#IFDEF DSKY_KBD
|
||||
;
|
||||
;__KY_STAT___________________________________________________________________________________________
|
||||
;
|
||||
; CHECK FOR KEY PRESS, SAVE RAW VALUE, RETURN STATUS
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
KY_STAT:
|
||||
; IF WE ALREADY HAVE A KEY, RETURN WITH NZ
|
||||
LD A,(KY_BUF)
|
||||
OR A
|
||||
RET NZ
|
||||
; SCAN FOR A KEYPRESS, A=0 NO DATA OR A=RAW BYTE
|
||||
CALL KY_SCAN ; SCAN KB ONCE
|
||||
OR A ; SET FLAGS
|
||||
RET Z ; NOTHING FOUND, GET OUT
|
||||
LD (KY_BUF),A ; SAVE RAW KEYCODE
|
||||
RET ; RETURN
|
||||
;
|
||||
;__KY_GET____________________________________________________________________________________________
|
||||
;
|
||||
; GET A SINGLE KEY (WAIT FOR ONE IF NECESSARY)
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
KY_GET:
|
||||
; SEE IF WE ALREADY HAVE A KEY SAVED, GO TO DECODE IF SO
|
||||
LD A,(KY_BUF)
|
||||
OR A
|
||||
JR NZ,KY_DECODE
|
||||
; NO KEY SAVED, WAIT FOR ONE
|
||||
KY_STATLOOP:
|
||||
CALL KY_STAT
|
||||
OR A
|
||||
JR Z,KY_STATLOOP
|
||||
; DECODE THE RAW VALUE
|
||||
KY_DECODE:
|
||||
LD D,00H
|
||||
LD HL,KY_KEYMAP ; POINT TO BEGINNING OF TABLE
|
||||
KY_GET_LOOP:
|
||||
CP (HL) ; MATCH?
|
||||
JR Z,KY_GET_DONE ; FOUND, DONE
|
||||
INC HL
|
||||
INC D ; D + 1
|
||||
JR NZ,KY_GET_LOOP ; NOT FOUND, LOOP UNTIL EOT
|
||||
KY_GET_DONE:
|
||||
; CLEAR OUT KEY_BUF
|
||||
XOR A
|
||||
LD (KY_BUF),A
|
||||
; RETURN THE INDEX POSITION WHERE THE RAW VALUE WAS FOUND
|
||||
LD A,D
|
||||
RET
|
||||
;
|
||||
;__KY_SCAN____________________________________________________________________________________________
|
||||
;
|
||||
; SCAN KEYBOARD MATRIX FOR AN INPUT
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
KY_SCAN:
|
||||
LD C,0000H
|
||||
LD A,41H+30H ; SCAN COL ONE
|
||||
OUT (PIOC),A ; SEND TO COLUMN LINES
|
||||
CALL DELAY ; DEBOUNCE
|
||||
IN A,(PIOB) ; GET ROWS
|
||||
AND 7FH ;ignore PB7 for PPISD
|
||||
CP 00H ; ANYTHING PRESSED?
|
||||
JR NZ,KY_SCAN_FOUND ; YES, EXIT
|
||||
|
||||
LD C,0040H
|
||||
LD A,42H+30H ; SCAN COL TWO
|
||||
OUT (PIOC),A ; SEND TO COLUMN LINES
|
||||
CALL DELAY ; DEBOUNCE
|
||||
IN A,(PIOB) ; GET ROWS
|
||||
AND 7FH ;ignore PB7 for PPISD
|
||||
CP 00H ; ANYTHING PRESSED?
|
||||
JR NZ,KY_SCAN_FOUND ; YES, EXIT
|
||||
|
||||
LD C,0080H
|
||||
LD A,44H+30H ; SCAN COL THREE
|
||||
OUT (PIOC),A ; SEND TO COLUMN LINES
|
||||
CALL DELAY ; DEBOUNCE
|
||||
IN A,(PIOB) ; GET ROWS
|
||||
AND 7FH ;ignore PB7 for PPISD
|
||||
CP 00H ; ANYTHING PRESSED?
|
||||
JR NZ,KY_SCAN_FOUND ; YES, EXIT
|
||||
|
||||
LD C,00C0H ;
|
||||
LD A,48H+30H ; SCAN COL FOUR
|
||||
OUT (PIOC),A ; SEND TO COLUMN LINES
|
||||
CALL DELAY ; DEBOUNCE
|
||||
IN A,(PIOB) ; GET ROWS
|
||||
AND 7FH ;ignore PB7 for PPISD
|
||||
CP 00H ; ANYTHING PRESSED?
|
||||
JR NZ,KY_SCAN_FOUND ; YES, EXIT
|
||||
|
||||
LD A,040H+30H ; TURN OFF ALL COLUMNS
|
||||
OUT (PIOC),A ; SEND TO COLUMN LINES
|
||||
LD A,00H ; RETURN NULL
|
||||
RET ; EXIT
|
||||
|
||||
KY_SCAN_FOUND:
|
||||
AND 3FH ; CLEAR TOP TWO BITS
|
||||
OR C ; ADD IN ROW BITS
|
||||
LD C,A ; STORE VALUE
|
||||
|
||||
; WAIT FOR KEY TO BE RELEASED
|
||||
LD A,4FH+30H ; SCAN ALL COL LINES
|
||||
OUT (PIOC),A ; SEND TO COLUMN LINES
|
||||
CALL DELAY ; DEBOUNCE
|
||||
KY_CLEAR_LOOP: ; WAIT FOR KEY TO CLEAR
|
||||
IN A,(PIOB) ; GET ROWS
|
||||
AND 7FH ;ignore PB7 for PPISD
|
||||
CP 00H ; ANYTHING PRESSED?
|
||||
JR NZ,KY_CLEAR_LOOP ; YES, LOOP UNTIL KEY RELEASED
|
||||
|
||||
LD A,040H+30H ; TURN OFF ALL COLUMNS
|
||||
OUT (PIOC),A ; SEND TO COLUMN LINES
|
||||
|
||||
LD A,C ; RESTORE VALUE
|
||||
RET
|
||||
;
|
||||
;_KEYMAP_TABLE_____________________________________________________________________________________________________________
|
||||
;
|
||||
KY_KEYMAP:
|
||||
; 0 1 2 3 4 5 6 7
|
||||
.DB 041H,002H,042H,082H,004H,044H,084H,008H
|
||||
; 8 9 A B C D E F
|
||||
.DB 048H,088H,010H,050H,090H,020H,060H,0A0H
|
||||
; FW BK CL EN DE EX GO BO
|
||||
.DB 001H,081H,0C1H,0C2H,0C4H,0C8H,0D0H,0E0H
|
||||
#ENDIF ; DSKY_KBD
|
||||
;
|
||||
;==================================================================================================
|
||||
; DSKY HEX DISPLAY
|
||||
;==================================================================================================
|
||||
;
|
||||
DSKY_HEXOUT:
|
||||
LD B,DSKY_HEXBUFLEN
|
||||
LD HL,DSKY_BUF
|
||||
LD DE,DSKY_HEXBUF
|
||||
DSKY_HEXOUT1:
|
||||
LD A,(DE) ; FIRST NIBBLE
|
||||
SRL A
|
||||
SRL A
|
||||
SRL A
|
||||
SRL A
|
||||
LD (HL),A
|
||||
INC HL
|
||||
LD A,(DE) ; SECOND NIBBLE
|
||||
AND 0FH
|
||||
LD (HL),A
|
||||
INC HL
|
||||
INC DE ; NEXT BYTE
|
||||
DJNZ DSKY_HEXOUT1
|
||||
|
||||
LD A,82H ; SETUP PPI
|
||||
OUT (PIOX),A
|
||||
CALL DSKY_COFF
|
||||
LD A,0D0H ; 7218 -> (DATA COMING, HEXA DECODE)
|
||||
OUT (PIOA),A
|
||||
CALL DSKY_STROBEC
|
||||
|
||||
LD HL,DSKY_BUF ; POINT TO START OF BUF
|
||||
LD B,DSKY_BUFLEN ; NUMBER OF DIGITS
|
||||
LD C,PIOA
|
||||
DSKY_HEXOUT2:
|
||||
OUTI
|
||||
JP Z,DSKY_STROBE ; DO FINAL STROBE AND RETURN
|
||||
CALL DSKY_STROBE
|
||||
JR DSKY_HEXOUT2
|
||||
|
||||
DSKY_STROBEC:
|
||||
LD A,80H+30H
|
||||
JP DSKY_STROBE0
|
||||
|
||||
DSKY_STROBE:
|
||||
LD A,00H+30H ; SET WRITE STROBE
|
||||
|
||||
DSKY_STROBE0:
|
||||
OUT (PIOC),A ; OUT TO PORTC
|
||||
CALL DELAY ; DELAY
|
||||
DSKY_COFF
|
||||
LD A,40H+30H ; SET CONTROL PORT OFF
|
||||
OUT (PIOC),A ; OUT TO PORTC
|
||||
CALL DELAY ; WAIT
|
||||
RET
|
||||
#ENDIF
|
||||
;
|
||||
;==================================================================================================
|
||||
; DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
STR_EMPTY .TEXT "<EMPTY>$"
|
||||
;
|
||||
HEXSTRBUF .TEXT "XX$"
|
||||
;
|
||||
KY_BUF .DB 0
|
||||
DSKY_BUF: .FILL 8,0
|
||||
DSKY_BUFLEN .EQU $ - DSKY_BUF
|
||||
DSKY_HEXBUF .FILL 4,0
|
||||
DSKY_HEXBUFLEN .EQU $ - DSKY_HEXBUF
|
||||
;
|
||||
PANIC_SP .DW 0
|
||||
1516
trunk/Source/vdu.asm
Normal file
1516
trunk/Source/vdu.asm
Normal file
File diff suppressed because it is too large
Load Diff
6
trunk/Source/ver.inc
Normal file
6
trunk/Source/ver.inc
Normal file
@@ -0,0 +1,6 @@
|
||||
#DEFINE RMJ 2
|
||||
#DEFINE RMN 1
|
||||
#DEFINE RUP 1
|
||||
#DEFINE RTP 0
|
||||
#DEFINE BIOSVER "2.1.1"
|
||||
#DEFINE REVISION 1741
|
||||
2050
trunk/Source/zcpr.asm
Normal file
2050
trunk/Source/zcpr.asm
Normal file
File diff suppressed because it is too large
Load Diff
64
trunk/Source/zcprw.asm
Normal file
64
trunk/Source/zcprw.asm
Normal file
@@ -0,0 +1,64 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; WRAPPER FOR ZCPR FOR N8VEM PROJECT
|
||||
; WAYNE WARTHEN - 2011-01-10
|
||||
;==================================================================================================
|
||||
;
|
||||
; THE FOLLOWING MACROS DO THE HEAVY LIFTING TO MAKE THE ZCPR SOURCE
|
||||
; COMPATIBLE WITH TASM
|
||||
;
|
||||
;#DEFINE DS .DS
|
||||
;#DEFINE ds .ds
|
||||
#DEFINE DS .FILL
|
||||
#DEFINE ds .fill
|
||||
#DEFINE TITLE .TITLE
|
||||
#DEFINE title .title
|
||||
#DEFINE EQU .EQU
|
||||
#define equ .equ
|
||||
#DEFINE NAME \;
|
||||
#DEFINE PAGE .PAGE
|
||||
#DEFINE page .page
|
||||
#DEFINE CSEG .CSEG
|
||||
#DEFINE ORG .ORG
|
||||
#DEFINE org .org
|
||||
#DEFINE END .END
|
||||
#DEFINE IF .IF
|
||||
#DEFINE if .if
|
||||
#DEFINE ELSE .ELSE
|
||||
#DEFINE else .else
|
||||
#DEFINE ENDIF .ENDIF
|
||||
#DEFINE endif .endif
|
||||
#DEFINE DEFB .DB
|
||||
#DEFINE defb .db
|
||||
#DEFINE DEFW .DW
|
||||
#DEFINE defw .dw
|
||||
#DEFINE DEFL .EQU
|
||||
#DEFINE defl .equ
|
||||
#DEFINE DEFS .DB
|
||||
#DEFINE defs .db
|
||||
#DEFINE DW .DW
|
||||
#DEFINE dw .dw
|
||||
#DEFINE DB .DB
|
||||
#DEFINE db .db
|
||||
#DEFINE END .END
|
||||
#DEFINE end .end
|
||||
;
|
||||
; Add some Z80 instructions
|
||||
;
|
||||
#ADDINSTR JR * 18 2 R1 1
|
||||
#ADDINSTR JRC * 38 2 R1 1
|
||||
#ADDINSTR JRNC * 30 2 R1 1
|
||||
#ADDINSTR JRZ * 28 2 R1 1
|
||||
#ADDINSTR JRNZ * 20 2 R1 1
|
||||
#ADDINSTR LDIR "" B0ED 2 NOP 1
|
||||
#ADDINSTR DJNZ * 10 2 R1 1
|
||||
#ADDINSTR LDED * 5BED 4 NOP 1
|
||||
#ADDINSTR SDED * 53ED 4 NOP 1
|
||||
;
|
||||
; NOW INCLUDE THE MAIN SOURCE
|
||||
;
|
||||
#INCLUDE "zcpr.asm"
|
||||
;
|
||||
.FILL ((CPRLOC + 0800H) - $),055H
|
||||
;
|
||||
.END
|
||||
3174
trunk/Source/zsdos-gp.z80
Normal file
3174
trunk/Source/zsdos-gp.z80
Normal file
File diff suppressed because it is too large
Load Diff
39
trunk/Source/zsdos.asm
Normal file
39
trunk/Source/zsdos.asm
Normal file
@@ -0,0 +1,39 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; WRAPPER FOR ZSDOS/ZDDOS FOR N8VEM PROJECT
|
||||
; WAYNE WARTHEN - 2011-01-09
|
||||
;==================================================================================================
|
||||
;
|
||||
; THE FOLLOWING MACROS DO THE HEAVY LIFTING TO MAKE THE ZSDOS SOURCE
|
||||
; COMPATIBLE WITH TASM
|
||||
;
|
||||
#DEFINE EQU .EQU
|
||||
#DEFINE NAME \;
|
||||
#DEFINE PAGE .PAGE
|
||||
#DEFINE CSEG .CSEG
|
||||
#DEFINE DSEG .DSEG
|
||||
#DEFINE ORG .ORG
|
||||
#DEFINE END .END
|
||||
#DEFINE IF .IF
|
||||
#DEFINE ELSE .ELSE
|
||||
#DEFINE ENDIF .ENDIF
|
||||
#DEFINE DEFB .DB
|
||||
#DEFINE DEFW .DW
|
||||
#DEFINE FILL .FILL
|
||||
;
|
||||
; ZSDOS USES A .LIB FILE FOR CONFIGURATION. SINCE TASM HAS NO SUPPORT FOR THIS
|
||||
; WE JUST INCLUDE THE FILE HERE.
|
||||
;
|
||||
#DEFINE BLD_ZSDOS11 TRUE ; TRUE BUILDS VER 1.1, FALSE BUILDS VER 1.2
|
||||
#DEFINE BLD_ZS TRUE ; TRUE FOR ZSDOS BUILD, FALSE FOR ZDDOS BUILD
|
||||
#DEFINE BLD_ROM FALSE
|
||||
#INCLUDE "zsdos.lib"
|
||||
;
|
||||
;
|
||||
; ESTABLISH STARTING ADDRESS FOR ZSDOS
|
||||
;
|
||||
.ORG 0D800H
|
||||
;
|
||||
; NOW INCLUDE THE MAIN SOURCE
|
||||
;
|
||||
#INCLUDE "zsdos-gp.z80"
|
||||
185
trunk/Source/zsdos.lib
Normal file
185
trunk/Source/zsdos.lib
Normal file
@@ -0,0 +1,185 @@
|
||||
;
|
||||
; WW - CUSTOMIZED FOR N8VEM PROJECT
|
||||
;
|
||||
|
||||
;.....
|
||||
; ZSDOS Customization. -HFB, 18 Sept 1987
|
||||
; revised 07/17/88 CWC
|
||||
|
||||
FALSE .EQU 0
|
||||
TRUE .EQU ~FALSE
|
||||
|
||||
; Set these conditionals before assembly
|
||||
|
||||
;****************************************************************************
|
||||
; In the General Public Release version, we have included an equate which
|
||||
; controls an additional unreleased fix (which only Howard Goldstein found).
|
||||
; If the following equate is set TRUE, a version 1.1 BDOS will be produced
|
||||
; which will require no changes to any released utilities. If set to FALSE,
|
||||
; a version 1.2 BDOS will result, and many support utility libraries and
|
||||
; overlays will need to be revised to make them function properly. HFB
|
||||
|
||||
;WW - NOW USES BLD_ZSDOS11 TO INHERIT SETTING FROM WRAPPER
|
||||
ZSDOS11 .EQU BLD_ZSDOS11 ; Set True for Ver 1.1, False for 1.2
|
||||
|
||||
;****************************************************************************
|
||||
|
||||
;WW - NOW USES BLD_ZS TO INHERIT SETTING FROM WRAPPER
|
||||
ZS .EQU BLD_ZS ; Set True for ZSDOS, False for ZDDOS
|
||||
|
||||
;----------
|
||||
; Select assembler for ZSDOS. Any modifications to source code must
|
||||
; support these assemblers at minimum.
|
||||
|
||||
SLR .EQU FALSE ; SLR Z80ASM or SLR180 Assembler, OR ZMAC
|
||||
ZAS .EQU TRUE ; MITEK/ECHELON ZAS Assembler (3.0 or later)
|
||||
|
||||
IF ZAS
|
||||
NAME DOS
|
||||
ENDIF
|
||||
|
||||
IF SLR
|
||||
.Z80
|
||||
NAME ('DOS')
|
||||
ENDIF
|
||||
|
||||
IF ZAS & ZS
|
||||
IF ZSDOS11
|
||||
.TITLE 'ZSDOS 1.1 - Enhanced CP/M BDOS Replacement'
|
||||
ELSE ;~Zsdos11
|
||||
.TITLE 'ZSDOS 1.2 - Enhanced CP/M BDOS Replacement'
|
||||
ENDIF ;Zsdos11
|
||||
ENDIF
|
||||
IF ZAS & (~ZS)
|
||||
IF ZSDOS11
|
||||
.TITLE 'ZDDOS 1.1 - Enhanced CP/M BDOS Replacement w/DS'
|
||||
ELSE ;~Zsdos11
|
||||
.TITLE 'ZDDOS 1.2 - Enhanced CP/M BDOS Replacement w/DS'
|
||||
ENDIF ;Zsdos11
|
||||
ENDIF
|
||||
|
||||
IF SLR & ZS
|
||||
IF ZSDOS11
|
||||
TITLE "ZSDOS 1.1 - Enhanced CP/M BDOS Replacement"
|
||||
ELSE ;~Zsdos11
|
||||
TITLE "ZSDOS 1.2 - Enhanced CP/M BDOS Replacement"
|
||||
ENDIF ;Zsdos11
|
||||
ENDIF
|
||||
IF SLR & (~ZS)
|
||||
IF ZSDOS11
|
||||
TITLE "ZDDOS 1.1 - Enhanced CP/M BDOS Replacement w/DS"
|
||||
ELSE ;~Zsdos11
|
||||
TITLE "ZDDOS 1.2 - Enhanced CP/M BDOS Replacement w/DS"
|
||||
ENDIF ;Zsdos11
|
||||
ENDIF
|
||||
|
||||
;----------
|
||||
; P2DOS introduced a search path feature compatible with that used in
|
||||
; Richard Conn's ZCPR2 and ZCPR3. If a requested file is not located in
|
||||
; the currently logged Drive/User, the SEARCH routine will sequentially
|
||||
; scan along the path until either the file is found or the end of the
|
||||
; path is reached.
|
||||
|
||||
IF ZS
|
||||
;WW - changed from EQU to #DEFINE to avoid forward reference error in TASM
|
||||
;PATHAD EQU IPATH ; Set to the desired ZCPR2/3 search path.
|
||||
#DEFINE PATHAD IPATH
|
||||
ELSE ; use 0000H to disable path. A short
|
||||
PATHAD .EQU 00000H ; 3 element internal path is provided
|
||||
ENDIF ; in ZSDOS. ZDDOS does not use path.
|
||||
|
||||
;----------
|
||||
; The WHEEL byte may be sensed from within ZSDOS by setting the following
|
||||
; address to that of the ZCPR3 WHEEL byte. A value of 0 disables the WHEEL
|
||||
; byte sensing.
|
||||
|
||||
WHLADR .EQU 00000H ; Set WHEEL byte address (0FDFFH for SB180)
|
||||
|
||||
;----------
|
||||
; Some systems, like the Kaypro 4, only recognize changes between single
|
||||
; and double-sided disks when the system is warm booted; BDOS Function 13
|
||||
; (reset disk) will not work. By adding a "hook" to the BIOS of these mach-
|
||||
; ines and setting RESDSK to TRUE, BDOS functions 13 and 37 will allow changes
|
||||
; between single and double-sided disks; very handy for disk housekeeping
|
||||
; utilities such as NSWP, NULU, and cataloging programs.
|
||||
|
||||
; The "hook" is added as follows: Obtain the source to your computer's BIOS.
|
||||
; Examine the code for WARM BOOT. Somewhere, there should be a call to a rou-
|
||||
; tine which initializes the disk system after a warm boot, or which detects
|
||||
; changes between single and double-sided disks. Call this routine DISKINT
|
||||
; for purposes of discussion. Modify your BIOS's cold boot routine to ini-
|
||||
; tialize 3 bytes at address SETDSK as "JP DISKINT". The location of SETDSK
|
||||
; is arbitrary, it may be in your BIOS, or in a reserved spot in CP/M's page 0.
|
||||
|
||||
RESDSK .EQU FALSE
|
||||
|
||||
IF RESDSK
|
||||
SETDSK .EQU 004BH ; Set to suit your system (bh)
|
||||
ENDIF ; resdsk (bh)
|
||||
|
||||
;----------
|
||||
; The following equate is used to produce separate code and data segments
|
||||
; for blowing ZSDOS into ROM. Calling BDOS Function 0 will initialize the
|
||||
; Data Segment to default values.
|
||||
|
||||
ROM .EQU BLD_ROM ; Separate data and code?
|
||||
|
||||
;----------
|
||||
; Many ZSDOS features can be controlled while ZSDOS is running by altering
|
||||
; the FLAG byte. Set the following equate to your desired configuration based
|
||||
; on your requirements. The individual bit assignments in the FLAG byte are:
|
||||
;
|
||||
; Bit - 7 6 5 4 3 2 1 0
|
||||
; \ \ \ \ \ \ \ \__Public File Enable (1) / Disable (0)
|
||||
; \ \ \ \ \ \ \___Public/Path Write Enable (1) / Disable (0)
|
||||
; \ \ \ \ \ \____Read-Only Enable (1) / Disable (0)
|
||||
; \ \ \ \ \_____Fast Fixed Disk Relog Enable (1) / Disable (0)
|
||||
; \ \ \ \______Disk Change Warning Enable (1) / Disable (0)
|
||||
; \ \ \_______ZCPR2/3 Path Enable (1) / Disable (0)
|
||||
; \ \________Path without System Enable (1) / Disable (0)
|
||||
; \_________(Reserved)
|
||||
|
||||
FLGBITS .EQU 01101101B ; PUBLIC On, P/P Write Off, R/O On,
|
||||
; Fast Relog On,Disk Change warning Off,
|
||||
; Path On, No System path On
|
||||
|
||||
; The operation of Bit 6 represents a deviation from the description of PUBLIC
|
||||
; Files as given in DDJ Article by Bridger Mitchell and Derek McKay of Plu*
|
||||
; Perfect Systems. The PUBLIC Specification states that Public Files will NOT
|
||||
; be found by any wildcard reference except when a "?" is in the FCB+0 byte.
|
||||
; The code here relaxes that requirement as follows: If we are in the same
|
||||
; user area as the public file, then don't report the file as PUBLIC, but find
|
||||
; it. This has a nasty side effect - it allows erasing of PUBLIC files if we
|
||||
; are in the same area. However, these files also show up on the directory
|
||||
; (they wouldn't otherwise), so at least we should know we're blasting them.
|
||||
|
||||
;----------
|
||||
; Equates for selecting ZSDOS or ZDDOS configurations
|
||||
|
||||
; Since much ZSDOS code must be deleted to embed DateStamper in ZDDOS, the
|
||||
; following flags do the stripping:
|
||||
; PICKEY - True = Don't save users' DE register
|
||||
; CTLREN - True = Add ^R Retype line to cons read, False = No ^R
|
||||
; UNROLL - True = Inline code for shifts, False = collapse into loops
|
||||
; UPATH - True = Add User path from OS, False = No OS path search
|
||||
|
||||
IF ZS
|
||||
CTLREN .EQU TRUE
|
||||
UNROLL .EQU TRUE
|
||||
UPATH .EQU TRUE
|
||||
PICKEY .EQU FALSE
|
||||
ELSE
|
||||
CTLREN .EQU FALSE
|
||||
UNROLL .EQU FALSE
|
||||
UPATH .EQU FALSE
|
||||
PICKEY .EQU FALSE
|
||||
ENDIF
|
||||
|
||||
;----------
|
||||
; To Use the Named-COMMON aspect of NZCOM and JETLOADER (tm), the BIOS must
|
||||
; be referenced from the _BIOS_ name. If operating under this scheme, set
|
||||
; the ZRL equate to TRUE. With the ZRL equate set to FALSE, a standalone
|
||||
; .REL file will be produced with no external requirements.
|
||||
|
||||
ZRL .EQU FALSE ; Set True .ZRL file with COMMON for NZCOM,
|
||||
; False to produce straight .REL file
|
||||
Reference in New Issue
Block a user