From f800a6e7e512ee1f702ecd0baa55206170cb62bd Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Sat, 3 Feb 2018 23:58:59 -0500 Subject: [PATCH] mockingboard: split out routines to common library --- mockingboard/Makefile | 3 +- mockingboard/ksp_theme_uncompressed.s | 158 ++------------------------ mockingboard/mock_test.dsk | Bin 143360 -> 143360 bytes 3 files changed, 11 insertions(+), 150 deletions(-) diff --git a/mockingboard/Makefile b/mockingboard/Makefile index 004de8a8..662a4096 100644 --- a/mockingboard/Makefile +++ b/mockingboard/Makefile @@ -11,7 +11,8 @@ mock.dsk: KSP_THEME_UNCOMPRESSED KSP_THEME_UNCOMPRESSED: ksp_theme_uncompressed.o ld65 -o KSP_THEME_UNCOMPRESSED ksp_theme_uncompressed.o -C ./apple2_1000.inc -ksp_theme_uncompressed.o: ksp_theme_uncompressed.s +ksp_theme_uncompressed.o: ksp_theme_uncompressed.s \ + ../asm_routines/mockingboard.s ca65 -o ksp_theme_uncompressed.o ksp_theme_uncompressed.s -l ksp_theme_uncompressed.lst ED: duet.o diff --git a/mockingboard/ksp_theme_uncompressed.s b/mockingboard/ksp_theme_uncompressed.s index b430e0c0..7ec09f00 100644 --- a/mockingboard/ksp_theme_uncompressed.s +++ b/mockingboard/ksp_theme_uncompressed.s @@ -1,10 +1,4 @@ -; http://macgui.com/usenet/?group=2&id=8366 - -; Mockingboad programming: -; + Has two 6522 I/O chips connected to two AY-3-8910 chips -; + Optionally has some speech chips controlled via the outport on the AY -; + Often in slot 4 -; TODO: how to auto-detect? +; Play the KSP theme, but uncompressed (so pretty huge and slow to load) .include "zp.inc" @@ -116,154 +110,20 @@ done_play: forever_loop: jmp forever_loop - - -; left speaker -MOCK_6522_ORB1 EQU $C400 ; function to perform, OUT 1 -MOCK_6522_ORA1 EQU $C401 ; data, OUT 1 -MOCK_6522_DDRB1 EQU $C402 ; data direction, OUT 1 -MOCK_6522_DDRA1 EQU $C403 ; data direction, OUT 1 - -; right speaker -MOCK_6522_ORB2 EQU $C480 ; function to perform, OUT 2 -MOCK_6522_ORA2 EQU $C481 ; data, OUT 2 -MOCK_6522_DDRB2 EQU $C482 ; data direction, OUT 2 -MOCK_6522_DDRA2 EQU $C483 ; data direction, OUT 2 - -; AY-3-8910 commands on port B -; RESET BDIR BC1 -MOCK_AY_RESET EQU $0 ; 0 0 0 -MOCK_AY_INACTIVE EQU $4 ; 1 0 0 -MOCK_AY_READ EQU $5 ; 1 0 1 -MOCK_AY_WRITE EQU $6 ; 1 1 0 -MOCK_AY_LATCH_ADDR EQU $7 ; 1 1 1 - - - ;======================== - ; Mockingboard card - ; Essentially two 6522s hooked to the Apple II bus - ; Connected to AY-3-8910 chips - ; PA0-PA7 on 6522 connected to DA0-DA7 on AY - ; PB0 on 6522 connected to BC1 - ; PB1 on 6522 connected to BDIR - ; PB2 on 6522 connected to RESET - - ;======================== - ; Mockingboard Init - ;======================== -mockingboard_init: - ; Initialize the 6522s - ; set the data direction for all pins of PortA/PortB to be output - lda #$ff ; all output (1) - sta MOCK_6522_DDRB1 - sta MOCK_6522_DDRA1 - sta MOCK_6522_DDRB2 - sta MOCK_6522_DDRA2 - rts - - ;====================== - ; Reset Left AY-3-8910 - ;====================== -reset_ay_left: - lda #MOCK_AY_RESET - sta MOCK_6522_ORB1 - lda #MOCK_AY_INACTIVE - sta MOCK_6522_ORB1 - rts - - ;====================== - ; Reset Right AY-3-8910 - ;====================== -reset_ay_right: - lda #MOCK_AY_RESET - sta MOCK_6522_ORB2 - lda #MOCK_AY_INACTIVE - sta MOCK_6522_ORB2 - rts - - -; Write sequence -; Inactive -> Latch Address -> Inactive -> Write Data -> Inactive - - ;======================= - ; Write Right AY-3-8910 - ;======================= - ; register in Y - ; value in X - -write_ay_right: - ; address - sty MOCK_6522_ORA1 ; put address on PA - lda #MOCK_AY_LATCH_ADDR ; latch_address on PB - sta MOCK_6522_ORB1 - lda #MOCK_AY_INACTIVE ; go inactive - sta MOCK_6522_ORB1 - - ; value - stx MOCK_6522_ORA1 ; put value on PA - lda #MOCK_AY_WRITE ; write on PB - sta MOCK_6522_ORB1 - lda #MOCK_AY_INACTIVE ; go inactive - sta MOCK_6522_ORB1 - - rts - - ;======================= - ; Write Left AY-3-8910 - ;======================= - ; register in X - ; value in Y - -write_ay_left: - ; address - sty MOCK_6522_ORA2 ; put address on PA - lda #MOCK_AY_LATCH_ADDR ; latch_address on PB - sta MOCK_6522_ORB2 - lda #MOCK_AY_INACTIVE ; go inactive - sta MOCK_6522_ORB2 - - ; value - stx MOCK_6522_ORA2 ; put value on PA - lda #MOCK_AY_WRITE ; write on PB - sta MOCK_6522_ORB2 - lda #MOCK_AY_INACTIVE ; go inactive - sta MOCK_6522_ORB2 - - rts - - ;======================================= - ; clear ay -- clear all 14 AY registers - ; should silence the card - ;======================================= -clear_ay_left: - ldy #14 - ldx #0 -clear_ay_left_loop: - jsr write_ay_left - dey - bpl clear_ay_left_loop - rts - - ;======================================= - ; clear ay -- clear all 14 AY registers - ; should silence the card - ;======================================= -clear_ay_right: - - ldy #14 - ldx #0 -clear_ay_right_loop: - jsr write_ay_right - dey - bpl clear_ay_right_loop - rts - +;========= ;routines +;========= .include "../asm_routines/gr_offsets.s" .include "../asm_routines/text_print.s" +.include "../asm_routines/mockingboard.s" +;======= ; music +;======= .include "ksptheme_uncompressed.inc" +;========= +; strings +;========= mocking_message: .asciiz "ASSUMING MOCKINGBOARD IN SLOT #4" done_message: .asciiz "DONE PLAYING" diff --git a/mockingboard/mock_test.dsk b/mockingboard/mock_test.dsk index bd8cb2e63236d8c4c9b6e7c172cbce590b6a61cc..a9e7e47691025b71db0fdc2487dbc5b80dbc9ca9 100644 GIT binary patch delta 818 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