From 4cc4fc0ffe67b6c996429f6b43a9eb7de38cec10 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 1 Sep 2019 15:36:04 +0800 Subject: [PATCH] Refactor of device summary floppy --- Source/HBIOS/hbios.asm | 102 +++++++++++++++++++++++------------------ Source/HBIOS/util.asm | 24 ++++++++++ 2 files changed, 82 insertions(+), 44 deletions(-) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 01eead8f..f3a8ee6b 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -3223,51 +3223,65 @@ PS_PRTDC1: ; PS_PRTDC2: LD C,E ; ATTRIBUTE TO C FOR SAFE KEEPING - ; PRINT FLOPPY TYPE - LD A,C ; ATTRIBUTE TO ACCUM - RLCA ; ISOLATE FORM FACTOR BITS - RLCA - RLCA - AND $03 - LD DE,PS_FLP8 ; ASSUME 8" - CP 0 - JR Z,PS_PRTDC2A - LD DE,PS_FLP5 ; ASSUME 5.25" - CP 1 - JR Z,PS_PRTDC2A - LD DE,PS_FLP3 ; ASSUME 3.5" - CP 2 - JR Z,PS_PRTDC2A - LD DE,PS_FLPN ; ASSUME OTHER" -PS_PRTDC2A: - CALL WRITESTR - ; PRINT FLOPPY SIDES - LD A,C ; ATTRIBUTE TO ACCUM - LD DE,PS_FLPSS ; ASSUME SINGLE SIDED - BIT 4,A ; DS? - JR Z,PS_PRTDC2B - LD DE,PS_FLPDS ; DOUBLE SIDED -PS_PRTDC2B: - CALL WRITESTR - ; PRINT FLOPPY DENSITY - LD A,C ; ATTRIBUTE TO ACCUM - RRCA ; ISOLATE DENSITY BITS - RRCA - AND $03 - LD DE,PS_FLPSD ; SINGLE DENSITY - CP 0 - JR Z,PS_PRTDC2C - LD DE,PS_FLPDD ; DOUBLE DENSITY - CP 1 - JR Z,PS_PRTDC2C - LD DE,PS_FLPHD ; HIGH DENSITY - CP 2 - JR Z,PS_PRTDC2C - LD DE,PS_FLPED ; EXTENDED DENSITY - CP 3 - JR Z,PS_PRTDC2C +; + LD A,01100000B ; DISPLAY FORM FACTOR + LD DE,PS_FLP8 ; WHICH IS DEFINED IN + CALL PRTIDXMSK ; BITS 5 AND 6. +; + LD A,00010000B ; DISPLAY SIDES + LD DE,PS_FLPSS ; WHICH IS DEFINED + CALL PRTIDXMSK ; IN BIT 4 +; + LD A,00001100B ; DISPLAY DENSITY + LD DE,PS_FLPSD ; WHICH IS DEFINED IN + CALL PRTIDXMSK ; BITS 1 AND 2. +; +; ; PRINT FLOPPY TYPE +; LD A,C ; ATTRIBUTE TO ACCUM +; RLCA ; ISOLATE FORM FACTOR BITS +; RLCA +; RLCA +; AND $03 +; LD DE,PS_FLP8 ; ASSUME 8" +; CP 0 +; JR Z,PS_PRTDC2A +; LD DE,PS_FLP5 ; ASSUME 5.25" +; CP 1 +; JR Z,PS_PRTDC2A +; LD DE,PS_FLP3 ; ASSUME 3.5" +; CP 2 +; JR Z,PS_PRTDC2A +; LD DE,PS_FLPN ; ASSUME OTHER" +;PS_PRTDC2A: +; CALL WRITESTR +;; ; PRINT FLOPPY SIDES +; LD A,C ; ATTRIBUTE TO ACCUM +; LD DE,PS_FLPSS ; ASSUME SINGLE SIDED +; BIT 4,A ; DS? +; JR Z,PS_PRTDC2B +; LD DE,PS_FLPDS ; DOUBLE SIDED +;PS_PRTDC2B: +; CALL WRITESTR +; ; PRINT FLOPPY DENSITY +; LD A,C ; ATTRIBUTE TO ACCUM +; RRCA ; ISOLATE DENSITY BITS +; RRCA +; AND $03 +; LD DE,PS_FLPSD ; SINGLE DENSITY +; CP 0 +; JR Z,PS_PRTDC2C +; LD DE,PS_FLPDD ; DOUBLE DENSITY +; CP 1 +; JR Z,PS_PRTDC2C +; LD DE,PS_FLPHD ; HIGH DENSITY +; CP 2 +; JR Z,PS_PRTDC2C +; LD DE,PS_FLPED ; EXTENDED DENSITY +; CP 3 +; JR Z,PS_PRTDC2C PS_PRTDC2C: - CALL WRITESTR +; CALL WRITESTR +; CALL PC_COMMA PRTS("CHS$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA ; diff --git a/Source/HBIOS/util.asm b/Source/HBIOS/util.asm index 4e09b63d..d4bd7f49 100644 --- a/Source/HBIOS/util.asm +++ b/Source/HBIOS/util.asm @@ -298,6 +298,30 @@ DB_END: RET ; ; PRINT THE nTH STRING IN A LIST OF STRINGS WHERE EACH IS TERMINATED BY $ +; C REGISTER CONTAINS THE INDEX TO THE STRING TO BE DISPLAYED. +; A REGISTER CONTAINS A MASK TO BE APPLIED TO THE INDEX +; THE INDEX IS NORMALIZED TO A RANGE 0..N USING THE MASK AND THEN THE nTH +; STRING IS PRINTED IN A LIST DEFINED BY DE +; +; C = ATTRIBUTE +; A = MASK +; DE = STRING LIST +; +PRTIDXMSK: + PUSH BC +PRTIDXMSK0: + BIT 0,A + JR NZ,PRTIDXMSK1 + SRL A + SRL C + JR PRTIDXMSK0 +PRTIDXMSK1: + LD B,A + LD A,C + AND B + POP BC +; +; PRINT THE nTH STRING IN A LIST OF STRINGS WHERE EACH IS TERMINATED BY $ ; A REGISTER DEFINES THE nTH STRING IN THE LIST TO PRINT AND DE POINTS ; TO THE START OF THE STRING LIST. ;