|
|
|
@ -1,7 +1,7 @@ |
|
|
|
;__________________________________________________________________________________________________ |
|
|
|
; |
|
|
|
; BANK1 |
|
|
|
;__________________________________________________________________________________________________ |
|
|
|
;================================================================================================== |
|
|
|
; HBIOS |
|
|
|
;================================================================================================== |
|
|
|
; |
|
|
|
|
|
|
|
; bnk1.asm 11/16/2012 dwg - specify hl=0 before calling N8V_INIT |
|
|
|
@ -14,7 +14,6 @@ |
|
|
|
; INCLUDE GENERIC STUFF |
|
|
|
; |
|
|
|
#INCLUDE "std.asm" |
|
|
|
|
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
; SYSTEM INITIALIZATION |
|
|
|
@ -24,140 +23,152 @@ |
|
|
|
; |
|
|
|
INITSYS: |
|
|
|
; |
|
|
|
; ANNOUNCE HBIOS |
|
|
|
; |
|
|
|
CALL NEWLINE |
|
|
|
CALL NEWLINE |
|
|
|
PRTX(STR_PLATFORM) |
|
|
|
PRTS(" @ $") |
|
|
|
LD HL,CPUFREQ |
|
|
|
CALL PRTDEC |
|
|
|
PRTS("MHz ROM=$") |
|
|
|
LD HL,ROMSIZE |
|
|
|
CALL PRTDEC |
|
|
|
PRTS("KB RAM=$") |
|
|
|
LD HL,RAMSIZE |
|
|
|
CALL PRTDEC |
|
|
|
PRTS("KB$") |
|
|
|
; |
|
|
|
; INSTALL HBIOS PROXY IN UPPER MEMORY |
|
|
|
; |
|
|
|
LD HL,HB_IMG |
|
|
|
LD DE,HB_LOC |
|
|
|
LD BC,HB_SIZ |
|
|
|
LDIR |
|
|
|
LD HL,HB_IMG ; HL := SOURCE OF HBIOS PROXY IMAGE |
|
|
|
LD DE,HB_LOC ; DE := DESTINATION TO INSTALL IT |
|
|
|
LD BC,HB_SIZ ; SIZE |
|
|
|
LDIR ; DO THE COPY |
|
|
|
; |
|
|
|
; DURING INITIALIZATION, CONSOLE IS UART! |
|
|
|
; POST-INITIALIZATION, WILL BE SWITCHED TO USER CONFIGURED CONSOLE |
|
|
|
; |
|
|
|
LD A,CIODEV_UART |
|
|
|
LD (CONDEV),A |
|
|
|
; |
|
|
|
; PERFORM DEVICE INITIALIZATION |
|
|
|
; |
|
|
|
LD B,HB_INITTBLLEN |
|
|
|
LD DE,HB_INITTBL |
|
|
|
INITSYS2: |
|
|
|
CALL NEWLINE |
|
|
|
LD A,(DE) |
|
|
|
LD L,A |
|
|
|
INC DE |
|
|
|
LD A,(DE) |
|
|
|
LD H,A |
|
|
|
INC DE |
|
|
|
PUSH DE |
|
|
|
PUSH BC |
|
|
|
CALL JPHL |
|
|
|
OR A |
|
|
|
JR Z,INITSYS3 |
|
|
|
PUSH AF |
|
|
|
CALL PC_SPACE |
|
|
|
POP AF |
|
|
|
CALL PC_LBKT |
|
|
|
CALL PRTHEXBYTE |
|
|
|
CALL PC_RBKT |
|
|
|
JR INITSYS4 |
|
|
|
INITSYS3: |
|
|
|
PRTS(" [OK]$") |
|
|
|
INITSYS4: |
|
|
|
POP BC |
|
|
|
POP DE |
|
|
|
DJNZ INITSYS2 |
|
|
|
; |
|
|
|
; SET UP THE DEFAULT DISK BUFFER ADDRESS |
|
|
|
; |
|
|
|
LD HL,$8000 ; DEFAULT DISK XFR BUF ADDRESS |
|
|
|
LD (DIOBUF),HL ; SAVE IT |
|
|
|
; |
|
|
|
#IF (PLATFORM != PLT_N8) |
|
|
|
; NOW SWITCH TO USER CONFIGURED CONSOLE |
|
|
|
; |
|
|
|
#IF (PLATFORM == PLT_N8) |
|
|
|
LD A,DEFCON |
|
|
|
#ELSE |
|
|
|
IN A,(RTC) ; RTC PORT, BIT 6 HAS STATE OF CONFIG JUMPER |
|
|
|
LD A,DEFCON ; ASSUME WE WANT DEFAULT CONSOLE |
|
|
|
BIT 6,A ; BIT 6 HAS CONFIG JUMPER STATE |
|
|
|
LD A,DEFCON ; ASSUME WE WANT DEFAULT CONSOLE |
|
|
|
JR NZ,INITSYS1 ; IF NZ, JUMPER OPEN, DEF CON IS CORRECT |
|
|
|
LD A,ALTCON ; JUMPER SHORTED, USE ALTERNATE CONSOLE |
|
|
|
INITSYS1: |
|
|
|
LD (CONDEV),A ; SET THE ACTIVE CONSOLE DEVICE |
|
|
|
#ENDIF |
|
|
|
LD (CONDEV),A ; SET THE ACTIVE CONSOLE DEVICE |
|
|
|
; |
|
|
|
; PERFORM INTERRUPT INITIALISATION |
|
|
|
; DISPLAY THE POST-INITIALIZATION BANNER |
|
|
|
; |
|
|
|
#IF (INTMODE = 2) |
|
|
|
LD A,0FFH ; INTERRUPT VECTOR TABLE PAGE |
|
|
|
LD I,A ; INTERRUPT VECTOR REGISTER |
|
|
|
IM 2 ; MODE 2 INTERRUPTS |
|
|
|
#IF (PLATFORM = PLT_N8) |
|
|
|
XOR A ; PUT Z180 VECTORS ON PAGE BOUNDARY |
|
|
|
OUT (CPU_IL),A |
|
|
|
#ENDIF |
|
|
|
#IF ((PLATFORM = PLT_N8VEM) & (ZPBASE !=0)) |
|
|
|
; INIT VECTORS ON ZILOG PERIPHERALS BOARD |
|
|
|
; INIT Z80-CTC |
|
|
|
XOR A ; VECTOR AT FF00H |
|
|
|
OUT (ZPBASE+0),A ; ALL CHANNELS |
|
|
|
|
|
|
|
; INIT Z80-PIO1 |
|
|
|
LD A,08H ; VECTOR AT FF08H |
|
|
|
OUT (ZPBASE+0AH),A ; PORT A |
|
|
|
LD A,0AH ; VECTOR AT FF0AH |
|
|
|
OUT (ZPBASE+0BH),A ; PORT B |
|
|
|
|
|
|
|
; INIT Z80-PIO2 |
|
|
|
LD A,0CH ; VECTOR AT FF0CH |
|
|
|
OUT (ZPBASE+0EH),A ; PORT A |
|
|
|
LD A,0EH ; VECTOR AT FF0EH |
|
|
|
OUT (ZPBASE+0FH),A ; PORT B |
|
|
|
|
|
|
|
; INIT Z80-DART/SIO |
|
|
|
LD A,02 ; POINT TO REGISTER 2 |
|
|
|
OUT (ZPBASE+7),A ; CHANNEL B COMMAND |
|
|
|
LD A,10H ; VECTOR AT FF10H |
|
|
|
OUT (ZPBASE+7),A ; ONE VECTOR FOR WHOLE CHIP |
|
|
|
#ENDIF |
|
|
|
#IF ((PLATFORM = PLT_N8VEM) & (PIO4BASE !=0)) |
|
|
|
; INIT VECTORS ON A 4PIO BOARD |
|
|
|
XOR A ; VECTOR AT FF00H |
|
|
|
OUT (PIO4BASE+1) ; PIO0 PORT A |
|
|
|
LD A,02 ; VECTOR AT FF02H |
|
|
|
OUT (PIO4BASE+3) ; PIO0 PORT B |
|
|
|
LD A,04 ; VECTOR AT FF04H |
|
|
|
OUT (PIO4BASE+5) ; PIO1 PORT A |
|
|
|
LD A,06 ; VECTOR AT FF02H |
|
|
|
OUT (PIO4BASE+7) ; PIO1 PORT B |
|
|
|
LD A,08 ; VECTOR AT FF02H |
|
|
|
OUT (PIO4BASE+9) ; PIO2 PORT A |
|
|
|
LD A,0AH ; VECTOR AT FF02H |
|
|
|
OUT (PIO4BASE+B) ; PIO2 PORT B |
|
|
|
LD A,0CH ; VECTOR AT FF02H |
|
|
|
OUT (PIO4BASE+D) ; PIO3 PORT A |
|
|
|
LD A,0EH ; VECTOR AT FF02H |
|
|
|
OUT (PIO4BASE+F) ; PIO3 PORT B |
|
|
|
#ENDIF |
|
|
|
#ENDIF |
|
|
|
CALL NEWLINE |
|
|
|
CALL NEWLINE |
|
|
|
PRTX(STR_BANNER) |
|
|
|
CALL NEWLINE |
|
|
|
; |
|
|
|
; PERFORM DEVICE INITIALIZATION |
|
|
|
RET |
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
; TABLE OF INITIALIZATION ENTRY POINTS |
|
|
|
;================================================================================================== |
|
|
|
; |
|
|
|
HB_INITTBL: |
|
|
|
#IF (UARTENABLE) |
|
|
|
CALL UART_INIT |
|
|
|
.DW UART_INIT |
|
|
|
#ENDIF |
|
|
|
#IF (VDUENABLE) |
|
|
|
CALL VDU_INIT |
|
|
|
.DW VDU_INIT |
|
|
|
#ENDIF |
|
|
|
#IF (CVDUENABLE) |
|
|
|
CALL CVDU_INIT |
|
|
|
.DW CVDU_INIT |
|
|
|
#ENDIF |
|
|
|
#IF (UPD7220ENABLE) |
|
|
|
CALL UPD7220_INIT |
|
|
|
.DW UPD7220_INIT |
|
|
|
#ENDIF |
|
|
|
#IF (N8VENABLE) |
|
|
|
LD HL,CHARSET ; tell init to use built-in bitmaps |
|
|
|
CALL N8V_VDAINI |
|
|
|
.DW N8V_INIT |
|
|
|
#ENDIF |
|
|
|
#IF (PRPENABLE) |
|
|
|
CALL PRP_INIT |
|
|
|
.DW PRP_INIT |
|
|
|
#ENDIF |
|
|
|
#IF (PPPENABLE) |
|
|
|
CALL PPP_INIT |
|
|
|
.DW PPP_INIT |
|
|
|
#ENDIF |
|
|
|
#IF (DSKYENABLE) |
|
|
|
CALL DSKY_INIT |
|
|
|
.DW DSKY_INIT |
|
|
|
#ENDIF |
|
|
|
#IF (FDENABLE) |
|
|
|
CALL FD_INIT |
|
|
|
.DW FD_INIT |
|
|
|
#ENDIF |
|
|
|
#IF (IDEENABLE) |
|
|
|
CALL IDE_INIT |
|
|
|
.DW IDE_INIT |
|
|
|
#ENDIF |
|
|
|
#IF (PPIDEENABLE) |
|
|
|
CALL PPIDE_INIT |
|
|
|
.DW PPIDE_INIT |
|
|
|
#ENDIF |
|
|
|
#IF (SDENABLE) |
|
|
|
CALL SD_INIT |
|
|
|
.DW SD_INIT |
|
|
|
#ENDIF |
|
|
|
#IF (HDSKENABLE) |
|
|
|
CALL HDSK_INIT |
|
|
|
.DW HDSK_INIT |
|
|
|
#ENDIF |
|
|
|
#IF (PPKENABLE) |
|
|
|
CALL PPK_INIT |
|
|
|
.DW PPK_INIT |
|
|
|
#ENDIF |
|
|
|
#IF (KBDENABLE) |
|
|
|
CALL KBD_INIT |
|
|
|
.DW KBD_INIT |
|
|
|
#ENDIF |
|
|
|
#IF (TTYENABLE) |
|
|
|
CALL TTY_INIT |
|
|
|
.DW TTY_INIT |
|
|
|
#ENDIF |
|
|
|
#IF (ANSIENABLE) |
|
|
|
CALL ANSI_INIT |
|
|
|
.DW ANSI_INIT |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
LD DE,STR_BANNER |
|
|
|
CALL WRITESTR |
|
|
|
; |
|
|
|
RET |
|
|
|
HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2) |
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
; IDLE |
|
|
|
@ -727,10 +738,10 @@ SIZ_ANSI .EQU $ - ORG_ANSI |
|
|
|
#INCLUDE "util.asm" |
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
; BANK ONE GLOBAL DATA |
|
|
|
; HBIOS GLOBAL DATA |
|
|
|
;================================================================================================== |
|
|
|
; |
|
|
|
CONDEV .DB DEFCON |
|
|
|
CONDEV .DB CIODEV_UART |
|
|
|
; |
|
|
|
IDLECOUNT .DB 0 |
|
|
|
; |
|
|
|
@ -745,18 +756,20 @@ DIOBUF .DW $FD00 ; PTR TO 512 BYTE DISK XFR BUFFER |
|
|
|
; |
|
|
|
STR_BANNER .DB "N8VEM HBIOS v", BIOSVER, " (" |
|
|
|
VAR_LOC .DB VARIANT, "-" |
|
|
|
TST_LOC .DB TIMESTAMP, ")\r\n" |
|
|
|
.DB PLATFORM_NAME, DSKYLBL, VDULBL, CVDULBL, UPD7220LBL, N8VLBL, |
|
|
|
.DB FDLBL, IDELBL, PPIDELBL, SDLBL, PRPLBL, PPPLBL, HDSKLBL, "\r\n$" |
|
|
|
TST_LOC .DB TIMESTAMP, ")" |
|
|
|
; .DB "\r\n", PLATFORM_NAME, DSKYLBL, VDULBL, CVDULBL, UPD7220LBL, N8VLBL |
|
|
|
; .DB FDLBL, IDELBL, PPIDELBL, SDLBL, PRPLBL, PPPLBL, HDSKLBL |
|
|
|
.DB "$" |
|
|
|
STR_PLATFORM .DB PLATFORM_NAME, "$" |
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
; FILL REMAINDER OF BANK |
|
|
|
; FILL REMAINDER OF HBIOS |
|
|
|
;================================================================================================== |
|
|
|
; |
|
|
|
SLACK: .EQU (7F00H - $) |
|
|
|
.FILL SLACK,0FFH |
|
|
|
; |
|
|
|
.ECHO "BNK1 space remaining: " |
|
|
|
.ECHO "HBIOS space remaining: " |
|
|
|
.ECHO SLACK |
|
|
|
.ECHO " bytes.\n" |
|
|
|
; |
|
|
|
@ -775,26 +788,8 @@ HB_IMG .EQU $ |
|
|
|
; |
|
|
|
; AREA RESERVED FOR UP TO 16 INTERRUPT VECTOR ENTRIES (MODE 2) |
|
|
|
; |
|
|
|
; DEFAULT VECTORS ALL POINT TO DUMMY INTERRUPT SERVICE ROUTINE |
|
|
|
HB_IVT: ; *** = NOT USED |
|
|
|
; VECTOR ADDR N8 4PIO ZILOG PERIPHERAL |
|
|
|
.DW DUMISR ; FF00 /INT1 PIO0 A CTC CHANNEL 0 |
|
|
|
.DW DUMISR ; FF02 /INT2 PIO0 B CTC CHANNEL 1 |
|
|
|
.DW DUMISR ; FF04 PRT0 PIO1 A CTC CHANNEL 2 |
|
|
|
.DW DUMISR ; FF06 PRT1 PIO1 B CTC CHANNEL 3 |
|
|
|
.DW DUMISR ; FF08 DMA0 PIO2 A PIO1 A |
|
|
|
.DW DUMISR ; FF0A DMA1 PIO2 B PIO1 B |
|
|
|
.DW DUMISR ; FF0C CSI/O PIO3 A PIO2 A |
|
|
|
.DW DUMISR ; FF0E ASCI0 PIO3 B PIO2 B |
|
|
|
.DW DUMISR ; FF10 ASCI1 *** DART - ANY OR CH.B TX EMPTY |
|
|
|
.DW DUMISR ; FF12 *** *** DART CH.B EXTERNAL STATUS CHANGE |
|
|
|
.DW DUMISR ; FF14 *** *** DART CH.B RX CHAR AVAILABLE |
|
|
|
.DW DUMISR ; FF16 *** *** DART CH.B SPECIAL RECEIVE CONDITION |
|
|
|
.DW DUMISR ; FF18 *** *** DART CH.A TX EMPTY |
|
|
|
.DW DUMISR ; FF1A *** *** DART CH.A EXTERNAL STATUS CHANGE |
|
|
|
.DW DUMISR ; FF1C *** *** DART CH.A RX CHAR AVAILABLE |
|
|
|
.DW DUMISR ; FF1E *** *** DART CH.A SPECIAL RECEIVE CONDITION |
|
|
|
; .FILL 20H,0FFH |
|
|
|
HB_IVT: |
|
|
|
.FILL 20H,0FFH |
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
; HBIOS INITIALIZATION |
|
|
|
@ -853,7 +848,7 @@ HB_ENTRY: |
|
|
|
PGRAMF(1) ; MAP RAM PAGE 1 INTO LOWER 32K |
|
|
|
|
|
|
|
LD (HB_STKSAV),SP ; SAVE ORIGINAL STACK FRAME |
|
|
|
LD SP,8000H ; SETUP NEW STACK FRAME AT END OF BANK 1 |
|
|
|
LD SP,8000H ; SETUP NEW STACK FRAME AT END OF HBIOS |
|
|
|
|
|
|
|
CALL BIOS_DISPATCH ; CALL HBIOS FUNCTION DISPATCHER |
|
|
|
|
|
|
|
@ -869,17 +864,8 @@ HB_ENTRY: |
|
|
|
; |
|
|
|
HB_STKSAV .DW 0 ; PREVIOUS STACK POINTER |
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
; DUMMY INTERRUPT SERVICE ROUTINE |
|
|
|
;================================================================================================== |
|
|
|
; |
|
|
|
HB_DUMISR: |
|
|
|
DUMISR .EQU $ |
|
|
|
EI ; RE-ENABLE INTERRUPTS |
|
|
|
RETI ; RETURN FROM INTERRUPT |
|
|
|
; |
|
|
|
HB_SLACK .EQU (HB_END - $) |
|
|
|
.ECHO "HBIOS space remaining: " |
|
|
|
.ECHO "STACK space remaining: " |
|
|
|
.ECHO HB_SLACK |
|
|
|
.ECHO " bytes.\n" |
|
|
|
; |