mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
FDU App Updates
- Improve read/write sector performance in FDU to avoid spurious overrun errors. - Fix boot loader under UNA
This commit is contained in:
@@ -37,12 +37,13 @@
|
||||
; 2017-09-02: V5.0 RENAMED APP TO FDU (FLOPPY DISK UTILITY)
|
||||
; DYNAMIC FDC SELECTION AT STARTUP
|
||||
; DYNAMIC CPU SPEED ADJUSTMENT
|
||||
; 2017-12-16: V5.1 IMPROVED POLLING READ/WRITE PERFORMANCE
|
||||
;
|
||||
;_______________________________________________________________________________
|
||||
;
|
||||
; BUILDING:
|
||||
; CAN BE BUILT WITH TASM LIKE THIS:
|
||||
; TASM -t80 -b -fFF FD.ASM FD.COM FD.LST
|
||||
; TASM -t80 -b -fFF FDU.ASM FDU.COM FDU.LST
|
||||
;
|
||||
; TODO:
|
||||
; 1) CURRENT TRACK IS UPDATED EVEN IF SEEK FAILS! (DEFER, RECOVERS AUTOMATICALLY)
|
||||
@@ -56,8 +57,6 @@
|
||||
;_______________________________________________________________________________
|
||||
;
|
||||
;
|
||||
CPUFREQ .EQU 20 ; IN MHZ, USED TO COMPUTE DELAY FACTORS
|
||||
;
|
||||
FDC_DIO .EQU 0
|
||||
FDC_DIO3 .EQU 1
|
||||
FDC_ZETA .EQU 2
|
||||
@@ -198,7 +197,7 @@ INIT5:
|
||||
XOR A
|
||||
RET
|
||||
|
||||
STR_BANNER .DB "Floppy Disk Utility (FDU) v5.0, 02-Sep-2017$"
|
||||
STR_BANNER .DB "Floppy Disk Utility (FDU) v5.1, 16-Dec-2017$"
|
||||
STR_BANNER2 .DB "Copyright (C) 2017, Wayne Warthen, GNU GPL v3","$"
|
||||
STR_HBIOS .DB " [HBIOS]$"
|
||||
STR_UBIOS .DB " [UBIOS]$"
|
||||
@@ -2067,8 +2066,9 @@ FCP_XFRCNT .DW 00H ; BYTES TRANSFERRED DURING COMMAND PHASE
|
||||
; FDC EXECUTION PHASE
|
||||
;
|
||||
FXP_XR .DW 00H ; INPUT: ADDRESS OF EXECUTION ROUTINE TO INVOKE
|
||||
FXP_TO .DW 00H ; TIMEOUT COUNTDOWN TIMER USED IN SOME VARIATIONS
|
||||
FXP_TO .DB 00H ; TIMEOUT COUNTDOWN TIMER USED IN SOME VARIATIONS
|
||||
FXP_XFRCNT .DW 00H ; BYTES TRANSFERRED DURING EXECUTION
|
||||
FXP_ITER .DB 00H ; LOOP ITERATION WORKING COUNTER
|
||||
FXP_A .DB 00H ; LAST VALUE OF REG A RECORDED DURING EXECUTION
|
||||
FXP_BC .DW 00H ; LAST VALUE OF REG BC RECORDED DURING EXECUTION
|
||||
FXP_DE .DW 00H ; LAST VALUE OF REG DE RECORDED DURING EXECUTION
|
||||
@@ -2881,18 +2881,19 @@ FOP_X1:
|
||||
LD HL,(FXP_XR) ; LOAD THE EXECUTION ROUTINE ADDRESS
|
||||
CALL JPHL ; CALL INDIRECTLY VIA HL
|
||||
|
||||
; FIX: NEED TO CHECK REG A FOR STATUS, DEPENDING ON STATUS
|
||||
; IT MAY BE NECESSARY TO DO SOMETHING SPECIAL?
|
||||
|
||||
LD A,(FST_RC) ; CURRENT RESULT CODE
|
||||
CP FRC_OK ; ERROR?
|
||||
RET NZ ; IF SO, ALL DONE
|
||||
|
||||
; JP FOP_RES ; CONTINUE WITH GETRESULTS
|
||||
|
||||
;
|
||||
; RESULTS PHASE
|
||||
;
|
||||
FOP_RES:
|
||||
LD B,0 ; D = BYTES RECEIVED
|
||||
LD B,0 ; B = BYTES RECEIVED
|
||||
LD HL,FRB_LEN ; POINT TO BUFFER LENGTH
|
||||
LD (HL),D ; UPDATE NUMBER OF BYTES RECEIVED
|
||||
LD (HL),B ; UPDATE NUMBER OF BYTES RECEIVED
|
||||
LD HL,FRB ; POINT TO RECEIVE BUFFER
|
||||
|
||||
FOP_RES0:
|
||||
@@ -2903,11 +2904,13 @@ FOP_RES1:
|
||||
CALL DELAY ; FDC MAY TAKE UP TO 12us TO UPDATE MSR
|
||||
IN A,(C) ; READ MAIN STATUS REGISTER
|
||||
LD (FST_MSR),A ; SAVE IT FOR POTENTIAL LATER DIAGNOSIS
|
||||
AND 0F0H ; ISOLATE RQM/DIO
|
||||
AND 0F0H ; REMOVE SEEK BITS
|
||||
CP 0D0H ; LOOKING FOR RQM=1, DIO=1, BUSY=1 (FDC BYTE PENDING)
|
||||
JP Z,FOP_RES2 ; GOOD, GO TO RECEIVE BYTE
|
||||
CP 080H ; CHECK FOR RQM=1, DIO=0 (NOTHING LEFT)
|
||||
JP Z,FOP_EVAL ; IF NOTHING, ALL DONE, LEFT GO TO EOD/EXIT
|
||||
JR Z,FOP_RES2 ; GOOD, GO TO RECEIVE BYTE
|
||||
CP $80 ; DONE?
|
||||
JR Z,FOP_EVAL ; IF SO, GO TO EVAL
|
||||
;CALL PC_SPACE
|
||||
;CALL PRTHEXBYTE
|
||||
DEC DE
|
||||
LD A,D
|
||||
OR E
|
||||
@@ -3156,45 +3159,45 @@ FXRX1:
|
||||
JR NZ,FXRX1 ; NOT ZERO YET, KEEP CHECKING
|
||||
JP FXR_TO ; OTHERWISE, TIMEOUT ERROR
|
||||
RET
|
||||
|
||||
;
|
||||
; READ DATA
|
||||
;
|
||||
FXRR:
|
||||
DI ; DISABLE INTERRUPTS TO AVOID TIMEOUTS
|
||||
LD A,(CPUFREQ + 3) / 4 ; HIGH BYTE OF OUTER LOOP COUNTER
|
||||
LD (FXP_TO+1),A ; SAVE HIGH BYTE OF COUNTER
|
||||
XOR A ; LOW BYTE IS ZERO
|
||||
LD (FXP_TO),A ; SAVE LOW BYTE
|
||||
LD B,A ; INIT INNER LOOP COUNTER
|
||||
LD C,(IY+CFG_MSR) ; SET C TO MSR PORT
|
||||
FXRR1: LD B,0 ; SETUP FOR 256 ITERATIONS (INNER LOOP)
|
||||
; INNER LOOP
|
||||
FXRR2: IN A,(C) ; GET MSR
|
||||
CP 0F0H ; WE WANT RQM=1,DIO=1,EXM=1,BUSY=1 (READY TO RECEIVE A BYTE W/ EXEC ACTIVE)
|
||||
JP Z,FXRR3 ; GOT IT, DO BYTE READ
|
||||
DJNZ FXRR2 ; NOT READY, LOOP IF COUNTER NOT ZERO
|
||||
; OUTER LOOP
|
||||
AND 0E0H ; MASK TO ISOLATE RQM, DIO, EXM
|
||||
CP 0C0H ; IF RQM=1, DIO=1, EXM=0 (EXECUTION ABORTED)
|
||||
JP Z,FXR_ABORT ; IF ZERO, BAIL OUT TO ERR ROUTINE, FIX: GO TO SPECIFIC ROUTINE FOR THIS???
|
||||
PUSH HL ; SAVE HL
|
||||
LD HL,(FXP_TO) ; GET DOWN COUNTER
|
||||
DEC HL ; DECREMENT
|
||||
LD (FXP_TO),HL ; SAVE IT
|
||||
LD A,L ; CHECK COUNTER
|
||||
OR H ; ... FOR ZERO
|
||||
POP HL ; RESTORE HL
|
||||
JR NZ,FXRR1 ; LOOP IF NOT ZERO
|
||||
JP FXR_TO ; OTHERWISE, TIMEOUT
|
||||
FXRR3: ; READ A PENDING BYTE
|
||||
INC C ; SET C TO DATA PORT
|
||||
INI ; READ PORT C TO (HL) AND INC HL
|
||||
DEC C ; SET C BACK TO STATUS PORT
|
||||
DEC DE ; DECREMENT BYTE COUNT
|
||||
LD A,D ; TEST COUNTER
|
||||
OR E ; ... FOR ZERO
|
||||
JP NZ,FXRR1 ; IF NOT ZERO, REPEAT LOOP
|
||||
JP FXR_END ; CLEAN EXIT
|
||||
FXRR: LD A,E ; LOW BYTE OF COUNT TO ACCUM
|
||||
OR A ; TEST FOR ZERO
|
||||
JR Z,FXRR1 ; IF ZERO, DO NOT ADJUST ITERATIONS
|
||||
INC D ; OTHERWISE, ITERATIONS IS ONE MORE THAN HIGH BYTE
|
||||
FXRR1: LD B,E ; LOW BYTE OF COUNT TO B
|
||||
LD A,D ; HIGH BYTE OF COUNT
|
||||
LD (FXP_ITER),A ; ... IS ITERATION COUNT
|
||||
LD IX,FXP_ITER ; SETUP IX AS POINTER TO ITERATION COUNT
|
||||
LD A,(CPUSPD) ; CPU SPEED SCALER
|
||||
LD (FXP_TO),A ; SAVE IT AS OUTER LOOP TIMEOUT
|
||||
LD C,(IY+CFG_DATA) ; SET C TO DATA PORT
|
||||
DI ; DISABLE INTERRUPTS TO AVOID OVERRUN
|
||||
FXRR2: DEC C ; [04] SET C TO MSR PORT
|
||||
FXRR3: LD DE,0 ; [10] TIMEOUT COUNTER
|
||||
FXRR4: IN A,(C) ; [12] GET MSR
|
||||
CP $F0 ; [07] BYTE READY?
|
||||
JR Z,FXRR5 ; [12/7] GET IT
|
||||
;LD (FST_MSR),A ; [13] *DEBUG* SAVE MSR FOR LATER
|
||||
DEC E ; [04] DEC LSB OF INNER TIMEOUT COUNTER
|
||||
JR NZ,FXRR4 ; [12/7] LOOP IF LSB IS NOT EXHAUSTED
|
||||
CP $D0 ; [07] IF RQM=1, DIO=1, EXM=0, CB=1, EXECUTION ABORTED
|
||||
JP Z,FXR_ABORT ; [10] IF NOT SET, EXECUTION ABORTED
|
||||
DEC D ; [04] DEC MSB OF INNER TIMEOUT COUNTER
|
||||
JR NZ,FXRR4 ; [12/7] LOOP IF MSB IS NOT EXHAUSTED
|
||||
LD A,(FXP_TO) ; [13] GET OUTER LOOP COUNTER
|
||||
DEC A ; [04] DECREMENT
|
||||
LD (FXP_TO),A ; [13] SAVE NEW COUNTER VALUE
|
||||
JR NZ,FXRR3 ; [12/7] LOOP IF NOT EXHAUSTED
|
||||
JP FXR_TO ; [10] OTHERWISE, HANDLE TIMEOUT
|
||||
FXRR5: INC C ; [04] POINT TO DATA PORT
|
||||
INI ; [16] (HL) := (C), HL++, B--
|
||||
JR NZ,FXRR2 ; [12/7] LOOP
|
||||
DEC (IX) ; [23] DECREMENT ITERATION COUNT
|
||||
JR NZ,FXRR2 ; [12] IF MORE ITERATIONS, GO DO IT
|
||||
JP FXR_END ; [10] ELSE DONE
|
||||
|
||||
;
|
||||
; INT READ DATA - SAFE VERSION
|
||||
@@ -3265,42 +3268,42 @@ WFXRR2:
|
||||
;
|
||||
; WRITE DATA
|
||||
;
|
||||
FXRW:
|
||||
DI ; DISABLE INTERRUPTS TO AVOID TIMEOUTS
|
||||
LD A,(CPUFREQ + 3) / 4 ; HIGH BYTE OF OUTER LOOP COUNTER
|
||||
LD (FXP_TO+1),A ; SAVE HIGH BYTE OF COUNTER
|
||||
XOR A ; LOW BYTE IS ZERO
|
||||
LD (FXP_TO),A ; SAVE LOW BYTE
|
||||
LD B,A ; INIT INNER LOOP COUNTER
|
||||
LD C,(IY+CFG_MSR) ; SET C TO MSR PORT
|
||||
FXRW1: LD B,0 ; SETUP FOR 256 ITERATIONS
|
||||
; INNER LOOP
|
||||
FXRW2: IN A,(C) ; GET MSR
|
||||
CP 0B0H ; WE WANT RQM=1,DIO=0,EXM=1,BUSY=1 (READY TO SEND A BYTE W/ EXEC ACTIVE)
|
||||
JR Z,FXRW3 ; GOT IT, DO BYTE WRITE
|
||||
DJNZ FXRW2 ; NOT READY, LOOP IF COUNTER NOT ZERO
|
||||
; OUTER LOOP
|
||||
AND 0E0H ; MASK TO ISOLATE RQM, DIO, EXM
|
||||
CP 0C0H ; IF RQM=1, DIO=1, EXM=0 (EXECUTION ABORTED)
|
||||
JP Z,FXR_ABORT ; IF ZERO, BAIL OUT TO ERR ROUTINE, FIX: GO TO SPECIFIC ROUTINE FOR THIS???
|
||||
PUSH HL ; SAVE HL
|
||||
LD HL,(FXP_TO) ; GET DOWN COUNTER
|
||||
DEC HL ; DECREMENT
|
||||
LD (FXP_TO),HL ; SAVE IT
|
||||
LD A,L ; CHECK COUNTER
|
||||
OR H ; ... FOR ZERO
|
||||
POP HL ; RESTORE HL
|
||||
JR NZ,FXRW1 ; LOOP IF NOT ZERO
|
||||
JP FXR_TO ; OTHERWISE, TIMEOUT
|
||||
FXRW3: ; READ A PENDING BYTE
|
||||
INC C ; SET C TO DATA PORT
|
||||
OUTI ; WRITE (HL) TO PORT C AND INC HL
|
||||
DEC C ; SET C BACK TO STATUS PORT
|
||||
DEC DE ; DECREMENT LOOP COUNTER
|
||||
LD A,D ; TEST COUNTER
|
||||
OR E ; ... FOR ZERO
|
||||
JP NZ,FXRW1 ; IF NOT ZERO, REPEAT LOOP
|
||||
JP FXR_END ; CLEAN EXIT
|
||||
FXRW: LD A,E ; LOW BYTE OF COUNT TO ACCUM
|
||||
OR A ; TEST FOR ZERO
|
||||
JR Z,FXRW1 ; IF ZERO, DO NOT ADJUST ITERATIONS
|
||||
INC D ; OTHERWISE, ITERATIONS IS ONE MORE THAN HIGH BYTE
|
||||
FXRW1: LD B,E ; LOW BYTE OF COUNT TO B
|
||||
LD A,D ; HIGH BYTE OF COUNT
|
||||
LD (FXP_ITER),A ; ... IS ITERATION COUNT
|
||||
LD IX,FXP_ITER ; SETUP IX AS POINTER TO ITERATION COUNT
|
||||
LD A,(CPUSPD) ; CPU SPEED SCALER
|
||||
LD (FXP_TO),A ; SAVE IT AS OUTER LOOP TIMEOUT
|
||||
LD C,(IY+CFG_DATA) ; SET C TO DATA PORT
|
||||
DI ; DISABLE INTERRUPTS TO AVOID OVERRUN
|
||||
FXRW2: DEC C ; [04] SET C TO MSR PORT
|
||||
FXRW3: LD DE,0 ; [10] TIMEOUT COUNTER
|
||||
FXRW4: IN A,(C) ; [12] GET MSR
|
||||
CP $B0 ; [07] BYTE READY?
|
||||
JR Z,FXRW5 ; [12/7] GET IT
|
||||
;LD (FST_MSR),A ; [13] *DEBUG* SAVE MSR FOR LATER
|
||||
DEC E ; [04] DEC LSB OF INNER TIMEOUT COUNTER
|
||||
JR NZ,FXRW4 ; [12/7] LOOP IF LSB IS NOT EXHAUSTED
|
||||
CP $D0 ; [07] IF RQM=1, DIO=1, EXM=0, CB=1, EXECUTION ABORTED
|
||||
JP Z,FXR_ABORT ; [10] IF NOT SET, EXECUTION ABORTED
|
||||
DEC D ; [04] DEC MSB OF INNER TIMEOUT COUNTER
|
||||
JR NZ,FXRW4 ; [12/7] LOOP IF MSB IS NOT EXHAUSTED
|
||||
LD A,(FXP_TO) ; [13] GET OUTER LOOP COUNTER
|
||||
DEC A ; [04] DECREMENT
|
||||
LD (FXP_TO),A ; [13] SAVE NEW COUNTER VALUE
|
||||
JR NZ,FXRW3 ; [12/7] LOOP IF NOT EXHAUSTED
|
||||
JP FXR_TO ; [10] OTHERWISE, HANDLE TIMEOUT
|
||||
FXRW5: INC C ; [04] POINT TO DATA PORT
|
||||
OUTI ; [16] (C) := (HL), HL++, B--
|
||||
JR NZ,FXRW2 ; [12/7] LOOP
|
||||
DEC (IX) ; [23] DECREMENT ITERATION COUNT
|
||||
JR NZ,FXRW2 ; [12] IF MORE ITERATIONS, GO DO IT
|
||||
JP FXR_END ; [10] ELSE DONE
|
||||
|
||||
|
||||
;
|
||||
; INT WRITE DATA - SAFE VERSION
|
||||
@@ -3369,34 +3372,41 @@ WFXRW2:
|
||||
;
|
||||
|
||||
FXR_TO:
|
||||
; SET ERROR AND GET OUT W/O PULSING TC
|
||||
LD A,FRC_TOEXEC
|
||||
JP FXR_ERR
|
||||
LD (FST_RC),A
|
||||
JR FXR_END2
|
||||
|
||||
FXR_ABORT:
|
||||
LD A,FRC_ABORT
|
||||
JP FXR_ERR
|
||||
FXR_ERR:
|
||||
LD (FST_RC),A
|
||||
JP FXR_END2
|
||||
; LET RESULTS PHASE HANDLE ERROR, DO NOT PULSE TC, COMMAND ALREADY TERMINATED
|
||||
;LD A,FRC_ABORT
|
||||
;LD (FST_RC),A
|
||||
JR FXR_END2
|
||||
|
||||
FXR_END:
|
||||
; DO NOT PULSE TC AT END OF FORMAT
|
||||
; DO NOT PULSE TC AT END OF FORMAT OR READID, THOSE COMMANDS SELF-TERMINATE
|
||||
LD A,(FCP_CMD)
|
||||
CP CMD_FMTTRK
|
||||
JR Z,FXR_END2
|
||||
|
||||
; DO NOT PULSE TC AT END OF READID
|
||||
CP CMD_READID
|
||||
JR Z,FXR_END2
|
||||
|
||||
|
||||
CALL FC_PULSETC
|
||||
|
||||
|
||||
FXR_END2:
|
||||
#IF 0
|
||||
LD (FXP_A),A
|
||||
LD (FXP_BC),BC
|
||||
LD (FXP_DE),DE
|
||||
LD (FXP_HL),HL
|
||||
|
||||
LD C,(IY+CFG_MSR) ; SET C TO MSR PORT
|
||||
IN A,(C)
|
||||
LD (FST_MSR),A
|
||||
|
||||
CALL FXR_DUMP
|
||||
#ENDIF
|
||||
|
||||
EI ; I/O FINISHED, INTS BACK ON
|
||||
RET
|
||||
|
||||
@@ -3562,6 +3572,12 @@ FXR_DUMP:
|
||||
CALL WRITESTR
|
||||
LD A,(FST_MSR)
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
LD DE,STR_A
|
||||
CALL WRITESTR
|
||||
LD A,(FXP_A)
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
LD DE,STR_BC
|
||||
CALL WRITESTR
|
||||
LD BC,(FXP_BC)
|
||||
@@ -3569,6 +3585,7 @@ FXR_DUMP:
|
||||
CALL PRTHEXBYTE
|
||||
LD A,C
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
LD DE,STR_DE
|
||||
CALL WRITESTR
|
||||
LD BC,(FXP_DE)
|
||||
@@ -3576,6 +3593,7 @@ FXR_DUMP:
|
||||
CALL PRTHEXBYTE
|
||||
LD A,C
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
LD DE,STR_HL
|
||||
CALL WRITESTR
|
||||
LD BC,(FXP_HL)
|
||||
@@ -3583,6 +3601,17 @@ FXR_DUMP:
|
||||
CALL PRTHEXBYTE
|
||||
LD A,C
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
LD DE,STR_ITER
|
||||
CALL WRITESTR
|
||||
LD A,(FXP_ITER)
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
LD DE,STR_TO
|
||||
CALL WRITESTR
|
||||
LD A,(FXP_TO)
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
RET
|
||||
;
|
||||
; DOR BITS (3AH)
|
||||
@@ -3823,17 +3852,16 @@ COPYSTR:
|
||||
; PRINT CONTENTS OF A
|
||||
;________________________________________________________________________________________________________________________________
|
||||
;
|
||||
COUT_BUFFER .TEXT " $"
|
||||
;
|
||||
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
|
||||
|
||||
LD C,2 ; BDOS FUNC: CONSOLE WRITE CHAR
|
||||
LD E,A ; CHARACTER TO E
|
||||
CALL $0005 ; CALL BDOS
|
||||
|
||||
POP DE ;
|
||||
POP HL ;
|
||||
POP AF ;
|
||||
@@ -4403,9 +4431,12 @@ STR_SN .TEXT " SN=$"
|
||||
STR_NCN .TEXT " NCN=$"
|
||||
STR_PCN .TEXT " PCN=$"
|
||||
STR_MSR .TEXT " MSR=$"
|
||||
STR_A .TEXT " A=$"
|
||||
STR_BC .TEXT " BC=$"
|
||||
STR_DE .TEXT " DE=$"
|
||||
STR_HL .TEXT " HL=$"
|
||||
STR_TO .TEXT " TO=$"
|
||||
STR_ITER .TEXT " ITER=$"
|
||||
STR_DSKCHG .TEXT " DC=$"
|
||||
;
|
||||
KEYBUFLEN .EQU 80
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
================================================================
|
||||
Floppy Disk Utility (FDU) v5.0 for RetroBrew Computers
|
||||
Floppy Disk Utility (FDU) v5.1 for RetroBrew Computers
|
||||
Disk IO / Zeta / Dual-IDE / N8
|
||||
================================================================
|
||||
|
||||
Updated September 2, 2017
|
||||
Updated December 16, 2017
|
||||
by Wayne Warthen (wwarthen@gmail.com)
|
||||
|
||||
Application to test the hardware functionality of the Floppy
|
||||
@@ -470,4 +470,7 @@ WW 9/2/2017: v5.0
|
||||
|
||||
Renamed from FD to FDU.
|
||||
Added runtime selection of FDC hardware.
|
||||
Added runtime timing adjustment.
|
||||
Added runtime timing adjustment.
|
||||
|
||||
WW 12/16/2017: v5.1
|
||||
Improved polling version of read/write to fix occasional overrun errors.
|
||||
|
||||
@@ -603,10 +603,12 @@ HB_START:
|
||||
XOR A
|
||||
OUT0 (Z180_CCR),A
|
||||
OUT0 (Z180_CMR),A
|
||||
CALL DLY8 ; SETTLE
|
||||
|
||||
; SET DEFAULT WAIT STATES
|
||||
LD A,$F0
|
||||
OUT0 (Z180_DCNTL),A
|
||||
CALL DLY8 ; SETTLE
|
||||
|
||||
; MMU SETUP
|
||||
LD A,$80
|
||||
@@ -622,12 +624,14 @@ HB_START:
|
||||
; SET CLOCK DIVIDE TO 1 RESULTING IN FULL XTAL SPEED
|
||||
LD A,$80
|
||||
OUT0 (Z180_CCR),A
|
||||
CALL DLY8 ; SETTLE
|
||||
#ENDIF
|
||||
|
||||
#IF (Z180_CLKDIV >= 2)
|
||||
; SET CPU MULTIPLIER TO 1 RESULTING IN XTAL * 2 SPEED
|
||||
LD A,$80
|
||||
OUT0 (Z180_CMR),A
|
||||
CALL DLY8 ; SETTLE
|
||||
#ENDIF
|
||||
|
||||
#ENDIF
|
||||
@@ -651,10 +655,29 @@ HB_START:
|
||||
;
|
||||
; INSTALL PROXY IN UPPER MEMORY
|
||||
;
|
||||
|
||||
;X1 .EQU $8000
|
||||
;X2 .EQU X1 + 2
|
||||
;X3 .EQU X2 + 2
|
||||
;X4 .EQU X3 + 2
|
||||
|
||||
; LD HL,(HBX_IMG)
|
||||
; LD (X1),HL
|
||||
|
||||
; LD HL,(HBX_IMG)
|
||||
; LD (X2),HL
|
||||
|
||||
LD HL,HBX_IMG
|
||||
LD DE,HBX_LOC
|
||||
LD BC,HBX_SIZ
|
||||
LDIR
|
||||
|
||||
; LD HL,(HBX_IMG)
|
||||
; LD (X3),HL
|
||||
|
||||
; LD HL,(HBX_LOC)
|
||||
; LD (X4),HL
|
||||
|
||||
;
|
||||
; IF ALREADY EXECUTING IN RAM, BYPASS RAM BANK INSTALLATION
|
||||
;
|
||||
@@ -747,6 +770,23 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK
|
||||
;
|
||||
CALL NEWLINE2
|
||||
PRTX(STR_BANNER)
|
||||
|
||||
; CALL PC_SPACE
|
||||
; LD BC,(X1)
|
||||
; CALL PRTHEXWORD
|
||||
|
||||
; CALL PC_SPACE
|
||||
; LD BC,(X2)
|
||||
; CALL PRTHEXWORD
|
||||
|
||||
; CALL PC_SPACE
|
||||
; LD BC,(X3)
|
||||
; CALL PRTHEXWORD
|
||||
|
||||
; CALL PC_SPACE
|
||||
; LD BC,(X4)
|
||||
; CALL PRTHEXWORD
|
||||
|
||||
;
|
||||
; IO PORT SCAN
|
||||
;
|
||||
|
||||
Reference in New Issue
Block a user