Browse Source

Merge pull request #96 from wwarthen/master

Resync
pull/103/head
b1ackmai1er 6 years ago
committed by GitHub
parent
commit
b801d793e6
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      Source/HBIOS/Build.ps1
  2. 34
      Source/HBIOS/Makefile
  3. 116
      Source/HBIOS/hbios.asm
  4. 2
      Source/HBIOS/hbios.inc
  5. 2
      Source/HBIOS/sd.asm
  6. 3
      Source/Images/Makefile

2
Source/HBIOS/Build.ps1

@ -238,7 +238,7 @@ else
{
Concat 'hbios_rom.bin','osimg.bin','osimg1.bin','osimg.bin',$RomDiskFile $RomFile
Concat 'hbios_app.bin','osimg.bin' $ComFile
Concat 'hbios_img.bin','osimg.bin' $ImgFile
# Concat 'hbios_img.bin','osimg.bin' $ImgFile
}
# Remove the temporary working ROM disk file

34
Source/HBIOS/Makefile

@ -1,25 +1,25 @@
OBJECTS =
ifeq (1,1)
OBJECTS += DYNO_std.rom
OBJECTS += EZZ80_std.rom
OBJECTS += MK4_std.rom
OBJECTS += N8_std.rom
OBJECTS += RCZ180_ext.rom
OBJECTS += RCZ180_nat.rom
OBJECTS += RCZ80_kio.rom
OBJECTS += RCZ80_mt.rom
OBJECTS += RCZ80_std.rom
OBJECTS += RCZ80_wiz.rom
OBJECTS += SBC_simh.rom
OBJECTS += SBC_std.rom
OBJECTS += SCZ180_126.rom
OBJECTS += SCZ180_130.rom
OBJECTS += DYNO_std.rom DYNO_std.com
OBJECTS += EZZ80_std.rom EZZ80_std.com
OBJECTS += MK4_std.rom MK4_std.com
OBJECTS += N8_std.rom N8_std.com
OBJECTS += RCZ180_ext.rom RCZ180_ext.com
OBJECTS += RCZ180_nat.rom RCZ180_nat.com
OBJECTS += RCZ80_kio.rom RCZ80_kio.com
OBJECTS += RCZ80_mt.rom RCZ80_mt.com
OBJECTS += RCZ80_std.rom RCZ80_std.com
OBJECTS += RCZ80_wiz.rom RCZ80_wiz.com
OBJECTS += SBC_simh.rom SBC_simh.com
OBJECTS += SBC_std.rom SBC_std.com
OBJECTS += SCZ180_126.rom SCZ180_126.com
OBJECTS += SCZ180_130.rom SCZ180_130.com
OBJECTS += UNA_std.rom
OBJECTS += ZETA_std.rom
OBJECTS += ZETA2_std.rom
OBJECTS += ZETA_std.rom ZETA_std.com
OBJECTS += ZETA2_std.rom ZETA2_std.com
else
OBJECTS += ZETA2_std.rom
OBJECTS += ZETA2_std.rom ZETA2_std.com
endif
MOREDIFF = camel80.bin game.bin hbios_rom.bin nascom.bin prefix.bin usrrom.bin \

116
Source/HBIOS/hbios.asm

@ -63,7 +63,7 @@
; - [xio|mio].asm
; - dsky.asm
; - unlzsa2s.asm
;
;
;
; INCLUDE GENERIC STUFF
;
@ -250,7 +250,7 @@ CB_BIDROMDN .DB BID_ROMDN
;
; DEFINITIONS
;
HBX_BUFSIZ .EQU $40 ; INTERBANK COPY BUFFER SIZE
HBX_BUFSIZ .EQU $40 ; INTERBANK COPY BOUNCE BUFFER SIZE
;
; HBIOS IDENTIFICATION DATA BLOCK
;
@ -263,12 +263,17 @@ HBX_IDENT:
; HBIOS ENTRY FOR RST 08 PROCESSING
;==================================================================================================
;
; NOTE: THE SIZE OF HBX_TMPSTK (TYPICALLY 20 BYTES) IS INSUFFICIENT FOR
; FREERTOS IF AN INTERRUPT STRIKES WHILE THE TEMPORARY STACK IS ACTIVE.
; BELOW, HBX_BUF HAS BEEN USURPED TO PROVIDE A LARGER TEMP STACK TO
; ACCOMMODATE FREERTOS. HBX_BUF IS ONLY USED AS A BOUNCE BUFFER, SO IT'S
; USE WILL NEVER OVERLAP WITH BELOW.
;
HBX_INVOKE:
LD (HBX_INVSP),SP ; SAVE ORIGINAL STACK FRAME
LD A,(HB_CURBNK) ; GET CURRENT BANK
LD (HB_INVBNK),A ; SAVE INVOCATION BANK
;LD SP,HBX_TMPSTK ; USE SMALL TEMP STACK FRAME IN HI MEM FOR BANK SWITCH
LD SP,HBX_BUF_END ; BORROW HBX_BUF FOR TEMP STACK
LD A,BID_BIOS ; HBIOS BANK
CALL HBX_BNKSEL ; SELECT IT
@ -276,7 +281,6 @@ HBX_INVOKE:
CALL HB_DISPATCH ; CALL HBIOS FUNCTION DISPATCHER
;LD SP,HBX_TMPSTK ; USE SMALL TEMP STACK FRAME IN HI MEM FOR BANK SWITCH
LD SP,HBX_BUF_END ; BORROW HBX_BUF FOR TEMP STACK
PUSH AF ; SAVE AF (FUNCTION RETURN)
@ -378,7 +382,6 @@ HBX_BNKSEL1:
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; Copy Data - Possibly between banks. This resembles CP/M 3, but
; usage of the HL and DE registers is reversed.
; Caller MUST ensure stack is already in high memory.
; Caller MUST preset HBX_SRCBNK and HBX_DSTBNK.
; Caller MUST disable ints if IM1 active
; Enter:
@ -497,29 +500,24 @@ HBX_PPRET:
HBX_PPSP .EQU $ - 2
RET
;
; SMALL TEMPORARY STACK FOR USE BY INVOKE, PEEK, AND POKE
;
.FILL 20,$CC ; 10 LEVEL STACK
HBX_TMPSTK .EQU $
;
; PRIVATE STACK AT END OF HBIOS CODE
; OCCUPIES SPACE BEFORE IVT
;
HBX_STKSIZ .EQU $FF00 - $
.ECHO "HBIOS PROXY STACK space: "
.ECHO HBX_STKSIZ
HBX_INTSTKSIZ .EQU $FF00 - $
.ECHO "HBIOS INT STACK space: "
.ECHO HBX_INTSTKSIZ
.ECHO " bytes.\n"
.FILL HBX_STKSIZ,$FF
HBX_STACK .EQU $
.FILL HBX_INTSTKSIZ,$FF
HBX_INTSTK .EQU $
;
#IF (INTMODE == 2)
;
; HBIOS INTERRUPT SLOT ASSIGNMENTS
;
; # Z80 Z180
; --- -------------- --------------
; --- -------------- --------------
; 0 CTC0A INT1 -+
; 1 CTC0B INT2 |
; 1 CTC0B INT2 |
; 2 CTC0C TIM0 |
; 3 CTC0D TIM1 |
; 4 DMA0 +- Z180 INTERNAL
@ -592,7 +590,7 @@ HBX_INT: ; COMMON INTERRUPT ROUTING CODE
EX (SP),HL ; SAVE HL AND GET INT JP TABLE OFFSET
LD (HBX_INT_SP),SP ; SAVE ORIGINAL STACK FRAME
LD SP,HBX_STACK ; USE STACK FRAME IN HI MEM
LD SP,HBX_INTSTK ; USE DEDICATED INT STACK FRAME IN HI MEM
; SAVE STATE (HL SAVED PREVIOUSLY ON ORIGINAL STACK FRAME)
PUSH AF ; SAVE AF
@ -605,7 +603,7 @@ HBX_INT: ; COMMON INTERRUPT ROUTING CODE
LD L,(HL) ; OFFSET INTO JP TABLE FOR THIS INT
LD H,HB_IVT >> 8 ; MSB OF HBIOS INT JP TABLE
CALL JPHL ; CALL HANDLER VIA INT JP TABLE
LD A,(HB_CURBNK) ; GET PRE-INT BANK
@ -627,15 +625,20 @@ HBX_INT_SP .EQU $ - 2
;
#ENDIF
;
; FILL TO START OF BOUNCE BUFFER
; SMALL TEMPORARY STACK FOR USE BY BNKCPY, PEEK, AND POKE
;
HBX_INTFILL .EQU (HBX_XFC - HBX_BUFSIZ - $)
.ECHO "HBIOS INT space remaining: "
.ECHO HBX_INTFILL
HBX_TMPSTKSIZ .EQU (HBX_XFC - HBX_BUFSIZ - $)
.ECHO "HBIOS TEMP STACK space: "
.ECHO HBX_TMPSTKSIZ
.ECHO " bytes.\n"
.FILL HBX_INTFILL,$FF
.FILL HBX_TMPSTKSIZ,$CC
HBX_TMPSTK .EQU $
;
; INTERBANK COPY BUFFER (64 BYTES)
; INTERBANK COPY BOUNCE BUFFER (64 BYTES)
;
; N.B., THIS BUFFER IS ALSO USED AS A TEMPORARY STACK BY HBX_INVOKE.
; THEREFORE, THIS BUFFER *CANNOT* BE USED TO PASS DATA OUTSIDE OF
; HBIOS FUNCTION CALLS.
;
HBX_BUF .FILL HBX_BUFSIZ,0
HBX_BUF_END .EQU $
@ -931,7 +934,7 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK
#IF (BT_REC_TYPE == BT_REC_SBC01)
LD A,%00100000 ; DISABLE RTC AND
OUT (RTCIO),A ; DRQ DRIVER READ
IN A,(RTCIO) ; BIT 0 (DRQ).
IN A,(RTCIO) ; BIT 0 (DRQ).
CPL ; PULLED HIGH
AND 1 ; IS RECOVERY MODE
LD (HB_BOOT_REC),A ; SAVE FOR LATER
@ -939,16 +942,16 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK
#IF (BT_REC_TYPE == BT_REC_SBC1B)
IN A,(RTCIO) ; RTC PORT, BIT 6 HAS THE
BIT 6,A ; STATE OF CONFIG JUMPER
LD A,1 ; JUMPER INSTALLED
LD A,1 ; JUMPER INSTALLED
JR Z,SAVE_REC_M ; IS RECOVERY MODE
LD A,0
SAVE_REC_M:
LD (HB_BOOT_REC),A ; SAVE FOR LATER
#ENDIF
#IF (BT_REC_TYPE == BT_REC_SBCRI)
IN A,($68 + 6) ; UART_MSR MODEM
IN A,($68 + 6) ; UART_MSR MODEM
BIT 6,A ; STATUS REGISTER
LD A,0 ; BIT 6
LD A,0 ; BIT 6
JR Z,SAVE_REC_M ; IS RECOVERY MODE
LD A,1
SAVE_REC_M:
@ -1113,7 +1116,7 @@ HB_CPU2:
;
#IF (HTIMENABLE) ; SIMH TIMER
;
#IF (INTMODE == 1)
#IF (INTMODE == 1)
LD HL,HB_TIMINT
CALL HB_ADDIM1 ; ADD TO IM1 CALL LIST
#ENDIF
@ -1125,7 +1128,7 @@ HB_CPU2:
#IF (KIOENABLE)
LD A,%11111001 ; RESET ALL DEVICES, SET DAISYCHAIN
OUT (KIOBASE+$0E),A ; DO IT
#ENDIF
#ENDIF
;
#IF (CTCENABLE)
CALL CTC_PREINIT
@ -1187,7 +1190,7 @@ HB_CPU2:
LD DE,(HB_PCINITTBL) ; EXECUTE FIRST ; DE IS VALUE OF TOP ENTRY
LD HL,HB_PCINITTBL ; HL IS ADDRESS OF TOP OF TABLE
PUSH HL ; PUSH (1) TOP OF TABLE
PUSH DE ; PUSH (2) VALUE OF TOP ENTRY
PUSH DE ; PUSH (2) VALUE OF TOP ENTRY
PUSH HL ; PUSH (3) TOP OF TABLE
CALL ADDHLA ; HL IS ADDRESS OF DESIRED CONSOLE ENTRY
POP DE ; PLACE IT AT THE TOP OF THE ; POP (3) DE IS TOP OF TABLE
@ -1391,7 +1394,7 @@ HB_SPDTST:
JR Z,NOT_REC_M1 ; INITIALIZATION TABLE
LD B,HB_INITRLEN
LD DE,HB_INIT_REC
JR IS_REC_M1
JR IS_REC_M1
#ENDIF
NOT_REC_M1:
@ -1834,7 +1837,7 @@ DIO_TBL .FILL DIO_SIZ,0 ; SPACE FOR ENTRIES
; HL=BUF ADR
; E=SEC COUNT
; D=BUF BANK ID
;
;
HB_DSKREAD:
;
; THE ACTUAL SECTOR READ FUNCTION ADDRESS IS ON TOS, SAVE IT
@ -1922,7 +1925,7 @@ HB_DSKREADX:
; HL=BUF ADR
; E=SEC COUNT
; D=BUF BANK ID
;
;
HB_DSKWRITE:
;
; THE ACTUAL SECTOR READ FUNCTION ADDRESS IS ON TOS, SAVE IT
@ -2218,11 +2221,15 @@ SYS_BNKCPY:
LD HL,(HB_CPYLEN) ; HL := COPY LEN (SAVED IN SETCPY)
EX (SP),HL ; RESTORE HL & SET (SP) TO COPY LEN
POP BC ; BC := COPY LEN
#IF (INTMODE == 1)
#IF (INTMODE > 0)
LD A,I
DI
PUSH AF
#ENDIF
CALL HB_BNKCPY
#IF (INTMODE == 1)
#IF (INTMODE > 0)
POP AF
JP PO,$+4
EI
#ENDIF
XOR A
@ -2433,11 +2440,15 @@ SYS_SETSECS:
; RETURN: E=BYTE VALUE
;
SYS_PEEK:
#IF (INTMODE == 1)
#IF (INTMODE > 0)
LD A,I
DI
PUSH AF
#ENDIF
CALL HBX_PEEK ; IMPLEMENTED IN PROXY
#IF (INTMODE == 1)
#IF (INTMODE > 0)
POP AF
JP PO,$+4
EI
#ENDIF
XOR A
@ -2447,11 +2458,15 @@ SYS_PEEK:
; ENTRY: D=BANK ID, HL=ADDRESS IN HBIOS BANK, E=BYTE VALUE
;
SYS_POKE:
#IF (INTMODE == 1)
#IF (INTMODE > 0)
LD A,I
DI
PUSH AF
#ENDIF
CALL HBX_POKE ; IMPLEMENTED IN PROXY
#IF (INTMODE == 1)
#IF (INTMODE > 0)
POP AF
JP PO,$+4
EI
#ENDIF
XOR A
@ -2561,9 +2576,6 @@ SYS_INTSET1:
INC HL
LD (HL),B ; SAVE MSB
EX DE,HL ; HL := PREV VEC
;#IF (INTMODE == 2)
; LD DE,HBX_INT ; DE := IM2 INT ROUTING ENGINE
;#ENDIF
XOR A ; SIGNAL SUCCESS
RET ; DONE
;
@ -2680,7 +2692,7 @@ HB_BADINTCNT .DB 0
RRCA
CALL PRTHEXBYTE
PRTS("H: $")
CALL XREGDMP
;CALL CONTINUE
OR $FF ; SIGNAL INTERRUPT HANDLED
@ -2953,8 +2965,8 @@ ORG_FONTS .EQU $
FONT8X8:
#IF USELZSA2
#INCLUDE "font8x8c.asm"
#ELSE
#INCLUDE "font8x8u.asm"
#ELSE
#INCLUDE "font8x8u.asm"
#ENDIF
.ECHO " 8X8"
#ENDIF
@ -2963,8 +2975,8 @@ FONT8X8:
FONT8X11:
#IF USELZSA2
#INCLUDE "font8x11c.asm"
#ELSE
#INCLUDE "font8x11u.asm"
#ELSE
#INCLUDE "font8x11u.asm"
#ENDIF
.ECHO " 8X11"
#ENDIF
@ -2973,8 +2985,8 @@ FONT8X11:
FONT8X16:
#IF USELZSA2
#INCLUDE "font8x16c.asm"
#ELSE
#INCLUDE "font8x16u.asm"
#ELSE
#INCLUDE "font8x16u.asm"
#ENDIF
.ECHO " 8X16"
#ENDIF
@ -3855,7 +3867,7 @@ COUT:
JR COUT2 ; CONTINUE
;
COUT1:
;
;
#IF (WBWDEBUG == USEXIO)
LD A,E ; GET OUTPUT CHAR BACK TO ACCUM
CALL XIO_OUTC ; OUTPUT VIA XIO

2
Source/HBIOS/hbios.inc

@ -131,7 +131,7 @@ VDADEV_VGA .EQU $40 ; ECB VGA3 - HITACHI HD6445
;EMUTYP_NONE .EQU 0 ; NONE
;EMUTYP_TTY .EQU 1 ; TTY
;EMUTYP_ANSI .EQU 2 ; ANSI
;
;
; HBIOS CONTROL BLOCK OFFSETS
; WARNING: THESE OFFSETS WILL CHANGE SIGNIFICANTLY BETWEEN RELEASES
; IT IS STRONGLY RECOMMENDED THAT YOU DO NOT USE THEM!

2
Source/HBIOS/sd.asm

@ -108,7 +108,7 @@
; JUST DISCARD THE FIRST BYTE RECEIVED AFTER A COMMAND IS SENT WITH THE
; ASSUMPTION THAT IT MUST BE A FILL BYTE AND IS NOT RELIABLE DUE TO FLOATING
; MISO.
;
;
; THESE CHANGES ARE CONSISTENT WITH THE POPULAR ARDUINO SDFAT LIBRARY, SO THEY ARE
; PROBABLY PRETTY SAFE. HOWEVER, I HAVE BRACKETED THE CHANGES WITH THE EQUATE BELOW.
; IF YOU WANT TO REVERT THESE HACKS, JUST SET THE EQUATE TO FALSE.

3
Source/Images/Makefile

@ -6,7 +6,8 @@ SYSTEMS = ../CPM22/cpm_wbw.sys ../ZSDOS/zsys_wbw.sys ../CPM3/cpmldr.sys
FDIMGS = fd_cpm22.img fd_zsdos.img fd_nzcom.img \
fd_cpm3.img fd_zpm3.img fd_ws4.img
HDIMGS = hd_cpm22.img hd_zsdos.img hd_nzcom.img \
hd_cpm3.img hd_zpm3.img hd_ws4.img hd_bp.img
hd_cpm3.img hd_zpm3.img hd_ws4.img
# HDIMGS += hd_bp.img
OBJECTS = $(FDIMGS) $(HDIMGS) hd_combo.img
OTHERS = blank144 blankhd

Loading…
Cancel
Save