Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.sys.apple2.programmer > #489
| 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 |
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 | Next — Previous in thread | Next in thread | Find similar
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