*************************** * 6850/6350 CONSOLE DRIVER * FOR MC3 + ACIA BOARD * DANIEL TUFVESSON 2014 RETURN EQU $C000 RETURN TO PROMPT CONSVEC EQU $7FE5 CONSOLE STATUS VECTOR CONOVEC EQU $7FE8 CONSOLE OUTPUT VECTOR CONIVEC EQU $7FEB CONSOLE INPUT VECTOR PAGEREG EQU $0002 ACIA EQU $8020 ACIAST EQU ACIA+0 ACIADA EQU ACIA+1 ACIARDY EQU $15 1/16, 8N1, RTS LOW ACIABSY EQU $55 1/16, 8N1, RTS HIGH ORG $7000 START LDAA PAGEREG SET I/O PAGE STAA PAGTEMP LDAA #$80 STAA PAGEREG LDAA #$FF RESET ACIA STAA ACIAST LDAA #ACIABSY STAA ACIAST * REPLACE EXISTING CONSOLE VECTORS * WITH NEW RUITINES BELOW LDX #WRITE STX CONOVEC+1 LDX #READ STX CONIVEC+1 LDX #WAITING STX CONSVEC+1 * CONSOLE HAS NOW BEEN REDIRECTED * RETURN TO MONITOR LDAA PAGTEMP STAA PAGEREG JMP RETURN * WRITE BYTE TO ACIA WRITE STAB ACCTMP SAVE ACC LDAB PAGEREG SET I/O PAGE STAB PAGTEMP LDAB #$80 STAB PAGEREG WRITE1 LDAB ACIAST WAIT FOR ACIA READY LSRB LSRB BCC WRITE1 STAA ACIADA SEND BYTE LDAB PAGTEMP RESTORE I/O PAGE STAB PAGEREG LDAB ACCTMP RESTOR ACC RTS * READ BYTE FROM ACIA READ LDAA PAGEREG SET I/O PAGE STAA PAGTEMP LDAA #$80 STAA PAGEREG LDAA #ACIARDY SET ACIA READY STAA ACIAST READ1 LDAA ACIAST CHECK IF BYTE AVAILABLE LSRA BCC READ1 LDAA #ACIABSY SET ACIA BUSY STAA ACIAST LDAA ACIADA READ ACIA DATA STAA ACCTMP SAVE ACC LDAA PAGTEMP RESTORE I/O PAGE STAA PAGEREG LDAA ACCTMP RESTORE ACC RTS * RETURN NUMBER OF BYTES WAITING IN ACIA WAITING LDAA PAGEREG SET I/O PAGE STAA PAGTEMP LDAA #$80 STAA PAGEREG LDAA #ACIARDY SET ACIA READY STAA ACIAST LDAA ACIAST CHECK ACIA STATUS LSRA BCC WAIT0 WAIT1 LDAA #ACIABSY SET ACIA BUSY STAA ACIAST LDAA PAGTEMP RESTORE I/O PAGE STAA PAGEREG LDAA #$01 SET BYTE AVAILABLE RTS WAIT0 LDAA #ACIABSY SET ACIA BUSY STAA ACIAST LDAA PAGTEMP RESTORE I/O PAGE STAA PAGEREG CLRA SET NO BYTE AVAILABLE RTS * TEMPORARY STORAGE PAGTEMP RMB 1 ACCTMP RMB 1