From 5d3c1e2d4ada5549e9c36c74d17ee59d8b9309cb Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 26 Feb 2023 11:42:23 +0800 Subject: [PATCH 1/3] Update util.asm --- Source/HBIOS/util.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 93ac0ba5d0b284fec12bdb39eef91b1225e7ac5c Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 26 Feb 2023 14:09:49 +0800 Subject: [PATCH 2/3] Update SystemGuide.md To match hbios --- Source/Doc/SystemGuide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 From 5b7ca9d9e6f2bb64017a44f6ccb1a70f275b4cbb Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 26 Feb 2023 14:58:32 +0800 Subject: [PATCH 3/3] 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