INCLUDE EQMON Appel des equates TTL MONITEUR MO5: INITIALISATION GENERALE * SECT INIMON,ABS,LOC=$EFFE SECT INIMON EXTERN PUTCH,GETCH,DRAWXY,PLOTXY,PRCONT,K7CONT,GETLP,BUZZER,CURSIN EXTERN LPINT,NOTE,GETPT,GETSC,JOYSTK,CHPLOT,KEYTST,FORME0,FORME1,K7MOT EXTERN BASPNT,TABASC,TABAF EXTERN WRMTST * ***** VERSION HARD MO5 * * ***** A TRANSFERER AILLEURS ***** * * FDB BASPNT Saut en debut du Basic * **** INITIALISATIONS PAGE ZERO MONITEUR * INTERN COLD COLD EQU * CLR WRMTST Point de redemarrage a froid du BASIC, apres * un redemarrage a chaud du moniteur, afin de * permettre un BOOT apres le debut normal. INTERN DEPART DEPART EQU * LDB #DIRECT Positionnement en page zero moniteur. TFR B,DP LDS #STACK S Pointe en haut de la pile systeme. [$20CC) LDX #LATCLV X pointe en haut de la zone a initialiser. LDU #$A55A Pattern servant a tester le demarrage a chaud, CMPU TSTRST typique du MO5: TSTRST en $20FE-$20FF. BEQ WARM WARM saute le reglaqe par defaut du lightpen,du * code pour imprimante graphique,et de la latence * clavier ($07 ==> environ une seconde). STU TSTRST TSTRST est positionne pour les RESET a venir. LDU #INPRLP 7 pour l'imprimante, 12 pour le light-pen. STU ,X LATCLV-GRCODE=07-12; le 12 est ensuite change: STU 1,X LATCLV-GRCOOE-DECALG=07-07-12. Rused bidouille! WARM EQU * CLRA A = 0 pour init. des flags de pointeurs. LDU #TABADR U pointe sur la table des adresses -->pointeurs INIPTR EQU * PULU Y Y contient I'adresse a mettre dans le pointeur. STA ,-X Le flag est mis en tete {3eme octet = 0), STY ,--X suivi de l'adresse. CMPX #SWI1PT Dernier pointeur a charger = SWI1PT. BGT INIPTR SET$00 EQU * STA ,-X A contient encore la valeur zero --> tous CMPX #STATUS les registres jusqu'a STATUS inclus. BGT SET$00 COMA SET$FF EQU * STA ,-X A = $FF. CMPX #TERMIN La table des terminateurs est initialisee a $FF BGT SET$FF STB TABPT B contient encore la valeur RDIRECT. STB TOPTAB Initialisation des octets superieurs des STB BOTTAB pointeurs de la table des terminateurs. CLR DKFLG DKTEST EQU * LDX #IDDISK Pointe au debut de la ROM controleur disque. LDB #$55 ADDB ,X+ Checksum sur les trois ler octets disque. ADDB ,X+ ADDB ,X+ CMPB ,X Identique ? BNE INIPIA STA DKFLG Flag de presence controleur disque. * ***** INITIALISATION PIA SYSTEME ***** * * contient encore $FF en venant ici * INIPIA EQU * LDU #PRA U = index pour adressage "court" des ports LSRA A : %01111111 Sortie: son, LS138 clavier, STA PRB-PRA,U LS151 clavier. Entree: Out clavier. LDA #%01011111 Sortie: Forme, pRVB tour, Write K7 STA ,U Entree : interrupteur lightpen, read K7 LDX #%0011111000111111 * CA1 : Liqht-pen (actif sur front montant) * CB1 : I.T. 50 Hz (actif sur front montant) * CA2 : Moteur cassette (l= moteur off) STX CRA-PRA,U CB2 : incrustation (l=normal,0:incrustation) * ***** INITIALISATION PIA JEUX ***** * LDX #$0404 Mise en data input des ports PRA1 et PRB1 STX CRA1-PRA,U destines aux jeux. * ***** FIN D'INITIALISATION DE L'ECRAN ***** * ***** PAGFLG et SCRCLS ont ete deja cleares dans SET$00 ==> mode scroll normal. * JSR CURSIN Curseur on. LDD #ENDAD Le haut de la fenetre a ete mis a zero dans STD ENDDR la boucle SET$00. Ici le bas est mis a $1F40. LDA #24 TOPRAN a ete cleare dans SET$00. On traite STA BOTRAN ici la rangee logique du bas de "TERMIN". * Le Basic, comme chaque cartouche, est tenu de tester le demarrage a * chaud ou a froid. Ne pas se servir du registre TSTRST, celui-ci * etant dans tous les cas ( apres un RESET ou au ler passage apres * positionnement pour les RESET a venir ) a la valeur $A55A. Le test * de RESET dans l'initialisation du moniteur sert uniquement a shunter * ou non le reglage par defaut du light-pen et le positionnement par * defaut du mot de code destine a mettre l'imorimante en mode graphique. * JMP [APPLIC] Adresse de demarrage en $EFFE. TTL AIGUILLAGE DES APPELS MONITEUR INTERN SWITCH SWITCH EQU * LDA ,S Chargement et restauration du CC pour Iaisser ANDA #$F0 les IRQ telles qu'elles etaient avant SWI. STA ,S On ne conserve que la partie masque TFR A,CC Et on la conserve pour la sortie. LDA #DIRECT Positionnement en page zero moniteur avant TFR A,DP l'appel. LDB [$0A,S] Chargement du code d'appel dans B. ANDB #$7F Masquage de b7 si c'est un code de JMP. LDX SIMUL Adresse du debut de la table d'aiguillage. LDD B,X Point d'entree de la routine moniteur dans 0, LDX #OUT et adresse de retour vers SWITCH, PSHS D,X empilees. LDU #PRA U pointe sur les ports pour adressage indexe. LDD 5,S On restaure D et X dont on vient de se servir. LDX 8,S RTS Branchement a la routine moniteur . * * Note : le retour en OUT se fera par le RTS concluant la routine car OUT * est maintenant au sommet de la pile S. * OUT EQU * TFR CC,A On recupere le CC ANDA #$8F dont on ne conserve que la partie flag, et le * bit "entire flag" pour le RTI ORA ,S On rajoute les masques preserves au debut STA ,S Et on remet dans la pile pour la sortie LDX $0A,S Adresse de retour au proqramme dans X, et code LDB ,X+ de la routine dans B, pour tester l'appel. BMI JMPTYP Si b7=l, l'appel etait de type JMP. STX $0A,S Sinon, c'etait un JSR. INTERN RTIPNT RTIPNT EQU * RTI JMPTYP PULS CC,A,B,DP,X,Y,U On restaure tous les registres sauf PC, et l'on LEAS $02,S efface un etage de la pile , pour un retour INTERN RTSPNT direct a l'appelant de la routine qui a fait RTSPNT EQU * l'appel au moniteur. RTS TTL TABLES D'AIGUILLAGE ET D'INITIALISATION * ***** TABLE DES ADRESSES A METTRE DANS LES POINTEURS DE LA PAGE ZERO * TABADR EQU * FDB TABAF,TABAF,TABASC,TBNTRY,RTIPNT,RTIPNT,RTIPNT,SWITCH * * pour: GENPTR,USERAF,CHRPTR,SIMUL,FIRQPT,IRQPT,TIMEPT,SWI1PT * ***** TABLE DE BRANCHEMENT STANDARD ***** * TBNTRY EQU * FDB DEPART Retour au menu principal (MENU$) FDB PUTCH Envoi d'un caractere (PUTC$) FDB FORME0 Mise en memoire couleur (FRM0$) FDB FORME1 Mise en memoire caractere (FRM1$) FDB BUZZER Biip du clavier (BIIP$) FDB GETCH Saisie d'un caractere au clavier (GETC$) FDB KEYTST Controle rapide des touches clavier (KTST$) FDB DRAWXY Trace d'un vecteur (DRAW$) FDB PLOTXY Controle d'un point (PLOTS) FDB CHPLOT Vecteurs "caracteres" (CHPL$) FDB GETPT Test du status d'un point (GETP$) FDB LPINT Lecture light-pen (LPIN$) FDB GETLP Saisie light-pen. FDB GETSC Recherche d'un caractere sur I'ecran (GETS$) FDB JOYSTK Lecture des joysticks (JOYS$) FDB NOTE Generateur de musique (NOTE$) FDB K7CONT Controleur de lecteur de cassettes (K7CO$) FDB K7MOT Mise en route ou arret moteur K7 (K7MO$) FDB PRCONT Controleur d'imprimante parallele (PRCO$) FDB DKCONT Controleur de disquette (DKCO$) FDB DKBOOT Points d'entree disque FDB DKFMT " " FDB ALLOB " " FDB ALLOD " " FDB ECRSE " " FDB FINTR " " FDB LECFA " " FDB MAJCL " " FDB RECFI " " FDB RECUP " " END