Browse Source

Mo' Faster

- Some minor Z280 speed optimizations.
pull/199/head
Wayne Warthen 5 years ago
parent
commit
2ac9f33be7
  1. 2
      Source/HBIOS/Config/RCZ80_mt.asm
  2. 2
      Source/HBIOS/cfg_rcz180.asm
  3. 85
      Source/HBIOS/hbios.asm
  4. 2
      Source/ver.inc
  5. 2
      Source/ver.lib

2
Source/HBIOS/Config/RCZ80_mt.asm

@ -34,5 +34,3 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
;
SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
;
PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM)

2
Source/HBIOS/cfg_rcz180.asm

@ -186,7 +186,7 @@ PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER
PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER
;
SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
SDMODE .EQU SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT]
SDMODE .EQU SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT]
SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY
SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE

85
Source/HBIOS/hbios.asm

@ -463,9 +463,14 @@ HBX_BNKSEL1:
#ENDIF
;
#IF (MEMMGR == MM_Z280)
PUSH BC ; SAVE BC
PUSH HL ; SAVE HL
LD B,$00 ; FIRST USER PDR
.DB $ED,$71 ; SC
.DW Z280_BNKSEL ; SC PARAMETER
RET
POP HL ; RESTORE HL
POP BC ; RESTORE BC
RET ; DONE
#ENDIF
;
#IF (MEMMGR == MM_ZRC)
@ -1223,6 +1228,7 @@ Z280_INITZ:
;
#IF (MEMMGR == MM_Z280)
LD A,BID_BIOS
LD B,$10 ; FIRST SYSTEM PDR
CALL Z280_BNKSEL
#ELSE
LD A,BID_BIOS ; BIOS BANK ID
@ -2005,11 +2011,7 @@ INITSYS4:
HB_DI ; NOT SURE THIS IS NEEDED
; FIXUP BNKSEL TO WORK ON USER MODE PDRS
XOR A
LD (Z280_BNKSEL2+1),A
; MAKE USER MODE BANK CORRECT
; ACTIVATE THE CORRECT USER MODE BANK
LD A,(HB_CURBNK) ; GET CURRENT BANK
CALL HBX_BNKSEL
@ -2900,6 +2902,7 @@ SYS_SETBNK:
PUSH AF ; SAVE IT
LD A,C ; NEW BANK TO A
LD (HB_INVBNK),A ; UPDATE INVBNK
LD B,$00 ; FIRST USER PDR
CALL Z280_BNKSEL ; DO IT
POP AF ; RECOVER PREV BANK
LD C,A ; PREVIOUS BANK TO C
@ -4070,11 +4073,10 @@ Z280_IVT:
;
#IF (MEMMGR == MM_Z280) & FALSE
;
; REG A HAS BANK ID
; REG A HAS BANK ID, REG B HAS INITIAL PDR TO PROGRAM
; REGISTERS AF, BC, HL DESTROYED
;
Z280_BNKSEL:
PUSH BC
PUSH HL
;
; SELECT I/O PAGE FOR MMU
LD L,$FF ; MMU AT I/O PAGE $FF
@ -4094,13 +4096,8 @@ Z280_BNKSEL1:
LD L,A
;
Z280_BNKSEL2:
; POINT TO FIRST PDR TO PROGRAM ($00=USER, $10=SYSTEM)
; THIS CODE USES $10 (FIRST SYSTEM PDR) INITIALLY FOR
; SYSTEM STARTUP. ONCE WE HAVE TRANSITIONED TO THE
; RAM PAGE CODE OF HBIOS, THE LINE BELOW IS MODIFIED
; IN MEMORY TO POINT TO THE FIRST USER PDR. THIS IS
; DONE NEAR INITSYS4.
LD A,$10 ; FIRST SYSTEM PDR
; POINT TO FIRST PDR TO PROGRAM
LD A,B ; FIRST PDR TO PROG
OUT (Z280_MMUPDRPTR),A ; SET THE PDR POINTER
;
; PROGRAM 8 PDRS
@ -4113,8 +4110,6 @@ Z280_BNKSEL2:
LD C,Z280_IOPR ; I/O PAGE REGISTER TO C
.DB $ED,$6E ; LDCTL (C),HL
;
POP HL
POP BC
RET
;
#IF (($ & $FF) != 0)
@ -4422,17 +4417,15 @@ Z280_PDRTBL:
;
; Z280 BANK SELECTION (CALLED FROM PROXY)
;
; THIS VERSION IS SLOWER, BUT ABOIDS THE USE OF THE 512
; THIS VERSION IS SLOWER, BUT AVOIDS THE USE OF THE 512+
; BYTE TABLE.
;
#IF (MEMMGR == MM_Z280)
;
; REG A HAS BANK ID
; REG A HAS BANK ID, REG B HAS INITIAL PDR TO PROGRAM
; REGISTERS AF, BC, HL DESTROYED
;
Z280_BNKSEL:
PUSH BC
PUSH HL
;
; SELECT I/O PAGE FOR MMU
LD L,$FF ; MMU AT I/O PAGE $FF
LD C,Z280_IOPR ; I/O PAGE REGISTER TO C
@ -4445,44 +4438,52 @@ Z280_BNKSEL:
;
; IF R BIT (RAM/ROM) IS SET, WE WANT TO CONVERT
; FROM R000 BBBB -> 000R BBBB
BIT 7,A ; CHECK BIT
JR Z,Z280_BNKSEL1 ; NOT SET, SKIP AHEAD
XOR %10010000 ; FIX IT
RLCA ; A=R 000B BBBR
JP NC,Z280_BNKSEL1
XOR %00100001 ; A=00RB BBB0
;
Z280_BNKSEL1:
;MULTU A,$80 ; HL=0000 RBBB B000 0000
.DB $FD,$ED,$F9,$80 ; MULTU A,$80
;MULTU A,$40 ; HL=0000 RBBB B000 0000
.DB $FD,$ED,$F9,$40 ; MULTU A,$40
;
LD A,$0A ; VALUE FOR LOW NIBBLE
OR L ; COMBINE WITH L
LD L,A ; PUT IT BACK
.DB $ED,$6D ; ADD HL,A ; HL=0000 RBBB B000 1010
;
Z280_BNKSEL2:
; POINT TO FIRST PDR TO PROGRAM ($00=USER, $10=SYSTEM)
; THIS CODE USES $10 (FIRST SYSTEM PDR) INITIALLY FOR
; SYSTEM STARTUP. ONCE WE HAVE TRANSITIONED TO THE
; RAM PAGE CODE OF HBIOS, THE LINE BELOW IS MODIFIED
; IN MEMORY TO POINT TO THE FIRST USER PDR. THIS IS
; DONE NEAR INITSYS4.
LD A,$10 ; FIRST SYSTEM PDR
; POINT TO FIRST PDR TO PROGRAM
LD A,B ; INITIAL PDR TO PROG
OUT (Z280_MMUPDRPTR),A ; SET THE PDR POINTER
;
; PROGRAM 8 PDRS
LD C,Z280_MMUBLKMOV ; PDR BLOCK MOVE PORT
LD B,8 ; PROGRAM 8 PDRS
;LD B,8 ; PROGRAM 8 PDRS
LD A,$10 ; PDR VALUE INCREMENT
Z280_BNKSEL3:
; PROGRAM 8 PDR VALUES
; LOOP UNROLLED FOR SPEED
.DB $ED,$BF ; OUTW (C),HL
.DB $ED,$6D ; ADD HL, A ; BUMP VALUE
DJNZ Z280_BNKSEL3 ; DO ALL PDRS
.DB $ED,$BF ; OUTW (C),HL
.DB $ED,$6D ; ADD HL, A ; BUMP VALUE
.DB $ED,$BF ; OUTW (C),HL
.DB $ED,$6D ; ADD HL, A ; BUMP VALUE
.DB $ED,$BF ; OUTW (C),HL
.DB $ED,$6D ; ADD HL, A ; BUMP VALUE
.DB $ED,$BF ; OUTW (C),HL
.DB $ED,$6D ; ADD HL, A ; BUMP VALUE
.DB $ED,$BF ; OUTW (C),HL
.DB $ED,$6D ; ADD HL, A ; BUMP VALUE
.DB $ED,$BF ; OUTW (C),HL
.DB $ED,$6D ; ADD HL, A ; BUMP VALUE
.DB $ED,$BF ; OUTW (C),HL
.DB $ED,$6D ; ADD HL, A ; BUMP VALUE
;DJNZ Z280_BNKSEL3 ; DO ALL PDRS
;
; RESTORE I/O PAGE TO $00
LD L,$00 ; NORMAL I/O PAGE $00
LD C,Z280_IOPR ; I/O PAGE REGISTER TO C
.DB $ED,$6E ; LDCTL (C),HL
;
POP HL
POP BC
;
RET
#ENDIF
;

2
Source/ver.inc

@ -2,4 +2,4 @@
#DEFINE RMN 1
#DEFINE RUP 1
#DEFINE RTP 0
#DEFINE BIOSVER "3.1.1-pre.41"
#DEFINE BIOSVER "3.1.1-pre.42"

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 1
rup equ 1
rtp equ 0
biosver macro
db "3.1.1-pre.41"
db "3.1.1-pre.42"
endm

Loading…
Cancel
Save