You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

567 lines
9.5 KiB

; 24.9.2018 PMS (b1ackmai1er)
; Modified version for ECB-ZILOG PERIPHERALS BOARD - TEST 2 PIO's
; 01.11.2011 WKA
; Assembler M80
; ECB-4PIO
; Testprogramm f�r die I/O-Karte ECB-4PIO in Z80-Mnemonics
PAGE 72
.Z80
ASEG
ORG 100H
;
;CP/M-ADDRESSES
;* * * * * * *
;
BOOT EQU 0 ;WARMBOOT CP/M
BDOS EQU 5 ;ENTRY BDOS
NMI EQU 66H ;Error-ROUTINE
;
;CONSOLE-CODES
;* * * * * * *
;
EOT EQU 4 ;END OF TEXT
BS EQU 8 ;BACKSPACE
TAB EQU 9 ;TABULATOR
LF EQU 0AH ;LINE-FEED
CR EQU 0DH ;CARRIAGE-RETURN
FF EQU 0CH ;FORM-FEED
ESC EQU 1BH ;ESCAPE
CTRLC EQU 'C'-40H ;CONTROL-C
CTRLW EQU 'W'-40H ;CONTROL-W
CTRLX EQU 'X'-40H ;CONTROL-X
CTRLY EQU 'Y'-40H ;CONTROL-Y
CTRLZ EQU 'Z'-40H ;CONTROL-Z
;
BASE EQU 0B8H ; 4 DIL-SCHALTER
;
PIO0AD EQU BASE+0 ; PIO 0 A DATEN
PIO0AC EQU BASE+2 ; PIO 0 A CONTROL
PIO0BD EQU BASE+1 ; PIO 0 B DATEN
PIO0BC EQU BASE+3 ; PIO 0 B CONTROL
;
PIO1AD EQU BASE+4 ; PIO 1 A DATEN
PIO1AC EQU BASE+6 ; PIO 1 A CONTROL
PIO1BD EQU BASE+5 ; PIO 1 B DATEN
PIO1BC EQU BASE+7 ; PIO 1 B CONTROL
;
MAIN: LD DE,PIO_SRTMSG
CALL PSTRIN
;
LD DE,INI_MSG
CALL PSTRIN
CALL INIT
;
LD DE,PIO0ADW ;PIO0 A
CALL PSTRIN
LD A,55H
PUSH AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
POP AF
OUT (PIO0AD),A
IN A,(PIO0AD)
PUSH AF
;
LD DE,PIO0ADR
CALL PSTRIN
POP AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
;
LD DE,PIO0ADW
CALL PSTRIN
LD A,0AAH
PUSH AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
POP AF
OUT (PIO0AD),A
IN A,(PIO0AD)
PUSH AF
;
LD DE,PIO0ADR
CALL PSTRIN
POP AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
;
LD DE,PIO0BDW ;PIO0 B
CALL PSTRIN
LD A,55H
PUSH AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
POP AF
OUT (PIO0BD),A
IN A,(PIO0BD)
PUSH AF
;
LD DE,PIO0BDR
CALL PSTRIN
POP AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
;
LD DE,PIO0BDW
CALL PSTRIN
LD A,0AAH
PUSH AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
POP AF
OUT (PIO0BD),A
IN A,(PIO0BD)
PUSH AF
;
LD DE,PIO0BDR
CALL PSTRIN
POP AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
;
LD DE,PIO1ADW ;PIO1 A
CALL PSTRIN
LD A,55H
PUSH AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
POP AF
OUT (PIO1AD),A
IN A,(PIO1AD)
PUSH AF
;
LD DE,PIO1ADR
CALL PSTRIN
POP AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
;
LD DE,PIO1ADW
CALL PSTRIN
LD A,0AAH
PUSH AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
POP AF
OUT (PIO1AD),A
IN A,(PIO1AD)
PUSH AF
;
LD DE,PIO1ADR
CALL PSTRIN
POP AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
;
LD DE,PIO1BDW ;PIO1 B
CALL PSTRIN
LD A,55H
PUSH AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
POP AF
OUT (PIO1BD),A
IN A,(PIO1BD)
PUSH AF
;
LD DE,PIO1BDR
CALL PSTRIN
POP AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
;
LD DE,PIO1BDW
CALL PSTRIN
LD A,0AAH
PUSH AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
POP AF
OUT (PIO1BD),A
IN A,(PIO1BD)
PUSH AF
;
LD DE,PIO1BDR
CALL PSTRIN
POP AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
;
LD DE,PIO_ENDMSG
CALL PSTRIN
JP BOOT
;
;==========================================================================
INIT: LD HL,PIO0T ; PIO0 INITITALISIEREN
CALL INITX
LD HL,PIO1T ; PIO1 INITITALISIEREN
CALL INITX
RET
;
INITX: LD A,(HL) ; BYTE-ANZAHL
OR A
RET Z
LD B,A ; Port-Adresse nach C
INC HL
LD C,(HL)
INC HL
OTIR
JR INITX
;
PIO0T: DEFB 05 ; 5 BYTE ZUM PIO 0 A CONTROL
DEFB PIO0AC
DEFB 00000011B ; DIS-INT
DEFB 01001111B ; BETR.ART BYTE EINGABE
DEFB 01001111B ; BETR.ART BYTE EINGABE
DEFB 11001111B ; BETR.ART BIT EIN/AUSG.
DEFB 00000000B ; ALLES AUSG.
DEFB 01 ; 1 BYTE ZUM PIO 0 A DATEN
DEFB PIO0AD
DEFB 00000000B ; DATEN "LOW"
;
DEFB 05 ; 5 BYTE ZUM PIO 0 B CONTROL
DEFB PIO0BC
DEFB 00000011B ; DIS-INT
DEFB 01001111B ; BETR.ART BYTE EINGABE
DEFB 01001111B ; BETR.ART BYTE EINGABE
DEFB 11001111B ; BETR.ART BIT EIN/AUSG.
DEFB 00000000B ; ALLES AUSG.
DEFB 01 ; 1 BYTE ZUM PIO 0 B DATEN
DEFB PIO0BD
DEFB 00000000B ; DATEN "LOW"
DEFB 0 ; ENDE PIO 0 B -TABELLE
;
PIO1T: DEFB 05 ; 5 BYTE ZUM PIO 1 A CONTROL
DEFB PIO1AC
DEFB 00000011B ; DIS-INT
DEFB 01001111B ; BETR.ART BYTE EINGABE
DEFB 01001111B ; BETR.ART BYTE EINGABE
DEFB 11001111B ; BETR.ART BIT EIN/AUSG.
DEFB 00000000B ; ALLES AUSG.
DEFB 01 ; 1 BYTE ZUM PIO 1 A DATEN
DEFB PIO1AD
DEFB 00000000B ; DATEN "LOW"
;
DEFB 05 ; 5 BYTE ZUM PIO 1 B CONTROL
DEFB PIO1BC
DEFB 00000011B ; DIS-INT
DEFB 01001111B ; BETR.ART BYTE EINGABE
DEFB 01001111B ; BETR.ART BYTE EINGABE
DEFB 11001111B ; BETR.ART BIT EIN/AUSG.
DEFB 00000000B ; ALLES AUSG.
DEFB 01 ; 1 BYTE ZUM PIO 1 B DATEN
DEFB PIO1BD
DEFB 00000000B ; DATEN "LOW"
DEFB 0 ; ENDE PIO 1 B -TABELLE
;
;==========================================================================
;
;Output on Screen
;****************
;
PRBS: LD E,BS
CALL PCHAR
RET
;
;Output CR+LF on Screen
;**********************
;
CRLF: LD E,CR
CALL PCHAR
LD E,LF
CALL PCHAR
RET
;
;Output ASCII-Character
;**********************
;
PRINP: PUSH AF
LD E,A
CALL PCHAR
POP AF
RET;
;
;CALL BDOS with Register Save
;****************************
;
INCHA: LD C,1 ;INPUT CHARACTER TO A
JR BDO
PCHAR: LD C,2 ;PRINT CHARACTER IN E
JR BDO
PSTRIN: LD C,9 ;PRINT STRING
JR BDO
INBUFF: LD C,10 ;READ CONSOLE-BUFFER
JR BDO
CSTS: LD C,11 ;CONSOLE-STATUS
JR BDO
OPEN: LD C,15 ;OPEN FILE
JR BDO
CLOSE: LD C,16 ;CLOSE FILE
JR BDO
DELETE: LD C,19 ;DELETE FILE
JR BDO
READS: LD C,20 ;READ SEEK
JR BDO
WRITES: LD C,21 ;WRITE SEEK
JR BDO
MAKE: LD C,22 ;MAKE FILE
JR BDO
SETDMA: LD C,26 ;SET DMA-ADDRESS
BDO: PUSH HL
PUSH DE
PUSH BC
PUSH IX
PUSH IY
CALL BDOS
POP IY
POP IX
POP BC
POP DE
POP HL
RET
;
;DIRECT CONSOLE INPUT
;********************
;
INDCON: CALL INDCOX
CP 0
JR Z,INDCON
RET
;
INDCOX: LD C,6 ;Code for Direct Console Input
LD E,0FFH ;Code for Input
PUSH HL
PUSH DE
PUSH BC
PUSH IX
PUSH IY
CALL BDOS
POP IY
POP IX
POP BC
POP DE
POP HL
RET
;
;
;Output WORD
;***********
;
;PARAMETER: Entry WORD IN HL
;*********
;
OUTW: LD A,H
CALL OUTB
LD A,L
CALL OUTB
RET
;
;Output BYTE
;***********
;
;PARAMETER: Entry BYTE IN A
;*********
;
OUTB: PUSH AF
RRCA
RRCA
RRCA
RRCA
AND 0FH
CALL HBTHE ;Change Half-BYTE
POP AF
AND 0FH
CALL HBTHE
RET
;
;Output HALF-BYTE
;****************
;
;PARAMETER: Entry Half-BYTE IN A (BIT 0 - 3)
;*********
;
HBTHE: CP 0AH
JR C,HBTHE1
ADD A,7 ;Character to Letter
HBTHE1: ADD A,30H
LD E,A
CALL PCHAR
RET
;
;Input ADDRESS
;*************
;
;PARAMETER: Exit with ADDRESS IN HL
;*********
;
INADR: LD HL,0
INADR1: CALL INCHAR ;Input TETRADE
LD D,A
CALL INBYT1 ;IN HEXA
RET C ;END OF Input
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
OR L
LD L,A
JR INADR1 ;New Key
;
;
;Input BYTE
;**********
;
;PARAMTER: Exit with BYTE IN A
;********
;
INBYT: CALL INADR
LD A,L
RET
;
;Input of one TETRADE to A (BIT 0-3)
;************************************
;
INBYT1: SUB '0'
RET C
CP 'G'-30H
JR NC,INBYT3 ;Error
CP ':'-30H
JR C,INBYT2
CP 'A'-30H
JR C,INBYT3 ;Error
SUB 7
INBYT2: OR A
RET
;
INBYT3: SCF
RET
;
;Input ASCII-Character to A
;**************************
;
INCON: CALL INDCON ;Input ASCII-Character to A
CP CTRLC ;TEST CONTROL-C
JP Z,QUIT
CP CTRLX ;TEST CONTROL-X
JR Z,INCHA1
CP CTRLW ;TEST CONTROL-W
JR Z,INCHA3
CP CTRLY ;TEST CONTROL-Y
JR Z,INCHA2
CP BS
RET Z
CP CR
RET Z
CP ' '
JR C,INCON
JR INCH1
;
INCHAR: CALL INCHA ;Input ASCII-Character to A
CP CTRLC ;TEST CONTROL-C
JR Z,QUIT
CP CTRLX ;TEST CONTROL-X
JR Z,INCHA1
CP CTRLW ;TEST CONTROL-W
JR Z,INCHA3
CP CTRLY ;TEST CONTROL-Y
JR Z,INCHA2
CP BS
RET Z
CP CR
RET Z
CP ' '
JR C,INCHAR ;Input invalied
;
INCH1: CP 'A'
RET C ;Character ok
;
RES 5,A ;lower case -> upper case
RET
INCHA1: POP HL
LD E,FF
CALL PCHAR ;Clear screen
JP GOON
INCHA2: POP HL
LD E,FF
CALL PCHAR ;Clear screen
JP GOON
INCHA3: LD E,FF
CALL PCHAR
RET
;
;ABBRUCH DER BEARBEITUNG
;***********************
;
COMPLT: LD DE,TCOMP
CALL PSTRIN
JP GOON
QUIT: CALL CRLF
LD DE,TQUIT
JR FINIS
INTTIM: POP DE ;STACK OK
; CALL DESAK
LD DE,TNMIAB
CALL PSTRIN
LD DE,MAIN ;NEW ADDRESS
PUSH DE
RETN
FINIS: CALL PSTRIN ;AT BDOS-ERROR
GOON:
JP BOOT
;
;
;TEXT-Messages
;*************
;
TCOMP: DEFB ESC,21,0,14H,ESC,23,0
DEFM 'Function complete !!$'
TQUIT: DEFB ESC,23,0,14H,7
DEFM 'End Run RAMFTEST$'
TNMIAB: DEFB ESC,23,0,14H
DEFM 'Time Out !!$'
;
;
INI_MSG:DEFM 'ECB-4PIO Init all PIO Bit-Mode ',CR,LF,'$'
PIO0ADW:DEFM 'ECB-4PIO Write to PIO0AD ','$'
PIO0ADR:DEFM 'ECB-4PIO Read from PIO0AD ','$'
PIO0BDW:DEFM 'ECB-4PIO Write to PIO0BD ','$'
PIO0BDR:DEFM 'ECB-4PIO Read from PIO0BD ','$'
PIO1ADW:DEFM 'ECB-4PIO Write to PIO1AD ','$'
PIO1ADR:DEFM 'ECB-4PIO Read from PIO1AD ','$'
PIO1BDW:DEFM 'ECB-4PIO Write to PIO1BD ','$'
PIO1BDR:DEFM 'ECB-4PIO Read from PIO1BD ','$'
PIO_SRTMSG:
DEFM 'ECB-ZILOG PERIPHERALS start test 1.0',CR,LF,'$'
PIO_ENDMSG:
DEFM 'ECB-ZILOG PERIPHERALS end test 1.0',CR,LF,'$'
LINE_E: DEFM 'H',CR,LF,'$'
;
IF1
.PRINTX 'Pass 1 complete'
ENDIF
;
IF2
.PRINTX 'Pass 2 complete'
.PRINTX 'Assembly complete'
ENDIF
;
END