From 5852349e1541d63db1bbb64b7e500f54c0094700 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sun, 18 Jul 2021 17:12:53 -0700 Subject: [PATCH] RAMTEST & DSKNGTST - Integrate RAMTEST app from Andrew into mainline build process. - Enhance DSKNGTST app to test on any arbitrary PPI port. NOTE TO USERS: RAMTEST app is currently only compatible with SBC and MBC hardware. --- Source/Apps/Build.cmd | 1 + Source/Apps/Clean.cmd | 1 + Source/Apps/Makefile | 2 +- Source/Apps/ramtest/Build.cmd | 15 ++ Source/Apps/ramtest/Clean.cmd | 6 + Source/Apps/ramtest/Makefile | 10 ++ Source/Apps/ramtest/ramtest.bat | 11 +- Source/Apps/ramtest/ramtest.sh | 4 +- Source/Apps/tstdskng.asm | 295 ++++++++++++++++++++++++-------- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 11 files changed, 270 insertions(+), 79 deletions(-) create mode 100644 Source/Apps/ramtest/Build.cmd create mode 100644 Source/Apps/ramtest/Clean.cmd create mode 100644 Source/Apps/ramtest/Makefile diff --git a/Source/Apps/Build.cmd b/Source/Apps/Build.cmd index ee85be71..95411144 100644 --- a/Source/Apps/Build.cmd +++ b/Source/Apps/Build.cmd @@ -34,6 +34,7 @@ setlocal & cd FDU && call Build || exit /b 1 & endlocal setlocal & cd Tune && call Build || exit /b 1 & endlocal setlocal & cd FAT && call Build || exit /b 1 & endlocal setlocal & cd I2C && call Build || exit /b 1 & endlocal +setlocal & cd ramtest && call Build || exit /b 1 & endlocal copy *.com %APPBIN%\ diff --git a/Source/Apps/Clean.cmd b/Source/Apps/Clean.cmd index 36424e12..04a056ee 100644 --- a/Source/Apps/Clean.cmd +++ b/Source/Apps/Clean.cmd @@ -12,3 +12,4 @@ setlocal & cd FDU && call Clean || exit /b 1 & endlocal setlocal & cd Tune && call Clean || exit /b 1 & endlocal setlocal & cd FAT && call Clean || exit /b 1 & endlocal setlocal & cd I2C && call Clean || exit /b 1 & endlocal +setlocal & cd ramtest && call Clean || exit /b 1 & endlocal diff --git a/Source/Apps/Makefile b/Source/Apps/Makefile index 322bb6cc..cbcd6675 100644 --- a/Source/Apps/Makefile +++ b/Source/Apps/Makefile @@ -2,7 +2,7 @@ OBJECTS = sysgen.com survey.com \ syscopy.com assign.com format.com talk.com mode.com rtc.com \ timer.com inttest.com rtchb.com ppidetst.com tstdskng.com OTHERS = *.hex *.com -SUBDIRS = XM FDU FAT Tune I2C +SUBDIRS = XM FDU FAT Tune I2C ramtest DEST = ../../Binary/Apps TOOLS =../../Tools diff --git a/Source/Apps/ramtest/Build.cmd b/Source/Apps/ramtest/Build.cmd new file mode 100644 index 00000000..f62f9c6f --- /dev/null +++ b/Source/Apps/ramtest/Build.cmd @@ -0,0 +1,15 @@ +@echo off +setlocal + +set TOOLS=../../../Tools +set PATH=%TOOLS%\tasm32;%PATH% +set TASMTABS=%TOOLS%\tasm32 + +tasm -t80 -b -fFF loader.asm loader.bin loader.lst +tasm -t80 -b -fFF dbgmon.asm dbgmon.bin dbgmon.lst + +copy /Y /b loader.bin+dbgmon.bin ramtest.com + +if errorlevel 1 goto :eof + +copy /Y ramtest.com ..\..\..\Binary\Apps\ diff --git a/Source/Apps/ramtest/Clean.cmd b/Source/Apps/ramtest/Clean.cmd new file mode 100644 index 00000000..60b882d0 --- /dev/null +++ b/Source/Apps/ramtest/Clean.cmd @@ -0,0 +1,6 @@ +@echo off +setlocal + +if exist *.com del *.com +if exist *.bin del *.bin +if exist *.lst del *.lst diff --git a/Source/Apps/ramtest/Makefile b/Source/Apps/ramtest/Makefile new file mode 100644 index 00000000..f99ee0bc --- /dev/null +++ b/Source/Apps/ramtest/Makefile @@ -0,0 +1,10 @@ +OBJECTS = ramtest.com +DEST = ../../../Binary/Apps +DOCDEST = ../../../Doc +TOOLS = ../../../Tools +OTHERS = loader.bin dbgmon.bin +include $(TOOLS)/Makefile.inc + +ramtest.com: loader.bin dbgmon.bin + cat loader.bin dbgmon.bin >ramtest.com + diff --git a/Source/Apps/ramtest/ramtest.bat b/Source/Apps/ramtest/ramtest.bat index 140aa8e3..8d78b069 100644 --- a/Source/Apps/ramtest/ramtest.bat +++ b/Source/Apps/ramtest/ramtest.bat @@ -1,3 +1,8 @@ -tasm -t80 -b loader.asm loader.bin -tasm -t80 -b dbgmon.asm dbgmon.bin -copy /b loader.bin+dbgmon.bin ramtest.com +set TOOLS=../../../Tools +set PATH=%TOOLS%\tasm32;%PATH% +set TASMTABS=%TOOLS%\tasm32 + +tasm -t80 -b -fFF loader.asm loader.bin loader.lst +tasm -t80 -b -fFF dbgmon.asm dbgmon.bin dbgmon.lst + +copy /Y /b loader.bin+dbgmon.bin ramtest.com diff --git a/Source/Apps/ramtest/ramtest.sh b/Source/Apps/ramtest/ramtest.sh index 363bd357..adbb2055 100644 --- a/Source/Apps/ramtest/ramtest.sh +++ b/Source/Apps/ramtest/ramtest.sh @@ -1,3 +1,3 @@ -~/RomWBW/Tools/unix/uz80as/uz80as -t z80 loader.asm loader.bin -~/RomWBW/Tools/unix/uz80as/uz80as -t z80 dbgmon.asm dbgmon.bin +../../../Tools/unix/uz80as/uz80as -t z80 loader.asm loader.bin +../../../Tools/unix/uz80as/uz80as -t z80 dbgmon.asm dbgmon.bin cat loader.bin dbgmon.bin > ramtest.com diff --git a/Source/Apps/tstdskng.asm b/Source/Apps/tstdskng.asm index ef34f35d..2c43229a 100644 --- a/Source/Apps/tstdskng.asm +++ b/Source/Apps/tstdskng.asm @@ -19,9 +19,10 @@ TRUE: .EQU !FALSE DSKY_OSC: .EQU 3000000 ; OSCILLATOR FREQ IN HZ ; BDOS: .EQU TRUE ; BDOS OR DIRECT TO 8250ISH +DSKY_PROTO: .EQU FALSE ; SET FOR DSKYNG PROTOTYPE ; UART_BASE: .EQU $68 ; UART BASE IO ADDRESS -PPI_BASE: .EQU $60 ; PPI BASE IO PORT +PPI_BASE_DEF: .EQU $60 ; PPI BASE IO PORT ; ; LED SEGMENTS (BIT VALUES) ; @@ -56,10 +57,10 @@ PPI_BASE: .EQU $60 ; PPI BASE IO PORT ; 10 10 10 10 10 ; 20 20 20 20 20 ; -PPIA: .EQU PPI_BASE + 0 ; PORT A -PPIB: .EQU PPI_BASE + 1 ; PORT B -PPIC: .EQU PPI_BASE + 2 ; PORT C -PPIX: .EQU PPI_BASE + 3 ; PIO CONTROL PORT +PPIA: .EQU 0 ; PORT A OFFSET +PPIB: .EQU 1 ; PORT B OFFSET +PPIC: .EQU 2 ; PORT C OFFSET +PPIX: .EQU 3 ; PIO CONTROL PORT OFFSET ; DSKY_PPIX_RD: .EQU %10010010 ; PPIX VALUE FOR READS DSKY_PPIX_WR: .EQU %10000010 ; PPIX VALUE FOR WRITES @@ -72,7 +73,15 @@ DSKY_PPIX_WR: .EQU %10000010 ; PPIX VALUE FOR WRITES ; SETTING BITS 3 & 4 WILL ASSERT /CS ON 3279 ; CLEAR BITS 1 OR 2 TO ASSERT READ/WRITE ; -DSKY_PPI_IDLE: .EQU %00000110 +DSKY_PPI_IDLE: .EQU %01100000 +; +#IF (DSKY_PROTO) +DSKY_RDBIT .EQU 6 +DSKY_WRBIT .EQU 5 +#ELSE +DSKY_RDBIT .EQU 2 +DSKY_WRBIT .EQU 1 +#ENDIF ; DSKY_CMD_CLR: .EQU %11011111 ; CLEAR (ALL OFF) DSKY_CMD_CLRX: .EQU %11010011 ; CLEAR (ALL ON) @@ -90,10 +99,22 @@ DSKY_PRESCL: .EQU DSKY_OSC / 100000 ; PRESCALER LD SP,STACK ; CALL PRTSTRD - .DB "\r\nNextGenDSKY Test Program, v1.3, 2021-07-15$" + .DB "\r\nNextGenDSKY$" +; +#IF (DSKY_PROTO) CALL PRTSTRD - .DB "\r\nPPI port 0x$" - LD A,PPI_BASE + .DB " Prototype$" +#ENDIF +; + CALL PRTSTRD + .DB " Test Program, v1.4, 2021-07-18$" +; + CALL GET_BASE + JP NZ,EXIT +; + CALL PRTSTRD + .DB "\r\nDSKYng PPI base port: 0x$" + LD A,(PPI_BASE) CALL PRTHEXBYTE CALL NEWLINE ; @@ -295,27 +316,30 @@ EXIT: ; DSKY_PPIWR: PUSH AF + PUSH BC +; + LD A,(PPI_BASE) + ADD A,PPIX + LD C,A ; ; CHECK FOR WRITE MODE - LD A,(DSKY_PPIX_VAL) + LD A,(PPIX_VAL) CP DSKY_PPIX_WR JR Z,DSKY_PPIWR1 ; ; SET PPI TO WRITE MODE LD A,DSKY_PPIX_WR - OUT (PPIX),A - LD (DSKY_PPIX_VAL),A + OUT (C),A + LD (PPIX_VAL),A ; ; RESTORE PORT C (MAY NOT BE NEEDED) LD A,DSKY_PPI_IDLE - OUT (PPIC),A -; -; ; DIAGNOSTIC -; LD A,'W' -; CALL COUT + DEC C + OUT (C),A ; DSKY_PPIWR1: ; + POP BC POP AF RET ; @@ -324,22 +348,29 @@ DSKY_PPIWR1: ; DSKY_PPIRD: PUSH AF + PUSH BC +; + LD A,(PPI_BASE) + ADD A,PPIX + LD C,A ; ; CHECK FOR READ MODE - LD A,(DSKY_PPIX_VAL) + LD A,(PPIX_VAL) CP DSKY_PPIX_RD JR Z,DSKY_PPIRD1 ; ; SET PPI TO READ MODE LD A,DSKY_PPIX_RD - OUT (PPIX),A - LD (DSKY_PPIX_VAL),A + OUT (C),A + LD (PPIX_VAL),A ; -; ; DIAGNOSTIC -; LD A,'R' -; CALL COUT + ; RESTORE PORT C (MAY NOT BE NEEDED) + LD A,DSKY_PPI_IDLE + DEC C + OUT (C),A ; DSKY_PPIRD1: + POP BC POP AF RET ; @@ -365,18 +396,23 @@ DSKY_INIT: ; DSKY_RES: ; + PUSH BC + LD A,(PPI_BASE) + ADD A,PPIC + LD C,A ; SETUP PPI CALL DSKY_PPIRD ; INIT 8279 VALUES TO IDLE STATE LD A,DSKY_PPI_IDLE - OUT (PPIC),A + OUT (C),A ; PULSE RESET SIGNAL ON 8279 SET 7,A - OUT (PPIC),A + OUT (C),A RES 7,A - OUT (PPIC),A + OUT (C),A ; DONE CALL DSKY_PPIIDLE + POP BC RET ; ; COMMAND IN A @@ -401,7 +437,9 @@ DSKY_DOUT2: CALL DSKY_PPIWR ; ; SETUP - LD C,PPIC + LD A,(PPI_BASE) + ADD A,PPIC + LD C,A ; ; SET ADDRESS FIRST LD A,DSKY_PPI_IDLE @@ -417,14 +455,18 @@ DSKY_DOUT2: LD B,A ; ; ASSERT DATA BYTE VALUE + DEC C + DEC C POP AF - OUT (PPIA),A + OUT (C),A + INC C + INC C ; ; PULSE /WR - RES 1,B + RES DSKY_WRBIT,B OUT (C),B NOP ; MAY NOT BE NEEDED - SET 1,B + SET DSKY_WRBIT,B OUT (C),B ; ; DEASSERT /CS @@ -458,7 +500,9 @@ DSKY_DIN2: CALL DSKY_PPIRD ; ; SETUP - LD C,PPIC + LD A,(PPI_BASE) + ADD A,PPIC + LD C,A ; ; SET ADDRESS FIRST LD A,DSKY_PPI_IDLE @@ -474,14 +518,18 @@ DSKY_DIN2: LD B,A ; ; ASSERT /RD - RES 2,B + RES DSKY_RDBIT,B OUT (C),B ; ; GET VALUE - IN A,(PPIA) + DEC C + DEC C + IN A,(C) + INC C + INC C ; ; DEASSERT /RD - SET 2,B + SET DSKY_RDBIT,B OUT (C),B ; ; DEASSERT /CS @@ -643,6 +691,27 @@ DSKY_READ1: DJNZ DSKY_READ1 RET ; +; +; +GET_BASE: + CALL PRTSTRD + .DB "\r\nDSKYng PPI base port [0x$" + LD A,(PPI_BASE) + CALL PRTHEXBYTE + CALL PRTSTRD + .DB "]: $" + LD A,(PPI_BASE) + CALL GETHEXBYTE + JR C,GET_BASE1 + LD (PPI_BASE),A + XOR A + RET +; +GET_BASE1: + CALL PRTSTRD + .DB "\r\nInvalid DSKYng PPI base port value!$" + JR GET_BASE +; ; OUTPUT CHARACTER FROM A ; COUT: @@ -651,7 +720,7 @@ COUT: PUSH DE ; PUSH HL ; -#IF BDOS +#IF (BDOS) LD C,2 ; BDOS FUNC: CONSOLE OUTPUT LD E,A ; CHARACTER TO E CALL $0005 ; CALL BDOS @@ -732,35 +801,6 @@ WAITKEY: JP Z,EXIT POP AF RET -; -; CONVERT BINARY VALUE IN A TO ASCII HEX CHARACTERS IN DE -; -HEXASCII: - LD D,A - CALL HEXCONV - LD E,A - LD A,D - RLCA - RLCA - RLCA - RLCA - CALL HEXCONV - LD D,A - RET -; -; CONVERT LOW NIBBLE OF A TO ASCII HEX -; -HEXCONV: - AND 0FH ;LOW NIBBLE ONLY - ADD A,90H - DAA - ADC A,40H - DAA - RET - - - - ; ;================================================================================================== ; UTILITY FUNCTIONS @@ -957,6 +997,119 @@ PRTHEXWORDHL: POP AF RET ; +; CONVERT BINARY VALUE IN A TO ASCII HEX CHARACTERS IN DE +; +HEXASCII: + LD D,A + CALL HEXCONV + LD E,A + LD A,D + RLCA + RLCA + RLCA + RLCA + CALL HEXCONV + LD D,A + RET +; +; CONVERT LOW NIBBLE OF A TO ASCII HEX +; +HEXCONV: + AND 0FH ;LOW NIBBLE ONLY + ADD A,90H + DAA + ADC A,40H + DAA + RET +; +; +; +GETHEXBYTE: + PUSH AF ; SAVE INCOMING VALUE + LD C,0AH ; BDOS READ CONSOLE BUFFER + LD DE,CONBUF + CALL 5 ; GET EDITED STRING + CALL NEWLINE + POP DE ; RESTORE INCOMING TO D + + ; OK WE SHOULD NOW HAVE A STRING WITH A HEX NUMBER + LD HL,CONBUF + INC HL + LD A,(HL) ; GET CHARACTER COUNT + INC HL + CP 3 + JR C,GHB0 ; OK IF <= 2 CHARS + SCF ; SIGNAL ERROR + RET ; AND RETURN + +GHB0: + OR A ; SET FLAGS + JR NZ,GHB1 ; GOT CHARS, GO AHEAD + LD A,D ; RESTORE INCOMING VALUE + OR A ; SIGNAL SUCCESS + RET ; AND DONE + +GHB1: + LD B,A ; COUNT TO B + LD C,0 ; INITIAL VALUE + +GHB2: + LD A,(HL) ; GET NEXT CHAR + INC HL + CALL ISHEX + RET C ; ABORT ON NON-HEX CHAR + + ; OK WE ARE HERE WHEN WE HAVE A VALID CHARACTER (0-9,A-F,A-F) NEED TO CONVERT TO BINARY + ; CHARACTER IS STILL IN A + + CP 3AH ; TEST FOR 0-9 + JP M,GHB2C + CP 47H ; TEST FOR A-F + JP M,GHB2B + CP 67H ; TEST FOR A-F + JP M,GHB2A +GHB2A: SUB 20H ; CHARACTER IS A-F +GHB2B: SUB 07H ; CHARACTER IS A-F +GHB2C: SUB 30H ; CHARACTER IS 0-9 + + RLC C ; MULTIPLY CUR VALUE BY 16 + RLC C + RLC C + RLC C + ADD A,C ; ADD TO ACCUM + LD C,A ; PUT BACK IN C + + DJNZ GHB2 ; LOOP THRU ALL CHARS + + LD A,C ; INTO A FOR RETURN + OR A ; SIGNAL SUCCESS + RET ; DONE + +ISHEX: + CP 30H ; CHECK IF LESS THAN CHARACTER 0 + JP M,NOTHEX + CP 3AH ; CHECK FOR > 9 + JP M,ISHX1 ; OK, CHARACTER IS 1-9 + + CP 41H ; CHECK FOR CHARACTER LESS THAN A + JP M,NOTHEX + CP 47H ; CHECK FOR CHARACTERS > F + JP M,ISHX1 + + CP 61H ; CHECK FOR CHARACTERS < A + JP M,NOTHEX + + CP 67H ; CHECK FOR CHARACTER > F + JP M,ISHX1 +NOTHEX: + SCF ; SET CARRY TO INDICATE FAIL + RET + +ISHX1: + SCF + CCF + RET +; ; SHORT DELAY FUNCTIONS. NO CLOCK SPEED COMPENSATION, SO THEY ; WILL RUN LONGER ON SLOWER SYSTEMS. THE NUMBER INDICATES THE ; NUMBER OF CALL/RET INVOCATIONS. A SINGLE CALL/RET IS @@ -982,16 +1135,16 @@ ADDHLA: RET NC INC H RET - - - - - - ; ; STORAGE ; -DSKY_PPIX_VAL: .DB 0 +PPI_BASE: .DB PPI_BASE_DEF +; +CONBUF: .DB 8 ; MAXIMUM CHARS + .DB 0 ; COUNT + .FILL 8 ; SIZE OF BUFFER +; +PPIX_VAL: .DB 0 ; DSPBUF: .FILL 16,0 ; diff --git a/Source/ver.inc b/Source/ver.inc index 15d243c4..754ca4c0 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 1 #DEFINE RUP 1 #DEFINE RTP 0 -#DEFINE BIOSVER "3.1.1-pre.91" +#DEFINE BIOSVER "3.1.1-pre.92" diff --git a/Source/ver.lib b/Source/ver.lib index da79ddcc..1fce3dfb 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 1 rup equ 1 rtp equ 0 biosver macro - db "3.1.1-pre.91" + db "3.1.1-pre.92" endm