Browse Source

Merge pull request #199 from vipoo/dean/yellow-msx-boards

Dean/yellow msx boards
pull/201/head
Wayne Warthen 5 years ago
committed by GitHub
parent
commit
415ccc313f
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 11
      Source/HBIOS/Config/RCZ80_std.asm
  2. 4
      Source/HBIOS/cfg_dyno.asm
  3. 4
      Source/HBIOS/cfg_ezz80.asm
  4. 5
      Source/HBIOS/cfg_master.asm
  5. 5
      Source/HBIOS/cfg_mk4.asm
  6. 5
      Source/HBIOS/cfg_n8.asm
  7. 4
      Source/HBIOS/cfg_rcz180.asm
  8. 4
      Source/HBIOS/cfg_rcz280.asm
  9. 5
      Source/HBIOS/cfg_rcz80.asm
  10. 5
      Source/HBIOS/cfg_sbc.asm
  11. 4
      Source/HBIOS/cfg_scz180.asm
  12. 4
      Source/HBIOS/cfg_zeta.asm
  13. 4
      Source/HBIOS/cfg_zeta2.asm
  14. 73
      Source/HBIOS/hbios.asm
  15. 4
      Source/HBIOS/hbios.inc
  16. 1150
      Source/HBIOS/msxkeyb.asm
  17. 446
      Source/HBIOS/rp5rtc.asm
  18. 5
      Source/HBIOS/std.asm
  19. 95
      Source/HBIOS/tms.asm

11
Source/HBIOS/Config/RCZ80_std.asm

@ -45,3 +45,14 @@ IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
;
PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM)
TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918/V9958 VIDEO/KBD DRIVER (TMS.ASM)
TMSMODE .SET TMSMODE_RCV9958 ; TMS: DRIVER MODE: TMSMODE_[RC/RCV9958]
TMSTIMENABLE .SET FALSE ; MS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
VDAEMU .SET EMUTYP_TTY ; VDA EMULATION: EMUTYP_[TTY|ANSI]
RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
MSKENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)

4
Source/HBIOS/cfg_dyno.asm

@ -82,6 +82,8 @@ BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS
;
INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
;
RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;
@ -184,3 +186,5 @@ AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
MSKENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)

4
Source/HBIOS/cfg_ezz80.asm

@ -83,6 +83,8 @@ BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS
;
INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
;
RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;
@ -218,3 +220,5 @@ AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
MSKENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)

5
Source/HBIOS/cfg_master.asm

@ -104,6 +104,7 @@ PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE]
KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE]
MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE]
;
DSRTCENABLE .EQU FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC]
@ -114,6 +115,8 @@ BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS
;
INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
;
RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;
@ -286,3 +289,5 @@ AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_NONE ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
MSKENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)

5
Source/HBIOS/cfg_mk4.asm

@ -79,6 +79,7 @@ PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE]
KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE]
MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE]
;
DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC]
@ -89,6 +90,8 @@ BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS
;
INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
;
RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;
@ -218,3 +221,5 @@ AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_SCG ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
MSKENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)

5
Source/HBIOS/cfg_n8.asm

@ -82,6 +82,7 @@ PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE]
KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE]
MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE]
;
DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC]
@ -92,6 +93,8 @@ BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS
;
INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
;
RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;
@ -218,3 +221,5 @@ AY38910ENABLE .EQU TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_N8 ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
MSKENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)

4
Source/HBIOS/cfg_rcz180.asm

@ -85,6 +85,8 @@ BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS
;
INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
;
RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;
@ -231,3 +233,5 @@ AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
MSKENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)

4
Source/HBIOS/cfg_rcz280.asm

@ -90,6 +90,8 @@ BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS
;
INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
;
RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;
@ -247,3 +249,5 @@ AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU 7372800 / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
MSKENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)

5
Source/HBIOS/cfg_rcz80.asm

@ -74,6 +74,7 @@ BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI]
ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE]
;
DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC]
@ -84,6 +85,8 @@ BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS
;
INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
;
RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;
@ -236,3 +239,5 @@ AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
MSKENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)

5
Source/HBIOS/cfg_sbc.asm

@ -74,6 +74,7 @@ PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE]
KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE]
MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE]
;
DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC]
@ -84,6 +85,8 @@ BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS
;
INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
;
RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;
@ -219,3 +222,5 @@ AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_SCG ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
MSKENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)

4
Source/HBIOS/cfg_scz180.asm

@ -80,6 +80,8 @@ BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS
;
INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
;
RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;
@ -226,3 +228,5 @@ AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
MSKENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)

4
Source/HBIOS/cfg_zeta.asm

@ -72,6 +72,8 @@ BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS
;
INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
;
RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;
@ -161,3 +163,5 @@ AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_NONE ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
MSKENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)

4
Source/HBIOS/cfg_zeta2.asm

@ -83,6 +83,8 @@ BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS
;
INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
;
RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;
@ -172,3 +174,5 @@ AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_NONE ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
MSKENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)

73
Source/HBIOS/hbios.asm

@ -327,13 +327,13 @@ HBX_INVOKE:
;
LD A,(HB_CURBNK) ; GET CURRENT BANK
LD (HB_INVBNK),A ; SAVE INVOCATION BANK
;
;
LD A,BID_BIOS ; HBIOS BANK
LD (HB_CURBNK),A ; SET AS CURRENT BANK
;
.DB $ED,$71 ; SC
.DW HB_DISPATCH ; SC PARAMETER
;
;
PUSH AF
LD A,(HB_INVBNK)
LD (HB_CURBNK),A
@ -788,7 +788,7 @@ HBX_INT: ; COMMON INTERRUPT ROUTING CODE
; SYSTEM OR USER MODE WAS ACTIVE AT THE TIME OF THE INTERRUPT.
;
EX (SP),HL ; SAVE HL AND GET INT JP TABLE OFFSET
; SAVE STATE (HL SAVED PREVIOUSLY ON ORIGINAL STACK FRAME)
PUSH AF ; SAVE AF
PUSH BC ; SAVE BC
@ -814,7 +814,7 @@ HBX_INT: ; COMMON INTERRUPT ROUTING CODE
CALL HBX_RETI ; RETI FOR Z80 PERIPHERALS
RETIL
;
HBX_RETI:
HBX_RETI:
RETI
;
#ELSE
@ -859,7 +859,7 @@ HBX_INT_SP .EQU $ - 2
RETI ; AND RETURN
;
#ENDIF
#ENDIF
;
; SMALL TEMPORARY STACK FOR USE BY HBX_BNKCPY
@ -1095,13 +1095,13 @@ Z280_BOOTPDRTBL:
;
Z280_INITZ:
;
#ENDIF
#ENDIF
;
; RESTORE I/O PAGE TO $00
LD L,$00 ; NORMAL I/O REG IS $00
LD C,Z280_IOPR ; REG C POINTS TO I/O PAGE REGISTER
LDCTL (C),HL
;
;
#ENDIF
;
#IF (CPUFAM == CPU_Z180)
@ -1152,7 +1152,7 @@ Z280_INITZ:
;
; SET DEFAULT CSIO SPEED (INTERNAL CLOCK, SLOW AS POSSIBLE)
LD A,Z180_CNTR_DEF ; DIV 1280, 14KHZ @ 18MHZ CLK
OUT0 (Z180_CNTR),A
OUT0 (Z180_CNTR),A
#ENDIF
;
#ENDIF
@ -1738,7 +1738,7 @@ NOT_REC_M0:
;
XOR A ; FAILSAFE VALUE FOR BOOT CONSOLE DEVICE
LD (CB_CONDEV),A ; SAVE IT
;
;
LD A,(CIO_CNT) ; GET COUNT OF CHAR DEVICES
CP BOOTCON + 1 ; COUNT - (DEVICE + 1)
JR C,HB_CONRDY ; IF TOO HIGH, JUST USE FAILSAFE
@ -1881,7 +1881,7 @@ HB_Z280BUS1:
; DISPLAY CPU CONFIG
;
CALL NEWLINE
#IF (CPUFAM == CPU_Z280)
LD A,Z280_MEMLOWAIT
CALL PRTDECB
@ -2285,6 +2285,9 @@ HB_INITTBL:
.DW PCF8584_INIT
.DW DS7RTC_INIT
#ENDIF
#IF (RP5RTCENABLE)
.DW RP5RTC_INIT
#ENDIF
#IF (VDUENABLE)
.DW VDU_INIT
#ENDIF
@ -2963,7 +2966,7 @@ SYS_RESINT:
;
SYS_RESWARM:
CALL SYS_RESINT
;
;
#IF (MEMMGR == MM_Z280)
JP INITSYS4
#ELSE
@ -3909,13 +3912,13 @@ Z280_PRIVINST:
LD (HB_MSRSAV),HL ; SAVE IT
POP HL ; RECOVER HL, POP STACK
EX (SP),HL ; GET ADR, SAVE HL
;
;
PUSH AF
PUSH BC
PUSH DE
;
;
.DB $ED,$96 ; LDUP A,(HL)
;
;
; HANDLE DI
CP $F3 ; DI?
JR NZ,Z280_PRIVINST2
@ -4251,7 +4254,7 @@ Z280_BNKSEL:
PUSH HL ; SAVE IT
LD L,$FF ; NEW I/O PAGE
LDCTL (C),HL
;
;
; CONVERT BANK ID TO TOP 12 BITS OF PHYSICAL ADDRESS
; WITH $0A IN THE LOW ORDER NIBBLE:
; BANK ID: R000 BBBB
@ -4263,7 +4266,7 @@ Z280_BNKSEL:
JR Z,Z280_BNKSEL2 ; IF NOT, ALL DONE
RES 6,H ; OTHERWISE, MOVE RAM BIT
SET RAMLOC-16,H ; HL=0000 RBBB B000 0000
;
;
Z280_BNKSEL2:
;
; SET LOW NIBBLE
@ -4332,19 +4335,19 @@ Z280_BNKCPY:
;
PUSH BC ; SAVE COUNT
PUSH HL ; SAVE SOURCE ADDRESS
;
;
; SELECT I/O PAGE $FF
LD C,Z280_IOPR ; I/O PAGE REGISTER
LDCTL HL,(C) ; GET CURRENT I/O PAGE
LD (IOPRVAL),HL ; SAVE IT
LD L,$FF ; I/O PAGE $FF
LDCTL (C),HL
;
;
LD C,Z280_DMA0_DSTL ; START WITH DEST REG LO
;
LD A,(HB_DSTBNK) ; DEST BANK TO ACCUM
CALL Z2DMAADR ; SETUP DEST ADR REGS
;
;
POP DE ; SRC ADR TO DE
LD A,(HB_SRCBNK) ; DEST BANK TO ACCUM
CALL Z2DMAADR ; SETUP SOURCE ADR REGS
@ -4399,7 +4402,7 @@ Z2DMAADR1:
LD A,$0F ; A=0000 1111
OR L ; A=BAAA 1111
LD L,A ; L=BAAA 1111
;
;
; MOVE THE RAM/ROM BIT.
; RC2014 DMA HI=0000 RBBB BAAA 1111 LO=1111 AAAA AAAA AAAA
; ZZ80MB DMA HI=R000 0BBB BAAA 1111 LO=1111 AAAA AAAA AAAA
@ -4425,7 +4428,7 @@ Z2DMAADR2:
POP HL ; RECOVER THE HI VAL
OUTW (C),HL
INC C ; BUMP TO NEXT REG
;
;
RET
#ENDIF
;
@ -4499,6 +4502,14 @@ SIZ_INTRTC .EQU $ - ORG_INTRTC
.ECHO " bytes.\n"
#ENDIF
;
#IF (RP5RTCENABLE)
ORG_RP5RTC .EQU $
#INCLUDE "rp5rtc.asm"
SIZ_RP5RTC .EQU $ - ORG_RP5RTC
.ECHO "RP5RTC occupies "
.ECHO SIZ_RP5RTC
.ECHO " bytes.\n"
#ENDIF
#IF (ASCIENABLE)
ORG_ASCI .EQU $
#INCLUDE "asci.asm"
@ -4657,6 +4668,15 @@ SIZ_PPK .EQU $ - ORG_PPK
.ECHO " bytes.\n"
#ENDIF
;
#IF (MSKENABLE)
ORG_MSXKEYB .EQU $
#INCLUDE "msxkeyb.asm"
SIZ_MSXKEYB .EQU $ - ORG_MSXKEYB
.ECHO "MSXKEYB occupies "
.ECHO SIZ_MSXKEYB
.ECHO " bytes.\n"
#ENDIF
;
#IF (PRPENABLE)
ORG_PRP .EQU $
#INCLUDE "prp.asm"
@ -4944,7 +4964,7 @@ SYSCHK:
CP DL_ERROR ; >= ERROR LEVEL
JR C,SYSCHK1 ; IF NOT, GO HOME
POP AF ; RESTORE INCOMING AF VALUE
;
;
; DISPLAY SYSCHK MESSAGE
PUSH DE ; PRESERVE DE VALUE
LD DE,STR_SYSCHK ; POINT TO PREFIX STRING
@ -5151,7 +5171,7 @@ PS_PRTDC:
CP 5 ; RAM DISK?
JR Z,PS_PRTDC1 ; PRINT CAPACITY IN KB
CP 7 ; FLASH DISK?
JR Z,PS_PRTDC1 ; PRINT CAPACITY IN KB
JR Z,PS_PRTDC1 ; PRINT CAPACITY IN KB
;
; PRINT HARD DISK STORAGE SIZE IN MB
LD B,BF_DIOCAP ; HBIOS FUNC: GET CAPACTIY
@ -5416,8 +5436,8 @@ PS_SOUND:
PRTS(" $") ; PAD TO NEXT COLUMN
; DEVICE COLUMN
PUSH BC ;
PUSH BC ;
LD E,C
XOR A
LD DE,PS_SDSND ; POINT TO DEVICE TYPE NAME TABLE
@ -5615,13 +5635,14 @@ PIO_MODE_STR: .TEXT "Output$"
; VIDEO DEVICE STRINGS
;
PS_VDSTRREF:
.DW PS_VDVDU, PS_VDCVDU, PS_VDNEC, PS_VDTMS, PS_VDVGA
.DW PS_VDVDU, PS_VDCVDU, PS_VDNEC, PS_VDTMS, PS_VDVGA, PS_VDV9958
;
PS_VDVDU .TEXT "VDU$"
PS_VDCVDU .TEXT "CVDU$"
PS_VDNEC .TEXT "NEC$"
PS_VDTMS .TEXT "TMS$"
PS_VDVGA .TEXT "VGA$"
PS_VDV9958 .TEXT "V9958-$"
;
; VIDEO TYPE STRINGS
;

4
Source/HBIOS/hbios.inc

@ -131,7 +131,7 @@ ERR_RANGE .EQU -6 ; PARAMETER OUT OF RANGE
ERR_NOMEDIA .EQU -7 ; MEDIA NOT PRESENT
ERR_NOHW .EQU -8 ; HARDWARE NOT PRESENT
ERR_IO .EQU -9 ; I/O ERROR
ERR_READONLY .EQU -10 ; WRITE REQUEST TO READ-ONLY MEDIA
ERR_READONLY .EQU -10 ; WRITE REQUEST TO READ-ONLY MEDIA
ERR_TIMEOUT .EQU -11 ; DEVICE TIMEOUT
ERR_BADCFG .EQU -12 ; INVALID CONFIGURATION
ERR_INTERNAL .EQU -13 ; INTERNAL ERROR
@ -191,6 +191,7 @@ RTCDEV_BQ .EQU $10 ; BQ4845P
RTCDEV_SIMH .EQU $20 ; SIMH
RTCDEV_INT .EQU $30 ; PERIODIC INT TIMER
RTCDEV_DS7 .EQU $40 ; DS1302 (I2C)
RTCDEV_RP5 .EQU $50 ; RP5C01
;
; VIDEO DEVICE IDS
;
@ -199,6 +200,7 @@ VDADEV_CVDU .EQU $10 ; ECB COLOR VDU - MOS 8563
VDADEV_NEC .EQU $20 ; ECB UPD7220 - NEC UPD7220
VDADEV_TMS .EQU $30 ; N8 ONBOARD VDA SUBSYSTEM - TMS 9918
VDADEV_VGA .EQU $40 ; ECB VGA3 - HITACHI HD6445
VDADEV_V9958 .EQU $50 ; V9958 VDU
;
; SOUND DEVICE IDS
;

1150
Source/HBIOS/msxkeyb.asm

File diff suppressed because it is too large

446
Source/HBIOS/rp5rtc.asm

@ -0,0 +1,446 @@
;
;==================================================================================================
; RP5C01 CLOCK DRIVER
;==================================================================================================
;
RP5RTC_BUFSIZ .EQU 6 ; SIX BYTE BUFFER (YYMMDDHHMMSS)
;
; RTC DEVICE INITIALIZATION ENTRY
;
; TODO:
; set the day of week register
; read block of nvram
; write block of nvram
; set alarm/get alarm????
;; NOTES FOR USING DRIVER IN Z-DOS
; First load the LDDS datestamper
; A:LDDS
; next prepare and drives with datestamper info:
; eg: a:putds -d=g: -V
; then view date time of files with:
; a:filedate
RP5RTC_REG .EQU $B4
RP5RTC_DAT .EQU $B5
REG_1SEC .EQU $00
REG_10SEC .EQU $01
REG_1MIN .EQU $02
REG_10MIN .EQU $03
REG_1HR .EQU $04
REG_10HR .EQU $05
REG_DAYWEEK .EQU $06 ; NOT USED BY THIS DRIVER
REG_1DAY .EQU $07
REG_10DAY .EQU $08
REG_1MNTH .EQU $09
REG_10MNTH .EQU $0A
REG_1YEAR .EQU $0B
REG_10YEAR .EQU $0C
REG_MODE .EQU $0D
REG_TEST .EQU $0E
REG_RESET .EQU $0F
REG_12_24 .EQU $0A
REG_LEAPYR .EQU $0B
MODE_TIMEST .EQU 0
MODE_ALRMST .EQU 1
MODE_RAM0 .EQU 2
MODE_RAM1 .EQU 3
MD_TIME .EQU 8
MD_ALRM .EQU 4
RP5RTC_INIT:
LD A, (RTC_DISPACT) ; RTC DISPATCHER ALREADY SET?
OR A ; SET FLAGS
RET NZ ; IF ALREADY ACTIVE, ABORT
CALL NEWLINE ; FORMATTING
PRTS("RP5C01 RTC: $")
; PRINT RTC LATCH PORT ADDRESS
PRTS("IO=0x$") ; LABEL FOR IO ADDRESS
LD A,RP5RTC_REG ; GET IO ADDRESS
CALL PRTHEXBYTE ; PRINT IT
CALL PC_SPACE ; FORMATTING
; CHECK PRESENCE STATUS
CALL RP5RTC_DETECT ; HARDWARE DETECTION
JR Z, RP5RTC_INIT1 ; IF ZERO, ALL GOOD
PRTS("NOT PRESENT$") ; NOT ZERO, H/W NOT PRESENT
OR $FF ; SIGNAL FAILURE
RET ; BAIL OUT
RP5RTC_INIT1:
; ENSURE DEVICE IS RESET AND NOT IN TEST MODE
LD A, REG_TEST ; SELECT TEST REGISTER
OUT (RP5RTC_REG), A
CALL DLY16
XOR A
OUT (RP5RTC_DAT), A ; TURN OFF ALL TEST MODE BITS
LD B, MODE_ALRMST
CALL RP5RTC_SETMD
CALL RP5RTC_ENTIME
LD A, REG_12_24 ; SET TO 24 HOUR CLOCK
OUT (RP5RTC_REG), A
LD A, 1
OUT (RP5RTC_DAT), A
CALL RP5RTC_RDTIM
; DISPLAY CURRENT TIME
LD HL, RP5RTC_BCDBUF ; POINT TO BCD BUF
CALL PRTDT
;
LD BC, RP5RTC_DISPATCH
CALL RTC_SETDISP
;
XOR A ; SIGNAL SUCCESS
RET
;
; DETECT RTC HARDWARE PRESENCE
;
RP5RTC_DETECT:
LD C, 0 ; NVRAM INDEX 0
CALL RP5RTC_GETBYT ; GET VALUE
LD A, E ; TO ACCUM
LD L, A ; SAVE IT
XOR $FF ; FLIP ALL BITS
LD E, A ; TO E
LD C, 0 ; NVRAM INDEX 0
CALL RP5RTC_SETBYT ; WRITE IT
LD C, 0 ; NVRAM INDEX 0
CALL RP5RTC_GETBYT ; GET VALUE
LD A, L ; GET SAVED VALUE
XOR $FF ; FLIP ALL BITS
CP E ; COMPARE WITH VALUE READ
LD A, 0 ; ASSUME OK
JR Z, RP5RTC_DETECT1 ; IF MATCH, GO AHEAD
LD A, $FF ; ELSE STATUS IS ERROR
RP5RTC_DETECT1:
PUSH AF ; SAVE STATUS
LD A, L ; GET SAVED VALUE
LD C, 0 ; NVRAM INDEX 0
CALL RP5RTC_SETBYT ; SAVE IT
POP AF ; RECOVER STATUS
OR A ; SET FLAGS
RET
;
; RTC DEVICE FUNCTION DISPATCH ENTRY
; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR
; B: FUNCTION (IN)
;
RP5RTC_DISPATCH:
LD A,B ; GET REQUESTED FUNCTION
AND $0F ; ISOLATE SUB-FUNCTION
JP Z,RP5RTC_GETTIM ; GET TIME
DEC A
JP Z,RP5RTC_SETTIM ; SET TIME
DEC A
JP Z,RP5RTC_GETBYT ; GET NVRAM BYTE VALUE
DEC A
JP Z,RP5RTC_SETBYT ; SET NVRAM BYTE VALUE
DEC A
JP Z,RP5RTC_GETBLK ; GET NVRAM DATA BLOCK VALUES
DEC A
JP Z,RP5RTC_SETBLK ; SET NVRAM DATA BLOCK VALUES
DEC A
JP Z,RP5RTC_GETALM ; GET ALARM
DEC A
JP Z,RP5RTC_SETALM ; SET ALARM
DEC A
JP Z,RP5RTC_DEVICE ; REPORT RTC DEVICE INFO
CALL SYSCHK
LD A, ERR_NOFUNC
OR A
RET
;
; RTC GET NVRAM BYTE
; C: INDEX
; E: VALUE (OUTPUT)
; A:0 IF OK, ERR_RANGE IF OUT OF RANGE
;
RP5RTC_GETBYT:
LD A, C
CP $0D
JR NC, RP5RTC_BADIDX
LD B, MODE_RAM0
CALL RP5RTC_SETMD
LD A, C ; SELECT NVRAM INDEX
OUT (RP5RTC_REG), A
IN A, (RP5RTC_DAT)
AND $0F ; RETRIEVE UNIT NIBBLE
LD E, A
LD B, MODE_RAM1
CALL RP5RTC_SETMD
LD A, C ; SELECT NVRAM INDEX
OUT (RP5RTC_REG), A
IN A, (RP5RTC_DAT)
AND $0F ; RETRIEVE UNIT NIBBLE
RLCA
RLCA
RLCA
RLCA
OR E
LD E, A
XOR A ; SIGNAL SUCCESS
RET ; AND RETURN
RP5RTC_BADIDX:
LD E, 00
LD A, ERR_RANGE
RET
;
; RTC SET NVRAM BYTE
; C: INDEX
; E: VALUE
; A:0 IF OK, ERR_RANGE IF OUT OF RANGE
;
RP5RTC_SETBYT:
LD A, C
CP $0D
JR NC, RP5RTC_BADIDX
LD B, MODE_RAM0
CALL RP5RTC_SETMD
LD A, C ; SELECT NVRAM INDEX
OUT (RP5RTC_REG), A
LD A, E
AND $0F
OUT (RP5RTC_DAT), A
LD B, MODE_RAM1
CALL RP5RTC_SETMD
LD A, C ; SELECT NVRAM INDEX
OUT (RP5RTC_REG), A
LD A, E
AND $F0
RRCA
RRCA
RRCA
RRCA
OUT (RP5RTC_DAT), A
XOR A ; SIGNAL SUCCESS
RET ; AND RETURN
RP5RTC_GETBLK:
RP5RTC_SETBLK:
RP5RTC_GETALM:
RP5RTC_SETALM:
LD A, ERR_NOTIMPL
CALL SYSCHK
OR A
RET
;
; RTC GET TIME
; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR
; HL: DATE/TIME BUFFER (OUT)
; BUFFER FORMAT IS BCD: YYMMDDHHMMSS
; 24 HOUR TIME FORMAT IS ASSUMED
;
RP5RTC_GETTIM:
; GET THE TIME INTO TEMP BUF
PUSH HL ; SAVE PTR TO CALLERS BUFFER
;
CALL RP5RTC_RDTIM
; NOW COPY TO REAL DESTINATION (INTERBANK SAFE)
LD A,BID_BIOS ; COPY FROM BIOS BANK
LD (HB_SRCBNK),A ; SET IT
LD A,(HB_INVBNK) ; COPY TO CURRENT USER BANK
LD (HB_DSTBNK),A ; SET IT
LD HL,RP5RTC_BCDBUF ; SOURCE ADR
POP DE ; DEST ADR
LD BC,RP5RTC_BUFSIZ ; LENGTH
CALL HB_BNKCPY ; COPY THE CLOCK DATA
XOR A ; SIGNAL SUCCESS
RET ; AND RETURN
;
;
; RTC SET TIME
; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR
; HL: DATE/TIME BUFFER (IN)
; BUFFER FORMAT IS BCD: YYMMDDHHMMSSWW
; 24 HOUR TIME FORMAT IS ASSUMED
;
RP5RTC_SETTIM:
; COPY TO BCD BUF
LD A,(HB_INVBNK) ; COPY FROM CURRENT USER BANK
LD (HB_SRCBNK),A ; SET IT
LD A,BID_BIOS ; COPY TO BIOS BANK
LD (HB_DSTBNK),A ; SET IT
LD DE,RP5RTC_BCDBUF ; DEST ADR
LD BC,RP5RTC_BUFSIZ ; LENGTH
CALL HB_BNKCPY ; COPY THE CLOCK DATA
;
LD B, MODE_TIMEST
CALL RP5RTC_SETMD
LD B, REG_1SEC
LD A, (RP5RTC_SS)
CALL RP5RTC_WRVL
LD B, REG_1MIN
LD A, (RP5RTC_MM)
CALL RP5RTC_WRVL
LD B, REG_1HR
LD A, (RP5RTC_HH)
CALL RP5RTC_WRVL
LD B, REG_1DAY
LD A, (RP5RTC_DT)
CALL RP5RTC_WRVL
LD B, REG_1MNTH
LD A, (RP5RTC_MO)
CALL RP5RTC_WRVL
LD B, REG_1YEAR
LD A, (RP5RTC_YR)
CALL RP5RTC_WRVL
LD B, MODE_ALRMST
CALL RP5RTC_SETMD
LD A, (RP5RTC_YR)
CALL BCD2BYTE
AND 3
LD B, REG_LEAPYR
CALL RP5RTC_WRVL
CALL RP5RTC_ENTIME
XOR A ; SIGNAL SUCCESS
RET ; AND RETURN
;
; REPORT RTC DEVICE INFO
;
RP5RTC_DEVICE:
LD D,RTCDEV_RP5 ; D := DEVICE TYPE
LD E,0 ; E := PHYSICAL DEVICE NUMBER
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,0 ; L := 0, NO I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;
; READ OUT THE TIME
RP5RTC_RDTIM:
LD B, MODE_TIMEST
CALL RP5RTC_SETMD
LD B, REG_1SEC
CALL RP5RTC_RDVL
LD (RP5RTC_SS), A
LD B, REG_1MIN
CALL RP5RTC_RDVL
LD (RP5RTC_MM), A
LD B, REG_1HR
CALL RP5RTC_RDVL
LD (RP5RTC_HH), A
LD B, REG_1DAY
CALL RP5RTC_RDVL
LD (RP5RTC_DT), A
LD B, REG_1MNTH
CALL RP5RTC_RDVL
LD (RP5RTC_MO), A
LD B, REG_1YEAR
CALL RP5RTC_RDVL
LD (RP5RTC_YR), A
RET
; SET MODE
; MODE IN B (MODE_TIMEST, MODE_ALRMST, MODE_RAM0, MODE_RAM1)
RP5RTC_SETMD:
LD A, REG_MODE ; SELECT MODE REGISTER
OUT (RP5RTC_REG), A
IN A, (RP5RTC_DAT)
AND MD_TIME | MD_ALRM
OR B
OUT (RP5RTC_DAT), A ; ASSIGN MODE
RET
; ENABLE THE TIME COUNTER
RP5RTC_ENTIME:
LD B, MD_TIME
JP RP5RTC_SETMD
; READ OUT 2 REGISTERS - 2 NIBBLES TO 1 BYTE
; REGISTER IN B
RP5RTC_RDVL:
LD A, B ; SELECT UNIT REGISTER
OUT (RP5RTC_REG), A
IN A, (RP5RTC_DAT)
AND $0F ; RETRIEVE UNIT NIBBLE
LD L, A
INC B
LD A, B ; SELECT TENS REGISTER
OUT (RP5RTC_REG), A
IN A, (RP5RTC_DAT)
AND $0F
RLCA
RLCA
RLCA
RLCA ; MOVE TO TOP NIBBLE
OR L ; MERGE IN LOW NIBBLE
LD H, A ; A = VALUE AS BCD
RET
; WRITE OUT 2 REGISTERS - 1 BYTE TO 2 NIBBLES
; REGISTER IN B (B+1)
; VALUE IN A
RP5RTC_WRVL:
LD C, A
LD A, B ; SELECT UNIT REGISTER
OUT (RP5RTC_REG), A
LD A, C ; WRITE C (ONLY LOW NIBBLE WILL BE USED)
OUT (RP5RTC_DAT), A
INC B
LD A, B ; SELECT TENS REGISTER
OUT (RP5RTC_REG), A
LD A, C ; SHIFT TOP NIBBLE TO LOW NIBBLE
RRCA
RRCA
RRCA
RRCA
OUT (RP5RTC_DAT), A ; WRITE IT
RET
;
; REGISTER EXTRACTED VALUES
;
RP5RTC_BCDBUF:
RP5RTC_YR .DB 20
RP5RTC_MO .DB 01
RP5RTC_DT .DB 01
RP5RTC_HH .DB 00
RP5RTC_MM .DB 00
RP5RTC_SS .DB 00

5
Source/HBIOS/std.asm

@ -199,7 +199,8 @@ AYMODE_MSX .EQU 5 ; RC2014 SOUND MODULE REV6 BY ED BRINDLEY ON Z80/Z180 AT MSX
TMSMODE_NONE .EQU 0
TMSMODE_SCG .EQU 1 ; SCG ECB BOARD
TMSMODE_N8 .EQU 2 ; N8 BUILT-IN VIDEO
TMSMODE_RC .EQU 3 ; RC2014 BUILT-IN VIDEO
TMSMODE_RC .EQU 3 ; RC2014 TMS9918 VIDEO BOARD
TMSMODE_RCV9958 .EQU 4 ; RC2014 V9958 VIDEO BOARD
;
; SERIAL DEVICE CONFIGURATION CONSTANTS
;
@ -427,7 +428,7 @@ SYSTIM .SET TM_CTC
#IF (TMSENABLE & (INTMODE == 1))
#IF (TMSTIMENABLE)
SYSTIM .SET TM_TMS
.ECHO " TMS9918"
.ECHO " TMS9918/V9958"
#ENDIF
#ENDIF
;

95
Source/HBIOS/tms.asm

@ -1,5 +1,5 @@
;======================================================================
; N8 VDU DRIVER FOR SBC PROJECT
; TM9918 AND V9958 VDU DRIVER
;
; WRITTEN BY: DOUGLAS GOODALL
; UPDATED BY: WAYNE WARTHEN -- 4/7/2013
@ -19,10 +19,10 @@ TMSCTRL1: .EQU 1 ; CONTROL BITS
TMSINTEN: .EQU 5 ; INTERRUPT ENABLE BIT
#IF TMSTIMENABLE
.ECHO "TMS INTERRUPTS ENABLED\n"
.ECHO "TMS/V9958 INTERRUPTS ENABLED\n"
#ENDIF
#IF (TMSMODE == TMSMODE_RC)
#IF ((TMSMODE == TMSMODE_RC) | (TMSMODE == TMSMODE_RCV9958))
TMS_DATREG .EQU $98 ; READ/WRITE DATA
TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL
TMS_PPIA .EQU 0 ; PPI PORT A
@ -58,14 +58,21 @@ TMS_PPIX .EQU 0 ; PPI CONTROL PORT
#ENDIF
;
TMS_ROWS .EQU 24
#IF (TMSMODE == TMSMODE_RCV9958)
TMS_FNTVADDR .EQU $1000 ; VRAM ADDRESS OF FONT DATA
TMS_COLS .EQU 80
#ELSE
TMS_FNTVADDR .EQU $0800 ; VRAM ADDRESS OF FONT DATA
TMS_COLS .EQU 40
#ENDIF
;
#DEFINE USEFONT8X8
#DEFINE TMS_FONT FONT8X8
;
TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER
;
; TMS_IODELAY IS USED TO ADD RECOVERY TIME TO TMS9918 ACCESSES
; TMS_IODELAY IS USED TO ADD RECOVERY TIME TO TMS9918/V9958 ACCESSES
; IF YOU SEE SCREEN CORRUPTION, ADJUST THIS!!!
;
#IF (CPUFAM == CPU_Z180)
@ -73,7 +80,11 @@ TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER
#DEFINE TMS_IODELAY EX (SP),HL \ EX (SP),HL ; 38 W/S
#ELSE
; BELOW WAS TUNED FOR SBC AT 8MHZ
#DEFINE TMS_IODELAY NOP \ NOP ; 8 W/S
#IF (TMSMODE == TMSMODE_RCV9958)
#DEFINE TMS_IODELAY NOP \ NOP \ NOP \ NOP \ NOP \ NOP \ NOP ; V9958 NEEDS AT WORST CASE, APPROX 4us (28T) DELAY BETWEEN I/O (WHEN IN TEXT MODE)
#ELSE
#DEFINE TMS_IODELAY NOP \ NOP ; 8 W/S
#ENDIF
#ENDIF
;
;======================================================================
@ -101,7 +112,11 @@ TMS_INIT:
LD IY,TMS_IDAT ; POINTER TO INSTANCE DATA
;
CALL NEWLINE ; FORMATTING
#IF (TMSMODE == TMSMODE_RCV9958)
PRTS("V9958: IO=0x$")
#ELSE
PRTS("TMS: IO=0x$")
#ENDIF
LD A,TMS_DATREG
CALL PRTHEXBYTE
CALL TMS_PROBE ; CHECK FOR HW EXISTENCE
@ -118,7 +133,12 @@ TMS_INIT1:
CALL TMS_VDARES1
#IF (TMSMODE == TMSMODE_N8)
CALL PPK_INIT ; INITIALIZE KEYBOARD DRIVER
#ELSE
#IF MSKENABLE
CALL MKY_INIT
#ENDIF
#ENDIF
#IF (INTMODE == 1 & TMSTIMENABLE)
; ADD IM1 INT CALL LIST ENTRY
LD HL, TMS_TSTINT ; GET INT VECTOR
@ -144,12 +164,6 @@ TMS_INIT1:
;
XOR A ; SIGNAL SUCCESS
RET
#IF TMSTIMENABLE
; DISABLE INTERRUPT
TMS_INT_DIS:
#ENDIF
;
;======================================================================
; TMS DRIVER - VIDEO DISPLAY ADAPTER (VDA) FUNCTIONS
@ -172,11 +186,18 @@ TMS_FNTBL:
.DW PPK_STAT
.DW PPK_FLUSH
.DW PPK_READ
#ELSE
#IF MSKENABLE
.DW MKY_STAT
.DW MKY_FLUSH
.DW MKY_READ
#ELSE
.DW TMS_STAT
.DW TMS_FLUSH
.DW TMS_READ
#ENDIF
#ENDIF
#IF (($ - TMS_FNTBL) != (VDA_FNCNT * 2))
.ECHO "*** INVALID TMS FUNCTION TABLE ***\n"
!!!!!
@ -218,7 +239,11 @@ TMS_VDARES1: ; ENTRY POINT TO AVOID TMS_Z180IO RECURSION
RET
TMS_VDADEV:
#IF (TMSMODE == TMSMODE_RCV9958)
LD D, VDADEV_V9958
#ELSE
LD D,VDADEV_TMS ; D := DEVICE TYPE
#ENDIF
LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO
LD H,TMSMODE ; H := MODE
LD L,TMS_DATREG ; L := BASE I/O ADDRESS
@ -354,6 +379,14 @@ TMS_SET:
;----------------------------------------------------------------------
;
TMS_WR:
#IF (TMSMODE == TMSMODE_RCV9958)
; CLEAR R#14 FOR V9958
XOR A
OUT (TMS_CMDREG), A
LD A, $80 | 14
OUT (TMS_CMDREG), A
#ENDIF
PUSH HL
SET 6,H ; SET WRITE BIT
CALL TMS_RD
@ -438,8 +471,8 @@ TMS_CRTINIT2:
;----------------------------------------------------------------------
;
TMS_LOADFONT:
; SET WRITE ADDRESS TO $800
LD HL,$800
; SET WRITE ADDRESS TO TMS_FNTVADDR
LD HL,TMS_FNTVADDR
CALL TMS_WR
#IF USELZSA2
@ -458,8 +491,8 @@ TMS_LOADFONT:
LD HL,TMS_FONT ; START OF FONT DATA
#ENDIF
;
; FILL $800 BYTES FROM FONTDATA
LD DE,$800
; FILL TMS_FNTVADDR BYTES FROM FONTDATA
LD DE,TMS_FNTVADDR
TMS_LOADFONT1:
LD A,(HL)
OUT (TMS_DATREG),A
@ -520,7 +553,7 @@ TMS_SETCUR0: ; MULT BY 8 FOR FONT INDEX
SLA L ; SHIFT LSB INTO CARRY
RL H ; SHFT MSB FROM CARRY
DJNZ TMS_SETCUR0 ; LOOP 3 TIMES
LD DE,$800 ; OFFSET TO START OF FONT TABLE
LD DE,TMS_FNTVADDR ; OFFSET TO START OF FONT TABLE
ADD HL,DE ; ADD TO FONT INDEX
CALL TMS_RD ; SETUP TO READ GLYPH
LD B,8 ; 8 BYTES
@ -533,7 +566,7 @@ TMS_SETCUR1: ; READ GLYPH LOOP
DJNZ TMS_SETCUR1 ; LOOP FOR 8 BYTES
;
; NOW WRITE INVERTED GLYPH INTO FONT INDEX 255
LD HL,$800 + (255 * 8) ; LOC OF GLPYPH DATA FOR CHAR 255
LD HL,TMS_FNTVADDR + (255 * 8) ; LOC OF GLPYPH DATA FOR CHAR 255
CALL TMS_WR ; SETUP TO WRITE THE INVERTED GLYPH
LD B,8 ; 8 BYTES PER GLYPH
LD HL,TMS_BUF ; POINT TO BUFFER
@ -803,6 +836,11 @@ TMS_TSTINT:
RET
TMS_INTHNDL:
#IF MSKENABLE
CALL MKY_INT
#ENDIF
CALL HB_TIMINT ; RETURN NZ - HANDLED
OR $FF
RET
@ -874,16 +912,33 @@ TMS_PORTS:
; 5S Fifth sprite (not displayed) detected. Value in FS* is valid.
; INT Set at each screen update, used for interrupts.
;
#IF (TMSMODE == TMSMODE_RCV9958)
TMS_INIT9918:
.DB $04 ; REG 0 - NO EXTERNAL VID, SET M4 = 1
TMS_INIT9918_REG_1:
.DB $50 ; REG 1 - ENABLE SCREEN, SET MODE 1
.DB $03 ; REG 2 - PATTERN NAME TABLE := 0
.DB $00 ; REG 3 - NO COLOR TABLE
.DB $02 ; REG 4 - SET PATTERN GENERATOR TABLE TO (TMS_FNTVADDR -> $1000)
.DB $00 ; REG 5 - SPRITE ATTRIBUTE IRRELEVANT
.DB $00 ; REG 6 - NO SPRITE GENERATOR TABLE
.DB $F0 ; REG 7 - WHITE ON BLACK
.DB $88 ; REG 8 - COLOUR BUS INPUT, DRAM 64K
.DB $00 ; REG 9
.DB $00 ; REG 10 - COLOUR TABLE A14-A16 (TMS_FNTVADDR - $1000)
#ELSE ; TMS REGISTER SET
.DB $00 ; REG 0 - NO EXTERNAL VID
TMS_INIT9918_REG_1:
.DB $50 ; REG 1 - ENABLE SCREEN, SET MODE 1
.DB $00 ; REG 2 - PATTERN NAME TABLE := 0
.DB $00 ; REG 3 - NO COLOR TABLE
.DB $01 ; REG 4 - SET PATTERN GENERATOR TABLE TO $800
.DB $01 ; REG 4 - SET PATTERN GENERATOR TABLE TO (TMS_FNTVADDR -> $0800)
.DB $00 ; REG 5 - SPRITE ATTRIBUTE IRRELEVANT
.DB $00 ; REG 6 - NO SPRITE GENERATOR TABLE
.DB $F0 ; REG 7 - WHITE ON BLACK
#ENDIF
;
TMS_INIT9918LEN .EQU $ - TMS_INIT9918
;
@ -892,6 +947,10 @@ TMS_INIT9918LEN .EQU $ - TMS_INIT9918
TMS_DCNTL .DB $00 ; SAVE Z180 DCNTL AS NEEDED
#ENDIF
#IF (TMSMODE == TMSMODE_RCV9958)
.ECHO "V9958 instance data occupies "
#ELSE
.ECHO "TMS instance data occupies "
#ENDIF
.ECHO $ - TMS_IDAT
.ECHO " bytes\n"

Loading…
Cancel
Save