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