mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
BPBIOS Related Fixes
This commit is contained in:
@@ -501,12 +501,11 @@ DRVTBL: LD HL,DPHTBL ; Point to DPH table
|
||||
IF IDE
|
||||
INCLUDE HARDIDE.Z80
|
||||
ENDIF
|
||||
IF HDSK
|
||||
IF HBIOS
|
||||
INCLUDE HARDHB.Z80
|
||||
ELSE
|
||||
IF SIMHDSK
|
||||
INCLUDE HARDSIM.Z80
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF HBDSK
|
||||
INCLUDE HARDHB.Z80
|
||||
ENDIF
|
||||
PAGE
|
||||
ENDIF
|
||||
|
||||
@@ -370,7 +370,7 @@ BLKMV: POP BC ; And number of bytes to move
|
||||
|
||||
; Allocate disk buffer in HBIOS bank and
|
||||
; save it for use later in disk access.
|
||||
LD B,0F4H ; BIOS FUNC: ALLOCATE HEAP MEMORY
|
||||
LD B,0F6H ; BIOS FUNC: ALLOCATE HEAP MEMORY
|
||||
LD HL,512 ; 1 SECTOR, 512 BYTES
|
||||
CALL HBX_INVOKE ; DO IT
|
||||
CALL NZ,PANIC ; HANDLE ERROR
|
||||
@@ -454,12 +454,11 @@ MEMOK:
|
||||
IF IDE
|
||||
DEFB CR,LF,' GIDE Hard Disk Driver'
|
||||
ENDIF
|
||||
IF HDSK
|
||||
IF HBIOS
|
||||
DEFB CR,LF,' HBIOS Hard Disk Driver'
|
||||
ELSE
|
||||
IF SIMHDSK
|
||||
DEFB CR,LF,' SIMH Hard Disk Driver'
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF HBDSK
|
||||
DEFB CR,LF,' HBIOS Hard Disk Driver'
|
||||
ENDIF
|
||||
IF HDDMA
|
||||
DEFB ' (DMA-driven IO)'
|
||||
|
||||
@@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
|
||||
; (Pick 1 of 3 options below)
|
||||
SCSI EQU NO ; YES = Use SCSI Driver
|
||||
IDE EQU NO ; YES = Use IDE Driver
|
||||
HDSK EQU YES ; YES = Use SIMH HDSK Driver
|
||||
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
|
||||
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
|
||||
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
|
||||
; (DMA not implemented for GIDE)
|
||||
UNIT_0 EQU YES ; Hard Disk Physical Unit 1
|
||||
|
||||
@@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
|
||||
; (Pick 1 of 3 options below)
|
||||
SCSI EQU NO ; YES = Use SCSI Driver
|
||||
IDE EQU NO ; YES = Use IDE Driver
|
||||
HDSK EQU YES ; YES = Use SIMH HDSK Driver
|
||||
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
|
||||
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
|
||||
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
|
||||
; (DMA not implemented for GIDE)
|
||||
UNIT_0 EQU YES ; Hard Disk Physical Unit 1
|
||||
|
||||
@@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
|
||||
; (Pick 1 of 3 options below)
|
||||
SCSI EQU NO ; YES = Use SCSI Driver
|
||||
IDE EQU NO ; YES = Use IDE Driver
|
||||
HDSK EQU YES ; YES = Use SIMH HDSK Driver
|
||||
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
|
||||
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
|
||||
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
|
||||
; (DMA not implemented for GIDE)
|
||||
UNIT_0 EQU YES ; Hard Disk Physical Unit 1
|
||||
|
||||
@@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
|
||||
; (Pick 1 of 3 options below)
|
||||
SCSI EQU NO ; YES = Use SCSI Driver
|
||||
IDE EQU NO ; YES = Use IDE Driver
|
||||
HDSK EQU YES ; YES = Use SIMH HDSK Driver
|
||||
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
|
||||
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
|
||||
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
|
||||
; (DMA not implemented for GIDE)
|
||||
UNIT_0 EQU YES ; Hard Disk Physical Unit 1
|
||||
|
||||
@@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
|
||||
; (Pick 1 of 3 options below)
|
||||
SCSI EQU NO ; YES = Use SCSI Driver
|
||||
IDE EQU NO ; YES = Use IDE Driver
|
||||
HDSK EQU YES ; YES = Use SIMH HDSK Driver
|
||||
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
|
||||
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
|
||||
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
|
||||
; (DMA not implemented for GIDE)
|
||||
UNIT_0 EQU YES ; Hard Disk Physical Unit 1
|
||||
|
||||
@@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
|
||||
; (Pick 1 of 3 options below)
|
||||
SCSI EQU NO ; YES = Use SCSI Driver
|
||||
IDE EQU NO ; YES = Use IDE Driver
|
||||
HDSK EQU YES ; YES = Use SIMH HDSK Driver
|
||||
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
|
||||
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
|
||||
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
|
||||
; (DMA not implemented for GIDE)
|
||||
UNIT_0 EQU YES ; Hard Disk Physical Unit 1
|
||||
|
||||
@@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
|
||||
; (Pick 1 of 3 options below)
|
||||
SCSI EQU NO ; YES = Use SCSI Driver
|
||||
IDE EQU NO ; YES = Use IDE Driver
|
||||
HDSK EQU YES ; YES = Use SIMH HDSK Driver
|
||||
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
|
||||
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
|
||||
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
|
||||
; (DMA not implemented for GIDE)
|
||||
UNIT_0 EQU YES ; Hard Disk Physical Unit 1
|
||||
|
||||
@@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
|
||||
; (Pick 1 of 3 options below)
|
||||
SCSI EQU NO ; YES = Use SCSI Driver
|
||||
IDE EQU NO ; YES = Use IDE Driver
|
||||
HDSK EQU YES ; YES = Use SIMH HDSK Driver
|
||||
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
|
||||
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
|
||||
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
|
||||
; (DMA not implemented for GIDE)
|
||||
UNIT_0 EQU YES ; Hard Disk Physical Unit 1
|
||||
|
||||
@@ -93,7 +93,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
|
||||
; (Pick 1 of 3 options below)
|
||||
SCSI EQU NO ; YES = Use SCSI Driver
|
||||
IDE EQU NO ; YES = Use IDE Driver
|
||||
HDSK EQU YES ; YES = Use SIMH HDSK Driver
|
||||
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
|
||||
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
|
||||
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
|
||||
; (DMA not implemented for GIDE)
|
||||
UNIT_0 EQU YES ; Hard Disk Physical Unit 1
|
||||
|
||||
@@ -93,7 +93,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
|
||||
; (Pick 1 of 3 options below)
|
||||
SCSI EQU NO ; YES = Use SCSI Driver
|
||||
IDE EQU NO ; YES = Use IDE Driver
|
||||
HDSK EQU YES ; YES = Use SIMH HDSK Driver
|
||||
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
|
||||
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
|
||||
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
|
||||
; (DMA not implemented for GIDE)
|
||||
UNIT_0 EQU YES ; Hard Disk Physical Unit 1
|
||||
|
||||
@@ -93,7 +93,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
|
||||
; (Pick 1 of 3 options below)
|
||||
SCSI EQU NO ; YES = Use SCSI Driver
|
||||
IDE EQU NO ; YES = Use IDE Driver
|
||||
HDSK EQU YES ; YES = Use SIMH HDSK Driver
|
||||
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
|
||||
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
|
||||
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
|
||||
; (DMA not implemented for GIDE)
|
||||
UNIT_0 EQU YES ; Hard Disk Physical Unit 1
|
||||
|
||||
@@ -33,10 +33,10 @@
|
||||
; NOTE: No Skew Table is needed since Hard Disk Format is locked
|
||||
|
||||
;.....
|
||||
; Partition A. SIMH HDSK0, Slice 0
|
||||
; Partition A. HBIOS Disk 0, Slice 0
|
||||
|
||||
IF DRV_E
|
||||
DEFB 'HDSK0:0 ','A'+80H ; Id - 10 bytes
|
||||
DEFB 'HBDSK0:0 ','A'+80H ; Id - 10 bytes
|
||||
DEFB FIXDSK ; Format type byte 0
|
||||
DEFB SPEED8+SEC512+ALC4K ; Format type byte 1
|
||||
DEFB -2 ; Skew factor (== Only the +/- sign used)
|
||||
@@ -60,10 +60,10 @@ DPB50: DEFW 64 ; Sctrs/Trk
|
||||
ENDIF
|
||||
|
||||
;.....
|
||||
; Partition B. SIMH HDSK0, Slice 1
|
||||
; Partition B. HBIOS Disk 0, Slice 1
|
||||
|
||||
IF DRV_F
|
||||
DEFB 'HDSK0:1 ','B'+80H ; Id - 10 bytes
|
||||
DEFB 'HBDSK0:1 ','B'+80H ; Id - 10 bytes
|
||||
DEFB FIXDSK ; Format type byte 0
|
||||
DEFB SPEED8+SEC512+ALC4K ; Format type byte 1
|
||||
DEFB -2 ; Skew factor
|
||||
@@ -87,10 +87,10 @@ DPB51: DEFW 64 ; Scts/Trk
|
||||
ENDIF
|
||||
|
||||
;.....
|
||||
; Partition C. SIMH HDSK0, Slice 2
|
||||
; Partition C. HBIOS Disk 0, Slice 2
|
||||
|
||||
IF DRV_G
|
||||
DEFB 'HDSK0:2 ','C'+80H ; Id - 10 bytes
|
||||
DEFB 'HBDSK0:2 ','C'+80H ; Id - 10 bytes
|
||||
DEFB FIXDSK ; Format type byte 0
|
||||
DEFB SPEED8+SEC512+ALC4K ; Format type byte 1
|
||||
DEFB -2 ; Skew factor
|
||||
@@ -114,10 +114,10 @@ DPB52: DEFW 64 ; Scts/Trk
|
||||
ENDIF
|
||||
|
||||
;.....
|
||||
; Partition D. SIMH HDSK0, Slice 3
|
||||
; Partition D. HBIOS Disk 0, Slice 3
|
||||
|
||||
IF DRV_H
|
||||
DEFB 'HDSK0:3 ','D'+80H ; Id - 10 bytes
|
||||
DEFB 'HBDSK0:3 ','D'+80H ; Id - 10 bytes
|
||||
DEFB FIXDSK ; Format type byte 0
|
||||
DEFB SPEED8+SEC512+ALC4K ; Format type byte 1
|
||||
DEFB -2 ; Skew factor
|
||||
@@ -141,10 +141,10 @@ DPB53: DEFW 64 ; Scts/Trk
|
||||
ENDIF
|
||||
|
||||
;.....
|
||||
; Partition A. SIMH HDSK1, Slice 0
|
||||
; Partition A. HBIOS Disk 1, Slice 0
|
||||
|
||||
IF DRV_F
|
||||
DEFB 'HDSK1:0 ','A'+80H ; Id - 10 bytes
|
||||
IF DRV_I
|
||||
DEFB 'HBDSK1:0 ','E'+80H ; Id - 10 bytes
|
||||
DEFB FIXDSK ; Format type byte 0
|
||||
DEFB SPEED8+SEC512+ALC4K ; Format type byte 1
|
||||
DEFB -2 ; Skew factor (== Only the +/- sign used)
|
||||
@@ -168,10 +168,10 @@ DPB54: DEFW 64 ; Sctrs/Trk
|
||||
ENDIF
|
||||
|
||||
;.....
|
||||
; Partition B. SIMH HDSK1, Slice 1
|
||||
; Partition B. HBIOS Disk 1, Slice 1
|
||||
|
||||
IF DRV_G
|
||||
DEFB 'HDSK1:1 ','B'+80H ; Id - 10 bytes
|
||||
IF DRV_J
|
||||
DEFB 'HBDSK1:1 ','F'+80H ; Id - 10 bytes
|
||||
DEFB FIXDSK ; Format type byte 0
|
||||
DEFB SPEED8+SEC512+ALC4K ; Format type byte 1
|
||||
DEFB -2 ; Skew factor
|
||||
@@ -195,10 +195,10 @@ DPB55: DEFW 64 ; Scts/Trk
|
||||
ENDIF
|
||||
|
||||
;.....
|
||||
; Partition C. SIMH HDSK1, Slice 2
|
||||
; Partition C. HBIOS Disk 1, Slice 2
|
||||
|
||||
IF DRV_H
|
||||
DEFB 'HDSK1:2 ','C'+80H ; Id - 10 bytes
|
||||
IF DRV_K
|
||||
DEFB 'HBDSK1:2 ','G'+80H ; Id - 10 bytes
|
||||
DEFB FIXDSK ; Format type byte 0
|
||||
DEFB SPEED8+SEC512+ALC4K ; Format type byte 1
|
||||
DEFB -2 ; Skew factor
|
||||
@@ -222,10 +222,10 @@ DPB56: DEFW 64 ; Scts/Trk
|
||||
ENDIF
|
||||
|
||||
;.....
|
||||
; Partition D. SIMH HDSK1, Slice 3
|
||||
; Partition D. HBIOS Disk 1, Slice 3
|
||||
|
||||
IF DRV_I
|
||||
DEFB 'HDSK1:3 ','D'+80H ; Id - 10 bytes
|
||||
IF DRV_L
|
||||
DEFB 'HBDSK1:3 ','H'+80H ; Id - 10 bytes
|
||||
DEFB FIXDSK ; Format type byte 0
|
||||
DEFB SPEED8+SEC512+ALC4K ; Format type byte 1
|
||||
DEFB -2 ; Skew factor
|
||||
@@ -259,7 +259,6 @@ DPB57: DEFW 64 ; Scts/Trk
|
||||
DEFB 16 ; Logical Sectors per track
|
||||
DEFB 0 ; Physical tracks/side (No Meaning in HD)
|
||||
|
||||
;HSIZ8 EQU 464 ; Number of blocks in Fourth Logical Drive
|
||||
HSIZ8 EQU HB_ROMBLKS
|
||||
|
||||
DPB58: DEFW 64 ; Scts/Trk
|
||||
@@ -286,7 +285,6 @@ DPB58: DEFW 64 ; Scts/Trk
|
||||
DEFB 16 ; Logical Sectors per track
|
||||
DEFB 0 ; Physical tracks/side (No Meaning in HD)
|
||||
|
||||
;HSIZ9 EQU 192 ; Number of blocks in Fourth Logical Drive
|
||||
HSIZ9 EQU HB_RAMBLKS
|
||||
|
||||
DPB59: DEFW 64 ; Scts/Trk
|
||||
|
||||
@@ -3,33 +3,6 @@
|
||||
; *****************************
|
||||
;
|
||||
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
;;
|
||||
;; CHARACTER DEVICES (ONLY FIRST NIBBLE RELEVANT, SECOND NIBBLE RESERVED FOR UNIT)
|
||||
;;
|
||||
;HBCIO_UART EQU 000H
|
||||
;HBCIO_ASCI EQU 010H
|
||||
;HBCIO_VDU EQU 020H
|
||||
;HBCIO_CVDU EQU 030H
|
||||
;HBCIO_UPD7220 EQU 040H
|
||||
;HBCIO_N8V EQU 050H
|
||||
;HBCIO_PRPCON EQU 060H
|
||||
;HBCIO_PPPCON EQU 070H
|
||||
;HBCIO_CRT EQU 0D0H
|
||||
;HBCIO_BAT EQU 0E0H
|
||||
;HBCIO_NUL EQU 0F0H
|
||||
;;
|
||||
;; DISK DEVICES (ONLY FIRST NIBBLE RELEVANT, SECOND NIBBLE RESERVED FOR UNIT)
|
||||
;;
|
||||
;HBDEV_MD EQU 000H
|
||||
;HBDEV_FD EQU 010H
|
||||
;HBDEV_RF EQU 020H
|
||||
;HBDEV_IDE EQU 030H
|
||||
;HBDEV_ATAPI EQU 040H
|
||||
;HBDEV_PPIDE EQU 050H
|
||||
;HBDEV_SD EQU 060H
|
||||
;HBDEV_PRPSD EQU 070H
|
||||
;HBDEV_PPPSD EQU 080H
|
||||
;HBDEV_HDSK EQU 090H
|
||||
;
|
||||
HB_DEFBNK EQU BID_USR ; Default bank number
|
||||
;
|
||||
@@ -39,6 +12,23 @@ HB_DISPATCH EQU 0403H
|
||||
;
|
||||
; PLATFORM SPECIFIC CONSTANTS
|
||||
;
|
||||
IF N8VEM OR ZETA OR ZETA2
|
||||
SBC_BASE EQU 60H
|
||||
ENDIF
|
||||
|
||||
IF N8VEM OR ZETA
|
||||
MPCL_RAM EQU SBC_BASE + 18H ; BASE IO ADDRESS OF RAM MEMORY PAGER CONFIGURATION LATCH
|
||||
MPCL_ROM EQU SBC_BASE + 1CH ; BASE IO ADDRESS OF ROM MEMORY PAGER CONFIGURATION LATCH
|
||||
ENDIF
|
||||
|
||||
IF ZETA2
|
||||
MPGSEL_0 EQU SBC_BASE + 18H
|
||||
MPGSEL_1 EQU SBC_BASE + 19H
|
||||
MPGSEL_2 EQU SBC_BASE + 1AH
|
||||
MPGSEL_3 EQU SBC_BASE + 1BH
|
||||
MPGENA EQU SBC_BASE + 1CH
|
||||
ENDIF
|
||||
|
||||
IF N8
|
||||
N8_BASE EQU 80H ; BASE I/O ADDRESS BOARD PERIPHERALS (NON-CPU)
|
||||
ACR EQU N8_BASE + 14H ; AUXILLARY CONTROL REGISTER
|
||||
@@ -61,7 +51,7 @@ HB_XFCIMG EQU $
|
||||
|
||||
.PHASE HB_XFC
|
||||
HB_CURBNK DB 0
|
||||
HB_PRVBNK DB 0 ; DEPRECATED!!!
|
||||
HB_INVBNK DB 0
|
||||
HB_SRCADR DW 0
|
||||
HB_SRCBNK DB 0
|
||||
HB_DSTADR DW 0
|
||||
@@ -126,14 +116,6 @@ HBX_INIT:
|
||||
|
||||
RET
|
||||
|
||||
;
|
||||
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
; SETBNK - Set memory bank specified in A.
|
||||
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
;
|
||||
HBX_SETBNK:
|
||||
JP HBX_BNKSEL
|
||||
|
||||
HBX_XCOPY:
|
||||
LD A,C
|
||||
LD (HB_SRCBNK),A
|
||||
@@ -147,6 +129,8 @@ HBX_COPY:
|
||||
CALL HBX_BNKCPY ; Do the work with private stack active
|
||||
LD SP,(HBX_STKSAV) ; Back to original stack
|
||||
RET
|
||||
|
||||
|
||||
|
||||
IF INTPXY
|
||||
;
|
||||
@@ -156,6 +140,21 @@ HBX_BNKSEL:
|
||||
IF N8VEM OR ZETA
|
||||
OUT (MPCL_ROM),A
|
||||
OUT (MPCL_RAM),A
|
||||
RET
|
||||
ENDIF
|
||||
|
||||
IF ZETA2
|
||||
BIT 7,A ; BIT 7 SET REQUESTS RAM PAGE
|
||||
JR Z,HBX_ROM ; NOT SET, SELECT ROM PAGE
|
||||
RES 7,A ; RAM PAGE REQUESTED: CLEAR ROM BIT
|
||||
ADD A,16 ; ADD 16 x 32K - RAM STARTS FROM 512K
|
||||
;
|
||||
HBX_ROM:
|
||||
RLCA ; TIMES 2 - GET 16K PAGE INSTEAD OF 32K
|
||||
OUT (MPGSEL_0),A ; BANK_0: 0K - 16K
|
||||
INC A ;
|
||||
OUT (MPGSEL_1),A ; BANK_1: 16K - 32K
|
||||
RET
|
||||
ENDIF
|
||||
|
||||
IF N8
|
||||
@@ -186,17 +185,8 @@ HBX_ROM:
|
||||
RLCA
|
||||
RLCA
|
||||
OUT0 (CPU_BBR),A
|
||||
RET
|
||||
ENDIF
|
||||
|
||||
RET
|
||||
;
|
||||
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
; GETBNK - Get current memory bank and return in A.
|
||||
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
;
|
||||
HBX_GETBNK:
|
||||
LD A,(HB_CURBNK)
|
||||
RET
|
||||
;
|
||||
; Entry point HBX_BNKCPY is for use internally and
|
||||
; assumes a valid stack already exists in upper 32K.
|
||||
@@ -266,31 +256,28 @@ HBX_COPY4:
|
||||
|
||||
RET ; Done
|
||||
;
|
||||
;==================================================================================================
|
||||
; HBIOS ENTRY FOR RST 08 PROCESSING
|
||||
;==================================================================================================
|
||||
;
|
||||
; ENTRY POINT FOR BIOS FUNCTIONS (TARGET OF RST 08)
|
||||
;
|
||||
HBX_INVOKE:
|
||||
LD (HBX_STKSAV),SP ; SAVE ORIGINAL STACK FRAME
|
||||
LD SP,HBX_STACK ; SETUP NEW STACK FRAME
|
||||
|
||||
LD A,(HB_CURBNK) ; GET CURRENT BANK
|
||||
LD (HBX_INVBNK),A ; SETUP TO RESTORE AT EXIT
|
||||
LD (HB_INVBNK),A ; SAVE INVOCATION BANK
|
||||
|
||||
;DI
|
||||
LD SP,HBX_STACK ; SETUP NEW STACK FRAME
|
||||
LD A,BID_HB ; HBIOS BANK
|
||||
CALL HBX_BNKSEL ; SELECT IT
|
||||
;EI
|
||||
|
||||
CALL HB_DISPATCH ; CALL HBIOS FUNCTION DISPATCHER
|
||||
|
||||
;DI
|
||||
PUSH AF ; SAVE AF (FUNCTION RETURN)
|
||||
LD A,0FFH ; LOAD ORIGINAL BANK ($FF IS REPLACED AT ENTRY)
|
||||
HBX_INVBNK EQU $ - 1
|
||||
LD A,(HB_INVBNK) ; LOAD ORIGINAL BANK
|
||||
CALL HBX_BNKSEL ; SELECT IT
|
||||
POP AF ; RESTORE AF
|
||||
|
||||
LD SP,(HBX_STKSAV) ; RESTORE ORIGINAL STACK FRAME
|
||||
;EI
|
||||
|
||||
RET ; RETURN TO CALLER
|
||||
|
||||
@@ -303,25 +290,18 @@ HBX_INVBNK EQU $ - 1
|
||||
HBX_FRGETB:
|
||||
LD (HBX_STKSAV),SP ; Save current stack
|
||||
LD SP,HBX_STACK ; Activate our private stack
|
||||
|
||||
LD A,(HB_CURBNK) ; Get current bank
|
||||
LD (HBX_BNKSAV),A ; Save current bank
|
||||
|
||||
PUSH BC
|
||||
LD A,C
|
||||
DI
|
||||
|
||||
;DI
|
||||
CALL HBX_BNKSEL
|
||||
|
||||
LD C,(HL)
|
||||
LD A,(HBX_BNKSAV)
|
||||
|
||||
CALL HBX_BNKSEL
|
||||
|
||||
;WW EI
|
||||
;EI
|
||||
LD A,C
|
||||
POP BC
|
||||
|
||||
LD SP,(HBX_STKSAV) ; RESTORE ORIGINAL STACK FRAME
|
||||
RET
|
||||
|
||||
@@ -332,25 +312,18 @@ HBX_FRGETB:
|
||||
HBX_FRGETW:
|
||||
LD (HBX_STKSAV),SP ; Save current stack
|
||||
LD SP,HBX_STACK ; Activate our private stack
|
||||
|
||||
LD A,(HB_CURBNK) ; Get current bank
|
||||
LD (HBX_BNKSAV),A ; Save current bank
|
||||
|
||||
LD A,C
|
||||
DI
|
||||
|
||||
;DI
|
||||
CALL HBX_BNKSEL
|
||||
|
||||
LD E,(HL)
|
||||
INC HL
|
||||
LD D,(HL)
|
||||
DEC HL
|
||||
LD A,(HBX_BNKSAV)
|
||||
|
||||
CALL HBX_BNKSEL
|
||||
|
||||
;WW EI
|
||||
|
||||
;EI
|
||||
LD SP,(HBX_STKSAV) ; RESTORE ORIGINAL STACK FRAME
|
||||
RET
|
||||
|
||||
@@ -361,27 +334,20 @@ HBX_FRGETW:
|
||||
HBX_FRPUTB:
|
||||
LD (HBX_STKSAV),SP ; Save current stack
|
||||
LD SP,HBX_STACK ; Activate our private stack
|
||||
|
||||
PUSH AF
|
||||
LD A,(HB_CURBNK) ; Get current bank
|
||||
LD (HBX_BNKSAV),A ; Save current bank
|
||||
POP AF
|
||||
|
||||
PUSH BC
|
||||
LD B,A
|
||||
LD A,C
|
||||
DI
|
||||
|
||||
;DI
|
||||
CALL HBX_BNKSEL
|
||||
|
||||
LD (HL),B
|
||||
LD A,(HBX_BNKSAV)
|
||||
|
||||
CALL HBX_BNKSEL
|
||||
|
||||
;WW EI
|
||||
;EI
|
||||
POP BC
|
||||
|
||||
LD SP,(HBX_STKSAV) ; RESTORE ORIGINAL STACK FRAME
|
||||
RET
|
||||
|
||||
@@ -392,25 +358,18 @@ HBX_FRPUTB:
|
||||
HBX_FRPUTW:
|
||||
LD (HBX_STKSAV),SP ; Save current stack
|
||||
LD SP,HBX_STACK ; Activate our private stack
|
||||
|
||||
LD A,(HB_CURBNK) ; Get current bank
|
||||
LD (HBX_BNKSAV),A ; Save current bank
|
||||
|
||||
LD A,C
|
||||
DI
|
||||
|
||||
;DI
|
||||
CALL HBX_BNKSEL
|
||||
|
||||
LD (HL),E
|
||||
INC HL
|
||||
LD (HL),D
|
||||
DEC HL
|
||||
LD A,(HBX_BNKSAV)
|
||||
|
||||
CALL HBX_BNKSEL
|
||||
|
||||
;WW EI
|
||||
|
||||
;EI
|
||||
LD SP,(HBX_STKSAV) ; RESTORE ORIGINAL STACK FRAME
|
||||
RET
|
||||
|
||||
@@ -422,7 +381,6 @@ HBX_FRPUTW:
|
||||
DSEG
|
||||
|
||||
HB_DSKBUF DEFW 0 ; Address of physical disk buffer in HBIOS bank
|
||||
|
||||
HBX_BNKSAV DEFB 0 ; Saved bank id during HBIOS calls
|
||||
HBX_STKSAV DEFW 0 ; Saved stack pointer during HBIOS calls
|
||||
DEFS 64 ; Private stack for HBIOS
|
||||
@@ -431,7 +389,6 @@ HBX_STACK EQU $ ; Top of private stack
|
||||
IF INTPXY
|
||||
|
||||
HBX_RETBNK DEFB 0 ; Bank to activate on return from BNKCPY
|
||||
|
||||
HBX_BUF DEFS 80H ; Interbank copy buffer
|
||||
|
||||
ENDIF
|
||||
|
||||
@@ -30,7 +30,7 @@ BIOSTK: DEFB 0 ; NOP if not currently in bank,
|
||||
LD (USP-7),HL ; Save entry HL
|
||||
POP HL ; Retrieve caller's return address from stack
|
||||
LD (USP-5),HL ; ..and set in our stack for local return
|
||||
DI ; No interrupts while we play with the stack
|
||||
;DI ; No interrupts while we play with the stack
|
||||
LD (USP),SP ; Save User's Stack Pointer
|
||||
LD SP,USP-1 ; ..and point locally, saving 1 byte for Bank
|
||||
PUSH AF ; Save entry A and Flags
|
||||
@@ -43,15 +43,15 @@ BIOSTK: DEFB 0 ; NOP if not currently in bank,
|
||||
PUSH HL ; ..at USP-2 & 3
|
||||
LD SP,USP-7 ; Point stack pointer to do local return
|
||||
POP HL ; .restoring entry HL
|
||||
;WW EI ; ..enabling interrupts
|
||||
;EI ; ..enabling interrupts
|
||||
RET ; And return to caller
|
||||
|
||||
; Restore User Stack and Bank Routine
|
||||
|
||||
USRSTK: PUSH AF
|
||||
LD A,(USP-1) ; Get bank control byte from entry
|
||||
LD (CURBNK),A ; WW: I ADDED THIS, IS IT RIGHT???
|
||||
CALL HBX_SETBNK
|
||||
CALL HBX_BNKSEL
|
||||
LD (CURBNK),A
|
||||
XOR A
|
||||
LD (BIOSTK),A ; Patch NOP back in at start of code
|
||||
POP AF
|
||||
@@ -64,8 +64,8 @@ USRSTK: PUSH AF
|
||||
|
||||
FRCLR: PUSH AF ; Save any entry in AF
|
||||
LD A,(USP-1) ; Get bank control byte
|
||||
CALL HBX_BNKSEL
|
||||
LD (CURBNK),A ; WW: I ADDED THIS, IS IT RIGHT???
|
||||
CALL HBX_SETBNK
|
||||
XOR A
|
||||
LD (BIOSTK),A ; Patch NOP to enable stack switcher
|
||||
POP AF
|
||||
@@ -100,6 +100,7 @@ RETMEM: LD A,(CURBNK)
|
||||
|
||||
SELMEM: LD (USRBNK),A ; Update user bank
|
||||
;..fall thru to set specified bank..
|
||||
|
||||
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
; SELBNK - Switch Memory Bank to Bank in A and show as current.
|
||||
; Must preserve all Registers including Flags.
|
||||
@@ -107,8 +108,8 @@ SELMEM: LD (USRBNK),A ; Update user bank
|
||||
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
|
||||
SELBNK: PUSH AF ; Save regs
|
||||
SELBN0: LD (CURBNK),A ; Save as current bank #
|
||||
CALL HBX_SETBNK
|
||||
SELBN0: CALL HBX_BNKSEL
|
||||
LD (CURBNK),A ; Save as current bank #
|
||||
POP AF ; restore regs
|
||||
RET
|
||||
|
||||
|
||||
@@ -141,45 +141,44 @@ CNTRLR: DEFB 80H ; Controller Types recognized are:
|
||||
; 3- Seagate SCSI 8- Syquest SCSI
|
||||
; 4- Shugart 1610-4 Minimal SCSI 80H- GIDE (IDE/ATA)
|
||||
|
||||
; First drive (Parameters for Toshiba MK-1544 IDE)
|
||||
; First drive (Generic HBIOS drive configuration)
|
||||
|
||||
BITS DEFL 00000000B ; First HBIOS Hard Disk Drive
|
||||
|
||||
BITS DEFL 00000000B ; SCSI - Physical Device 0, Logical Unit 0
|
||||
; IDE - Drive 0 = Master
|
||||
BITS DEFL BITS+[UNIT_0 AND 10H] ; If active, set Bit 4
|
||||
|
||||
HDRV0: DEFB BITS ; Set Device, Unit, and Active bits
|
||||
DEFW 581 ; Number of Cylinders
|
||||
DEFB 2 ; Number of Heads
|
||||
DEFW 36 ; SCSI - Cylinder # to start reduced write
|
||||
; IDE - Number of Sectors Per Track
|
||||
DEFW 520 ; Number of Cylinders
|
||||
DEFB 16 ; Number of Heads
|
||||
DEFW 16 ; IDE - Number of Sectors Per Track
|
||||
DEFW 0000 ; Cylinder # to start precompensation
|
||||
DEFB 0 ; Step Rate (0=3ms, 1=28us, 2=12us)
|
||||
|
||||
; Second drive (Parameters for Seagate ST-125N SCSI)
|
||||
; Second drive (Generic HBIOS drive configuration)
|
||||
|
||||
BITS DEFL 00000001B ; Second HBIOS Hard Disk Drive
|
||||
|
||||
BITS DEFL 00000001B ; SCSI - Physical Device 1, Logical Unit 0
|
||||
; IDE - Drive 1 = Slave
|
||||
BITS DEFL BITS+[UNIT_1 AND 10H] ; If active, set Bit 4
|
||||
|
||||
HDRV1: DEFB BITS ; Set Device, Unit, and Active bits
|
||||
DEFW 615 ; Syquest ST-125N
|
||||
DEFB 4
|
||||
DEFW 0000
|
||||
DEFW 0000
|
||||
DEFB 0
|
||||
DEFW 520 ; Number of Cylinders
|
||||
DEFB 16 ; Number of Heads
|
||||
DEFW 16 ; IDE - Number of Sectors Per Track
|
||||
DEFW 0000 ; Cylinder # to start precompensation
|
||||
DEFB 0 ; Step Rate (0=3ms, 1=28us, 2=12us)
|
||||
|
||||
; Third drive (Parameters for Miniscribe 8425 SCSI)
|
||||
; Third drive (Generic HBIOS drive configuration)
|
||||
|
||||
BITS DEFL 00000010B ; Third HBIOS Hard Disk Drive
|
||||
|
||||
BITS DEFL 00000010B ; Physical Device 2, Logical Unit 0
|
||||
; IDE - (undefined)
|
||||
BITS DEFL BITS+[UNIT_2 AND 10H] ; If active, set Bit 4
|
||||
|
||||
DEFB BITS ; Set Device, Unit, and Active bits
|
||||
DEFW 615
|
||||
DEFB 4
|
||||
DEFW 615
|
||||
DEFW 300
|
||||
DEFB 2
|
||||
HDRV2: DEFB BITS ; Set Device, Unit, and Active bits
|
||||
DEFW 520 ; Number of Cylinders
|
||||
DEFB 16 ; Number of Heads
|
||||
DEFW 16 ; IDE - Number of Sectors Per Track
|
||||
DEFW 0000 ; Cylinder # to start precompensation
|
||||
DEFB 0 ; Step Rate (0=3ms, 1=28us, 2=12us)
|
||||
|
||||
DEFB 0,0,0,0,0 ; (Reserved)
|
||||
|
||||
|
||||
@@ -9,13 +9,13 @@
|
||||
; HBIOS configuration.
|
||||
;
|
||||
HBIOS EQU YES ; Use HBIOS functions
|
||||
;INTPXY EQU YES ; Internal HBIOS Proxy
|
||||
HBLOC EQU 0FE00H ; Location of HBIOS proxy (used if not INTPXY)
|
||||
;
|
||||
; Set exactly one of the following to YES to specify platform
|
||||
;
|
||||
N8VEM EQU NO
|
||||
ZETA EQU NO
|
||||
ZETA2 EQU NO
|
||||
N8 EQU NO
|
||||
MK4 EQU YES
|
||||
;
|
||||
@@ -24,16 +24,16 @@ MK4 EQU YES
|
||||
SIMHCLK EQU NO ; Direct SIMH clock access
|
||||
HBCLK EQU YES ; HBIOS clock driver
|
||||
;
|
||||
; Set HB_IODEV to appropriate console device
|
||||
;
|
||||
HB_IODEV EQU 0
|
||||
;
|
||||
; Set HB_HDDEV to appropriate hard disk driver
|
||||
;
|
||||
;;HB_HDDEV EQU HBDEV_HDSK ; SIMH HDSK Driver
|
||||
;;HB_HDDEV EQU HBDEV_IDE ; IDE Driver
|
||||
;HB_HDDEV EQU HBDEV_SD ; SD Card Driver
|
||||
HB_HDDEV EQU 2
|
||||
;
|
||||
; Set HB_MDDEV to appropriate memory disk driver
|
||||
;
|
||||
;HB_MDDEV EQU HBDEV_MD ; Memory Disk Driver
|
||||
HB_MDDEV EQU 0
|
||||
;
|
||||
; RAM/ROM disk sizes expressed as count of 2K blocks
|
||||
@@ -44,7 +44,7 @@ HB_ROMBLKS EQU 192 ; 512K - 128K reserved / 2K per block
|
||||
;
|
||||
; Layout of RAM banks
|
||||
;
|
||||
IF N8VEM OR ZETA OR MK4
|
||||
IF N8VEM OR ZETA OR ZETA2 OR MK4
|
||||
BID_RAMD EQU 80H
|
||||
BID_RAMM EQU 8BH
|
||||
BID_SYS EQU 8CH
|
||||
@@ -60,14 +60,6 @@ BID_HB EQU 9DH
|
||||
BID_USR EQU 9EH
|
||||
BID_COM EQU 9FH
|
||||
ENDIF
|
||||
;
|
||||
IF N8 OR MK4
|
||||
;HB_IODEV EQU HBCIO_ASCI
|
||||
; ELSE
|
||||
;HB_IODEV EQU HBCIO_UART
|
||||
ENDIF
|
||||
;
|
||||
HB_IODEV EQU 0
|
||||
;
|
||||
IF INTPXY
|
||||
MEMTOP EQU 0FFE0H - 1 ; Start of HBIOS 32 byte control block
|
||||
|
||||
@@ -9,13 +9,13 @@
|
||||
; HBIOS configuration.
|
||||
;
|
||||
HBIOS EQU YES ; Use HBIOS functions
|
||||
;INTPXY EQU YES ; Internal HBIOS Proxy
|
||||
HBLOC EQU 0FE00H ; Location of HBIOS proxy (used if not INTPXY)
|
||||
;
|
||||
; Set exactly one of the following to YES to specify platform
|
||||
;
|
||||
N8VEM EQU YES
|
||||
ZETA EQU NO
|
||||
ZETA2 EQU NO
|
||||
N8 EQU NO
|
||||
MK4 EQU NO
|
||||
;
|
||||
@@ -24,16 +24,16 @@ MK4 EQU NO
|
||||
SIMHCLK EQU NO ; Direct SIMH clock access
|
||||
HBCLK EQU YES ; HBIOS clock driver
|
||||
;
|
||||
; Set HB_IODEV to appropriate console device
|
||||
;
|
||||
HB_IODEV EQU 0
|
||||
;
|
||||
; Set HB_HDDEV to appropriate hard disk driver
|
||||
;
|
||||
;HB_HDDEV EQU HBDEV_HDSK ; SIMH HDSK Driver
|
||||
;;HB_HDDEV EQU HBDEV_IDE ; IDE Driver
|
||||
;;HB_HDDEV EQU HBDEV_SD ; SD Card Driver
|
||||
HB_HDDEV EQU 2
|
||||
;
|
||||
; Set HB_MDDEV to appropriate memory disk driver
|
||||
;
|
||||
;HB_MDDEV EQU HBDEV_MD ; Memory Disk Driver
|
||||
HB_MDDEV EQU 0
|
||||
;
|
||||
; RAM/ROM disk sizes expressed as count of 2K blocks
|
||||
@@ -44,7 +44,7 @@ HB_ROMBLKS EQU 192 ; 512K - 128K reserved / 2K per block
|
||||
;
|
||||
; Layout of RAM banks
|
||||
;
|
||||
IF N8VEM OR ZETA OR MK4
|
||||
IF N8VEM OR ZETA OR ZETA2 OR MK4
|
||||
BID_RAMD EQU 80H
|
||||
BID_RAMM EQU 8BH
|
||||
BID_SYS EQU 8CH
|
||||
@@ -60,14 +60,6 @@ BID_HB EQU 9DH
|
||||
BID_USR EQU 9EH
|
||||
BID_COM EQU 9FH
|
||||
ENDIF
|
||||
;
|
||||
IF N8 OR MK4
|
||||
;HB_IODEV EQU HBCIO_ASCI
|
||||
; ELSE
|
||||
;HB_IODEV EQU HBCIO_UART
|
||||
ENDIF
|
||||
;
|
||||
HB_IODEV EQU 0
|
||||
;
|
||||
IF INTPXY
|
||||
MEMTOP EQU 0FFE0H - 1 ; Start of HBIOS 32 byte control block
|
||||
|
||||
@@ -9,13 +9,13 @@
|
||||
; HBIOS configuration.
|
||||
;
|
||||
HBIOS EQU YES ; Use HBIOS functions
|
||||
;INTPXY EQU YES ; Internal HBIOS Proxy
|
||||
HBLOC EQU 0FE00H ; Location of HBIOS proxy (used if not INTPXY)
|
||||
;
|
||||
; Set exactly one of the following to YES to specify platform
|
||||
;
|
||||
N8VEM EQU YES
|
||||
ZETA EQU NO
|
||||
ZETA2 EQU NO
|
||||
N8 EQU NO
|
||||
MK4 EQU NO
|
||||
;
|
||||
@@ -24,17 +24,17 @@ MK4 EQU NO
|
||||
SIMHCLK EQU NO ; Direct SIMH clock access
|
||||
HBCLK EQU YES ; HBIOS clock driver
|
||||
;
|
||||
; Set HB_IODEV to appropriate console device
|
||||
;
|
||||
HB_IODEV EQU 0 ; Assume we want to use first HBIOS serial device
|
||||
;
|
||||
; Set HB_HDDEV to appropriate hard disk driver
|
||||
;
|
||||
;HB_HDDEV EQU HBDEV_HDSK ; SIMH HDSK Driver
|
||||
;;HB_HDDEV EQU HBDEV_IDE ; IDE Driver
|
||||
;;HB_HDDEV EQU HBDEV_SD ; SD Card Driver
|
||||
HB_HDDEV EQU 2
|
||||
HB_HDDEV EQU 2 ; Assumes disk device #2 is first hard disk device
|
||||
;
|
||||
; Set HB_MDDEV to appropriate memory disk driver
|
||||
;
|
||||
;HB_MDDEV EQU HBDEV_MD ; Memory Disk Driver
|
||||
HB_MDDEV EQU 0
|
||||
HB_MDDEV EQU 0 ; Assumes disk device #0 is ROM disk device
|
||||
;
|
||||
; RAM/ROM disk sizes expressed as count of 2K blocks
|
||||
;
|
||||
@@ -44,7 +44,7 @@ HB_ROMBLKS EQU 192 ; 512K - 128K reserved / 2K per block
|
||||
;
|
||||
; Layout of RAM banks
|
||||
;
|
||||
IF N8VEM OR ZETA OR MK4
|
||||
IF N8VEM OR ZETA OR ZETA2 OR MK4
|
||||
BID_RAMD EQU 80H
|
||||
BID_RAMM EQU 8BH
|
||||
BID_SYS EQU 8CH
|
||||
@@ -60,14 +60,6 @@ BID_HB EQU 9DH
|
||||
BID_USR EQU 9EH
|
||||
BID_COM EQU 9FH
|
||||
ENDIF
|
||||
;
|
||||
IF N8 OR MK4
|
||||
;HB_IODEV EQU HBCIO_ASCI
|
||||
; ELSE
|
||||
;HB_IODEV EQU HBCIO_UART
|
||||
ENDIF
|
||||
;
|
||||
HB_IODEV EQU 0
|
||||
;
|
||||
IF INTPXY
|
||||
MEMTOP EQU 0FFE0H - 1 ; Start of HBIOS 32 byte control block
|
||||
|
||||
@@ -321,13 +321,6 @@ STR_PC DB " PC=$"
|
||||
STR_SP DB " SP=$"
|
||||
;
|
||||
;==================================================================================================
|
||||
; MEMORY BANK MANAGEMENT
|
||||
;==================================================================================================
|
||||
;
|
||||
MPCL_RAM EQU 78H ; BASE IO ADDRESS OF RAM MEMORY PAGER CONFIGURATION LATCH
|
||||
MPCL_ROM EQU 7CH ; BASE IO ADDRESS OF ROM MEMORY PAGER CONFIGURATION LATCH
|
||||
;
|
||||
;==================================================================================================
|
||||
; DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
|
||||
@@ -9,7 +9,7 @@ set ZXBINDIR=%TOOLS%/cpm/bin/
|
||||
set ZXLIBDIR=%TOOLS%/cpm/lib/
|
||||
set ZXINCDIR=%TOOLS%/cpm/include/
|
||||
|
||||
rem set TEXOPT=-$D
|
||||
rem set TEXOPT=-$D -$Q
|
||||
|
||||
zx TEX21A PART1 %TEXOPT%
|
||||
zx TEX21A PART2 %TEXOPT%
|
||||
|
||||
@@ -171,18 +171,14 @@ DSRTC_GETTIM:
|
||||
CALL DSRTC_CLK2TIM ; CONVERT CLOCK TO TIME
|
||||
;
|
||||
; NOW COPY TO REAL DESTINATION (INTERBANK SAFE)
|
||||
; LD C,BID_BIOS ; SOURCE BANK IS HBIOS
|
||||
; LD A,(HB_CURBNK) ; GET CURRENT BANK
|
||||
; LD B,A ; .. AND USE AS DEST BANK
|
||||
; LD (HB_SRCBNK),BC ; SET COPY BANKS
|
||||
LD A,BID_BIOS ; COPY FROM BIOS BANK
|
||||
LD (HB_SRCBNK),A ; SET IT
|
||||
LD A,(HBX_INVBNK) ; COPY TO CURRENT USER BANK
|
||||
LD A,(HB_INVBNK) ; COPY TO CURRENT USER BANK
|
||||
LD (HB_DSTBNK),A ; SET IT
|
||||
LD HL,DSRTC_TIMBUF ; SOURCE ADR
|
||||
POP DE ; DEST ADR
|
||||
LD BC,6 ; LENGTH IS 6 BYTES
|
||||
CALL HBX_BNKCPY ; COPY THE CLOCK DATA
|
||||
CALL HB_BNKCPY ; COPY THE CLOCK DATA
|
||||
;
|
||||
; CLEAN UP AND RETURN
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
@@ -197,17 +193,13 @@ DSRTC_GETTIM:
|
||||
DSRTC_SETTIM:
|
||||
;
|
||||
; COPY INCOMING TIME DATA TO OUR TIME BUFFER
|
||||
; LD A,(HB_CURBNK) ; GET CURRENT BANK
|
||||
; LD C,A ; .. AND USE AS SOURCE BANK
|
||||
; LD B,BID_BIOS ; DESTINATION BANK IS HBIOS
|
||||
; LD (HB_SRCBNK),BC ; SET COPY BANKS
|
||||
LD A,(HBX_INVBNK) ; COPY FROM CURRENT USER BANK
|
||||
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,DSRTC_TIMBUF ; DEST ADR
|
||||
LD BC,6 ; LENGTH IS 6 BYTES
|
||||
CALL HBX_BNKCPY ; COPY THE CLOCK DATA
|
||||
CALL HB_BNKCPY ; COPY THE CLOCK DATA
|
||||
;
|
||||
; WRITE TO CLOCK
|
||||
LD HL,DSRTC_TIMBUF ; POINT TO TIME BUFFER
|
||||
|
||||
@@ -87,7 +87,7 @@ MODCNT .SET MODCNT + 1
|
||||
JP HB_START
|
||||
.DW ROM_SIG
|
||||
.FILL (008H - $),0FFH ; RST 8
|
||||
JP HBX_INVOKE ; INVOKE HBIOS FUNCTION
|
||||
JP HB_INVOKE ; INVOKE HBIOS FUNCTION
|
||||
.FILL (010H - $),0FFH ; RST 10
|
||||
RET
|
||||
.FILL (018H - $),0FFH ; RST 18
|
||||
@@ -206,7 +206,7 @@ HBX_IDENT:
|
||||
HBX_INVOKE:
|
||||
LD (HBX_STKSAV),SP ; SAVE ORIGINAL STACK FRAME
|
||||
LD A,(HB_CURBNK) ; GET CURRENT BANK
|
||||
LD (HBX_INVBNK),A ; SETUP TO RESTORE AT EXIT
|
||||
LD (HB_INVBNK),A ; SAVE INVOCATION BANK
|
||||
|
||||
HB_DI
|
||||
LD SP,HBX_STACK ; USE STACK FRAME IN HI MEM
|
||||
@@ -220,8 +220,7 @@ HBX_INVOKE:
|
||||
HB_DI
|
||||
LD SP,HBX_STACK ; USE STACK FRAME IN HI MEM
|
||||
PUSH AF ; SAVE AF (FUNCTION RETURN)
|
||||
LD A,$FF ; LOAD ORIGINAL BANK ($FF IS REPLACED AT ENTRY)
|
||||
HBX_INVBNK .EQU $ - 1
|
||||
LD A,(HB_INVBNK) ; LOAD ORIGINAL BANK
|
||||
CALL HBX_BNKSEL ; SELECT IT
|
||||
POP AF ; RESTORE AF
|
||||
LD SP,0 ; RESTORE ORIGINAL STACK FRAME
|
||||
@@ -516,7 +515,7 @@ HBX_BUF .FILL HBX_BUFSIZ,0
|
||||
#ELSE
|
||||
.DB BID_USR ; CURRENTLY ACTIVE LOW MEMORY BANK ID
|
||||
#ENDIF
|
||||
.DB $FF ; DEPRECATED!!!
|
||||
.DB 0 ; BANK ACTIVE AT TIME OF HBIOS CALL INVOCATION
|
||||
.DW 0 ; BNKCPY SOURCE ADDRESS
|
||||
.DB BID_USR ; BNKCPY SOURCE BANK ID
|
||||
.DW 0 ; BNKCPY DESTINATION ADDRESS
|
||||
@@ -1452,7 +1451,7 @@ SYS_DISPATCH:
|
||||
;
|
||||
SYS_SETBNK:
|
||||
PUSH HL ; SAVE INCOMING HL
|
||||
LD HL,HBX_INVBNK ; POINT TO HBIOS INVOKE BANK ID ADDRESS
|
||||
LD HL,HB_INVBNK ; POINT TO HBIOS INVOKE BANK ID ADDRESS
|
||||
LD A,(HL) ; GET EXISTING BANK ID TO A
|
||||
LD (HL),C ; UPDATE INVOKE BANK TO NEW BANK ID
|
||||
LD C,A ; PUT PREVIOUS BANK ID IN C FOR RETURN
|
||||
@@ -1463,7 +1462,7 @@ SYS_SETBNK:
|
||||
; GET ACTIVE MEMORY BANK
|
||||
;
|
||||
SYS_GETBNK:
|
||||
LD A,(HBX_INVBNK) ; GET THE ACTIVE MEMORY BANK
|
||||
LD A,(HB_INVBNK) ; GET THE ACTIVE MEMORY BANK
|
||||
LD C,A ; MOVE TO C
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
@@ -1529,7 +1528,7 @@ SYS_BNKCPY:
|
||||
;POP AF
|
||||
; *DEBUG* END
|
||||
|
||||
CALL HBX_BNKCPY
|
||||
CALL HB_BNKCPY
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
|
||||
@@ -153,7 +153,7 @@ HBX_XFC .EQU $10000 - $20 ; HBIOS PROXY INTERFACE AREA, 32 BYTES FIXED
|
||||
;
|
||||
HBX_XFCDAT .EQU HBX_XFC ; DATA PORTION OF HBIOS PROXY INTERFACE AREA
|
||||
HB_CURBNK .EQU HBX_XFCDAT + 0 ; CURRENTLY ACTIVE LOW MEMORY BANK ID
|
||||
;HB_PRVBNK .EQU HBX_XFCDAT + 1 ; PREVIOUS BANK (DEPRECATED)
|
||||
HB_INVBNK .EQU HBX_XFCDAT + 1 ; BANK ACTIVE AT TIME OF HBIOS CALL INVOCATION
|
||||
HB_SRCADR .EQU HBX_XFCDAT + 2 ; BNKCPY: DESTINATION BANK ID
|
||||
HB_SRCBNK .EQU HBX_XFCDAT + 4 ; BNKCPY: SOURCE BANK ID
|
||||
HB_DSTADR .EQU HBX_XFCDAT + 5 ; BNKCPY: DESTINATION ADDRESS
|
||||
|
||||
@@ -190,7 +190,7 @@ MD_READ:
|
||||
LD A,B ; GET DESTINATION BANK
|
||||
LD (HB_DSTBNK),A ; SET IT
|
||||
POP BC
|
||||
CALL HBX_BNKCPY ; DO THE INTERBANK COPY
|
||||
CALL HB_BNKCPY ; DO THE INTERBANK COPY
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
@@ -222,7 +222,7 @@ MD_WRITE:
|
||||
LD A,B ; GET DESTINATION BANK
|
||||
LD (HB_DSTBNK),A ; SET IT
|
||||
POP BC
|
||||
CALL HBX_BNKCPY ; DO THE INTERBANK COPY
|
||||
CALL HB_BNKCPY ; DO THE INTERBANK COPY
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
|
||||
@@ -66,12 +66,12 @@ SIMRTC_GETTIM:
|
||||
; NOW COPY TO REAL DESTINATION (INTERBANK SAFE)
|
||||
LD A,BID_BIOS ; COPY FROM BIOS BANK
|
||||
LD (HB_SRCBNK),A ; SET IT
|
||||
LD A,(HBX_INVBNK) ; COPY TO CURRENT USER BANK
|
||||
LD A,(HB_INVBNK) ; COPY TO CURRENT USER BANK
|
||||
LD (HB_DSTBNK),A ; SET IT
|
||||
LD HL,SIMRTC_BUF ; SOURCE ADR
|
||||
POP DE ; DEST ADR
|
||||
LD BC,SIMRTC_BUFSIZ ; LENGTH
|
||||
CALL HBX_BNKCPY ; COPY THE CLOCK DATA
|
||||
CALL HB_BNKCPY ; COPY THE CLOCK DATA
|
||||
;
|
||||
LD DE,60 ; DELAY 60 * 16US = ~1MS
|
||||
CALL VDELAY ; SLOW DOWN SIMH FOR CLOCK TICKING TEST
|
||||
@@ -95,13 +95,13 @@ SIMRTC_GETTIM0:
|
||||
;
|
||||
SIMRTC_SETTIM:
|
||||
; COPY TO TEMP BUF
|
||||
LD A,(HBX_INVBNK) ; COPY FROM CURRENT USER BANK
|
||||
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,SIMRTC_BUF ; DEST ADR
|
||||
LD BC,SIMRTC_BUFSIZ ; LENGTH
|
||||
CALL HBX_BNKCPY ; COPY THE CLOCK DATA
|
||||
CALL HB_BNKCPY ; COPY THE CLOCK DATA
|
||||
;
|
||||
LD HL,SIMRTC_BUF ; POINT TO TEMP BUF
|
||||
LD A,SIMRTC_CLKWRITE ; WRITE CLOCK COMMAND
|
||||
|
||||
Reference in New Issue
Block a user