Browse Source

Refactor of device summary

pull/44/head
b1ackmai1er 7 years ago
parent
commit
a3a4e84965
  1. 192
      Source/HBIOS/hbios.asm
  2. 39
      Source/HBIOS/pio.asm
  3. 27
      Source/HBIOS/util.asm

192
Source/HBIOS/hbios.asm

@ -1357,18 +1357,23 @@ 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
LD DE,HB_CPU_STR ; DISPLAY IT
CALL PRTIDXDEA
; 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_CPU_STR:
HB_STRZ80 .TEXT " Z80$"
HB_STRZ180 .TEXT " Z80180$"
HB_STRZS180K .TEXT " Z8S180-K$"
@ -3016,7 +3021,6 @@ PRTD3M2:
CALL COUT
PRTD3M3:
RET
;
;==================================================================================================
; DISPLAY SUMMARY OF ATTACHED UNITS/DEVICES
;==================================================================================================
@ -3026,58 +3030,100 @@ 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
INC C ; BUMP DISK UNIT INDEX
DJNZ PRT_ALLD1 ; LOOP THRU ALL DISK DEVICES
RET
;
PRTSUM3A:
RET ; DONE
;==================================================================================================
; DISPLAY SUMMARY OF ATTACHED UNITS/DEVICES
;==================================================================================================
;
;PRTSUM:
; CALL NEWLINE2 ; SKIP A LINE
; 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
;
;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
;
;PRTSUM2A:
; ; PRINT VIDEO DEVICES
; LD B,BF_SYSGET ; FUNC: SYSTEM INFO GET
; LD C,BF_SYSGET_VDACNT ; SUBFUNC: VIDEO 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,PRTSUM3A ; IF NONE, BYPASS
; LD C,0 ; C WILL BE UNIT INDEX
;PRTSUM3:
; PUSH BC ; SAVE LOOP CONTROL
; CALL PS_VIDEO ; PRINT VIDEO INFO
; POP BC ; RESTORE LOOP CONTROL
; INC C ; BUMP VIDEO UNIT INDEX
; DJNZ PRTSUM3 ; LOOP THRU ALL VIDEO DEVICES
;
;PRTSUM3A:
; RET ; DONE
;
; PRINT ONE LINE DISK UNIT/DEVICE INFO, DISK UNIT INDEX IN C
;
@ -3348,32 +3394,16 @@ PSPRTPC0:
JP Z,PS_PRTNUL ; $FF == NO CONFIG DEFINED
;
PS_PRTPC0:
LD A,E
RLCA
RLCA
LD A,E ; CONVERT THE TYPE TO
RLCA ; A TABLE INDEX 0..5
RLCA ; AND DISPLAY THE TYPE
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$")
PUSH DE
LD DE,PIO_MODE_STR
CALL PRTIDXDEA
POP DE
RET
;
PS_PRTSC1:
; PRINT TERMINAL CONFIG
LD A,C ; GET ATTRIBUTE VALUE
@ -3578,10 +3608,14 @@ PS_STTERM .TEXT "Terminal$"
PS_STPPT .TEXT "Parallel$"
;
PS_STPARMAP .DB "NONENMNS"
;
; SERIAL TYPE STRINGS
; PIO TYPE STRINGS
;
PIO_MODE_STR:
.TEXT "Output$"
.TEXT "Input$"
.TEXT "Bidirectional$"
.TEXT "BitCtrl$"
;
; VIDEO DEVICE STRINGS
;

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:
PIO_STR_NONE .TEXT "<NOT PRESENT>$" ; IDX 0
PIO_STR_PIO .TEXT "Zilog PIO$" ; IDX 1
PIO_STR_8255 .TEXT "i8255 PPI$" ; IDX 2
PIO_STR_PORT .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

27
Source/HBIOS/util.asm

@ -295,7 +295,32 @@ DB_CONTD:
JP DB_BLKRD ;
DB_END:
RET ;
RET
;
; 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