mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:13:13 -06:00
- Improved ASSIGN operation under CP/M 3 to better handle BIOS function invocations - Added 2PIOTST for testing the DUALPIO MBC board - Increased default RAM drive size for ZRC
568 lines
9.5 KiB
Plaintext
568 lines
9.5 KiB
Plaintext
; 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
|
||
|