diff --git a/Apps/Source/applvers.h b/Apps/Source/applvers.h index e09bd4cc..f798589b 100644 --- a/Apps/Source/applvers.h +++ b/Apps/Source/applvers.h @@ -4,11 +4,11 @@ #define A_RMJ 2 #define A_RMN 5 -#define A_RUP 0 -#define A_RTP 16 +#define A_RUP 1 +#define A_RTP 17 #define A_MONTH 6 -#define A_DAY 23 +#define A_DAY 25 #define A_YEAR 2013 #define A_YR 13 diff --git a/Apps/Source/applvers.lib b/Apps/Source/applvers.lib index 9084ba95..d614bcb1 100644 --- a/Apps/Source/applvers.lib +++ b/Apps/Source/applvers.lib @@ -2,15 +2,15 @@ A$RMJ equ 2 A$RMN equ 5 -A$RUP equ 0 -A$RTP equ 16 +A$RUP equ 1 +A$RTP equ 17 A$MONTH equ 6 -A$DAY equ 23 +A$DAY equ 25 A$YEAR equ 2013 date macro -dat db ' 6/23/2013$' +dat db ' 6/25/2013$' endm serial macro diff --git a/Doc/LinuxBuild.txt b/Doc/LinuxBuild.txt index 41424dfd..c451f35b 100644 --- a/Doc/LinuxBuild.txt +++ b/Doc/LinuxBuild.txt @@ -1,5 +1,9 @@ Assembling the RomWBW firmware under Linux. +Note: Updated on 6/25/2013 to eliminate the need for the separate Linux +makefile. The standard makefile now has conditionals to allow it to be +used under Windows of Linux (I hope) --WW + This method has been used under Ubuntu Linux and may have to be adapted for other distributions. It is a bit more involved than the Windows procedure. @@ -25,24 +29,17 @@ These are all done from a terminal. (: is end of the command prompt) 1. Go to the RomWBW Source directory.e.g. :cd /n8vem/RomWBW/current/Source -2. I have included a new makefile called "makefile.linux" in the Source -directory. Rename this to just "makefile". Edit it to suit your targets and -if you have changed the default location for TASM. -:~/RomWBW/current/Source mv makefile.linux makefile - -3. The Linux version of TASM can't handle the CR-LF line endings. So from the +2. The Linux version of TASM can't handle the CR-LF line endings. So from the command prompt use dos2unix to convert all the source files. :~/RomWBW/current/Source dos2unix -f *.asm *.inc *.z80 *.lib diskdefs -4. You'll have to alter the disk definitions for the cpmtools package to cater +3. You'll have to alter the disk definitions for the cpmtools package to cater for the new roms. Easiest way is to copy the one given in the source over the old. This must be done as superuser. :~/RomWBW/current/Source sudo cp diskdefs /etc/cpmtools/diskdefs -5. From now on it's the same as using the DOS/Windows instructions in Build.txt. +4. From now on it's the same as using the DOS/Windows instructions in Build.txt. Make any last changes, go to the Source directory and make :~/RomWBW/current/Source make clean ; make DGG - - diff --git a/Source/makefile b/Source/makefile index 30a7641c..b4f3bc39 100644 --- a/Source/makefile +++ b/Source/makefile @@ -99,8 +99,12 @@ ifndef ROMNAME ROMNAME := $(PLATFORM)_$(CONFIG) endif +ifndef "windir" CPMTOOLSPATH := ../tools/cpmtools CPMCP := $(CPMTOOLSPATH)/cpmcp.exe +else +CPMCP := /usr/bin/cpmcp +endif ROMDSKFILES := ../RomDsk/$(SYS)_$(ROMSIZE)KB/*.* ../RomDsk/cfg_$(PLATFORM)_$(CONFIG)/*.* ../Apps/Output/*.* @@ -112,11 +116,16 @@ DOSBIN := zsdos.bin CPBIN := zcprw.bin endif -OUTDIR := ..\Output +OUTDIR := ../Output +ifndef "windir" TASMPATH := ../tools/tasm32 TASM := $(TASMPATH)/tasm.exe TASMTABS := $(TASMPATH) +else +TASM := /usr/local/bin/tasm +TASMTABS := /usr/local/lib +endif export TASMTABS ASMOPT80 := -t$(CPU) -g3 @@ -147,8 +156,9 @@ $(error Usage: make PLATFORM=[N8VEM|ZETA|N8|S2I|S100] CONFIG= ROMSIZE=[5 endif endif -all: $(OUTDIR)\$(ROMNAME).rom $(OUTDIR)\$(ROMNAME).sys $(OUTDIR)\$(ROMNAME).com +all: $(OUTDIR)/$(ROMNAME).rom $(OUTDIR)/$(ROMNAME).sys $(OUTDIR)/$(ROMNAME).com +ifndef "windir" build.inc: echo ; >$@ echo ; RomWBW Configured for $(PLATFORM) $(CONFIG), %date:~4,10% %time% >>$@ @@ -168,6 +178,28 @@ build.inc: echo ; >>$@ echo #INCLUDE "config_$(PLATFORM)_$(CONFIG).asm" >>$@ echo ; >>$@ +else + echo ';' >$@ + echo -n '; RomWBW Configured for '$(CONFIG)'' >>$@ + date >> $@ + echo ';' >>$@ + echo -n '#DEFINE TIMESTAMP "' >>$@ + date '+%Y %m %d %H%M"' >>$@ + echo ';' >>$@ + echo '; INCLUDE PLATFORM SPECIFIC DEVICE DEFINITIONS' >>$@ + echo ';' >>$@ + echo 'ROMSIZE .EQU '$(ROMSIZE)'' >>$@ + echo 'PLATFORM .EQU PLT_'$(PLATFORM)'' >>$@ + + echo '#IF (PLATFORM == PLT_S100)' >>$@ + echo ' #INCLUDE "std-s100.inc"' >>$@ + echo '#ELSE' >>$@ + echo ' #INCLUDE "std-n8vem.inc"' >>$@ + echo '#ENDIF' >>$@ + echo ';' >>$@ + echo '#INCLUDE "config_'$(PLATFORM)'_'$(CONFIG)'.asm"' >>$@ + echo ';' >>$@ +endif bootrom.bin : bootrom.asm std.asm build.inc ver.inc $(TASM) $(ASMOPT80) $< $@ @@ -192,27 +224,55 @@ 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),+,$(^)) $@ +ifndef "windir" + copy /B $(subst $(SPACE),+,$(^)) "$@" +else + cat $(CPBIN) $(DOSBIN) cbios.bin >>$@ +endif rom0.bin: pgzero.bin bootrom.bin syscfg.bin loader.bin romfill.bin dbgmon.bin os.bin hbfill.bin - copy /B $(subst $(SPACE),+,$(^)) $@ +ifndef "windir" + copy /B $(subst $(SPACE),+,$(^)) "$@" +else + cat pgzero.bin bootrom.bin syscfg.bin loader.bin romfill.bin dbgmon.bin os.bin hbfill.bin >>$@ +endif rom1.bin: pgzero.bin bootrom.bin syscfg.bin loader.bin hbios.bin - copy /B $(subst $(SPACE),+,$(^)) $@ +ifndef "windir" + copy /B $(subst $(SPACE),+,$(^)) "$@" +else + cat pgzero.bin bootrom.bin syscfg.bin loader.bin hbios.bin >>$@ +endif -$(OUTDIR)\$(ROMNAME).rom: rom0.bin rom1.bin $(ROMDISKFILES) $(OUTDIR)\$(ROMNAME).sys +$(OUTDIR)/$(ROMNAME).rom: rom0.bin rom1.bin $(ROMDISKFILES) $(OUTDIR)/$(ROMNAME).sys +ifndef "windir" 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 $@ + copy /B rom0.bin+rom1.bin+RomDisk.tmp "$@" +else + 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 >>$@ +endif -$(OUTDIR)\$(ROMNAME).com: bootapp.bin syscfg.bin loader.bin hbios.bin dbgmon.bin os.bin - copy /B $(subst $(SPACE),+,$(^)) $@ +$(OUTDIR)/$(ROMNAME).com: bootapp.bin syscfg.bin loader.bin hbios.bin dbgmon.bin os.bin +ifndef "windir" + copy /B $(subst $(SPACE),+,$(^)) "$@" +else + cat bootapp.bin syscfg.bin loader.bin hbios.bin dbgmon.bin os.bin >>$@ +endif -$(OUTDIR)\$(ROMNAME).sys: prefix.bin os.bin - copy /B $(subst $(SPACE),+,$(^)) $@ +$(OUTDIR)/$(ROMNAME).sys: prefix.bin os.bin +ifndef "windir" + copy /B $(subst $(SPACE),+,$(^)) "$@" +else + cat prefix.bin os.bin >>$@ +endif clean: +ifndef "windir" if exist *.bin del *.bin if exist *.com del *.com if exist *.img del *.img @@ -221,4 +281,9 @@ clean: if exist *.exp del *.exp if exist *.tmp del *.tmp if exist build.inc del build.inc - if exist $(OUTDIR)\*.* erase /Q $(OUTDIR)\*.* \ No newline at end of file + if exist "$(OUTDIR)/*.*" erase /Q "$(OUTDIR)/*.*" +else + rm -f *.bin *.com *.img *.rom *.lst *.exp *.tmp + rm -f build.inc + rm -f $(OUTDIR)/*.* +endif \ No newline at end of file diff --git a/Source/makefile.linux b/Source/makefile.linux deleted file mode 100644 index e5f1eaed..00000000 --- a/Source/makefile.linux +++ /dev/null @@ -1,206 +0,0 @@ -# -# 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: -# .rom, .sys, and .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= ROMSIZE= CPU= SYS= 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= ROMSIZE=[512|1024] CPU=[80|180] SYS=[CPM|ZSYS] 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_dph.asm ide_dph.asm ppide_dph.asm sd_dph.asm prp_dph.asm ppp_dph.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)/*.* diff --git a/Source/ppide.asm b/Source/ppide.asm index 59828610..83605246 100644 --- a/Source/ppide.asm +++ b/Source/ppide.asm @@ -21,12 +21,12 @@ IDELSB .EQU PPIDEIOB + 0 ; LSB IDEMSB .EQU PPIDEIOB + 1 ; MSB IDECTL .EQU PPIDEIOB + 2 ; CONTROL SIGNALS -PPI1CONT .EQU PPIDEIOB + 3 ; CONTROL BYTE PPI 82C55 +PPICTL .EQU PPIDEIOB + 3 ; PPI (8255) CONTROL PORT ; ; 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 +RD_IDE_8255 .EQU %10010010 ; IDE_8255_CTL OUT, IDE_8255_LSB/MSB INPUT +WR_IDE_8255 .EQU %10000000 ; 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 @@ -34,14 +34,14 @@ WR_IDE_8255 .EQU 10000000B ; ALL THREE PORTS OUTPUT ; 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 +PPIDE_A0_LINE .EQU $01 ; DIRECT FROM 8255 TO IDE INTERFACE +PPIDE_A1_LINE .EQU $02 ; DIRECT FROM 8255 TO IDE INTERFACE +PPIDE_A2_LINE .EQU $04 ; DIRECT FROM 8255 TO IDE INTERFACE +PPIDE_CS0_LINE .EQU $08 ; INVERTER BETWEEN 8255 AND IDE INTERFACE +PPIDE_CS1_LINE .EQU $10 ; INVERTER BETWEEN 8255 AND IDE INTERFACE +PPIDE_WR_LINE .EQU $20 ; INVERTER BETWEEN 8255 AND IDE INTERFACE +PPIDE_RD_LINE .EQU $40 ; INVERTER BETWEEN 8255 AND IDE INTERFACE +PPIDE_RST_LINE .EQU $80 ; INVERTER BETWEEN 8255 AND IDE INTERFACE ; ;------------------------------------------------------------------ ; MORE SYMBOLIC CONSTANTS... THESE SHOULD NOT BE CHANGED, UNLESS OF @@ -66,24 +66,24 @@ PPIDE_ASTTS .EQU PPIDE_CS1_LINE + PPIDE_A2_LINE + PPIDE_A1_LINE + PPIDE_A0_LI ; ; 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 +PPIDE_CMDRECAL .EQU $10 +PPIDE_CMDREAD .EQU $20 +PPIDE_CMDWRITE .EQU $30 +PPIDE_CMDINIT .EQU $91 +PPIDE_CMDID .EQU $EC +PPIDE_CMDSPINDOWN .EQU $E0 +PPIDE_CMDSPINUP .EQU $E1 +PPIDE_CMDSETFEAT .EQU $EF ; -PPIDERC_OK .EQU 0 -PPIDERC_CMDERR .EQU 1 -PPIDERC_RDYTO .EQU 2 -PPIDERC_BUFTO .EQU 3 +PPIDE_RCOK .EQU 0 +PPIDE_RCCMDERR .EQU 1 +PPIDE_RCRDYTO .EQU 2 +PPIDE_RCBUFTO .EQU 3 ; ; UNIT CONFIGURATION ; -PPIDE0_DEVICE .DB 11100000B ; LBA, MASTER DEVICE -PPIDE1_DEVICE .DB 11110000B ; LBA, SLAVE DEVICE +PPIDE_UNIT0 .DB %11100000 ; LBA, MASTER DEVICE +PPIDE_UNIT1 .DB %11110000 ; LBA, SLAVE DEVICE ; ; ; @@ -100,17 +100,21 @@ PPIDE_DISPATCH: CALL PANIC ; PPIDE_RD: - JP PPIDE_XREAD + LD A,PPIDE_CMDREAD + LD (PPIDEP_CMD),A + JP PPIDE_RW +; PPIDE_WR: - JP PPIDE_XWRITE -PPIDE_ST: - JP PPIDE_STATUS -PPIDE_MED: - JP PPIDE_MEDIA + LD A,PPIDE_CMDWRITE + LD (PPIDEP_CMD),A + JP PPIDE_RW ; -; PPIDE_MEDIA +PPIDE_ST: + LD A,(PPIDE_STAT) ; LOAD STATUS + OR A ; SET FLAGS + RET ; -PPIDE_MEDIA: +PPIDE_MED: LD A,MID_HD RET ; @@ -121,6 +125,9 @@ PPIDE_INIT: LD A,IDELSB CALL PRTHEXBYTE PRTS(" UNITS=2$") +#IF (PPIDE8BIT) + PRTS(" 8BIT$") +#ENDIF #IF (PPIDESLOW) PRTS(" SLOW$") #ENDIF @@ -132,59 +139,22 @@ PPIDE_INIT: ; ; ; -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,PPIDE_FEATURE ; IDE FEATURE REGISTER - LD A,01H ; VALUE := 1 - CALL PPIDE_WRITE ; DO IT - LD C,PPIDE_COMMAND ; IDE COMMAND REGISTER - LD A,PPIDECMD_SETFEAT ; SET FEATURE - CALL PPIDE_WRITE ; DO IT - CALL PPIDE_WAITRDY - JP NC,PPIDE_ERR - CALL PPIDE_CHKERR ; CHECK FOR ERRORS - JP NC,PPIDE_ERR -#IF (PPIDETRACE >= 2) - CALL PPIDE_PRT -#ENDIF -#ENDIF + ; NEED TO CHECK STATUS HERE!!! PPIDE_RW0: + ; 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 + CALL PPIDE_WAITRDY ; WAIT FOR DRIVE READY JP NC,PPIDE_ERR CALL PPIDE_SETUP ; SETUP CYL, TRK, HEAD @@ -199,7 +169,7 @@ PPIDE_RW0: JP NC,PPIDE_ERR LD A,(PPIDEP_CMD) ; DISPATCH TO READ OR WRITE SPECIFIC LOGIC - CP PPIDECMD_WRITE + CP PPIDE_CMDWRITE JP Z,PPIDE_RW1 CALL PPIDE_BUFRD ; READ BUFFER @@ -238,17 +208,55 @@ PPIDE_OK: ; ; PPIDE_RESET: +#IF (PPIDETRACE >= 2) + CALL NEWLINE + PRTX(PPIDESTR_PREFIX) + PRTS(" RESET$") +#ENDIF +#IF (PPIDETRACE >= 2) + CALL PC_PERIOD +#ENDIF LD C,PPIDE_CONTROL ; IDE CONTROL REGISTER LD A,000001110B ; NO INTERRUPTS, ASSERT RESET BOTH DRIVES CALL PPIDE_WRITE ; DO IT LD DE,8 ; DELAY ABOUT 200ms CALL VDELAY +#IF (PPIDETRACE >= 2) + CALL PC_PERIOD +#ENDIF LD C,PPIDE_CONTROL ; IDE CONTROL REGISTER LD A,000000010B ; NO INTERRUPTS, DEASSERT RESET CALL PPIDE_WRITE ; DO IT XOR A ; STATUS OK LD (PPIDE_STAT),A ; SAVE IT +#IF (PPIDE8BIT) + +#IF (PPIDETRACE >= 2) + CALL PC_PERIOD +#ENDIF + CALL PPIDE_WAITRDY + +#IF (PPIDETRACE >= 2) + CALL PC_PERIOD +#ENDIF + LD C,PPIDE_FEATURE ; IDE FEATURE REGISTER + LD A,01H ; VALUE := 1 + CALL PPIDE_WRITE ; DO IT + +#IF (PPIDETRACE >= 2) + CALL PC_PERIOD +#ENDIF + LD C,PPIDE_COMMAND ; IDE COMMAND REGISTER + LD A,PPIDE_CMDSETFEAT ; SET FEATURE + CALL PPIDE_WRITE ; DO IT + +#IF (PPIDETRACE >= 2) + CALL PC_PERIOD +#ENDIF + +#ENDIF + RET ; ; @@ -273,7 +281,7 @@ PPIDE_WBSY: SCF ; CARRY 1 = OK RET PPIDE_TO: - LD A,PPIDERC_RDYTO + LD A,PPIDE_RCRDYTO LD (PPIDE_RC),A XOR A ; CARRY 0 = TIMEOUT RET @@ -292,7 +300,7 @@ PPIDE_CHKERR: CALL PPIDE_READ ; READ IT LD (PPIDEP_ERR),A ; SAVE IT ; - LD A,PPIDERC_CMDERR ; COMMAND ERROR + LD A,PPIDE_RCCMDERR ; COMMAND ERROR LD (PPIDE_RC),A ; SAVE IT ; OR A ; CLEAR CF TO SIGNAL ERROR @@ -317,7 +325,7 @@ PPIDE_WDRQ: SCF ; CARRY 1 = OK RET PPIDE_TO2: - LD A,PPIDERC_BUFTO + LD A,PPIDE_RCBUFTO LD (PPIDE_RC),A XOR A ; CARRY 0 = TIMED OUT RET @@ -327,7 +335,7 @@ PPIDE_TO2: PPIDE_BUFRD: ; SETUP PPI TO READ LD A,RD_IDE_8255 ; READ CONFIG - OUT (PPI1CONT),A ; DO IT + OUT (PPICTL),A ; DO IT RECOVERY ; OPTIONAL SMALL DELAY ; ; SELECT READ/WRITE IDE REGISTER @@ -341,7 +349,7 @@ PPIDE_BUFRD: ; LOOP SETUP LD HL,(DIOBUF) ; LOCATION OF BUFFER LD B,0 ; 256 ITERATIONS - LD C,IDEMSB ; SETUP C WITH IO PORT (MSB) + LD C,IDELSB ; SETUP C WITH IO PORT (LSB) ; CALL PPIDE_BUFRD1 ; FIRST PASS (FIRST 256 BYTES) CALL PPIDE_BUFRD1 ; SECOND PASS (LAST 256 BYTES) @@ -353,9 +361,6 @@ PPIDE_BUFRD: RET ; PPIDE_BUFRD1: ; START OF READ LOOP -#IF (!PPIDE8BIT) - DEC C ; MSB -> LSB -#ENDIF LD A,D ; ASSERT READ OUT (IDECTL),A ; DO IT RECOVERY ; OPTIONAL SMALL DELAY @@ -365,10 +370,14 @@ PPIDE_BUFRD1: ; START OF READ LOOP INC C ; LSB -> MSB INI ; GET AND SAVE NEXT BYTE RECOVERY ; OPTIONAL SMALL DELAY + PUSH AF + DEC C ; MSB -> LSB + POP AF #ENDIF LD A,E ; DEASSERT READ OUT (IDECTL),A ; DO IT RECOVERY ; OPTIONAL SMALL DELAY +; JR NZ,PPIDE_BUFRD1 ; LOOP UNTIL DONE RET ; @@ -376,22 +385,22 @@ PPIDE_BUFRD1: ; START OF READ LOOP ; PPIDE_BUFWR: ; SETUP PPI TO WRITE - LD A,WR_IDE_8255 ; READ CONFIG - OUT (PPI1CONT),A ; DO IT + LD A,WR_IDE_8255 ; WRITE CONFIG + OUT (PPICTL),A ; DO IT RECOVERY ; OPTIONAL SMALL DELAY ; ; SELECT READ/WRITE IDE REGISTER LD A,PPIDE_DATA ; DATA REGISTER OUT (IDECTL),A ; DO IT RECOVERY ; OPTIONAL SMALL DELAY - LD E,A ; E := READ UNASSERTED + LD E,A ; E := WRITE UNASSERTED XOR PPIDE_WR_LINE ; SWAP THE WRITE LINE BIT - LD D,A ; D := READ ASSERTED + LD D,A ; D := WRITE ASSERTED ; ; LOOP SETUP LD HL,(DIOBUF) ; LOCATION OF BUFFER LD B,0 ; 256 ITERATIONS - LD C,IDEMSB ; SETUP C WITH IO PORT (MSB) + LD C,IDELSB ; SETUP C WITH IO PORT (LSB) ; CALL PPIDE_BUFWR1 ; FIRST PASS (FIRST 256 BYTES) CALL PPIDE_BUFWR1 ; SECOND PASS (LAST 256 BYTES) @@ -402,23 +411,26 @@ PPIDE_BUFWR: RECOVERY ; OPTIONAL SMALL DELAY RET ; -PPIDE_BUFWR1: ; START OF READ LOOP -#IF (!PPIDE8BIT) - DEC C ; MSB -> LSB -#ENDIF +PPIDE_BUFWR1: ; START OF WRITE LOOP OUTI ; SEND NEXT BYTE OF BUFFER RECOVERY ; OPTIONAL SMALL DELAY #IF (!PPIDE8BIT) INC C ; LSB -> MSB OUTI ; SEND NEXT BYTE OF BUFFER + PUSH AF + DEC C ; MSB -> LSB + POP AF RECOVERY ; OPTIONAL SMALL DELAY #ENDIF - LD A,D ; ASSERT WRITE +; + ; TOGGLE THE WRITE LINE + LD A,D ; WRITE ASSERTED VALUE OUT (IDECTL),A ; DO IT RECOVERY ; OPTIONAL SMALL DELAY - LD A,E ; DEASSERT WRITE + LD A,E ; WRITE UNASSERTED VALUE OUT (IDECTL),A ; DO IT RECOVERY ; OPTIONAL SMALL DELAY +; JR NZ,PPIDE_BUFWR1 ; LOOP UNTIL DONE RET ; @@ -437,12 +449,10 @@ PPIDE_SETUP: JP Z,PPIDE_SETUP_UNIT1 CALL PANIC PPIDE_SETUP_UNIT0: - LD A,(PPIDE0_DEVICE) -; LD DE,(PPIDE0_OFFSET) + LD A,(PPIDE_UNIT0) JP PPIDE_SETUP1 PPIDE_SETUP_UNIT1: - LD A,(PPIDE1_DEVICE) -; LD DE,(PPIDE1_OFFSET) + LD A,(PPIDE_UNIT1) JP PPIDE_SETUP1 PPIDE_SETUP1: LD C,PPIDE_HEAD ; IDE HEAD REGISTER @@ -477,11 +487,13 @@ PPIDE_READ: ; ; SET PPI MODE TO READ CONFIGURATION LD A,RD_IDE_8255 ; PPI MODE TO READ - OUT (PPI1CONT),A ; DO IT + OUT (PPICTL),A ; DO IT RECOVERY ; OPTIONAL SMALL DELAY ; - ; SELECT REQUESTED IDE REGISTER AND ASSERT READ + ; SELECT REQUESTED IDE REGISTER, THEN ASSERT READ LD A,C ; REGISTER SELECTION -> A + OUT (IDECTL),A ; DO IT + RECOVERY ; OPTIONAL SMALL DELAY OR PPIDE_RD_LINE ; ASSERT READ OUT (IDECTL),A ; DO IT RECOVERY ; OPTIONAL SMALL DELAY @@ -490,10 +502,16 @@ PPIDE_READ: IN A,(IDELSB) ; READ LSB RECOVERY ; OPTIONAL SMALL DELAY PUSH AF ; SAVE IT FOR NOW +; +; ; DUMMY READ OF MSB +; IN A,(IDEMSB) ; READ LSB +; RECOVERY ; OPTIONAL SMALL DELAY ; ; CLEAN UP AND RETURN - XOR A ; ZERO A - OUT (IDECTL),A ; RELEASE ALL BUS SIGNALS + LD A,C ; DEASSERT READ + OUT (IDECTL),A ; DO IT + XOR A ; RELEASE ALL BUS SIGNALS + OUT (IDECTL),A ; DO IT RECOVERY ; OPTIONAL SMALL DELAY ; POP AF ; RECOVER THE DATA BYTE @@ -508,15 +526,22 @@ PPIDE_WRITE: ; ; SET PPI MODE TO WRITE CONFIGURATION LD A,WR_IDE_8255 ; PPI MODE TO WRITE - OUT (PPI1CONT),A ; DO IT + OUT (PPICTL),A ; DO IT RECOVERY ; OPTIONAL SMALL DELAY ; + ; SELECT REQUESTED IDE REGISTER + LD A,C ; REGISTER SELECTION -> A + OUT (IDECTL),A ; DO IT + RECOVERY ; OPTIONAL SMALL DELAY + ; SET THE VALUE TO WRITE POP AF ; GET VALUE BACK OUT (IDELSB),A ; SET IDE LSB RECOVERY ; OPTIONAL SMALL DELAY +; +; ; MSB ALWAYS GETS ZERO ; XOR A ; ZERO A -; OUT (IDELSB),A ; SET IDE MSB +; OUT (IDEMSB),A ; SET IDE MSB ; RECOVERY ; OPTIONAL SMALL DELAY ; ; PULSE THE WRITE LINE @@ -524,10 +549,13 @@ PPIDE_WRITE: OR PPIDE_WR_LINE ; ASSERT WRITE OUT (IDECTL),A ; DO IT RECOVERY ; OPTIONAL SMALL DELAY + LD A,C + OUT (IDECTL),A ; DO IT + RECOVERY ; OPTIONAL SMALL DELAY ; ; CLEAN UP AND RETURN - XOR A ; ZERO A - OUT (IDECTL),A ; RELEASE ALL BUS SIGNALS + XOR A ; RELEASE ALL BUS SIGNALS + OUT (IDECTL),A ; DO IT RECOVERY ; OPTIONAL SMALL DELAY ; RET ; RETURN @@ -570,10 +598,10 @@ PPIDE_PRT: CALL PC_LBKT LD A,(PPIDEP_CMD) LD DE,PPIDESTR_READ - CP PPIDECMD_READ + CP PPIDE_CMDREAD JP Z,PPIDE_PRTCMD LD DE,PPIDESTR_WRITE - CP PPIDECMD_WRITE + CP PPIDE_CMDWRITE JP Z,PPIDE_PRTCMD LD DE,PPIDESTR_UNKCMD PPIDE_PRTCMD: @@ -614,16 +642,16 @@ PPIDE_PRTCMD: CALL PC_LBKT LD A,(PPIDE_RC) LD DE,PPIDESTR_RCOK - CP PPIDERC_OK + CP PPIDE_RCOK JP Z,PPIDE_PRTRC LD DE,PPIDESTR_RCCMDERR - CP PPIDERC_CMDERR + CP PPIDE_RCCMDERR JP Z,PPIDE_PRTRC LD DE,PPIDESTR_RCRDYTO - CP PPIDERC_RDYTO + CP PPIDE_RCRDYTO JP Z,PPIDE_PRTRC LD DE,PPIDESTR_RCBUFTO - CP PPIDERC_BUFTO + CP PPIDE_RCBUFTO JP Z,PPIDE_PRTRC LD DE,PPIDESTR_RCUNK PPIDE_PRTRC: @@ -664,12 +692,6 @@ 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. @@ -690,4 +712,4 @@ PPIDEP_ERR .DB 0 ; 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. \ No newline at end of file +; Bit 0: ERR (Error) Set when an error occurred during the previous ATA command. diff --git a/Source/ver.inc b/Source/ver.inc index 21505cb6..05e01e23 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -1,7 +1,7 @@ #DEFINE RMJ 2 #DEFINE RMN 5 -#DEFINE RUP 0 -#DEFINE RTP 16 -#DEFINE BIOSVER "2.5" -#DEFINE BIOSBLD "Build 16" +#DEFINE RUP 1 +#DEFINE RTP 17 +#DEFINE BIOSVER "2.5.1" +#DEFINE BIOSBLD "Build 17" #DEFINE REVISION 412