Browse Source

Merge pull request #44 from b1ackmai1er/master

Refactor of device summary
pull/48/head
Wayne Warthen 7 years ago
committed by GitHub
parent
commit
d5206276a8
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 218
      Source/HBIOS/hbios.asm
  2. 39
      Source/HBIOS/pio.asm
  3. 10
      Source/HBIOS/uf.asm
  4. 51
      Source/HBIOS/util.asm

218
Source/HBIOS/hbios.asm

@ -1357,25 +1357,8 @@ HB_SPDTST:
PRTX(STR_PLATFORM)
;
LD A,(HB_CPUTYPE) ; GET CPU TYPE
OR A ; SET FLAGS
LD DE,HB_STRZ80 ; Z80
JR Z,HB_PCPU ; IF Z80, PRINT IT
DEC A ; NEXT CPU TYPE
LD DE,HB_STRZ180 ; Z80180
JR Z,HB_PCPU ; IF Z80180, PRINT IT
DEC A ; NEXT CPU TYPE
LD DE,HB_STRZS180K ; Z8S180 REV K
JR Z,HB_PCPU ; IF Z8S180-K, PRINT IT
LD DE,HB_STRZS180N ; Z8S180 REV N
JR HB_PCPU ; PRINT Z8S180-N
;
HB_STRZ80 .TEXT " Z80$"
HB_STRZ180 .TEXT " Z80180$"
HB_STRZS180K .TEXT " Z8S180-K$"
HB_STRZS180N .TEXT " Z8S180-N$"
;
HB_PCPU:
CALL WRITESTR ; PRINT IT
LD DE,HB_CPU_STR ; DISPLAY IT
CALL PRTIDXDEA
;
PRTS(" @ $")
LD HL,(CB_CPUKHZ)
@ -3016,7 +2999,6 @@ PRTD3M2:
CALL COUT
PRTD3M3:
RET
;
;==================================================================================================
; DISPLAY SUMMARY OF ATTACHED UNITS/DEVICES
;==================================================================================================
@ -3026,58 +3008,38 @@ PRTSUM:
LD DE,PS_STRHDR ; POINT TO HEADER
CALL WRITESTR ; PRINT IT
;
; PRINT DISK DEVICES
LD B,BF_SYSGET ; FUNC: SYSTEM INFO GET
LD C,BF_SYSGET_DIOCNT ; SUBFUNC: DISK UNIT COUNT
RST 08 ; E := DISK UNIT COUNT
LD B,E ; MOVE TO B FOR LOOP COUNT
LD A,E ; MOVE TO ACCUM
OR A ; SET FLAGS
JR Z,PRTSUM1A ; IF NONE, BYPASS
LD C,0 ; C WILL BE UNIT INDEX
PRTSUM1:
PUSH BC ; SAVE LOOP CONTROL
CALL PS_DISK ; PRINT DISK INFO
POP BC ; RESTORE LOOP CONTROL
INC C ; BUMP DISK UNIT INDEX
DJNZ PRTSUM1 ; LOOP THRU ALL DISK DEVICES
LD C,BF_SYSGET_CIOCNT ; CHARACTER DEVICES
LD HL,PS_SERIAL
CALL PRT_ALLD
;
PRTSUM1A:
; PRINT SERIAL DEVICES
LD B,BF_SYSGET ; FUNC: SYSTEM INFO GET
LD C,BF_SYSGET_CIOCNT ; SUBFUNC: SERIAL UNIT COUNT
RST 08 ; E := SERIAL UNIT COUNT
LD B,E ; MOVE TO B FOR LOOP COUNT
LD A,E ; MOVE TO ACCUM
OR A ; SET FLAGS
JR Z,PRTSUM2A ; IF NONE, BYPASS
LD C,0 ; C WILL BE UNIT INDEX
PRTSUM2:
PUSH BC ; SAVE LOOP CONTROL
CALL PS_SERIAL ; PRINT SERIAL INFO
POP BC ; RESTORE LOOP CONTROL
INC C ; BUMP SERIAL UNIT INDEX
DJNZ PRTSUM2 ; LOOP THRU ALL SERIAL DEVICES
LD C,BF_SYSGET_DIOCNT ; DISK DRIVES
LD HL,PS_DISK
CALL PRT_ALLD
LD C,BF_SYSGET_VDACNT ; VIDEO DEVICES
LD HL,PS_VIDEO
CALL PRT_ALLD
RET
;
PRTSUM2A:
; PRINT VIDEO DEVICES
PRT_ALLD:
LD B,BF_SYSGET ; FUNC: SYSTEM INFO GET
LD C,BF_SYSGET_VDACNT ; SUBFUNC: VIDEO UNIT COUNT
RST 08 ; E := SERIAL UNIT COUNT
RST 08 ; E := UNIT COUNT
LD B,E ; MOVE TO B FOR LOOP COUNT
LD A,E ; MOVE TO ACCUM
OR A ; SET FLAGS
JR Z,PRTSUM3A ; IF NONE, BYPASS
JR Z,PRT_ALLD1 ; IF NONE, BYPASS
LD C,0 ; C WILL BE UNIT INDEX
PRTSUM3:
PRT_ALLD1:
PUSH BC ; SAVE LOOP CONTROL
CALL PS_VIDEO ; PRINT VIDEO INFO
PUSH DE
PUSH HL
CALL JPHL ; CALL THE ROUTINE PASSED IN HL
POP HL
POP DE
POP BC ; RESTORE LOOP CONTROL
INC C ; BUMP VIDEO UNIT INDEX
DJNZ PRTSUM3 ; LOOP THRU ALL VIDEO DEVICES
;
PRTSUM3A:
RET ; DONE
INC C ; BUMP UNIT INDEX
DJNZ PRT_ALLD1 ; LOOP THRU ALL DEVICES
RET
;
; PRINT ONE LINE DISK UNIT/DEVICE INFO, DISK UNIT INDEX IN C
;
@ -3177,51 +3139,19 @@ 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
PS_PRTDC2C:
CALL WRITESTR
;
LD A,01100000B ; DISPLAY FORM FACTOR
LD DE,PS_FLP_FSTR ; WHICH IS DEFINED IN
CALL PRTIDXMSK ; BITS 5 AND 6.
;
LD A,00010000B ; DISPLAY SIDES
LD DE,PS_FLP_SSTR ; WHICH IS DEFINED
CALL PRTIDXMSK ; IN BIT 4
;
LD A,00001100B ; DISPLAY DENSITY
LD DE,PS_FLP_DSTR ; WHICH IS DEFINED IN
CALL PRTIDXMSK ; BITS 2 AND 3.
;
CALL PC_COMMA
PRTS("CHS$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA
;
@ -3348,32 +3278,12 @@ PSPRTPC0:
JP Z,PS_PRTNUL ; $FF == NO CONFIG DEFINED
;
PS_PRTPC0:
LD A,E
RLCA
RLCA
AND 00000011B
JR NZ,PSPRTPC1
PRTS("Output$")
RET
PSPRTPC1:
DEC A
JR NZ,PSPRTPC2
PRTS("Input$")
RET
PSPRTPC2:
DEC A
JR NZ,PSPRTPC3
PRTS("Bidirectional$")
RET
PSPRTPC3:
DEC A
JR NZ,PSPRTPC4
PRTS("BitCtrl$")
RET
PSPRTPC4:
PRTS("Undefined$")
RET
LD C,E ; DISPLAY PIO TYPE
LD A,11000000B ; WHICH IS DEFINE BY
LD DE,PIO_MODE_STR ; BITS 6 AND 7
JP PRTIDXMSK
; RET ; TRICK RETURN
;
PS_PRTSC1:
; PRINT TERMINAL CONFIG
LD A,C ; GET ATTRIBUTE VALUE
@ -3503,7 +3413,10 @@ PS_PAD1:
DJNZ PS_PAD1
RET
;
;
HB_CPU_STR: .TEXT " Z80$" ; HB_STRZ80
.TEXT " Z80180$" ; HB_STRZ180
.TEXT " Z8S180-K$" ; HB_STRZS180K
.TEXT " Z8S180-N$" ; HB_STRZS180N
;
PS_STRNUL .TEXT "--$" ; DISPLAY STRING FOR NUL VALUE
;
@ -3542,20 +3455,20 @@ PS_DTOTHER .TEXT "???$"
;
; FLOPPY ATTRIBUTE STRINGS
;
PS_FLP8 .TEXT "8\",$"
PS_FLP5 .TEXT "5.25\",$"
PS_FLP3 .TEXT "3.5\",$"
PS_FLPN .TEXT "???\",$"
PS_FLP_FSTR: .TEXT "8\",$" ; PS_FLP8
.TEXT "5.25\",$" ; PS_FLP5
.TEXT "3.5\",$" ; PS_FLP3
.TEXT "???\",$" ; PS_FLPN
;
PS_FLPSS .TEXT "SS/$"
PS_FLPDS .TEXT "DS/$"
PS_FLP_SSTR: .TEXT "SS/$" ; PS_FLPSS
.TEXT "DS/$" ; PS_FLPDS
;
PS_FLPSD .TEXT "SD$"
PS_FLPDD .TEXT "DD$"
PS_FLPHD .TEXT "HD$"
PS_FLPED .TEXT "ED$"
PS_FLP_DSTR: .TEXT "SD$" ; PS_FLPSD
.TEXT "DD$" ; PS_FLPDD
.TEXT "HD$" ; PS_FLPHD
.TEXT "ED$" ; PS_FLPED
;
; SERIAL DEVICE STRINGS
; CHARACTER DEVICE STRINGS
;
PS_SDSTRREF:
.DW PS_SDUART, PS_SDASCI, PS_SDTERM,
@ -3571,17 +3484,20 @@ PS_SDACIA .TEXT "ACIA$"
PS_SDPIO .TEXT "PORT$"
PS_SDUF .TEXT "UF$"
;
; SERIAL TYPE STRINGS
; CHARACTER SUB TYPE STRINGS
;
PS_STRS232 .TEXT "RS-232$"
PS_STTERM .TEXT "Terminal$"
PS_STPPT .TEXT "Parallel$"
;
PS_STPARMAP .DB "NONENMNS"
;
; SERIAL TYPE STRINGS
; PARALLEL TYPE STRINGS
;
PIO_MODE_STR: .TEXT "Output$"
.TEXT "Input$"
.TEXT "Bidirectional$"
.TEXT "BitCtrl$"
;
; VIDEO DEVICE STRINGS
;
@ -3598,10 +3514,6 @@ PS_VDVGA .TEXT "VGA$"
;
PS_VTCRT .TEXT "CRT$"
;
; VIDEO CONFIG STRINGS
;
;
;
; 0 1 2 3 4 5 6 7
; 01234567890123456789012345678901234567890123456789012345678901234567890123456789
PS_STRHDR .TEXT "Unit Device Type Capacity/Mode\r\n"

39
Source/HBIOS/pio.asm

@ -24,8 +24,8 @@
; would be required to support this configuration. As the HBIOS only has an allocation of
; 16, a full implmentation is impractical.
;
; The compromise solution is to allow 4 interrupts for the PIO driver.; All remaining PIO's
; are limited to Bit mode or blind read and writed to the input/output ports.
; The compromise solution is to allow 4 interrupts for the PIO driver. All remaining PIO's
; are limited to Bit mode or blind read and write to the input/output ports.
;
; Zilog PIO reset state:
;
@ -130,7 +130,7 @@ PIO_PREINIT0:
; PUSH HL ; SAVE IT
; POP IY ; ... TO IY
CALL IDXCFG
CALL IDXCFG
LD (HL),C
@ -215,8 +215,12 @@ SKPINIT:DJNZ PIO_PREINIT0 ; LOOP UNTIL DONE
XOR A ; SIGNAL SUCCESS
RET ; AND RETURN
;
; X24
; INDEX INTO THE CONFIG TABLE
; ON ENTRY C = UNIT NUMBER
; ON EXIT IY = CONFIG DATA POINTER
; ON EXIT DE = CONFIG TABLE START
;
; EACH CONFIG TABLE IS 24 BYTES LONG
;
CFG_SIZ .EQU 24
;
@ -778,14 +782,9 @@ PIO_PRTCFG:
; PRINT THE PIO TYPE
CALL PC_SPACE ; FORMATTING
LD A,(IY+1) ; GET PIO TYPE BYTE
RLCA ; MAKE IT A WORD OFFSET
LD HL,PIO_TYPE_MAP ; POINT HL TO TYPE MAP TABLE
CALL ADDHLA ; HL := ENTRY
LD E,(HL) ; DEREFERENCE
INC HL ; ...
LD D,(HL) ; ... TO GET STRING POINTER
CALL WRITESTR ; PRINT IT
;
LD DE,PIO_TYPE_STR ; POINT HL TO TYPE MAP TABLE
CALL PRTIDXDEA
; ALL DONE IF NO PIO WAS DETECTED
LD A,(IY+1) ; GET PIO TYPE BYTE
OR A ; SET FLAGS
@ -812,16 +811,11 @@ PIO_DEV .DB 0 ; DEVICE NUM USED DURING INIT
;
; DESCRIPTION OF DIFFERENT PORT TYPES
;
PIO_TYPE_MAP:
.DW PIO_STR_NONE
.DW PIO_STR_PIO
.DW PIO_STR_8255
.DW PIO_STR_PORT
PIO_STR_NONE .DB "<NOT PRESENT>$"
PIO_STR_PIO .DB "Zilog PIO$"
PIO_STR_8255 .DB "i8255 PPI$"
PIO_STR_PORT .DB "IO Port$"
PIO_TYPE_STR:
.TEXT "<NOT PRESENT>$" ; IDX 0
.TEXT "Zilog PIO$" ; IDX 1
.TEXT "i8255 PPI$" ; IDX 2
.TEXT "IO Port$" ; IDX 3
;
; Z80 PIO PORT TABLE - EACH ENTRY IS FOR 1 CHIP I.E. TWO PORTS
;
@ -974,6 +968,7 @@ PIO_INIT1:
; POP AF
; CALL ADDHLA ; HL := ENTRY ADDRESS
; PUSH HL ; COPY CFG DATA PTR
; POP IY ; ... TO IY
; POP IY ; ... TO IY
CALL IDXCFG

10
Source/HBIOS/uf.asm

@ -56,15 +56,15 @@ UF_INITUNIT:
;
UF_INIT:
CALL NEWLINE ; PRINT DEVICE
PRTS("USB-FIFO: $")
PRTS("IO=0x$")
CALL PRTSTRD
.TEXT "USB-FIFO: IO=0x$")
LD A,UFBASE ; PRINT PORT
CALL PRTHEXBYTE
LD A,(UF_USB_ACTIVE) ; PRINT CONNECTION STATUS
OR A ; REQUIRES TERMINAL PROGRAM
RET NZ ; TO HAVE INITIALIZED PORT
PRTS(" No $") ; ON PC SIDE.
PRTS("connection$")
CALL PRTSTRD ; ON PC SIDE.
.TEXT "No connection$"
RET
;
; INPUT A CHARACTER AND RETURN IT IN E
@ -119,7 +119,7 @@ UF_INITDEV:
INC A ; ... SO Z SET IF -1
JR NZ,UF_INITDEV1 ; IF DE == -1, REINIT CURRENT CONFIG
;
; GET CURRENT PSW. WE ALWAYS RESAVE AT END
; GET CURRENT SPW. WE ALWAYS RESAVE AT END
LD E,(IY+0) ; LOW BYTE
LD D,(IY+1) ; HIGH BYTE
;

51
Source/HBIOS/util.asm

@ -295,7 +295,56 @@ DB_CONTD:
JP DB_BLKRD ;
DB_END:
RET ;
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.
;
; SLOW BUT IMPROVES CODE SIZE, READABILITY AND ELIMINATES THE NEED HAVE
; LIST OF POINTERS OR A LIST OF CONDITIONAL CHECKS.
;
PRTIDXDEA:
PUSH BC
LD C,A ; INDEX COUNT
OR A
PRTIDXDEA1:
JR Z,PRTIDXDEA3
PRTIDXDEA2:
LD A,(DE) ; LOOP UNIT
INC DE ; WE REACH
CP '$' ; END OF STRING
JR NZ,PRTIDXDEA2
DEC C ; AT STRING END. SO GO
JR PRTIDXDEA1 ; CHECK FOR INDEX MATCH
PRTIDXDEA3:
POP BC
; CALL WRITESTR ; FALL THROUGH TO WRITESTR
; RET
;
; OUTPUT A '$' TERMINATED STRING AT DE
;

Loading…
Cancel
Save