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 diff --git a/Source/Doc/SystemGuide.md b/Source/Doc/SystemGuide.md index bf1a2d99..3eb62d3e 100644 --- a/Source/Doc/SystemGuide.md +++ b/Source/Doc/SystemGuide.md @@ -2116,8 +2116,8 @@ result code. This function will return the running CPU speed attributes of a system. The Clock Mult (L) returned indicates the frequency multiple being -applied to the raw oscillator clock. If is defined as: 0=Half, 2=Full, -and 3=Double. The wait states for the system are also provided as +applied to the raw oscillator clock. If is defined as: 0=Half, 1=Full, +and 2=Double. The wait states for the system are also provided as Memory Wait States (D) and I/O Wait States (E). The value of Memory Wait States (D) is the actual number of wait states, not the number of wait states added. The returned Status (A) is a standard HBIOS diff --git a/Source/HBIOS/util.asm b/Source/HBIOS/util.asm index 328edc65..29e6c532 100644 --- a/Source/HBIOS/util.asm +++ b/Source/HBIOS/util.asm @@ -841,7 +841,7 @@ PRTDEC8: ; PRINT VALUE OF A REGISTER IN DECIMAL POP IY RET ; -PRTDEC16: ; PRINT VALUE OF HL REGISGTER IN DECIMAL +PRTDEC16: ; PRINT VALUE OF HL REGISTER IN DECIMAL PUSH IY LD IY,B2D16 CALL PRTDECSTR