diff --git a/Source/HBIOS/Config/RCZ280_ext.asm b/Source/HBIOS/Config/RCZ280_ext.asm index 5787b247..f38142f3 100644 --- a/Source/HBIOS/Config/RCZ280_ext.asm +++ b/Source/HBIOS/Config/RCZ280_ext.asm @@ -22,7 +22,6 @@ ; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO ; DIRECTORIES ABOVE THIS ONE). ; -#DEFINE PLATFORM_NAME "RC2014 (EXT MMU)" #DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; #include "cfg_rcz280.asm" diff --git a/Source/HBIOS/Config/RCZ280_nat.asm b/Source/HBIOS/Config/RCZ280_nat.asm index 518058c5..9eec800d 100644 --- a/Source/HBIOS/Config/RCZ280_nat.asm +++ b/Source/HBIOS/Config/RCZ280_nat.asm @@ -22,7 +22,6 @@ ; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO ; DIRECTORIES ABOVE THIS ONE). ; -#DEFINE PLATFORM_NAME "RC2014 (NATIVE MMU)" #DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; #include "cfg_rcz280.asm" diff --git a/Source/HBIOS/acia.asm b/Source/HBIOS/acia.asm index 54832171..0746c9cd 100644 --- a/Source/HBIOS/acia.asm +++ b/Source/HBIOS/acia.asm @@ -660,7 +660,7 @@ ACIA0_RCVBUF: ACIA0_BUFCNT .DB 0 ; CHARACTERS IN RING BUFFER ACIA0_HD .DW ACIA0_BUF ; BUFFER HEAD POINTER ACIA0_TL .DW ACIA0_BUF ; BUFFER TAIL POINTER -ACIA0_BUF .FILL 32,0 ; RECEIVE RING BUFFER +ACIA0_BUF .FILL ACIA_BUFSZ,0 ; RECEIVE RING BUFFER ACIA0_BUFEND .EQU $ ; END OF BUFFER ACIA0_BUFSZ .EQU $ - ACIA0_BUF ; SIZE OF RING BUFFER ; @@ -670,7 +670,7 @@ ACIA1_RCVBUF: ACIA1_BUFCNT .DB 0 ; CHARACTERS IN RING BUFFER ACIA1_HD .DW ACIA1_BUF ; BUFFER HEAD POINTER ACIA1_TL .DW ACIA1_BUF ; BUFFER TAIL POINTER -ACIA1_BUF .FILL 32,0 ; RECEIVE RING BUFFER +ACIA1_BUF .FILL ACIA_BUFSZ,0 ; RECEIVE RING BUFFER ACIA1_BUFEND .EQU $ ; END OF BUFFER ACIA1_BUFSZ .EQU $ - ACIA1_BUF ; SIZE OF RING BUFFER ; diff --git a/Source/HBIOS/asci.asm b/Source/HBIOS/asci.asm index 57ee1e16..dc05caba 100644 --- a/Source/HBIOS/asci.asm +++ b/Source/HBIOS/asci.asm @@ -778,7 +778,7 @@ ASCI0_RCVBUF: ASCI0_BUFCNT .DB 0 ; CHARACTERS IN RING BUFFER ASCI0_HD .DW ASCI0_BUF ; BUFFER HEAD POINTER ASCI0_TL .DW ASCI0_BUF ; BUFFER TAIL POINTER -ASCI0_BUF .FILL 32,0 ; RECEIVE RING BUFFER +ASCI0_BUF .FILL ASCI_BUFSZ,0 ; RECEIVE RING BUFFER ASCI0_BUFEND .EQU $ ; END OF BUFFER ASCI0_BUFSZ .EQU $ - ASCI0_BUF ; SIZE OF RING BUFFER ; @@ -786,7 +786,7 @@ ASCI1_RCVBUF: ASCI1_BUFCNT .DB 0 ; CHARACTERS IN RING BUFFER ASCI1_HD .DW ASCI1_BUF ; BUFFER HEAD POINTER ASCI1_TL .DW ASCI1_BUF ; BUFFER TAIL POINTER -ASCI1_BUF .FILL 32,0 ; RECEIVE RING BUFFER +ASCI1_BUF .FILL ASCI_BUFSZ,0 ; RECEIVE RING BUFFER ASCI1_BUFEND .EQU $ ; END OF BUFFER ASCI1_BUFSZ .EQU $ - ASCI1_BUF ; SIZE OF RING BUFFER ; diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index d10cddfe..b9851839 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -1862,7 +1862,31 @@ HB_Z280BUS1: LD A,INTMODE CALL PRTDECB #ENDIF - +; + CALL PRTSTRD + .TEXT ", MMU=$" + CALL PRTSTRD +#IF (MEMMGR == MM_NONE) + .TEXT "NONE$" +#ENDIF +#IF (MEMMGR == MM_SBC) + .TEXT "SBC$" +#ENDIF +#IF (MEMMGR == MM_Z2) + .TEXT "Z2$" +#ENDIF +#IF (MEMMGR == MM_N8) + .TEXT "N8$" +#ENDIF +#IF (MEMMGR == MM_Z180) + .TEXT "Z180$" +#ENDIF +#IF (MEMMGR == MM_Z280) + .TEXT "Z280$" +#ENDIF +#IF (MEMMGR == MM_ZRC) + .TEXT "ZRC$" +#ENDIF ; ; DISPLAY MEMORY CONFIG ; @@ -1979,29 +2003,10 @@ INITSYS4: HB_DI ; NOT SURE THIS IS NEEDED - ;; FIXUP BNKSEL TO WORK ON USER MODE PDRS - ;XOR A - ;LD (W_MMU0+1),A - ;LD (W_MMU1+1),A - ; FIXUP BNKSEL TO WORK ON USER MODE PDRS XOR A LD (Z280_BNKSEL2+1),A - ;CALL NEWLINE - ;LD DE,$1050 - ;LD A,4 - ;CALL PRTHEXBUF - - ;; FIXUP SYSCALL TO KEEP INTERRUPTS ENABLED - ;LD HL,$007F - ;LD (Z280_IVT + $50),HL - - ;CALL NEWLINE - ;LD DE,$1050 - ;LD A,4 - ;CALL PRTHEXBUF - ; MAKE USER MODE BANK CORRECT LD A,(HB_CURBNK) ; GET CURRENT BANK CALL HBX_BNKSEL @@ -3972,6 +3977,10 @@ HB_TMPREF .DW 0 ;================================================================================================== ; #IF (MEMMGR == MM_Z280) +; + ; THE Z280 IVT MUST BE ON A 4K BOUNDARY. IT HAS BEEN LOCATED + ; HERE IN AN EFFORT TO MINIMIZE WASTED SPACE. THERE SHOULD BE + ; A LITTLE LESS THAN 4K OF CODE ABOVE. ; .FILL $1000 - ($ & $FFF) ; MUST BE 4K ALIGNED! ; @@ -4028,7 +4037,7 @@ Z280_IVT: .DW $0000 ; EPU INTERNAL OPERATION EXTENDED INSTRUCTION TRAP VECTOR .DW 0, 0 ; RESERVED .DW 0, 0 ; RESERVED - ; PROGRAM COUNTER VALUES FOR NMI/INTA + ; PROGRAM COUNTER VALUES FOR NMI/INTA (16) .DW HBX_IV00 .DW HBX_IV01 .DW HBX_IV02 @@ -4045,17 +4054,19 @@ Z280_IVT: .DW HBX_IV0D .DW HBX_IV0E .DW HBX_IV0F - .FILL (128 - 16) * 2, 0 - ; PROGRAM COUNTER VALUES FOR INTB - .FILL 128 * 2, 0 - ; PROGRAM COUNTER VALUES FOR INTC - .FILL 128 * 2, 0 + ; THE REMAINDER OF THE Z280 IVT IS TRUNCATED HERE BECAUSE IT + ; TAKES A BUNCH OF SPACE AND IS NOT USED. WE SUPPORT ONLY + ; 16 VECTORED INTERRUPTS AND THEY MUST BE CONNECTED TO INTA. ; #ENDIF ; ; Z280 BANK SELECTION (CALLED FROM PROXY) ; -#IF (MEMMGR == MM_Z280) +; THIS VERSION USES A MASSIVE (512 BYTE) TABLE TO OPTIMIZE THE +; SPEED OF THE BANK SWITCH. BY USING THE TABLE, IT IS POSSIBLE +; EXECUTE THE CORE OF THE BANKSWITCH WITH A SINGLE OTIRW. +; +#IF (MEMMGR == MM_Z280) & FALSE ; ; REG A HAS BANK ID ; @@ -4068,7 +4079,7 @@ Z280_BNKSEL: LD C,Z280_IOPR ; I/O PAGE REGISTER TO C .DB $ED,$6E ; LDCTL (C),HL ; - ; POINT HL TO STARTING ENTRY TO PROGRAM + ; POINT HL TO STARTING ENTRY TO PROGRAM. ; OPTIMIZED TO ASSUME HL IS PAGE ALIGNED! LD H,Z280_PDRTBL >> 8 SLA A @@ -4082,6 +4093,11 @@ Z280_BNKSEL1: ; 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 OUT (Z280_MMUPDRPTR),A ; SET THE PDR POINTER ; @@ -4090,7 +4106,7 @@ Z280_BNKSEL2: LD B,8 ; PROGRAM 8 PDRS .DB $ED,$93 ; OTIRW ; - ; SELECT I/O PAGE FOR MMU + ; 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 @@ -4105,7 +4121,7 @@ Z280_BNKSEL2: #ENDIF ; #IF (($ % 2) == 1) - ; BYTE ALIGN THE TABLE + ; WORD ALIGN THE TABLE .DB 0 #ENDIF ; @@ -4402,84 +4418,70 @@ Z280_PDRTBL: ; #ENDIF ; -#IF (MEMMGR == MM_Z280) & FALSE +; Z280 BANK SELECTION (CALLED FROM PROXY) +; +; THIS VERSION IS SLOWER, BUT ABOIDS THE USE OF THE 512 +; BYTE TABLE. +; +#IF (MEMMGR == MM_Z280) +; +; REG A HAS BANK ID ; Z280_BNKSEL: - PUSH HL - PUSH DE PUSH BC - LD L,$FF ; MMU PAGE I/O REG IS $FF - LD C,Z280_IOPR ; REG C POINTS TO I/O PAGE REGISTER - .DB $ED,$6E ; OP CODE FOR LDCTL (C),HL - LD E,0 ; DE IS TEMPLATE - BIT 7,A - JR Z,MMU_ROM ; TO ROM ROUTINE IF BIT 7 IS ZERO - RES 7,A - RR A ; EXTRACT THE LSB - PUSH AF ; SAVE THE CONDITION FLAG - OR $08 ; RAM BASE IS $080000 - LD D,A ; REG D CONTAINS THE HIGH BYTE TEMPLATE - POP AF - JR C,W_MMU1 - JR W_MMU0 -MMU_ROM: - OR A ; CLEAR THE CARRY FLAG - RR A ; EXTRACT THE LSB - LD D,A ; REG D CONTAINS THE HIGH BYTE TEMPLATE - JR C,W_MMU1 -W_MMU0: - LD A,$10 ; SYSTEM PAGE - OUT (Z280_MMUPDRPTR),A - LD C,Z280_MMUBLKMOV ; ACCESS BLOCK MOVE PORT SO POINTER WILL AUTOINCREM - LD H,D ; GET TEMPLATE INTO HL - LD L,$0A ; LOWEST 4K OF MEMORY - .DB $ED,$BF ; OUTW (C),HL - LD L,$1A ; MODIFY THE TEMPLATE FOR NEXT 4K - .DB $ED,$BF ; OUTW (C),HL - LD L,$2A ; MODIFY THE TEMPLATE FOR NEXT 4K - .DB $ED,$BF ; OUTW (C),HL - LD L,$3A ; MODIFY THE TEMPLATE FOR NEXT 4K - .DB $ED,$BF ; OUTW (C),HL - LD L,$4A ; MODIFY THE TEMPLATE FOR NEXT 4K - .DB $ED,$BF ; OUTW (C),HL - LD L,$5A ; MODIFY THE TEMPLATE FOR NEXT 4K - .DB $ED,$BF ; OUTW (C),HL - LD L,$6A ; MODIFY THE TEMPLATE FOR NEXT 4K - .DB $ED,$BF ; OUTW (C),HL - LD L,$7A ; MODIFY THE TEMPLATE FOR NEXT 4K - .DB $ED,$BF ; OUTW (C),HL - JR W_MMU2 -W_MMU1: - LD A,$10 ; SYSTEM PAGE - OUT (Z280_MMUPDRPTR),A - LD C,Z280_MMUBLKMOV ; ACCESS BLOCK MOVE PORT SO POINTER WILL AUTOINCREM - LD H,D ; GET TEMPLATE INTO HL - LD L,$8A ; LOWEST 4K OF MEMORY + 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 + .DB $ED,$6E ; LDCTL (C),HL +; + ; CONVERT BANK ID TO TOP 12 BITS OF PHYSICAL ADDRESS + ; WITH $0A IN THE LOW ORDER NIBBLE: + ; BANK ID: R000 BBBB + ; PDR: 0000 RBBB B000 1010 +; + ; 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 +; +Z280_BNKSEL1: + ;MULTU A,$80 ; HL=0000 RBBB B000 0000 + .DB $FD,$ED,$F9,$80 ; MULTU A,$80 +; + LD A,$0A ; VALUE FOR LOW NIBBLE + OR L ; COMBINE WITH L + LD L,A ; PUT IT BACK +; +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 + 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 A,$10 ; PDR VALUE INCREMENT +Z280_BNKSEL3: .DB $ED,$BF ; OUTW (C),HL - LD L,$9A ; MODIFY THE TEMPLATE FOR NEXT 4K - .DB $ED,$BF ; OUTW (C),HL - LD L,$AA ; MODIFY THE TEMPLATE FOR NEXT 4K - .DB $ED,$BF ; OUTW (C),HL - LD L,$BA ; MODIFY THE TEMPLATE FOR NEXT 4K - .DB $ED,$BF ; OUTW (C),HL - LD L,$CA ; MODIFY THE TEMPLATE FOR NEXT 4K - .DB $ED,$BF ; OUTW (C),HL - LD L,$DA ; MODIFY THE TEMPLATE FOR NEXT 4K - .DB $ED,$BF ; OUTW (C),HL - LD L,$EA ; MODIFY THE TEMPLATE FOR NEXT 4K - .DB $ED,$BF ; OUTW (C),HL - LD L,$FA ; MODIFY THE TEMPLATE FOR NEXT 4K - .DB $ED,$BF ; OUTW (C),HL -W_MMU2: - ;.DB $ED,$65 ; PCACHE - LD L,$00 ; RESTORE I/O PAGE REG TO 0 - LD C,Z280_IOPR + .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 BC - POP DE +; POP HL + POP BC RET -; #ENDIF ; ; Z280 BANK COPY (CALLED FROM PROXY) @@ -4488,13 +4490,13 @@ W_MMU2: ; Z280_BNKCPY: ; Z280 MEMORY TO MEMORY DMA - ; USE FLOW THROUGH MODE DMA + ; USE FLOW THROUGH MODE ; SINGLE BYTE TRANSFER ; TRANSACTION DESCRIPTION REGISTER (TDR) ; %0000 0000 0000 0000 ; - AUTO INCREMENT MEMORY ; - FLOWTHROUGH OPERATION - ; - SINGLE TRANSACTION + ; - SINGLE TRANSACTION (CAN WE USE CONTINUOUS???) ; - 1 BYTE XFER SIZE PUSH HL diff --git a/Source/HBIOS/z2u.asm b/Source/HBIOS/z2u.asm index 6d8199b1..46eeb5ff 100644 --- a/Source/HBIOS/z2u.asm +++ b/Source/HBIOS/z2u.asm @@ -56,7 +56,7 @@ ; UNLESS FULL BLOWN INTERRUPT MODE 3 W/ NATIVE MEMORY MANAGEMENT ; IS BEING USED. ; -Z2U_BUFSZ .EQU 32 ; RECEIVE RING BUFFER SIZE +Z2U_BUFSZ .EQU 128 ; RECEIVE RING BUFFER SIZE ; Z2U_NONE .EQU 0 ; NOT PRESENT Z2U_PRESENT .EQU 1 ; PRESENT @@ -566,7 +566,7 @@ Z2U0_RCVBUF: Z2U0_BUFCNT .DB 0 ; CHARACTERS IN RING BUFFER Z2U0_HD .DW Z2U0_BUF ; BUFFER HEAD POINTER Z2U0_TL .DW Z2U0_BUF ; BUFFER TAIL POINTER -Z2U0_BUF .FILL 32,0 ; RECEIVE RING BUFFER +Z2U0_BUF .FILL Z2U_BUFSZ,0 ; RECEIVE RING BUFFER Z2U0_BUFEND .EQU $ ; END OF BUFFER Z2U0_BUFSZ .EQU $ - Z2U0_BUF ; SIZE OF RING BUFFER ; diff --git a/Source/ver.inc b/Source/ver.inc index 289c3d7e..0a509e88 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 1 #DEFINE RUP 1 #DEFINE RTP 0 -#DEFINE BIOSVER "3.1.1-pre.39" +#DEFINE BIOSVER "3.1.1-pre.40" diff --git a/Source/ver.lib b/Source/ver.lib index 37751c05..4ceb188d 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 1 rup equ 1 rtp equ 0 biosver macro - db "3.1.1-pre.39" + db "3.1.1-pre.40" endm