diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index e95b6ae8..c5ad4116 100644 --- a/Source/HBIOS/hbios.asm +++ b/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 ; diff --git a/Source/HBIOS/icm.asm b/Source/HBIOS/icm.asm index 8a7e620b..79aab3fd 100644 --- a/Source/HBIOS/icm.asm +++ b/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 diff --git a/Source/HBIOS/pkd.asm b/Source/HBIOS/pkd.asm index cc5f35a3..ac9c720c 100644 --- a/Source/HBIOS/pkd.asm +++ b/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 ; ; ; diff --git a/Source/Images/fd_nzcom.txt b/Source/Images/fd_nzcom.txt index a569b365..911259b6 100644 --- a/Source/Images/fd_nzcom.txt +++ b/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: diff --git a/Source/ver.inc b/Source/ver.inc index 1d42d359..075fc98c 100644 --- a/Source/ver.inc +++ b/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 diff --git a/Source/ver.lib b/Source/ver.lib index 8d53d433..515ced21 100644 --- a/Source/ver.lib +++ b/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