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) TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
; ;
SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) 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 PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER
; ;
SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) 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 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) SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE

85
Source/HBIOS/hbios.asm

@ -463,9 +463,14 @@ HBX_BNKSEL1:
#ENDIF #ENDIF
; ;
#IF (MEMMGR == MM_Z280) #IF (MEMMGR == MM_Z280)
PUSH BC ; SAVE BC
PUSH HL ; SAVE HL
LD B,$00 ; FIRST USER PDR
.DB $ED,$71 ; SC .DB $ED,$71 ; SC
.DW Z280_BNKSEL ; SC PARAMETER .DW Z280_BNKSEL ; SC PARAMETER
RET
POP HL ; RESTORE HL
POP BC ; RESTORE BC
RET ; DONE
#ENDIF #ENDIF
; ;
#IF (MEMMGR == MM_ZRC) #IF (MEMMGR == MM_ZRC)
@ -1223,6 +1228,7 @@ Z280_INITZ:
; ;
#IF (MEMMGR == MM_Z280) #IF (MEMMGR == MM_Z280)
LD A,BID_BIOS LD A,BID_BIOS
LD B,$10 ; FIRST SYSTEM PDR
CALL Z280_BNKSEL CALL Z280_BNKSEL
#ELSE #ELSE
LD A,BID_BIOS ; BIOS BANK ID LD A,BID_BIOS ; BIOS BANK ID
@ -2005,11 +2011,7 @@ INITSYS4:
HB_DI ; NOT SURE THIS IS NEEDED 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 LD A,(HB_CURBNK) ; GET CURRENT BANK
CALL HBX_BNKSEL CALL HBX_BNKSEL
@ -2900,6 +2902,7 @@ SYS_SETBNK:
PUSH AF ; SAVE IT PUSH AF ; SAVE IT
LD A,C ; NEW BANK TO A LD A,C ; NEW BANK TO A
LD (HB_INVBNK),A ; UPDATE INVBNK LD (HB_INVBNK),A ; UPDATE INVBNK
LD B,$00 ; FIRST USER PDR
CALL Z280_BNKSEL ; DO IT CALL Z280_BNKSEL ; DO IT
POP AF ; RECOVER PREV BANK POP AF ; RECOVER PREV BANK
LD C,A ; PREVIOUS BANK TO C LD C,A ; PREVIOUS BANK TO C
@ -4070,11 +4073,10 @@ Z280_IVT:
; ;
#IF (MEMMGR == MM_Z280) & FALSE #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: Z280_BNKSEL:
PUSH BC
PUSH HL
; ;
; SELECT I/O PAGE FOR MMU ; SELECT I/O PAGE FOR MMU
LD L,$FF ; MMU AT I/O PAGE $FF LD L,$FF ; MMU AT I/O PAGE $FF
@ -4094,13 +4096,8 @@ Z280_BNKSEL1:
LD L,A LD L,A
; ;
Z280_BNKSEL2: 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 OUT (Z280_MMUPDRPTR),A ; SET THE PDR POINTER
; ;
; PROGRAM 8 PDRS ; PROGRAM 8 PDRS
@ -4113,8 +4110,6 @@ Z280_BNKSEL2:
LD C,Z280_IOPR ; I/O PAGE REGISTER TO C LD C,Z280_IOPR ; I/O PAGE REGISTER TO C
.DB $ED,$6E ; LDCTL (C),HL .DB $ED,$6E ; LDCTL (C),HL
; ;
POP HL
POP BC
RET RET
; ;
#IF (($ & $FF) != 0) #IF (($ & $FF) != 0)
@ -4422,17 +4417,15 @@ Z280_PDRTBL:
; ;
; Z280 BANK SELECTION (CALLED FROM PROXY) ; 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. ; BYTE TABLE.
; ;
#IF (MEMMGR == MM_Z280) #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: Z280_BNKSEL:
PUSH BC
PUSH HL
;
; SELECT I/O PAGE FOR MMU ; SELECT I/O PAGE FOR MMU
LD L,$FF ; MMU AT I/O PAGE $FF LD L,$FF ; MMU AT I/O PAGE $FF
LD C,Z280_IOPR ; I/O PAGE REGISTER TO C 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 ; IF R BIT (RAM/ROM) IS SET, WE WANT TO CONVERT
; FROM R000 BBBB -> 000R BBBB ; 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: 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 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: 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 OUT (Z280_MMUPDRPTR),A ; SET THE PDR POINTER
; ;
; PROGRAM 8 PDRS ; PROGRAM 8 PDRS
LD C,Z280_MMUBLKMOV ; PDR BLOCK MOVE PORT 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 LD A,$10 ; PDR VALUE INCREMENT
Z280_BNKSEL3: Z280_BNKSEL3:
; PROGRAM 8 PDR VALUES
; LOOP UNROLLED FOR SPEED
.DB $ED,$BF ; OUTW (C),HL .DB $ED,$BF ; OUTW (C),HL
.DB $ED,$6D ; ADD HL, A ; BUMP VALUE .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 ; RESTORE I/O PAGE TO $00
LD L,$00 ; NORMAL I/O PAGE $00 LD L,$00 ; NORMAL I/O PAGE $00
LD C,Z280_IOPR ; I/O PAGE REGISTER TO C LD C,Z280_IOPR ; I/O PAGE REGISTER TO C
.DB $ED,$6E ; LDCTL (C),HL .DB $ED,$6E ; LDCTL (C),HL
;
POP HL
POP BC
;
RET RET
#ENDIF #ENDIF
; ;

2
Source/ver.inc

@ -2,4 +2,4 @@
#DEFINE RMN 1 #DEFINE RMN 1
#DEFINE RUP 1 #DEFINE RUP 1
#DEFINE RTP 0 #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 rup equ 1
rtp equ 0 rtp equ 0
biosver macro biosver macro
db "3.1.1-pre.41"
db "3.1.1-pre.42"
endm endm

Loading…
Cancel
Save