Browse Source

Merge pull request #194 from wwarthen/dev

Dev
patch
b1ackmai1er 5 years ago
committed by GitHub
parent
commit
eab1eef242
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  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. 1213
      Source/Apps/ramtest/dbgmon.asm
  8. 55
      Source/Apps/ramtest/loader.asm
  9. 8
      Source/Apps/ramtest/ramtest.bat
  10. 3
      Source/Apps/ramtest/ramtest.sh
  11. 300
      Source/Apps/tstdskng.asm
  12. 2
      Source/ver.inc
  13. 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

1213
Source/Apps/ramtest/dbgmon.asm

File diff suppressed because it is too large

55
Source/Apps/ramtest/loader.asm

@ -0,0 +1,55 @@
; Z80
;***********************************
;* Z80 TEST PROTOTYPE
;* LOAD MONITOR FROM ROM INTO RAM AND EXECUTE PROGRAM
;* ANDREW LYNCH
;* LYNCHAJ@YAHOO COM
;* 15 FEB 2007
;***********************************
;********************* CONSTANTS ****************************************
RAMTOP: .EQU 0FFFFh ; HIGHEST ADDRESSABLE MEMORY LOCATION
MONSTART: .EQU 08000h ; START OF 6116 SRAM 2KB X 8 RAM F800H-FFFFH
RAMBOTTOM: .EQU 08000h ; BEGINNING OF UPPER 32K RAM PAGE
END: .EQU 0FFh ; MARK END OF TEXT
CR: .EQU 0DH ; ASCII CARRIAGE RETURN CHARACTER
LF: .EQU 0AH ; ASCII LINE FEED CHARACTER
ESC: .EQU 1BH ; ASCII ESCAPE CHARACTER
ROMSTART_MON: .EQU 00200h ; WHERE THE DBGMON IS STORED IN ROM
RAMTARG_MON: .EQU 08000h ; WHERE THE DBGMON STARTS IN RAM (ENTRY POINT)
MOVSIZ_MON: .EQU 01000h ; DBGMON IS 4096 BYTES IN LENGTH
MON_ENTRY: .EQU 08000h ; DBGMON ENTRY POINT (MAY CHANGE)
;*******************************************************************
;* START AFTER RESET
;* FUNCTION : READY SYSTEM, LOAD MONITOR INTO RAM AND START
;*******************************************************************
.ORG 00100h
; DI ; DISABLE INTERRUPT
LD SP,RAMTOP ; SET STACK POINTER TO TOP OF RAM
; IM 1 ; SET INTERRUPT MODE 1
LD HL,ROMSTART_MON ; WHERE IN ROM DBGMON IS STORED (FIRST BYTE)
LD DE,RAMTARG_MON ; WHERE IN RAM TO MOVE MONITOR TO (FIRST BYTE)
LD BC,MOVSIZ_MON ; NUMBER OF BYTES TO MOVE FROM ROM TO RAM
LDIR ; PERFORM BLOCK COPY OF DBGMON TO UPPER RAM PAGE
; EI ; ENABLE INTERRUPTS (ACCESS TO MONITOR WHILE CP/M RUNNING)
JP MON_ENTRY ; JUMP TO START OF MONITOR
.FILL 001FFh-$
.ORG 001FFh
FLAG:
.DB 0FFh
.END

8
Source/Apps/ramtest/ramtest.bat

@ -0,0 +1,8 @@
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

3
Source/Apps/ramtest/ramtest.sh

@ -0,0 +1,3 @@
../../../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

300
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,8 +73,23 @@ 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
;
;
#IF (DSKY_PROTO)
;
DSKY_PPI_IDLE: .EQU %01100000
;
DSKY_RDBIT .EQU 6
DSKY_WRBIT .EQU 5
;
#ELSE
;
DSKY_PPI_IDLE: .EQU %00000110
;
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)
DSKY_CMD_WDSP: .EQU %10010000 ; WRITE DISPLAY RAM
@ -90,10 +106,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.4a, 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 +323,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 +355,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 +403,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 +444,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 +462,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 +507,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 +525,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 +698,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 +727,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 +808,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 +1004,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 +1142,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.93"

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.93"
endm

Loading…
Cancel
Save