mirror of https://github.com/wwarthen/RomWBW.git
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
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
|
|
|
|
|