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 FALSE .EQU 0
TRUE .EQU ~FALSE TRUE .EQU ~FALSE
; ;
; HELPER MACROS
;
#DEFINE PRTC(C) CALL PRTCH \ .DB C ; PRINT CHARACTER C TO CONSOLE - PRTC('X') #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 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) #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 ; INTERRUPT TESTING CONFIGURATION
; N.B., INTERRUPT TESTING REQUIRES ROMWBW!!!
; ASSUMES SYSTEM IS ALREADY CONFIGURED FOR IM2 OPERATION ; ASSUMES SYSTEM IS ALREADY CONFIGURED FOR IM2 OPERATION
; INTIDX MUST BE SET TO AN UNUSED INTERRUPT SLOT ; INTIDX MUST BE SET TO AN UNUSED INTERRUPT SLOT
;==================================================================================================
; ;
INTENABLE .EQU TRUE ; ENABLE INT TESTING INTENABLE .EQU TRUE ; ENABLE INT TESTING
INTIDX .EQU 1 ; INT VECTOR INDEX 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_CONTINUOUS .equ %10111101 ; + Pulse
DMA_BYTE .equ %10011101 ; + Pulse DMA_BYTE .equ %10011101 ; + Pulse
@ -72,36 +64,17 @@ DMA_REINIT_STATUS_BYTE .equ $8b
DMA_RDY .EQU %00001000 DMA_RDY .EQU %00001000
DMA_FORCE .EQU 0 DMA_FORCE .EQU 0
; ;
;==================================================================================================
; ROMWBW HBIOS DEFINITIONS
;==================================================================================================
;
bf_sysint .equ $FC ; INT function bf_sysint .equ $FC ; INT function
bf_sysget .equ $F8 ; GET function
; ;
bf_sysintinfo .equ $00 ; INT INFO subfunction bf_sysintinfo .equ $00 ; INT INFO subfunction
bf_sysintget .equ $10 ; INT GET subfunction bf_sysintget .equ $10 ; INT GET subfunction
bf_sysintset .equ $20 ; INT SET 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 ; MAIN DMA MONITOR ROUTINE
@ -161,12 +134,14 @@ MENULP1:
JP Z,DMATST_N ; MEMORY COPY ITER JP Z,DMATST_N ; MEMORY COPY ITER
CP '0' CP '0'
JP Z,DMATST_01 JP Z,DMATST_01
#IF !(DMAMODE==DMAMODE_DG)
CP '1' CP '1'
JP Z,DMATST_01 JP Z,DMATST_01
CP 'R' CP 'R'
JP Z,DMATST_R ; TOGGLE RESET JP Z,DMATST_R ; TOGGLE RESET
CP 'Y' CP 'Y'
JP Z,DMATST_Y ; TOGGLE READY JP Z,DMATST_Y ; TOGGLE READY
#ENDIF
CP 'X' CP 'X'
JP Z,DMABYE ; EXIT JP Z,DMABYE ; EXIT
; ;
@ -223,7 +198,7 @@ DMATST_01:
; ;
DMATST_D: DMATST_D:
call PRTSTRD call PRTSTRD
.db "\n\rDump Registers\n\r$"
.db "\n\rRegister dump:\n\r$"
CALL DMARegDump CALL DMARegDump
JP MENULP JP MENULP
; ;
@ -238,6 +213,7 @@ DMATST_R:
.db "\n\rPerforming Reset\n\r$" .db "\n\rPerforming Reset\n\r$"
; CALL ; CALL
JP MENULP JP MENULP
;
;================================================================================================== ;==================================================================================================
; DISPLAY MENU ; DISPLAY MENU
;================================================================================================== ;==================================================================================================
@ -275,10 +251,27 @@ DISPM_INT:
; ;
#ENDIF #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 LD HL,MENU_OPT ; DISPLAY
CALL PRTSTR ; MENU OPTIONS CALL PRTSTR ; MENU OPTIONS
;
RET RET
; ;
#INCLUDE "util.asm" #INCLUDE "util.asm"
@ -293,10 +286,11 @@ DMA_INIT:
LD A, DMABASE LD A, DMABASE
CALL PRTHEXBYTE CALL PRTHEXBYTE
; ;
#IF !(DMAMODE==DMAMODE_DG)
LD A,DMA_FORCE LD A,DMA_FORCE
out (DMABASE+1),a ; force ready off out (DMABASE+1),a ; force ready off
#ENDIF
; ;
DMAIOSLO
; ;
call DMAProbe ; do we have a dma? call DMAProbe ; do we have a dma?
jr nz,DMA_NOTFOUND jr nz,DMA_NOTFOUND
@ -314,7 +308,6 @@ DMA_INIT:
xor a ; set status xor a ; set status
; ;
DMA_EXIT: DMA_EXIT:
DMAIONOR
ret ret
; ;
DMA_NOTFOUND: DMA_NOTFOUND:
@ -334,22 +327,32 @@ DMA_DEV_STR:
.TEXT "Z280$" .TEXT "Z280$"
.TEXT "RCBUS$" .TEXT "RCBUS$"
.TEXT "MBC$" .TEXT "MBC$"
.TEXT "DATAGEAR$"
;
DMA_SPD_STR:
.TEXT "half speed.$"
.TEXT "full speed.$"
.TEXT "double speed.$"
.TEXT "unknown speed.$"
; ;
MENU_OPT: MENU_OPT:
.TEXT "\n\r" .TEXT "\n\r"
.TEXT "D) Dump DMA registers\n\r"
.TEXT "I) Initialize DMA\n\r" .TEXT "I) Initialize DMA\n\r"
.TEXT "T) Toggle Interrupt Usage\n\r" .TEXT "T) Toggle Interrupt Usage\n\r"
.TEXT "M) Test Memory-Memory Copy\n\r" .TEXT "M) Test Memory-Memory Copy\n\r"
.TEXT "N) Test Memory-Memory Copy Iteratively\n\r" .TEXT "N) Test Memory-Memory Copy Iteratively\n\r"
.TEXT "0) Test DMA Port Selection\n\r" .TEXT "0) Test DMA Port Selection\n\r"
#IF !(DMAMODE==DMAMODE_DG)
.TEXT "1) Test DMA Latch Port Selection\n\r" .TEXT "1) Test DMA Latch Port Selection\n\r"
.TEXT "Y) Test Ready Bit\n\r" .TEXT "Y) Test Ready Bit\n\r"
#ENDIF
.TEXT "X) Exit\n\r" .TEXT "X) Exit\n\r"
.TEXT ">$" .TEXT ">$"
; ;
;================================================================================================== ;==================================================================================================
; PULSE PORT
; PULSE PORT (COMMON ROUTINE WITH A CONTAINING ASCII PORT OFFSET)
;================================================================================================== ;==================================================================================================
; ;
DMA_Port01: DMA_Port01:
@ -390,6 +393,9 @@ dlylp: dec bc
; ;
DMA_ReadyT: DMA_ReadyT:
call NEWLINE call NEWLINE
#IF !(DMAMODE==DMAMODE_DG)
#ENDIF
ld c,DMABASE+1 ; toggle ld c,DMABASE+1 ; toggle
ld b,$20 ; loop counter ld b,$20 ; loop counter
portlp2:push bc portlp2:push bc
@ -578,7 +584,6 @@ DMALDIR:
ld b,DMACopy_Len ; dma command ld b,DMACopy_Len ; dma command
ld c,DMABASE ; block ld c,DMABASE ; block
; ;
DMAIOSLO
di di
otir ; load and execute dma otir ; load and execute dma
ei ei
@ -588,7 +593,6 @@ DMALDIR:
in a,(DMABASE) ; set non-zero in a,(DMABASE) ; set non-zero
and %00111011 ; if failed and %00111011 ; if failed
sub %00011011 sub %00011011
DMAIONOR
ret ret
; ;
DMACopy ;.db DMA_DISABLE ; R6-Command Disable DMA DMACopy ;.db DMA_DISABLE ; R6-Command Disable DMA
@ -625,7 +629,6 @@ DMALDIRINT:
ld b,DMACopyInt_Len ; dma command ld b,DMACopyInt_Len ; dma command
ld c,DMABASE ; block ld c,DMABASE ; block
; ;
DMAIOSLO
di di
otir ; load and execute dma otir ; load and execute dma
ei ei
@ -635,7 +638,6 @@ DMALDIRINT:
in a,(DMABASE) ; set non-zero in a,(DMABASE) ; set non-zero
and %00111011 ; if failed and %00111011 ; if failed
sub %00011011 sub %00011011
DMAIONOR
; ;
#ENDIF #ENDIF
; ;
@ -677,7 +679,6 @@ DMAOTIR:
ld b,DMAOut_Len ; dma command ld b,DMAOut_Len ; dma command
ld c,DMABASE ; block ld c,DMABASE ; block
; ;
DMAIOSLO
di di
otir ; load and execute dma otir ; load and execute dma
ei ei
@ -688,7 +689,6 @@ DMAOTIR:
and %00111011 ; if failed and %00111011 ; if failed
sub %00011011 sub %00011011
; ;
DMAIONOR
ret ret
; ;
DMAOutCode ;.db DMA_DISABLE ; R6-Command Disable DMA DMAOutCode ;.db DMA_DISABLE ; R6-Command Disable DMA
@ -726,7 +726,6 @@ DMAINIR:
ld b,DMAIn_Len ; dma command ld b,DMAIn_Len ; dma command
ld c,DMABASE ; block ld c,DMABASE ; block
; ;
DMAIOSLO
di di
otir ; load and execute dma otir ; load and execute dma
ei ei
@ -737,7 +736,6 @@ DMAINIR:
and %00111011 ; if failed and %00111011 ; if failed
sub %00011011 sub %00011011
; ;
DMAIONOR
ret ret
; ;
DMAInCode ;.db DMA_DISABLE ; R6-Command Disable DMA DMAInCode ;.db DMA_DISABLE ; R6-Command Disable DMA

Loading…
Cancel
Save