File: lsp_SCPCD.s - Tab length: 1 2 4 8 - Lines: on off - No wrap: on off

0001: ; LSP sur Jaguar
0002: ; version 4 bytes reading at once
0003: ;
0004: ; OK - routine de replay Paula en I2S
0005: ; OK - routine de replay Paula en Timer 1
0006: ; OK - convertir player LSP en Timer 1
0007: ; OK - g�rer le changement de bpm dans le timer 1
0008: ; OK - init : signed 8 bits samples => unsigned 8 bits samples
0009: ; OK - LSP Init : longueur sample en bytes
0010: ; OK - mettre en place la console
0011: ; OK - basculer tout en 21:11 :
0012: ; OK - lire 4 octets par 4 octets de sample / attention � l'alignement du sample, lire les premiers octets en loadb et/ou loadw !
0013: ; - optimiser lecture lsp etc dans Timer 1
0014: 
0015: 
0016: ; - Timer 1 pour gestion LSP
0017: ; - I2S pour replay samples
0018: ;
0019: ; calcul bpm: FRQ=24/(60/bpm)= => 125 bpm=50hz
0020: ;
0021: ; samples Amiga = 8 bits signed PCM
0022: 
0023: ;CC (Carry Clear) = %00100
0024: ;CS (Carry Set)   = %01000
0025: ;EQ (Equal)       = %00010
0026: ;MI (Minus)       = %11000
0027: ;NE (Not Equal)   = %00001
0028: ;PL (Plus)        = %10100
0029: ;HI (Higher)      = %00101
0030: ;T (True)         = %00000
0031: 
0032:  include "jaguar.inc"
0033: 
0034: 
0035: CLEAR_BSS   .equ   1         ; 1=efface toute la BSS jusqu'a la fin de la ram utilis�e
0036: LSP_DSP_Audio_frequence     .equ   45000    ; real hardware needs lower sample frequencies than emulators
0037: nb_bits_virgule_offset     .equ   10
0038: 
0039: display_infos_debug    .equ   1
0040: DSP_DEBUG      .equ   0
0041: I2S_during_Timer1    .equ   0         ; 0= I2S waits while timer 1 / 1=IMASK cleared while Timer 1
0042: LSP_avancer_module    .equ   1        ; 1=incremente position dans le module
0043: 
0044: channel_1  .equ  1
0045: channel_2  .equ  1
0046: channel_3  .equ  1
0047: channel_4  .equ  1
0048: 
0049: ; ----------------------------
0050: ; parametres affichage
0051: ;ob_liste_originale   equ  (ENDRAM-$4000)       ; address of list (shadow)
0052: ob_list_courante   equ  ((ENDRAM-$4000)+$2000)    ; address of read list
0053: nb_octets_par_ligne   equ  320
0054: nb_lignes     equ  256
0055: 
0056: curseur_Y_min  .equ  8
0057: 
0058: 
0059: DSP_STACK_SIZE equ 32 ; long words
0060: DSP_USP   equ  (D_ENDRAM-(4*DSP_STACK_SIZE))
0061: DSP_ISP   equ  (DSP_USP-(4*DSP_STACK_SIZE))
0062: 
0063: 
0064: ; DSP
0065: 
0066: 
0067: 
0068: .opt "~Oall"
0069: 
0070: .text
0071: 
0072: 
0073: 
0074:    .68000
0075: 
0076: 
0077:  move.l  #INITSTACK, sp
0078:  move.w  #%0000011011000111, VMODE   ; 320x256
0079:  move.w  #$100,JOYSTICK
0080: 
0081: ; clear BSS
0082: 
0083:  .if   CLEAR_BSS=1
0084: ; clear BSS
0085:  lea   DEBUT_BSS,a0
0086:  lea   FIN_RAM,a1
0087:  moveq  #0,d0
0088:  
0089: boucle_clean_BSS:
0090:  move.b  d0,(a0)+
0091:  cmp.l  a0,a1
0092:  bne.s  boucle_clean_BSS
0093: ; clear stack
0094:  lea   INITSTACK-100,a0
0095:  lea   INITSTACK,a1
0096:  moveq  #0,d0
0097:  
0098: boucle_clean_BSS2:
0099:  move.b  d0,(a0)+
0100:  cmp.l  a0,a1
0101:  bne.s  boucle_clean_BSS2
0102: 
0103: ; clear object list
0104:  lea   ob_list_courante,a0
0105:  lea   ENDRAM,a1
0106:  moveq  #0,d0
0107:  
0108: boucle_clean_BSS3:
0109:  move.b  d0,(a0)+
0110:  cmp.l  a0,a1
0111:  bne.s  boucle_clean_BSS3
0112:  .endif
0113: 
0114: ;check ntsc ou pal:
0115: 
0116:  moveq  #0,d0
0117:  move.w  JOYBUTS ,d0
0118: 
0119:  move.l  #26593900,frequence_Video_Clock   ; PAL
0120:  move.l  #415530,frequence_Video_Clock_divisee
0121: 
0122:  
0123:  btst  #4,d0
0124:  beq.s  jesuisenpal
0125: jesuisenntsc:
0126:  move.l  #26590906,frequence_Video_Clock   ; NTSC
0127:  move.l  #415483,frequence_Video_Clock_divisee
0128: jesuisenpal:
0129: 
0130: 
0131:  move.l #0,D_CTRL
0132: ; copie du code DSP dans la RAM DSP
0133: 
0134:  lea  YM_DSP_debut,A0
0135:  lea  D_RAM,A1
0136:  move.l #YM_DSP_fin-DSP_base_memoire,d0
0137:  lsr.l #2,d0
0138:  sub.l #1,D0
0139: boucle_copie_bloc_DSP:
0140:  move.l (A0)+,(A1)+
0141:  dbf  D0,boucle_copie_bloc_DSP
0142: 
0143: ; init LSP
0144: 
0145:  lea  LSP_module_music_data,a0
0146:  lea  LSP_module_sound_bank,a1
0147:  jsr  LSP_PlayerInit
0148: 
0149: ;  Out :  a0: music BPM pointer (16bits).w
0150: ;    d0: music len in tick count
0151: 
0152:     bsr     InitVideo                ; Setup our video registers.
0153: 
0154:  jsr     copy_olist               ; use Blitter to update active list from shadow
0155: 
0156:  move.l #ob_list_courante,d0     ; set the object list pointer
0157:  swap d0
0158:  move.l d0,OLP
0159: 
0160:  lea  CLUT,a2
0161:  move.l #255-2,d7
0162:  moveq #0,d0
0163:  
0164: copie_couleurs:
0165:  move.w d0,(a2)+
0166:  addq.l #5,d0
0167:  dbf  d7,copie_couleurs
0168: 
0169:  lea  CLUT+2,a2
0170:  move.w #$F00F,(a2)+
0171:  
0172:  move.l  #VBL,LEVEL0      ; Install 68K LEVEL0 handler
0173:  move.w  a_vde,d0                 ; Must be ODD
0174:  sub.w   #16,d0
0175:  ori.w   #1,d0
0176:  move.w  d0,VI
0177: 
0178:  move.w  #%01,INT1                  ; Enable video interrupts 11101
0179: 
0180: 
0181:  ;and.w   #%1111100011111111,sr    ; 1111100011111111 => bits 8/9/10 = 0
0182:  and.w   #$f8ff,sr
0183: 
0184: ; CLS
0185:  moveq #0,d0
0186:  bsr  print_caractere
0187: 
0188: ; init DSP
0189: 
0190:  lea  chaine_LSP,a0
0191:  bsr  print_string
0192: 
0193: 
0194: ; launch DSP
0195: 
0196:  move.l #REGPAGE,D_FLAGS
0197:  move.l #DSP_routine_init_DSP,D_PC
0198:  move.l #DSPGO,D_CTRL
0199:  move.l #0,vbl_counter
0200: 
0201: 
0202: ; calcul RAM DSP
0203:  
0204:  lea   chaine_RAM_DSP,a0
0205:  bsr   print_string
0206:  move.l  #D_ENDRAM,d0
0207:  sub.l  debut_ram_libre_DSP,d0
0208:  bsr   print_nombre_4_chiffres
0209: ; ligne suivante
0210:  moveq  #10,d0
0211:  bsr   print_caractere
0212: 
0213: 
0214: 
0215: ; on attend le DSP
0216:  moveq #5,d7
0217: .boucle_attente:
0218:  move.l  vbl_counter,d0
0219: .waitVBL2:
0220:  move.l  vbl_counter,d1
0221:  cmp.l  d0,d1
0222:  beq  .waitVBL2
0223:  dbf  d7,.boucle_attente
0224: 
0225: 
0226:  move.w  #85,couleur_char
0227: 
0228: 
0229: 
0230: 
0231: ; replay frequency
0232:  lea   chaine_replay_frequency,a0
0233:  bsr   print_string
0234: 
0235:  move.l  DSP_frequence_de_replay_reelle_I2S,d0
0236:  bsr   print_nombre_5_chiffres
0237: 
0238:  lea   chaine_Hz_init_LSP,a0
0239:  bsr   print_string
0240: 
0241:  move.w  #145,couleur_char
0242:  
0243:  lea   chaine_playing_LSP,a0
0244:  bsr   print_string
0245:  
0246:  move.w  #245,couleur_char
0247: 
0248:  lea   chaine_entete_debug_module,a0
0249:  bsr   print_string
0250: 
0251: 
0252: 
0253:  .if   display_infos_debug=0
0254: titi:  bra  titi
0255:  .endif
0256: toto:
0257: 
0258: ; affiche les registres internes
0259:  move.l LSP_DSP_PAULA_internal_location0,d0
0260:  .if  nb_bits_virgule_offset<9
0261:   lsr.l #nb_bits_virgule_offset,d0
0262:  .else
0263:   lsr.l #8,d0
0264:   lsr.l #nb_bits_virgule_offset-8,d0
0265:  .endif
0266:  bsr  print_nombre_hexa_8_chiffres
0267:  move.l #' ',d0
0268:  bsr  print_caractere
0269:  move.l LSP_DSP_PAULA_internal_increment0,d0
0270:  bsr  print_nombre_hexa_8_chiffres
0271:  move.l #' ',d0
0272:  bsr  print_caractere
0273:  move.l #0,d0
0274:  bsr  print_nombre_hexa_8_chiffres
0275:  move.l #' ',d0
0276:  bsr  print_caractere
0277:  move.l LSP_DSP_PAULA_internal_length0,d0
0278:  .if  nb_bits_virgule_offset<9
0279:   lsr.l #nb_bits_virgule_offset,d0
0280:  .else
0281:   lsr.l #8,d0
0282:   lsr.l #nb_bits_virgule_offset-8,d0
0283:  .endif
0284:  bsr  print_nombre_hexa_8_chiffres
0285: 
0286:  ; ligne suivant
0287:  moveq #10,d0
0288:  bsr  print_caractere
0289: 
0290:  move.l LSP_DSP_PAULA_internal_location1,d0
0291:  bsr  print_nombre_hexa_8_chiffres
0292:  move.l #' ',d0
0293:  bsr  print_caractere
0294:  move.l LSP_DSP_PAULA_internal_increment1,d0
0295:  bsr  print_nombre_hexa_8_chiffres
0296:  move.l #' ',d0
0297:  bsr  print_caractere
0298:  move.l #0,d0
0299:  bsr  print_nombre_hexa_8_chiffres
0300:  move.l #' ',d0
0301:  bsr  print_caractere
0302:  move.l LSP_DSP_PAULA_internal_length1,d0
0303:  bsr  print_nombre_hexa_8_chiffres
0304: 
0305: 
0306:  ; ligne suivant
0307:  moveq #10,d0
0308:  bsr  print_caractere
0309: 
0310:  move.l LSP_DSP_PAULA_internal_location2,d0
0311:  bsr  print_nombre_hexa_8_chiffres
0312:  move.l #' ',d0
0313:  bsr  print_caractere
0314:  move.l LSP_DSP_PAULA_internal_increment2,d0
0315:  bsr  print_nombre_hexa_8_chiffres
0316:  move.l #' ',d0
0317:  bsr  print_caractere
0318:  move.l #0,d0
0319:  bsr  print_nombre_hexa_8_chiffres
0320:  move.l #' ',d0
0321:  bsr  print_caractere
0322:  move.l LSP_DSP_PAULA_internal_length2,d0
0323:  bsr  print_nombre_hexa_8_chiffres
0324: 
0325: 
0326:  ; ligne suivant
0327:  moveq #10,d0
0328:  bsr  print_caractere
0329: 
0330: 
0331: 
0332:  move.l LSP_DSP_PAULA_internal_location3,d0
0333:  .if  nb_bits_virgule_offset<9
0334:   lsr.l #nb_bits_virgule_offset,d0
0335:  .else
0336:   lsr.l #8,d0
0337:   lsr.l #nb_bits_virgule_offset-8,d0
0338:  .endif
0339:  bsr  print_nombre_hexa_8_chiffres
0340:  move.l #' ',d0
0341:  bsr  print_caractere
0342:  move.l LSP_DSP_PAULA_internal_increment3,d0
0343:  bsr  print_nombre_hexa_8_chiffres
0344:  move.l #' ',d0
0345:  bsr  print_caractere
0346:  move.l #0,d0
0347:  bsr  print_nombre_hexa_8_chiffres
0348:  move.l #' ',d0
0349:  bsr  print_caractere
0350:  move.l LSP_DSP_PAULA_internal_length3,d0
0351:  .if  nb_bits_virgule_offset<9
0352:   lsr.l #nb_bits_virgule_offset,d0
0353:  .else
0354:   lsr.l #8,d0
0355:   lsr.l #nb_bits_virgule_offset-8,d0
0356:  .endif
0357:  bsr  print_nombre_hexa_8_chiffres
0358: 
0359: 
0360:  ; ligne suivant
0361:  moveq #10,d0
0362:  bsr  print_caractere
0363: 
0364: ; saute une ligne
0365:  ; ligne suivant
0366:  moveq #10,d0
0367:  bsr  print_caractere
0368: 
0369: 
0370:  lea   chaine_entete_debug_module2,a0
0371:  bsr   print_string
0372: 
0373: 
0374: ; affiche les registres externes
0375:  move.l LSP_DSP_PAULA_AUD0L,d0
0376:  bsr  print_nombre_hexa_8_chiffres
0377:  move.l #' ',d0
0378:  bsr  print_caractere
0379:  move.l LSP_DSP_PAULA_AUD0LEN,d0
0380:  bsr  print_nombre_hexa_8_chiffres
0381:  move.l #' ',d0
0382:  bsr  print_caractere
0383:  move.l LSP_DSP_PAULA_AUD0PER,d0
0384:  bsr  print_nombre_hexa_8_chiffres
0385:  move.l #' ',d0
0386:  bsr  print_caractere
0387:  move.l LSP_DSP_PAULA_AUD0VOL,d0
0388:  bsr  print_nombre_hexa_8_chiffres
0389:  ; ligne suivant
0390:  moveq #10,d0
0391:  bsr  print_caractere
0392: 
0393:  move.l LSP_DSP_PAULA_AUD1L,d0
0394:  bsr  print_nombre_hexa_8_chiffres
0395:  move.l #' ',d0
0396:  bsr  print_caractere
0397:  move.l LSP_DSP_PAULA_AUD1LEN,d0
0398:  bsr  print_nombre_hexa_8_chiffres
0399:  move.l #' ',d0
0400:  bsr  print_caractere
0401:  move.l LSP_DSP_PAULA_AUD1PER,d0
0402:  bsr  print_nombre_hexa_8_chiffres
0403:  move.l #' ',d0
0404:  bsr  print_caractere
0405:  move.l LSP_DSP_PAULA_AUD1VOL,d0
0406:  bsr  print_nombre_hexa_8_chiffres
0407:  ; ligne suivant
0408:  moveq #10,d0
0409:  bsr  print_caractere
0410: 
0411:  move.l LSP_DSP_PAULA_AUD2L,d0
0412:  bsr  print_nombre_hexa_8_chiffres
0413:  move.l #' ',d0
0414:  bsr  print_caractere
0415:  move.l LSP_DSP_PAULA_AUD2LEN,d0
0416:  bsr  print_nombre_hexa_8_chiffres
0417:  move.l #' ',d0
0418:  bsr  print_caractere
0419:  move.l LSP_DSP_PAULA_AUD2PER,d0
0420:  bsr  print_nombre_hexa_8_chiffres
0421:  move.l #' ',d0
0422:  bsr  print_caractere
0423:  move.l LSP_DSP_PAULA_AUD2VOL,d0
0424:  bsr  print_nombre_hexa_8_chiffres
0425:  ; ligne suivant
0426:  moveq #10,d0
0427:  bsr  print_caractere
0428: 
0429:  move.l LSP_DSP_PAULA_AUD3L,d0
0430:  .if  nb_bits_virgule_offset<9
0431:   lsr.l #nb_bits_virgule_offset,d0
0432:  .else
0433:   lsr.l #8,d0
0434:   lsr.l #nb_bits_virgule_offset-8,d0
0435:  .endif
0436:  bsr  print_nombre_hexa_8_chiffres
0437:  move.l #' ',d0
0438:  bsr  print_caractere
0439:  move.l LSP_DSP_PAULA_AUD3LEN,d0
0440:  .if  nb_bits_virgule_offset<9
0441:   lsr.l #nb_bits_virgule_offset,d0
0442:  .else
0443:   lsr.l #8,d0
0444:   lsr.l #nb_bits_virgule_offset-8,d0
0445:  .endif
0446:  bsr  print_nombre_hexa_8_chiffres
0447:  move.l #' ',d0
0448:  bsr  print_caractere
0449:  move.l LSP_DSP_PAULA_AUD3PER,d0
0450:  bsr  print_nombre_hexa_8_chiffres
0451:  move.l #' ',d0
0452:  bsr  print_caractere
0453:  move.l LSP_DSP_PAULA_AUD3VOL,d0
0454:  bsr  print_nombre_hexa_8_chiffres
0455:  ; ligne suivant
0456:  moveq #10,d0
0457:  bsr  print_caractere
0458:  ; ligne suivant
0459:  moveq #10,d0
0460:  bsr  print_caractere
0461: 
0462: 
0463:  move.l LSP_DSP_PAULA_AUD0DAT,d0
0464:  bsr  print_nombre_hexa_8_chiffres
0465:  move.l #' ',d0
0466:  bsr  print_caractere
0467:  move.l LSP_DSP_PAULA_AUD1DAT,d0
0468:  bsr  print_nombre_hexa_8_chiffres
0469:  move.l #' ',d0
0470:  bsr  print_caractere
0471:  move.l LSP_DSP_PAULA_AUD2DAT,d0
0472:  bsr  print_nombre_hexa_8_chiffres
0473:  move.l #' ',d0
0474:  bsr  print_caractere
0475:  move.l LSP_DSP_PAULA_AUD3DAT,d0
0476:  bsr  print_nombre_hexa_8_chiffres
0477:  move.l #' ',d0
0478:  bsr  print_caractere
0479: 
0480:  .rept 11
0481:  ; retour a la ligne  au dessus
0482:  moveq #8,d0
0483:  bsr  print_caractere
0484:  .endr
0485: 
0486: 
0487:  bra   toto
0488: 
0489:  stop  #$2700
0490: 
0491: 
0492: ;-----------------------------------------------------------------------------------
0493: ;--------------------------
0494: ; VBL
0495: 
0496: VBL:
0497:                 movem.l d0-d7/a0-a6,-(a7)
0498:    
0499:     .if  display_infos_debug=1
0500:     ;add.w  #1,BG     ; debug pour voir si vivant
0501:     .endif
0502: 
0503:                 jsr     copy_olist               ; use Blitter to update active list from shadow
0504: 
0505:                 addq.l #1,vbl_counter
0506: 
0507:                 move.w  #$101,INT1               ; Signal we're done
0508:     move.w  #$0,INT2
0509: .exit:
0510:                 movem.l (a7)+,d0-d7/a0-a6
0511:                 rte
0512: 
0513: ; ---------------------------------------
0514: ; imprime une chaine termin�e par un z�ro
0515: ; a0=pointeur sur chaine
0516: print_string:
0517:  movem.l d0-d7/a0-a6,-(a7)
0518: 
0519: print_string_boucle:
0520:  moveq #0,d0
0521:  move.b (a0)+,d0
0522:  cmp.w #0,d0
0523:  bne.s print_string_pas_fin_de_chaine
0524:  movem.l (a7)+,d0-d7/a0-a6
0525:  rts
0526: print_string_pas_fin_de_chaine:
0527:  bsr  print_caractere
0528:  bra.s print_string_boucle
0529: 
0530: ; ---------------------------------------
0531: ; imprime un nombre HEXA de 2 chiffres
0532: print_nombre_hexa_2_chiffres:
0533:  movem.l d0-d7/a0-a6,-(a7)
0534:  lea  convert_hexa,a0
0535:  move.l  d0,d1
0536:  divu  #16,d0
0537:  and.l  #$F,d0   ; limite a 0-15
0538:  move.l  d0,d2
0539:  mulu  #16,d2
0540:  sub.l  d2,d1
0541:  move.b  (a0,d0.w),d0
0542:  bsr   print_caractere
0543:  move.l  d1,d0
0544:  and.l  #$F,d0   ; limite a 0-15
0545:  move.b  (a0,d0.w),d0
0546:  bsr   print_caractere
0547:  movem.l (a7)+,d0-d7/a0-a6
0548:  rts
0549:  
0550: convert_hexa:
0551:  dc.b  48,49,50,51,52,53,54,55,56,57
0552:  dc.b  65,66,67,68,69,70
0553:  even
0554:  
0555: ; ---------------------------------------
0556: ; imprime un nombre de 2 chiffres
0557: print_nombre_2_chiffres:
0558:  movem.l d0-d7/a0-a6,-(a7)
0559:  move.l  d0,d1
0560:  divu  #10,d0
0561:  and.l  #$FF,d0
0562:  move.l  d0,d2
0563:  mulu  #10,d2
0564:  sub.l  d2,d1
0565:  cmp.l  #0,d0
0566:  beq.s  .zap
0567:  add.l  #48,d0
0568:  bsr   print_caractere
0569: .zap:
0570:  move.l  d1,d0
0571:  add.l  #48,d0
0572:  bsr   print_caractere
0573:  movem.l (a7)+,d0-d7/a0-a6
0574:  rts
0575: 
0576: ; ---------------------------------------
0577: ; imprime un nombre de 3 chiffres
0578: print_nombre_3_chiffres:
0579:  movem.l d0-d7/a0-a6,-(a7)
0580:  move.l  d0,d1
0581: 
0582:  divu  #100,d0
0583:  and.l  #$FF,d0
0584:  move.l  d0,d2
0585:  mulu  #100,d2
0586:  sub.l  d2,d1
0587:  cmp.l  #0,d0
0588:  beq.s  .zap
0589:  add.l  #48,d0
0590:  bsr   print_caractere
0591: .zap:
0592:  move.l  d1,d0
0593:  divu  #10,d0
0594:  and.l  #$FF,d0
0595:  move.l  d0,d2
0596:  mulu  #10,d2
0597:  sub.l  d2,d1
0598:  add.l  #48,d0
0599:  bsr   print_caractere
0600:  
0601:  move.l  d1,d0
0602:  add.l  #48,d0
0603:  bsr   print_caractere
0604:  movem.l (a7)+,d0-d7/a0-a6
0605:  rts
0606: 
0607: 
0608: ; ---------------------------------------
0609: ; imprime un nombre de 2 chiffres , 00
0610: print_nombre_2_chiffres_force:
0611:  movem.l d0-d7/a0-a6,-(a7)
0612:  move.l  d0,d1
0613:  divu  #10,d0
0614:  and.l  #$FF,d0
0615:  move.l  d0,d2
0616:  mulu  #10,d2
0617:  sub.l  d2,d1
0618:  add.l  #48,d0
0619:  bsr   print_caractere
0620:  move.l  d1,d0
0621:  add.l  #48,d0
0622:  bsr   print_caractere
0623:  movem.l (a7)+,d0-d7/a0-a6
0624:  rts
0625: 
0626: ; ---------------------------------------
0627: ; imprime un nombre de 4 chiffres HEXA
0628: print_nombre_hexa_4_chiffres:
0629:  movem.l d0-d7/a0-a6,-(a7)
0630:  move.l  d0,d1
0631:  lea  convert_hexa,a0
0632: 
0633:  divu  #4096,d0
0634:  and.l  #$FF,d0
0635:  move.l  d0,d2
0636:  mulu  #4096,d2
0637:  sub.l  d2,d1
0638:  move.b  (a0,d0.w),d0
0639:  bsr   print_caractere
0640: 
0641:  move.l  d1,d0
0642:  divu  #256,d0
0643:  and.l  #$FF,d0
0644:  move.l  d0,d2
0645:  mulu  #256,d2
0646:  sub.l  d2,d1
0647:  move.b  (a0,d0.w),d0
0648:  bsr   print_caractere
0649: 
0650: 
0651:  move.l  d1,d0
0652:  divu  #16,d0
0653:  and.l  #$FF,d0
0654:  move.l  d0,d2
0655:  mulu  #16,d2
0656:  sub.l  d2,d1
0657:  move.b  (a0,d0.w),d0
0658:  bsr   print_caractere
0659:  move.l  d1,d0
0660:  move.b  (a0,d0.w),d0
0661:  bsr   print_caractere
0662:  movem.l (a7)+,d0-d7/a0-a6
0663:  rts
0664: 
0665: ; ---------------------------------------
0666: ; imprime un nombre de 6 chiffres HEXA ( pour les adresses memoire)
0667: print_nombre_hexa_6_chiffres:
0668:  movem.l d0-d7/a0-a6,-(a7)
0669:  
0670:  move.l  d0,d1
0671:  lea  convert_hexa,a0
0672: 
0673:  move.l  d1,d0
0674:  swap  d0
0675:  and.l  #$F0,d0
0676:  divu  #16,d0
0677:  and.l  #$F,d0
0678:  move.b  (a0,d0.w),d0
0679:  and.l  #$FF,d0
0680:  bsr   print_caractere
0681: 
0682:  move.l  d1,d0
0683:  swap  d0
0684:  and.l  #$F,d0
0685:  move.b  (a0,d0.w),d0
0686:  and.l  #$FF,d0
0687:  bsr   print_caractere
0688: 
0689:  and.l  #$FFFF,d1
0690:  move.l  d1,d0
0691:  divu  #4096,d0
0692:  and.l  #$FF,d0
0693:  move.l  d0,d2
0694:  mulu  #4096,d2
0695:  sub.l  d2,d1
0696:  move.b  (a0,d0.w),d0
0697:  bsr   print_caractere
0698: 
0699:  move.l  d1,d0
0700:  divu  #256,d0
0701:  and.l  #$FF,d0
0702:  move.l  d0,d2
0703:  mulu  #256,d2
0704:  sub.l  d2,d1
0705:  move.b  (a0,d0.w),d0
0706:  bsr   print_caractere
0707: 
0708: 
0709:  move.l  d1,d0
0710:  divu  #16,d0
0711:  and.l  #$FF,d0
0712:  move.l  d0,d2
0713:  mulu  #16,d2
0714:  sub.l  d2,d1
0715:  move.b  (a0,d0.w),d0
0716:  bsr   print_caractere
0717:  move.l  d1,d0
0718:  move.b  (a0,d0.w),d0
0719:  bsr   print_caractere
0720:  movem.l (a7)+,d0-d7/a0-a6
0721:  rts
0722: 
0723: ; ---------------------------------------
0724: ; imprime un nombre de 8 chiffres HEXA ( pour les adresses memoire et les donn�es en 16:16)
0725: print_nombre_hexa_8_chiffres:
0726:  movem.l d0-d7/a0-a6,-(a7)
0727:  
0728:  move.l  d0,d1
0729:  lea  convert_hexa,a0
0730: 
0731:  move.l  d1,d0
0732:  swap  d0
0733:  and.l  #$F000,d0
0734:  divu  #4096,d0
0735:  and.l  #$F,d0
0736:  move.b  (a0,d0.w),d0
0737:  and.l  #$FF,d0
0738:  bsr   print_caractere
0739: 
0740: 
0741: 
0742:  move.l  d1,d0
0743:  swap  d0
0744:  and.l  #$F00,d0
0745:  divu  #256,d0
0746:  and.l  #$F,d0
0747:  move.b  (a0,d0.w),d0
0748:  and.l  #$FF,d0
0749:  bsr   print_caractere
0750: 
0751: 
0752:  move.l  d1,d0
0753:  swap  d0
0754:  and.l  #$F0,d0
0755:  divu  #16,d0
0756:  and.l  #$F,d0
0757:  move.b  (a0,d0.w),d0
0758:  and.l  #$FF,d0
0759:  bsr   print_caractere
0760: 
0761:  move.l  d1,d0
0762:  swap  d0
0763:  and.l  #$F,d0
0764:  move.b  (a0,d0.w),d0
0765:  and.l  #$FF,d0
0766:  bsr   print_caractere
0767: 
0768:  and.l  #$FFFF,d1
0769:  move.l  d1,d0
0770:  divu  #4096,d0
0771:  and.l  #$FF,d0
0772:  move.l  d0,d2
0773:  mulu  #4096,d2
0774:  sub.l  d2,d1
0775:  move.b  (a0,d0.w),d0
0776:  bsr   print_caractere
0777: 
0778:  move.l  d1,d0
0779:  divu  #256,d0
0780:  and.l  #$FF,d0
0781:  move.l  d0,d2
0782:  mulu  #256,d2
0783:  sub.l  d2,d1
0784:  move.b  (a0,d0.w),d0
0785:  bsr   print_caractere
0786: 
0787: 
0788:  move.l  d1,d0
0789:  divu  #16,d0
0790:  and.l  #$FF,d0
0791:  move.l  d0,d2
0792:  mulu  #16,d2
0793:  sub.l  d2,d1
0794:  move.b  (a0,d0.w),d0
0795:  bsr   print_caractere
0796:  move.l  d1,d0
0797:  move.b  (a0,d0.w),d0
0798:  bsr   print_caractere
0799:  movem.l (a7)+,d0-d7/a0-a6
0800:  rts
0801: 
0802: 
0803: ; ---------------------------------------
0804: ; imprime un nombre de 4 chiffres
0805: print_nombre_4_chiffres:
0806:  movem.l d0-d7/a0-a6,-(a7)
0807:  move.l  d0,d1
0808: 
0809:  divu  #1000,d0
0810:  and.l  #$FF,d0
0811:  move.l  d0,d2
0812:  mulu  #1000,d2
0813:  sub.l  d2,d1
0814:  add.l  #48,d0
0815:  bsr   print_caractere
0816: 
0817:  move.l  d1,d0
0818:  divu  #100,d0
0819:  and.l  #$FF,d0
0820:  move.l  d0,d2
0821:  mulu  #100,d2
0822:  sub.l  d2,d1
0823:  add.l  #48,d0
0824:  bsr   print_caractere
0825: 
0826: 
0827:  move.l  d1,d0
0828:  divu  #10,d0
0829:  and.l  #$FF,d0
0830:  move.l  d0,d2
0831:  mulu  #10,d2
0832:  sub.l  d2,d1
0833:  add.l  #48,d0
0834:  bsr   print_caractere
0835:  move.l  d1,d0
0836:  add.l  #48,d0
0837:  bsr   print_caractere
0838:  movem.l (a7)+,d0-d7/a0-a6
0839:  rts
0840: 
0841: ; ---------------------------------------
0842: ; imprime un nombre de 5 chiffres
0843: print_nombre_5_chiffres:
0844:  movem.l d0-d7/a0-a6,-(a7)
0845:  move.l  d0,d1
0846: 
0847:  divu  #10000,d0
0848:  and.l  #$FF,d0
0849:  move.l  d0,d2
0850:  mulu  #10000,d2
0851:  sub.l  d2,d1
0852:  add.l  #48,d0
0853:  bsr   print_caractere
0854: 
0855:  move.l  d1,d0
0856:  divu  #1000,d0
0857:  and.l  #$FF,d0
0858:  move.l  d0,d2
0859:  mulu  #1000,d2
0860:  sub.l  d2,d1
0861:  add.l  #48,d0
0862:  bsr   print_caractere
0863: 
0864:  move.l  d1,d0
0865:  divu  #100,d0
0866:  and.l  #$FF,d0
0867:  move.l  d0,d2
0868:  mulu  #100,d2
0869:  sub.l  d2,d1
0870:  add.l  #48,d0
0871:  bsr   print_caractere
0872: 
0873: 
0874:  move.l  d1,d0
0875:  divu  #10,d0
0876:  and.l  #$FF,d0
0877:  move.l  d0,d2
0878:  mulu  #10,d2
0879:  sub.l  d2,d1
0880:  add.l  #48,d0
0881:  bsr   print_caractere
0882:  move.l  d1,d0
0883:  add.l  #48,d0
0884:  bsr   print_caractere
0885:  movem.l (a7)+,d0-d7/a0-a6
0886:  rts
0887: 
0888: 
0889: ; -----------------------------
0890: ; copie un caractere a l ecran
0891: ; d0.w=caractere
0892: 
0893: print_caractere:
0894:  movem.l d0-d7/a0-a6,-(a7)
0895: 
0896: 
0897: 
0898:  cmp.b #00,d0
0899:  bne.s print_caractere_pas_CLS
0900:  move.l #ecran1,A1_BASE   ; = DEST
0901:  move.l #$0,A1_PIXEL
0902:  move.l #PIXEL16|XADDPHR|PITCH1,A1_FLAGS
0903:  move.l #ecran1+320*100,A2_BASE   ; = source
0904:  move.l #$0,A2_PIXEL
0905:  move.l #PIXEL16|XADDPHR|PITCH1,A2_FLAGS
0906:  
0907:  move.w #$00,B_PATD
0908:  
0909: 
0910:  moveq #0,d0
0911:  move.w #nb_octets_par_ligne,d0
0912:  lsr.w #1,d0
0913:  move.w #nb_lignes,d1
0914:  mulu d1,d0
0915:  swap d0
0916:  move.w #1,d0
0917:  swap d0
0918:  ;move.w #65535,d0
0919:  move.l d0,B_COUNT
0920:  move.l #LFU_REPLACE|SRCEN|PATDSEL,B_CMD
0921: 
0922: 
0923:  movem.l (a7)+,d0-d7/a0-a6
0924:  rts
0925:  
0926: print_caractere_pas_CLS:
0927: 
0928:  cmp.b #10,d0
0929:  bne.s print_caractere_pas_retourchariot
0930:  move.w #0,curseur_x
0931:  add.w #8,curseur_y
0932:  movem.l (a7)+,d0-d7/a0-a6
0933:  rts
0934: 
0935: print_caractere_pas_retourchariot:
0936:  cmp.b #09,d0
0937:  bne.s print_caractere_pas_retourdebutligne
0938:  move.w #0,curseur_x
0939:  movem.l (a7)+,d0-d7/a0-a6
0940:  rts
0941: 
0942: print_caractere_pas_retourdebutligne:
0943:  cmp.b #08,d0
0944:  bne.s print_caractere_pas_retourdebutligneaudessus
0945:  move.w #0,curseur_x
0946:  sub.w #8,curseur_y
0947:  movem.l (a7)+,d0-d7/a0-a6
0948:  rts
0949: 
0950: 
0951: print_caractere_pas_retourdebutligneaudessus:
0952: 
0953:  lea  ecran1,a1
0954:  moveq #0,d1
0955:  move.w curseur_x,d1
0956:  add.l d1,a1
0957:  moveq #0,d1
0958:  move.w curseur_y,d1
0959:  mulu #nb_octets_par_ligne,d1
0960:  add.l d1,a1
0961: 
0962:  lsl.l #3,d0  ; * 8
0963:  lea  fonte,a0
0964:  add.l d0,a0
0965:  
0966:  
0967: ; copie 1 lettre
0968:  move.l #8-1,d0
0969: copieC_ligne:
0970:  moveq #8-1,d1
0971:  move.b (a0)+,d2
0972: copieC_colonne:
0973:  moveq #0,d4
0974:  btst d1,d2
0975:  beq.s pixel_a_zero
0976:  moveq #0,d4
0977:  move.w couleur_char,d4
0978: pixel_a_zero:
0979:  move.b d4,(a1)+
0980:  dbf  d1,copieC_colonne
0981:  lea  nb_octets_par_ligne-8(a1),a1
0982:  dbf  d0,copieC_ligne
0983: 
0984:  move.w curseur_x,d0
0985:  add.w #8,d0
0986:  cmp.w #320,d0
0987:  blt  curseur_pas_fin_de_ligne
0988:  moveq #0,d0
0989:  add.w #8,curseur_y
0990: curseur_pas_fin_de_ligne:
0991:  move.w d0,curseur_x
0992: 
0993:  movem.l (a7)+,d0-d7/a0-a6
0994: 
0995:  rts
0996: 
0997: 
0998: ;----------------------------------
0999: ; recopie l'object list dans la courante
1000: 
1001: copy_olist:
1002:     move.l #ob_list_courante,A1_BASE   ; = DEST
1003:     move.l #$0,A1_PIXEL
1004:     move.l #PIXEL16|XADDPHR|PITCH1,A1_FLAGS
1005:     move.l #ob_liste_originale,A2_BASE   ; = source
1006:     move.l #$0,A2_PIXEL
1007:     move.l #PIXEL16|XADDPHR|PITCH1,A2_FLAGS
1008:     move.w #1,d0
1009:     swap d0
1010:     move.l #fin_ob_liste_originale-ob_liste_originale,d1
1011:     move.w d1,d0
1012:     move.l d0,B_COUNT
1013:     move.l #LFU_REPLACE|SRCEN,B_CMD
1014:     rts
1015: 
1016: 
1017:  .if   1=0
1018: ; ---------------------------------------
1019: ; allocation de m�moire
1020: ; malloc de d0, retour avec  un pointeur dans d0
1021: ; ---------------------------------------
1022: 
1023: YM_malloc:
1024: 
1025:  movem.l  d1-d3/a0,-(sp)
1026: 
1027:  move.l  debut_ram_libre,d1
1028:  move.l  d1,a0
1029:  move.l  d1,d3
1030: ; arrondit multiple de 2
1031:     btst  #0,d0
1032:  beq.s  YM_malloc_pas_d_arrondi
1033:  addq.l  #1,d0
1034: YM_malloc_pas_d_arrondi:
1035:  add.l  d0,d1
1036:  move.l  d1,debut_ram_libre
1037:  
1038:  move.l  d0,d2
1039:  subq.l  #1,d2
1040:  moveq.l  #0,d0
1041: 
1042: YM_malloc_boucle_clean_ram:
1043:  move.b  d0,(a0)+
1044:  dbf   d2,YM_malloc_boucle_clean_ram
1045:  
1046:  move.l  d3,d0
1047: 
1048:  movem.l  (sp)+,d1-d3/a0
1049:  rts
1050: 
1051: ; ---------------------------------------
1052: ; allocation de m�moire version RAM DSP
1053: ; malloc de d0, retour avec  un pointeur dans d0
1054: ; d0 => forc�ment un multiple de 4
1055: ; ---------------------------------------
1056: 
1057: YM_malloc_DSP:
1058: 
1059:  movem.l  d1-d3/a0,-(sp)
1060: 
1061:  move.l  debut_ram_libre_DSP,d1
1062:  move.l  d1,a0
1063:  move.l  d1,d3
1064:  add.l  d0,d1
1065:  move.l  d1,debut_ram_libre_DSP
1066:  
1067:  move.l  d0,d2
1068:  moveq.l  #0,d0
1069:  lsr.l  #2,d2  ; 4 octets par 4 octets
1070:  subq.l  #1,d2
1071: 
1072: YM_malloc_boucle_clean_ram_DSP:
1073:  move.l  d0,(a0)+
1074:  dbf   d2,YM_malloc_boucle_clean_ram_DSP
1075:  
1076:  move.l  d3,d0
1077: 
1078:  movem.l  (sp)+,d1-d3/a0
1079:  rts
1080: 
1081: 
1082:  .endif
1083: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1084: ;;
1085: ;; Procedure: InitVideo (same as in vidinit.s)
1086: ;;            Build values for hdb, hde, vdb, and vde and store them.
1087: ;;
1088: 
1089: InitVideo:
1090:                 movem.l d0-d6,-(sp)
1091: 
1092:    
1093:     move.w #-1,ntsc_flag
1094:     move.l #50,_50ou60hertz
1095:  
1096:     move.w  CONFIG,d0                ; Also is joystick register
1097:                 andi.w  #VIDTYPE,d0              ; 0 = PAL, 1 = NTSC
1098:                 beq     .palvals
1099:     move.w #1,ntsc_flag
1100:     move.l #60,_50ou60hertz
1101:  
1102: 
1103: .ntscvals:  move.w  #NTSC_HMID,d2
1104:                 move.w  #NTSC_WIDTH,d0
1105: 
1106:                 move.w  #NTSC_VMID,d6
1107:                 move.w  #NTSC_HEIGHT,d4
1108:    
1109:                 bra     calc_vals
1110: .palvals:
1111:     move.w #PAL_HMID,d2
1112:     move.w #PAL_WIDTH,d0
1113: 
1114:     move.w #PAL_VMID,d6    
1115:     move.w #PAL_HEIGHT,d4
1116: 
1117:    
1118: calc_vals:  
1119:                 move.w  d0,width
1120:                 move.w  d4,height
1121:                 move.w  d0,d1
1122:                 asr     #1,d1                   ; Width/2
1123:                 sub.w   d1,d2                   ; Mid - Width/2
1124:                 add.w   #4,d2                   ; (Mid - Width/2)+4
1125:                 sub.w   #1,d1                   ; Width/2 - 1
1126:                 ori.w   #$400,d1                ; (Width/2 - 1)|$400
1127:                 move.w  d1,a_hde
1128:                 move.w  d1,HDE
1129:                 move.w  d2,a_hdb
1130:                 move.w  d2,HDB1
1131:                 move.w  d2,HDB2
1132:                 move.w  d6,d5
1133:                 sub.w   d4,d5
1134:                 add.w   #16,d5
1135:                 move.w  d5,a_vdb
1136:                 add.w   d4,d6
1137:                 move.w  d6,a_vde
1138:    
1139:        move.w  a_vdb,VDB
1140:     move.w  a_vde,VDE    
1141:    
1142:    
1143:     move.l  #0,BORD1                ; Black border
1144:                 move.w  #0,BG                   ; Init line buffer to black
1145:                 movem.l (sp)+,d0-d6
1146:                 rts
1147: 
1148: ; ------------------------------------
1149: ;          LSP
1150: ; ------------------------------------
1151: 
1152: 
1153: ; ------------------------------------
1154: ; Init
1155: 
1156: LSP_PlayerInit:
1157: ; a0: music data (any mem)
1158: ; a1: sound bank data (chip mem)
1159: ; (a2: 16bit DMACON word address)
1160: 
1161: ;  Out:a0: music BPM pointer (16bits)
1162: ;   d0: music len in tick count
1163: 
1164: 
1165:    cmpi.l  #'LSP1',(a0)+
1166:    bne   .dataError
1167:    move.l  (a0)+,d0  ; unique id
1168:    cmp.l  (a1),d0   ; check that sample bank is this one
1169:    bne   .dataError
1170: 
1171:    lea   LSPVars,a3
1172:    cmpi.w  #$0105,(a0)+   ; minimal major & minor version of latest compatible LSPConvert.exe   = V 1.05
1173:    blt   .dataError
1174: 
1175:    moveq  #0,d6
1176:    move.w  (a0)+,d6
1177:    move.l  d6,m_currentBpm-LSPVars(a3)  ; default BPM
1178:    move.l  d6,LSP_BPM_frequence_replay
1179:    move.w  (a0)+,d6
1180:    move.l  d6,m_escCodeRewind-LSPVars(a3)  ; tout en .L
1181:    move.w  (a0)+,d6
1182:    move.l  d6,m_escCodeSetBpm-LSPVars(a3)
1183:    move.l  (a0)+,-(a7)
1184:    ;move.l a2,m_dmaconPatch(a3)
1185:    ;move.w #$8000,-1(a2)   ; Be sure DMACon word is $8000 (note: a2 should be ODD address)
1186:    moveq  #0,d0
1187:    move.w  (a0)+,d0    ; instrument count
1188:    lea   -12(a0),a2    ; LSP data has -12 offset on instrument tab ( to win 2 cycles in fast player :) )
1189:    move.l  a2,m_lspInstruments-LSPVars(a3) ; instrument tab addr ( minus 4 )
1190:    subq.w  #1,d0
1191:    move.l  a1,d1
1192: 
1193: .relocLoop:
1194:    ;bset.b  #0,3(a0)    ; bit0 is relocation done flag
1195:    ;bne.s  .relocated
1196:    
1197:    move.l  (a0),d6     ; pointeur sample
1198:    add.l  d1,d6     ; passage de relatif en absolu
1199:    ;lsl.l  #nb_bits_virgule_offset,d6
1200:    move.l  d6,(a0)     ; pointeur sample
1201: 
1202:    
1203:    moveq  #0,d6
1204:    move.w  4(a0),d6    ; taille en words
1205:    add.w  d6,d6
1206:    move.w  d6,4(a0)    ; taille en bytes
1207: 
1208:    move.l  (a0),a4    
1209:    bsr.s  LSP_unsigne_sample  ; A4=sample location / d6=length
1210: 
1211: 
1212:    move.l  6(a0),d6     ; pointeur sample repeat
1213:    add.l  d1,d6     ; passage de relatif en absolu
1214:    ;lsl.l  #nb_bits_virgule_offset,d6
1215:    move.l  d6,6(a0)     ; pointeur sample repeat
1216:    
1217:    moveq  #0,d6
1218:    move.w  10(a0),d6    ; taille repeat en words
1219:    add.w  d6,d6
1220:    move.w  d6,10(a0)    ; taille repeat en bytes
1221: 
1222: .relocated:
1223:    lea   12(a0),a0
1224:    dbf   d0,.relocLoop
1225:  
1226:    move.w  (a0)+,d0    ; codes count (+2)
1227:    move.l  a0,m_codeTableAddr-LSPVars(a3) ; code table
1228:    add.w  d0,d0
1229:    add.w  d0,a0
1230:    move.l  (a0)+,d0    ; word stream size
1231:    move.l  (a0)+,d1    ; byte stream loop point
1232:    move.l  (a0)+,d2    ; word stream loop point
1233: 
1234:    move.l  a0,m_wordStream-LSPVars(a3)
1235:    lea   0(a0,d0.l),a1   ; byte stream
1236:    move.l  a1,m_byteStream-LSPVars(a3)
1237:    add.l  d2,a0
1238:    add.l  d1,a1
1239:    move.l  a0,m_wordStreamLoop-LSPVars(a3)
1240:    move.l  a1,m_byteStreamLoop-LSPVars(a3)
1241:    ;bset.b  #1,$bfe001    ; disabling this fucking Low pass filter!!
1242:    lea   m_currentBpm-LSPVars(a3),a0
1243:    move.l  (a7)+,d0    ; music len in frame ticks
1244:    rts
1245: 
1246: .dataError: illegal
1247: 
1248: LSP_unsigne_sample:
1249: ; A4=sample location / d6=length
1250:  movem.l  d0/d6/a4,-(sp)
1251:  subq.l  #1,d6
1252:  cmp.l  #0,d6
1253:  blt.s  .quit
1254: .boucle:
1255:  move.b  (a4),d0    ; -128 to 127
1256:  sub.b  #$80,d0
1257:  move.b  d0,(a4)+
1258:  dbf   d6,.boucle
1259: 
1260: .quit:
1261:  movem.l  (sp)+,d0/d6/a4
1262:  rts
1263: 
1264:  
1265:  
1266:  .text
1267:  
1268: ;-------------------------------------
1269: ;
1270: ;     DSP
1271: ;
1272: ;-------------------------------------
1273: 
1274:  .phrase
1275: YM_DSP_debut:
1276: 
1277:  .dsp
1278:  .org D_RAM
1279: DSP_base_memoire:
1280: 
1281: ; CPU interrupt
1282:  .rept 8
1283:   nop
1284:  .endr
1285:                                          |-----------------------|-----------------------|--------------------------
1286:                                          | Cycle1 (read regs) | Cycle2 (compute) | Cycle3 (writeback)
1287:                                          |-----------------------|-----------------------|--------------------------
1288: ; I2S interrupt
1289:  movei #DSP_LSP_routine_interruption_I2S,r28      ; 6 octets                     | Rword1    | -     | -
1290:                                          | Rword2    | word1     | -
1291:  movei #D_FLAGS,r30           ; 6 octets                      | Rword1    |  -     | word2word1 > Wr28
1292:                                          | Rword2    | word1     | -
1293:  jump (r28)             ; 2 octets                      | Rr28     | -     | word2word1 > Wr30
1294:  load (r30),r29 ; read flags        ; 2 octets = 16 octets                   | Rr30     | r28 > WPC    | -
1295:                                          | -     | Read FLAGS   | -
1296:                                          |  (new instruction) | -     | Flags > Wr29
1297: ; Timer 1 interrupt
1298:  movei #DSP_LSP_routine_interruption_Timer1,r12      ; 6 octets                    | Rword1    | -     | -
1299:                                          | Rword2    | word1     | -
1300:  movei #D_FLAGS,r16           ; 6 octets                      | Rword1    |  -     | word2word1 > Wr12
1301:                                          | Rword2    | word1     | -
1302:  jump (r12)             ; 2 octets                      | Rr12     | -     | word2word1 > Wr16
1303:  load (r16),r13 ; read flags        ; 2 octets = 16 octets                   | Rr16     | r12 > WPC    | -
1304:                                          | -     | Read FLAGS   | -
1305:                                          |  (new instruction) | -     | Flags > Wr13
1306: ; Timer 2 interrupt
1307:  movei #DSP_LSP_routine_interruption_Timer2,r28      ; 6 octets                    | Rword1    | -     | -
1308:                                          | Rword2    | word1     | -
1309:  movei #D_FLAGS,r30           ; 6 octets                      | Rword1    |  -     | word2&word1 > Wr28
1310:                                          | Rword2    | word1     | -
1311:  jump (r28)             ; 2 octets                      | Rflags & Rr28  | -     | word2&word1 > Wr30
1312:  load (r30),r29 ; read flags        ; 2 octets = 16 octets                   | Rr30     | r28 > WPC    | -
1313:                                          | -     | Read FLAGS   | -
1314:                                          |  (new instruction) | -     | Flags > Wr29
1315: ; External 0 interrupt
1316:  .rept 8
1317:   nop
1318:  .endr
1319: ; External 1 interrupt
1320:  .rept 8
1321:   nop
1322:  .endr
1323: 
1324: 
1325: 
1326: 
1327: 
1328: 
1329: 
1330: 
1331: 
1332: 
1333: 
1334: 
1335: 
1336: ; -------------------------------
1337: ; DSP : routines en interruption
1338: ; -------------------------------
1339: ; utilis�s :  R29/R30/R31
1340: ;     R18/R19/R20/R21 /R22/R23/R24/R25/R26/R27/R28
1341: 
1342: 
1343: ; I2S : replay sample
1344: ; - version simple, lit un octet � chaque fois
1345: ; - puis version plus compleque : lit 1 long, et utilise ses octets
1346: DSP_LSP_routine_interruption_I2S:
1347: 
1348:  .if  DSP_DEBUG
1349: ; change la couleur du fond
1350:  movei #$777,R26                                    | Rword1    | -     | -
1351:                                          | Rword2    | word1    | -
1352:  movei #BG,r27                                     | Rword1    | -     | word2word1 > Wr26
1353:                                          | Rword2    | word1    | -
1354:  storew r26,(r27)                                    | Rr26 & Rr27   | -     | word2word1 > Wr27
1355:  .endif
1356: 
1357: 
1358: ; version complexe avec stockage de 4 octets
1359: ; channel 3
1360:   movei  #LSP_DSP_PAULA_internal_location3,R28      ; adresse sample actuelle, a virgule            | Rword1    | -     | -
1361:                                          | Rword2    | word1    | -
1362:   movei  #LSP_DSP_PAULA_internal_increment3,R27                           | Rword1    | -     | word2word1 > Wr28
1363:                                          | Rword2    | word1    | -
1364:   load  (R28),R26          ; R26=current pointeur sample 16:16                | Rr28     | -     | word2word1 > Wr27
1365:   load  (R27),R27          ; R27=increment 16:16                   | Rr27     | Mr28    | -
1366:                                          | -      | Mr27    | Wr26
1367:   move  R26,R17           ; R17 = pointeur sample a virgule avant increment            | Rr26     | -     | Wr27
1368:   movei  #LSP_DSP_PAULA_internal_length3,R25    ; =FIN                       | Rword1    | -     | Wr17
1369:                                          | Rword2    | word1    | -
1370:                                          | -      | -     | word2word1 > Wr25
1371:   add   R27,R26           ; R26=adresse+increment , a virgule                | Rr27 & Rr26   | -     | -
1372:   load  (R25),R23                                  | Rr25     | Cr26    | -
1373:   movei  #$FFFFFFFC,R22                                 | Rword1    | Mr25    | Wr26
1374:                                          | Rword2    | word1    | Wr23
1375:                                          | -      | -     | word2word1 > Wr22
1376:   cmp   R23,R26                                   | Rr23 & Rr26   | -     | -
1377:                                          | -      | Cflags    | -
1378:   jr   mi,DSP_LSP_routine_interruption_I2S_pas_fin_de_sample_channel3                     | Rflags    | -     | Wflags
1379:   nop                                       | -      | ? > WPC    | -
1380: ; fin de sample => on recharge les infos des registres externes
1381:   shlq  #32-nb_bits_virgule_offset,R26                             | Rr26     | -     | -
1382:   movei  #LSP_DSP_PAULA_AUD3LEN,R27   ; fin, a virgule                       | Rword1    | Cr26    | -
1383:                                          | Rword2    | word1    | Wr26
1384:   shrq  #32-nb_bits_virgule_offset,R26  ; on ne garde que la virgule                    | Rr26     | -     | word2word1 > Wr27
1385:   movei  #LSP_DSP_PAULA_AUD3L,R24   ; sample location a virgule                     | Rword1    | Cr26    | -
1386:                                          | Rword2    | word1    | Wr26
1387:   load  (R27),R27                                  | Rr27     | -     | word2word1 > Wr24
1388:   load  (R24),R23                                  | Rr24     | Mr27    | -
1389:   store  R27,(R25)       ; update internal sample end, a virgule                  | Rr27 & Rr25   | Mr24    | Wr27
1390:   or   R23,R26        ; on garde la virgule en cours                    | Rr23 & Rr26   | Mr25    | Wr23
1391:                                          | -      | Cr26    | MWrite
1392: DSP_LSP_routine_interruption_I2S_pas_fin_de_sample_channel3:
1393:   store  R26,(R28)       ; stocke internal sample pointeur, a virgule                | Rr26 & Rr28   | -     | Wr26
1394:   shrq  #nb_bits_virgule_offset,R26        ; nouveau pointeur adresse sample partie entiere          | Rr26     | Mr28    | -
1395:   shrq  #nb_bits_virgule_offset,R17        ; ancien pointeur adresse sample partie entiere           | Rr17     | Cr26    | MWrite
1396:                                          | -      | Cr17    | Wr26
1397:   move  R26,R25        ; R25 = nouveau pointeur sample                    | Rr26     | -     | Wr17
1398:                                          | -      | -     | Wr25
1399:   and   R22,R17        ; ancien pointeur sample modulo 4                   | Rr22 & Rr17   | -     | -
1400:   and   R22,R26        ; nouveau pointeur sample modulo 4                   | Rr22 & Rr26   | Cr17    | -
1401:   movei  #LSP_DSP_PAULA_AUD3DAT,R28   ; 4 octets actuels                       | Rword1    | Cr26    | Wr17
1402:                                          | Rword2    | word1    | Wr26
1403:   not   R22         ; => %11                         | Rr22     | -     | word2word1 > Wr28
1404:   load  (R28),R21       ; R21 = octets actuels en stock                    | Rr28     | Cr22    | -
1405:   and   R22,R25        ; R25 = position octet � lire                    | Rr22     | Mr28    | Wr22
1406:                                          | -      | Cr25    | Wr21
1407:                                          | -      | -     | Wr25
1408:   cmp   R17,R26                                   | Rr17 & Rr26   | -     | -
1409:                                          | -      | Cflags    | -
1410:   jr   eq,DSP_LSP_routine_interruption_I2S_pas_nouveau_long_word3                      | Rflags    | -     | Wflags
1411:   nop                                       | -      | ? > WPC    | -
1412: ; il faut rafraichir R21
1413:   load  (R26),R21       ; lit 4 nouveaux octets de sample                   | Rr26     | -     | -
1414:                                          | -      | Mr26    | -
1415:   store  R21,(R28)       ; rafraichit le stockage des 4 octets                  | Rr21 & Rr28   | -     | Wr21
1416: 
1417: DSP_LSP_routine_interruption_I2S_pas_nouveau_long_word3:
1418:   shlq  #3,R25     ; numero d'octet � lire * 8                        | Rr25     | Mr28    | -
1419:   movei  #LSP_DSP_PAULA_AUD3VOL,R23                              | Rword1    | Cr25    | Mwrite
1420:                                          | Rword2    | word1    | Wr25
1421:   neg   R25         ; -0 -8 -16 -24                        | Rr25     | -     | word2word1 > Wr23
1422:                                          | -      | Cr25    | -
1423: ; R25=numero d'octet � lire
1424:   sh   R25,R21        ; shift les 4 octets en stock vers la gauche, pour positionner l'octet � lire en haut      | Rr25 & Rr21   | -     | Wr25
1425:   load  (R23),R23       ; R23 = volume : 6 bits                      | Rr23     | Cr21    | -
1426:   shrq  #24,R21        ; descends l'octet � lire                     | Rr21     | Mr23    | Wr21
1427:                                          | -      | Cr21    | Wr23
1428:   mult  R23,R21        ; unsigned multiplication : unsigned sample * volume => 8bits + 6 bits = 14 bits       | Rr23 & Rr21   | -     | Wr21
1429: 
1430: ; R21=sample channel 3 on 14 bits
1431: 
1432: ; channel 2
1433:   movei  #LSP_DSP_PAULA_internal_location2,R28      ; adresse sample actuelle, a virgule            | Rword1    | Cr21    | -
1434:                                          | Rword2    | word1    | Wr21
1435:   movei  #LSP_DSP_PAULA_internal_increment2,R27                           | Rword1    | -     | word2word1 > Wr28
1436:                                          | Rword2    | word1    | -
1437:   load  (R28),R26          ; R26=current pointeur sample 16:16                | Rr28     | -     | word2word1 > Wr27
1438:   load  (R27),R27          ; R27=increment 16:16                   | Rr27     | Mr28    | -
1439:                                          | -      | Mr27    | Wr26
1440:   move  R26,R17           ; R17 = pointeur sample a virgule avant increment            | Rr26     | -     | Wr27
1441:   movei  #LSP_DSP_PAULA_internal_length2,R25    ; =FIN                       | Rword1    | -     | Wr17
1442:                                          | Rword2    | word1    | -
1443:                                          | -      | -     | word2word1 > Wr25
1444:   add   R27,R26           ; R26=adresse+increment , a virgule                | Rr27 & Rr26   | -     | -
1445:   load  (R25),R23                                  | Rr25     | Cr26    | -
1446:   movei  #$FFFFFFFC,R22                                 | Rword1    | Mr25    | Wr26
1447:                                          | Rword2    | word1    | Wr23
1448:                                          | -      | -     | word2word1 > Wr22
1449:   cmp   R23,R26                                   | Rr23 & Rr26   | -     | -
1450:                                          | -      | Cflags    | -
1451:   jr   mi,DSP_LSP_routine_interruption_I2S_pas_fin_de_sample_channel2                     | Rflags    | -     | Wflags
1452:   nop                                       | -      | ? > WPC    | -
1453: ; fin de sample => on recharge les infos des registres externes
1454:   shlq  #32-nb_bits_virgule_offset,R26                             | Rr26     | -     | -
1455:   movei  #LSP_DSP_PAULA_AUD2LEN,R27   ; fin, a virgule                       | Rword1    | Cr26    | -
1456:                                          | Rword2    | word1    | Wr26
1457:   shrq  #32-nb_bits_virgule_offset,R26  ; on ne garde que la virgule                    | Rr26     | -     | word2word1 > Wr27
1458:   movei  #LSP_DSP_PAULA_AUD2L,R24   ; sample location a virgule                     | Rword1    | Cr26    | -
1459:                                          | Rword2    | word1    | Wr26
1460:   load  (R27),R27                                  | Rr27     | -     | word2word1 > Wr24
1461:   load  (R24),R23                                  | Rr24     | Mr27    | -
1462:   store  R27,(R25)       ; update internal sample end, a virgule                  | Rr27     | Mr24    | Wr27
1463:   or   R23,R26        ; on garde la virgule en cours                    | Rr23 & Rr26   | Mr25    | Wr23
1464:                                          | -      | Cr26    | MWrite
1465: DSP_LSP_routine_interruption_I2S_pas_fin_de_sample_channel2:
1466:   store  R26,(R28)       ; stocke internal sample pointeur, a virgule                | Rr26 & Rr28   | -     | Wr26
1467:   shrq  #nb_bits_virgule_offset,R26        ; nouveau pointeur adresse sample partie entiere          | Rr26     | Mr28    | -
1468:   shrq  #nb_bits_virgule_offset,R17        ; ancien pointeur adresse sample partie entiere           | Rr17     | Cr26    | MWrite
1469:                                          | -      | Cr17    | Wr26
1470:   move  R26,R25        ; R25 = nouveau pointeur sample                    | Rr26     | -     | Wr17
1471:                                          | -      | -     | Wr25
1472:   and   R22,R17        ; ancien pointeur sample modulo 4                   | Rr22 & Rr17   | -     | -
1473:   and   R22,R26        ; nouveau pointeur sample modulo 4                   | Rr22 & Rr26   | Cr17    | -
1474:   movei  #LSP_DSP_PAULA_AUD2DAT,R28   ; 4 octets actuels                       | Rword1    | Cr26    | Wr17
1475:                                          | Rword2    | word1    | Wr26
1476:   not   R22         ; => %11                         | Rr22     | -     | word2word1 > Wr28
1477:   load  (R28),R20       ; R20 = octets actuels en stock                    | Rr28     | Cr22    | -
1478:   and   R22,R25        ; R25 = position octet � lire                    | Rr22 & Rr25   | Mr28    | Wr22
1479:                                          | -      | Cr25    | Wr20
1480:                                          | -      | -     | Wr25
1481:   cmp   R17,R26                                   | Rr17 & Rr26   | -     | -
1482:                                          | -      | Cflags    | -
1483:   jr   eq,DSP_LSP_routine_interruption_I2S_pas_nouveau_long_word2                      | Rflags    | -     | Wflags
1484:   nop                                       | -      | ? > WPC    | -
1485: ; il faut rafraichir R20
1486:   load  (R26),R20       ; lit 4 nouveaux octets de sample                   | Rr26     | -     | -
1487:                                          | -      | Mr26    | -
1488:   store  R20,(R28)       ; rafraichit le stockage des 4 octets                  | Rr20 & Rr28   | -     | Wr20
1489: 
1490: DSP_LSP_routine_interruption_I2S_pas_nouveau_long_word2:
1491:   shlq  #3,R25     ; numero d'octet � lire * 8                        | Rr25     | Mr28    | -
1492:   movei  #LSP_DSP_PAULA_AUD2VOL,R23                              | Rword1    | Cr25    | MWrite
1493:                                          | Rword2    | word1    | Wr25
1494:   neg   R25         ; -0 -8 -16 -24                        | Rr25     | -     | word2word1 > Wr23
1495:                                          | -      | Cr25    | -
1496: ; R25=numero d'octet � lire
1497:   sh   R25,R20        ; shift les 4 octets en stock vers la gauche, pour positionner l'octet � lire en haut      | Rr25 & Rr20   | -     | Wr25
1498:   load  (R23),R23       ; R23 = volume : 6 bits                      | Rr23     | Cr20    | -
1499:   shrq  #24,R20        ; descends l'octet � lire                     | Rr20     | Mr23    | Wr20
1500:                                          | -      | Cr20    | Wr23
1501:   mult  R23,R20        ; unsigned multiplication : unsigned sample * volume => 8bits + 6 bits = 14 bits       | Rr23 & Rr20   | -     | Wr20
1502: 
1503: ; R20=sample channel 2 on 14 bits
1504: 
1505: ; channel 1
1506:   movei  #LSP_DSP_PAULA_internal_location1,R28      ; adresse sample actuelle, a virgule            | Rword1    | Cr20    | -
1507:                                          | Rword2    | word1    | Wr20
1508:   movei  #LSP_DSP_PAULA_internal_increment1,R27                           | Rword1    | -     | word2word1 > Wr28
1509:                                          | Rword2    | word1    | -
1510:   load  (R28),R26          ; R26=current pointeur sample 16:16                | Rr28     | -     | word2word1 > Wr27
1511:   load  (R27),R27          ; R27=increment 16:16                   | Rr27     | Mr28    | -
1512:                                          | -      | Mr27    | Wr26
1513:   move  R26,R17           ; R17 = pointeur sample a virgule avant increment            | Rr26     | -     | Wr27
1514:   movei  #LSP_DSP_PAULA_internal_length1,R25    ; =FIN                       | Rword1    | -     | Wr17
1515:                                          | Rword2    | word1    | -
1516:                                          | -      | -     | word2word1 > Wr25
1517:   add   R27,R26           ; R26=adresse+increment , a virgule                | Rr27 & Rr26   | -     | -
1518:   load  (R25),R23                                  | Rr25     | Cr26    | -
1519:   movei  #$FFFFFFFC,R22                                 | Rword1    | Mr25    | Wr26
1520:                                          | Rword2    | word1    | Wr23
1521:                                          | -      | -     | word2word1 > Wr22
1522:   cmp   R23,R26                                   | Rr23 & Rr26   | -     | -
1523:                                          | -      | Cflags    | -
1524:   jr   mi,DSP_LSP_routine_interruption_I2S_pas_fin_de_sample_channel1                     | Rflags    | -     | Wflags
1525:   nop                                       | -      | ? > WPC    | -
1526: ; fin de sample => on recharge les infos des registres externes
1527:   shlq  #32-nb_bits_virgule_offset,R26                             | Rr26     | -     | -
1528:   movei  #LSP_DSP_PAULA_AUD1LEN,R27   ; fin, a virgule                       | Rword1    | Cr26    | -
1529:                                          | Rword2    | word1    | Wr26
1530:   shrq  #32-nb_bits_virgule_offset,R26  ; on ne garde que la virgule                    | Rr26     | -     | word2word1 > Wr27
1531:   movei  #LSP_DSP_PAULA_AUD1L,R24   ; sample location a virgule                     | Rword1    | Cr26    | -
1532:                                          | Rword2    | word1    | Wr26
1533:   load  (R27),R27                                  | Rr27     | -     | word2word1 > Wr24
1534:   load  (R24),R23                                  | Rr24     | Mr27    | -
1535:   store  R27,(R25)       ; update internal sample end, a virgule                  | Rr27 & Rr25   | Mr23    | Wr27
1536:   or   R23,R26        ; on garde la virgule en cours                    | Rr22 & Rr26   | Mr25    | Wr23
1537:                                          | -      | Cr26    | MWrite
1538:  
1539: DSP_LSP_routine_interruption_I2S_pas_fin_de_sample_channel1:
1540:   store  R26,(R28)       ; stocke internal sample pointeur, a virgule                | Rr26 & Rr28   | -     | Wr26
1541:   shrq  #nb_bits_virgule_offset,R26        ; nouveau pointeur adresse sample partie entiere          | Rr26     | Mr28    | -
1542:   shrq  #nb_bits_virgule_offset,R17        ; ancien pointeur adresse sample partie entiere           | Rr17     | Cr26    | MWrite
1543:                                          | -      | Cr17    | Wr26
1544:   move  R26,R25        ; R25 = nouveau pointeur sample                    | Rr26     | -     | Wr17
1545:                                          | -      | -     | Wr25
1546:   and   R22,R17        ; ancien pointeur sample modulo 4                   | Rr22 & Rr17   | -     | -
1547:   and   R22,R26        ; nouveau pointeur sample modulo 4                   | Rr22 & Rr26   | Cr17    | -
1548:   movei  #LSP_DSP_PAULA_AUD1DAT,R28   ; 4 octets actuels                       | Rword1    | Cr26    | Wr17
1549:                                          | Rword2    | word1    | Wr26
1550:   not   R22         ; => %11                         | Rr22     | -     | word2word1 > Wr28
1551:   load  (R28),R19       ; R19 = octets actuels en stock                    | Rr28     | Cr22    | -
1552:   and   R22,R25        ; R25 = position octet � lire                    | Rr22 & Rr25   | Mr28    | Wr22
1553:                                          | -      | Cr25    | Wr19
1554:                                          | -      | -     | Wr25
1555:   cmp   R17,R26                                   | Rr17 & Rr26   | -     | -
1556:                                          | -      | Cflags    | -
1557:   jr   eq,DSP_LSP_routine_interruption_I2S_pas_nouveau_long_word1                      | Rflags    | -     | Wflags
1558:   nop                                       | -      | ? > WPC    | -
1559: ; il faut rafraichir R19
1560:   load  (R26),R19       ; lit 4 nouveaux octets de sample                   | Rr26     | -     | -
1561:                                          | -      | Mr26    | -
1562:   store  R19,(R28)       ; rafraichit le stockage des 4 octets                  | Rr19 & Rr28   | -     | Wr19
1563: 
1564: DSP_LSP_routine_interruption_I2S_pas_nouveau_long_word1:
1565:   shlq  #3,R25     ; numero d'octet � lire * 8                        | Rr25     | Mr28    | -
1566:   movei  #LSP_DSP_PAULA_AUD1VOL,R23                              | Rword1    | Cr25    | Mwrite
1567:                                          | Rword2    | word1    | Wr25
1568:   neg   R25         ; -0 -8 -16 -24                        | Rr25     | -     | word2word1 > Wr23
1569:                                          | -      | Cr25    | -
1570: ; R25=numero d'octet � lire
1571:   sh   R25,R19        ; shift les 4 octets en stock vers la gauche, pour positionner l'octet � lire en haut      | Rr25 & Rr19   | -     | Wr25
1572:   load  (R23),R23       ; R23 = volume : 6 bits                      | Rr23     | Cr19    | -
1573:   shrq  #24,R19        ; descends l'octet � lire                     | Rr19     | Mr23    | Wr19
1574:                                          | -      | Cr19    | Wr23
1575:   mult  R23,R19        ; unsigned multiplication : unsigned sample * volume => 8bits + 6 bits = 14 bits       | Rr23 & Rr19   | -     | Wr19
1576:  
1577: ; R19=sample channel 1 on 14 bits
1578: 
1579: ; channel 0
1580:   movei  #LSP_DSP_PAULA_internal_location0,R28      ; adresse sample actuelle, a virgule            | Rword1    | Cr19    | -
1581:                                          | Rword2    | word1    | Wr19
1582:   movei  #LSP_DSP_PAULA_internal_increment0,R27                           | Rword1    | -     | word2word1 > Wr28
1583:                                          | Rword2    | word1    | -
1584:   load  (R28),R26          ; R26=current pointeur sample 16:16                | Rr28     | -     | word2word1 > Wr27
1585:   load  (R27),R27          ; R27=increment 16:16                   | Rr27     | Mr28    | -
1586:                                          | -      | Mr27    | Wr26
1587:   move  R26,R17           ; R17 = pointeur sample a virgule avant increment            | Rr26     | -     | Wr27
1588:   movei  #LSP_DSP_PAULA_internal_length0,R25    ; =FIN                       | Rword1    | -     | Wr17
1589:                                          | Rword2    | word1    | -
1590:                                          | -      | -     | word2word1 > Wr25
1591:   add   R27,R26           ; R26=adresse+increment , a virgule                | Rr27 & Rr26   | -     | -
1592:   load  (R25),R23                                  | Rr25     | Cr26    | -
1593:   movei  #$FFFFFFFC,R22                                 | Rword1    | Mr25    | Wr26
1594:                                          | Rword2    | word1    | Wr23
1595:                                          | -      | -     | word2word1 > Wr22
1596:   cmp   R23,R26                                   | Rr23 & Rr26   | -     | -
1597:                                          | -      | Cflags    | -
1598:   jr   mi,DSP_LSP_routine_interruption_I2S_pas_fin_de_sample_channel0                     | Rflags    | -     | Wflags
1599:   nop                                       | -      | ? > WPC    | -
1600: ; fin de sample => on recharge les infos des registres externes
1601:   shlq  #32-nb_bits_virgule_offset,R26                             | Rr26     | -     | -
1602:   movei  #LSP_DSP_PAULA_AUD0LEN,R27   ; fin, a virgule                       | Rword1    | Cr26    | -
1603:                                          | Rword2    | word1    | Wr26
1604:   shrq  #32-nb_bits_virgule_offset,R26  ; on ne garde que la virgule                    | Rr26     | -     | word2word1 > Wr27
1605:   movei  #LSP_DSP_PAULA_AUD0L,R24   ; sample location a virgule                     | Rword1    | Cr26    | -
1606:                                          | Rword2    | word1    | Wr26
1607:   load  (R27),R27                                  | Rr27     | -     | word2word1 > Wr24
1608:   load  (R24),R23                                  | Rr24     | Mr27    | -
1609:   store  R27,(R25)       ; update internal sample end, a virgule                  | Rr27 & Rr25   | Mr24    | Wr27
1610:   or   R23,R26        ; on garde la virgule en cours                    | Rr23 & Rr26   | Mr25    | Wr23
1611:                                          | -      | Cr26    | Mwrite
1612: DSP_LSP_routine_interruption_I2S_pas_fin_de_sample_channel0:
1613:   store  R26,(R28)       ; stocke internal sample pointeur, a virgule                | Rr26 & Rr28   | -     | Wr26
1614:   shrq  #nb_bits_virgule_offset,R26        ; nouveau pointeur adresse sample partie entiere          | Rr26     | Mr28    | -
1615:   shrq  #nb_bits_virgule_offset,R17        ; ancien pointeur adresse sample partie entiere           | Rr17     | Cr26    | -
1616:                                          | -      | Cr17    | Wr26
1617:   move  R26,R25        ; R25 = nouveau pointeur sample                    | Rr26     | -     | Wr17
1618:                                          | -      | -     | Wr25
1619:   and   R22,R17        ; ancien pointeur sample modulo 4                   | Rr22 & Rr17   | -     | -
1620:   and   R22,R26        ; nouveau pointeur sample modulo 4                   | Rr22 & Rr26   | Cr17    | -
1621:   movei  #LSP_DSP_PAULA_AUD0DAT,R28   ; 4 octets actuels                       | Rword1    | Cr26    | Wr17
1622:                                          | Rword2    | word1    | Wr26
1623:   not   R22         ; => %11                         | Rr22     | -     | word2word1 > Wr28
1624:   load  (R28),R18       ; R18 = octets actuels en stock channel 0                 | Rr28     | Cr22    | -
1625:   and   R22,R25        ; R25 = position octet � lire                    | Rr22 & Rr25   | Mr28    | Wr22
1626:                                          | -      | Cr25    | Wr18
1627:                                          | -      | -     | Wr25
1628:   cmp   R17,R26                                   | Rr17 & Rr26   | -     | -
1629:                                          | -      | Cflags    | -
1630:   jr   eq,DSP_LSP_routine_interruption_I2S_pas_nouveau_long_word0                      | Rflags    | -     | Wflags
1631:   nop                                       | -      | ? > WPC    | -
1632: ; il faut rafraichir R18
1633:   load  (R26),R18       ; lit 4 nouveaux octets de sample                   | Rr26     | -     | -
1634:                                          | -      | Mr26    | -
1635:   store  R18,(R28)       ; rafraichit le stockage des 4 octets                  | Rr18 & Rr28   | -     | Wr18
1636: 
1637: DSP_LSP_routine_interruption_I2S_pas_nouveau_long_word0:
1638:   shlq  #3,R25     ; numero d'octet � lire * 8                        | Rr25     | Mr28    | -
1639:   movei  #LSP_DSP_PAULA_AUD0VOL,R23                              | Rword1    | Cr25    | MWrite
1640:                                          | Rword2    | word1    | Wr25
1641:   neg   R25         ; -0 -8 -16 -24                        | Rr25     | -     | word2word1 > Wr23
1642:                                          | -      | Cr25    | -
1643: ; R25=numero d'octet � lire
1644:   sh   R25,R18        ; shift les 4 octets en stock vers la gauche, pour positionner l'octet � lire en haut      | Rr25 & Rr18   | -     | Wr25
1645:   load  (R23),R23       ; R23 = volume : 6 bits                      | Rr23     | Cr18    | -
1646:   shrq  #24,R18        ; descends l'octet � lire                     | Rr18     | Mr23    | Wr18
1647:                                          | -      | Cr18    | Wr23
1648:   mult  R23,R18        ; unsigned multiplication : unsigned sample * volume => 8bits + 6 bits = 14 bits       | Rr23 & Rr18   | -     | Wr18
1649:  
1650: ; R18=sample channel 0 on 14 bits
1651: 
1652: 
1653: 
1654: ; St�reo Amiga:
1655: ; les canaux 0 et 3 formant la voie st�r�o gauche et 1 et 2 la voie st�r�o droite
1656: ; R18=channel 0
1657: ; R19=channel 1
1658: ; R20=channel 2
1659: ; R21=channel 3
1660:   .if   channel_1=0
1661:    moveq #0,R18
1662:   .endif
1663:   .if   channel_2=0
1664:    moveq #0,R19
1665:   .endif
1666:   .if   channel_3=0
1667:    moveq #0,R20
1668:   .endif
1669:   .if   channel_4=0
1670:    moveq #0,R21
1671:   .endif
1672: 
1673:   movei  #$8000,R26                                  | Rword1    | Cr18    | -
1674:                                          | Rword2    | word1    | Wr18
1675:                                          | -      | -     | word2word1 > Wr26
1676:   add   R21,R18    ; R18 = left 15 bits unsigned                        | Rr21 & Rr18   | -     | -
1677:   movei  #L_I2S,R27                                  | Rword1    | Cr18    | -
1678:                                          | Rword2    | word1    | Wr18
1679:                                          | -      | -     | word2word1 > Wr27
1680:   add   R20,R19    ; R19 = right 15 bits unsigned                        | Rr20 & Rr19   | -     | -
1681:   shlq  #1,R18    ; 16 bits unsigned                           | Rr18     | Cr19    | -
1682:   shlq  #1,R19                                   | Rr19     | Cr18    | Wr19
1683:   sub   R26,R18    ; 16 bits signed                           | Rr26 & Rr18   | Cr19    | Wr18
1684:   movei  #L_I2S+4,R25                                 | Rword1    | Cr18    | Wr19
1685:                                          | Rword2    | word1    | Wr18
1686:                                          | -      | -     | word2word1 > Wr25
1687:   sub   R26,R19                                   | Rr26 & Rr19   | -     | -
1688:                                          | -      | Cr19    | -
1689:   store  R19,(R27)   ; write right channel                          | Rr19 & Rr27   | -     | Wr19
1690:   store  R18,(R25)   ; write left channel                          | Rr18 & Rr25   | Mr27    | -
1691: 
1692:  
1693: 
1694:  .if  DSP_DEBUG
1695: ; change la couleur du fond
1696:  movei #$000,R26
1697:  movei #BG,r27
1698:  storew r26,(r27)
1699:  .endif
1700: 
1701: 
1702: ;------------------------------------
1703: ; return from interrupt I2S
1704:  load (r31),r28 ; return address                               | Rr31     | Mr25    | MWrite
1705:  bset #10,r29  ; clear latch 1 = I2S                              | Rr29     | Mr31    | MWrite
1706:                                          | -      | Cr29    | Wr28
1707:  ;bset #11,r29  ; clear latch 1 = timer 1
1708:  ;bset #12,r29  ; clear latch 1 = timer 2
1709:  bclr #3,r29  ; clear IMASK                                | Rr29     | -     | Wr29
1710:  addq #4,r31  ; pop from stack                               | Rr31     | Cr29    | -
1711:  addqt #2,r28  ; next instruction                               | Rr28     | Cr31    | Wr29
1712:                                          | -      | Cr28    | Wr31
1713:  jump t,(r28)  ; return                                 | Rr28     | -     | Wr28
1714:  store r29,(r30) ; restore flags                                | Rr29  & Rr30  | ? > WPC    | -
1715: 
1716: 
1717: ;--------------------------------------------
1718: ; ---------------- Timer 1 ------------------
1719: ;--------------------------------------------
1720: ; autorise interruptions, pour timer I2S
1721: ;
1722: ; registres utilis�s :
1723: ;  R13/R16   /R31
1724: ;  R0/R1/R2/R3/R4/R5/R6/R7/R8/R9  R12/R14
1725: 
1726: 
1727: DSP_LSP_routine_interruption_Timer1:
1728:  .if  I2S_during_Timer1=1
1729:  bclr #3,r13  ; clear IMASK
1730:  store r13,(r16) ; restore flags
1731:  .endif
1732: 
1733: ; gestion replay LSP
1734: 
1735:  movei  #LSPVars,R14                                  | Rword1    | -     | -
1736:                                          | Rword2    | word1    | -
1737:  load  (R14),R0     ; R0 = byte stream                          | Rr14     | -     | word2word1 > Wr14
1738:                                          | -      | Mr14    | -
1739: DSP_LSP_Timer1_process:
1740:  moveq  #0,R2                                    | #0     | -     | Wr0
1741: DSP_LSP_Timer1_cloop:
1742: 
1743:  loadb  (R0),R6      ; R6 = byte code                          | Rr0     | -     | Wr2
1744:  addq  #1,R0                                    | Rr0     | Mr0     | -
1745:  
1746:  cmpq  #0,R6                                    | Rr6     | -     | Wr6
1747:                                          | -      | Cflags    | -
1748:  jr   ne,DSP_LSP_Timer1_swCode                               | Rflags    | -     | Wflags
1749:  nop                                        | -      | ? > WPC    | -
1750:  movei  #$0100,R3                                   | Rword1    | -     | -
1751:                                          | Rword2    | word1    | -
1752:  add   R3,R2                                    | Rr3 & Rr2   | -     | word2word1 > Wr3
1753:  jr   DSP_LSP_Timer1_cloop                                | -      | Cr2     | -
1754:  nop                                        | -      | WPC     | -
1755: 
1756: DSP_LSP_Timer1_swCode:
1757:  add   R2,R6                                    | Rr2 & Rr6   | -     | -
1758:                                          | -      | Cr6     | -
1759:  move  R6,R2                                    | Rr6     | -     | Wr6
1760: 
1761:  add   R2,R2                                    | Rr2     | -     | Wr2
1762:  load  (R14+2),R3   ; R3=code table / m_codeTableAddr                        | Rr14     | Cr2     | -
1763:                                          | -      | Cr14+2    | Wr2
1764:                                          | -      |   Mr14+2  | -
1765:  add   R2,R3                                    | Rr2 & Rr3   | -     | Wr3
1766:  movei  #DSP_LSP_Timer1_noInst,R12                               | Rword1    | Cr3     | -
1767:                                          | Rword2    | word1    | -
1768:  loadw  (R3),R2         ; R2 = code                         | Rr3     | -     | word2word1 > Wr12
1769:                                          | -      | Mr3     | -
1770:  cmpq  #0,R2                                    | Rr2     | -     | Wr2
1771:                                          | -      | Cflags    | -
1772:  jump  eq,(R12)                                   | Rflags & Rr12  | -     | Wflags
1773:  nop                                        | -      | ? > WPC    | -
1774:  load  (R14+3),R4   ; R4=escape code rewind / m_escCodeRewind                      | Rr14     | -     | -
1775:                                          | -      | Cr14+3    | -
1776:  movei  #DSP_LSP_Timer1_r_rewind,R12                              | Rword1    | -  Mr14+3  | -
1777:                                          | Rword2    | word1    | Wr4
1778:                                          | -      | -     | word2word1 > Wr12
1779:  cmp   R4,R2                                    | Rr4 & Rr2   | -     | -
1780:                                          | -      | Cflags    | -
1781:  jump  eq,(R12)                                   | Rflags & Rr12  | -     | Wflags
1782:  nop                                        | -      | ? > WPC    | -
1783:  load  (R14+4),R4   ; R4=escape code set bpm / m_escCodeSetBpm                      | Rr14     | -     | -
1784:                                          | -      | Cr14+4    | -
1785:  movei  #DSP_LSP_Timer1_r_chgbpm,R12                              | Rword1    | -  Mr14+4  | -
1786:                                          | Rword2    | word1    | Wr4
1787:                                          | -      | -     | word2word1 > Wr12
1788:  cmp   R4,R2                                    | Rr4 & Rr2   | -     | -
1789:                                          | -      | Cflags    | -
1790:  jump  eq,(R12)                                   | Rflags & Rr12  | -     | Wflags
1791:  nop                                        | -      | ? > WPC    | -
1792: 
1793: ;--------------------------
1794: ; gestion des volumes
1795: ;--------------------------
1796: ; test volume canal 3
1797:  btst  #7,R2                                    | Rr2     | -     | -
1798:                                          | -      | Cflags    | -
1799:  jr   eq,DSP_LSP_Timer1_noVd                                | Rflags    | -     | Wflags
1800:  nop                                        | -      | ? > WPC    | -
1801:  loadb  (R0),R4                                    | Rr0     | -     | -
1802:  movei  #LSP_DSP_PAULA_AUD3VOL,R5                               | Rword1    | Mr0     | -
1803:                                          | Rword2    | word1    | Wr4
1804:  addq  #1,R0                                    | Rr0     | -     | word2word1 > Wr5
1805:  store  R4,(R5)                                    | Rr4 & Rr5   | Cr0     | -
1806: DSP_LSP_Timer1_noVd:
1807: ; test volume canal 2
1808:  btst  #6,R2                                    | Rr2     | Mr5     | Wr0
1809:                                          | -      | Cflags    | MWrite
1810:  jr   eq,DSP_LSP_Timer1_noVc                                | Rflags    | -     | Wflags
1811:  nop                                        | -      | ? > WPC    | -
1812:  loadb  (R0),R4                                    | Rr0     | -     | -
1813:  movei  #LSP_DSP_PAULA_AUD2VOL,R5                               | Rword1    | Mr0     | -
1814:                                          | Rword2    | word1    | Wr4
1815:  addq  #1,R0                                    | Rr0     | -     | word2word1 > Wr5
1816:  store  R4,(R5)                                    | Rr4 & Rr5   | Cr0     | -
1817: DSP_LSP_Timer1_noVc:
1818: ; test volume canal 1
1819:  btst  #5,R2                                    | Rr2     | Mr5     | Wr0
1820:                                          | -      | Cflags    | MWrite
1821:  jr   eq,DSP_LSP_Timer1_noVb                                | Rflags    | -     | Wflags
1822:  nop                                        | -      | ? > WPC    | -
1823:  loadb  (R0),R4                                    | Rr0     | -     | -
1824:  movei  #LSP_DSP_PAULA_AUD1VOL,R5                               | Rword1    | Mr0     | -
1825:                                          | Rword2    | word1    | Wr4
1826:  addq  #1,R0                                    | Rr0     | -     | word2word1 > Wr5
1827:  store  R4,(R5)                                    | Rr4 & Rr5   | Cr0     | -
1828: DSP_LSP_Timer1_noVb:
1829: ; test volume canal 0
1830:  btst  #4,R2                                    | Rr2     | Mr5     | Wr0
1831:                                          | -      | Cflags    | MWrite
1832:  jr   eq,DSP_LSP_Timer1_noVa                                | Rflags    | -     | Wflags
1833:  nop                                        | -      | ? > WPC    | -
1834:  loadb  (R0),R4                                    | Rr0     | -     | -
1835:  movei  #LSP_DSP_PAULA_AUD0VOL,R5                               | Rword1    | Mr0     | -
1836:                                          | Rword2    | word1    | Wr4
1837:  addq  #1,R0                                    | Rr0     | -     | word2word1 > Wr5
1838:  store  R4,(R5)                                    | Rr4 & Rr5   | Cr0     | -
1839: DSP_LSP_Timer1_noVa:
1840: 
1841:  .if   LSP_avancer_module=1
1842:  store  R0,(R14)         ; store byte stream ptr                     | Rr0 & Rr14   | Mr5     | Wr0
1843:  .endif
1844:  addq  #4,R14         ; avance a word stream ptr                     | Rr14     | Mr14    | Mwrite
1845:                                          | -      | Cr14    | Mwrite
1846:  load  (R14),R0         ; R0 = word stream                      | Rr14     | -     | Wr14
1847: 
1848: ;--------------------------
1849: ; gestion des notes
1850: ;--------------------------
1851: ; test period canal 3
1852:  btst  #3,R2                                    | Rr2     | Mr14    | -
1853:                                          | -      | Cflags    | Wr0
1854:  jr   eq,DSP_LSP_Timer1_noPd                                | Rflags    | -     | Wflags
1855:  nop                                        | -      | ? > WPC    | -
1856:  loadw  (R0),R4                                    | Rr0     | -     | -
1857:  movei  #LSP_DSP_PAULA_AUD3PER,R5                               | Rword1    | Mr0     | -
1858:                                          | Rword2    | word1    | Wr4
1859:  addq  #2,R0                                    | Rr0     | -     | word2word1 > Wr5
1860:  store  R4,(R5)                                    | Rr4 & Rr5   | Cr0     | -
1861: DSP_LSP_Timer1_noPd:
1862: ; test period canal 2
1863:  btst  #2,R2                                    | Rr2     | Mr5     | Wr0
1864:                                          | -      | Cflags    | MWrite
1865:  jr   eq,DSP_LSP_Timer1_noPc                                | Rflags    | -     | Wflags
1866:  nop                                        | -      | ? > WPC    | -
1867:  loadw  (R0),R4                                    | Rr0     | -     | -
1868:  movei  #LSP_DSP_PAULA_AUD2PER,R5                               | Rword1    | Mr0     | -
1869:                                          | Rword2    | word1    | Wr4
1870:  addq  #2,R0                                    | Rr0     | -     | word2word1 > Wr5
1871:  store  R4,(R5)                                    | Rr4 & Rr5   | Cr0     | -
1872: DSP_LSP_Timer1_noPc:
1873: ; test period canal 1
1874:  btst  #1,R2                                    | Rr2     | Mr5     | Wr0
1875:                                          | -      | Cflags    | Mwrite
1876:  jr   eq,DSP_LSP_Timer1_noPb                                | Rflags    | -     | Wflags
1877:  nop                                        | -      | ? > WPC    | -
1878:  loadw  (R0),R4                                    | Rr0     | -     | -
1879:  movei  #LSP_DSP_PAULA_AUD1PER,R5                               | Rword1    | Mr0     | -
1880:                                          | Rword2    | word1    | Wr4
1881:  addq  #2,R0                                    | Rr0     | -     | word2word1 > Wr5
1882:  store  R4,(R5)                                    | Rr4 & Rr5   | Cr0     | -
1883: DSP_LSP_Timer1_noPb:
1884: ; test period canal 0
1885:  btst  #0,R2                                    | Rr2     | Mr5     | Wr0
1886:                                          | -      | Cflags    | MWrite
1887:  jr   eq,DSP_LSP_Timer1_noPa                                | Rflags    | -     | Wflags
1888:  nop                                        | -      | ? > WPC    | -
1889:  loadw  (R0),R4                                    | Rr0     | -     | -
1890:  movei  #LSP_DSP_PAULA_AUD0PER,R5                               | Rword1    | Mr0     | -
1891:                                          | Rword2    | word1    | Wr4
1892:  addq  #2,R0                                    | Rr0     | -     | word2word1 > Wr5
1893:  store  R4,(R5)                                    | Rr4 & Rr5   | Cr0     | -
1894: DSP_LSP_Timer1_noPa:
1895: 
1896: ; pas de test des 8 bits du haut en entier pour zapper la lecture des instruments
1897: ; tst.w d0       ; d0.w, avec d0.b qui a avanc� ! / beq.s .noInst
1898: 
1899:  load  (R14+4),R5  ; R5= instrument table  ( =+$10)  = a2   / m_lspInstruments-1 = 5-1                 | Rr14     | Mr5     | Wr0
1900:                                          | -      | Cr14+4    | Mwrite
1901: 
1902: ;--------------------------
1903: ; gestion des instruments
1904: ;--------------------------
1905: ;--- test instrument voie 3
1906:  movei  #DSP_LSP_Timer1_setIns3,R12                               | Rword1    | -  Mr14+4  | -
1907:                                          | Rword2    | word1    | Wr5
1908:  btst  #15,R2                                    | Rr2     | -     | word2word1 > Wr12
1909:                                          | -      | Cflags    | -
1910:  jump  ne,(R12)                                   | Rflags    | -     | Wflags
1911:  nop                                        | -      | ? > WPC    | -
1912:  
1913:  movei  #DSP_LSP_Timer1_skip3,R12                               | Rword1    | -     | -
1914:                                          | Rword2    | word1    | -
1915:  btst  #14,R2                                    | Rr2     | -     | word2word1 > Wr12
1916:                                          | -      | Cflags    | -
1917:  jump  eq,(R12)                                   | Rflags    | -     | Wflags
1918:  nop                                        | -      | ? > WPC    | -
1919: 
1920: ; repeat voie 3
1921:  movei  #LSP_DSP_repeat_pointeur3,R3                              | Rword1    | -     | -
1922:                                          | Rword2    | word1    | -
1923:  movei  #LSP_DSP_repeat_length3,R4                               | Rword1    | -     | word2word1 > Wr3
1924:                                          | Rword2    | word1    | -
1925:  load  (R3),R3     ; pointeur sauvegard�, sur infos de repeats                     | Rr3     | -     | word2word1 > Wr4
1926:  load  (R4),R4                                    | Rr4     | Mr3     | -
1927:  movei  #LSP_DSP_PAULA_AUD3L,R7                                | Rword1    | Mr4     | Wr3
1928:                                          | Rword2    | word1    | Wr4
1929:  movei  #LSP_DSP_PAULA_AUD3LEN,R8                               | Rword1    | -     | word2word1 > Wr7
1930:                                          | Rword2    | word1    | -
1931:                                          | -      | -     | word2word1 > Wr8
1932:  store  R3,(R7)                                    | Rr3 & Rr7   | -     | -
1933:  store  R4,(R8)     ; stocke le pointeur sample de repeat dans LSP_DSP_PAULA_AUD3L                | Rr4 & Rr8   | Mr7     | -
1934:  jump  (R12)    ; jump en DSP_LSP_Timer1_skip3                         | Rr12     | Mr8     | MWrite
1935:  nop                                        | -      | r12 > WPC   | MWrite
1936: 
1937: DSP_LSP_Timer1_setIns3:
1938:  loadw  (R0),R3    ; offset de l'instrument par rapport au precedent                    | Rr0     | -     | -
1939:                                          | -      | Mr0     | -
1940: ; addition en .w
1941:  btst  #15,R3                                    | Rr3     | -     | Wr3
1942:                                          | -      | Cflags    | -
1943:  jr   eq,.positif3                                  | Rflags    | -     | Wflags
1944:  nop                                        | -      | ? > WPC    | -
1945:  movei  #$FFFF0000,R7                                  | Rword1    | -     | -
1946:                                          | Rword2    | word1    | -
1947:  or   R7,R3                                    | Rr7 & Rr3   | -     | word2word1 > Wr7
1948:                                          | -      | Cr3     | -
1949: .positif3:
1950:  add   R3,R5    ;R5=pointeur datas instruments                         | Rr3 & Rr5   | -     | -
1951:  addq  #2,R0                                    | Rr0     | Cr5     | -
1952: 
1953: 
1954:  movei  #LSP_DSP_PAULA_AUD3L,R7                                | Rword1    | Cr0     | Wr5
1955:                                          | Rword2    | word1    | Wr0
1956:  loadw  (R5),R6                                    | Rr5     | -     | word2word1 > Wr7
1957:  addq  #2,R5                                    | Rr5     | Mr5     | -
1958:  shlq  #16,R6                                    | Rr6     | Cr5     | Wr6
1959:  loadw  (R5),R8                                    | Rr5     | Cr6     | Wr5
1960:                                          | -      | Mr5     | Wr6
1961:  or   R8,R6                                    | Rr8 & Rr6   | -     | Wr8
1962:  movei  #LSP_DSP_PAULA_AUD3LEN,R8                               | Rword1    | Cr6     | -
1963:                                          | Rword2    | word1    | Wr6
1964:  shlq  #nb_bits_virgule_offset,R6                               | Rr6     | -     | word2word1 > Wr8
1965:                                          | -      | Cr6     | -
1966:  store  R6,(R7)    ; stocke le pointeur sample a virgule dans LSP_DSP_PAULA_AUD3L                 | Rr6 & Rr7   | -     | Wr6
1967:  addq  #2,R5                                    | Rr5     | Mr7     | -
1968:                                          | -      | Cr5     | MWrite
1969:  loadw  (R5),R9    ; .w = R9 = taille du sample                         | Rr5     | -     | Wr5
1970:                                          | -      | Mr5     | -
1971:  shlq  #nb_bits_virgule_offset,R9    ; en 16:16                         | Rr9     | -     | Wr9
1972:                                          | -      | Cr9     | -
1973:  add   R6,R9    ; taille devient fin du sample, a virgule                      | Rr6 & Rr9   | -     | Wr9
1974:                                          | -      | Cr9     | -
1975:  store  R9,(R8)    ; stocke la nouvelle fin a virgule                        | Rr9 & Rr8   | -     | Wr9
1976:  addq  #2,R5    ; positionne sur pointeur de repeat                        | Rr5     | Mr8     | -
1977: ; repeat pointeur
1978:  movei  #LSP_DSP_repeat_pointeur3,R7                              | Rword1    | Cr5     | Mwrite
1979:                                          | Rword2    | word1    | Wr5
1980:  loadw  (R5),R4                                    | Rr5     | -     | word2word1 > Wr7
1981:  addq  #2,R5                                    | Rr5     | Mr5     | -
1982:  shlq  #16,R4                                    | Rr4     | Cr5     | Wr4
1983:  loadw  (R5),R8                                    | Rr5     | Cr4     | Wr5
1984:                                          | -      | Mr5     | Wr4
1985:  or   R8,R4                                    | Rr8 & Rr4   | -     | Wr8
1986:  addq  #2,R5                                    | Rr5     | Cr4     | -
1987:  shlq  #nb_bits_virgule_offset,R4                               | Rr4     | Cr5     | Wr4
1988:                                          | -      | Cr4     | Wr5
1989:  store  R4,(R7)    ; pointeur sample repeat, a virgule                        | Rr4 & Rr7   | -     | Wr4
1990: ; repeat length
1991:  movei  #LSP_DSP_repeat_length3,R7                               | Rword1    | Mr7     | -
1992:                                          | Rword2    | word1    | MWrite
1993:  loadw  (R5),R8    ; .w = R8 = taille du sample                         | Rr5     | -     | word2word1 > Wr7
1994:                                          | -      | Mr5     | -
1995:  shlq  #nb_bits_virgule_offset,R8    ; en 16:16                         | Rr8     | -     | Wr8
1996:                                          | -      | Cr8     | -
1997:  add   R4,R8                                    | Rr4 & Rr8   | -     | Wr8
1998:                                          | -      | Cr8     | -
1999:  store  R8,(R7)    ; stocke la nouvelle taille                          | Rr8 & Rr7   | -     | Wr8
2000:  subq  #4,R5                                    | Rr5     | Mr7     | -
2001:  
2002: ; test le reset pour prise en compte immediate du changement de sample
2003:  movei  #DSP_LSP_Timer1_noreset3,R12                              | Rword1    | Cr5     | MWrite
2004:                                          | Rword2    | word1    | Wr5
2005:  btst  #14,R2                                    | Rr2     | -     | word2word1 > Wr12
2006:                                          | -      | Cflags    | -
2007:  jump  eq,(R12)                                   | Rflags & Rr12  | -     | Wflags
2008:  nop                                        | -      | ? > WPC    | -
2009: ; reset a travers le dmacon, il faut rafraichir : LSP_DSP_PAULA_internal_location3 & LSP_DSP_PAULA_internal_length3 & LSP_DSP_PAULA_internal_offset3=0
2010:  movei  #LSP_DSP_PAULA_internal_location3,R7                            | Rword1    | -     | -
2011:                                          | Rword2    | word1    | -
2012:  movei  #LSP_DSP_PAULA_internal_length3,R8                             | Rword1    | -     | word2word1 > Wr7
2013:                                          | Rword2    | word1    | -
2014:                                          | -      | -     | word2word1 > Wr8
2015:  store  R6,(R7)    ; stocke le pointeur sample dans LSP_DSP_PAULA_internal_location3                | Rr6 & Rr7   | -     | -
2016:  store  R9,(R8)    ; stocke la nouvelle taille en 16:16: dans LSP_DSP_PAULA_internal_length3              | Rr9 & Rr8   | Mr7     | -
2017: ; remplace les 4 octets en stock
2018:  move  R6,R12                                    | Rr6     | Mr8     | MWrite
2019:  shrq  #nb_bits_virgule_offset+2,R12 ; enleve la virgule  + 2 bits du bas                    | Rr12     | -     | Wr12 MWrite
2020:  movei  #LSP_DSP_PAULA_AUD3DAT,R8                               | Rword1    | Cr12    | -
2021:                                          | Rword2    | word1    | Wr12
2022:  shlq  #2,R12                                    | Rr12     | -     | word2word1 > Wr8
2023:                                          | -      | Cr12    | -
2024:  load  (R12),R7                                   | Rr12     | -     | Wr12
2025:                                          | -      | Mr12    | -
2026:  store  R7,(R8)                                    | Rr7 & Rr8   | -     | Wr7
2027:  
2028: 
2029: DSP_LSP_Timer1_noreset3:
2030: DSP_LSP_Timer1_skip3:
2031: 
2032: ;--- test instrument voie 2
2033:  movei  #DSP_LSP_Timer1_setIns2,R12                               | Rword1    | Mr8     | -
2034:                                          | Rword2    | word1    | Mwrite
2035:  btst  #13,R2                                    | Rr2     | -     | word2word1 > Wr12
2036:                                          | -      | Cflags    | -
2037:  jump  ne,(R12)                                   | Rflags & Rr12  | -     | Wflags
2038:  nop                                        | -      | ? > WPC    | -
2039:  
2040:  movei  #DSP_LSP_Timer1_skip2,R12                               | Rword1    | -     | -
2041:                                          | Rword2    | word1    | -
2042:  btst  #12,R2                                    | Rr2     | -     | word2word1 > Wr12
2043:                                          | -      | Cflags    | -
2044:  jump  eq,(R12)                                   | Rflags    | -     | Wflags
2045:  nop                                        | -      | ? > WPC    | -
2046: 
2047: ; repeat voie 2
2048:  movei  #LSP_DSP_repeat_pointeur2,R3                              | Rword1    | -     | -
2049:                                          | Rword2    | word1    | -
2050:  movei  #LSP_DSP_repeat_length2,R4                               | Rword1    | -     | word2word1 > Wr3
2051:                                          | Rword2    | word1    | -
2052:  load  (R3),R3     ; pointeur sauvegard�, sur infos de repeats                     | Rr3     | -     | word2word1 > Wr4
2053:  load  (R4),R4                                    | Rr4     | Mr3     | -
2054:  movei  #LSP_DSP_PAULA_AUD2L,R7                                | Rword1    | Mr4     | Wr3
2055:                                          | Rword2    | word1    | Wr4
2056:  movei  #LSP_DSP_PAULA_AUD2LEN,R8                               | Rword1    | -     | word2word1 > Wr7
2057:                                          | Rword2    | word1    | -
2058:                                          | -      | -     | word2word1 > Wr8
2059:  store  R3,(R7)                                    | Rr3 & Rr7   | -     | -
2060:  store  R4,(R8)     ; stocke le pointeur sample de repeat dans LSP_DSP_PAULA_AUD3L                | Rr4 & Rr8   | Mr7     | -
2061:  jump  (R12)    ; jump en DSP_LSP_Timer1_skip3                         | Rr12     | Mr8     | Mwrite
2062:  nop                                        | -      | WPC     | Mwrite
2063: 
2064: DSP_LSP_Timer1_setIns2:
2065:  loadw  (R0),R3    ; offset de l'instrument par rapport au precedent                    | Rr0     | -     | -
2066:                                          | -      | Mr0     | -
2067: ; addition en .w
2068:  btst  #15,R3                                    | Rr3     | -     | Wr3
2069:                                          | -      | Cflags    | -
2070:  jr   eq,.positif2                                  | Rflags    | -     | Wflags
2071:  nop                                        | -      | ? > WPC    | -
2072:  movei  #$FFFF0000,R7                                  | Rword1    | -     | -
2073:                                          | Rword2    | word1    | -
2074:  or   R7,R3                                    | Rr7 & Rr3   | -     | word2word1 > Wr7
2075:                                          | -      | Cr3     | -
2076: .positif2:
2077:  add   R3,R5    ;R5=pointeur datas instruments                         | Rr3 & Rr5   | -     | Wr3
2078:  addq  #2,R0                                    | Rr0     | Cr5     | -
2079: 
2080: 
2081:  movei  #LSP_DSP_PAULA_AUD2L,R7                                | Rword1    | Cr0     | Wr5
2082:                                          | Rword2    | word1    | Wr0
2083:  loadw  (R5),R6                                    | Rr5     | -     | word2word1 > Wr7
2084:  addq  #2,R5                                    | Rr5     | Mr5     | -
2085:  shlq  #16,R6                                    | Rr6     | Cr5     | Wr6
2086:  loadw  (R5),R8                                    | Rr5     | Cr6     | Wr5
2087:                                          | -      | Mr5     | Wr6
2088:  or   R8,R6                                    | Rr8 & Rr6   | -     | Wr8
2089:  movei  #LSP_DSP_PAULA_AUD2LEN,R8                               | Rword1    | Cr6     | -
2090:                                          | Rword2    | word1    | Wr6
2091:  shlq  #nb_bits_virgule_offset,R6                               | Rr6     | -     | word2word1 > Wr8
2092:                                          | -      | Cr6     | -
2093:  store  R6,(R7)    ; stocke le pointeur sample a virgule dans LSP_DSP_PAULA_AUD3L                 | Rr6 & Rr7   | -     | Wr6
2094:  addq  #2,R5                                    | Rr5     | Mr7     | -
2095:                                          | -      | Cr5     | Mwrite
2096:  loadw  (R5),R9    ; .w = R9 = taille du sample                         | Rr5     | -     | Wr5
2097:                                          | -      | Mr5     | -
2098:  shlq  #nb_bits_virgule_offset,R9    ; en 16:16                         | Rr9     | -     | Wr9
2099:                                          | -      | Cr9     | -
2100:  add   R6,R9    ; taille devient fin du sample, a virgule                      | Rr6 & Rr9   | -     | Wr9
2101:                                          | -      | Cr9     | -
2102:  store  R9,(R8)    ; stocke la nouvelle fin a virgule                        | Rr9 & Rr8   | -     | Wr9
2103:  addq  #2,R5    ; positionne sur pointeur de repeat                        | Rr5     | Mr8     | -
2104: ; repeat pointeur
2105:  movei  #LSP_DSP_repeat_pointeur2,R7                              | Rword1    | Cr5     | Mwrite
2106:                                          | Rword2    | word1    | Wr5
2107:  loadw  (R5),R4                                    | Rr5     | -     | word2word1 > Wr7
2108:  addq  #2,R5                                    | Rr5     | Mr5     | -
2109:  shlq  #16,R4                                    | Rr4     | Cr5     | Wr4
2110:  loadw  (R5),R8                                    | Rr5     | Cr4     | Wr5
2111:                                          | -      | Mr5     | Wr4
2112:  or   R8,R4                                    | Rr8 & Rr4   | -     | Wr8
2113:  addq  #2,R5                                    | Rr5     | Cr4     | -
2114:  shlq  #nb_bits_virgule_offset,R4                               | Rr4     | Cr5     | Wr4
2115:                                          | -      | Cr4     | Wr5
2116:  store  R4,(R7)    ; pointeur sample repeat, a virgule                        | Rr4 & Rr7   | -     | Wr4
2117: ; repeat length
2118:  movei  #LSP_DSP_repeat_length2,R7                               | Rword1    | Mr7     | -
2119:                                          | Rword2    | word1    | Mwrite
2120:  loadw  (R5),R8    ; .w = R8 = taille du sample                         | Rr5     | -     | word2word1 > Wr7
2121:                                          | -      | Mr5     | -
2122:  shlq  #nb_bits_virgule_offset,R8    ; en 16:16                         | Rr8     | -     | Wr8
2123:                                          | -      | Cr8     | -
2124:  add   R4,R8                                    | Rr4 & Rr8   | -     | Wr8
2125:                                          | -      | Cr8     | -
2126:  store  R8,(R7)    ; stocke la nouvelle taille                          | Rr8 & Rr7   | -     | Wr8
2127:  subq  #4,R5                                    | Rr5     | Mr7     | -
2128:  
2129: ; test le reset pour prise en compte immediate du changement de sample
2130:  movei  #DSP_LSP_Timer1_noreset2,R12                              | Rword1    | Cr5     | Mwrite
2131:                                          | Rword2    | word1    | Wr5
2132:  btst  #12,R2                                    | Rr2     | -     | word2word1 > Wr12
2133:                                          | -      | Cflags    | -
2134:  jump  eq,(R12)                                   | Rflags    | -     | Wflags
2135:  nop                                        | -      | ? > WPC    | -
2136: ; reset a travers le dmacon, il faut rafraichir : LSP_DSP_PAULA_internal_location3 & LSP_DSP_PAULA_internal_length3 & LSP_DSP_PAULA_internal_offset3=0
2137:  movei  #LSP_DSP_PAULA_internal_location2,R7                            | Rword1    | -     | -
2138:                                          | Rword2    | word1    | -
2139:  movei  #LSP_DSP_PAULA_internal_length2,R8                             | Rword1    | -     | word2word1 > Wr7
2140:                                          | Rword2    | word1    | -
2141:                                          | -      | -     | word2word1 > Wr8
2142:  store  R6,(R7)    ; stocke le pointeur sample dans LSP_DSP_PAULA_internal_location3                | Rr6 & Rr7   | -     | -
2143:  store  R9,(R8)    ; stocke la nouvelle taille en 16:16: dans LSP_DSP_PAULA_internal_length3              | Rr9 & Rr8   | Mr7     | -
2144: ; remplace les 4 octets en stock
2145:  move  R6,R12                                    | Rr6     | Mr8     | Mwrite
2146:  shrq  #nb_bits_virgule_offset+2,R12 ; enleve la virgule  + 2 bits du bas                    | Rr12     | -     | Wr12 Mwrite
2147:  movei  #LSP_DSP_PAULA_AUD2DAT,R8                               | Rword1    | Cr12    | -
2148:                                          | Rword2    | word1    | Wr12
2149:  shlq  #2,R12                                    | Rr12     | -     | word2word1 > Wr8
2150:                                          | -      | Cr12    | -
2151:  load  (R12),R7                                   | Rr12     | -     | Wr12
2152:                                          | -      | Mr12    | -
2153:  store  R7,(R8)                                    | Rr7 & Rr8   | -     | Wr7
2154:  
2155: 
2156: DSP_LSP_Timer1_noreset2:
2157: DSP_LSP_Timer1_skip2:
2158:  
2159: ;--- test instrument voie 1
2160:  movei  #DSP_LSP_Timer1_setIns1,R12                               | Rword1    | Mr8     | -
2161:                                          | Rword2    | word1    | Mwrite
2162:  btst  #11,R2                                    | Rr2     | -     | word2word1 > Wr12
2163:                                          | -      | Cflags    | -
2164:  jump  ne,(R12)                                   | Rflags & Rr12  | -     | Wflags
2165:  nop                                        | -      | ? > WPC    | -
2166:  
2167:  movei  #DSP_LSP_Timer1_skip1,R12                               | Rword1    | -     | -
2168:                                          | Rword2    | word1    | -
2169:  btst  #10,R2                                    | Rr2     | -     | word2word1 > Wr12
2170:                                          | -      | Cflags    | -
2171:  jump  eq,(R12)                                   | Rflags & Rr12  | -     | Wflags
2172:  nop                                        | -      | ? > WPC    | -
2173: 
2174: ; repeat voie 1
2175:  movei  #LSP_DSP_repeat_pointeur1,R3                              | Rword1    | -     | -
2176:                                          | Rword2    | word1    | -
2177:  movei  #LSP_DSP_repeat_length1,R4                               | Rword1    | -     | word2word1 > Wr3
2178:                                          | Rword2    | word1    | -
2179:  load  (R3),R3     ; pointeur sauvegard�, sur infos de repeats                     | Rr3     | -     | word2word1 > Wr4
2180:  load  (R4),R4                                    | Rr4     | Mr3     | -
2181:  movei  #LSP_DSP_PAULA_AUD1L,R7                                | Rword1    | Mr4     | Wr3
2182:                                          | Rword2    | word1    | Wr4
2183:  movei  #LSP_DSP_PAULA_AUD1LEN,R8                               | Rword1    | -     | word2word1 > Wr7
2184:                                          | Rword2    | word1    | -
2185:                                          | -      | -     | word2word1 > Wr8
2186:  store  R3,(R7)                                    | Rr3 & Rr7   | -     | -
2187:  store  R4,(R8)     ; stocke le pointeur sample de repeat dans LSP_DSP_PAULA_AUD3L                | Rr4 & Rr8   | Mr7     | -
2188:  jump  (R12)    ; jump en DSP_LSP_Timer1_skip3                         | Rr12     | Mr8     | Mwrite
2189:  nop                                        | -      | WPC     | Mwrite
2190: 
2191: DSP_LSP_Timer1_setIns1:
2192:  loadw  (R0),R3    ; offset de l'instrument par rapport au precedent                    | Rr0     | -     | -
2193:                                          | -      | Mr0     | -
2194: ; addition en .w
2195:  btst  #15,R3                                    | Rr3     | -     | Wr3
2196:                                          | -      | Cflags    | -
2197:  jr   eq,.positif1                                  | Rflags    | -     | Wflags
2198:  nop                                        | -      | ? > WPC    | -
2199:  movei  #$FFFF0000,R7                                  | Rword1    | -     | -
2200:                                          | Rword2    | word1    | -
2201:  or   R7,R3                                    | Rr7 & Rr3   | -     | word2word1 > Wr7
2202:                                          | -      | Cr3     | -
2203: .positif1:
2204:  add   R3,R5    ;R5=pointeur datas instruments                         | Rr3 & Rr5   | -     | Wr3
2205:  addq  #2,R0                                    | Rr0     | Cr5     | -
2206: 
2207: 
2208:  movei  #LSP_DSP_PAULA_AUD1L,R7                                | Rword1    | Cr0     | Wr5
2209:                                          | Rword2    | word1    | Wr0
2210:  loadw  (R5),R6                                    | Rr5     | -     | word2word1 > Wr7
2211:  addq  #2,R5                                    | Rr5     | Mr5     | -
2212:  shlq  #16,R6                                    | Rr6     | Cr5     | Wr6
2213:  loadw  (R5),R8                                    | Rr5     | Cr6     | Wr5
2214:                                          | -      | Mr5     | Wr6
2215:  or   R8,R6                                    | Rr8 & Rr6   | -     | Wr8
2216:  movei  #LSP_DSP_PAULA_AUD1LEN,R8                               | Rword1    | Cr6     | -
2217:                                          | Rword2    | word1    | Wr6
2218:  shlq  #nb_bits_virgule_offset,R6                               | Rr6     | -     | word2word1 > Wr8
2219:                                          | -      | Cr6     | -
2220:  store  R6,(R7)    ; stocke le pointeur sample a virgule dans LSP_DSP_PAULA_AUD3L                 | Rr6 & Rr7   | -     | Wr6
2221:  addq  #2,R5                                    | Rr5     | Mr7     | -
2222:                                          | -      | Cr5     | Mwrite
2223:  loadw  (R5),R9    ; .w = R9 = taille du sample                         | Rr5     | -     | Wr5
2224:                                          | -      | Mr5     | -
2225:  shlq  #nb_bits_virgule_offset,R9    ; en 16:16                         | Rr9     | -     | Wr9
2226:                                          | -      | Cr9     | -
2227:  add   R6,R9    ; taille devient fin du sample, a virgule                      | Rr6 & Rr9   | -     | Wr9
2228:                                          | -      | Cr9     | -
2229:  store  R9,(R8)    ; stocke la nouvelle fin a virgule                        | Rr9 & Rr8   | -     | Wr9
2230:  addq  #2,R5    ; positionne sur pointeur de repeat                        | Rr5     | Mr8     | -
2231: ; repeat pointeur
2232:  movei  #LSP_DSP_repeat_pointeur1,R7                              | Rword1    | Cr5     | Mwrite
2233:                                          | Rword2    | word1    | Wr5
2234:  loadw  (R5),R4                                    | Rr5     | -     | word2word1 > Wr7
2235:  addq  #2,R5                                    | Rr5     | Mr5     | -
2236:  shlq  #16,R4                                    | Rr4     | Cr5     | Wr4
2237:  loadw  (R5),R8                                    | Rr5     | Cr4     | Wr5
2238:                                          | -      | Mr5     | Wr4
2239:  or   R8,R4                                    | Rr8 & Rr4   | -     | Wr8
2240:  addq  #2,R5                                    | Rr5     | Cr4     | -
2241:  shlq  #nb_bits_virgule_offset,R4                               | Rr4     | Cr5     | Wr4
2242:                                          | -      | Cr4     | Wr5
2243:  store  R4,(R7)    ; pointeur sample repeat, a virgule                        | Rr4 & Rr7   | -     | Wr4
2244: ; repeat length
2245:  movei  #LSP_DSP_repeat_length1,R7                               | Rword1    | Mr7     | -
2246:                                          | Rword2    | word1    | Mwrite
2247:  loadw  (R5),R8    ; .w = R8 = taille du sample                         | Rr5     | -     | word2word1 > Wr7
2248:                                          | -      | Mr5     | -
2249:  shlq  #nb_bits_virgule_offset,R8    ; en 16:16                         | Rr8     | -     | Wr8
2250:                                          | -      | Cr8     | -
2251:  add   R4,R8                                    | Rr4 & Rr8   | -     | Wr8
2252:                                          | -      | Cr8     | -
2253:  store  R8,(R7)    ; stocke la nouvelle taille                          | Rr8 & Rr7   | -     | Wr8
2254:  subq  #4,R5                                    | Rr5     | Mr7     | -
2255:  
2256: ; test le reset pour prise en compte immediate du changement de sample
2257:  movei  #DSP_LSP_Timer1_noreset1,R12                              | Rword1    | Cr5     | Mwrite
2258:                                          | Rword2    | word1    | Wr5
2259:  btst  #10,R2                                    | Rr2     | -     | word2word1 > Wr12
2260:                                          | -      | Cflags    | -
2261:  jump  eq,(R12)                                   | Rflags    | -     | Wflags
2262:  nop                                        | -      | ? > WPC    | -
2263: ; reset a travers le dmacon, il faut rafraichir : LSP_DSP_PAULA_internal_location3 & LSP_DSP_PAULA_internal_length3 & LSP_DSP_PAULA_internal_offset3=0
2264:  movei  #LSP_DSP_PAULA_internal_location1,R7                            | Rword1    | -     | -
2265:                                          | Rword2    | word1    | -
2266:  movei  #LSP_DSP_PAULA_internal_length1,R8                             | Rword1    | -     | word2word1 > Wr7
2267:                                          | Rword2    | word1    | -
2268:                                          | -      | -     | word2word1 > Wr8
2269:  store  R6,(R7)    ; stocke le pointeur sample dans LSP_DSP_PAULA_internal_location3                | Rr6 & Rr7   | -     | -
2270:  store  R9,(R8)    ; stocke la nouvelle taille en 16:16: dans LSP_DSP_PAULA_internal_length3              | Rr9 & Rr8   | Mr7     | -
2271: ; remplace les 4 octets en stock
2272:  move  R6,R12                                    | Rr6     | Mr8     | Mwrite
2273:  shrq  #nb_bits_virgule_offset+2,R12 ; enleve la virgule  + 2 bits du bas                    | Rr12     | -     | Wr12 Mwrite
2274:  movei  #LSP_DSP_PAULA_AUD1DAT,R8                               | Rword1    | Cr12    | -
2275:                                          | Rword2    | word1    | Wr12
2276:  shlq  #2,R12                                    | Rr12     | -     | word2word1 > Wr8
2277:                                          | -      | Cr12    | -
2278:  load  (R12),R7                                   | Rr12     | -     | Wr12
2279:                                          | -      | Mr12    | -
2280:  store  R7,(R8)                                    | Rr7 & Rr8   | -     | Wr7
2281:  
2282: 
2283: DSP_LSP_Timer1_noreset1:
2284: DSP_LSP_Timer1_skip1:
2285:  
2286: ;--- test instrument voie 0
2287:  movei  #DSP_LSP_Timer1_setIns0,R12                               | Rword1    | Mr8     | -
2288:                                          | Rword2    | word1    | Mwrite
2289:  btst  #9,R2                                    | Rr2     | -     | word2word1 > Wr12
2290:                                          | -      | Cflags    | -
2291:  jump  ne,(R12)                                   | Rflags & Rr12  | -     | Wflags
2292:  nop                                        | -      | ? > WP    | -
2293:  
2294:  movei  #DSP_LSP_Timer1_skip0,R12                               | Rword1    | -     | -
2295:                                          | Rword2    | word1    | -
2296:  btst  #8,R2                                    | Rr2     | -     | word2word1 > Wr12
2297:                                          | -      | Cflags    | -
2298:  jump  eq,(R12)                                   | Rflags & Rr12  | -     | Wflags
2299:  nop                                        | -      | ? > WPC    | -
2300: 
2301: ; repeat voie 0
2302:  movei  #LSP_DSP_repeat_pointeur0,R3                              | Rword1    | -     | -
2303:                                          | Rword2    | word1    | -
2304:  movei  #LSP_DSP_repeat_length0,R4                               | Rword1    | -     | word2word1 > Wr3
2305:                                          | Rword2    | word1    | -
2306:  load  (R3),R3     ; pointeur sauvegard�, sur infos de repeats                     | Rr3     | -     | word2word1 > Wr4
2307:  load  (R4),R4                                    | Rr4     | Mr3     | -
2308:  movei  #LSP_DSP_PAULA_AUD0L,R7                                | Rword1    | Mr4     | Wr3
2309:                                          | Rword2    | word1    | Wr4
2310:  movei  #LSP_DSP_PAULA_AUD0LEN,R8                               | Rword1    | -     | word2word1 > Wr7
2311:                                          | Rword2    | word1    | -
2312:                                          | -      | -     | word2word1 > Wr8
2313:  store  R3,(R7)                                    | Rr3 & Rr7   | -     | -
2314:  store  R4,(R8)     ; stocke le pointeur sample de repeat dans LSP_DSP_PAULA_AUD3L                | Rr4 & Rr8   | Mr7     | -
2315:  jump  (R12)    ; jump en DSP_LSP_Timer1_skip3                         | Rr12     | Mr8     | Mwrite
2316:  nop                                        | -      | WPC     | Mwrite
2317: 
2318: DSP_LSP_Timer1_setIns0:
2319:  loadw  (R0),R3    ; offset de l'instrument par rapport au precedent                    | Rr0     | -     | -
2320:                                          | -      | Mr0     | -
2321: ; addition en .w
2322:  btst  #15,R3                                    | Rr3     | -     | Wr3
2323:                                          | -      | Cflags    | -
2324:  jr   eq,.positif0                                  | Rflags    | -     | Wflags
2325:  nop                                        | -      | ? > WPC    | -
2326:  movei  #$FFFF0000,R7                                  | Rword1    | -     | -
2327:                                          | Rword2    | word1    | -
2328:  or   R7,R3                                    | Rr7 & Rr3   | -     | word2word1 > Wr7
2329:                                          | -      | Cr3     | -
2330: 
2331: .positif0:
2332:  add   R3,R5    ;R5=pointeur datas instruments                         | Rr3 & Rr5   | -     | Wr3
2333:  addq  #2,R0                                    | Rr0     | Cr5     | -
2334: 
2335: 
2336:  movei  #LSP_DSP_PAULA_AUD0L,R7                                | Rword1    | Cr0     | Wr5
2337:                                          | Rword2    | word1    | Wr0
2338:  loadw  (R5),R6                                    | Rr5     | -     | word2word1 > Wr7
2339:  addq  #2,R5                                    | Rr5     | Mr5     | -
2340:  shlq  #16,R6                                    | Rr6     | Cr5     | Wr6
2341:  loadw  (R5),R8                                    | Rr5     | Cr6     | Wr5
2342:                                          | -      | Mr5     | Wr6
2343:  or   R8,R6                                    | Rr8 & Rr6   | -     | Wr8
2344:  movei  #LSP_DSP_PAULA_AUD0LEN,R8                               | Rword1    | Cr6     | -
2345:                                          | Rword2    | word1    | Wr6
2346:  shlq  #nb_bits_virgule_offset,R6                               | Rr6     | -     | word2word1 > Wr8
2347:                                          | -      | Cr6     | -
2348:  store  R6,(R7)    ; stocke le pointeur sample a virgule dans LSP_DSP_PAULA_AUD3L                 | Rr6 & Rr7   | -     | Wr6
2349:  addq  #2,R5                                    | Rr5     | Mr7     | -
2350:                                          | -      | Cr5     | Mwrite
2351:  loadw  (R5),R9    ; .w = R9 = taille du sample                         | Rr5     | -     | Wr5
2352:                                          | -      | Mr5     | -
2353:  shlq  #nb_bits_virgule_offset,R9    ; en 16:16                         | Rr9     | -     | Wr9
2354:                                          | -      | Cr9     | -
2355:  add   R6,R9    ; taille devient fin du sample, a virgule                      | Rr6 & Rr9   | -     | Wr9
2356:                                          | -      | Cr9     | -
2357:  store  R9,(R8)    ; stocke la nouvelle fin a virgule                        | Rr9 & Rr8   | -     | Wr9
2358:  addq  #2,R5    ; positionne sur pointeur de repeat                        | Rr5     | Mr8     | -
2359: ; repeat pointeur
2360:  movei  #LSP_DSP_repeat_pointeur0,R7                              | Rword1    | Cr5     | Mwrite
2361:                                          | Rword2    | word1    | Wr5
2362:  loadw  (R5),R4                                    | Rr5     | -     | word2word1 > Wr7
2363:  addq  #2,R5                                    | Rr5     | Mr5     | -
2364:  shlq  #16,R4                                    | Rr4     | Cr5     | Wr4
2365:  loadw  (R5),R8                                    | Rr5     | Cr4     | Wr5
2366:                                          | -      | Mr5     | Wr4
2367:  or   R8,R4                                    | Rr8 & Rr4   | -     | Wr8
2368:  addq  #2,R5                                    | Rr5     | Cr4     | -
2369:  shlq  #nb_bits_virgule_offset,R4                               | Rr4     | Cr5     | Wr4
2370:                                          | -      | Cr4     | Wr5
2371:  store  R4,(R7)    ; pointeur sample repeat, a virgule                        | Rr4 & Rr7   | -     | Wr4
2372: ; repeat length
2373:  movei  #LSP_DSP_repeat_length0,R7                               | Rword1    | Mr7     | -
2374:                                          | Rword2    | word1    | Mwrite
2375:  loadw  (R5),R8    ; .w = R8 = taille du sample                         | Rr5     | -     | word2word1 > Wr7
2376:                                          | -      | Mr5     | -
2377:  shlq  #nb_bits_virgule_offset,R8    ; en 16:16                         | Rr8     | -     | Wr8
2378:                                          | -      | Cr8     | -
2379:  add   R4,R8                                    | Rr4 & Rr8   | -     | Wr8
2380:                                          | -      | Cr8     | -
2381:  store  R8,(R7)    ; stocke la nouvelle taille                          | Rr8 & Rr7   | -     | Wr8
2382:  subq  #4,R5                                    | Rr5     | Mr7     | -
2383:  
2384: ; test le reset pour prise en compte immediate du changement de sample
2385:  movei  #DSP_LSP_Timer1_noreset0,R12                              | Rword1    | Cr5     | Mwrite
2386:                                          | Rword2    | word1    | Wr5
2387:  btst  #8,R2                                    | Rr2     | -     | word2word1 > Wr12
2388:                                          | -      | Cflags    | -
2389:  jump  eq,(R12)                                   | Rflags & Rr12  | -     | Wflags
2390:  nop                                        | -      | ? > WPC    | -
2391: ; reset a travers le dmacon, il faut rafraichir : LSP_DSP_PAULA_internal_location3 & LSP_DSP_PAULA_internal_length3 & LSP_DSP_PAULA_internal_offset3=0
2392:  movei  #LSP_DSP_PAULA_internal_location0,R7                            | Rword1    | -     | -
2393:                                          | Rword2    | word1    | -
2394:  movei  #LSP_DSP_PAULA_internal_length0,R8                             | Rword1    | -     | word2word1 > Wr7
2395:                                          | Rword2    | word1    | -
2396:                                          | -      | -     | word2word1 > Wr8
2397:  store  R6,(R7)    ; stocke le pointeur sample dans LSP_DSP_PAULA_internal_location3                | Rr6 & Rr7   | -     | -
2398:  store  R9,(R8)    ; stocke la nouvelle taille en 16:16: dans LSP_DSP_PAULA_internal_length3              | Rr9 & Rr8   | Mr7     | -
2399: ; remplace les 4 octets en stock
2400:  move  R6,R12                                    | Rr6     | Mr8     | Mwrite
2401:  shrq  #nb_bits_virgule_offset+2,R12 ; enleve la virgule  + 2 bits du bas                    | Rr12     | -     | Wr12 Mwrite
2402:  movei  #LSP_DSP_PAULA_AUD0DAT,R8                               | Rword1    | Cr12    | -
2403:                                          | Rword2    | word1    | Wr12
2404:  shlq  #2,R12                                    | Rr12     | -     | word2word1 > Wr8
2405:                                          | -      | Cr12    | -
2406:  load  (R12),R7                                   | Rr12     | -     | Wr12
2407:                                          | -      | Mr12    | -
2408:  store  R7,(R8)                                    | Rr7 & Rr8   | -     | Wr7
2409:  
2410: 
2411: DSP_LSP_Timer1_noreset0:
2412: DSP_LSP_Timer1_skip0:
2413:  
2414:  
2415: 
2416: DSP_LSP_Timer1_noInst:
2417:  .if   LSP_avancer_module=1
2418:  store  R0,(R14)   ; store word stream (or byte stream if coming from early out)                 | Rr0 & Rr14   | Mr8     | -
2419:  .endif
2420: 
2421: 
2422: ; - fin de la conversion du player LSP
2423: 
2424: ; elements d'emulation Paula
2425: ; calcul des increments
2426: ; calcul de l'increment a partir de la note Amiga : (3546895 / note) / frequence I2S
2427: 
2428: ; conversion period => increment voie 0
2429:  movei  #DSP_frequence_de_replay_reelle_I2S,R0                            | Rword1    | Mr14    | Mwrite
2430:                                          | Rword2    | word1    | Mwrite
2431:  movei  #LSP_DSP_PAULA_internal_increment0,R1                            | Rword1    | -     | word2word1 > Wr0
2432:                                          | Rword2    | word1    | -
2433:  movei  #LSP_DSP_PAULA_AUD0PER,R2                               | Rword1    | -     | word2word1 > Wr1
2434:                                          | Rword2    | word1    | -
2435:  load  (R0),R0                                    | Rr0     | -     | word2word1 > Wr2
2436:  movei  #3546895,R3                                   | Rword1    | Mr0     | -
2437:                                          | Rword2    | word1    | Wr0
2438:  load  (R2),R2                                    | Rr2     | -     | word2word1 > Wr3
2439:                                          | -      | Mr2     | -
2440:  cmpq  #0,R2                                    | Rr2     | -     | Wr2
2441:                                          | -      | Cflags    | -
2442:  jr   ne,.1                                    | Rflags    | -     | Wflags
2443:  nop                                        | -      | ? > WPC    | -
2444:  moveq  #0,R4                                    | #0     | -     | -
2445:  jr   .2                                     | -      | -     | Wr4
2446:  nop                                        | -      | WPC     | -
2447: .1:
2448:  move  R3,R4                                    | Rr3     | -     | -
2449:  div   R2,R4   ; (3546895 / note)                             | Rr2 & Rr4   | -     | Wr4
2450:                                          | -      | Cr4-1    | -
2451:                                          | -      | Cr4-2    | -
2452:                                          | -      | Cr4-3    | -
2453:                                          | -      | Cr4-4    | -
2454:                                          | -      | Cr4-5    | -
2455:                                          | -      | Cr4-6    | -
2456:                                          | -      | Cr4-7    | -
2457:                                          | -      | Cr4-8    | -
2458:                                          | -      | Cr4-9    | -
2459:                                          | -      | Cr4-10    | -
2460:                                          | -      | Cr4-11    | -
2461:                                          | -      | Cr4-12    | -
2462:                                          | -      | Cr4-13    | -
2463:                                          | -      | Cr4-14    | -
2464:                                          | -      | Cr4-15    | -
2465:  or   R4,R4                                    | Rr4     | -     | Wr4
2466:                                          | -      | Cr4     | -
2467:  shlq  #nb_bits_virgule_offset,R4                               | Rr4     | -     | Wr4
2468:                                          | -      | Cr4     | -
2469:  div   R0,R4   ; (3546895 / note) / frequence I2S en 16:16                       | Rr0 & Rr4   | -     | -
2470:                                          | -      | Cr4-1    | -
2471:                                          | -      | Cr4-2    | -
2472:                                          | -      | Cr4-3    | -
2473:                                          | -      | Cr4-4    | -
2474:                                          | -      | Cr4-5    | -
2475:                                          | -      | Cr4-6    | -
2476:                                          | -      | Cr4-7    | -
2477:                                          | -      | Cr4-8    | -
2478:                                          | -      | Cr4-9    | -
2479:                                          | -      | Cr4-10    | -
2480:                                          | -      | Cr4-11    | -
2481:                                          | -      | Cr4-12    | -
2482:                                          | -      | Cr4-13    | -
2483:                                          | -      | Cr4-14    | -
2484:                                          | -      | Cr4-15    | -
2485:  or   R4,R4                                    | Rr4     | -     | Wr4
2486:                                          | -      | Cr4     | -
2487: .2:
2488:  store  R4,(R1)                                    | Rr4 & Rr1   | -     | Wr4
2489: ; conversion period => increment voie 1
2490:  movei  #LSP_DSP_PAULA_AUD1PER,R2                               | Rword1    | Mr1     | -
2491:                                          | Rword2    | word1    | MWrite
2492:  movei  #LSP_DSP_PAULA_internal_increment1,R1                            | Rword1    | -     | word2word1 > Wr2
2493:                                          | Rword2    | word1    | -
2494:  move  R3,R4                                    | Rr3     | -     | word2word1 > Wr1
2495:  load  (R2),R2                                    | Rr2     | -     | Wr4
2496:                                          | -      | Mr2     | -
2497:  cmpq  #0,R2                                    | Rr2     | -     | Wr2
2498:                                          | -      | Cflags    | -
2499:  jr   ne,.12                                    | Rflags    | -     | Wflags
2500:  nop                                        | -      | ? > WPC    | -
2501:  moveq  #0,R4                                    | #0     | -     | -
2502:  jr   .22                                     | -      | -     | Wr4
2503:  nop                                        | -      | WPC     | -
2504: .12:
2505: 
2506:  div   R2,R4   ; (3546895 / note)                             | Rr2 & Rr4   | -     | -
2507:                                          | -      | Cr4-1    | -
2508:                                          | -      | Cr4-2    | -
2509:                                          | -      | Cr4-3    | -
2510:                                          | -      | Cr4-4    | -
2511:                                          | -      | Cr4-5    | -
2512:                                          | -      | Cr4-6    | -
2513:                                          | -      | Cr4-7    | -
2514:                                          | -      | Cr4-8    | -
2515:                                          | -      | Cr4-9    | -
2516:                                          | -      | Cr4-10    | -
2517:                                          | -      | Cr4-11    | -
2518:                                          | -      | Cr4-12    | -
2519:                                          | -      | Cr4-13    | -
2520:                                          | -      | Cr4-14    | -
2521:                                          | -      | Cr4-15    | -
2522:  or   R4,R4                                    | Rr4     | -     | Wr4
2523:                                          | -      | Cr4     | -
2524:  shlq  #nb_bits_virgule_offset,R4                               | Rr4     | -     | Wr4
2525:                                          | -      | Cr4     | -
2526:  div   R0,R4   ; (3546895 / note) / frequence I2S en 16:16                       | Rr0 & Rr4   | -     | Wr4
2527:                                          | -      | Cr4-1    | -
2528:                                          | -      | Cr4-2    | -
2529:                                          | -      | Cr4-3    | -
2530:                                          | -      | Cr4-4    | -
2531:                                          | -      | Cr4-5    | -
2532:                                          | -      | Cr4-6    | -
2533:                                          | -      | Cr4-7    | -
2534:                                          | -      | Cr4-8    | -
2535:                                          | -      | Cr4-9    | -
2536:                                          | -      | Cr4-10    | -
2537:                                          | -      | Cr4-11    | -
2538:                                          | -      | Cr4-12    | -
2539:                                          | -      | Cr4-13    | -
2540:                                          | -      | Cr4-14    | -
2541:                                          | -      | Cr4-15    | -
2542:  or   R4,R4                                    | Rr4     | -     | Wr4
2543:                                          | -      | Cr4     | -
2544: .22:
2545:  store  R4,(R1)                                    | Rr4 & Rr1   | -     | Wr4
2546: 
2547: ; conversion period => increment voie 2
2548:  movei  #LSP_DSP_PAULA_AUD2PER,R2                               | Rword1    | Mr1     | -
2549:                                          | Rword2    | word1    | MWrite
2550:  movei  #LSP_DSP_PAULA_internal_increment2,R1                            | Rword1    | -     | word2word1 > Wr2
2551:                                          | Rword2    | word1    | -
2552:  move  R3,R4                                    | Rr3     | -     | word2word1 > Wr1
2553:  load  (R2),R2                                    | Rr2     | -     | Wr4
2554:                                          | -      | Mr2     | -
2555:  cmpq  #0,R2                                    | Rr2     | -     | Wr2
2556:                                          | -      | Cflags    | -
2557:  jr   ne,.13                                    | Rflags    | -     | Wflags
2558:  nop                                        | -      | ? > WPC    | -
2559:  moveq  #0,R4                                    | #0     | -     | -
2560:  jr   .23                                     | -      | -     | Wr4
2561:  nop                                        | -      | WPC     | -
2562: .13:
2563:  div   R2,R4   ; (3546895 / note)                             | Rr2 & Rr4   | -     | -
2564:                                          | -      | Cr4-1    | -
2565:                                          | -      | Cr4-2    | -
2566:                                          | -      | Cr4-3    | -
2567:                                          | -      | Cr4-4    | -
2568:                                          | -      | Cr4-5    | -
2569:                                          | -      | Cr4-6    | -
2570:                                          | -      | Cr4-7    | -
2571:                                          | -      | Cr4-8    | -
2572:                                          | -      | Cr4-9    | -
2573:                                          | -      | Cr4-10    | -
2574:                                          | -      | Cr4-11    | -
2575:                                          | -      | Cr4-12    | -
2576:                                          | -      | Cr4-13    | -
2577:                                          | -      | Cr4-14    | -
2578:                                          | -      | Cr4-15    | -
2579:  or   R4,R4                                    | Rr4     | -     | Wr4
2580:                                          | -      | Cr4     | -
2581:  shlq  #nb_bits_virgule_offset,R4                               | Rr4     | -     | Wr4
2582:                                          | -      | Cr4     | -
2583:  div   R0,R4   ; (3546895 / note) / frequence I2S en 16:16                       | Rr0 & Rr4   | -     | Wr4
2584:                                          | -      | Cr4-1    | -
2585:                                          | -      | Cr4-2    | -
2586:                                          | -      | Cr4-3    | -
2587:                                          | -      | Cr4-4    | -
2588:                                          | -      | Cr4-5    | -
2589:                                          | -      | Cr4-6    | -
2590:                                          | -      | Cr4-7    | -
2591:                                          | -      | Cr4-8    | -
2592:                                          | -      | Cr4-9    | -
2593:                                          | -      | Cr4-10    | -
2594:                                          | -      | Cr4-11    | -
2595:                                          | -      | Cr4-12    | -
2596:                                          | -      | Cr4-13    | -
2597:                                          | -      | Cr4-14    | -
2598:                                          | -      | Cr4-15    | -
2599:  or   R4,R4                                    | Rr4     | -     | Wr4
2600:                                          | -      | Cr4     | -
2601: .23:
2602:  store  R4,(R1)                                    | Rr4 & Rr1   | -     | Wr4
2603: 
2604: ; conversion period => increment voie 3
2605:  movei  #LSP_DSP_PAULA_AUD3PER,R2                               | Rword1    | Mr1     | -
2606:                                          | Rword2    | word1    | Mwrite
2607:  movei  #LSP_DSP_PAULA_internal_increment3,R1                            | Rword1    | -     | word2word1 > Wr2
2608:                                          | Rword2    | word1    | -
2609:  move  R3,R4                                    | Rr3     | -     | word2word1 > Wr1
2610:  load  (R2),R2                                    | Rr2     | -     | Wr4
2611:                                          | -      | Mr2     | -
2612:  cmpq  #0,R2                                    | Rr2     | -     | Wr2
2613:                                          | -      | Cflags    | -
2614:  jr   ne,.14                                    | Rflags    | -     | Wflags
2615:  nop                                        | -      | ? > WPC    | -
2616:  moveq  #0,R4                                    | #0     | -     | -
2617:  jr   .24                                     | -      | -     | Wr4
2618:  nop                                        | -      | WPC     | -
2619: .14:
2620:  div   R2,R4   ; (3546895 / note)                             | Rr2 & Rr4   | -     | -
2621:                                          | -      | Cr4-1    | -
2622:                                          | -      | Cr4-2    | -
2623:                                          | -      | Cr4-3    | -
2624:                                          | -      | Cr4-4    | -
2625:                                          | -      | Cr4-5    | -
2626:                                          | -      | Cr4-6    | -
2627:                                          | -      | Cr4-7    | -
2628:                                          | -      | Cr4-8    | -
2629:                                          | -      | Cr4-9    | -
2630:                                          | -      | Cr4-10    | -
2631:                                          | -      | Cr4-11    | -
2632:                                          | -      | Cr4-12    | -
2633:                                          | -      | Cr4-13    | -
2634:                                          | -      | Cr4-14    | -
2635:                                          | -      | Cr4-15    | -
2636:  or   R4,R4                                    | Rr4     | -     | Wr4
2637:                                          | -      | Cr4     | -
2638:  shlq  #nb_bits_virgule_offset,R4                               | Rr4     | -     | Wr4
2639:                                          | -      | Cr4     | -
2640:  div   R0,R4   ; (3546895 / note) / frequence I2S en 16:16                       | Rr0 & Rr4   | -     | -
2641:                                          | -      | Cr4-1    | -
2642:                                          | -      | Cr4-2    | -
2643:                                          | -      | Cr4-3    | -
2644:                                          | -      | Cr4-4    | -
2645:                                          | -      | Cr4-5    | -
2646:                                          | -      | Cr4-6    | -
2647:                                          | -      | Cr4-7    | -
2648:                                          | -      | Cr4-8    | -
2649:                                          | -      | Cr4-9    | -
2650:                                          | -      | Cr4-10    | -
2651:                                          | -      | Cr4-11    | -
2652:                                          | -      | Cr4-12    | -
2653:                                          | -      | Cr4-13    | -
2654:                                          | -      | Cr4-14    | -
2655:                                          | -      | Cr4-15    | -
2656:  or   R4,R4                                    | Rr4     | -     | Wr4
2657:                                          | -      | Cr4     | -
2658: .24:
2659:  store  R4,(R1)                                    | Rr4 & Rr1   | -     | -
2660: 
2661: ;--------------------------------------------------
2662: 
2663:  
2664: ;------------------------------------
2665: ; return from interrupt Timer 1
2666:  load (r31),r12 ; return address                               | Rr31     | Mr1     | -
2667:  ;bset #10,r13  ; clear latch 1 = I2S
2668:  bset #11,r13  ; clear latch 1 = timer 1                             | Rr13     | Mr31    | MWrite
2669:                                          | -      | Cr13    | -
2670:  ;bset #12,r13  ; clear latch 1 = timer 2
2671:  bclr #3,r13  ; clear IMASK                                | Rr13     | -     | Wr13
2672:  addq #4,r31  ; pop from stack                               | Rr31     | Cr13    | -
2673:  addqt #2,r12  ; next instruction                               | Rr12     | Cr31    | Wr13
2674:                                          | -      | Cr12    | -
2675:  jump t,(r12)  ; return                                 | Rr12     | -     | Wr12
2676:  store r13,(r16) ; restore flags                                | Rr13 & Rr16   | WPC     | -
2677: 
2678: ;------------------------------------
2679: ;rewind
2680: DSP_LSP_Timer1_r_rewind:
2681: ; movei  #LSPVars,R14
2682: ; load  (R14),R0     ; R0 = byte stream
2683:  load  (R14+8),R0   ; bouclage : R0 = byte stream / m_byteStreamLoop = 8                   | Rr14     | -     | -
2684:                                          | -      | Cr14+8    | -
2685:  movei  #DSP_LSP_Timer1_process,R12                               | Rword1    |   Mr14+8  | -
2686:                                          | Rword2    | word1    | Wr0
2687:  load  (R14+9),R3   ; m_wordStreamLoop=9                           | Rr14     | -     | word2word1 > Wr12
2688:                                          | -      | Cr14+9    | -
2689:  jump  (R12)                                    | Rr12     |   Mr14+9  | -
2690:  store  R3,(R14+1)    ; m_wordStream=1                           | Rr3 & Rr14   | -     | -
2691:                                          | -      | Cr14+1 WPC   | -
2692: 
2693: ;------------------------------------
2694: ; change bpm
2695: DSP_LSP_Timer1_r_chgbpm:
2696:  movei  #DSP_LSP_Timer1_process,R12                               | Rword1    | -     | -
2697:                                          | Rword2    | word1    | -
2698:  loadb  (R0),R11                                   | Rr0     | -     | word2word1 > Wr12
2699:                                          | -      | Mr0     | -
2700:  store  R11,(R14+7)  ; R3=nouveau bpm / m_currentBpm = 7                         | Rr11 & Rr14   | -     | Wr11
2701:                                          | -      | Cr14+7    | -
2702: ;application nouveau bpm dans Timer 1
2703:  movei #60*256,R10                                    | Rword1    |   Mr14+7  | -
2704:                                          | Rword2    | word1    | Mwrite
2705:  ;shlq #8,R10    ; 16 bits de virgule
2706:  div  R11,R10    ; 60/bpm                               | Rr11 & Rr10   | -     | Wr10
2707:  movei #24*65536,R9    ; 24=> 5 bits                            | Rword1    | Cr10-1    | -
2708:                                          | Rword2    | Cr10-2 word1  | -
2709:                                          | -      | Cr10-3    | word2word1 > Wr9
2710:                                          | -      | Cr10-4    | -
2711:                                          | -      | Cr10-5    | -
2712:                                          | -      | Cr10-6    | -
2713:                                          | -      | Cr10-7    | -
2714:                                          | -      | Cr10-8    | -
2715:                                          | -      | Cr10-9    | -
2716:                                          | -      | Cr10-10    | -
2717:                                          | -      | Cr10-11    | -
2718:                                          | -      | Cr10-12    | -
2719:                                          | -      | Cr10-13    | -
2720:                                          | -      | Cr10-14    | -
2721:                                          | -      | Cr10-15    | -
2722:  or  R10,R10                                     | Rr10     | -     | Wr10
2723:                                          | -      | Cr10    | -
2724:  ;shlq #16,R9
2725:  div  R10,R9    ; R9=                                | Rr10 & Rr9   | -     | Wr10
2726:                                          | -      | Cr9-1    | -
2727:                                          | -      | Cr9-2    | -
2728:                                          | -      | Cr9-3    | -
2729:                                          | -      | Cr9-4    | -
2730:                                          | -      | Cr9-5    | -
2731:                                          | -      | Cr9-6    | -
2732:                                          | -      | Cr9-7    | -
2733:                                          | -      | Cr9-8    | -
2734:                                          | -      | Cr9-9    | -
2735:                                          | -      | Cr9-10    | -
2736:                                          | -      | Cr9-11    | -
2737:                                          | -      | Cr9-12    | -
2738:                                          | -      | Cr9-13    | -
2739:                                          | -      | Cr9-14    | -
2740:                                          | -      | Cr9-15    | -
2741:  or  R9,R9                                     | Rr9     | -     | Wr9
2742:                                          |-      | Cr9     | -
2743:  shrq #8,R9    ; R9=frequence replay                            | Rr9     | -     | Wr9
2744:  ;move R9,R11
2745: ; frequence du timer 1
2746:  movei #182150,R10    ; 26593900 / 146 = 182150                          | Rword1    | Cr9     | -
2747:                                          | Rword2    | word1    | Wr9
2748:  div  R9,R10                                     | Rr9 & Rr10   | -     | word2word1 > Wr10
2749:                                          | -      | Cr10-1    | -
2750:                                          | -      | Cr10-2    | -
2751:                                          | -      | Cr10-3    | -
2752:                                          | -      | Cr10-4    | -
2753:                                          | -      | Cr10-5    | -
2754:                                          | -      | Cr10-6    | -
2755:                                          | -      | Cr10-7    | -
2756:                                          | -      | Cr10-8    | -
2757:                                          | -      | Cr10-9    | -
2758:                                          | -      | Cr10-10    | -
2759:                                          | -      | Cr10-11    | -
2760:                                          | -      | Cr10-12    | -
2761:                                          | -      | Cr10-13    | -
2762:                                          | -      | Cr10-14    | -
2763:                                          | -      | Cr10-15    | -
2764:  or  R10,R10                                     | Rr10     | -     | Wr10
2765:                                          | -      | Cr10    | -
2766:  move R10,R13                                     | Rr10     | -     | Wr10
2767:  subq #1,R13     ; -1 pour parametrage du timer 1                        | Rr13     | -     | Wr13
2768: ; 26593900 / 50 = 531�878 => 2 � 73 � 3643 => 146*3643
2769:  movei #JPIT1,r10    ; F10000                              | Rword1    | Cr13    | -
2770:                                          | Rword2    | word1    | Wr13
2771:  movei #145*65536,r9    ; Timer 1 Pre-scaler                          | Rword1    | -     | word2word1 > Wr10
2772:                                          | Rword2    | word1    | -
2773:  ;shlq #16,r12
2774:  or  R13,R9                                     | Rr13 & Rr9   | -     | word2word1 > Wr9
2775:                                          | -      | Cr9     | -
2776:  store r9,(r10)    ; JPIT1 & JPIT2                             | Rr9 & Rr10   | -     | Wr9
2777:  jump  (R12)                                    | Rr12     | Mr10    | -
2778:  addq  #1,R0                                    | Rr0     | WPC     | -
2779: 
2780: 
2781: 
2782: 
2783: ; ------------------- N/A ------------------
2784: DSP_LSP_routine_interruption_Timer2:
2785: ; ------------------- N/A ------------------
2786: 
2787: 
2788: 
2789: ; ------------- main DSP ------------------
2790: DSP_routine_init_DSP:
2791: ; assume run from bank 1
2792:  movei #DSP_ISP+(DSP_STACK_SIZE*4),r31   ; init isp                          | Rword1    | -     | -
2793:                                          | Rword2    | word1    | -
2794:  moveq #0,r1                                     | #0     | -     | -
2795:  moveta r31,r31         ; ISP (bank 0)                         | Rr31     | -     | Wr1
2796:  nop                                        | -      | -     | Wr'31
2797:  movei #DSP_USP+(DSP_STACK_SIZE*4),r31   ; init usp                          | Rword1    | -     | -
2798:                                          | Rword2    | word1    | -
2799: 
2800: ; calculs des frequences deplac� dans DSP
2801: ; sclk I2S
2802:  movei #LSP_DSP_Audio_frequence,R0                                | Rword1    | -     | word2word1 > Wr31
2803:                                          | Rword2    | word1    | -
2804:  movei #frequence_Video_Clock_divisee,R1                              | Rword1    | -     | word2word1 > Wr0
2805:                                          | Rword2    | word1    | -
2806:  load (R1),R1                                     | Rr1     | -     | word2word1 > Wr1
2807:                                          | -      | Mr1     | -
2808:  shlq #8,R1                                     | Rr1     | -     | Wr1
2809:                                          | -      | Cr1     | -
2810:  div  R0,R1                                     | Rr0 & Rr1   | -     | Wr1
2811:  movei #128,R2                                     | Rword1    | Cr1-1    | -
2812:                                          | Rword2    | Cr1-2 word1  | -
2813:                                          | -      | Cr1-3    | word2word1 > Wr2
2814:                                          | -      | Cr1-4    | -
2815:                                          | -      | Cr1-5    | -
2816:                                          | -      | Cr1-6    | -
2817:                                          | -      | Cr1-7    | -
2818:                                          | -      | Cr1-8    | -
2819:                                          | -      | Cr1-9    | -
2820:                                          | -      | Cr1-10    | -
2821:                                          | -      | Cr1-11    | -
2822:                                          | -      | Cr1-12    | -
2823:                                          | -      | Cr1-13    | -
2824:                                          | -      | Cr1-14    | -
2825:                                          | -      | Cr1-15    | -
2826:  add  R2,R1   ; +128 = +0.5                               | Rr2 & Rr1   | -     | Wr1
2827:                                          | -      | Cr1     | -
2828:  shrq #8,R1                                     | Rr1     | -     | Wr1
2829:                                          | -      | Cr1     | -
2830:  subq #1,R1                                     | Rr1     | -     | Wr1
2831:  movei #DSP_parametre_de_frequence_I2S,r2                              | Rword1    | Cr1     | -
2832:                                          | Rword2    | word1    | Wr1
2833:  store R1,(R2)                                     | Rr1 & Rr2   | -     | Wr2
2834: ;calcul inverse
2835:  addq #1,R1                                     | Rr1     | Mr2     | -
2836:                                          | -      | Cr1     | MWrite
2837:  add  R1,R1   ; *2                                 | Rr1     | -     | Wr1
2838:                                          | -      | Cr1     | -
2839:  add  R1,R1   ; *2                                 | Rr1     | -     | Wr1
2840:                                          | -      | Cr1     | -
2841:  shlq #4,R1   ; *16                                 | Rr1     | -     | Wr1
2842:  movei #frequence_Video_Clock,R0                                | Rword1    | Cr1     | -
2843:                                          | Rword2    | word1    | Wr1
2844:  load (R0),R0                                     | Rr0     | -     | word2word1 > Wr0
2845:                                          | -      | Mr0     | -
2846:  div  R1,R0                                     | Rr1 & Rr0   | -     | Wr0
2847:  movei #DSP_frequence_de_replay_reelle_I2S,R2                             | Rword1    | Cr0-1    | -
2848:                                          | Rword2    | Cr0-2  word1 | -
2849:                                          | -      | Cr0-3    | word2word1 > Wr2
2850:                                          | -      | Cr0-4    | -
2851:                                          | -      | Cr0-5    | -
2852:                                          | -      | Cr0-6    | -
2853:                                          | -      | Cr0-7    | -
2854:                                          | -      | Cr0-8    | -
2855:                                          | -      | Cr0-9    | -
2856:                                          | -      | Cr0-10    | -
2857:                                          | -      | Cr0-11    | -
2858:                                          | -      | Cr0-12    | -
2859:                                          | -      | Cr0-13    | -
2860:                                          | -      | Cr0-14    | -
2861:                                          | -      | Cr0-15    | -
2862:  store R0,(R2)                                     | Rr0 & Rr2   | -     | Wr0
2863:  
2864: 
2865: ; init I2S
2866:  movei #SCLK,r10                                    | Rword1    | Mr2     | -
2867:                                          | Rword2    | word1    | MWrite
2868:  movei #SMODE,r11                                    | Rword1    | -     | word2word1 > Wr10
2869:                                          | Rword2    | word1    | -
2870:  movei #DSP_parametre_de_frequence_I2S,r12                              | Rword1    | -     | word2word1 > Wr11
2871:                                          | Rword2    | word1    | -
2872:  movei #%001101,r13   ; SMODE bascule sur RISING                          | Rword1    | -     | word2word1 > Wr12
2873:                                          | Rword2    | word1    | -
2874:  load (r12),r12    ; SCLK                               | Rr12     | -     | word2word1 > Wr13
2875:                                          | -      | Mr12    | -
2876:  store r12,(r10)                                    | Rr12 & Rr10   | -     | Wr12
2877:  store r13,(r11)                                    | Rr13 & Rr11   | Mr10    | -
2878: 
2879: 
2880: ; init Timer 1
2881: ; frq = 24/(60/bpm)
2882:  movei #LSP_BPM_frequence_replay,R11                               | Rword1    | Mr11    | MWrite
2883:                                          | Rword2    | word1    | MWrite
2884:  load (R11),R11                                    | Rr11     | -     | word2word1 > Wr11
2885:  movei #60*256,R10                                    | Rword1    | Mr11    | -
2886:                                          | Rword2    | word1    | Wr11
2887:  ;shlq #8,R10    ; 16 bits de virgule
2888:  div  R11,R10    ; 60/bpm                               | Rr11 & Rr10   | -     | word2word1 > Wr10
2889:  movei #24*65536,R9    ; 24=> 5 bits                            | Rword1    | Cr10-1    | -
2890:                                          | Rword2    | Cr10-2  word1 | -
2891:                                          | -      | Cr10-3    | word2word1 > Wr9
2892:                                          | -      | Cr10-4    | -
2893:                                          | -      | Cr10-5    | -
2894:                                          | -      | Cr10-6    | -
2895:                                          | -      | Cr10-7    | -
2896:                                          | -      | Cr10-8    | -
2897:                                          | -      | Cr10-9    | -
2898:                                          | -      | Cr10-10    | -
2899:                                          | -      | Cr10-11    | -
2900:                                          | -      | Cr10-12    | -
2901:                                          | -      | Cr10-13    | -
2902:                                          | -      | Cr10-14    | -
2903:                                          | -      | Cr10-15    | -
2904:  or  R10,R10                                     | Rr10     | -     | Wr10
2905:                                          | -      | Cr10    | -
2906:  ;shlq #16,R9
2907:  div  R10,R9    ; R9=                                | Rr10 & Rr9   | -     | Wr10
2908:                                          | -      | Cr9-1    | -
2909:                                          | -      | Cr9-2    | -
2910:                                          | -      | Cr9-3    | -
2911:                                          | -      | Cr9-4    | -
2912:                                          | -      | Cr9-5    | -
2913:                                          | -      | Cr9-6    | -
2914:                                          | -      | Cr9-7    | -
2915:                                          | -      | Cr9-8    | -
2916:                                          | -      | Cr9-9    | -
2917:                                          | -      | Cr9-10    | -
2918:                                          | -      | Cr9-11    | -
2919:                                          | -      | Cr9-12    | -
2920:                                          | -      | Cr9-13    | -
2921:                                          | -      | Cr9-14    | -
2922:                                          | -      | Cr9-15    | -
2923:  or  R9,R9                                     | Rr9     | -     | Wr9
2924:                                          | -      | Cr9     | -
2925:  shrq #8,R9    ; R9=frequence replay                            | Rr9     | -     | Wr9
2926:                                          | -      | Cr9     | -
2927:  move R9,R11                                     | Rr9     | -     | Wr9
2928:  
2929: 
2930: ; frequence du timer 1
2931:  movei #182150,R10    ; 26593900 / 146 = 182150                          | Rword1    | -     | Wr11
2932:                                          | Rword2    | word1    | -
2933:  div  R11,R10                                     | Rr11 & Rr10   | -     | word2word1 > Wr10
2934:                                          | -      | Cr10-1    | -
2935:                                          | -      | Cr10-2    | -
2936:                                          | -      | Cr10-3    | -
2937:                                          | -      | Cr10-4    | -
2938:                                          | -      | Cr10-5    | -
2939:                                          | -      | Cr10-6    | -
2940:                                          | -      | Cr10-7    | -
2941:                                          | -      | Cr10-8    | -
2942:                                          | -      | Cr10-9    | -
2943:                                          | -      | Cr10-10    | -
2944:                                          | -      | Cr10-11    | -
2945:                                          | -      | Cr10-12    | -
2946:                                          | -      | Cr10-13    | -
2947:                                          | -      | Cr10-14    | -
2948:                                          | -      | Cr10-15    | -
2949:  or  R10,R10                                     | Rr10     | -     | Wr10
2950:                                          | -      | Cr10    | -
2951:  move R10,R13                                     | Rr10     | -     | Wr10
2952:  
2953:  subq #1,R13     ; -1 pour parametrage du timer 1                        | Rr13     | -     | Wr13
2954:  
2955:  
2956: 
2957: ; 26593900 / 50 = 531�878 => 2 � 73 � 3643 => 146*3643
2958:  movei #JPIT1,r10    ; F10000                              | Rword1    | Cr13    | -
2959:                                          | Rword2    | word1    | Wr13
2960:  ;movei #JPIT2,r11    ; F10002
2961:  movei #145*65536,r12    ; Timer 1 Pre-scaler                          | Rword1    | -     | word2word1 > Wr10
2962:                                          | Rword2    | word1    | -
2963:  ;shlq #16,r12
2964:  or  R13,R12                                     | Rr13 & Rr12   | -     | word2word1 > Wr12
2965:                                          |-      | Cr12    | -
2966:  store r12,(r10)    ; JPIT1 & JPIT2                             | Rr12 & Rr10   | -     | Wr12
2967: 
2968: 
2969: ; init timer 2
2970: 
2971: ; movei #JPIT3,r10    ; F10004
2972: ; movei #JPIT4,r11    ; F10006
2973: 
2974: 
2975: 
2976: ; enable interrupts
2977:  movei #D_FLAGS,r28                                   | Rword1    | Mr10    | -
2978:                                          | Rword2    | word1    | MWrite
2979:  
2980:  movei #D_I2SENA|D_TIM1ENA|REGPAGE,r29   ; I2S+Timer 1                         | Rword1    | -     | word2word1 > Wr28
2981:                                          | Rword2    | word1    | -
2982:  ;movei #D_I2SENA|REGPAGE,r29     ; I2S only
2983:  
2984:  
2985:  ;movei #D_TIM1ENA|REGPAGE,r29     ; Timer 1 only
2986:  ;movei #D_TIM2ENA|REGPAGE,r29     ; Timer 2 only
2987: 
2988:  store r29,(r28)                                    | Rr29 & Rr28   | -     | word2word1 > Wr29
2989: 
2990: DSP_boucle_centrale:
2991:  movei #DSP_boucle_centrale,R20                                | Rword1    | Mr28    | -
2992:                                          | Rword2    | word1    | MWrite
2993:  jump (R20)                                     | Rr20     | -     | word2word1 > Wr20
2994:  nop                                        | -      | WPC     | -
2995:  
2996:  
2997:  .phrase
2998: 
2999: DSP_frequence_de_replay_reelle_I2S:     dc.l   0
3000: DSP_UN_sur_frequence_de_replay_reelle_I2S:   dc.l   0
3001: DSP_parametre_de_frequence_I2S:      dc.l   0
3002: 
3003: ; variables Paula
3004: ; channel 0
3005: LSP_DSP_PAULA_AUD0L:    dc.l   silence<<nb_bits_virgule_offset   ; Audio channel 0 location
3006: LSP_DSP_PAULA_AUD0LEN:    dc.l   (silence+4)<<nb_bits_virgule_offset   ; en bytes !
3007: LSP_DSP_PAULA_AUD0PER:    dc.l   0    ; period , a transformer en increment
3008: LSP_DSP_PAULA_AUD0VOL:    dc.l   0    ; volume
3009: LSP_DSP_PAULA_AUD0DAT:    dc.l   0    ; long word en cours d'utilisation / stock� / buffering
3010: LSP_DSP_PAULA_internal_location0: dc.l   silence<<nb_bits_virgule_offset    ; internal register : location of the sample currently played
3011: LSP_DSP_PAULA_internal_increment0: dc.l   0    ; internal register : increment linked to period 16:16
3012: LSP_DSP_PAULA_internal_length0:  dc.l   (silence+4)<<nb_bits_virgule_offset   ; internal register : length of the sample currently played
3013: LSP_DSP_repeat_pointeur0:   dc.l   silence<<nb_bits_virgule_offset
3014: LSP_DSP_repeat_length0:    dc.l   (silence+4)<<nb_bits_virgule_offset
3015: ; channel 1
3016: LSP_DSP_PAULA_AUD1L:    dc.l   silence<<nb_bits_virgule_offset   ; Audio channel 0 location
3017: LSP_DSP_PAULA_AUD1LEN:    dc.l   (silence+4)<<nb_bits_virgule_offset   ; en bytes !
3018: LSP_DSP_PAULA_AUD1PER:    dc.l   0    ; period , a transformer en increment
3019: LSP_DSP_PAULA_AUD1VOL:    dc.l   0    ; volume
3020: LSP_DSP_PAULA_AUD1DAT:    dc.l   0    ; long word en cours d'utilisation / stock� / buffering
3021: LSP_DSP_PAULA_internal_location1: dc.l   silence<<nb_bits_virgule_offset    ; internal register : location of the sample currently played
3022: LSP_DSP_PAULA_internal_increment1: dc.l   0    ; internal register : increment linked to period 16:16
3023: LSP_DSP_PAULA_internal_length1:  dc.l   (silence+4)<<nb_bits_virgule_offset   ; internal register : length of the sample currently played
3024: LSP_DSP_repeat_pointeur1:   dc.l   silence<<nb_bits_virgule_offset
3025: LSP_DSP_repeat_length1:    dc.l   (silence+4)<<nb_bits_virgule_offset
3026: ; channel 2
3027: LSP_DSP_PAULA_AUD2L:    dc.l   silence<<nb_bits_virgule_offset   ; Audio channel 0 location
3028: LSP_DSP_PAULA_AUD2LEN:    dc.l   (silence+4)<<nb_bits_virgule_offset   ; en bytes !
3029: LSP_DSP_PAULA_AUD2PER:    dc.l   0    ; period , a transformer en increment
3030: LSP_DSP_PAULA_AUD2VOL:    dc.l   0    ; volume
3031: LSP_DSP_PAULA_AUD2DAT:    dc.l   0    ; long word en cours d'utilisation / stock� / buffering
3032: LSP_DSP_PAULA_internal_location2: dc.l   silence<<nb_bits_virgule_offset    ; internal register : location of the sample currently played
3033: LSP_DSP_PAULA_internal_increment2: dc.l   0    ; internal register : increment linked to period 16:16
3034: LSP_DSP_PAULA_internal_length2:  dc.l   (silence+4)<<nb_bits_virgule_offset   ; internal register : length of the sample currently played
3035: LSP_DSP_repeat_pointeur2:   dc.l   silence<<nb_bits_virgule_offset
3036: LSP_DSP_repeat_length2:    dc.l   (silence+4)<<nb_bits_virgule_offset
3037: ; channel 3
3038: LSP_DSP_PAULA_AUD3L:    dc.l   silence<<nb_bits_virgule_offset   ; Audio channel 0 location
3039: LSP_DSP_PAULA_AUD3LEN:    dc.l   (silence+4)<<nb_bits_virgule_offset   ; en bytes !
3040: LSP_DSP_PAULA_AUD3PER:    dc.l   0    ; period , a transformer en increment
3041: LSP_DSP_PAULA_AUD3VOL:    dc.l   0    ; volume
3042: LSP_DSP_PAULA_AUD3DAT:    dc.l   0    ; long word en cours d'utilisation / stock� / buffering
3043: LSP_DSP_PAULA_internal_location3: dc.l   silence<<nb_bits_virgule_offset    ; internal register : location of the sample currently played
3044: LSP_DSP_PAULA_internal_increment3: dc.l   0    ; internal register : increment linked to period 16:16
3045: LSP_DSP_PAULA_internal_length3:  dc.l   (silence+4)<<nb_bits_virgule_offset   ; internal register : length of the sample currently played
3046: LSP_DSP_repeat_pointeur3:   dc.l   silence<<nb_bits_virgule_offset
3047: LSP_DSP_repeat_length3:    dc.l   (silence+4)<<nb_bits_virgule_offset
3048: 
3049: 
3050: LSPVars:
3051: m_byteStream:  dc.l 0 ;  0 :  byte stream       0
3052: m_wordStream:  dc.l 0 ;  4 :  word stream       1
3053: m_codeTableAddr: dc.l 0 ;  8 :  code table addr      2
3054: m_escCodeRewind: dc.l 0 ; 12 :  rewind special escape code   3
3055: m_escCodeSetBpm: dc.l 0 ; 16 :  set BPM escape code     4
3056: m_lspInstruments: dc.l 0 ; 20 :  LSP instruments table addr   5
3057: m_relocDone:  dc.l 0 ; 24 :  reloc done flag      6
3058: m_currentBpm:  dc.l 0 ; 28 :  current BPM       7
3059: m_byteStreamLoop: dc.l 0 ; 32 :  byte stream loop point    8
3060: m_wordStreamLoop: dc.l 0 ; 36 :  word stream loop point    9
3061: 
3062: 
3063: 
3064: LSP_BPM_frequence_replay:  dc.l   25
3065: 
3066: EDZTMP1:  dc.l   0
3067: 
3068: ;---------------------
3069: ; FIN DE LA RAM DSP
3070: YM_DSP_fin:
3071: ;---------------------
3072: 
3073: 
3074: SOUND_DRIVER_SIZE   .equ   YM_DSP_fin-DSP_base_memoire
3075:  .print "--- Sound driver code size (DSP): ", /u SOUND_DRIVER_SIZE, " bytes / 8192 ---"
3076: 
3077: 
3078:         .68000
3079:   .dphrase
3080: ob_liste_originale:                ; This is the label you will use to address this in 68K code
3081:         .objproc           ; Engage the OP assembler
3082:   .dphrase
3083: 
3084:         .org    ob_list_courante    ; Tell the OP assembler where the list will execute
3085: ;
3086:         branch      VC < 0, .stahp        ; Branch to the STOP object if VC < 0
3087:         branch      VC > 265, .stahp       ; Branch to the STOP object if VC > 241
3088:    ; bitmap data addr, xloc, yloc, dwidth, iwidth, iheight, bpp, pallete idx, flags, firstpix, pitch
3089:         bitmap      ecran1, 16, 26, nb_octets_par_ligne/8, nb_octets_par_ligne/8, 246-26,3
3090:   ;bitmap  ecran1,16,24,40,40,255,3
3091:         jump        .haha
3092: .stahp:
3093:         stop
3094: .haha:
3095:         jump        .stahp
3096:  
3097:   .68000
3098:   .dphrase
3099: fin_ob_liste_originale:
3100: 
3101: 
3102:    .data
3103:  .dphrase
3104: 
3105: stoplist:  dc.l 0,4
3106: 
3107: silence:  
3108:   dc.b   $0,$0,$0,$0
3109:   dc.b   $0,$0,$0,$0
3110:   dc.b   $0,$0,$0,$0
3111: 
3112: 
3113: debut_ram_libre_DSP:  dc.l   YM_DSP_fin
3114: debut_ram_libre:   dc.l   FIN_RAM
3115:  even
3116: 
3117: fonte:
3118:  .include "fonte1plan.s"
3119:  even
3120: 
3121: couleur_char:    dc.w  25
3122: curseur_x:     dc.w  0
3123: curseur_y:     dc.w  curseur_Y_min
3124:   even
3125:  
3126: chaine_LSP:      dc.b "LSP player for Jaguar",10,0
3127: chaine_playing_LSP:    dc.b "Now playing module",10,0
3128: chaine_BPM_init_LSP:   dc.b " bpm.",0
3129: chaine_Hz_init_LSP:    dc.b " Hz.",10,0
3130: chaine_replay_frequency:  dc.b "Replay frequency : ",0
3131: chaine_RAM_DSP:     dc.b "DSP RAM available while running : ",0
3132: chaine_entete_debug_module:  dc.b "location incremen offset   length  ",10,0
3133: chaine_entete_debug_module2: dc.b "location length   period   volume",10,0
3134:   even
3135: 
3136:  .phrase
3137: LSP_module_music_data:
3138:  .incbin   "elysium.lsmusic"
3139:  ;.incbin   "LSP/d.lsmusic"
3140:  ;.incbin   "LSP/k.lsmusic"
3141:  ;.incbin   "LSP/testsamples4v.lsmusic"
3142:  .phrase
3143: LSP_module_sound_bank:
3144:  .incbin   "elysium.lsbank"
3145:  ;.incbin   "LSP/d.lsbank"
3146:  ;.incbin   "LSP/k.lsbank"
3147:  ;.incbin   "LSP/testsamples4v.lsbank"
3148:  .phrase
3149: 
3150:  .bss
3151:  .phrase
3152: DEBUT_BSS:
3153: ;EDZ_compteur_reset_offset_entier_voie_A:   ds.l 1
3154: 
3155:  .phrase
3156: frequence_Video_Clock:     ds.l    1
3157: frequence_Video_Clock_divisee :   ds.l    1
3158: 
3159: 
3160: 
3161: _50ou60hertz:   ds.l 1
3162: ntsc_flag:    ds.w 1
3163: a_hdb:            ds.w   1
3164: a_hde:            ds.w   1
3165: a_vdb:            ds.w   1
3166: a_vde:            ds.w   1
3167: width:            ds.w   1
3168: height:           ds.w   1
3169: taille_liste_OP:  ds.l 1
3170: vbl_counter:   ds.l 1
3171: 
3172:             .dphrase
3173: ecran1:    ds.b  320*256    ; 8 bitplanes
3174:  .phrase
3175: FIN_RAM:
3176: 
3177: 
3178: