Browse Source

Update dmamon.asm

Stripped out all the speed selection stuff added an option for the velesoft datagear.
Speed selection can now be done from the command line. May add it back in later but will use HBIOS function call.
pull/320/head
b1ackmai1er 3 years ago
parent
commit
5b7ca9d9e6
  1. 142
      Source/Apps/Test/DMAmon/dmamon.asm

142
Source/Apps/Test/DMAmon/dmamon.asm

@ -1,53 +1,45 @@
;==================================================================================================
; Z80 DMA TEST UTILITY
; Z80 DMA TEST UTILITY - ROMWBW SPECIFIC
;==================================================================================================
;
;==================================================================================================
; PLATFORM CONFIGURATION
;==================================================================================================
;
DMAMODE_NONE .EQU 0
DMAMODE_ECB .EQU 1 ; ECB-DMA WOLFGANG KABATZKE'S Z80 DMA ECB BOARD
DMAMODE_Z180 .EQU 2 ; Z180 INTEGRATED DMA
DMAMODE_Z280 .EQU 3 ; Z280 INTEGRATED DMA
DMAMODE_RC .EQU 4 ; RCBUS Z80 DMA
DMAMODE_MBC .EQU 5 ; MBC
DMAMODE_DG .EQU 6 ; VELESOFT DATAGEAR
;
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
DMAMODE .EQU DMAMODE_MBC ; SELECT DMA DEVICE FOR TESTING
;
;==================================================================================================
; HELPER MACROS AND EQUATES
;==================================================================================================
;
FALSE .EQU 0
TRUE .EQU ~FALSE
;
; HELPER MACROS
;
#DEFINE PRTC(C) CALL PRTCH \ .DB C ; PRINT CHARACTER C TO CONSOLE - PRTC('X')
#DEFINE PRTS(S) CALL PRTSTRD \ .TEXT S ; PRINT STRING S TO CONSOLE - PRTD("HELLO")
#DEFINE PRTX(X) CALL PRTSTRI \ .DW X ; PRINT STRING AT ADDRESS X TO CONSOLE - PRTI(STR_HELLO)
;
; SYSTEM SPEED CAPABILITIES
;
SPD_FIXED .EQU 0 ; PLATFORM SPEED FIXED AND CANNOT CHANGE SPEEDS
SPD_HILO .EQU 1 ; PLATFORM CAN CHANGE BETWEEN TWO SPEEDS
;
;==================================================================================================
; INTERRUPT TESTING CONFIGURATION
; N.B., INTERRUPT TESTING REQUIRES ROMWBW!!!
; ASSUMES SYSTEM IS ALREADY CONFIGURED FOR IM2 OPERATION
; INTIDX MUST BE SET TO AN UNUSED INTERRUPT SLOT
;==================================================================================================
;
INTENABLE .EQU TRUE ; ENABLE INT TESTING
INTIDX .EQU 1 ; INT VECTOR INDEX
;
; SYSTEM SPEED CHARACTERISTICS
;
SPD_UNSUP .EQU 0 ; PLATFORM CAN CHANGE SPEEDS BUT IS UNSUPPORTED
SPD_HIGH .EQU 1 ; PLATFORM CAN CHANGE SPEED, STARTS HIGH
SPD_LOW .EQU 2 ; PLATFORM CAN CHANGE SPEED, STARTS LOW
;
; DMA MODE SELECTIONS
;
DMAMODE_NONE .EQU 0
DMAMODE_ECB .EQU 1 ; ECB-DMA WOLFGANG KABATZKE'S Z80 DMA ECB BOARD
DMAMODE_Z180 .EQU 2 ; Z180 INTEGRATED DMA
DMAMODE_Z280 .EQU 3 ; Z280 INTEGRATED DMA
DMAMODE_RC .EQU 4 ; RCBUS Z80 DMA
DMAMODE_MBC .EQU 5 ; MBC
;
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
RTCIO .EQU $70 ; RTC / SPEED PORT
HB_RTCVAL .EQU $FFEE ; HB_RTCVAL
;
CPUSPDCAP .EQU SPD_HILO ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO
CPUSPDDEF .EQU SPD_HIGH ; SPD_UNSUP|SPD_HIGH|SPD_LOW
;
DMAMODE .EQU DMAMODE_MBC
DMA_USEHS .EQU TRUE ; USE CLOCK DIVIDER
;==================================================================================================
; DMA MODE BYTES
;==================================================================================================
;
DMA_CONTINUOUS .equ %10111101 ; + Pulse
DMA_BYTE .equ %10011101 ; + Pulse
@ -72,36 +64,17 @@ DMA_REINIT_STATUS_BYTE .equ $8b
DMA_RDY .EQU %00001000
DMA_FORCE .EQU 0
;
;==================================================================================================
; ROMWBW HBIOS DEFINITIONS
;==================================================================================================
;
bf_sysint .equ $FC ; INT function
bf_sysget .equ $F8 ; GET function
;
bf_sysintinfo .equ $00 ; INT INFO subfunction
bf_sysintget .equ $10 ; INT GET subfunction
bf_sysintset .equ $20 ; INT SET subfunction
;
#IF (DMA_USEHS & (DMAMODE=DMAMODE_MBC))
#IF (CPUSPDDEF=SPD_HIGH)
#DEFINE DMAIOSLO LD A,(HB_RTCVAL) \ AND %11110111 \ OUT (RTCIO),A
#DEFINE DMAIONOR PUSH AF \ LD A,(HB_RTCVAL) \ OR %00001000 \ OUT (RTCIO),A \ POP AF
#ELSE
#DEFINE DMAIOSLO \;
#DEFINE DMAIONOR \;
#ENDIF
#ENDIF
;
#IF (DMA_USEHS & (DMAMODE=DMAMODE_ECB))
#IF (CPUSPDDEF=SPD_HIGH)
#DEFINE DMAIOSLO LD A,(HB_RTCVAL) \ OR %00001000 \ OUT (RTCIO),A
#DEFINE DMAIONOR PUSH AF \ LD A,(HB_RTCVAL) \ AND %11110111 \ OUT (RTCIO),A \ POP AF
#ELSE
#DEFINE DMAIOSLO \;
#DEFINE DMAIONOR \;
#ENDIF
#ENDIF
#IF (!DMA_USEHS)
#DEFINE DMAIOSLO \;
#DEFINE DMAIONOR \;
#ENDIF
bf_sysgetcpuspd .equ $F3 ; GET CPUSPD subfunction
;
;==================================================================================================
; MAIN DMA MONITOR ROUTINE
@ -161,12 +134,14 @@ MENULP1:
JP Z,DMATST_N ; MEMORY COPY ITER
CP '0'
JP Z,DMATST_01
#IF !(DMAMODE==DMAMODE_DG)
CP '1'
JP Z,DMATST_01
CP 'R'
JP Z,DMATST_R ; TOGGLE RESET
CP 'Y'
JP Z,DMATST_Y ; TOGGLE READY
#ENDIF
CP 'X'
JP Z,DMABYE ; EXIT
;
@ -223,7 +198,7 @@ DMATST_01:
;
DMATST_D:
call PRTSTRD
.db "\n\rDump Registers\n\r$"
.db "\n\rRegister dump:\n\r$"
CALL DMARegDump
JP MENULP
;
@ -238,6 +213,7 @@ DMATST_R:
.db "\n\rPerforming Reset\n\r$"
; CALL
JP MENULP
;
;==================================================================================================
; DISPLAY MENU
;==================================================================================================
@ -275,10 +251,27 @@ DISPM_INT:
;
#ENDIF
;
call NEWLINE
#IF (DMAMODE==DMAMODE_DG)
call PRTSTRD
.db "\n\rReset\\Ready Latch unsupported.$"
#ENDIF
call PRTSTRD ; DISPLAY SPEED
.db "\n\rCPU at $"
LD B,bf_sysget
LD C,bf_sysgetcpuspd ; GET CURRENT
RST 08 ; SPEED SETTING
OR A
LD A,L
JR Z,SPDDISP
LD A,3
;
SPDDISP:LD DE,DMA_SPD_STR
CALL PRTIDXDEA
CALL NEWLINE
;
LD HL,MENU_OPT ; DISPLAY
CALL PRTSTR ; MENU OPTIONS
;
RET
;
#INCLUDE "util.asm"
@ -293,10 +286,11 @@ DMA_INIT:
LD A, DMABASE
CALL PRTHEXBYTE
;
#IF !(DMAMODE==DMAMODE_DG)
LD A,DMA_FORCE
out (DMABASE+1),a ; force ready off
#ENDIF
;
DMAIOSLO
;
call DMAProbe ; do we have a dma?
jr nz,DMA_NOTFOUND
@ -314,7 +308,6 @@ DMA_INIT:
xor a ; set status
;
DMA_EXIT:
DMAIONOR
ret
;
DMA_NOTFOUND:
@ -334,22 +327,32 @@ DMA_DEV_STR:
.TEXT "Z280$"
.TEXT "RCBUS$"
.TEXT "MBC$"
.TEXT "DATAGEAR$"
;
DMA_SPD_STR:
.TEXT "half speed.$"
.TEXT "full speed.$"
.TEXT "double speed.$"
.TEXT "unknown speed.$"
;
MENU_OPT:
.TEXT "\n\r"
.TEXT "D) Dump DMA registers\n\r"
.TEXT "I) Initialize DMA\n\r"
.TEXT "T) Toggle Interrupt Usage\n\r"
.TEXT "M) Test Memory-Memory Copy\n\r"
.TEXT "N) Test Memory-Memory Copy Iteratively\n\r"
.TEXT "0) Test DMA Port Selection\n\r"
#IF !(DMAMODE==DMAMODE_DG)
.TEXT "1) Test DMA Latch Port Selection\n\r"
.TEXT "Y) Test Ready Bit\n\r"
#ENDIF
.TEXT "X) Exit\n\r"
.TEXT ">$"
;
;==================================================================================================
; PULSE PORT
; PULSE PORT (COMMON ROUTINE WITH A CONTAINING ASCII PORT OFFSET)
;==================================================================================================
;
DMA_Port01:
@ -390,6 +393,9 @@ dlylp: dec bc
;
DMA_ReadyT:
call NEWLINE
#IF !(DMAMODE==DMAMODE_DG)
#ENDIF
ld c,DMABASE+1 ; toggle
ld b,$20 ; loop counter
portlp2:push bc
@ -578,7 +584,6 @@ DMALDIR:
ld b,DMACopy_Len ; dma command
ld c,DMABASE ; block
;
DMAIOSLO
di
otir ; load and execute dma
ei
@ -588,7 +593,6 @@ DMALDIR:
in a,(DMABASE) ; set non-zero
and %00111011 ; if failed
sub %00011011
DMAIONOR
ret
;
DMACopy ;.db DMA_DISABLE ; R6-Command Disable DMA
@ -625,7 +629,6 @@ DMALDIRINT:
ld b,DMACopyInt_Len ; dma command
ld c,DMABASE ; block
;
DMAIOSLO
di
otir ; load and execute dma
ei
@ -635,7 +638,6 @@ DMALDIRINT:
in a,(DMABASE) ; set non-zero
and %00111011 ; if failed
sub %00011011
DMAIONOR
;
#ENDIF
;
@ -677,7 +679,6 @@ DMAOTIR:
ld b,DMAOut_Len ; dma command
ld c,DMABASE ; block
;
DMAIOSLO
di
otir ; load and execute dma
ei
@ -688,7 +689,6 @@ DMAOTIR:
and %00111011 ; if failed
sub %00011011
;
DMAIONOR
ret
;
DMAOutCode ;.db DMA_DISABLE ; R6-Command Disable DMA
@ -726,7 +726,6 @@ DMAINIR:
ld b,DMAIn_Len ; dma command
ld c,DMABASE ; block
;
DMAIOSLO
di
otir ; load and execute dma
ei
@ -737,7 +736,6 @@ DMAINIR:
and %00111011 ; if failed
sub %00011011
;
DMAIONOR
ret
;
DMAInCode ;.db DMA_DISABLE ; R6-Command Disable DMA

Loading…
Cancel
Save