******************************** * COMPACT FLASH TEST PROGRAM * FOR MC3 * DANIEL TUFVESSON 2013 ******************************** ******************************** * MONITOR LABLES ******************************** RETURN EQU $C000 RETURN TO PROMPT OUTCHAR EQU $C003 OUTPUT CHAR ON CONSOLE INCHAR EQU $C006 INPUT CHAR FROM CONSOLE AND ECHO PDATA EQU $C009 PRINT TEXT STRING @ X ENDED BY $04 OUT2HS EQU $C012 PRINT 2 HEX CHARS @ X OUT4HS EQU $C015 PRINT 4 HEX CHARS @ X INBYTE EQU $C01B INPUT 1 BYTE TO A. CARRY SET = OK CONSVEC EQU $7FE5 CONSOLE STATUS VECTOR CONOVEC EQU $7FE8 CONSOLE OUTPUT VECTOR CONIVEC EQU $7FEB CONSOLE INPUT VECTOR ******************************** * CF REGS ******************************** CFBASE EQU $8060 CFREG0 EQU CFBASE+0 DATA PORT CFREG1 EQU CFBASE+1 READ: ERROR CODE, WRITE: FEATURE CFREG2 EQU CFBASE+2 NUMBER OF SECTORS TO TRANSFER CFREG3 EQU CFBASE+3 SECTOR ADDRESS LBA 0 [0:7] CFREG4 EQU CFBASE+4 SECTOR ADDRESS LBA 1 [8:15] CFREG5 EQU CFBASE+5 SECTOR ADDRESS LBA 2 [16:23] CFREG6 EQU CFBASE+6 SECTOR ADDRESS LBA 3 [24:27 (LSB)] CFREG7 EQU CFBASE+7 READ: STATUS, WRITE: COMMAND ******************************** * START OF PROGRAM ******************************** ORG $0100 JMP START TCRLF FCB $0D,$0A,$04 TSISER FCC " Serial: " FCB $04 TSIFW FCC "Firmware: " FCB $04 TSIMOD FCC " Model: " FCB $04 TSILBA FCC "LBA size: " FCB $04 TPROMPT FCB $0D,$0A FCC "# " FCB $04 CFLBA3 RMB 1 CFLBA2 RMB 1 CFLBA1 RMB 1 CFLBA0 RMB 1 ORG * START LDX #TCRLF JSR PDATA LDAA #$80 SELECT I/O PAGE 0 STAA $0002 CLR CFLBA3 CLR CFLBA2 CLR CFLBA1 CLR CFLBA0 JSR CFINIT JSR CFINFO PROMPT LDX #TPROMPT JSR PDATA JSR INCHAR ANDA #$DF TO UPPER CASE CMPA #'Q BNE *+5 JMP RETURN CMPA #'I BNE *+5 JMP MENU_I CMPA #'R BNE *+5 JMP MENU_R LDAA #'? JSR OUTCHAR BRA PROMPT * MENU "I" - PRINT CF INFO MENU_I LDX #TCRLF JSR PDATA JSR CFINFO JMP PROMPT * MENU "R" - READ SECTOR MENU_R LDAA #$20 JSR OUTCHAR JSR INBYTE BCC MENU_RE STAA CFLBA3 JSR INBYTE BCC MENU_RE STAA CFLBA2 JSR INBYTE BCC MENU_RE STAA CFLBA1 JSR INBYTE BCC MENU_RE STAA CFLBA0 JSR CFSLBA SET LBA LDAA #$01 STAA CFREG2 READ ONE SECTOR JSR CFWAIT LDAA #$20 READ SECTOR COMMAND STAA CFREG7 LDX #BLKDAT JSR CFREAD JSR CFCHERR MENU_RE JMP PROMPT ******************************** * INITIALIZE CF ******************************** CFINIT LDAA #$04 RESET COMMAND STAA CFREG7 JSR CFWAIT LDAA #$E0 LBA3=0, MASTER, MODE=LBA STAA CFREG6 LDAA #$01 8-BIT TRANSFERS STAA CFREG1 LDAA #$EF SET FEATURE COMMAND STAA CFREG7 JSR CFWAIT JSR CFCHERR RTS ******************************** * WAIT FOR CF READY ******************************** CFWAIT LDAA CFREG7 ANDA #$80 MASK OUT BUSY FLAG CMPA #$00 BNE CFWAIT RTS ******************************** * CHECK FOR CF ERROR ******************************** CFCHERR LDAA CFREG7 ANDA #$01 MASK OUT ERROR BIT CMPA #0 BEQ CFNERR LDAA #'! JSR OUTCHAR LDX CFREG1 JSR OUT2HS CFNERR RTS ******************************** * READ DATA FROM CF ******************************** CFREAD JSR CFWAIT LDAA CFREG7 ANDA #%00001000 FILTER OUT DRQ CMPA #%00001000 BNE CFREADE LDAA CFREG0 READ DATA BYTE STAA ,X INX BRA CFREAD CFREADE RTS ******************************** * CF SET LBA ******************************** CFSLBA LDAA CFLBA0 LBA 0 STAA CFREG3 LDAA CFLBA1 LBA 1 STAA CFREG4 LDAA CFLBA2 LBA 2 STAA CFREG5 LDAA CFLBA3 LBA 3 ANDA #%00001111 FILTER OUT LBA BITS ORAA #%11100000 MODE LBA, MASTER DEV STAA CFREG6 RTS ******************************** * PRINT CF INFORMATION ******************************** CFINFO JSR CFWAIT LDAA #$EC DRIVE ID COMMAND STAA CFREG7 LDX #BLKDAT JSR CFREAD LDX #TCRLF JSR PDATA * PRINT SERIAL LDX #TSISER JSR PDATA LDX #BLKDAT+20 LDAB #20 JSR PRTRSN LDX #TCRLF JSR PDATA * PRINT FIRMWARE REV LDX #TSIFW JSR PDATA LDX #BLKDAT+46 LDAB #8 JSR PRTRN LDX #TCRLF JSR PDATA * PRINT MODEL NUMBER LDX #TSIMOD JSR PDATA LDX #BLKDAT+54 LDAB #40 JSR PRTRN LDX #TCRLF JSR PDATA * PRINT LBA SIZE LDX #TSILBA JSR PDATA LDX #BLKDAT+123 JSR OUT2HS DEX DEX JSR OUT2HS DEX DEX JSR OUT2HS DEX DEX JSR OUT2HS LDX #TCRLF JSR PDATA RTS ******************************** * PRINT BIG ENDIAN STRING OF N CHARS * IN: X=ADDR, B=NCHARS ******************************** PRTRN LDAA 1,X JSR OUTCHAR LDAA 0,X JSR OUTCHAR DECB CMPB #0 BEQ PRTRNE DECB CMPB #0 BEQ PRTRNE INX INX BRA PRTRN PRTRNE RTS ******************************** * PRINT BIG ENDIAN STRING OF N CHARS * SKIPPING ALL SPACES * IN: X=ADDR, B=NCHARS ******************************** PRTRSN LDAA 1,X CMPA #$20 BEQ PRTRSN1 JSR OUTCHAR PRTRSN1 LDAA 0,X CMPA #$20 BEQ PRTRSN2 JSR OUTCHAR PRTRSN2 DECB CMPB #0 BEQ PRTRSNE DECB CMPB #0 BEQ PRTRSNE INX INX BRA PRTRSN PRTRSNE RTS ******************************** * STORAGE FOR SECTOR TRANSFER ******************************** ORG $1000 BLKDAT RMB 512