Browse Source

Update Survey App

Updated SURVEY app to properly handle Z80 16 bit I/O port addressing.
Minor improvements to FDU.
pull/5/head
Wayne Warthen 8 years ago
parent
commit
409c306474
  1. 64
      Source/Apps/FDU/FDU.asm
  2. 16
      Source/Apps/Survey.asm

64
Source/Apps/FDU/FDU.asm

@ -2067,8 +2067,7 @@ FCP_XFRCNT .DW 00H ; BYTES TRANSFERRED DURING COMMAND PHASE
;
FXP_XR .DW 00H ; INPUT: ADDRESS OF EXECUTION ROUTINE TO INVOKE
FXP_TO .DB 00H ; TIMEOUT COUNTDOWN TIMER USED IN SOME VARIATIONS
FXP_XFRCNT .DW 00H ; BYTES TRANSFERRED DURING EXECUTION
FXP_ITER .DB 00H ; LOOP ITERATION WORKING COUNTER
FXP_ITER .DB 00H ; LOOP ITERATION COUNTER (MUST IMMEDIATELY FOLLOW FXP_TO)
FXP_A .DB 00H ; LAST VALUE OF REG A RECORDED DURING EXECUTION
FXP_BC .DW 00H ; LAST VALUE OF REG BC RECORDED DURING EXECUTION
FXP_DE .DW 00H ; LAST VALUE OF REG DE RECORDED DURING EXECUTION
@ -2882,6 +2881,8 @@ FOP_X1:
CALL JPHL ; CALL INDIRECTLY VIA HL
LD A,(FST_RC) ; CURRENT RESULT CODE
;CALL PC_SPACE
;CALL PRTHEXBYTE
CP FRC_OK ; ERROR?
RET NZ ; IF SO, ALL DONE
@ -2903,14 +2904,14 @@ FOP_RES0:
FOP_RES1:
CALL DELAY ; FDC MAY TAKE UP TO 12us TO UPDATE MSR
IN A,(C) ; READ MAIN STATUS REGISTER
;CALL PC_SPACE
;CALL PRTHEXBYTE
LD (FST_MSR),A ; SAVE IT FOR POTENTIAL LATER DIAGNOSIS
AND 0F0H ; REMOVE SEEK BITS
CP 0D0H ; LOOKING FOR RQM=1, DIO=1, BUSY=1 (FDC BYTE PENDING)
AND $F0 ; REMOVE SEEK BITS
CP $D0 ; LOOKING FOR RQM=1, DIO=1, BUSY=1 (FDC BYTE PENDING)
JR Z,FOP_RES2 ; GOOD, GO TO RECEIVE BYTE
CP $80 ; DONE?
JR Z,FOP_EVAL ; IF SO, GO TO EVAL
;CALL PC_SPACE
;CALL PRTHEXBYTE
DEC DE
LD A,D
OR E
@ -3150,8 +3151,8 @@ FXRX:
FXRX1:
CALL DELAY
IN A,(C) ; GET MSR
AND 0E0H ; ISOLATE RQM/DIO/EXM
CP 0C0H ; WE WANT RQM=1,DIO=1,EXM=0 (READY TO READ A BYTE W/ EXEC INACTIVE)
;AND 0E0H ; ISOLATE RQM/DIO/EXM
CP $D0 ; WE WANT RQM=1,DIO=1,EXM=0 (READY TO READ A BYTE W/ EXEC INACTIVE)
JP Z,FXR_END ; GOT IT, EXIT CLEAN
DEC DE ; DECREMENT COUNTER (16 BIT)
LD A,D ; CHECK FOR ZERO
@ -3170,10 +3171,11 @@ FXRR: LD A,E ; LOW BYTE OF COUNT TO ACCUM
FXRR1: LD B,E ; LOW BYTE OF COUNT TO B
LD A,D ; HIGH BYTE OF COUNT
LD (FXP_ITER),A ; ... IS ITERATION COUNT
LD IX,FXP_ITER ; SETUP IX AS POINTER TO ITERATION COUNT
LD A,(CPUSPD) ; CPU SPEED SCALER
LD (FXP_TO),A ; SAVE IT AS OUTER LOOP TIMEOUT
LD IX,FXP_TO ; (IX) IS FXP_TO, (IX+1) IS FCP_ITER
LD C,(IY+CFG_DATA) ; SET C TO DATA PORT
LD DE,0
DI ; DISABLE INTERRUPTS TO AVOID OVERRUN
FXRR2: DEC C ; [04] SET C TO MSR PORT
FXRR3: LD DE,0 ; [10] TIMEOUT COUNTER
@ -3187,16 +3189,14 @@ FXRR4: IN A,(C) ; [12] GET MSR
JP Z,FXR_ABORT ; [10] IF NOT SET, EXECUTION ABORTED
DEC D ; [04] DEC MSB OF INNER TIMEOUT COUNTER
JR NZ,FXRR4 ; [12/7] LOOP IF MSB IS NOT EXHAUSTED
LD A,(FXP_TO) ; [13] GET OUTER LOOP COUNTER
DEC A ; [04] DECREMENT
LD (FXP_TO),A ; [13] SAVE NEW COUNTER VALUE
DEC (IX) ; [23] DECREMENT OUTER LOOP COUNTER
JR NZ,FXRR3 ; [12/7] LOOP IF NOT EXHAUSTED
JP FXR_TO ; [10] OTHERWISE, HANDLE TIMEOUT
FXRR5: INC C ; [04] POINT TO DATA PORT
INI ; [16] (HL) := (C), HL++, B--
JR NZ,FXRR2 ; [12/7] LOOP
DEC (IX) ; [23] DECREMENT ITERATION COUNT
JR NZ,FXRR2 ; [12] IF MORE ITERATIONS, GO DO IT
DEC (IX+1) ; [23] DECREMENT ITERATION COUNT
JR NZ,FXRR2 ; [12] IF MORE ITERATIONS, LOOP
JP FXR_END ; [10] ELSE DONE
;
@ -3275,10 +3275,11 @@ FXRW: LD A,E ; LOW BYTE OF COUNT TO ACCUM
FXRW1: LD B,E ; LOW BYTE OF COUNT TO B
LD A,D ; HIGH BYTE OF COUNT
LD (FXP_ITER),A ; ... IS ITERATION COUNT
LD IX,FXP_ITER ; SETUP IX AS POINTER TO ITERATION COUNT
LD A,(CPUSPD) ; CPU SPEED SCALER
LD (FXP_TO),A ; SAVE IT AS OUTER LOOP TIMEOUT
LD IX,FXP_TO ; (IX) IS FXP_TO, (IX+1) IS FCP_ITER
LD C,(IY+CFG_DATA) ; SET C TO DATA PORT
LD DE,0
DI ; DISABLE INTERRUPTS TO AVOID OVERRUN
FXRW2: DEC C ; [04] SET C TO MSR PORT
FXRW3: LD DE,0 ; [10] TIMEOUT COUNTER
@ -3292,19 +3293,18 @@ FXRW4: IN A,(C) ; [12] GET MSR
JP Z,FXR_ABORT ; [10] IF NOT SET, EXECUTION ABORTED
DEC D ; [04] DEC MSB OF INNER TIMEOUT COUNTER
JR NZ,FXRW4 ; [12/7] LOOP IF MSB IS NOT EXHAUSTED
LD A,(FXP_TO) ; [13] GET OUTER LOOP COUNTER
DEC A ; [04] DECREMENT
LD (FXP_TO),A ; [13] SAVE NEW COUNTER VALUE
DEC (IX) ; [23] DECREMENT OUTER LOOP COUNTER
JR NZ,FXRW3 ; [12/7] LOOP IF NOT EXHAUSTED
JP FXR_TO ; [10] OTHERWISE, HANDLE TIMEOUT
FXRW5: INC C ; [04] POINT TO DATA PORT
OUTI ; [16] (C) := (HL), HL++, B--
JR NZ,FXRW2 ; [12/7] LOOP
DEC (IX) ; [23] DECREMENT ITERATION COUNT
DEC (IX+1) ; [23] DECREMENT ITERATION COUNT
JR NZ,FXRW2 ; [12] IF MORE ITERATIONS, GO DO IT
JP FXR_END ; [10] ELSE DONE
;
; INT WRITE DATA - SAFE VERSION
; HANDLES FDC ERRORS, BUT NO TIMEOUT
@ -3372,24 +3372,36 @@ WFXRW2:
;
FXR_TO:
; SAVE CURRENT MSR VALUE
;LD C,(IY+CFG_MSR) ; SET C TO MSR PORT
;IN A,(C)
LD (FST_MSR),A
; SET ERROR AND GET OUT W/O PULSING TC
LD A,FRC_TOEXEC
LD (FST_RC),A
JR FXR_END2
FXR_ABORT:
; SAVE CURRENT MSR VALUE
;LD C,(IY+CFG_MSR) ; SET C TO MSR PORT
;IN A,(C)
LD (FST_MSR),A
; LET RESULTS PHASE HANDLE ERROR, DO NOT PULSE TC, COMMAND ALREADY TERMINATED
;LD A,FRC_ABORT
;LD (FST_RC),A
JR FXR_END2
FXR_END:
; SAVE CURRENT MSR VALUE
;LD C,(IY+CFG_MSR) ; SET C TO MSR PORT
;IN A,(C)
LD (FST_MSR),A
; DO NOT PULSE TC AT END OF FORMAT OR READID, THOSE COMMANDS SELF-TERMINATE
LD A,(FCP_CMD)
CP CMD_FMTTRK
JR Z,FXR_END2
CP CMD_READID
JR Z,FXR_END2
;LD A,(FCP_CMD)
;CP CMD_FMTTRK
;JR Z,FXR_END2
;CP CMD_READID
;JR Z,FXR_END2
CALL FC_PULSETC
@ -3400,10 +3412,6 @@ FXR_END2:
LD (FXP_DE),DE
LD (FXP_HL),HL
LD C,(IY+CFG_MSR) ; SET C TO MSR PORT
IN A,(C)
LD (FST_MSR),A
CALL FXR_DUMP
#ENDIF

16
Source/Apps/Survey.asm

@ -15,6 +15,9 @@
;
;VERSION LIST - Most recent version first.
;
;16/Dec/17 - Handle 16-bit port addressing using
; Z80 IN A,(C) instruction. Wayne Warthen
;
;06/Jul/82 - Added Godbout DISK 1 equate and added SKIP equate
; Bill Bolton - Software Tools, Australia
;
@ -239,7 +242,7 @@ START:
SHLD OLDSP
LXI SP,FINIS+64
CALL TYPE ; Type initial CRLF
DB TAB,TAB,'*** System Survey (June 82) ***'
DB TAB,TAB,'*** System Survey (December 17) ***'
DW CRLF,CRLFE
;DISK SURVEY
@ -594,14 +597,13 @@ PORTLP:
JZ ISPORT ; Print mask port
ENDIF
mov b,a ; save port #
STA INPORT+1
INPORT:
IN 0 ; Modifiable code
; by trial and error, inactive port could return FF or echo port #
mov c,a ; port number to reg c
mvi b,0 ; for 16 bit port addressing
db 0edh,078h ; z80: in a,(c)
; inactive port could return 0xFF or 0x78
CPI 0FFH
JZ NEXTPT
cmp b
cpi 078h
jz nextpt
ISPORT:
mov a,d ; got a live one, probably

Loading…
Cancel
Save