diff --git a/Source/Apps/assign.asm b/Source/Apps/assign.asm index 258573e8..757859f4 100644 --- a/Source/Apps/assign.asm +++ b/Source/Apps/assign.asm @@ -244,7 +244,7 @@ initcpm3: ; The CP/M 3 drvtbl is in common memory, but the XDPHs are not. ; So, here we temporarily swap the bank to the CP/M 3 system ; bank. We cannot use the CP/M Direct BIOS call because it -; explicitly blocks use of SELMEM, so we are foreced to use +; explicitly blocks use of SELMEM, so we are forced to use ; HBIOS call. The CP/M 3 system bank is always the HBIOS ; user bank. ; diff --git a/Source/HBIOS/ay38910.asm b/Source/HBIOS/ay38910.asm index 2dde8d29..1d596dbd 100644 --- a/Source/HBIOS/ay38910.asm +++ b/Source/HBIOS/ay38910.asm @@ -534,7 +534,7 @@ AY_EI: AY_WRTPSG: CALL AY_DI #IFDEF SBCV2004 - LD A,(RTCVAL) ; GET CURRENT RTC LATCH VALUE + LD A,(HB_RTCVAL) ; GET CURRENT RTC LATCH VALUE OR %00001000 ; SBC-V2-004 CHANGE OUT (RTCIO),A ; TO HALF CLOCK SPEED #ENDIF @@ -553,7 +553,7 @@ AY_WRTPSG: OUT0 (Z180_DCNTL),A ; AND RESTORE IT #ENDIF #IFDEF SBCV2004 - LD A,(RTCVAL) ; SBC-V2-004 CHANGE TO + LD A,(HB_RTCVAL) ; SBC-V2-004 CHANGE TO OUT (RTCIO),A ; NORMAL CLOCK SPEED #ENDIF JP AY_EI @@ -565,7 +565,7 @@ AY_WRTPSG: AY_RDPSG: CALL AY_DI #IFDEF SBCV2004 - LD A,(RTCVAL) ; GET CURRENT RTC LATCH VALUE + LD A,(HB_RTCVAL) ; GET CURRENT RTC LATCH VALUE OR %00001000 ; SBC-V2-004 CHANGE OUT (RTCIO),A ; TO HALF CLOCK SPEED #ENDIF @@ -584,7 +584,7 @@ AY_RDPSG: OUT0 (Z180_DCNTL),A ; AND RESTORE IT #ENDIF #IFDEF SBCV2004 - LD A,(RTCVAL) ; SBC-V2-004 CHANGE TO + LD A,(HB_RTCVAL) ; SBC-V2-004 CHANGE TO OUT (RTCIO),A ; NORMAL CLOCK SPEED #ENDIF JP AY_EI diff --git a/Source/HBIOS/dbgmon.asm b/Source/HBIOS/dbgmon.asm index 7467519f..fde7110b 100644 --- a/Source/HBIOS/dbgmon.asm +++ b/Source/HBIOS/dbgmon.asm @@ -38,6 +38,8 @@ ENA_XM .EQU FALSE ; NO ROOM FOR BOTH DSKY+XMODEM ENA_XM .EQU TRUE ; INCLUDE XMODEM IF SPACE AVAILABLE #ENDIF ; +ENA_MBC6502 .EQU FALSE ; ENABLE OR DISABLE MBC6502 OPTION +; #INCLUDE "util.asm" ; ;__UART_ENTRY_________________________________________________________________ @@ -69,6 +71,8 @@ UART_ENTRY: ; R XXXX - RUN A PROGRAM AT ADDRESS XXXX ; S XX - SET ACTIVE BANK TO XX ; T XXXX - X-MODEM TRANSFER TO MEMORY LOCATION XXXX +; U - SET BANK TO PREVIOUS BANK +; 6 XX - TRANSFER CONTROL TO MBC6502 UNIT XX ; X - EXIT MONITOR ; ;__COMMAND_PARSE______________________________________________________________ @@ -126,6 +130,12 @@ SERIALCMDLOOP: #IF (BIOS == BIOS_WBW) CP 'S' ; IS IT A "S" (Y/N) JP Z,SETBNK ; SET BANK COMMAND + CP 'U' ; IS IT A "U" (Y/N) + JP Z,UNSETBNK ; UNSET (REVERT) BANK COMMAND +#ENDIF +#IF ((PLATFORM = PLT_MBC) & ENA_MBC6502) + CP '6' ; IS IT A "6" (Y/N) + JP Z,MBC6502 ; TRANSFER TO MBC6502 COMMAND #ENDIF CP 'X' ; IS IT A "X" (Y/N) JP Z,EXIT ; EXIT COMMAND @@ -218,6 +228,8 @@ SETBNK: LD HL,TXT_IMERR CALL PRTSTR #ELSE + LD A,($FFE0) ; GET AND SAVE + LD (BNKSAV),A ; CURRENT BANK CALL BYTEPARM ; GET BANK NUMBER JP C,ERR ; HANDLE DATA ENTRY ERROR LD C,A ; PUT IN C FOR FOR FUNC CALL @@ -226,6 +238,25 @@ SETBNK: #ENDIF JP SERIALCMDLOOP ; NEXT COMMAND ; +;__UNSETBNK___________________________________________________________________ +; +; PERFORM UNSET BANK ACTION - REVERT TO BANK BEFORE PREVIOUS SET +;_____________________________________________________________________________ +; +UNSETBNK: +#IF (INTMODE == 1) + LD HL,TXT_IMERR + CALL PRTSTR +#ELSE + LD A,(BNKSAV) + LD C,A ; PUT IN C FOR FOR FUNC CALL + LD B,BF_SYSSETBNK ; SET BANK FUNCTION + CALL $FFF0 ; C HAS BANK, DO IT +#ENDIF + JP SERIALCMDLOOP ; NEXT COMMAND +; +BNKSAV .DB 00H ; OLD BANK FROM BEFORE SET +; #ENDIF ; ;__RUN________________________________________________________________________ @@ -358,7 +389,8 @@ XMLOAD: CALL WORDPARM ; GET STARTING LOCATION CALL NEWLINE ; LD BC,$F8F0 ; GET CPU SPEED - RST 08 ; AND MULTIPLY + CALL $FFF0 ; CALL HBIOS +; RST 08 ; AND MULTIPLY LD A,L ; BY 4 PUSH AF ADD A,A ; TO CREATE @@ -769,6 +801,28 @@ HELP: CALL PRTSTR ; DISPLAY IT JP SERIALCMDLOOP ; AND BACK TO COMMAND LOOP ; +;__MBC6502____________________________________________________________________ +; +; TRANSFER CONTROL TO MBC6502 +;_____________________________________________________________________________ +; +; +#IF ((PLATFORM = PLT_MBC) & ENA_MBC6502) +MBC6502: + CALL BYTEPARM ; GET BYTE VALUE (FILL VALUE) INTO A + CPL ; UNIT 0 = FFH, 1 = FEH ETC + LD C,A +; + IN A,(C) ; EXECUTE + NOP ; TRANSFER +; + LD A,($FFE0) ; GET PREVIOUS BANK + OUT (MPCL_RAM),A ; SET RAM PAGE SELECTOR + OUT (MPCL_ROM),A ; SET ROM PAGE SELECTOR +; + JP SERIALCMDLOOP ; AND BACK TO COMMAND LOOP +#ENDIF +; ;__ERR________________________________________________________________________ ; ; SYNTAX ERROR @@ -1205,9 +1259,15 @@ TXT_HELP .TEXT "\r\nMonitor Commands (all values in hex):" .TEXT "\r\nP xxxx - Program RAM at address xxxx" .TEXT "\r\nR xxxx [[yy] [zzzz]] - Run code at address xxxx" .TEXT "\r\n Pass yy and zzzz to register A and BC" +#IF (BIOS == BIOS_WBW) .TEXT "\r\nS xx - Set bank to xx" + .TEXT "\r\nU - Set bank to previous bank" +#ENDIF #IF (ENA_XM) .TEXT "\r\nT xxxx - X-modem transfer to memory location xxxx" +#ENDIF +#IF ((PLATFORM == PLT_MBC) & ENA_MBC6502) + .TEXT "\r\n6 xx - Transfer control to MBC6502 unit xx" #ENDIF .TEXT "\r\nX - Exit monitor" .TEXT "$" diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index c9757d51..c3dc3a0c 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -2299,6 +2299,18 @@ NXTMIO: LD A,(HL) CALL PRTSTRD .TEXT "HBIOS MUTEX ENABLED$" #ENDIF +; +; DISPLAY RECOVERY MODE MESSAGE +; +#IF (BT_REC_TYPE != BT_REC_NONE) + LD A,(HB_BOOT_REC) ; IF WE ARE IN RECOVERY MODE + OR A ; DISPLAY RECOVERY MODE MESSAGE + JR Z,NOT_REC_M2 + CALL NEWLINE + CALL PRTSTRD + .TEXT "RECOVERY MODE$" +#ENDIF +NOT_REC_M2: ; DIAG(%11111111) ; @@ -3698,7 +3710,7 @@ SND_ADDENT: ; WORD UNIT SPECIFIC DATA (TYPICALLY A DEVICE INSTANCE DATA ADDRESS) ; SND_FNCNT .EQU 8 ; NUMBER OF SND FUNCS (FOR RANGE CHECK) -SND_MAX .EQU 3 ; UP TO 2 UNITS +SND_MAX .EQU 4 ; UP TO 3 UNITS SND_SIZ .EQU SND_MAX * 4 ; EACH ENTRY IS 4 BYTES ; .DB SND_FNCNT ; SND FUNCTION COUNT (FOR RANGE CHECK) @@ -5233,7 +5245,7 @@ HB_ADDENT: ; ALL OTHER REGISTERS PRESERVED ; ; A 4 BYTE HEADER IS PLACED IN FRONT OF THE ALLOCATED MEMORY -; - DWORD: SIZE OF MEMROY ALLOCATED (DOES NOT INCLUDE 4 BYTE HEADER) +; - DWORD: SIZE OF MEMORY ALLOCATED (DOES NOT INCLUDE 4 BYTE HEADER) ; - DWORD: ADDRESS WHERE ALLOC WAS CALLED (VALUE ON TOP OF STACK AT CALL) ; HB_ALLOC: diff --git a/Source/HBIOS/sn76489.asm b/Source/HBIOS/sn76489.asm index e7aa315b..60cb1ca8 100644 --- a/Source/HBIOS/sn76489.asm +++ b/Source/HBIOS/sn76489.asm @@ -43,6 +43,9 @@ SN7RATIO .EQU SN7CLK * 100 / 32 SN76489_INIT: LD IY, SN7_IDAT ; POINTER TO INSTANCE DATA + LD BC, SN7_FNTBL ; BC := FUNCTION TABLE ADDRESS + LD DE, SN7_IDAT ; DE := SN7 INSTANCE DATA PTR + CALL SND_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED LD DE,STR_MESSAGELT CALL WRITESTR @@ -53,11 +56,6 @@ SN76489_INIT: CALL WRITESTR LD A, SN76489_PORT_RIGHT CALL PRTHEXBYTE -; -SN7_INIT1: - LD BC, SN7_FNTBL ; BC := FUNCTION TABLE ADDRESS - LD DE, SN7_IDAT ; DE := SN7 INSTANCE DATA PTR - CALL SND_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED CALL SN7_VOLUME_OFF XOR A ; SIGNAL SUCCESS @@ -67,7 +65,6 @@ SN7_INIT1: ; SN76489 DRIVER - SOUND ADAPTER (SND) FUNCTIONS ;====================================================================== ; - SN7_RESET: AUDTRACE(SNT_INIT) CALL SN7_VOLUME_OFF