NAM MONITOR STTL VEGAS 6809 ROM * 16/10/2012 BY FLD ******************************************************* * EQUIVALENCES DES ADRESSES EXTERNES * ******************************************************* * ADRESSES EN RAM * ******************************************************* ADCMD EQU $C100 ADRESSE RESERVEE POUR COMMANDES FLEX ASPOOL EQU $C700 ADRESSE RESERVEE POUR LE SPOOLER MEMEND EQU $CC2B ADRESSE DE FIN DE LA MEMOIRE VIVE ZCC34 EQU $CC34 REGISTRE RESERVE INCONNU HOTDOS EQU $CD03 POINT D'ENTREE A CHAUD DU FLEX TABLE2 EQU $ED80 TABLE DE TRADUCTION DES CLAVIERS TABLE3 EQU $EE80 TABLE DE TRADUCTION DES CLAVIERS STACKSY EQU $EF7F ORIGINE DE LA PILE SYSTEME TRKBUF EQU $EF80 BUFFER DE MEMORISATION DES PISTES ACTIVES VLECT0 EQU $EF88 SAUT DE PISTE LECTEUR 0 VLECT1 EQU $EF89 SAUT DE PISTE LECTEUR 1 ACTDRV EQU $EF8C LECTEUR ACTIF MEM2 EQU $EF8D MASQUE DE SAUT DE PISTE MEM3 EQU $EF8E MEMORISATION DP PENDANT LECTURE SECTEUR TBLCRT EQU $EF90 TABLE INITIALISATION CRT TBLCR2 EQU $EF91 NB CARACTERES PAR LIGNE TBLCR3 EQU $EF96 NB LIGNES SUR L'ECRAN SCROLL EQU $EFA4 SCROLLING ON / OFF MEM5 EQU $EFA5 BUFFER DE POSITION CURSEUR MEM6 EQU $EFA6 BUFFER DE POSITION CURSEUR MEM7 EQU $EFA7 BUFFER DE POSITION POUR UPDATE MEM8 EQU $EFA8 BUFFER DE POSITION POUR UPDATE MEM9 EQU $EFA9 BUFFER DE POSITION OFFSET ACTDR0 EQU $EFAA BUFFER DE POSITION OFFSET LIGN EQU $EFAB POSITION LIGNE COURRANTE CARACT EQU $EFAC POSITION CARACTERE COURRANT SOUND EQU $EFAD TONALITE CLOCHE TSOUND EQU $EFAF DUREE SON CLOCHE INDMOT EQU $EFB1 INDICATEUR MOTEUR FLOPPY DEMAND EQU $EFB2 TEMPS DEMARRAGE MOTEUR LECTEURS VSPOOL EQU $EFB4 VITESSE SPOOLING IMPRIMANTE NSECT1 EQU $EFB6 NB DE SECTEURS PAR FACE SD ($0A) NSECT2 EQU $EFB7 NB DE SECTEURS PAR FACE DD ($12) ACTDR2 EQU $EFB8 IRQUTI EQU $EFF2 IRQ UTILISATEUR IRQFLX EQU $EFF4 IRQ FLEX (SPOOLING) SWI3 EQU $EFF6 SWI3 FLEX SWI2 EQU $EFF8 SWI2 SWI EQU $EFFA SWI NMI EQU $EFFC NMI FIRQ EQU $EFFE FIRQ ******************************************************* * EQUIVALENCES DES ADRESSES EXTERNES * ******************************************************* * CICUITS * ******************************************************* * CONTROLEUR D'ECRAN SY6545 FLGCU0 EQU $F000 REGISTRE DE CONTROLE FLGCU1 EQU $F001 REGISTRE DE CONTROLE DVIDEO EQU $F200 DONNEE VIDEO A AFFICHER * CONTROLEUR DE DISQUETTES STRCR EQU $F600 REGISTRE DE STATUS/COMMAND TR EQU $F601 REGISTRE DE PISTE SCR EQU $F602 REGISTRE DE SECTEUR DR EQU $F603 REGISTRE DE DONNEES * HORLOGE TEMPS REEL HORLO EQU $F640 HORMA EQU $F64E INTERH EQU $F64F * PIA-A DISQUE PIA1DA EQU $F680 REGISTRE DE DONNEES PIA1CA EQU $F681 REGISTRE DE CONTROLE * PIA-B CLAVIER PIA1DB EQU $F682 REGISTRE DE DONNEES PIA1CB EQU $F683 REGISTRE DE CONTROLE * TEMPORISATEUR 1,2 ET 3 TMRCR1 EQU $F6C8 REGISTRE DE CONTROLE TMRCR2 EQU $F6C9 REGISTRE DE CONTROLE TMRT1L EQU $F6CA PRESET TIMER 1 (UTILISATEUR) TMRT2L EQU $F6CC PRESET TIMER 2 TMRT3L EQU $F6CE PRESET TIMER 3 * PIA-A MANETTES PIA2DA EQU $F6D0 REGISTRE DE DONNEES PIA2CA EQU $F6D1 REGISTRE DE CONTROLE ******************************************************* * DEBUT DU PROGRAMME DU MONITEUR * * ADRESSES $F800 * ******************************************************* ORG $F800 HOTMON JMP >HOTMO2 ENTREE A CHAUD MONITEUR $F800 JMP >CLAV1 ENTREE CLAVIER $F803 JMP >CLAV2 ENTREE CLAVIER SANS ECHO $F806 JMP >SORECR SORTIE ECRAN $F809 JMP >TSTCLA TEST CLAVIER $F80C JMP >INIES INIT DES E/S $F80F JMP >LECSEC LECTURE SECTEUR $F812 JMP >ECRSEC ECRITURE SECTEUR $F815 JMP >VERSEC VERIFICATION SECTEUR $F818 JMP >PIST0 PISTE 0 $F81B JMP >SELECT SELECTION LECTEUR $F81E JMP >TETRDY TEST PRET $F821 JMP >TETRDY TEST PRET $F824 JMP >LECINI INIT LECTEUR $F827 JMP >HOTINI INIT A CHAUD $F82A JMP >SEEK SAUT DE PISTE $F82D JMP >CTRIRQ IRQ CONTROLE (FLEX SEULEMENT) $F830 JMP >TMROFF TIMER OFF (FLEX SEULEMENT) $F833 JMP >TMRON TIMER ON (FLEX SEULEMENT) $F836 JMP >TMRINIT TIMER INIT (FLEX SEULEMENT) $F839 FDB $EFF4 FDB $EFF6 JMP >IPIA2A INITIALISATION MANETTE $F840 TABLE5 EQU *+1 JMP >TSTMAN TEST MANETTE $E843 ******************************************************* * ADRESSE DES SEQUENCES DE TRAITEMENT DES CODES ESCAPE* * CARACTERES DE CONTROLES * ******************************************************* FDB $FB15 01 FDB $FB15 02 FDB $FB15 03 FDB $FB15 04 FDB $FB15 05 FDB $FB15 06 FDB $FB16 CTRL G 07- BELL FDB $FB2D CTRL H 08- CURSEUR A GAUCHE FDB $FB3A CTRL I 09- CURSEUR A DROITE FDB $FB4F CTRL J 10- CURSEUR EN BAS FDB $FB59 CTRL K 11- CURSEUR EN HAUT FDB $FB66 CTRL L 12- CURSEUR EN HAUT A GAUCHE + EFFACEMENT FDB $FBA4 CTRL M 13- RETOUR CHARIOT FDB $FBAB CTRL N 14 FDB $FBD2 CTRL O 15 FDB $FB15 CTRL P 16 FDB $FB15 CTRL Q 17 FDB $FC06 CTRL R 18- POSITIONNE LE CURSEUR (CONTENU EFAB - EFAC) FDB $FB15 CTRL S 19 FDB $FC0A CTRL T 20- CORSEUR ON FDB $FC0F CTRL U 21- CURSEUR OFF FDB $FC16 CTRL V 22- SCROLL ON FDB $FC1C CTRL W 23- SCROLL OFF FDB $FB15 CTRL X 24 FDB $FB15 CTRL Y 25 FDB $FB15 CTRL Z 26 FDB $FB15 CTRL 27 - ESCAPE FLEX FDB $FC20 CTRL 28 - CURSEUR EN HAUT A GAUCHE + SANS EFF FDB $FB15 CTRL 29 FDB $FB15 CTRL 30 FDB $FB15 CTRL 31 ******************************************************* * INITIALISATION PIA 2 PORT A MANETTES * ******************************************************* IPIA2A CLR >PIA2DA EFFACEMENT REGISTRE DE DIRECTION (ENTREE) CLR >PIA2CA EFFACEMENT REGISTRE DE CONTROLE (MISE EN SORTIE) LDA #$04 %00000100 STA >PIA2CA SELECTION REGISTRE DE DONNEES RTS ******************************************************* * TEST MANETTES * ******************************************************* TSTMAN LDX >MEMEND LEAX -$04,X pOSITIONNE X 4 OCTETS SOUS MEMEND LDA ,X CHARGE A AVEC MEMEND-4 CLR ,X+ EFFACE MEMEND-4 LDA ,X CHARGE A AVEC MEMEND-3 BNE TSTMA1 SAUTE SI NON NUL LDA >PIA2CA CHARGE LE REGISTRE DE CONTROLE ANDA #$C0 MASQUE %11000000 BNE TSTMA2 TEST SI UN BP A ETE PRESSE CA1 OU CA2 TSTMA6 STA ,X MEMORISE EN MEMEND-3 RTS RETOUR TSTMA2 LSRA SHIFT A GAUCHE LSRA 6 FOIS POUR POSITIONNER LSRA LE TEST DE CA2 EN BIT 0 LSRA LSRA LSRA STA ,X MEMORISE EN MEMEND-3 LDA >PIA2DA CHARGE L'ETAT DES JOYSTICKS DANS L'ACCU RTS TSTMA1 CMPA #$01 TEST DE CA2 BNE TSTMA3 SAUTE SI CA2 A ZERO LDA >PIA2DA CHARGE L'ETAT DES JOYSTICKS DANS L'ACCU LSRA SE POSITIONNE SUR LE JOYSTICK 2 LSRA LSRA LSRA BSR TSTMA5 BRA TSTMA6 TSTMA3 CMPA #$02 TEST DE CA1 BNE TSTMA4 SAUTE SI CA1 A ZERO LDA >PIA2DA CHARGE L'ETAT DES JOYSTICKS DANS L'ACCU BSR TSTMA5 BRA TSTMA6 TSTMA4 CLRA BRA TSTMA6 TSTMA5 LDB #$04 TSTMA8 LSRA BCC TSTMA7 DECB BNE TSTMA8 TSTMA7 TFR B,A RTS ******************************************************* * DESACTIVATION DES INTERRUPTIONS DE L'HORLOGE * ******************************************************* SHORL1 CLR >INTERH INITIALISATION A ZERO DU REGISTRE F LDA >INTERH LECTURE 3 FOIS DU REGISTRE LDA >INTERH LDA >INTERH RTS ******************************************************* * INITIALISATION * ******************************************************* * POINT D'ENTREE A FROID DU SYSTEME * * APRES EXECUTION AUTOMATIQUE PAR LE 6809 * * DU SAUT A L'ADRESSE CONTENUE DANS $FFE-$FFFF * ******************************************************* * INITIALISATION DU POINTEUR DE PILE SYSTEME START LDS #STACKSY POINTEUR DE PILE SYSTEME $EF7F * INITIALISATION DES INTERRUPTIONS JSR >INITIRQ INITIALISATION DES INTERRUPTIONS * INITIALISATION HORLOGE CLR >HORLO INITIALISATION DU MM58174 BSR SHORL1 DESACTIVATION DES INTERRUPTIONS DE L'HORLOGE LDA #$01 STA >HORMA DEMARRAGE DE L'HORLOGE CLR >ZCC34 $CC33 EST LE TYPE DE CPU * INITIALISATION TABLES CLAVIER ANDCC #$EF LDX #TABLE3 INITIALISATION DE 0 A 255 DE $EE80 A $EF7F CLRA LOOP3 STA A,X INCA BNE LOOP3 LDX #TABLE2 INITIALISATION DE 0 A 128 DE $ED80 A $EDFF CLRA LOOP4 STA A,X INCA CMPA #$80 BNE LOOP4 * INITIALISATION DES TABLES PAR DEFAULT DU MONITEUR * $EF90 =$7F TBLCRT * $EF91 =$50 TBLCR2 * $EF92 =$5F * $EF93 =$09 * $EF94 =$1D * $EF95 =$0C * $EF96 =$18 TBLCR3 * $EF97 =$1A * $EF98 =$48 * $EF99 =$09 * $EF9A =$60 * $EF9B =$09 * $EF9C =$00 * $EF9D =$00 * $EF9E =$00 * $EF9F =$00 * $EFA0 =$00 * $EFA1 =$00 * $EFA2 =$00 * $EFA3 =$00 * $EFA4 =$01 SCROLL * $EFA5 =$00 MEM5 * $EFA6 =$00 MEM6 * $EFA7 =$00 MEM7 * $EFA8 =$00 MEM8 * $EFA9 =$00 MEM9 * $EFAA =$01 ACTDR0 * $EFAB =$00 LIGN * $EFAC =$00 CARACT * $EFAD =$015D SOUND * $EFAF =$01E0 TSOUND * $EFB1 =$00 INDMOT * $EFB2 =$0000 DEMAND * $EFB4 =$2710 VSPOOL * $EFB6 =$0A NSECT1 * $EFB7 =$12 NSECT2 * $EFB8 =$00 ACTDR2 LDX #TBLCRT CHARGEMENT $EF90 LDY #TABLE1 CHARGEMENT TABLE1 LOOP1 LDA ,Y+ STA ,X+ CMPX #ACTDR2 TBLCRT + $28 (40) BNE LOOP1 * INITIALISATION PIA MANETTE ET E/S JSR >IPIA2A INITIALISATION PIA 2A DES MANETTES JSR >INIES INITIALISATION DES E/S LDA #$0C SAUTE UNE PAGE FORM FEED JSR >SORECR * ENTREE A CHAUD MONITEUR HOTMO2 LDX #TEXTE1 POINTE SUR LE TEXTE HOTMO3 JSR >PSTRNG AFFICHE LE TEXTE JSR >CLAV1 ATTEND UN CARACTERE AU CLAVIER PSHS A LDA #$20 ESPACE IMPRIME UN ESPACE JSR >SORECR PULS A ANDA #$5F FILTRE LE CARACTERE TFR A,B LDX #KEYCOD HOTMO4 CMPB ,X+ BEQ HOTMO6 LEAX $02,X CMPX #TABLE1 BNE HOTMO4 HOTMO5 LDX #ETOILE BRA HOTMO3 HOTMO6 JSR [,X] BRA HOTMO5 ******************************************************* * $F95A : COMMANDE MONITEUR "F" * * LANCEMENT A CHAUD DU FLEX * ******************************************************* JMP >HOTDOS TEXTE1 FCB $0D FCB $0A FCC "MONITEUR 80 COPYRIGHT MICROKIT" FCB $0D FCB $0A ETOILE FCB $0D FCB $0A FCC "*" FCB $04 KEYCOD FCB $44,$FE,$9D CHOIX "D" FCB $47,$FE,$C1 CHOIX "G" FCB $4D,$FE,$C8 CHOIX "M" FCB $46,$F9,$5A CHOIX "F" TABLE1 FCB $7F,$50,$5F,$09,$1D,$0C,$18,$1A FCB $48,$09,$60,$09,$00,$00,$00,$00 FCB $00,$00,$00,$00,$01,$00,$00,$00 FCB $00,$00,$00,$00,$00,$01,$5D,$01 FCB $E0,$00,$00,$00,$27,$10,$0A,$12 * INITIALISATION DES E/S INIES LDA #$A1 BIN %1010001 STA >TMRCR1 CONTROL REGISTER 3 * BIT 7=1 OUTPUT 3 ACTIVE * BIT 6=0 INTERRUPTION MASQUEE * BIT 543=100 MODE SINGLE SHOT * BIT 2=0 MODE DE COMPTAGE 16 BITS * BIT 1=0 SIGNAL HORLOGE EXTERNE * BIT 0=1 FREQUENCE DIVISEE PAR 8 LDA #$81 BIN %10000001 STA >TMRCR2 CONTROL REGISTER 2 * BIT 7=1 OUTPUT 2 ACTIVE * BIT 6=0 INTERRUPTION MASQUEE * BIT 543=000 MODE CONTINUE * BIT 2=0 MODE DE COMPTAGE 16 BITS * BIT 1=0 SIGNAL HORLOGE EXTERNE * BIT 0=1 PRESELECTION TIMER 1 * ZF9C4 EQU *+2 ligne à supprimer LDX >SOUND CHARGE LA TONALITE DU BIP * ZF9C6 EQU *+1 ligne à supprimer STX >TMRT2L ECRIURE DU REGISTRE DU TIMER 2 LDX >TSOUND CHARGE LA DUREE DU BIP STX >TMRT3L ECRITURE DU BUFFER DU TIMER 3 LDA #$00 STA >TMRCR1 REINITIALISE LE REGISTRE DE CONTOLE 1 * INITIALISATION DU CONTROLEUR D'ECRAN * REGITRE 0 TOTAL HORIZONTAL-1=$7F (127) * REGITRE 1 CARACTERES PAR LIGNE =$50 (80) * REGITRE 2 POSITION DE H SYNC=$5F (95) * REGITRE 3 LARGEUR DE HSYNC=$09 * REGITRE 4 NOMBRE DE LIGNES =$1D (29) * REGITRE 5 LIGNES SUPPLEMENTAIRES A SCANNER=$0C (12) * REGITRE 6 NOMBRE DE LIGNES AFFICHEES =$18 (24) * REGITRE 7 NUMERO DE LIGNE POUR SYNCHO VERTICALE=$1A (26) * REGITRE 8 MODE DE CONTROLE=$48 (%00101000) * BIT7=0 UPDATE PENDANT STROBE * BIT6=0 UPDATE STROBE * bIT5=1 CURSEUR DELAY * BIT4=0 DISPLAY ENABLE DELAY * BIT3=1 DISPLAY MODE MEMOIRE TRANSPARENTE * BIT2=0 ADRESSE VIDEO RAM BINAIRE * BIT10=00 NON INTERLACE * REGITRE 9 LIGNES A SCANNER=$09 * REGITRE 10 CURSEUR CLIGNOTANT AU 1/32 =$60 * REGITRE 11 TAILLE DU CURSEUR =$09 * REGITRE 12 DEBUT ADRESSAGE =$00 * REGITRE 13 DEBUT ADRESSAGE =$00 * REGITRE 14 POSITION DU CURSUR =$00 * REGITRE 15 POSITION DU CURSEUR =$00 * REGITRE 16 REGISTRE LIGHT PEN =$00 * REGITRE 17 REGISTRE LIGHT PEN =$00 * REGITRE 18 POSITION DU PROCHAIN CARACTERE =$00 * REGITRE 19 POSITION DU PROCHAIN CARACTERE =$00 LDB #$00 LDX #TBLCRT CHARGE X AVEC $EF90 ZF9D8 STB >FLGCU0 INITIALISE LE 1ER REGISTRE DU CRT LDA ,X+ CHARGE DANS A LE CONTENU POINTE PAR X+ STA >FLGCU1 SAUVEGARDE A DANS LE REGISTRE INCB INCREMENTE B CMPB #$14 BOUCLE SI INFERIEUR A 20 BNE ZF9D8 LDA #$1F REGISTRE 31 (DUMMY) STA >FLGCU0 LDA >FLGCU1 * INITIALISE LE PIA DU DISQUE CLR >PIA1CB CLR >PIA1DB LDA #$0C BIN %00001100 STA >PIA1CB SUVEGARDE DANS LE CR DU PIA RTS ******************************************************* * TEST CLAVIER * ******************************************************* TSTCLA PSHS A LDA >PIA1CB LECTURE DU CR DU PIA ANDA #$80 MASQUE PULS A RTS ******************************************************* * CLAVIER SANS ECHO * ******************************************************* CLAV2 TST >PIA1CB BPL CLAV2 LDA >PIA1DB PSHS X LDX #TABLE2 CONVERSION DU CODE LU SUR PIA EN CODE ASCII ANDA #$7F LDA A,X PULS X RTS ******************************************************* * CLAVIER SANS ECHO + INIT DE L'AFFICHAGE * ******************************************************* CLAV1 BSR CLAV2 ******************************************************* * INITIALISATION DES FONCTION D'AFFICHAGE DU SY6545 * ******************************************************* SORECR PSHS Y,X,B,A LDX #TABLE3 CONVERSION DU CODE ASCII EN CODE IMPRIMABLE LDA A,X CMPA #$00 BEQ JUMP1 CODE ZERO A IGNORER CMPA #$20 LBCS ZFAFE BSR SOREC1 JUMP1 PULS Y,X,B,A JUMP2 RTS SOREC1 LDB >CARACT CHARGE LA POSITION DU CARACTERE A AFFICHER CMPB >TBLCR2 COMPARE AVEC NB CARACTERE PAR LIGNE BEQ JUMP2 RETOUR SI LIGNE PLEINE STA >DVIDEO SAUVEGARDE DANS LE REGISTRE A AFFICHER SOREC2 LDB >FLGCU0 LECTURE DU STATUS REGISTER DU CONTROLEUR BITB #$80 TEST DU BIT 7 UPDATE READY BEQ SOREC2 LDB #$1F CHARGE LA VALEUR $1F STB >FLGCU0 SAUVEGARDE DANS LE REGISTRE D'ADRESSE CLR >FLGCU0 EFFACEMENT SOREC3 LDB >FLGCU0 LECTURE DU STATUS REGISTER DU CONTROLEUR BITB #$80 TEST DU BIT 7 UPDATE READY BEQ SOREC3 LDA #$20 CHARGE UN ESPACE POUR AFFICHAGE DU CURSEUR STA >DVIDEO SAUVEGARDE DANS LE REGISTRE A AFFICHER INC >CARACT INCREMENTE LA POSITION DU CARACTERE DANS LA LIGNE SOREC4 LDX >MEM9 CHARGE L'OFFSET POUR L'AFFICHAGE CURSEUR LDA >TBLCR2 NB CARACTERES PAR LIGNE LDB >LIGN NB DE LIGNES MUL LEAX D,X LDA >CARACT POSITION DU CARACTERE SUIVANT LEAX A,X CALCUL DE LA POSITION DU CURSEUR LDA >CARACT CHARGE LA POSITION DU CARACTERE SUIVANT CMPA >TBLCR2 NB CARACTERES PAR LIGNE BEQ SOREC5 SAUTE SI DERNIER CARACTERE DE LA LIGNE STX >MEM5 LDB #$0E REGISTE POUR AFFICHAGE CURSEUR LDA >MEM5 CHARGE LA PARTIE HAUTE DE LA POSITION JSR >UPDCRT CHARGEMENT DU REGISTRE LDA >MEM6 CHARGE LA PARTIE BASSE JSR >UPDCRT CHARGEMENT DU REGISTRE SOREC5 STX >MEM7 LDB #$12 REGISTRE POUR UPDTE ADRESSE LDA >MEM7 CHARGE LA PARTIE HAUTE DE LA POSITION JSR >UPDCRT CHARGEMENT DU REGISTRE LDA >MEM8 CHARGE LA PARTIE BASSE JSR >UPDCRT CHARGEMENT DU REGISTRE RTS ******************************************************* * TEST DU SCROLL SI DERNIERE LIGNE * ******************************************************* TSCROL LDA >LIGN CHARGE LA LIGNE COURRANTE CMPA >TBLCR3 COMPARE AVEC LE NB LIGNE DE L'ECRAN BNE TSCRO1 SAUTE SI PAS EN BAS DE L'ECRAN LDB >SCROLL TEST DU REGISTRE DE SCROLL BNE TSCRO2 SCROLL SI REGISTRE A 1 CLR >LIGN PASSE EN PREMIERE LIGNE BSR SOREC4 POSITIONNE LE CURSEUR TSCRO1 RTS TSCRO2 DECA AJUSTE LE NUMERO DE LIGNE STA >LIGN SAUVEGARDE LE NUMERO DE LIGNE LDX >MEM9 CHARGE L'OFFSET POUR L'AFFICHAGE CURSEUR LDA >TBLCR2 NB CARACTERES PAR LIGNE LEAX A,X AJOUTE LES CARACTERES D'UNE LIGNE A L'OFFSET STX >MEM9 SAUVEGARDE NOUVEAU OFFSET LDB #$0C REGISTRE POUR DISPLAY START LDA >MEM9 CHARGE LA PARTIE HAUTE DE LA POSITION ANDA #$07 AJUSTE L'OFFSET POUR L'AFFICHAGE CURSEUR STA >MEM9 SAUVEGARDE L'OFFSET POUR L'AFFICHAGE CURSEUR JSR >UPDCRT CHARGEMENT DU REGISTRE LDA >ACTDR0 CHARGE LA PARTIE BASSE JSR >UPDCRT CHARGEMENT DU REGISTRE BSR TSCRO3 BSR SOREC4 POSITIONNE LE CURSEUR RTS TSCRO3 LDX >MEM9 CHARGE L'OFFSET POUR L'AFFICHAGE LDA >TBLCR3 NB LIGNE DE L'ECRAN DECA POSITIONNE AVANT DERNIERE LIGNE LDB >TBLCR2 NB CARACTERES PAR LIGNE MUL LEAX D,X CALCUL POSITION UPDATE STX >MEM7 LDB #$12 REGISTRE POUR UPDTE ADRESSE LDA >MEM7 CHARGE LA PARTIE HAUTE DE LA POSITION JSR >UPDCRT CHARGEMENT DU REGISTRE LDA >MEM8 CHARGE LA PARTIE BASSE JSR >UPDCRT CHARGEMENT DU REGISTRE LDA #$20 CHARGE UN ESPACE POUR AFFICHAGE DU CURSEUR STA >DVIDEO SAUVEGARDE DANS LE REGISTRE A AFFICHER LDA >TBLCR2 NB CARACTERES PAR LIGNE ZFAF4 JSR >ZFBC3 LDB >FLGCU1 DECA BNE ZFAF4 RTS ******************************************************* * INTERPRETATION DES CODES DE CTRL * ******************************************************* * INTERPRETATION DES CODES DE CTRL ZFAFE LDX #TABLE5 ASLA LEAX A,X JSR [,X] PULS Y,X,B,A RTS ******************************************************* * SORTIE A L'ECRAN D'UNE CHAINE * ******************************************************* PSTRNG LDA ,X+ CMPA #$04 BEQ PSTRN1 JSR >SORECR BRA PSTRNG PSTRN1 RTS RTS ******************************************************* * BELL (CTRL G) * ******************************************************* ZFB16 LDA >TMRCR2 ANDA #$04 BEQ ZFB16 LDX >TMRT3L LDX >SOUND STX >TMRT2L LDX >TSOUND STX >TMRT3L RTS ******************************************************* * CURSEUR A GUAUCHE (CTRL H) * ******************************************************* LDA >CARACT BEQ ZFB39 DECA STA >CARACT JSR >SOREC4 ZFB39 RTS ******************************************************* * CURSEUR A DROITE (CTRL I) * ******************************************************* LDA >CARACT INCA CMPA >TBLCR2 BNE ZFB48 DECA STA >CARACT RTS ZFB48 STA >CARACT JSR >SOREC4 RTS ******************************************************* * CURSEUR EN BAS (CTL J) * ******************************************************* INC >LIGN JSR >TSCROL JSR >SOREC4 RTS ******************************************************* * CURSEUR EN HAUT (CTRL K) * ******************************************************* LDA >LIGN BEQ ZFB5F DECA ZFB5F STA >LIGN JSR >SOREC4 RTS ******************************************************* * CURSEUR EN HAUT A GAUCHE + EFFACEMENT (CTRL L) * ******************************************************* LDA #$20 CHARGEMENT DU CARACTERE BLANC STA >DVIDEO SAUVEGARDE DANS LE REGISTRE A AFFICHER LDX #$0800 PRESET DU REGISTRE X A 2048 (TAILLE RAM) ZFB6E BSR ZFBC3 UPDATE DU BUS EN ADRESSAGE TRANSPARENT LDA >FLGCU1 LECTURE REGISTRE DUMY LEAX -$01,X DECREMENTE X BNE ZFB6E BOUCLE CLR >LIGN EFFACEMENT NUMERO DE LIGNE CLR >CARACT EFFACEMENT NUMERO CARACTERE LDX #$0000 EFFACEMENT DES MEMOIRES STX >MEM5 BUFFER DE POSITION CURSEUR STX >MEM7 BUFFER DE POSITION POUR UPDATE STX >MEM9 BUFFER DE POSITION OFFSET LDA #$00 LDB #$0C BSR UPDCRT BSR UPDCRT BSR UPDCRT BSR UPDCRT INCB INCB BSR UPDCRT BSR UPDCRT RTS ******************************************************* * UPDATE LE REGISTRE CRT * ******************************************************* UPDCRT STB >FLGCU0 STA >FLGCU1 INCB RTS ******************************************************* * RETOUR CHARIOT (CTRL M) * ******************************************************* CLR >CARACT JSR >SOREC4 RTS ******************************************************* * FONCTION NON DOCUMENTEE (CTRL N) SHIFT OUT * ******************************************************* LDA >CARACT INCA LDB #$20 STB >DVIDEO ZFBB4 BSR ZFBC3 LDB >FLGCU1 INCA CMPA >TBLCR2 NB CARACTERES PAR LIGNE BNE ZFBB4 JSR >SOREC4 RTS ZFBC3 BSR ZFBCA LDB #$1F STOCKAGE DONNEE DANS LE DUMMY REGISTER STB >FLGCU0 * ATTENTE ACTUALISATION ZFBCA LDB >FLGCU0 LECTURE DU STATUS REGISTER DU CONTROLEUR BITB #$80 TEST DU BIT 7 UPDATE READY BEQ ZFBCA RTS ******************************************************* * FONCTION NON DOCUMENTEE (CTRL O) SHIFT IN * ******************************************************* LDA >CARACT LDB #$20 STB >DVIDEO ZFBDA BSR ZFBC3 LDB >FLGCU1 INCA CMPA >TBLCR2 NB CARACTERES PAR LIGNE BNE ZFBDA LDA >LIGN INCA CMPA >TBLCR3 BEQ ZFC05 LDA #$17 SUBA >LIGN LDB >TBLCR2 MUL TFR D,X ZFBF9 BSR ZFBC3 LDB >FLGCU1 LEAX -$01,X BNE ZFBF9 JSR >SOREC4 ZFC05 RTS ******************************************************* * POSITIONNE LE CURSEUR(CONTENU EFAB - EFAC)(CTRL R) * ******************************************************* JSR >SOREC4 RTS ******************************************************* * CURSEUR ON * ******************************************************* LDA #$60 BSR ZFC11 RTS ******************************************************* * CURSEUR OFF * ******************************************************* LDA #$20 ZFC11 LDB #$0A BSR UPDCRT RTS ******************************************************* * ACTIVE LE SCROLLING * ******************************************************* LDA #$01 STA >SCROLL RTS ******************************************************* * DESACTIVE LE SCROLING * ******************************************************* CLR >SCROLL RTS * HOME CLR >LIGN CLR >CARACT JSR >SOREC4 RTS ******************************************************* * INITIALISATION DES FONCTIONS DE BASES DU CONTROLEUR * * DE DISQUETTES FD1791 / MB 8876 * ******************************************************* * INITIALISATION FLOPPY * ******************************************************* LECINI LDX #TRKBUF LDB #$D0 %11010000 STB >STRCR SAUVEGARDE DANS LE CONTROL REGISTER * BIT7654=1101 FORCE INTERRUPT * BIT3210=0 TERMINATE WITH NO INTERRUPT LDB #$10 LECIN1 CLR ,X+ INITIALISE LES 16 MEMOIRES $EF80 A $EF90 DECB BNE LECIN1 LOOP LDB #$83 CHARGE LES SAUTS DE PISTES 20ms STB >VLECT0 MEMORISE POUR LECTEUR 0 STB >VLECT1 MEMORISE POUR LECTEUR LDA #$FF STA >PIA1DA PIA1 EN SORTIE LDA #$04 STA >PIA1CA SELECTIONNE CR LDA #$18 STA >PIA1DA MOTEUR ON FACE 0, SD ORCC #$10 SET MASK IRQ JSR >SHORL1 DESACTIVATION DES INTERRUPTIONS DE L'HORLOGE ANDCC #$EF CLEAR IRQ MASK LDA #$0C INTERRUPTION TOUTES LES 60 SEC REPETITIVES STA >INTERH APPLIQUE INT A L'HORLOGE TEMPO MOTEUR LDA #$02 STA >INDMOT INDICATEUR MOTEUR FLOPPY LDB #$0B RESTORE COMMAND AVEC STEP RATE 30 MS STB >STRCR APPLIQUER RESTORE LDX #$0000 LECIN2 LEAX -$01,X TEMPORISATION BNE LECIN2 ******************************************************* * INITIALISATION FLOPPY A CHAUD * ******************************************************* HOTINI LDA #$FF STA >PIA1DA PIA1 EN SORTIE LDA #$04 STA >PIA1CA SELECTIONNE CR LDA #$18 STA >PIA1DA MOTEUR ON FACE 0 RTS ******************************************************* * DEMARRAGE DU MOTEUR * ******************************************************* DEMOT LDA >PIA1DA CHARGE REGISTRE DATA PIA LECTEUR BITA #$08 TEST DU MOTEUR BNE DEMOT1 MOTEUR EN MARCHE ? ORA #$08 NON, DEMARRE LE MOTEUR STA >PIA1DA APPLIQUE LA COMMANDE PSHS X LDX >DEMAND CHARGE LA TEMPO DE DEMARRAGE DU MOTEUR DEMOT2 LEAX -$01,X INITIALISE LE COMPTEUR BNE DEMOT2 PULS X DEMOT1 LDA #$02 STA >INDMOT INDICATEUR MOTEUR FLOPPY RTS ******************************************************* * FONCTIONS DE BASES DU CONTROLEUR DE DISQUETTES * * FD1791 / MB 8876 * ******************************************************* ******************************************************* * LECTURE SECTEUR * ******************************************************* LECSEC ORCC #$10 SET MASK IRQ BSR SEEK SEEK SECTEUR A / PISTE B JSR >LECSE1 TEST DE SPOOLING? SWI3 SI BESOIN BSR DEMOT DEMARRE MOTEUR LDA #$8C COMMANDE DE LECTURE SECTEUR (30MS DELAY) STA >STRCR APPLIQUE LA COMMANDE JSR >DELAY DELAY EN FONCTION DE LA DENSITE TFR DP,B SAUVE LE DP DANS B STB >MEM3 PUIS B DANS MEM3 LDB #$F6 CHARGE L'ADRESSE HAUTE DU CONTOLEUR TFR B,DP DANS LE DP LECSE2 LDB <$0000 POINTE SUR LE REGISTRE DE CONTROLE BITB #$12 TEST SEEK ERROR ET DRQ BEQ LECSE2 ATTENTE DONNEE PRESENTE LECSE3 LDA <$0003 CHARGE LA DONNEE STA ,X+ STOCKE EN MEMOIRE ET INCREMENTE LECSE4 LDB <$0000 POINTE SUR LE REGISTRE DE CONTROLE BITB #$02 TEST DRQ BNE LECSE3 OK DONNEE SUIVANTE LDB <$0000 POINTE SUR LE REGISTRE DE CONTROLE BITB #$02 TEST DRQ BNE LECSE3 OK DONNEE SUIVANTE LDB <$0000 POINTE SUR LE REGISTRE DE CONTROLE BITB #$02 TEST DRQ BNE LECSE3 OK DONNEE SUIVANTE LDB <$0000 POINTE SUR LE REGISTRE DE CONTROLE BITB #$02 TEST DRQ BNE LECSE3 OK DONNEE SUIVANTE LDB <$0000 POINTE SUR LE REGISTRE DE CONTROLE BITB #$02 TEST DRQ BNE LECSE3 OK DONNEE SUIVANTE BITB #$01 TEST BUSY BNE LECSE4 OUI, TOUJOURS EN ATTENTE BSR LECSE5 ATTENTE PLUS BUSY BITB #$10 TEST CRC ERROR BEQ LECSE6 NON, PAS ERREUR, OK LDA <$0080 CHARGE REGISTRE DATA PIA LECTEUR EORA #$10 INVERSE LA DENSITE STA <$0080 STOCKE REGISTRE DATA PIA LECTEUR LECSE6 LDA >MEM3 REPREND DP TFR A,DP REPLACE DP BITB #$1C TEST SI ERREUR CRC? NOT FOUND OU DATA LOST ANDCC #$EF EFFACE BIT ENTIER DU CC RTS LECSE5 LDB >STRCR ATTENTE PLUS BUSY BITB #$01 TEST BUSY BNE LECSE5 ATTENTE RTS LECSE1 TST >ZCC34 TEST SI SPOOLING ACTIF ? BEQ ZFD06 NON, SAUTE SWI3 INTERRUPTION SPOOLING NOP ZFD06 RTS RETOUR ******************************************************* * SEEK SECTEUR CONTENU DANS A ET PISTE CONTENUE DANS B* ******************************************************* SEEK STB >SCR COPIE B DANS LE REGISTRE DE PISTE PSHS B SAUVEGARDE B DANS LA PILE LDB >PIA1DA CHARGE LE REGISTRE PIA DU FLOPPY ANDB #$10 TEST DU BIT DE DOUBLE DENSITE BNE SEEK1 SAUT SI SD * DOUBLE DENSITE PULS B REPRISE DE B CMPB >NSECT2 COMPARE AU NB DE SECTEUR PAR FACE EN DD BLS SEEK2 OK FACE 0 BRA SEEK3 FACE 2 * SIMPLE DENSITE SEEK1 PULS B REPRISE DE B CMPB >NSECT1 BLS SEEK2 SEEK3 LDB >PIA1DA CHARGE LE REGISTRE PIA DU FLOPPY ORB #$04 ACTIVE LA FACE 1 STB >PIA1DA APPLIQUE LA COMMANDE BRA SEEK4 SEEK2 LDB >PIA1DA CHARGE LE REGISTRE PIA DU FLOPPY ANDB #$FB ACTIVE LA FACE 0 STB >PIA1DA APPLIQUE LA COMMANDE SEEK4 LDB #$96 CHARGE UNE TEMPO SEEK5 DECB BNE SEEK5 CLRB PSHS X SAUVE X DANS LA PILE STA >DR STOCKE LE SECTEUR DANS LE REGITRE JSR >DELAY LDA #$1B COMMANDE DE SEEK SECTEUR SEEK6 LDB >ACTDRV CHARGE LE LECTEUR ACTIF LDX #VLECT0 ABX CALCULE LE LECTEUR ACTIF LDB ,X CHARGE LE SAUT DE PISTE DU LECTEUR ACTIF ORB #$FC CONSTRUIT LE MASQUE DE SAUT DE PISTE STB >MEM2 MEMORISE LE MASQUE DE SAUT DE PISTE ANDA >MEM2 CONSTRUIT LA COMMANDE SEEK AVEC SAUT DE PISTE STA >STRCR APPLIQUE LA COMMANDE JSR >DELAY PULS X RECUPERE X BSR LECSE5 ATTENTE PLUS BUSY ANDB #$40 TEST DU BIT WRITE PROTECT RTS ******************************************************* * ECRITURE D'UN SECTEUR * ******************************************************* ECRSEC ORCC #$10 SET MASK IRQ BSR SEEK SEEK SECTEUR A / PISTE B BNE ECRSE1 SAUTE SI ERREUR BSR LECSE1 TEST DE SPOOLING? SWI3 SI BESOIN JSR >DEMOT DEMARRE MOTEUR LDA #$AC COMMANDE DE ECRITURE SECTEUR (30MS DELAY) STA >STRCR APPLIQUE LA COMMANDE JSR >DELAY DELAY EN FONCTION DE LA DENSITE TFR DP,B SAUVE LE DP DANS B STB >MEM3 PUIS B DANS MEM3 LDB #$F6 CHARGE L'ADRESSE HAUTE DU CONTOLEUR TFR B,DP DANS LE DP LDA ,X+ LIT LA MEMOIRE ET INCREMENTE ECRSE2 LDB <$0000 POINTE SUR LE REGISTRE DE CONTROLE BITB #$12 TEST SEEK ERROR ET DRQ BEQ ECRSE2 ATTENTE DONNEE A ECRIRE ECRSE3 STA <$0003 ECRITLA DONNEE LDA ,X+ CHARGE LA DONNEE SUIVANTE ECRSE4 LDB <$0000 POINTE SUR LE REGISTRE DE CONTROLE BITB #$02 TEST DRQ BNE ECRSE3 LDB <$0000 POINTE SUR LE REGISTRE DE CONTROLE BITB #$02 TEST DRQ BNE ECRSE3 OK DONNEE SUIVANTE LDB <$0000 POINTE SUR LE REGISTRE DE CONTROLE BITB #$02 TEST DRQ BNE ECRSE3 OK DONNEE SUIVANTE LDB <$0000 POINTE SUR LE REGISTRE DE CONTROLE BITB #$02 TEST DRQ BNE ECRSE3 OK DONNEE SUIVANTE LDB <$0000 POINTE SUR LE REGISTRE DE CONTROLE BITB #$02 TEST DRQ BNE ECRSE3 OK DONNEE SUIVANTE BITB #$01 TEST BUSY BNE ECRSE4 OUI, TOUJOURS EN ATTENTE LBSR LECSE5 NON, PAS ERREUR, OK BITB #$10 TEST SI ERREUR NOT FOUND BEQ ECRSE5 NON, PAS ERREUR, OK LDA <$0080 CHARGE REGISTRE DATA PIA LECTEUR EORA #$10 INVERSE LA DENSITE STA <$0080 STOCKE REGISTRE DATA PIA LECTEUR ECRSE5 LDA >MEM3 REPREND DP TFR A,DP REPLACE DP ECRSE1 BITB #$5C TEST SI ERREUR OU WRITE PROTECT ANDCC #$EF EFFACE BIT ENTIER DU CC RTS ******************************************************* * VERIFICATION D'UN SECTEUR * ******************************************************* VERSEC ORCC #$10 SET MASK IRQ JSR >LECSE1 TEST DE SPOOLING? SWI3 SI BESOIN LDA #$8C COMMANDE DE LECTURE SECTEUR (30MS DELAY) STA >STRCR APPLIQUE LA COMMANDE BSR DELAY DELAY EN FONCTION DE LA DENSITE JSR >LECSE5 ATTENTE PLUS BUSY ANDCC #$EF EFFACE BIT ENTIER DU CC BITB #$58 TEST WRITE PROTECT, ERREUR CRC ET SEEK ERREUR RTS ******************************************************* * RESTORE PISTE 0 * ******************************************************* PIST0 PSHS X SAUVE X DANS LA PILE BSR SELECT SELECTIONNE LE LECTEUR ACTIF BSR RESTO1 CALCULE LA PISTE ACTIVE CLR ,X MET LA MEMOIRE DE PISTE ACTIVE A ZERO LDA #$0B COMMANDE DE RESTORE STA >STRCR APPLIQUE LA COMMANDE JMP >SEEK6 ******************************************************* * SELECTION DU LECTEUR * ******************************************************* SELECT LDA $03,X CHARGE LE NUMERO DE LECTEUR DANS LE FCB CMPA #$03 SUPERIEUR A 3 ? BLS SELEC1 NON, DRIVE OK SELEC3 LDB #$0F ORCC #$01 RTS SELEC1 LDX #VLECT0 LEAX A,X CALCULE LE SAUT DE PISTE DU LECTEUR ACTIF LDB ,X CHARGE LE SAUT DE PISTE APPLICABLE ANDB #$80 TEST SI PRESENT BEQ SELEC3 LECTEUR NON CONNECTE BSR RESTO1 CALCUL PISTE ACTIVE DU LECTEUR ACTIF LDB >TR PREND LA PISTE ACTIVE DANS LE CONTROLEUR STB ,X SAUVEGARDE LA PISTE ACTIVE STA >ACTDRV SAUVEGARDE LE LECTEUR ACTIF LDA >PIA1DA CHARGE LE REGISTRE PIA DU FLOPPY ANDA #$FC EFFACE LE LECTEUR ACTIF ORA >ACTDRV APPLIQUE LE NOUVEAU LECTEUR ACTIF STA >PIA1DA APPLIQUE LA COMMANDE BSR RESTO1 CALCUL PISTE ACTIVE DU LECTEUR ACTIF LDA ,X PREND LA PISTE ACTIVE EN MEMOIRE STA >TR ET LA DONNE AU CONTROLEUR BSR DELAY BRA SELEC4 TERMINE ******************************************************* * TEST READY * ******************************************************* TETRDY LDA $03,X HARGE LE NUMERO DE LECTEUR DANS LE FCB PSHS X SAUVE X DANS LA PILE LDX #VLECT0 LEAX A,X CALCULE LE SAUT DE PISTE DU LECTEUR ACTIF LDB ,X CHARGE LE SAUT DE PISTE APPLICABLE PULS X REMET x ANDB #$80 TEST SI LECTEUR PRESENT BNE SELEC4 OK, LECTEUR PRESENT LDB #$80 CODE ERREUR ORCC #$01 MET LA CARRY A 1 RTS SELEC4 CLRB OK, DRIVE READY ANDCC #$FE EFFACE LA CARRY RTS ******************************************************* * CALCUL PISTE ACTIVE DU LECTEUR ACTIF * ******************************************************* RESTO1 LDX #TRKBUF CHARGE L'ORIGINE DU BUFFER LDB >ACTDRV CHARGE LE NUMERO DE DRIVE ACTIF ABX CALCULE LA POSITION DE MEMOIRE DE PISTE RTS ******************************************************* * DELAY DE 2 OU 6 BOUCLES EN FONCTION DE LA DENSITE * ******************************************************* DELAY LDB >PIA1DA CHARGE LE REGISTRE PIA DU FLOPPY BITB #$10 TEST DU BIT DE DOUBLE DENSITE BNE DELA1 SI SIMPLE DENSITE LDB #$02 SI DOUBLE DENSITE, DELAY DE 2 BOUCLES BRA DELA2 SAUTE DELA1 LDB #$06 SI SIMPLE DENDITE, DELAY DE 6 BOUCLES DELA2 DECB DECREMENTE BNE DELA2 BOUCLE RTS ******************************************************* * SOUS PROGRAMME GENERE PAR UNE INTERRUPTION IRQ * * RELIEE AU TIMER ET AU CLAVIER * ******************************************************* IRQVEC LDA >PIA1CB CHARGE LE REGISTRE DE CONTROL PIA CLAVIER BITA #$40 TEST LE FLAG IRQ BEQ IRQVE1 IRQ EN PLROVENANCE DU CLAVIER ? * OUI, IRQ EN PLROVENANCE DU CLAVIER * C'EST LA TEMPO DE MARCHE DU MOTEUR DU FLOPPY LDA >PIA1DB CHARGE LE CARACTERE EN ATTENTE ORCC #$10 MASQUE LE BIT 8 JSR >SHORL1 DESACTIVATION DES INTERRUPTIONS DE L'HORLOGE ANDCC #$EF EFFACE LA CONDITION DE RETOUR D'IRQ DU CC LDA #$0C STA >INTERH RECHARGE LA DEMANDE D'INTERRUPTION A 60SEC DEC >INDMOT DECREMENTE LA MEMOIRE DE MOTEUR DE FLOPPY BNE IRQVE2 TERMINE LDA >PIA1DA CHARGE LE REGISTRE DU PIA FLOPPY ANDA #$F7 ARRET DU MOTEUR STA >PIA1DA APPLIQUE LA COMMANDE IRQVE2 RTI TERMINE * IRQ NE VIENT PAS DU CLAVIER IRQVE1 LDA >TMRCR2 CHARGE LE REGISTRE DE CONTROL DU TIMER BITA #$80 LRQ MASQUEE ? BEQ IRQVE3 OUI, PAS D'IRQ SPOOLING LDX >TMRT1L REINITIALISE LE COMPTEUR JMP >ASPOOL TRANSFER AU SP DE SPOOLING IRQVE3 JMP [IRQFLX]VOIR LES IRQ FLEX ******************************************************* * REDIRECTION VERS LE SP IRQ UTILISATEUR * * ADRESSE $EFF2 INITIALISE A RTI * ******************************************************* CTRIRQ JMP [IRQUTI] SAUTE VERS UNE ROUTINE IRQ UTILISATEUR ******************************************************* * CONTROLE DE TIMER QUI GENERE LES INTERRUPTION * * POUR LE SPOOLING * ******************************************************* * ARRET TIMER * ******************************************************* TMROFF LDA #$00 STA >TMRCR1 ARRET DES INTERRUPTION RTS ******************************************************* * DEMARRAGE TIMER * ******************************************************* TMRON LDA #$40 AUTORISE L'INTERRUPTION PAR IRQ STA >TMRCR1 APPLIQUE LA COMMANDE LDX >VSPOOL INIT A $2710 + 10000 NS STX >TMRT1L APPLIQUE LA COMMANDE RTS TMRINIT RTS TIMER INIT AU DEMARRAGE DU SYSTEME ******************************************************* * $FE9D : COMMANDE MONITEUR "D" * * POINT DE DEMARRAGE DU FLEX A FROID * ******************************************************* JSR >LECINI INITIALISATION DU LECTEUR LDX #VLECT1 CHARGEMENT DU TIMING DE SAUT DE PISTE JSR >PIST0 SE POSITIONNE EN PISTE 0 LDX #$0000 BOUCLE D'ATTENTE MOND1 LEAX -$01,X BNE MOND1 MOND2 LDB >STRCR CHARGE LE CR DU CONTROLEUR DE FLOPPY BITB #$01 TEST LE BIT 1 BUSY BNE MOND2 BOUCLE TANT QUE BUSY LDA #$00 PISTE 0 LDB #$01 SECTEUR 1 LDX #ADCMD ADRESSE COMMANDE FLEX JSR >LECSEC LECTURE DU SECTEUR JMP >ADCMD SAUT POUR EXECUTION DU BOOT LOADER ******************************************************* * $FEC1 : COMMANDE MONITEUR "G" * * LANCEMENT DU PROGRAMME A L'ADRESSE INDIQUEE * ******************************************************* BSR BADDR CHARGE UNE ADRESSE AU CLAVIER BVS MONG1 TEST SI ERREUR OVERFLOW JSR ,X NON, GO A L'ADRESSE MONG1 RTS ******************************************************* * $FEC8 : COMMANDE MONITEUR "M" * * MODIFIE UNE CASE MEMOIRE * ******************************************************* BSR BADDR CHARGE UNE ADRESSE AU CLAVIER BVC MONM1 TEST SI ERREUR OVERFLOW RTS MONM1 LDA #$20 CARACTERE ESPACE JSR >SORECR SORT UN ESPACE A L'ECRAN LDA ,X CHARGE DANS A LE CONTENU DU REGISTRE POINTE PAR X JSR >MONM2 AFFICHE A A L'ACRAN LDA #$20 CARACTERE ESPACE JSR >SORECR SORT UN ESPACE A L'ECRAN BSR BADDR1 LECTURE UN NOMBRE EXA 8 BITS BVC MONM5 SAUTE SI PAS ERREUR OVERFLOW CMPA #$5E COMPARE A FLECHE VERS LE HAUT BNE MONM6 NON, SAUTE LEAX -$01,X REMONTE LE POINTEUR BSR MONMA LINE FEED BSR MONM9 AFFICHE NOUVELLE ADRESSE BRA MONM1 MONM6 CMPA #$0A COMPARE A RETOUR CHARIOT BNE MONM7 NON, SAUTE LEAX $01,X AVANCE LE POINTEUR BSR MONM8 SAUTE UNE LIGNE BSR MONM9 AFFICHE NOUVELLE ADRESSE BRA MONM1 RECOMMENCE MONM7 RTS MONM5 STA ,X+ MODIFIE LA CASE MEMOIRE POINTEE BSR MONMA LINE FEED BSR MONM9 AFFICHE NOUVELLE ADRESSE BRA MONM1 RECOMMENCE MONMA LDA #$0A LINE FEED JSR >SORECR MONM8 LDA #$0D RETOUR CHARIOT JSR >SORECR RTS ******************************************************* * SOUS PROGRAMME LECTURE ADRESSE 16 BITS HEXA * ******************************************************* BADDR BSR BADDR1 LECTURE 2 CARACTERES HEXA BVS BADDR3 RETOUR SANS RIEN FAIRE SI ERREUR TFR D,X CHARGE DANS X BSR BADDR1 LECTURE 2 CARACTERES HEXA BVS BADDR3 RETOUR SANS RIEN FAIRE SI ERREUR PSHS X STA $01,S PULS X REPREND LE RESULTAT DANS X RTS BADDR1 BSR BADDR2 LECTURE 1 CARACTERE HEXA BVS BADDR3 RETOUR SANS RIEN FAIRE SI ERREUR ASLA DECALE ASLA 4 ASLA FOIS ASLA TFR A,B TRANSFERE DANS B BSR BADDR2 LECTURE 1 CARACTERE HEXA BVS BADDR3 RETOUR SANS RIEN FAIRE SI ERREUR PSHS B SAUVE B DANS LA PILE ADDA ,S+ Y AJOUTE A POUR OBTENIR UN NOMBRE 8 BITS RTS BADDR2 JSR >CLAV1 LECTURE CLAVIER CMPA #$30 COMPARE A "0" BCS BADDR3 TROP PETIT CMPA #$39 COMPARE A "9" BHI BADDR4 PLUS GRAND SUBA #$30 RETIRE $30 DONNE CODE VALEUR RTS BADDR4 ANDA #$5F MASQUE LES BITS 7 ET 8 CMPA #$41 COMPARE A "A" BCS BADDR3 TROP PETIT CMPA #$46 COMPARE A "F" BHI BADDR3 TROP GRAND SUBA #$37 RETIRE $37 DONNE VALEUR RTS BADDR3 ORCC #$02 CODE OVERFLOW RTS ******************************************************* * SOUS PROGRAMME ECRITURE ADRESSE 16 BITS HEXA * ******************************************************* MONM9 PSHS X PULS A BSR MONM2 PULS A MONM2 PSHS A SAUVE A LSRA PREND LES LSRA 4 LSRA BITS DE GAUCHE LSRA BSR MONM3 SORT A L'ECRAN 1ER CARACTERE PULS A REPREND A ANDA #$0F PREND LES 4 BITS DE DROITE MONM3 ADDA #$30 AJOUTE $30 POUR CODE ASCII CMPA #$39 COMPARE A "9" BLE MONM4 OK, ON PEUT IMPRIMER ADDA #$07 AJOUTE 7 MONM4 JMP >SORECR SWI3VE JMP [SWI3] SWI2VE JMP [SWI2] SWIVEC JMP [SWI] NMIVEC JMP [NMI] FIRQVE JMP [FIRQ] ******************************************************* * INITIALISATION DES INTERRUPTIONS SYSTEME * ******************************************************* * TOUTES LES INTERRUPTIONS SONT INITIALISEES * * SUR LE MEME VECTEUR $FE74SUR UN RTI * ******************************************************* INITIRQ LDX #IRQVE2 CHARGEMENT DU VECTEUR STX >IRQUTI STX >IRQFLX STX >SWI3 STX >SWI2 STX >SWI STX >NMI STX >FIRQ RTS NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 NEG <$0000 ******************************************************* * VECTEURS D'INTERRUPTION HARDWARE * ******************************************************* FDB SWI3VE FDB SWI2VE FDB FIRQVE FDB IRQVEC FDB SWIVEC FDB NMIVEC FDB START ******************************************************* END HOTMON