(Très basique: lecture des données d'identification et mémorisation dans un buffer et affichage sur afficheur 7 Segments en utilisant la routine du moniteur, LCD et transmission sur PC, sans aucune analyse mais une gestion d'erreur et de message d'état de l'IDE avec time out aussi basique):
Code : Tout sélectionner
ORG $0200
GWAIT EQU $F800 ;Routine temporisation
BUFF EQU $0400 ;Buffer for data transfer
BSYMK EQU $80 ;BSY bit mask(of IDE Status Register)
RDYMK EQU $40 ;RDY bit mask (of IDE Status Register)
DRQMK EQU $08 ;DRQ bit mask (of IDE Status Register)
ERRMK EQU $01 ;Error bit mask (of IDE Status Register)
IDFCD EQU $EC ;Identify IDE Hard disk Command
DATAR EQU $1C00 ;IDE DATA I/O Register
HDVSR EQU $1C06 ;IDE Head and Device Select Register
CMMDR EQU $1C07 ;IDE Command Register
STUSR EQU $1C07 ;IDE Status Register
LCDCD EQU $1800 ;LCD Registre de commande
LCDDT EQU $1801 ;LCD Registre de données
;Initialisation LCD
LDA #$01 ;1ms
JSR GWAIT ;Temporisation
LDA #$38
STA LCDCD
LDA #$01 ;1ms
JSR GWAIT ;Temporisation
LDA #$0C
STA LCDCD
LDA #$01 ;1ms
JSR GWAIT ;Temporisation
LDA #$06
STA LCDCD
LDA #$01 ;1ms
JSR GWAIT ;Temporisation
LDA #$02
STA LCDCD
LDA #$01 ;1ms
JSR GWAIT ;Temporisation
LDA #$01 ;Code effacement
STA LCDCD ;Effacement LCD
;Sélectionner Master Hard disk
LDA #$B0 ;Pattern to select Slave
STA HDVSR ;To Head and Device Select Register
;Test état BUSY
LDX #$0000
BSYSOK LEAX 1,X
CMPX #$FFFF
BEQ BSYTO
LDA STUSR
ANDA #BSYMK
CMPA #BSYMK
BEQ BSYSOK
;Test état READY
LDX #$0000
RDYNOK LEAX 1,X
CMPX #$FFFF
LBEQ RDYTO
LDA STUSR
ANDA #RDYMK
CMPA #RDYMK
BNE RDYNOK
;Envoi Commande Identification
LDA #IDFCD ;Identify Command
STA CMMDR ;To Command Register
;Test Erreur de commande
LDA STUSR
ANDA #ERRMK
CMPA #ERRMK
LBEQ TRERR ;Go to Error treatment
;Test disponibilité donnée
LDX #$0000
DRQNOK LEAX 1,X
CMPX #$FFFF
LBEQ DRQTO
LDA STUSR
ANDA #DRQMK
CMPA #DRQMK
BNE DRQNOK
LDX #BUFF
LECTDT LDA DATAR ;Lire registre données IDE
TFR A,B ;B sera utilisé pour S_TXD
PSHS A,B ;Sauve A
JSR $FC20 ;Saut vers routine S_TXD (Envoie donnée par port série)
JSR $F406 ;Saut vers routine DIS_MEM (Affiche adresse et donnée envoyée)
LDA #$01 ;01ms
JSR GWAIT ;Temporisation
PULS A,B
STA ,X
STA LCDDT ;Afficher donnée sur LCD
LEAX 1,X ;Incrémenter compteur (Index) X
;CMPX $1F,X
CMPX #$041F
BNE LECTDT
RTS
;Traitement Erreur BSY Time Out
BSYTO LDA #$01
JSR GWAIT ;Temporisation
LDA #$42 ;ASCII "B"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$55 ;ASCII "U"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$53 ;ASCII "S"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$59 ;ASCII "Y"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$20 ;ASCII " "
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$45 ;ASCII "E"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$52 ;ASCII "R"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$52 ;ASCII "R"
STA LCDDT
RTS
;Traitement Erreur RDY Time Out
RDYTO LDA #$01
JSR GWAIT ;Temporisation
LDA #$52 ;ASCII "R"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$45 ;ASCII "E"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$41 ;ASCII "A"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$44 ;ASCII "D"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$59 ;ASCII "Y"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$20 ;ASCII " "
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$45 ;ASCII "E"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$52 ;ASCII "R"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$52 ;ASCII "R"
STA LCDDT
RTS
;Traitement Erreur DRQ Time Out
DRQTO LDA #$01
JSR GWAIT ;Temporisation
LDA #$44 ;ASCII "D"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$52 ;ASCII "R"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$51 ;ASCII "Q"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$20 ;ASCII " "
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$45 ;ASCII "E"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$52 ;ASCII "R"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$52 ;ASCII "R"
STA LCDDT
RTS
;Traitement erreur
TRERR LDA #$01
JSR GWAIT ;Temporisation
LDA #$45 ;ASCII "E"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$52 ;ASCII "R"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$52 ;ASCII "R"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$4F ;ASCII "O"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$52 ;ASCII "R"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$20 ;ASCII " "
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$43 ;ASCII "C"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$4F ;ASCII "O"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$4D ;ASCII "M"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$4D ;ASCII "M"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$41 ;ASCII "A"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$4E ;ASCII "N"
STA LCDDT
LDA #$01
JSR GWAIT ;Temporisation
LDA #$44 ;ASCII "D"
STA LCDDT
RTS