Browse Source

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.
pull/216/head
Wayne Warthen 5 years ago
parent
commit
5852349e15
  1. 1
      Source/Apps/Build.cmd
  2. 1
      Source/Apps/Clean.cmd
  3. 2
      Source/Apps/Makefile
  4. 15
      Source/Apps/ramtest/Build.cmd
  5. 6
      Source/Apps/ramtest/Clean.cmd
  6. 10
      Source/Apps/ramtest/Makefile
  7. 11
      Source/Apps/ramtest/ramtest.bat
  8. 4
      Source/Apps/ramtest/ramtest.sh
  9. 295
      Source/Apps/tstdskng.asm
  10. 2
      Source/ver.inc
  11. 2
      Source/ver.lib

1
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%\

1
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

2
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

15
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\

6
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

10
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

11
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

4
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

295
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
;

2
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"

2
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

Loading…
Cancel
Save