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.
 
 
 
 
 
 

101 lines
2.1 KiB

;___KIO________________________________________________________________________________________________________________
;
; Z80 KIO
;
; DISPLAY CONFIGURATION DETAILS
;______________________________________________________________________________________________________________________
;
;
;
KIO_PIOADAT .EQU KIOBASE + $00
KIO_PIOACMD .EQU KIOBASE + $01
KIO_PIOBDAT .EQU KIOBASE + $02
KIO_PIOBCMD .EQU KIOBASE + $03
KIO_CTC0 .EQU KIOBASE + $04
KIO_CTC1 .EQU KIOBASE + $05
KIO_CTC2 .EQU KIOBASE + $06
KIO_CTC3 .EQU KIOBASE + $07
KIO_SIOADAT .EQU KIOBASE + $08
KIO_SIOACMD .EQU KIOBASE + $09
KIO_SIOBDAT .EQU KIOBASE + $0A
KIO_SIOBCMD .EQU KIOBASE + $0B
KIO_PIACDAT .EQU KIOBASE + $0C
KIO_PIACCMD .EQU KIOBASE + $0D
KIO_KIOCMD .EQU KIOBASE + $0E
KIO_KIOCMDB .EQU KIOBASE + $0F
;
;
;
DEVECHO "KIO: IO="
DEVECHO KIOBASE
DEVECHO "\n"
;
KIO_PREINIT:
CALL KIO_DETECT
RET NZ
;
; RECORD PRESENCE
LD A,$FF
LD (KIO_EXISTS),A
;HCS initialize KIO if NOT EZ512
;HCS do not write to KIO command register, if EZ512
;HCS because it is already done in monitor and will upset the bank register
#IF (SDMODE != SDMODE_EZ512) ; Z80 PIO ON EAZY80-512
; INITIALIZE KIO
LD A,%11111001 ; RESET ALL DEVICES, SET DAISYCHAIN
OUT (KIO_KIOCMD),A ; DO IT
#ENDIF
;
XOR A
RET
;
;
;
KIO_INIT:
; ANNOUNCE PORT
CALL NEWLINE ; FORMATTING
PRTS("KIO:$") ; FORMATTING
;
PRTS(" IO=0x$") ; FORMATTING
LD A,KIOBASE ; GET BASE PORT
CALL PRTHEXBYTE ; PRINT BASE PORT
;
LD A,(KIO_EXISTS)
OR A
JR Z,KIO_INIT2
;
PRTS(" ENABLED$") ; DISPLAY ENABLED
XOR A ; SIGNAL SUCCESS
RET ; DONE
;
KIO_INIT2:
PRTS(" NOT PRESENT$") ; NOT ZERO, H/W NOT PRESENT
OR $FF ; SIGNAL FAILURE
RET ; BAIL OUT
;
;
;
KIO_DETECT:
LD C,KIO_SIOBCMD ; USE SIOB COMMAND PORT
LD B,2 ; SIO REG 2
;
OUT (C),B
XOR A ; ZERO
OUT (C),A ; WRITE IT
OUT (C),B
IN A,(C)
AND $F0 ; TOP NIBBLE ONLY
RET NZ ; FAIL IF NOT ZERO
;
OUT (C),B
LD A,$FF ; $FF
OUT (C),A ; WRITE IT
OUT (C),B
IN A,(C)
AND $F0 ; TOP NIBBLE ONLY
CP $F0 ; COMPARE
RET ; DONE, Z IF FOUND, NZ IF MISCOMPARE
;
;
;
KIO_EXISTS .DB 0