Annotation of doom/music.gas, revision 1.1

1.1     ! root        1:  .long
        !             2:        .dc.l   codeend-_music_dspcode
        !             3: _music_dspcode::
        !             4:  .dsp
        !             5:        .org $f1b140
        !             6: 
        !             7: S_LE   .ccdef  $14     ; PL
        !             8: U_LE   .ccdef  $04     ; CC
        !             9: S_GT    .ccdef $18     ; MI
        !            10: U_GT    .ccdef $08     ; CS
        !            11: 
        !            12: S_LT   .ccdef  $15             ; PL+NE
        !            13: U_LT   .ccdef  $05             ; CC+NE
        !            14: 
        !            15: FP .equr r14
        !            16: scratch .equr r10
        !            17: scratch2 .equr r11
        !            18: RETURNVALUE .equr r29
        !            19: RETURNPOINT .equr r28
        !            20: MATH_A .equr r27
        !            21: MATH_B .equr r26
        !            22: MATH_C .equr r25
        !            23: MATH_RTS .equr r24
        !            24: MATH_SIGN .equr r23
        !            25: 
        !            26:        movei   #codestart,scratch
        !            27:        jump    T,(scratch)
        !            28:        nop
        !            29: 
        !            30: 
        !            31: GPU_IMUL:
        !            32:  move MATH_A,MATH_SIGN
        !            33:  xor MATH_B,MATH_SIGN
        !            34:  abs MATH_A
        !            35:  abs MATH_B
        !            36:  move MATH_A,MATH_C
        !            37:  mult MATH_B,MATH_C
        !            38:  move MATH_B,scratch2
        !            39:  shrq #16,scratch2
        !            40:  mult MATH_A,scratch2
        !            41:  shlq #16,scratch2
        !            42:  add scratch2,MATH_C
        !            43:  move MATH_A,scratch2
        !            44:  shrq #16,scratch2
        !            45:  mult MATH_B,scratch2
        !            46:  shlq #16,scratch2
        !            47:  add scratch2, MATH_C
        !            48:  btst #31,MATH_SIGN
        !            49:  jump EQ,(MATH_RTS)
        !            50:  nop
        !            51:  jump T,(MATH_RTS)
        !            52:  neg MATH_C
        !            53:        
        !            54: ;===========================================================================
        !            55: ;      
        !            56: _M_WriteOutSamples:
        !            57: ;
        !            58: ;===========================================================================
        !            59: 
        !            60: sw_source      .equr   r16
        !            61: sw_samples     .equr   r17
        !            62: sw_dest                .equr   r18
        !            63: sw_sample      .equr   r19
        !            64: sw_combined    .equr   r20
        !            65: sw_zero                .equr   r21
        !            66: sw_looppoint .equr     r22
        !            67: 
        !            68:        .extern _musictime
        !            69: 
        !            70:        load    (FP),sw_samples
        !            71:        
        !            72:        moveq   #0,sw_zero
        !            73:        
        !            74:        movei   #_musictime,scratch2
        !            75:        load    (scratch2),sw_dest
        !            76: 
        !            77:        shlq    #1,sw_dest
        !            78:        movei   #$1fff,scratch
        !            79:        and             scratch,sw_dest
        !            80:        movei   #$1f0000,scratch
        !            81:        add             scratch,sw_dest                         ; sw_dest = externbuffer[sfxtime*2]
        !            82:        
        !            83:        movei   #_internal_buffer,sw_source
        !            84:        movei   #satloop,sw_looppoint
        !            85:        
        !            86:        load    (sw_source),sw_sample           ; delay slotted
        !            87: satloop:
        !            88:        store   sw_zero,(sw_source)
        !            89:        sharq   #8,sw_sample
        !            90:        addq    #4,sw_source
        !            91:        sat16s  sw_sample
        !            92: 
        !            93:        storew  sw_sample,(sw_dest)
        !            94:        addqmod #2,sw_dest
        !            95:                
        !            96:        subq    #1,sw_samples
        !            97:        jump    NE,(sw_looppoint)
        !            98:        load    (sw_source),sw_sample           ; delay slot
        !            99:        
        !           100:        jump    T,(RETURNPOINT)
        !           101:        nop
        !           102:        
        !           103: ;===========================================================================
        !           104: 
        !           105: ;====================
        !           106: _M_PaintSingleChannel::
        !           107: ;3 dag registers  8 register variables
        !           108: ;localoffset:0  regoffset:4  argoffset:4
        !           109: ;====================
        !           110: ps_channel     .equr   r15
        !           111: ps_samples     .equr   r16
        !           112: ps_dest                .equr   r17
        !           113: ps_source      .equr   r18
        !           114: ps_sourcefrac  .equr   r19
        !           115: ps_sourcestep  .equr   r20
        !           116: ps_vol                 .equr   r21
        !           117: ps_data                        .equr   r24
        !           118: ps_looppoint   .equr   r25
        !           119: ps_128                 .equr   r26
        !           120: ps_ffff                        .equr   r27
        !           121: 
        !           122:        load    (FP),ps_channel
        !           123:        load    (FP+1),ps_samples
        !           124:        movei   #_internal_buffer,ps_dest
        !           125: 
        !           126:        load    (FP+2), scratch ; get new 
        !           127:        shlq    #2, scratch
        !           128:        add             scratch, ps_dest
        !           129:        
        !           130:        load    (ps_channel+1),ps_source
        !           131:        load    (ps_channel+4),ps_sourcefrac
        !           132:        load    (ps_channel+3),ps_sourcestep
        !           133:        load    (ps_channel+2),ps_vol
        !           134: 
        !           135:        shrq    #1, ps_vol
        !           136: 
        !           137:        movei   #addloop,ps_looppoint
        !           138:        movei   #128,ps_128
        !           139:        movei   #$ffff,ps_ffff
        !           140: 
        !           141:        loadb   (ps_source),ps_data             ; delay slotted
        !           142: addloop:
        !           143:        add             ps_sourcestep,ps_sourcefrac
        !           144:        move    ps_sourcefrac,scratch
        !           145:        sub             ps_128,ps_data
        !           146:        shrq    #16,scratch
        !           147:        imult   ps_vol,ps_data
        !           148: 
        !           149:        load    (ps_dest),scratch2
        !           150:        and             ps_ffff,ps_sourcefrac
        !           151:        add             ps_data,scratch2
        !           152:        add             scratch,ps_source
        !           153:        store   scratch2,(ps_dest)
        !           154:        
        !           155:        subq    #1,ps_samples
        !           156:        addqt   #4,ps_dest
        !           157:        jump    NE,(ps_looppoint)       
        !           158:        loadb   (ps_source),ps_data             ; delay slot
        !           159: 
        !           160:        store   ps_source,(ps_channel+1)
        !           161:        jump    T,(RETURNPOINT)
        !           162:        store   ps_sourcefrac,(ps_channel+4)    ; delay slot
        !           163:        
        !           164: 
        !           165: codestart:
        !           166: 
        !           167: ;====================
        !           168: _M_PaintMusic::
        !           169: ;6 dag registers  3 register variables
        !           170: ;localoffset:4  regoffset:4  argoffset:44
        !           171: ;====================
        !           172:  movei #44,scratch
        !           173:  sub scratch,FP
        !           174: 
        !           175:  movei #_samplecount,r0
        !           176:  load (r0),r0
        !           177:  movei #8192,r1
        !           178:  add r1,r0
        !           179:  move r0,r17 ;(actual_endtime)
        !           180: 
        !           181:  movei #L43,r0
        !           182:  jump T,(r0)
        !           183:  nop
        !           184: 
        !           185: L42:
        !           186: 
        !           187:  movei #_musictime,r0
        !           188:  load (r0),r0
        !           189:  movei #_next_eventtime,r1
        !           190:  load (r1),r1
        !           191:  cmp r0,r1
        !           192:  movei #L45,scratch
        !           193:  jump NE,(scratch)
        !           194:  nop
        !           195: 
        !           196:  movei #_next_eventtime,r0
        !           197:  load (r0),r1
        !           198:  movei #_music,r2
        !           199:  load (r2),r3
        !           200:  loadb (r3),r4
        !           201:  movei #_samples_per_midiclock,r5
        !           202:  load (r5),r5
        !           203:  move r4,MATH_A
        !           204:  movei #L60,MATH_RTS
        !           205:  movei #GPU_IMUL,scratch
        !           206:  jump T,(scratch)
        !           207:  move r5,MATH_B ; delay slot
        !           208: L60:
        !           209:  move MATH_C,r4
        !           210:  add r4,r1
        !           211:  store r1,(r0)
        !           212:  move r3,r0
        !           213:  addq #1,r0
        !           214:  store r0,(r2)
        !           215: 
        !           216: L45:
        !           217: 
        !           218:  movei #_next_eventtime,r0
        !           219:  load (r0),r0
        !           220:  cmp r17,r0 ;(actual_endtime)
        !           221:  movei #L47,scratch
        !           222:  jump EQ,(scratch)
        !           223:  nop
        !           224:  jump MI,(scratch)
        !           225:  nop
        !           226: 
        !           227:  move r17,r16 ;(actual_endtime)(stop_time)
        !           228: 
        !           229:  movei #L48,r0
        !           230:  jump T,(r0)
        !           231:  nop
        !           232: 
        !           233: L47:
        !           234: 
        !           235:  movei #_next_eventtime,r0
        !           236:  load (r0),r0
        !           237:  move r0,r16 ;(stop_time)
        !           238: 
        !           239: L48:
        !           240: 
        !           241:  movei #256,r0
        !           242:  move r0,r15 ;(samples)
        !           243: 
        !           244:  movei #L50,r0
        !           245:  jump T,(r0)
        !           246:  nop
        !           247: 
        !           248: L49:
        !           249: 
        !           250:  movei #_musictime,r0
        !           251:  load (r0),r0
        !           252:  move r16,r1 ;(stop_time)
        !           253:  sub r0,r1
        !           254:  cmp r1,r15 ;(samples)
        !           255:  movei #L52,scratch
        !           256:  jump EQ,(scratch)
        !           257:  nop
        !           258:  jump MI,(scratch)
        !           259:  nop
        !           260: 
        !           261:  movei #_musictime,r0
        !           262:  load (r0),r0
        !           263:  move r16,r1 ;(stop_time)
        !           264:  sub r0,r1
        !           265:  move r1,r15 ;(samples)
        !           266: 
        !           267: L52:
        !           268: 
        !           269:  store r15,(FP) ; arg[] ;(samples)
        !           270:  movei #_M_PaintUnsatSound,r0
        !           271:  store r28,(FP+1) ; push ;(RETURNPOINT)
        !           272:  store r17,(FP+2) ; push ;(actual_endtime)
        !           273:  store r16,(FP+3) ; push ;(stop_time)
        !           274:  movei #L61,RETURNPOINT
        !           275:  jump T,(r0)
        !           276:  store r15,(FP+4) ; delay slot push ;(samples)
        !           277: L61:
        !           278:  load (FP+2),r17 ; pop ;(actual_endtime)
        !           279:  load (FP+3),r16 ; pop ;(stop_time)
        !           280:  load (FP+4),r15 ; pop ;(samples)
        !           281:  load (FP+1), RETURNPOINT ; pop
        !           282: 
        !           283:  store r15,(FP) ; arg[] ;(samples)
        !           284:  movei #_M_WriteOutSamples,r0
        !           285:  store r28,(FP+1) ; push ;(RETURNPOINT)
        !           286:  store r17,(FP+2) ; push ;(actual_endtime)
        !           287:  store r16,(FP+3) ; push ;(stop_time)
        !           288:  movei #L62,RETURNPOINT
        !           289:  jump T,(r0)
        !           290:  store r15,(FP+4) ; delay slot push ;(samples)
        !           291: L62:
        !           292:  load (FP+2),r17 ; pop ;(actual_endtime)
        !           293:  load (FP+3),r16 ; pop ;(stop_time)
        !           294:  load (FP+4),r15 ; pop ;(samples)
        !           295:  load (FP+1), RETURNPOINT ; pop
        !           296: 
        !           297:  movei #_musictime,r0
        !           298:  load (r0),r1
        !           299:  add r15,r1 ;(samples)
        !           300:  store r1,(r0)
        !           301: 
        !           302: L50:
        !           303: 
        !           304:  movei #_musictime,r0
        !           305:  load (r0),r0
        !           306:  cmp r0,r16 ;(stop_time)
        !           307:  movei #L49,scratch
        !           308:  jump NE,(scratch)
        !           309:  nop
        !           310: 
        !           311:  movei #_music,r0
        !           312:  load (r0),r0
        !           313:  movei #_music_end,r1
        !           314:  load (r1),r1
        !           315:  cmp r0,r1
        !           316:  movei #L54,scratch
        !           317:  jump NE,(scratch)
        !           318:  nop
        !           319: 
        !           320:  movei #_music,r0
        !           321:  movei #_music_start,r1
        !           322:  load (r1),r1
        !           323:  store r1,(r0)
        !           324:  load (r0),r0
        !           325:  moveq #0,r1
        !           326:  cmp r0,r1
        !           327:  movei #L56,scratch
        !           328:  jump EQ,(scratch)
        !           329:  nop
        !           330: 
        !           331:  movei #_music,r0
        !           332:  load (r0),r1
        !           333:  addq #1,r1
        !           334:  store r1,(r0)
        !           335: 
        !           336: L56:
        !           337: 
        !           338: L54:
        !           339: 
        !           340:  movei #_musictime,r0
        !           341:  load (r0),r0
        !           342:  movei #_next_eventtime,r1
        !           343:  load (r1),r1
        !           344:  cmp r0,r1
        !           345:  movei #L58,scratch
        !           346:  jump NE,(scratch)
        !           347:  nop
        !           348:  movei #_M_GetEvent,r0
        !           349:  store r28,(FP+1) ; push ;(RETURNPOINT)
        !           350:  store r17,(FP+2) ; push ;(actual_endtime)
        !           351:  store r16,(FP+3) ; push ;(stop_time)
        !           352:  movei #L63,RETURNPOINT
        !           353:  jump T,(r0)
        !           354:  store r15,(FP+4) ; delay slot push ;(samples)
        !           355: L63:
        !           356:  load (FP+2),r17 ; pop ;(actual_endtime)
        !           357:  load (FP+3),r16 ; pop ;(stop_time)
        !           358:  load (FP+4),r15 ; pop ;(samples)
        !           359:  load (FP+1), RETURNPOINT ; pop
        !           360:  moveq #0,r0
        !           361:  cmp r29,r0 ;(RETURNVALUE)
        !           362:  movei #L58,scratch
        !           363:  jump EQ,(scratch)
        !           364:  nop
        !           365: 
        !           366:  movei #L44,r0
        !           367:  jump T,(r0)
        !           368:  nop
        !           369: 
        !           370: L58:
        !           371: 
        !           372: L43:
        !           373: 
        !           374:  movei #_musictime,r0
        !           375:  load (r0),r0
        !           376:  cmp r0,r17 ;(actual_endtime)
        !           377:  movei #L42,scratch
        !           378:  jump NE,(scratch)
        !           379:  nop
        !           380: 
        !           381: L44:
        !           382: 
        !           383: 
        !           384: L41:
        !           385:  movei #44,scratch
        !           386:  jump T,(RETURNPOINT)
        !           387:  add scratch,FP ; delay slot
        !           388: 
        !           389: ;====================
        !           390: _M_GetEvent::
        !           391: ;6 dag registers  2 register variables
        !           392: ;localoffset:8  regoffset:12  argoffset:48
        !           393: ;====================
        !           394:  movei #48,scratch
        !           395:  sub scratch,FP
        !           396: 
        !           397:  movei #_music,r0
        !           398:  load (r0),r1
        !           399:  loadb (r1),r2
        !           400:  move r2,r15 ;(cmd)
        !           401:  moveq #28,r2
        !           402:  move r15,r3 ;(cmd)
        !           403:  moveq #15,r4
        !           404:  move r3,r5
        !           405:  and r4,r5
        !           406:  move r5,r4
        !           407:  move r2,MATH_A
        !           408:  movei #L83,MATH_RTS
        !           409:  movei #GPU_IMUL,scratch
        !           410:  jump T,(scratch)
        !           411:  move r4,MATH_B ; delay slot
        !           412: L83:
        !           413:  move MATH_C,r2
        !           414:  movei #_music_channels,r4
        !           415:  add r4,r2
        !           416:  move r2,r16 ;(ch)
        !           417:  movei #240,r2
        !           418:  and r2,r3
        !           419:  move r3,r2
        !           420:  move r2,r15 ;(cmd)
        !           421:  addq #1,r1
        !           422:  store r1,(r0)
        !           423:  move r15,r0 ;(cmd)
        !           424:  movei #48,r1
        !           425:  cmp r0,r1
        !           426:  movei #L65,scratch
        !           427:  jump NE,(scratch)
        !           428:  nop
        !           429: 
        !           430:  movei #_samples_per_midiclock,r0
        !           431:  movei #_music,r1
        !           432:  load (r1),r2
        !           433:  loadb (r2),r3
        !           434:  shlq #24,r3
        !           435:  store r3,(r0)
        !           436:  load (r0),r3
        !           437:  move r2,r4
        !           438:  addq #1,r4
        !           439:  loadb (r4),r4
        !           440:  shlq #16,r4
        !           441:  add r4,r3
        !           442:  store r3,(r0)
        !           443:  load (r0),r3
        !           444:  move r2,r4
        !           445:  addq #2,r4
        !           446:  loadb (r4),r4
        !           447:  shlq #8,r4
        !           448:  add r4,r3
        !           449:  store r3,(r0)
        !           450:  load (r0),r3
        !           451:  move r2,r4
        !           452:  addq #3,r4
        !           453:  loadb (r4),r4
        !           454:  add r4,r3
        !           455:  store r3,(r0)
        !           456:  move r2,r0
        !           457:  addq #4,r0
        !           458:  store r0,(r1)
        !           459: 
        !           460:  movei #L66,r0
        !           461:  jump T,(r0)
        !           462:  nop
        !           463: 
        !           464: L65:
        !           465: 
        !           466:  move r15,r0 ;(cmd)
        !           467:  moveq #16,r1
        !           468:  cmp r0,r1
        !           469:  movei #L67,scratch
        !           470:  jump NE,(scratch)
        !           471:  nop
        !           472: 
        !           473:  move FP,r0
        !           474:  addq #8,r0 ; &instrument
        !           475:  movei #_music,r1
        !           476:  load (r1),r2
        !           477:  loadb (r2),r3
        !           478:  store r3,(r0)
        !           479:  addq #1,r2
        !           480:  store r2,(r1)
        !           481:  load (r0),r0
        !           482:  shlq #2,r0
        !           483:  movei #_instruments,r1
        !           484:  add r1,r0
        !           485:  load (r0),r0
        !           486:  store r0,(r16) ;(ch)
        !           487: 
        !           488:  move r16,r0 ;(ch)
        !           489:  addq #8,r0
        !           490:  movei #_music,r1
        !           491:  load (r1),r1
        !           492:  loadb (r1),r1
        !           493:  movei #_sfxvolume,r2
        !           494:  load (r2),r2
        !           495:  move r1,MATH_A
        !           496:  movei #L84,MATH_RTS
        !           497:  movei #GPU_IMUL,scratch
        !           498:  jump T,(scratch)
        !           499:  move r2,MATH_B ; delay slot
        !           500: L84:
        !           501:  move MATH_C,r1
        !           502:  store r1,(r0)
        !           503: 
        !           504:  movei #_music,r0
        !           505:  load (r0),r1
        !           506:  moveq #1,r2
        !           507:  add r2,r1
        !           508:  store r1,(r0)
        !           509:  load (r0),r1
        !           510:  add r2,r1
        !           511:  store r1,(r0)
        !           512:  move r16,r1 ;(ch)
        !           513:  addq #12,r1
        !           514:  load (r0),r0
        !           515:  loadb (r0),r3
        !           516:  shlq #16,r3
        !           517:  move r0,r4
        !           518:  add r2,r4
        !           519:  loadb (r4),r2
        !           520:  shlq #8,r2
        !           521:  add r2,r3
        !           522:  addq #2,r0
        !           523:  loadb (r0),r0
        !           524:  move r3,r2
        !           525:  add r0,r2
        !           526:  store r2,(r1)
        !           527: 
        !           528:  movei #_music,r0
        !           529:  load (r0),r1
        !           530:  addq #3,r1
        !           531:  store r1,(r0)
        !           532:  move r16,r0 ;(ch)
        !           533:  addq #4,r0
        !           534:  load (r16),r1 ;(ch)
        !           535:  addq #28,r1
        !           536:  store r1,(r0)
        !           537: 
        !           538:  move r16,r0 ;(ch)
        !           539:  addq #16,r0
        !           540:  moveq #0,r1
        !           541:  store r1,(r0)
        !           542: 
        !           543:  move r16,r0 ;(ch)
        !           544:  addq #20,r0
        !           545:  moveq #0,r1
        !           546:  store r1,(r0)
        !           547: 
        !           548:  store r16,(FP) ; arg[] ;(ch)
        !           549:  movei #_musictime,r0
        !           550:  load (r0),r0
        !           551:  or r0,scratch ; scoreboard bug
        !           552:  store r0,(FP+1) ; arg[]
        !           553:  movei #_M_CalculateEndTime,r0
        !           554:  store r28,(FP+3) ; push ;(RETURNPOINT)
        !           555:  store r16,(FP+4) ; push ;(ch)
        !           556:  movei #L85,RETURNPOINT
        !           557:  jump T,(r0)
        !           558:  store r15,(FP+5) ; delay slot push ;(cmd)
        !           559: L85:
        !           560:  load (FP+4),r16 ; pop ;(ch)
        !           561:  load (FP+5),r15 ; pop ;(cmd)
        !           562:  load (FP+3), RETURNPOINT ; pop
        !           563: 
        !           564:  movei #L68,r0
        !           565:  jump T,(r0)
        !           566:  nop
        !           567: 
        !           568: L67:
        !           569: 
        !           570:  move r15,r0 ;(cmd)
        !           571:  movei #32,r1
        !           572:  cmp r0,r1
        !           573:  movei #L69,scratch
        !           574:  jump NE,(scratch)
        !           575:  nop
        !           576: 
        !           577:  move r16,r0 ;(ch)
        !           578:  addq #24,r0
        !           579:  moveq #0,r1
        !           580:  store r1,(r0)
        !           581: 
        !           582:  movei #L70,r0
        !           583:  jump T,(r0)
        !           584:  nop
        !           585: 
        !           586: L69:
        !           587: 
        !           588:  move r15,r0 ;(cmd)
        !           589:  movei #64,r1
        !           590:  cmp r0,r1
        !           591:  movei #L71,scratch
        !           592:  jump NE,(scratch)
        !           593:  nop
        !           594: 
        !           595:  move r16,r0 ;(ch)
        !           596:  addq #8,r0
        !           597:  movei #_music,r1
        !           598:  load (r1),r1
        !           599:  loadb (r1),r1
        !           600:  movei #_sfxvolume,r2
        !           601:  load (r2),r2
        !           602:  move r1,MATH_A
        !           603:  movei #L86,MATH_RTS
        !           604:  movei #GPU_IMUL,scratch
        !           605:  jump T,(scratch)
        !           606:  move r2,MATH_B ; delay slot
        !           607: L86:
        !           608:  move MATH_C,r1
        !           609:  store r1,(r0)
        !           610: 
        !           611:  movei #_music,r0
        !           612:  load (r0),r1
        !           613:  addq #2,r1
        !           614:  store r1,(r0)
        !           615: 
        !           616:  movei #L72,r0
        !           617:  jump T,(r0)
        !           618:  nop
        !           619: 
        !           620: L71:
        !           621: 
        !           622:  move r15,r0 ;(cmd)
        !           623:  movei #80,r1
        !           624:  cmp r0,r1
        !           625:  movei #L73,scratch
        !           626:  jump NE,(scratch)
        !           627:  nop
        !           628: 
        !           629:  move r16,r0 ;(ch)
        !           630:  addq #12,r0
        !           631:  movei #_music,r1
        !           632:  load (r1),r1
        !           633:  loadb (r1),r2
        !           634:  shlq #16,r2
        !           635:  move r1,r3
        !           636:  addq #1,r3
        !           637:  loadb (r3),r3
        !           638:  shlq #8,r3
        !           639:  add r3,r2
        !           640:  addq #2,r1
        !           641:  loadb (r1),r1
        !           642:  add r1,r2
        !           643:  store r2,(r0)
        !           644: 
        !           645:  movei #_music,r0
        !           646:  load (r0),r1
        !           647:  addq #3,r1
        !           648:  store r1,(r0)
        !           649:  move r16,r0 ;(ch)
        !           650:  addq #24,r0
        !           651:  load (r0),r0
        !           652:  movei #_musictime,r1
        !           653:  load (r1),r1
        !           654:  cmp r0,r1
        !           655:  movei #L74,scratch
        !           656:  jump CC,(scratch)
        !           657:  nop
        !           658: 
        !           659:  store r16,(FP) ; arg[] ;(ch)
        !           660:  movei #_musictime,r0
        !           661:  load (r0),r0
        !           662:  or r0,scratch ; scoreboard bug
        !           663:  store r0,(FP+1) ; arg[]
        !           664:  movei #_M_CalculateEndTime,r0
        !           665:  store r28,(FP+3) ; push ;(RETURNPOINT)
        !           666:  store r16,(FP+4) ; push ;(ch)
        !           667:  movei #L87,RETURNPOINT
        !           668:  jump T,(r0)
        !           669:  store r15,(FP+5) ; delay slot push ;(cmd)
        !           670: L87:
        !           671:  load (FP+4),r16 ; pop ;(ch)
        !           672:  load (FP+5),r15 ; pop ;(cmd)
        !           673:  load (FP+3), RETURNPOINT ; pop
        !           674: 
        !           675:  movei #L74,r0
        !           676:  jump T,(r0)
        !           677:  nop
        !           678: 
        !           679: L73:
        !           680: 
        !           681:  move r15,r0 ;(cmd)
        !           682:  moveq #0,r1
        !           683:  cmp r0,r1
        !           684:  movei #L77,scratch
        !           685:  jump NE,(scratch)
        !           686:  nop
        !           687: 
        !           688:  movei #L78,r0
        !           689:  jump T,(r0)
        !           690:  nop
        !           691: 
        !           692: L77:
        !           693: 
        !           694:  moveq #1,r0
        !           695:  move r0,RETURNVALUE
        !           696: 
        !           697:  movei #L64,r0
        !           698:  jump T,(r0)
        !           699:  nop
        !           700: 
        !           701: L78:
        !           702: 
        !           703: L74:
        !           704: 
        !           705: L72:
        !           706: 
        !           707: L70:
        !           708: 
        !           709: L68:
        !           710: 
        !           711: L66:
        !           712: 
        !           713:  movei #_music,r0
        !           714:  load (r0),r0
        !           715:  movei #_music_end,r1
        !           716:  load (r1),r1
        !           717:  cmp r0,r1
        !           718:  movei #L79,scratch
        !           719:  jump NE,(scratch)
        !           720:  nop
        !           721: 
        !           722:  movei #_music,r0
        !           723:  movei #_music_start,r1
        !           724:  load (r1),r1
        !           725:  store r1,(r0)
        !           726:  load (r0),r0
        !           727:  moveq #0,r1
        !           728:  cmp r0,r1
        !           729:  movei #L81,scratch
        !           730:  jump NE,(scratch)
        !           731:  nop
        !           732: 
        !           733:  moveq #1,r0
        !           734:  move r0,RETURNVALUE
        !           735: 
        !           736:  movei #L64,r0
        !           737:  jump T,(r0)
        !           738:  nop
        !           739: 
        !           740: L81:
        !           741: 
        !           742: L79:
        !           743: 
        !           744:  moveq #0,r0
        !           745:  move r0,RETURNVALUE
        !           746: 
        !           747: L64:
        !           748:  movei #48,scratch
        !           749:  jump T,(RETURNPOINT)
        !           750:  add scratch,FP ; delay slot
        !           751: 
        !           752: ;====================
        !           753: _M_PaintUnsatSound::
        !           754: ;5 dag registers  4 register variables
        !           755: ;localoffset:12  regoffset:12  argoffset:52
        !           756: ;====================
        !           757:  movei #52,scratch
        !           758:  sub scratch,FP
        !           759: 
        !           760:  movei #_music_channels,r0
        !           761:  move r0,r16 ;(chan)
        !           762:  movei #_musictime,r0
        !           763:  load (r0),r0
        !           764:  load (FP+13),r1 ; local samples
        !           765:  add r1,r0
        !           766:  move r0,r18 ;(endtime)
        !           767: 
        !           768:  movei #L90,r0
        !           769:  jump T,(r0)
        !           770:  nop
        !           771: 
        !           772: L89:
        !           773: 
        !           774:  movei #_musictime,r0
        !           775:  load (r0),r0
        !           776:  move r0,r15 ;(channeltime)
        !           777:  move r16,r0 ;(chan)
        !           778:  addq #24,r0
        !           779:  load (r0),r0
        !           780:  move r15,r1 ;(channeltime)
        !           781:  cmp r0,r1
        !           782:  movei #L93,scratch
        !           783:  jump CC,(scratch)
        !           784:  nop
        !           785: 
        !           786:  movei #L96,r0
        !           787:  jump T,(r0)
        !           788:  nop
        !           789: 
        !           790: L95:
        !           791: 
        !           792:  move r16,r0 ;(chan)
        !           793:  addq #24,r0
        !           794:  load (r0),r0
        !           795:  move r18,r1 ;(endtime)
        !           796:  cmp r0,r1
        !           797:  movei #L98,scratch
        !           798:  jump EQ,(scratch)
        !           799:  nop
        !           800:  jump CS,(scratch)
        !           801:  nop
        !           802: 
        !           803:  move r16,r0 ;(chan)
        !           804:  addq #24,r0
        !           805:  load (r0),r0
        !           806:  move r0,r17 ;(stoptime)
        !           807: 
        !           808:  movei #L99,r0
        !           809:  jump T,(r0)
        !           810:  nop
        !           811: 
        !           812: L98:
        !           813: 
        !           814:  move r18,r17 ;(endtime)(stoptime)
        !           815: 
        !           816: L99:
        !           817: 
        !           818:  store r16,(FP) ; arg[] ;(chan)
        !           819:  move r17,r0 ;(stoptime)
        !           820:  sub r15,r0 ;(channeltime)
        !           821:  or r0,scratch ; scoreboard bug
        !           822:  store r0,(FP+1) ; arg[]
        !           823:  movei #_musictime,r0
        !           824:  load (r0),r0
        !           825:  move r15,r1 ;(channeltime)
        !           826:  sub r0,r1
        !           827:  or r1,scratch ; scoreboard bug
        !           828:  store r1,(FP+2) ; arg[]
        !           829:  movei #_M_PaintSingleChannel,r0
        !           830:  store r28,(FP+3) ; push ;(RETURNPOINT)
        !           831:  store r18,(FP+4) ; push ;(endtime)
        !           832:  store r17,(FP+5) ; push ;(stoptime)
        !           833:  store r16,(FP+6) ; push ;(chan)
        !           834:  movei #L104,RETURNPOINT
        !           835:  jump T,(r0)
        !           836:  store r15,(FP+7) ; delay slot push ;(channeltime)
        !           837: L104:
        !           838:  load (FP+4),r18 ; pop ;(endtime)
        !           839:  load (FP+5),r17 ; pop ;(stoptime)
        !           840:  load (FP+6),r16 ; pop ;(chan)
        !           841:  load (FP+7),r15 ; pop ;(channeltime)
        !           842:  load (FP+3), RETURNPOINT ; pop
        !           843: 
        !           844:  move r17,r15 ;(stoptime)(channeltime)
        !           845:  move r16,r0 ;(chan)
        !           846:  addq #24,r0
        !           847:  load (r0),r0
        !           848:  move r15,r1 ;(channeltime)
        !           849:  cmp r0,r1
        !           850:  movei #L100,scratch
        !           851:  jump NE,(scratch)
        !           852:  nop
        !           853: 
        !           854:  load (r16),r0 ;(chan)
        !           855:  addq #12,r0
        !           856:  load (r0),r0
        !           857:  moveq #2,r1
        !           858:  and r1,r0
        !           859:  moveq #0,r1
        !           860:  cmp r0,r1
        !           861:  movei #L102,scratch
        !           862:  jump EQ,(scratch)
        !           863:  nop
        !           864: 
        !           865:  moveq #4,r0
        !           866:  move r16,r1 ;(chan)
        !           867:  add r0,r1
        !           868:  load (r1),r2
        !           869:  load (r16),r3 ;(chan)
        !           870:  move r3,r4
        !           871:  addq #8,r4
        !           872:  load (r4),r4
        !           873:  add r0,r3
        !           874:  load (r3),r0
        !           875:  move r4,r3
        !           876:  sub r0,r3
        !           877:  move r2,r0
        !           878:  sub r3,r0
        !           879:  store r0,(r1)
        !           880: 
        !           881:  store r16,(FP) ; arg[] ;(chan)
        !           882:  or r15,scratch ; scoreboard bug ;(channeltime)
        !           883:  store r15,(FP+1) ; arg[] ;(channeltime)
        !           884:  movei #_M_CalculateEndTime,r0
        !           885:  store r28,(FP+3) ; push ;(RETURNPOINT)
        !           886:  store r18,(FP+4) ; push ;(endtime)
        !           887:  store r17,(FP+5) ; push ;(stoptime)
        !           888:  store r16,(FP+6) ; push ;(chan)
        !           889:  movei #L105,RETURNPOINT
        !           890:  jump T,(r0)
        !           891:  store r15,(FP+7) ; delay slot push ;(channeltime)
        !           892: L105:
        !           893:  load (FP+4),r18 ; pop ;(endtime)
        !           894:  load (FP+5),r17 ; pop ;(stoptime)
        !           895:  load (FP+6),r16 ; pop ;(chan)
        !           896:  load (FP+7),r15 ; pop ;(channeltime)
        !           897:  load (FP+3), RETURNPOINT ; pop
        !           898: 
        !           899:  movei #L103,r0
        !           900:  jump T,(r0)
        !           901:  nop
        !           902: 
        !           903: L102:
        !           904: 
        !           905:  move r18,r15 ;(endtime)(channeltime)
        !           906: 
        !           907: L103:
        !           908: 
        !           909: L100:
        !           910: 
        !           911: L96:
        !           912: 
        !           913:  cmp r15,r18 ;(channeltime)(endtime)
        !           914:  movei #L95,scratch
        !           915:  jump NE,(scratch)
        !           916:  nop
        !           917: 
        !           918: L93:
        !           919: 
        !           920:  move r16,r0 ;(chan)
        !           921:  addq #28,r0
        !           922:  move r0,r16 ;(chan)
        !           923: 
        !           924: L90:
        !           925: 
        !           926:  move r16,r0 ;(chan)
        !           927:  movei #_music_channels+280,r1
        !           928:  cmp r0,r1
        !           929:  movei #L89,scratch
        !           930:  jump NE,(scratch)
        !           931:  nop
        !           932: 
        !           933: 
        !           934: L88:
        !           935:  movei #52,scratch
        !           936:  jump T,(RETURNPOINT)
        !           937:  add scratch,FP ; delay slot
        !           938: 
        !           939: ;====================
        !           940: _M_CalculateEndTime::
        !           941: ;6 dag registers  1 register variables
        !           942: ;localoffset:0  regoffset:0  argoffset:0
        !           943: ;====================
        !           944: 
        !           945:  load (FP),r0 ; local channel
        !           946:  move r0,r1
        !           947:  addq #4,r1
        !           948:  load (r1),r1
        !           949:  load (r0),r2
        !           950:  addq #28,r2
        !           951:  sub r2,r1
        !           952:  move r1,r15 ;(samples_left)
        !           953:  load (r0),r0
        !           954:  addq #12,r0
        !           955:  load (r0),r0
        !           956:  moveq #2,r1
        !           957:  and r1,r0
        !           958:  moveq #0,r1
        !           959:  cmp r0,r1
        !           960:  movei #L107,scratch
        !           961:  jump EQ,(scratch)
        !           962:  nop
        !           963: 
        !           964:  load (FP),r0 ; local channel
        !           965:  load (r0),r0
        !           966:  addq #8,r0
        !           967:  load (r0),r0
        !           968:  sub r15,r0 ;(samples_left)
        !           969:  shlq #15,r0
        !           970:  move r0,r15 ;(samples_left)
        !           971: 
        !           972:  movei #L108,r0
        !           973:  jump T,(r0)
        !           974:  nop
        !           975: 
        !           976: L107:
        !           977: 
        !           978:  load (FP),r0 ; local channel
        !           979:  load (r0),r0
        !           980:  load (r0),r0
        !           981:  sub r15,r0 ;(samples_left)
        !           982:  shlq #15,r0
        !           983:  move r0,r15 ;(samples_left)
        !           984: 
        !           985: L108:
        !           986: 
        !           987:  load (FP),r0 ; local channel
        !           988:  move r0,r1
        !           989:  addq #24,r1
        !           990:  load (FP+1),r2 ; local t
        !           991:  move r15,r3 ;(samples_left)
        !           992:  move r0,r4
        !           993:  addq #16,r4
        !           994:  load (r4),r4
        !           995:  moveq #1,r5
        !           996:  sha r5,r4
        !           997:  sub r4,r3
        !           998:  addq #12,r0
        !           999:  load (r0),r0
        !          1000:  add r5,r0
        !          1001:  sha r5,r0
        !          1002:  div r0,r3
        !          1003:  move r2,r0
        !          1004:  add r3,r0
        !          1005:  store r0,(r1)
        !          1006: 
        !          1007: 
        !          1008: L106:
        !          1009:  jump T,(RETURNPOINT)
        !          1010:  nop ; delay slot
        !          1011: 
        !          1012: ;=======================
        !          1013: 
        !          1014:  .long
        !          1015: _internal_buffer::
        !          1016:  .dc.l 0
        !          1017:  .dc.l 0
        !          1018:  .dc.l 0
        !          1019:  .dc.l 0
        !          1020:  .dc.l 0
        !          1021:  .dc.l 0
        !          1022:  .dc.l 0
        !          1023:  .dc.l 0
        !          1024:  .dc.l 0
        !          1025:  .dc.l 0
        !          1026:  .dc.l 0
        !          1027:  .dc.l 0
        !          1028:  .dc.l 0
        !          1029:  .dc.l 0
        !          1030:  .dc.l 0
        !          1031:  .dc.l 0
        !          1032:  .dc.l 0
        !          1033:  .dc.l 0
        !          1034:  .dc.l 0
        !          1035:  .dc.l 0
        !          1036:  .dc.l 0
        !          1037:  .dc.l 0
        !          1038:  .dc.l 0
        !          1039:  .dc.l 0
        !          1040:  .dc.l 0
        !          1041:  .dc.l 0
        !          1042:  .dc.l 0
        !          1043:  .dc.l 0
        !          1044:  .dc.l 0
        !          1045:  .dc.l 0
        !          1046:  .dc.l 0
        !          1047:  .dc.l 0
        !          1048:  .dc.l 0
        !          1049:  .dc.l 0
        !          1050:  .dc.l 0
        !          1051:  .dc.l 0
        !          1052:  .dc.l 0
        !          1053:  .dc.l 0
        !          1054:  .dc.l 0
        !          1055:  .dc.l 0
        !          1056:  .dc.l 0
        !          1057:  .dc.l 0
        !          1058:  .dc.l 0
        !          1059:  .dc.l 0
        !          1060:  .dc.l 0
        !          1061:  .dc.l 0
        !          1062:  .dc.l 0
        !          1063:  .dc.l 0
        !          1064:  .dc.l 0
        !          1065:  .dc.l 0
        !          1066:  .dc.l 0
        !          1067:  .dc.l 0
        !          1068:  .dc.l 0
        !          1069:  .dc.l 0
        !          1070:  .dc.l 0
        !          1071:  .dc.l 0
        !          1072:  .dc.l 0
        !          1073:  .dc.l 0
        !          1074:  .dc.l 0
        !          1075:  .dc.l 0
        !          1076:  .dc.l 0
        !          1077:  .dc.l 0
        !          1078:  .dc.l 0
        !          1079:  .dc.l 0
        !          1080:  .dc.l 0
        !          1081:  .dc.l 0
        !          1082:  .dc.l 0
        !          1083:  .dc.l 0
        !          1084:  .dc.l 0
        !          1085:  .dc.l 0
        !          1086:  .dc.l 0
        !          1087:  .dc.l 0
        !          1088:  .dc.l 0
        !          1089:  .dc.l 0
        !          1090:  .dc.l 0
        !          1091:  .dc.l 0
        !          1092:  .dc.l 0
        !          1093:  .dc.l 0
        !          1094:  .dc.l 0
        !          1095:  .dc.l 0
        !          1096:  .dc.l 0
        !          1097:  .dc.l 0
        !          1098:  .dc.l 0
        !          1099:  .dc.l 0
        !          1100:  .dc.l 0
        !          1101:  .dc.l 0
        !          1102:  .dc.l 0
        !          1103:  .dc.l 0
        !          1104:  .dc.l 0
        !          1105:  .dc.l 0
        !          1106:  .dc.l 0
        !          1107:  .dc.l 0
        !          1108:  .dc.l 0
        !          1109:  .dc.l 0
        !          1110:  .dc.l 0
        !          1111:  .dc.l 0
        !          1112:  .dc.l 0
        !          1113:  .dc.l 0
        !          1114:  .dc.l 0
        !          1115:  .dc.l 0
        !          1116:  .dc.l 0
        !          1117:  .dc.l 0
        !          1118:  .dc.l 0
        !          1119:  .dc.l 0
        !          1120:  .dc.l 0
        !          1121:  .dc.l 0
        !          1122:  .dc.l 0
        !          1123:  .dc.l 0
        !          1124:  .dc.l 0
        !          1125:  .dc.l 0
        !          1126:  .dc.l 0
        !          1127:  .dc.l 0
        !          1128:  .dc.l 0
        !          1129:  .dc.l 0
        !          1130:  .dc.l 0
        !          1131:  .dc.l 0
        !          1132:  .dc.l 0
        !          1133:  .dc.l 0
        !          1134:  .dc.l 0
        !          1135:  .dc.l 0
        !          1136:  .dc.l 0
        !          1137:  .dc.l 0
        !          1138:  .dc.l 0
        !          1139:  .dc.l 0
        !          1140:  .dc.l 0
        !          1141:  .dc.l 0
        !          1142:  .dc.l 0
        !          1143:  .dc.l 0
        !          1144:  .dc.l 0
        !          1145:  .dc.l 0
        !          1146:  .dc.l 0
        !          1147:  .dc.l 0
        !          1148:  .dc.l 0
        !          1149:  .dc.l 0
        !          1150:  .dc.l 0
        !          1151:  .dc.l 0
        !          1152:  .dc.l 0
        !          1153:  .dc.l 0
        !          1154:  .dc.l 0
        !          1155:  .dc.l 0
        !          1156:  .dc.l 0
        !          1157:  .dc.l 0
        !          1158:  .dc.l 0
        !          1159:  .dc.l 0
        !          1160:  .dc.l 0
        !          1161:  .dc.l 0
        !          1162:  .dc.l 0
        !          1163:  .dc.l 0
        !          1164:  .dc.l 0
        !          1165:  .dc.l 0
        !          1166:  .dc.l 0
        !          1167:  .dc.l 0
        !          1168:  .dc.l 0
        !          1169:  .dc.l 0
        !          1170:  .dc.l 0
        !          1171:  .dc.l 0
        !          1172:  .dc.l 0
        !          1173:  .dc.l 0
        !          1174:  .dc.l 0
        !          1175:  .dc.l 0
        !          1176:  .dc.l 0
        !          1177:  .dc.l 0
        !          1178:  .dc.l 0
        !          1179:  .dc.l 0
        !          1180:  .dc.l 0
        !          1181:  .dc.l 0
        !          1182:  .dc.l 0
        !          1183:  .dc.l 0
        !          1184:  .dc.l 0
        !          1185:  .dc.l 0
        !          1186:  .dc.l 0
        !          1187:  .dc.l 0
        !          1188:  .dc.l 0
        !          1189:  .dc.l 0
        !          1190:  .dc.l 0
        !          1191:  .dc.l 0
        !          1192:  .dc.l 0
        !          1193:  .dc.l 0
        !          1194:  .dc.l 0
        !          1195:  .dc.l 0
        !          1196:  .dc.l 0
        !          1197:  .dc.l 0
        !          1198:  .dc.l 0
        !          1199:  .dc.l 0
        !          1200:  .dc.l 0
        !          1201:  .dc.l 0
        !          1202:  .dc.l 0
        !          1203:  .dc.l 0
        !          1204:  .dc.l 0
        !          1205:  .dc.l 0
        !          1206:  .dc.l 0
        !          1207:  .dc.l 0
        !          1208:  .dc.l 0
        !          1209:  .dc.l 0
        !          1210:  .dc.l 0
        !          1211:  .dc.l 0
        !          1212:  .dc.l 0
        !          1213:  .dc.l 0
        !          1214:  .dc.l 0
        !          1215:  .dc.l 0
        !          1216:  .dc.l 0
        !          1217:  .dc.l 0
        !          1218:  .dc.l 0
        !          1219:  .dc.l 0
        !          1220:  .dc.l 0
        !          1221:  .dc.l 0
        !          1222:  .dc.l 0
        !          1223:  .dc.l 0
        !          1224:  .dc.l 0
        !          1225:  .dc.l 0
        !          1226:  .dc.l 0
        !          1227:  .dc.l 0
        !          1228:  .dc.l 0
        !          1229:  .dc.l 0
        !          1230:  .dc.l 0
        !          1231:  .dc.l 0
        !          1232:  .dc.l 0
        !          1233:  .dc.l 0
        !          1234:  .dc.l 0
        !          1235:  .dc.l 0
        !          1236:  .dc.l 0
        !          1237:  .dc.l 0
        !          1238:  .dc.l 0
        !          1239:  .dc.l 0
        !          1240:  .dc.l 0
        !          1241:  .dc.l 0
        !          1242:  .dc.l 0
        !          1243:  .dc.l 0
        !          1244:  .dc.l 0
        !          1245:  .dc.l 0
        !          1246:  .dc.l 0
        !          1247:  .dc.l 0
        !          1248:  .dc.l 0
        !          1249:  .dc.l 0
        !          1250:  .dc.l 0
        !          1251:  .dc.l 0
        !          1252:  .dc.l 0
        !          1253:  .dc.l 0
        !          1254:  .dc.l 0
        !          1255:  .dc.l 0
        !          1256:  .dc.l 0
        !          1257:  .dc.l 0
        !          1258:  .dc.l 0
        !          1259:  .dc.l 0
        !          1260:  .dc.l 0
        !          1261:  .dc.l 0
        !          1262:  .dc.l 0
        !          1263:  .dc.l 0
        !          1264:  .dc.l 0
        !          1265:  .dc.l 0
        !          1266:  .dc.l 0
        !          1267:  .dc.l 0
        !          1268:  .dc.l 0
        !          1269:  .dc.l 0
        !          1270:  .dc.l 0
        !          1271:  .dc.l 0
        !          1272:  .extern _M_WriteOutSamples
        !          1273:  .extern _samples_per_midiclock
        !          1274:  .extern _music_end
        !          1275:  .extern _music_start
        !          1276:  .extern _music
        !          1277:  .extern _next_eventtime
        !          1278:  .extern _musictime
        !          1279:  .extern _music_channels
        !          1280:  .extern _instruments
        !          1281:  .extern _samplecount
        !          1282:  .extern _sfxvolume
        !          1283:  .extern _M_PaintSingleChannel
        !          1284: 
        !          1285:        .phrase
        !          1286:        .68000
        !          1287: codeend:

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.