Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.sys.apple2.programmer > #493
| Newsgroups | comp.sys.apple2.programmer |
|---|---|
| Date | 2012-09-13 09:16 -0700 |
| References | (3 earlier) <b78850aa-4d7f-474b-9111-fd7f2e2b4448@googlegroups.com> <e54563e8-61b8-48bf-b047-7d25b69590a0@googlegroups.com> <464d1c62-e863-4f3f-bcfb-eab9ce78e5a7@googlegroups.com> <9f08faf8-e636-43ed-a7dc-bc0d84b4c83f@googlegroups.com> <18c34350-229d-4b50-b3a5-0158506b0e7f@googlegroups.com> |
| Message-ID | <1e7ce10a-3280-43db-8dd0-ac75743bab5a@googlegroups.com> (permalink) |
| Subject | Re: mockingboard |
| From | aiiadict@gmail.com |
On Wednesday, September 12, 2012 10:46:14 PM UTC-7, (unknown) wrote: > On Tuesday, September 11, 2012 1:11:29 PM UTC-7, (unknown) wrote: > > > :-) I know, just a start to get it to assemble without errors. ORG $8500 ;ADDRESSES FOR First 6522 ORB EQU $C400 ;PORT B ORA EQU $C401 ;PORT A DDRB EQU $C402 ;DATA DIRECTION REGISTER (A) DDRA EQU $C403 ;DATA DIRECTION REGISTER (B) ;ADDRESSES FOR SECOND 6522 ORA2 EQU $C481 ;PORT A ORB2 EQU $C480 ;PORT B DDRA2 EQU $C483 ;DATA DIRECTION REGISTER (A) DDRB2 EQU $C482 ;DATA DIRECTION REGISTER (B) IFR EQU $C40D ;interrupt flag *page 3 equates TBL300N1 equ $300 TBL300N2 equ $308 TBL300N3 equ $310 TBL300N4 equ $318 *PAGE 0 EQUATES PTR1LO equ $06 PTR1HI equ $07 TBL300PTRLO EQU $D6 TBL300PTRHI EQU $D7 ;only the first 2 jmps are used. The rest are probably for testing purposes? JMP INTROUTINE ;interrupt routine JMP SETUP ;install, setup interrupt routine JMP Music2Card JMP RESETSTUFF JMP $87E0 JMP $87F3 Tempo1 DFB #$04 ;tempo Tempo2 DFB #$03 ;these two are poked in L8514 MUSLO DFB #$FE ;start of music address - 2 MUSHI DFB #$3F ; L8516 DFB #$7E ;USED BY SETUP ONLY L8517 DFB #$44 L8518 DFB #$0A L8519 DFB #$00 ; startx for Table1Code L851A DFB #$06 ; endx+1 for Table1Code ;index into table1 DFB #$08 Counter1 DFB #$00 ;counter of some sort Counter2 DFB #$00 ;these get incremented in interrupt routine ;AND COMPARED TO TEMPO1/2, DETERMINE WETHER OR NOT ;TO PLAY A NOTE? DFB #$00 tEMPMUSIC1 DFB #$00 ;MUSIC DATA FROM $4000 TEMPORARILY STORED HERE ADDR = 851F tEMPMUSIC2 DFB #$00 ; TempX DFB #$00 ;Table1Code addr=8521 TEMPX2 DFB #$00 ;THIS IS TEMPX * 2 TEMPX3 DFB #$00 ; ADDR= 8523 TABLE22 L8524 DFB #$01 DFB #$01 TABLE1 ;table of 6 bytes, indexed by start=L8519,end=l851a DFB #$FF ;#0 DFB #$FF ;#1 DFB #$FF ;#2 DFB #$FF ;#3 DFB #$FF ;#4 DFB #$FF ;#5 L852C DFB #$00 ;Table1Code access L852D DFB #$00 ;TEMP STORAGE FOR DATA GOT FROM TABLE64 L852E DFB #$00 ;TEMP STORAGE FOR DATA GOT FROM TABLE64 L852F DFB #$00 DFB #$00 ;64 bytes ;THESE MAY BE TABLES CORRESPONDING TO FREQUENCIES TO PLAY ??? TABLE641 DFB #$1E ;ADDR=8531 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 ;ADDR = 8540 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 ;ADDR =8550 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 ;ADDR=8560 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 ;ADDR=8570 ;another 64 bytes TABLE641 DFB #$00 ;ADDR =8571 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 ;40TH DFB #$01 DFB #$01 DFB #$01 DFB #$01 DFB #$01 DFB #$01 DFB #$01 DFB #$01 DFB #$01 DFB #$01 ;50TH 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 ;DOESN'T DO ANYTHING UNTIL ;COUNTER2 = TEMPO2 (JSR COUNTER2LIMIT) ;OR COUNTER1 = TEMPO1 ;interrupt vector points to this routine TXA ;save x and y regs on stack PHA ; TYA ; PHA ; LDA #$C0 ;disable mockingboard interrupts STA IFR INC Counter2 ;Tempo INC Counter1 CHECKCOUNTER2 LDA Counter2 CMP Tempo2 ;compare to value poked in, BNE cHKcOUNTER1 COUNTER2LIMIT JSR COUNTER2LIMIT ;Counter2 reached limit LDA #$00 ;reset counter2 STA Counter2 cHKcOUNTER1 LDA Counter1 ;compare to counter inc'd above CMP Tempo1 ;compare to value poked in BEQ cOUNTER1LIMIT JMP RTNFRMINT ;done processing , return from interrupt * counter1 reached limit COUNTER1LIMIT S6L2 LDA #$00 STA Counter1 ;reset counter1 LDX #$00 ;X GOES FROM 0 TO 1 AND THEN IS RESET TO 0 Xloop1 STX TempX TXA ASL ;multiply by 2 STA TEMPX2 ;first run through, this = 0 DEC TABLE22,X LDA TABLE22,X ;=1 first run BNE $8661 JSR Table1Code LDX TEMPX2 LDA PTR1LO,X CLC ADC #$02 STA PTR1LO,X BCC NOINCREMENT INC PTR1HI,X NOINCREMENT LDA (PTR1LO,X) ;get a byte from the music file at $4000 LSR ;divide by 2 STA tEMPMUSIC1 INC PTR1LO,X LDA (PTR1LO,X) ; get a byte from the music file at $4000 DEC PTR1LO,X STA tEMPMUSIC2 ORA tEMPMUSIC1 BNE NOTZERO JSR RESETSTUFF JMP RTN_INT_2 ;done processing sound? JSR's Music2Card before RTI NOTZERO LDX TempX JSR SUB8 LDA TempX STA TABLE1,X STX TEMPX3 LDX tEMPMUSIC1 LDA TABLE641,X STA L852D ;TEMP STORAGE FOR TABLE64 DATA LDA TABLE642,X STA L852E ;TEMP STORAGE FOR TABLE64 DATA LDA L8518 STA L852C LDX TEMPX3 JSR MoVdatTo300TBL LDX TempX LDA tEMPMUSIC2 AND #$40 STA L852F,X LDA tEMPMUSIC2 AND #$3F STA TABLE22,X LDA tEMPMUSIC2 AND #$80 BNE $85F5 S6L466 LDX TempX INX CPX #$02 BEQ RTN_INT_2 JMP Xloop1 RTN_INT_2 JSR Music2Card *************************** * * return from interrupt * *************************** RTNFRMINT PLA ;restore registers TAY ; PLA ; TAX ; LDA ; $45 RTI ****************************** * * sub 8 * ******************************* SUB8 CPX #$00 ;if x=0 and table1,(8519) = 0 to 127 then ?? BNE SUB8L1 LDX L8519 LDA TABLE1,X BMI DoneSub8 INX CPX L851A BNE $867D ;SUB8L3 DEX RTS SUB8L1 LDX L851A DEX LDA TABLE1,X BMI DoneSub8 DEX CPX L8519 BNE $868E ;SUB8L5 DoneSub8 RTS ********************* * * MoVdatTo300TBL * ********************* ;if x < 3 then x=x-3, deal with second register table (310) ;if X => 3 then deal with first register table ($300) MoVdatTo300TBL TXA ;save x and y registers PHA ; TYA ; PHA ; LDA #$00 CPX #$03 ;x= table1Code value (start = L8519 ; end = L851a) BCC S4L1 ;BRANCH IF >= 3, ;Set TBL300PTR to POINT TO 300 ;FIRST AY8910 REGISTER table DEX DEX DEX LDA #$10 ;SET TBL300PTR TO point to 310, ;SECOND AY8190 REGISTER table ;X >= 3 S4L1 STA TBL300PTRLO ;a=0 or $10, see above TXA ;x= table1Code value (start = L8519 ; end = L851a) ASL ;multiply by 2 TAY ;transfer to Y LDA L852D ;THIS IS DATA FROM TABLE64 (music data) STA (TBL300PTRLO),Y ;put music data in AY8910 register table INY ;point to next byte in register table LDA l852E ;THIS IS DATA FROM TABLE64 STA (TBL300PTRLO),Y ;put music data in AU8910 register table TXA ;x= table1Code value (start = L8519 ; end = L851a) CLC ADC #$08 TAY ;Y = X+8 LDA L852C STA (TBL300PTRLO),Y;put music data in AU8910 register table PLA ;restore x and y registers TAY ; PLA ; TAX ; RTS ************************** * * Music2Card * ************************** Music2Card ;sends 30 bytes to card, ;15 to 300 to 30E ;15 to 310 to 31e TYA ;save y register PHA LDA #$FF ; init channel A STA DDRA STA DDRA2 LDA #$07 ;command = write data, so comfirm init STA DDRB STA DDRB2 LDY #$00 ;command = reset STY ORA LDA #$07 STA ORB LDA #$04 STA ORB LDA tbl300N1,Y STA ORA LDA #$06 STA ORB LDA #$04 STA ORB STY ORA2 LDA #$07 STA ORB2 LDA #$04 STA ORB2 LDA TBL300N3,Y STA ORA2 LDA #$06 STA ORB2 LDA #$04 STA ORB2 INY CPY #$0F ;send 15 bytes to ora,ora2 from 300 BNE $86DC ;L86DC PLA ;restore y register TAY RTS ************************* * * Table1Code * ************************* ;first run, does nothing ;for x=0 :8519 to l851a-1 (0 to 5) ;if Table1,x=tempx then table1,x = FF, jsr MoVdatTo300TBL Table1Code LDX L8519 ;=0 Table1LOOP LDA TABLE1,X CMP TempX ;init to 1 in sub2 BNE TmpXnotTbl1 LDA #$FF STA TABLE1,X ;Store FF in table if Table,x = TempX LDA #$00 STA L852C JSR MoVdatTo300TBL TmpXnotTbl1 INX CPX L851A ;(=$06 in obj file) BNE Table1Loop RTS ************************** * * RESETSTUFF * ************************** RESETSTUFF ;setup vectors, variables and jsr Table1code LDA MUSLO ;fe ;setup pointer start of music in 06-07 STA PTR1LO ; 3ffe = start of music - 2 LDA MUSHI ; STA PTR1HI ; LDA L8516 ;7e STA $08 ; LDA L8517 ;44 STA $09 ; ;setUP interrupt vector TO LDA #$00 ;3fe/ff = $8500, start of this routine STA $03FE ; LDA #$85 ; STA $03FF ; ;setup AY8910 register table LDA #$00 ;d6/d7 = 0300 STA TBL300PTRLO ;this is POINTER TO table of data moved by sub1 LDA #$03 STA TBL300PTRHI LDA #$01 ;init stuff STA TABLE22 STA TABLE22+1 LDA #$00 ;init for Table1Code STA TempX JSR Table1Code LDA #$01 ;Tempx=#$01 STA TempX JSR Table1Code RTS *********************** * * Setup * *********************** SETUP JSR MOVE300TBL ;move 32 bytes to 0300 JSR RESETSTUFF ;setup vectors, variables and jsr Table1code LDA #$F8 ;init 307 and 317 to F8 STA $0307 STA $0317 LDA #$40 ;mb inits STA $C40B ;aux control register LDA #$7F STA $C40E ;interrupt enable LDA #$C0 STA IFR ;interrupt flag STA $C40E ;interrupt enable LDA #$FF STA $C404 ;t1 low order LDA #$40 STA $C405 ;t1 high order CLI RTS *********************** * * COUNTER2LIMIT * * counter 2 reached limit * *********************** COUNTER2LIMIT LDX #$00 SUB7L0 LDA TABLE1,X CMP #$02 BCS SUB7L1 TAY LDA $852F,Y BNE SUB7L1 LDA TBL300N2,X CMP $851B BEQ SUB7L1 DEC TBL300N2,X SUB7L1 LDA $8529,X CMP #$02 BCS $87DA ;SUB7L2 TAY LDA $852F,Y BNE $87DA ;SUB7L2 LDA TBL300N4,X CMP $851B BEQ $87DA ;SUB7L2 DEC TBL300N4,X INX CPX #$03 BNE SUB7L0 RTS SEI LDA #$00 ;run table1code with X set to 0 then 1 STA TempX JSR Table1Code INC TempX JSR Table1Code JSR Music2Card ; then send music to card RTS CLI RTS ****************** * * sub1 * ****************** MOVE300TBL SUB1 LDX #$00 ;move 32 bytes from 8803 to 0300 LOOP1 LDA REGTABLE,X STA $0300,X INX CPX #$20 BNE LOOP1 RTS ****************** * * table 77 * ****************** REGTABLE TABLE77 l300 DFB #$01 ;table of 8 bytes DFB #$00 ;but actually table 16 bytes, registers on AY8190 DFB #$01 DFB #$00 DFB #$01 DFB #$00 DFB #$00 DFB #$3F L308 DFB #$00 ;table of 8 bytes DFB #$00 DFB #$00 DFB #$00 DFB #$00 DFB #$00 DFB #$00 DFB #$00 ;un-used? envelope control ;see music2card, Y counts from 0 to E(15) L310 DFB #$01 ;table of 8 bytes DFB #$00 ;but actually table 16 bytes, registers on AY8190 DFB #$01 DFB #$00 DFB #$01 DFB #$00 DFB #$00 DFB #$3F L318 DFB #$00 ;table of 8 bytes DFB #$00 DFB #$00 DFB #$00 DFB #$00 DFB #$00 DFB #$00 DFB #$00 ;un-used? envelope control ;see music2card, Y counts from 0 to E(15)
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