Browse Source

Miscellaneous

- Implement SHOWHEX functions in ICM and PKD drivers
- Improve DSKY common routines in HBIOS
- Include key CP/M 2.2 programs in NZCOM floppy image
pull/351/head v3.3.0-dev.28
Wayne Warthen 3 years ago
parent
commit
5d34a5c5d5
  1. 128
      Source/HBIOS/hbios.asm
  2. 11
      Source/HBIOS/icm.asm
  3. 11
      Source/HBIOS/pkd.asm
  4. 6
      Source/Images/fd_nzcom.txt
  5. 2
      Source/ver.inc
  6. 2
      Source/ver.lib

128
Source/HBIOS/hbios.asm

@ -3725,42 +3725,51 @@ HB_DSKFUNC .DB 0 ; CURRENT DISK FUNCTION
; ALL REGISTERS PERSERVED
;
HB_DSKACT:
; SAVE EVERYTHING
PUSH AF
PUSH BC
PUSH DE
PUSH HL
LD DE,DSKY_HEXBUF+3 ; START AT END
LD B,3 ; 3 BYTES OF SECTOR ADDRESS
;
; COPY VALUE TO LOCAL HEXBUF
CALL LD32
;
HB_DSKACT1:
LD A,(HL) ; GET FIRST BYTE
LD (DE),A ; AND STORE IN BUF
INC HL ; NEXT SRC BYTE
DEC DE ; NEXT DEST BYTE
DJNZ HB_DSKACT1 ; LOOP
LD BC,DSKY_HEXBUF
CALL ST32
;
; USE DISK UNIT NUMBER FOR MSB
LD A,(HB_DSKUNIT) ; GET DISK UNIT NUM
LD (DE),A ; PUT AT HEAD OF BUF
HB_DSKACT2:
LD HL,DSKY_HEXBUF ; BINARY BUF
LD DE,DSKY_BUF ; DISPLAY BUF
CALL DSKY_BIN2SEG ; CONVERT TO SEG DISPLAY BUF
LD A,(DSKY_BUF+1) ; SECOND SEGMENT
OR %10000000 ; TURN ON DOT
LD (DSKY_BUF+1),A ; SAVE IT
LD (DSKY_HEXBUF+3),A ; REPLACE HIGH BYTE W/ DISK #
;
; CONVERT TO SEGMENT DISPLAY
LD HL,DSKY_HEXBUF ; INPUT POINTER
LD DE,DSKY_BUF ; TEMP BUF FOR OUTPUT
CALL DSKY_BIN2SEG ; CONVERT TO SEG DISPLAY
;
; DECIMAL POINT FOR DISK UNIT SEPARATION
LD HL,DSKY_BUF+1 ; SECOND CHAR OF DISP
SET 7,(HL) ; TURN ON DECIMAL PT
;
; DECIMAL POINT TO INDICATE WRITE ACTION
LD A,(HB_DSKFUNC) ; GET CURRENT I/O FUNCTION
CP BF_DIOWRITE ; IS IT A WRITE?
JR NZ,HB_DSKACT3 ; IF NOT, NO DOT, SKIP AHEAD
LD A,(DSKY_BUF+7) ; LAST SEGMENT
OR %10000000 ; TURN ON DOT
LD (DSKY_BUF+7),A ; SAVE IT
HB_DSKACT3:
EX DE,HL ; SEG DISPLAY BUF TO HL
LD B,BF_DSKYSHOWSEG
CALL DSKY_DISPATCH
JR NZ,HB_DSKACT2 ; IF NOT, SKIP
LD HL,DSKY_BUF+7 ; POINT TO CHAR 7
SET 7,(HL) ; SET WRITE DOT
;
HB_DSKACT2:
; UPDATE DISPLAY
LD HL,DSKY_BUF ; SEG DISPLAY BUF TO HL
LD B,BF_DSKYSHOWSEG ; SHOW SEG FUNCTION
CALL DSKY_DISPATCH ; DO IT
;
; CLEAN UP AND GO AWAY
POP HL
POP DE
POP BC
POP AF
RET
RET ; DONE
;
; THIS IS THE CHS VARIANT OF THE ABOVE. THIS IS USED BY CHS ORIENTED
; DISK DRIVERS (BASICALLY JUST FLOPPY).
@ -3777,23 +3786,10 @@ HB_DSKACTCHS:
PUSH BC
PUSH DE
PUSH HL
LD DE,DSKY_HEXBUF ; START OF HEX BUF
LD A,(HB_DSKUNIT) ; GET DISK UNIT NUM
LD (DE),A ; PUT AT HEAD OF BUF
INC DE ; NEXT BYTE OF BUF
LD A,(HL) ; LSB OF TRACK
LD (DE),A ; ADD TO BUF
INC DE ; NEXT BYTE OF BUF
INC HL ; BUMP TO HEAD
INC HL ; "
INC HL ; "
LD A,(HL) ; GET HEAD
LD (DE),A ; ADD TO BUF
INC DE ; NEXT BYTE OF BUF
DEC HL ; BACK TO SECTOR
LD A,(HL) ; GET SECTOR
LD (DE),A ; ADD TO BUF
JR HB_DSKACT2
CALL LD32 ; DE:HL = HSCC
; MAP HSCC -> CCHS
EX DE,HL
JR HB_DSKACT1
;
#ENDIF
#ENDIF
@ -5141,37 +5137,29 @@ HB_IM1PTR .DW HB_IVT ; POINTER FOR NEXT IM1 ENTRY
; DE: ADR OF DEST LED SEGMENT DISPLAY BUFFER (8 BYTES)
;
DSKY_BIN2SEG:
PUSH HL
PUSH DE
LD B,4 ; 4 BYTES OF INPUT
EX DE,HL
LD A,B ; PUT IN ACCUM
CALL ADDHLA ; PROCESS FROM END (LITTLE ENDIAN)
DSKY_BIN2SEG1:
LD A,(DE) ; FIRST NIBBLE
SRL A
SRL A
SRL A
SRL A
PUSH HL
LD HL,DSKY_HEXMAP
CALL ADDHLA
LD A,(HL)
POP HL
LD (HL),A
INC HL
LD A,(DE) ; SECOND NIBBLE
AND 0FH
PUSH HL
LD HL,DSKY_HEXMAP
CALL ADDHLA
LD A,(HL)
POP HL
LD (HL),A
INC HL
INC DE ; NEXT BYTE
DJNZ DSKY_BIN2SEG1
POP DE
POP HL
RET
DEC HL ; DEC PTR (LITTLE ENDIAN)
LD A,(HL) ; HIGH NIBBLE
RRCA \ RRCA \ RRCA \ RRCA ; ROTATE BITS
CALL DSKY_BIN2SEG_NIB ; CONVERT NIBBLE INTO OUTPUT BUF
LD A,(HL) ; LOW NIBBLE
CALL DSKY_BIN2SEG_NIB ; CONVERT NIBBLE INTO OUTPUT BUF
DJNZ DSKY_BIN2SEG1 ; LOOP FOR ALL INPUT BYTES
RET ; DONE
;
DSKY_BIN2SEG_NIB:
PUSH HL ; SAVE HL
LD HL,DSKY_HEXMAP ; POINT TO SEG MAP TABLE
AND $0F ; ISOLATE LOW NIBBLE
CALL ADDHLA ; OFFSET INTO TABLE
LD A,(HL) ; LOAD VALUE FROM TABLE
POP HL ; RESTORE HL
LD (DE),A ; SAVE VALUE TO OUTPUT BUF
INC DE ; BUMP TO NEXT OUTPUT BYTE
RET ; DONE
;
#ENDIF
;

11
Source/HBIOS/icm.asm

@ -180,11 +180,16 @@ ICM_GETKEY2:
XOR A ; SIGNAL SUCCESS
RET
;
;
; DISPLAY HEX VALUE FROM DE:HL
;
ICM_SHOWHEX:
XOR A ; SIGNAL SUCCESS
RET
LD BC,DSKY_HEXBUF ; POINT TO HEX BUFFER
CALL ST32 ; STORE 32-BIT BINARY THERE
LD HL,DSKY_HEXBUF ; FROM: BINARY VALUE (HL)
LD DE,DSKY_BUF ; TO: SEGMENT BUFFER (DE)
CALL DSKY_BIN2SEG ; CONVERT
LD HL,DSKY_BUF ; POINT TO SEGMENT BUFFER
; AND FALL THRU TO DISPLAY IT
;
; ICM SHOW BUFFER
; HL: ADDRESS OF BUFFER

11
Source/HBIOS/pkd.asm

@ -238,11 +238,16 @@ PKD_GETKEY2:
XOR A ; SIGNAL SUCCESS
RET
;
;
; DISPLAY HEX VALUE FROM DE:HL
;
PKD_SHOWHEX:
XOR A ; SIGNAL SUCCESS
RET
LD BC,DSKY_HEXBUF ; POINT TO HEX BUFFER
CALL ST32 ; STORE 32-BIT BINARY THERE
LD HL,DSKY_HEXBUF ; FROM: BINARY VALUE (HL)
LD DE,DSKY_BUF ; TO: SEGMENT BUFFER (DE)
CALL DSKY_BIN2SEG ; CONVERT
LD HL,DSKY_BUF ; POINT TO SEGMENT BUFFER
; AND FALL THRU TO DISPLAY IT
;
;
;

6
Source/Images/fd_nzcom.txt

@ -3,6 +3,12 @@
#
d_nzcom/ReadMe.txt 0:
#
# Include selected CP/M 2.2 files
#
d_cpm22/u0/STAT.COM 0:
d_cpm22/u0/SUBMIT.COM 0:
d_cpm22/u0/XSUB.COM 0:
#
# Add RomWBW utilities
#
#../../Binary/Apps/*.com 0:

2
Source/ver.inc

@ -2,7 +2,7 @@
#DEFINE RMN 3
#DEFINE RUP 0
#DEFINE RTP 0
#DEFINE BIOSVER "3.3.0-dev.27"
#DEFINE BIOSVER "3.3.0-dev.28"
#define rmj RMJ
#define rmn RMN
#define rup RUP

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 3
rup equ 0
rtp equ 0
biosver macro
db "3.3.0-dev.27"
db "3.3.0-dev.28"
endm

Loading…
Cancel
Save