%-----------------------------------------------------------------------------%
% MyInt.masd                                                                  %
%-----------------------------------------------------------------------------%
% Routine de gestion des interruptions pour les niveaux de gris.              %
%-----------------------------------------------------------------------------%
% Bug : deregle l'horloge.                                                    %
%-----------------------------------------------------------------------------%
% TODO : gestion du son multivoies et probablement du reseau.                 %
%-----------------------------------------------------------------------------%

% Test carry et ST15 (pour 48 et debug)
!?FL=1.0 SKIPC {
!?FL=1.0   ?ST=1.15 {
!?FL=1.0     RTNCC }
!?FL=1.0   ST=0.13
!?FL=1.0 } SKEC {
!?FL=1.0   ?ST=0.15 RTNYES
!?FL=1.0   ST=1.13
!?FL=1.0 }

% Sauvegarde des registres (48)
% Ca et D1
!?FL=1.0 RSTK=C
!?FL=1.0 CD1EX
!?FL=1.0 D1=805DB
!?FL=1.0 DAT1=C.16
% P, SB et MODE
!?FL=1.0 C=0.X
!?FL=1.0 CPEX.1
!?FL=1.0 ?SB=0 {
!?FL=1.0   C+1.P }
!?FL=1.0 C-1.XS
!?FL=1.0 SETHEX
!?FL=1.0 D1=EB
!?FL=1.0 DAT1=C.3

% Si l'inter est due á l'Horloge 1
D1=0012F C=DAT1.B
?CBIT=0.3 ->.FIN.INT
LC 7 DAT1=C.B

% Attente VBL
D1=28
{
  C=DAT1.B
  C+C.B C+C.B
  ?C<>0.B UP
}

% Affichage Ecran
D1=(5)ECR2 C=DAT1.A
?ST=1.11
{
  CSRC CSRC C+8.X
  CSLC C+8.A CSLC
}
D1=00120 DAT1=C.A

% Mise á jour Horloge1
D1=38
C=0.W
?ST=1.11 -> {
  !?FL=1.0 LC FD
  !?FL=0.0 LC FC
  ST=0.11
} SKELSE {
  !?FL=1.0 LC 7D
  !?FL=0.0 LC 7C
  ST=1.11
}
DAT1=C.8

% Recuperation des registres et fin
*.FIN.INT

% Pour la 49 (pompé du gestionnaire de la ROM et à peine optimisé)
% Aw
!?FL=0.0 D1=805F5
!?FL=0.0 A=DAT1.W
% Ca
!?FL=0.0 D1=F0
!?FL=0.0 C=DAT1.A
!?FL=0.0 RSTK=C
% SB
!?FL=0.0 D1=EB
!?FL=0.0 C=DAT1.A
!?FL=0.0 HST=02
!?FL=0.0 CSR.A
% mode
!?FL=0.0 C+1.P SKIPC {
!?FL=0.0  SETDEC }
% carry
!?FL=0.0 P=1
!?FL=0.0 C-1.P
% P
!?FL=0.0 P=C.2
% C5-15 et D1
!?FL=0.0 D1=DB
!?FL=0.0 C=DAT1.16
!?FL=0.0 D1=C
% Fin
!?FL=0.0 ST=0.14

% Pour la 48
% mode, P et SB
!?FL=1.0 D1=805EB
!?FL=1.0 C=DAT1.3
!?FL=1.0 C+1.XS
!?FL=1.0 SKIPC {
!?FL=1.0   SETDEC }
!?FL=1.0 P=C.1
!?FL=1.0 SB=0 CSRB.B
% C5-15 et D1
!?FL=1.0 D1=DB
!?FL=1.0 C=DAT1.16
!?FL=1.0 D1=C
% carry
!?FL=1.0 ?ST=1.13 { }

% Commun 48 et 49
% Ca et fin
C=RSTK
RTI

@