From 5b7ca9d9e6f2bb64017a44f6ccb1a70f275b4cbb Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 26 Feb 2023 14:58:32 +0800 Subject: [PATCH] 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. --- Source/Apps/Test/DMAmon/dmamon.asm | 142 ++++++++++++++--------------- 1 file changed, 70 insertions(+), 72 deletions(-) diff --git a/Source/Apps/Test/DMAmon/dmamon.asm b/Source/Apps/Test/DMAmon/dmamon.asm index 70ef47c3..b559ae17 100644 --- a/Source/Apps/Test/DMAmon/dmamon.asm +++ b/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