|
|
|
@ -13,44 +13,6 @@ |
|
|
|
; 1.0 - 13 Aug 96 - Initial Release for P112. HFB |
|
|
|
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
|
|
|
|
|
|
|
IF HB_DEBUG |
|
|
|
|
|
|
|
CSEG |
|
|
|
XORG DEFL $ |
|
|
|
ORG 0 |
|
|
|
ORG_CSEG EQU $ |
|
|
|
ORG XORG |
|
|
|
|
|
|
|
DSEG |
|
|
|
XORG DEFL $ |
|
|
|
ORG 0 |
|
|
|
ORG_DSEG EQU $ |
|
|
|
ORG XORG |
|
|
|
|
|
|
|
IF BANKED |
|
|
|
|
|
|
|
COMMON /BANK2/ |
|
|
|
XORG DEFL $ |
|
|
|
ORG 0 |
|
|
|
ORG_BANK2 EQU $ |
|
|
|
ORG XORG |
|
|
|
|
|
|
|
COMMON /B2RAM/ |
|
|
|
XORG DEFL $ |
|
|
|
ORG 0 |
|
|
|
ORG_B2RAM EQU $ |
|
|
|
ORG XORG |
|
|
|
|
|
|
|
COMMON /RESVD/ |
|
|
|
XORG DEFL $ |
|
|
|
ORG 0 |
|
|
|
ORG_RESVD EQU $ |
|
|
|
ORG XORG |
|
|
|
|
|
|
|
ENDIF ; BANKED |
|
|
|
|
|
|
|
ENDIF ; HB_DEBUG |
|
|
|
|
|
|
|
DSEG |
|
|
|
;..... |
|
|
|
; Cold boot entry. This code is executed only once and so may be |
|
|
|
@ -73,8 +35,6 @@ CBOOT: |
|
|
|
LD SP,80H ; Set stack in Low memory |
|
|
|
ENDIF ; BANKED |
|
|
|
|
|
|
|
CALL HB_INIT |
|
|
|
|
|
|
|
LD HL,(IOBYT) ; Get IOBYTE, Default Drive & User |
|
|
|
LD (3),HL ; Set values in TPA bank |
|
|
|
|
|
|
|
@ -95,10 +55,12 @@ CBOOT: |
|
|
|
XOR A |
|
|
|
LD (BIOSTK),A ; Init bank switcher |
|
|
|
LD (3),HL ; Set IOBYTE and Default DU in System bank |
|
|
|
CALL HB_INIT ; Do HBIOS initialization |
|
|
|
CALL CBOOT0 ; Execute main part of Cold Setup |
|
|
|
LD A,(TPABNK) |
|
|
|
CALL SELBNK ; Insure TPA is in context |
|
|
|
ELSE |
|
|
|
CALL HB_INIT ; Do HBIOS initialization |
|
|
|
CALL CBOOT0 ; Execute main part of Cold Setup |
|
|
|
ENDIF ; Banked |
|
|
|
|
|
|
|
@ -445,6 +407,112 @@ CALCOF: ADD HL,DE ; Add offset to Base ENV Addr |
|
|
|
LD H,(HL) ; and grab |
|
|
|
LD L,C ; Ptr to Segment now in HL |
|
|
|
RET ; return to caller |
|
|
|
|
|
|
|
;..... |
|
|
|
; HBIOS Initialization |
|
|
|
|
|
|
|
HB_INIT: |
|
|
|
IF HB_DEBUG AND FALSE |
|
|
|
CALL PRTSTRD |
|
|
|
DEFB '[HB_INIT]',CR,LF,'$' |
|
|
|
ENDIF |
|
|
|
|
|
|
|
;; Setup RST 08 vector |
|
|
|
;LD A,0C3H ; $C3 = JP |
|
|
|
;LD (08H),A |
|
|
|
;LD HL,HBX_INVOKE |
|
|
|
;LD (09H),HL |
|
|
|
|
|
|
|
;IF BANKED |
|
|
|
; |
|
|
|
;; Copy vectors from TPA page zero to SYS page zero |
|
|
|
;LD BC,(TPABNK) ; C := TPABNK, B := SYSBNK |
|
|
|
;CALL XMOVE ; Set source/dest banks for copy |
|
|
|
;LD HL,0 ; Source address is zero |
|
|
|
;LD DE,0 ; Destination address is zero |
|
|
|
;LD BC,40H ; Copy 40H bytes |
|
|
|
;CALL MOVE ; Do it |
|
|
|
; |
|
|
|
;ENDIF ;BANKED |
|
|
|
|
|
|
|
IF HB_DEBUG |
|
|
|
|
|
|
|
CALL NEWLINE2 |
|
|
|
LD DE,HB_STR_TAG |
|
|
|
CALL WRITESTR |
|
|
|
|
|
|
|
LD DE,HB_STR_CSEG |
|
|
|
CALL WRITESTR |
|
|
|
LD BC,ORG_CSEG |
|
|
|
CALL PRTHEXWORD |
|
|
|
LD DE,HB_STR_DSEG |
|
|
|
CALL WRITESTR |
|
|
|
LD BC,ORG_DSEG |
|
|
|
CALL PRTHEXWORD |
|
|
|
|
|
|
|
IF BANKED |
|
|
|
LD DE,HB_STR_BANK2 |
|
|
|
CALL WRITESTR |
|
|
|
LD BC,ORG_BANK2 |
|
|
|
CALL PRTHEXWORD |
|
|
|
LD DE,HB_STR_B2RAM |
|
|
|
CALL WRITESTR |
|
|
|
LD BC,ORG_B2RAM |
|
|
|
CALL PRTHEXWORD |
|
|
|
LD DE,HB_STR_RESVD |
|
|
|
CALL WRITESTR |
|
|
|
LD BC,ORG_RESVD |
|
|
|
CALL PRTHEXWORD |
|
|
|
ENDIF ;BANKED |
|
|
|
|
|
|
|
CALL NEWLINE |
|
|
|
|
|
|
|
ENDIF ; [HB_DEBUG] |
|
|
|
|
|
|
|
; Update RAM and ROM DPB for true RAM/ROM sizes |
|
|
|
LD BC,HBF_MEMINFO ; HBIOS Memory Information |
|
|
|
CALL HBX_INVOKE ; Do it, D=ROM Banks, E=RAM Banks |
|
|
|
PUSH DE ; Save results |
|
|
|
LD HL,DPBROM+4 ; EXM byte of ROM DPB |
|
|
|
LD A,D ; ROM bank count to accum |
|
|
|
SUB HB_ROMRESV ; Less reserved ROM banks |
|
|
|
CALL HB_FIXDPB ; Adjust ROM DPB |
|
|
|
POP DE ; Recover memory info |
|
|
|
LD HL,DPBRAM+4 ; EXM byte of RAM DPB |
|
|
|
LD A,E ; ROM bank count to accum |
|
|
|
SUB HB_RAMRESV ; Less reserved RAM banks |
|
|
|
CALL HB_FIXDPB ; Adjust RAM DPB |
|
|
|
RET |
|
|
|
|
|
|
|
HB_FIXDPB: |
|
|
|
CP 16 ; 16 banks = 256 blocks |
|
|
|
LD E,0 ; Init EXM value to zero |
|
|
|
RL E ; Put CF in E |
|
|
|
LD (HL),E ; Save EXM |
|
|
|
LD D,0 ; Init blk cnt to bank cnt |
|
|
|
LD E,A ; " |
|
|
|
LD B,4 ; Multiply by 4 |
|
|
|
HB_FIXDPB1: |
|
|
|
SLA E ; ... to convert to |
|
|
|
RL D ; ... 2K block cnt |
|
|
|
DJNZ HB_FIXDPB1 ; Loop |
|
|
|
DEC DE ; Convert to blk cnt - 1 |
|
|
|
INC HL ; Point to LSB of DSM |
|
|
|
LD (HL),E ; Save LSB |
|
|
|
INC HL ; Point to MSB of DSM |
|
|
|
LD (HL),D ; Save it |
|
|
|
RET |
|
|
|
|
|
|
|
IF HB_DEBUG |
|
|
|
|
|
|
|
HB_STR_TAG: DB "HBIOS: $" |
|
|
|
HB_STR_CSEG: DB "CSEG=$" |
|
|
|
HB_STR_DSEG: DB ", DSEG=$" |
|
|
|
HB_STR_BANK2: DB ", BANK2=$" |
|
|
|
HB_STR_B2RAM: DB ", B2RAM=$" |
|
|
|
HB_STR_RESVD: DB ", RESVD=$" |
|
|
|
|
|
|
|
ENDIF ; HB_DEBUG |
|
|
|
|
|
|
|
; Block Move Parameters |
|
|
|
|
|
|
|
@ -720,4 +788,4 @@ BTTBL: DEFS 8 ; Initial WB DMA Block |
|
|
|
ENDIF |
|
|
|
;======================== End of CBOOT ============================= |
|
|
|
|
|
|
|
|
|
|
|
|