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: