Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.sys.apple2.programmer > #489

Re: mockingboard

Newsgroups comp.sys.apple2.programmer
Date 2012-09-11 08:10 -0700
References <3e7c3047-f5a0-4bf0-ada6-9265d70dd59b@googlegroups.com> <1574371501368952514.984393mjmahon-aol.com@news.giganews.com> <654bb70d-1ce0-4148-b22f-01d1bbb9b2bb@googlegroups.com> <b78850aa-4d7f-474b-9111-fd7f2e2b4448@googlegroups.com>
Message-ID <e54563e8-61b8-48bf-b047-7d25b69590a0@googlegroups.com> (permalink)
Subject Re: mockingboard
From aiiadict@gmail.com

Show all headers | View raw


On Monday, September 10, 2012 4:21:14 PM UTC-7, (unknown) wrote:
> > > Check the disk that shipped with the Mockingboard for the object code.  
> 
> Here is the code, I think some of it may be unnecessary (quick cut and paste).

I disassembled the Music Construction Set interrupt driven player for the Mockingboard (only to the point where I could re-assemble it, I didn't reverse engineer it yet)



;i Just used DFB for bytes that weren't code

         ORG   $8500

         JMP   IntRoutine      ;interrupt routine
         JMP   Setup      ;install, setup interrupt routine
         JMP   SUB10
         JMP   SUB2
         JMP   $87E0
         JMP   $87F3

l8512    DFB   #$04
l8513    DFB   #$03       ;these two are poked in,

L8514
         DFB   #$FE
         DFB   #$3F
         DFB   #$7E
         DFB   #$44
         DFB   #$0A
         DFB   #$00       ; sub3
         DFB   #$06       ;sub3
         DFB   #$08
         DFB   #$00 ;counter of some sort
         DFB   #$00 ;these get incremented in interrupt routine
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00       ;sub3
         DFB   #$00
         DFB   #$00
         DFB   #$01
         DFB   #$01


TABLE1

         DFB   #$FF
         DFB   #$FF
         DFB   #$FF
         DFB   #$FF
         DFB   #$FF
         DFB   #$FF
         DFB   #$00       ;sub3 access
         DFB   #$00
         DFB   #$00       ;sub4access
         DFB   #$00
         DFB   #$00
         DFB   #$1E
         DFB   #$1F
         DFB   #$20
         DFB   #$22
         DFB   #$24
         DFB   #$26
         DFB   #$29
         DFB   #$2C
         DFB   #$2E
         DFB   #$30
         DFB   #$33
         DFB   #$36
         DFB   #$3A
         DFB   #$3D
         DFB   #$41
         DFB   #$45
         DFB   #$49
         DFB   #$4D
         DFB   #$52
         DFB   #$56
         DFB   #$5C
         DFB   #$61
         DFB   #$67
         DFB   #$6D
         DFB   #$73
         DFB   #$7A
         DFB   #$81
         DFB   #$89
         DFB   #$91
         DFB   #$9A
         DFB   #$A3
         DFB   #$AD
         DFB   #$B7
         DFB   #$C2
         DFB   #$CE
         DFB   #$DA
         DFB   #$E7
         DFB   #$F4
         DFB   #$03
         DFB   #$12
         DFB   #$23
         DFB   #$34
         DFB   #$46
         DFB   #$5A
         DFB   #$6E
         DFB   #$84
         DFB   #$9B
         DFB   #$B3
         DFB   #$CD
         DFB   #$E9
         DFB   #$06
         DFB   #$25
         DFB   #$45
         DFB   #$68
         DFB   #$8C
         DFB   #$B3
         DFB   #$DC
         DFB   #$08
         DFB   #$36
         DFB   #$67
         DFB   #$9B
         DFB   #$D2
         DFB   #$01
         DFB   #$01
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$01
         DFB   #$01
         DFB   #$01
         DFB   #$01
         DFB   #$01
         DFB   #$01
         DFB   #$01
         DFB   #$01
         DFB   #$01
         DFB   #$01
         DFB   #$01
         DFB   #$01
         DFB   #$02
         DFB   #$02
         DFB   #$02
         DFB   #$02
         DFB   #$02
         DFB   #$02
         DFB   #$02
         DFB   #$03
         DFB   #$03
         DFB   #$03
         DFB   #$03
         DFB   #$03
         DFB   #$00
         DFB   #$00


**************************
*
* interrupt routine
*
*************************


IntRoutine

                          ;interrupt vector points to this routine

         TXA              ;save x and y regs on stack
         PHA
         TYA
         PHA

         LDA   #$C0
         STA   $C40D

         INC   $851D ;these keep track of place in song?
         INC   $851C

         LDA   $851D
         CMP   L8513 ;compare to value poked in, 
         BNE   S6L1
         JSR   SUB7

         LDA   #$00 ;reset counter
         STA   $851D

S6L1
         LDA   $851C ;compare to counter inc'd above
         CMP   L8512 ;compare to value poked in
         BEQ   S6L2
         JMP   RTNFRMINT  ;done processing , return from interrupt

S6L2     LDA   #$00
         STA   $851C ;reset counter


         LDX   #$00
L85E2    STX   $8521
         TXA
         ASL ;multiply by 2
         STA   $8522

         DEC   $8524,X
         LDA   $8524,X
         BNE   $8661
         JSR   SUB3

         LDX   $8522
         LDA   $06,X
         CLC
         ADC   #$02
         STA   $06,X
         BCC   S6L3

         INC   $07,X
S6L3     LDA   ($06,X)


         LSR
         STA   $851F
         INC   $06,X
         LDA   ($06,X)
         DEC   $06,X
         STA   $8520
         ORA   $851F
         BNE   S6L4
         JSR   SUB2
         JMP   RTN_INT_2

S6L4
         LDX   $8521
         JSR   SUB8
         LDA   $8521
         STA   TABLE1,X
         STX   $8523
         LDX   $851F
         LDA   $8531,X
         STA   $852D
         LDA   $8571,X
         STA   $852E
         LDA   $8518
         STA   $852C
         LDX   $8523
         JSR   SUB4
         LDX   $8521
         LDA   $8520
         AND   #$40
         STA   $852F,X
         LDA   $8520
         AND   #$3F
         STA   $8524,X
         LDA   $8520
         AND   #$80
         BNE   $85F5

S6L466
         LDX   $8521
         INX
         CPX   #$02
         BEQ   RTN_INT_2
         JMP   L85E2


RTN_INT_2
         JSR   SUB10


***************************
*
* return from interrupt
*
***************************

RTNFRMINT
         PLA
         TAY
         PLA
         TAX
         LDA   $45
         RTI


******************************
*
* sub 8
*
*******************************


SUB8     CPX   #$00
         BNE   SUB8L1
         LDX   $8519
         LDA   TABLE1,X
         BMI   SUB8L2
         INX
         CPX   $851A
         BNE   $867D      ;SUB8L3
         DEX
         RTS

SUB8L1
         LDX   $851A
         DEX
         LDA   TABLE1,X
         BMI   SUB8L2
         DEX
         CPX   $8519
         BNE   $868E      ;SUB8L5
SUB8L2   RTS




*********************
*
* SUB 4
*
*********************

SUB4
         TXA ;save x and y registers
         PHA
         TYA
         PHA

         LDA   #$00
         CPX   #$03
         BCC   S4L1
         DEX
         DEX
         DEX
         LDA   #$10

S4L1     STA   $D6
         TXA
         ASL
         TAY
         LDA   $852D
         STA   ($D6),Y
         INY
         LDA   $852E      ;
         STA   ($D6),Y
         TXA
         CLC
         ADC   #$08
         TAY
         LDA   $852C
         STA   ($D6),Y

         PLA ;restore x and y registers
         TAY
         PLA
         TAX
         RTS

**************************
*
* sub 10
*
**************************

SUB10
         TYA ;save y register
         PHA
         LDA   #$FF
         STA   $C403
         STA   $C483
         LDA   #$07
         STA   $C402
         STA   $C482
         LDY   #$00
         STY   $C401
         LDA   #$07
         STA   $C400
         LDA   #$04
         STA   $C400
         LDA   $0300,Y
         STA   $C401
         LDA   #$06
         STA   $C400
         LDA   #$04
         STA   $C400
         STY   $C481
         LDA   #$07
         STA   $C480
         LDA   #$04
         STA   $C480
         LDA   $0310,Y
         STA   $C481
         LDA   #$06
         STA   $C480
         LDA   #$04
         STA   $C480
         INY
         CPY   #$0F
         BNE   $86DC      ;L86DC

         PLA ;restore y register
         TAY
         RTS


*************************
*
* SUB3
*
*************************

SUB3
         LDX   $8519      ;=0
S3LOOP   LDA   TABLE1,X
         CMP   $8521 ;init to 1 in sub2
         BNE   S3L1
         LDA   #$FF
         STA   TABLE1,X
         LDA   #$00
         STA   $852C
         JSR   SUB4
S3L1     INX
         CPX   $851A
         BNE   S3LOOP
         RTS


**************************
*
* sub2
*
**************************

SUB2
         LDA   $8514      ;fe ;setup pointer to 3ffe in 06-07
         STA   $06 ;
         LDA   $8515      ;3f
         STA   $07 ;

         LDA   $8516      ;7e
         STA   $08 ;
         LDA   $8517      ;44
         STA   $09 ;

                          ;set interrupt vector
         LDA   #$00       ;3fe/ff = $8500, start of this routine
         STA   $03FE ;
         LDA   #$85 ;
         STA   $03FF ;

         LDA   #$00       ;d6/d7 = 0300
         STA   $D6
         LDA   #$03
         STA   $D7

         LDA   #$01 ;init stuff for sub3
         STA   $8524
         STA   $8525
         LDA   #$00
         STA   $8521

         JSR   SUB3
         LDA   #$01 ;reinit something to 1
         STA   $8521
         JSR   SUB3
         RTS


***********************
*
* Setup
*
***********************


Setup
         JSR   SUB1       ;move 32 bytes to 0300
         JSR   SUB2 ;setup vectors and

         LDA   #$F8
         STA   $0307
         STA   $0317

         LDA   #$40       ;mb inits
         STA   $C40B
         LDA   #$7F
         STA   $C40E
         LDA   #$C0
         STA   $C40D
         STA   $C40E
         LDA   #$FF
         STA   $C404
         LDA   #$40
         STA   $C405
         CLI
         RTS


***********************
*
* SUB7
*
***********************

SUB7
         LDX   #$00
SUB7L0   LDA   TABLE1,X
         CMP   #$02
         BCS   SUB7L1
         TAY
         LDA   $852F,Y
         BNE   SUB7L1
         LDA   $0308,X
         CMP   $851B
         BEQ   SUB7L1
         DEC   $0308,X
SUB7L1
         LDA   $8529,X
         CMP   #$02
         BCS   $87DA      ;SUB7L2
         TAY
         LDA   $852F,Y
         BNE   $87DA      ;SUB7L2
         LDA   $0318,X
         CMP   $851B
         BEQ   $87DA      ;SUB7L2
         DEC   $0318,X
         INX
         CPX   #$03
         BNE   SUB7L0
         RTS

         SEI
         LDA   #$00
         STA   $8521
         JSR   SUB3
         INC   $8521
         JSR   SUB3
         JSR   SUB10
         RTS
         CLI
         RTS


SUB1     LDX   #$00       ;move 32 bytes from 8803 to 0300
LOOP1    LDA   Table77,X
         STA   $0300,X
         INX
         CPX   #$20
         BNE   LOOP1
         RTS

******************
*
* table 77
*
******************

Table77

         DFB   #$01
         DFB   #$00
         DFB   #$01
         DFB   #$00
         DFB   #$01
         DFB   #$00
         DFB   #$00
         DFB   #$3F
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$01
         DFB   #$00
         DFB   #$01
         DFB   #$00
         DFB   #$01
         DFB   #$00
         DFB   #$00
         DFB   #$3F
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00
         DFB   #$00


 10  PRINT  CHR$ (4);"bload MKGBDINTRUPT":rem abov file
 20  PRINT  CHR$ (4)"BLOAD SUGAR2,A$4000": POKE 34066,4: POKE 34067,3:
 30  CALL 34051:

I'll do some more work on it today.  I'm trying to figure out the file format for MCS generated music, so I can use MJM's midi converter to output music that it will play.

Rich
 

Back to comp.sys.apple2.programmer | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

mockingboard aiiadict@gmail.com - 2012-09-09 12:44 -0700
  Re: mockingboard Michael J. Mahon <mjmahon@aol.com> - 2012-09-10 02:01 -0500
    Re: mockingboard aiiadict@gmail.com - 2012-09-10 08:42 -0700
      Re: mockingboard aiiadict@gmail.com - 2012-09-10 16:21 -0700
        Re: mockingboard aiiadict@gmail.com - 2012-09-11 08:10 -0700
          Re: mockingboard Antoine Vignau <antoine.vignau@laposte.net> - 2012-09-11 10:55 -0700
            Re: mockingboard aiiadict@gmail.com - 2012-09-11 13:11 -0700
              Re: mockingboard aiiadict@gmail.com - 2012-09-12 22:46 -0700
                Re: mockingboard aiiadict@gmail.com - 2012-09-13 09:16 -0700
                Re: mockingboard aiiadict@gmail.com - 2012-09-14 12:16 -0700
                Re: mockingboard aiiadict@gmail.com - 2012-09-15 19:18 -0700
                Re: mockingboard aiiadict@gmail.com - 2012-09-15 22:16 -0700
                Re: mockingboard aiiadict@gmail.com - 2012-09-16 10:20 -0700
                Re: mockingboard aiiadict@gmail.com - 2012-09-16 09:25 -0700
                Re: mockingboard aiiadict@gmail.com - 2012-09-16 09:34 -0700
    Re: mockingboard aiiadict@gmail.com - 2012-09-16 09:52 -0700
      Re: mockingboard Daniel Kruszyna <dan@krue.net> - 2012-09-16 17:04 +0000
        Re: mockingboard aiiadict@gmail.com - 2012-09-16 10:47 -0700
          Re: mockingboard aiiadict@gmail.com - 2012-09-16 11:56 -0700
          Re: mockingboard Daniel Kruszyna <dan@krue.net> - 2012-09-19 22:59 +0000
            Re: mockingboard aiiadict@gmail.com - 2012-09-19 17:46 -0700
              Re: mockingboard aiiadict@gmail.com - 2012-09-19 20:40 -0700
  Re: mockingboard aiiadict@gmail.com - 2012-09-20 09:32 -0700

csiph-web