Skip to content

Commit

Permalink
Merge pull request #428 from dinoboards/dean-ez80-5
Browse files Browse the repository at this point in the history
Dean ez80 5
  • Loading branch information
wwarthen authored Sep 20, 2024
2 parents 028a153 + a69797d commit fe6cba2
Show file tree
Hide file tree
Showing 7 changed files with 124 additions and 54 deletions.
2 changes: 1 addition & 1 deletion Source/HBIOS/Config/RCEZ80_std.asm
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
;
#INCLUDE "cfg_RCEZ80.asm"
;
CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ
CPUOSC .SET 20000000 ; CPU OSC FREQ IN MHZ
;
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
Expand Down
15 changes: 9 additions & 6 deletions Source/HBIOS/cfg_RCEZ80.asm
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT
;
CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO
CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW
CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ
CPUOSC .SET 20000000 ; CPU OSC FREQ IN MHZ
INTMODE .SET 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280)
DEFSERCFG .SET SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM)
;
Expand Down Expand Up @@ -379,11 +379,11 @@ UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
;
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
AUDIOTRACE .SET FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
SN7CLK .SET 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD
SN7CLK .SET CPUOSC/4 ; SN: PSG CLOCK FREQ, ASSUME MSX STD
SNMODE .SET SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO]
;
AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .SET 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD
AY_CLK .SET CPUOSC/4 ; AY: PSG CLOCK FREQ, ASSUME MSX STD
AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU]
;
SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
Expand Down Expand Up @@ -414,9 +414,12 @@ EZ80_MEM_MIN_WS .SET 0 ; MINIMUM WAIT STATES TO APPLY, IF EZ80_WSMD_TYP = EZ80W
;
; BUS TIMING FOR EXTERNAL I/O ACCESS (CS2)
EZ80_IO_CYCLES .SET 4 ; IO BUS CYCLES (1-15) TO APPLY, IF EZ80_WSMD_TYP = EZ80WSMD_CYCLES
EZ80_IO_WS .SET 5 ; IO WAIT STATES (0-7) TO APPLY, IF EZ80_WSMD_TYP = EZ80WSMD_WAIT
EZ80_IO_MIN_NS .SET 320 ; CALCULATE AT BOOT TIME THE REQUIRED W/S OR B/C, IF EZ80_WSMD_TYP = EZ80WSMD_CALC
EZ80_IO_MIN_WS .SET 6 ; MINIMUM WAIT STATES TO APPLY, IF EZ80_WSMD_TYP = EZ80WSMD_CALC
EZ80_IO_WS .SET 7 ; IO WAIT STATES (0-7) TO APPLY, IF EZ80_WSMD_TYP = EZ80WSMD_WAIT
EZ80_IO_MIN_NS .SET 250 ; CALCULATE AT BOOT TIME THE REQUIRED W/S OR B/C, IF EZ80_WSMD_TYP = EZ80WSMD_CALC

; THE MINMUM W/S SHOULD BE AT LEAST 1 GREATER THAN THE HOLD TRIGGER COUNT PROGRAMMED WITHIN THE PLD OF THE
; EZ80 INTERFACE MODULE. SEE THE EZ80-CPU.PLD FILE WITHIN THE EZ80 FIRMWARE CODE BASE
EZ80_IO_MIN_WS .SET 7 ; MINIMUM WAIT STATES TO APPLY, IF EZ80_WSMD_TYP = EZ80WSMD_CALC
;
; APPLY CYCLES, W/S OR CALCULATE CYCLES BASED ON DESIRED PERIOD
EZ80_WSMD_TYP .SET EZ80WSMD_CALC ; BUS WAIT STATE CONFIG: EZ80WSMD_[CALC|CYCLES|WAIT]
Expand Down
89 changes: 82 additions & 7 deletions Source/HBIOS/ez80cpudrv.asm
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@
; to communicate with the firmware to perform a number of initialisation tasks.
; See also the associated ez80 platform drivers (ez80rtc, ez80systmr, ez80uart).
;
; The driver 'exports' two key functions:
; The driver 'exports' the following:
; 1. EZ80_PREINIT - This function is called by the HBIOS boot code to initialise the eZ80 firmware.
; 2. EZ80_RPT_TIMINGS - This function is called by the HBIOS boot code to report the platform timings.
; 3. DELAY - pause for approx 17us
; 4. VDELAY - pause for approx 17us * DE
;
; EZ80_PREINIT performs the following:
; 1. Exchange platform version numbers
Expand Down Expand Up @@ -77,14 +79,12 @@ EZ80_PREINIT:


#IF (EZ80_WSMD_TYP == EZ80WSMD_CYCLES)
LD L, EZ80_MEM_CYCLES
OR $80
LD L, EZ80_MEM_CYCLES | $80
EZ80_UTIL_MEMTM_SET()
LD A, L
LD (EZ80_PLT_MEMWS), A

LD L, EZ80_IO_CYCLES
OR $80
LD L, EZ80_IO_CYCLES | $80
EZ80_UTIL_IOTM_SET()
LD A, L
LD (EZ80_PLT_IOWS), A
Expand Down Expand Up @@ -126,7 +126,10 @@ EZ80_PREINIT:
EZ80_TMR_SET_FREQTICK

RET

;
; --------------------------------
; eZ80 CPU DRIVER REPORT TIMINGS
; --------------------------------
EZ80_RPT_TIMINGS:
LD A, (EZ80_PLT_MEMWS)
BIT 7, A
Expand Down Expand Up @@ -163,7 +166,79 @@ EZ80_RPT_FSH_TIMINGS:
LD A, (EZ80_PLT_FLSHWS)
CALL PRTDECB
CALL PRTSTRD
.TEXT " FSH W/S$"
.TEXT " FSH W/S$";

;--------------------------------------------------------------------------------------------------
; DELAY LOOP TEST CALIBRATION
;--------------------------------------------------------------------------------------------------
;
; IF ENABLED, THE GPIO PCBx PINS OF THE EZ80 WILL BE TOGGLED AT 'DELAY' RATE * 16
; CAN BE USED TO VERIFY DELAY WORKS SUFFICIENT FOR DIFFERENT EZ80 CLOCK SPEEDS
; AND BUS CYCLES
;
#IF FALSE

; 7.3728 MHZ -- 1 MEM W/S, 6 I/O W/S, 0 FSH W/S - 428 - 26.7us
; 18.4320 MHZ -- 2 MEM W/S, 6 I/O W/S, 1 FSH W/S - 284 - 17.8us
; 20.0000 MHZ -- 2 MEM W/S, 6 I/O W/S, 1 FSH W/S - 281 - 17.6us
; 25.0000 MHZ -- 2 MEM W/S, 3 I/O B/C, 1 FSH W/S - 271 - 16.9us
; 32.0000 MHZ -- 3 MEM W/S, 4 I/O B/C, 2 FSH W/S - 289 - 18.0us


PC_DR: .equ $009E
PC_DDR: .equ $009F
DI

; ENABLE PC5 GPIO AS OUTPUT
LD BC, PC_DDR
XOR A
OUT (C), A
PUSH AF

LD BC, PC_DR
LOOP:

POP AF
OUT (C), A
CPL
PUSH AF

CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY

CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY

CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY

CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY

JR LOOP
#ENDIF
RET

DELAY:
EZ80_DELAY
EZ80_DELAY
EZ80_DELAY
RET

VDELAY:
EZ80_DELAY
DEC DE
LD A,D
OR E
JR NZ, VDELAY
RET

EZ80_RPT_FIRMWARE:
Expand Down
3 changes: 3 additions & 0 deletions Source/HBIOS/ez80instr.inc
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,11 @@
#DEFINE EZ80_IO .DB $49, $CF
; RST.L $10
#DEFINE EZ80_FN .DB $49, $D7
; RST.L $18
#DEFINE EZ80_DELAY .DB $49, $DF

#DEFINE EZ80_UTIL_VER_EXCH XOR A \ LD B, 0 \ EZ80_FN
#DEFINE EZ80_UTIL_DELAY XOR A \ LD B, 1 \ EZ80_FN
#DEFINE EZ80_UTIL_SET_BUSTM XOR A \ LD B, 3 \ EZ80_FN
#DEFINE EZ80_UTIL_SET_BUSFQ XOR A \ LD B, 4 \ EZ80_FN
#DEFINE EZ80_UTIL_GET_CPU_FQ XOR A \ LD B, 5 \ EZ80_FN
Expand Down
44 changes: 8 additions & 36 deletions Source/HBIOS/hbios.asm
Original file line number Diff line number Diff line change
Expand Up @@ -2574,8 +2574,10 @@ HB_CPU3:
;
;;; LOCATION OF THIS CODE???
;
#IF (CPUFAM != CPU_EZ80)
LD A,(CB_CPUMHZ) ; CPU SPEED TO ACCUM AND INIT
CALL DELAY_INIT ; .. SPEED COMPENSATED DELAY
#ENDIF
;
;--------------------------------------------------------------------------------------------------
; SYSTEM TIMER INITIALIZATION
Expand Down Expand Up @@ -2947,42 +2949,6 @@ PSCNX .EQU $ + 1
DJNZ PSCN1
;
#ENDIF

#IF (CPUFAM == CPU_EZ80)
;
;--------------------------------------------------------------------------------------------------
; DELAY LOOP TEST CALIBRATION
;--------------------------------------------------------------------------------------------------
;
; IF ENABLED, THE GPIO PCBx PINS OF THE EZ80 WILL BE TOGGLED AT 'DELAY' RATE
; CAN BE USED TO VERIFY DELAY WORKS SUFFICIENT FOR DIFFERENT EZ80 CLOCK SPEEDS
; AND BUS CYCLES
;
#IF FALSE

PC_DR: .equ $009E
PC_DDR: .equ $009F

; ENABLE PC5 GPIO AS OUTPUT
LD BC, PC_DDR
XOR A
OUT (C), A
PUSH AF

LD BC, PC_DR
LD D, 0
LOOP:
POP AF
OUT (C), A
CPL
PUSH AF

LD DE, 2
CALL VDELAY
JR LOOP
#ENDIF
#ENDIF

;
;--------------------------------------------------------------------------------------------------
; CPU SPEED DETECTION ALIGNMENT TEST
Expand Down Expand Up @@ -5703,9 +5669,11 @@ SYS_SETCPUSPD2:
ADC A,C ; C -> A; ADD CF FOR ROUNDING
LD (CB_CPUMHZ),A ; SAVE IT
;
#IF (CPUFAM != CPU_EZ80)
; REINIT DELAY ROUTINE
LD A,(CB_CPUMHZ) ; CPU SPEED TO ACCUM AND INIT
CALL DELAY_INIT ; .. SPEED COMPENSATED DELAY
#ENDIF
;
SYS_SETCPUSPD3:
XOR A
Expand Down Expand Up @@ -5748,9 +5716,11 @@ SYS_SETCPUSPD2:
ADC A,C ; C -> A; ADD CF FOR ROUNDING
LD (CB_CPUMHZ),A ; SAVE IT
;
#IF (CPUFAM != CPU_EZ80)
; REINIT DELAY ROUTINE
LD A,(CB_CPUMHZ) ; CPU SPEED TO ACCUM AND INIT
CALL DELAY_INIT ; .. SPEED COMPENSATED DELAY
#ENDIF
;
XOR A ; SIGNAL SUCCESS
RET
Expand Down Expand Up @@ -5885,9 +5855,11 @@ SYS_SETCPUSPD4:
LD A,L ; WORKING VALUE TO A
OUT0 (Z180_DCNTL),A ; IMPLEMENT NEW VALUE
;
#IF (CPUFAM != CPU_EZ80)
; REINIT DELAY ROUTINE
LD A,(CB_CPUMHZ) ; CPU SPEED TO ACCUM AND INIT
CALL DELAY_INIT ; .. SPEED COMPENSATED DELAY
#ENDIF
;
#IF ((INTMODE == 2) & (Z180_TIMER))
; THE Z180 TIMER IS BASED ON CPU SPEED. SO HERE
Expand Down
19 changes: 16 additions & 3 deletions Source/HBIOS/sn76489.asm
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ SN7_INIT:
#IFDEF SBCV2004
LD A,(HB_RTCVAL)
OR %00001000 ; SBC-V2-004+ CHANGE
EZ80_IO
OUT (RTCIO),A ; TO HALF CLOCK SPEED
#ENDIF
;
Expand All @@ -95,13 +96,16 @@ SN7_INIT:
SN7_INIT1
LD A,(HL)
INC HL ; BUMP FOR NEXT TIME
EZ80_IO
OUT (SN76489_PORT_LEFT), A ; WRITE LEFT PORT
EZ80_IO
OUT (SN76489_PORT_RIGHT), A ; WRITE RIGHT PORT
DJNZ SN7_INIT1 ; LOOP TILL DONE
;
#IFDEF SBCV2004
LD A,(HB_RTCVAL)
AND %11110111 ; SBC-V2-004+ CHANGE TO
EZ80_IO
OUT (RTCIO),A ; NORMAL CLOCK SPEED
#ENDIF
;
Expand Down Expand Up @@ -288,16 +292,19 @@ SN7_APPLY_VOL: ; APPLY VOLUME TO BOTH LEFT AND RIGHT CHANNELS
PUSH AF
LD A,(HB_RTCVAL)
OR %00001000 ; SBC-V2-004+ CHANGE
EZ80_IO
OUT (RTCIO),A ; TO HALF CLOCK SPEED
POP AF
#ENDIF

EZ80_IO
OUT (SN76489_PORT_LEFT), A
EZ80_IO
OUT (SN76489_PORT_RIGHT), A

#IFDEF SBCV2004
LD A,(HB_RTCVAL)
AND %11110111 ; SBC-V2-004+ CHANGE TO
EZ80_IO
OUT (RTCIO),A ; NORMAL CLOCK SPEED
#ENDIF

Expand Down Expand Up @@ -333,16 +340,19 @@ SN7_APPLY_PRD:
PUSH AF
LD A,(HB_RTCVAL)
OR %00001000 ; SBC-V2-004+ CHANGE
EZ80_IO
OUT (RTCIO),A ; TO HALF CLOCK SPEED
POP AF
#ENDIF

EZ80_IO
OUT (SN76489_PORT_LEFT), A
EZ80_IO
OUT (SN76489_PORT_RIGHT), A

#IFDEF SBCV2004
LD A,(HB_RTCVAL)
AND %11110111 ; SBC-V2-004+ CHANGE TO
EZ80_IO
OUT (RTCIO),A ; NORMAL CLOCK SPEED
#ENDIF

Expand Down Expand Up @@ -370,16 +380,19 @@ SN7_APPLY_PRD:
PUSH AF
LD A,(HB_RTCVAL)
OR %00001000 ; SBC-V2-004+ CHANGE
EZ80_IO
OUT (RTCIO),A ; TO HALF CLOCK SPEED
POP AF
#ENDIF

EZ80_IO
OUT (SN76489_PORT_LEFT), A
EZ80_IO
OUT (SN76489_PORT_RIGHT), A

#IFDEF SBCV2004
LD A,(HB_RTCVAL)
AND %11110111 ; SBC-V2-004+ CHANGE TO
EZ80_IO
OUT (RTCIO),A ; NORMAL CLOCK SPEED
#ENDIF

Expand Down
6 changes: 5 additions & 1 deletion Source/HBIOS/util.asm
Original file line number Diff line number Diff line change
Expand Up @@ -554,7 +554,7 @@ BYTE2BCD1:
RET

#IFDEF USEDELAY

#IF (CPUFAM != CPU_EZ80)
;
; DELAY 16US (CPU SPEED COMPENSATED) INCUDING CALL/RET INVOCATION
; REGISTER A AND FLAGS DESTROYED
Expand Down Expand Up @@ -632,6 +632,7 @@ VDELAY1: ; | |
; |
RET ; 10TS (FINAL RETURN) |
;---------------------------------------------------------------+
#ENDIF
;
; DELAY ABOUT 0.5 SECONDS
; 500000US / 16US = 31250
Expand All @@ -644,6 +645,7 @@ LDELAY:
POP DE
POP AF
RET
#IF (CPUFAM != CPU_EZ80)
;
; INITIALIZE DELAY SCALER BASED ON OPERATING CPU SPEED
; ENTER WITH A = CPU SPEED IN MHZ
Expand All @@ -666,6 +668,8 @@ CPUSCL .DB CPUMHZ - 2 ; OTHERWISE 2 LESS THAN PHI MHZ
#ENDIF
;
#ENDIF
#ENDIF

;
; SHORT DELAY FUNCTIONS. NO CLOCK SPEED COMPENSATION, SO THEY
; WILL RUN LONGER ON SLOWER SYSTEMS. THE NUMBER INDICATES THE
Expand Down

0 comments on commit fe6cba2

Please sign in to comment.