Playing 128k Spectrum (AY-3-8912) music on SAM (SAA1099)
Utility
Submitted by Dan Dooré on Wednesday, May 16, 2018 - 14:12.
Download
Copyrights
Public Domain
Author
Description
The Cookie AY player is one routine that usually resides in the lower 16k bank. The largest chuck is a lookup table for converting AY frequencies to SAA frequencies (attached).
This routine or modifications (I disassembled it) has been used in all Speccy 128k demo conversions on the SAM.
ORG 0 DUMP 3,$ LD C,255 ;soundchip on LD B,1 LD A,onoff OUT (C),A DEC B LD A,1 OUT (C),A DEFS $/256+1*256-$ ;the outputs to the AY-3-8912’s registers are intercepted and ;are used as memory mapped i/o memoryio: ayfine1: DEFB 0 aycoarse1: DEFB 0 ayfine2: DEFB 0 aycoarse2: DEFB 0 ayfine3: DEFB 0 aycoarse3: DEFB 0 aynoisepitch: DEFB 0 aymixer: DEFB 0 ayvol1: DEFB 0 ayvol2: DEFB 0 ayvol3: DEFB 0 ayenvlength: ayenvlen: DEFB 0 ayenvlen2: DEFB 0 ayenvshape: DEFB 0 saaouts: DEFB tone2 saatone2: DEFB 0 DEFB amp2 saaamp2: DEFB 0 DEFB tone3 saatone3: DEFB 0 DEFB amp3 saaamp3: DEFB 0 DEFB oct32 saaoct32: DEFB 0 DEFB tone5 saatone5: DEFB 0 DEFB amp5 saaamp5: DEFB 0 DEFB oct54 saaoct54: DEFB 0 DEFB noisefreq saanoisefreq: DEFB 0 DEFB freqen saafreqen: DEFB 0 DEFB noiseen saanoiseen: DEFB 0 DEFB onoff DEFB 1 play.it: LD HL,ayfine1 LD E,(HL) ;ayfine1 INC L LD A,(HL) ;aycoarse1 AND 15 LD D,A EX DE,HL ADD HL,HL LD DE,pitchconvert ADD HL,DE LD A,(HL) LD (saatone2),A INC L LD A,(HL) LD (stoctave1+1),A LD HL,ayfine2 LD E,(HL) ;ayfine2 INC HL LD A,(HL) ;aycoarse2 AND 15 LD D,A EX DE,HL ADD HL,HL LD DE,pitchconvert ADD HL,DE LD A,(HL) LD (saatone3),A INC L LD A,(HL) RLCA RLCA RLCA RLCA stoctave1: OR 0 LD (saaoct32),A LD HL,ayfine3 LD E,(HL) ;ayfine3 INC L LD A,(HL) ;aycoarse3 AND 15 LD D,A EX DE,HL ADD HL,HL LD DE,pitchconvert ADD HL,DE LD A,(HL) LD (saatone5),A INC L LD A,(HL) RLCA RLCA RLCA RLCA LD (saaoct54),A LD A,(aynoisepitch) LD HL,noiseconvert ADD L LD L,A LD A,(HL) LD (saanoisefreq),A LD A,(aymixer) LD DE,0 BIT 0,A JR NZ,c2nsound SET 2,D c2nsound: BIT 3,A JR NZ,c2nnoise SET 2,E c2nnoise: BIT 1,A JR NZ,c3nsound SET 3,D c3nsound: BIT 4,A JR NZ,c3nnoise SET 3,E c3nnoise: BIT 2,A JR NZ,c5nsound SET 5,D c5nsound: BIT 5,A JR NZ,c5nnoise SET 5,E c5nnoise: LD A,D LD (saafreqen),A LD A,E LD (saanoiseen),A LD HL,ayvol1 LD A,(HL) RLCA RLCA RLCA RLCA OR (HL) LD (saaamp2),A INC HL LD A,(HL) ;chan2vol RLCA RLCA RLCA RLCA OR (HL) LD (saaamp3),A INC HL ;chan3vol LD A,(HL) RLCA RLCA RLCA RLCA OR (HL) LD (saaamp5),A LD BC,&00FF LD HL,saaouts OUTI OUTI OUTI OUTI OUTI OUTI OUTI OUTI OUTI OUTI OUTI OUTI OUTI OUTI OUTI OUTI OUTI OUTI OUTI OUTI OUTI OUTI OUTI OUTI RET amp0: EQU 0 amp1: EQU 1 amp2: EQU 2 amp3: EQU 3 amp4: EQU 4 amp5: EQU 5 tone0: EQU 8 tone1: EQU 9 tone2: EQU 10 tone3: EQU 11 tone4: EQU 12 tone5: EQU 13 oct10: EQU 16 oct32: EQU 17 oct54: EQU 18 freqen: EQU 20 noiseen: EQU 21 noisefreq: EQU 22 env0: EQU 24 env1: EQU 25 onoff: EQU 28 noiseconvert: DEFB 0,0,0,0,0,0,17,17,17,17,17,17,17,17,17,17,34 DEFB 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34 envconvert: DEFB 132,132,132,132,140,140,140,140 DEFB 134,132,138,130,142,130,138,140 pitchconvert: MDAT “AYtable.bin”
The attached aytable.bin is an 8k file containing the conversions.
Trivia
Cookies Hot Butter demo used 128K music - source is here: http://simoncooke.com/samcoupe/infobase/source/htbtter.txt and there’s a section called “Convert 128k Spectrum (AY-3-8912) music to SAM (SAA1099)”
Related Forum Topics
SAM SAA to Spectrum (Next) AY's, would it be possible? | Updated: Tue, 08/03/2021 - 22:13 | azesmbog