|
Post by Arkhan on Nov 7, 2019 16:52:50 GMT
I thought we had sorted out the legato thing years ago. I don't remember now. Maybe we should look back into the legato thing to see if we did something wrong in the output Squirrel makes.
|
|
|
Post by turboxray on Nov 7, 2019 17:02:17 GMT
theoldman you guys did the PSG player/code for hucard projects right? Are you planning on upgrading it with any new features? I mean CD system owners could still use the new version; it's just have to sit in CD ram instead of the bios.
|
|
|
Post by gredler on Nov 7, 2019 18:38:43 GMT
I thought we had sorted out the legato thing years ago. I don't remember now. Maybe we should look back into the legato thing to see if we did something wrong in the output Squirrel makes. I do not remember a solution. If there is one please share! I'll start digging around the old threads as I might have missed a post some where. I was never able to get this working, and the two MML musician homies I tried to bring in couldn't either.
|
|
|
Post by theoldman on Nov 7, 2019 18:51:13 GMT
theoldman you guys did the PSG player/code for hucard projects right? Are you planning on upgrading it with any new features? I mean CD system owners could still use the new version; it's just have to sit in CD ram instead of the bios.
No. We wrote the MML converter, the Huc support functions, and made minor changes to the startup code so the player would run on a HuCard. The player itself is a (commented) disassembly of the psgBios that I found on-line somewhere, and finished.
I do remeber going through the disassembly, and wishing that there were available op-codes to add to it; I think there are 3 slots open in one of the sequences, though.
|
|
|
Post by Arkhan on Nov 7, 2019 18:59:04 GMT
theoldman you guys did the PSG player/code for hucard projects right? Are you planning on upgrading it with any new features? I mean CD system owners could still use the new version; it's just have to sit in CD ram instead of the bios.
No. We wrote the MML converter, the Huc support functions, and made minor changes to the startup code so the player would run on a HuCard. The player itself is a (commented) disassembly of the psgBios that I found on-line somewhere, and finished.
I do remeber going through the disassembly, and wishing that there were available op-codes to add to it; I think there are 3 slots open in one of the sequences, though.
Time to add that sample support we talked about like 4 years ago or more. lol. .... .... heh.
|
|
|
Post by Arkhan on Nov 9, 2019 8:08:21 GMT
Just gonna leave this here for Legato. Works fine, as documented in the manual. MML used: .TRACK yep .CHANNEL 0 Setup
T80 V31 L16 ^D0
leg=C&C+&D&D+&E&F&F+&G&G+&A&A+&B&B&A+&A&G+&G&F+&F&E&D+&D&C+&C&'
noleg=CC+DD+EFF+GG+AA+BBA+AG+GF+FED+DC+C'
.CHANNEL 1
O2 P15,15 @9 @E01
[5(leg)RRR(noleg)]
.CHANNEL 2
O3 P15,15 @9 @E01
[5(leg)RRR(noleg)]
.CHANNEL 3
O4 P15,15 @9 @E01
[5(leg)RRR(noleg)]
.CHANNEL 4
O2 P15,15 @9 @E01
R16[5(leg)RRR(noleg)]
.CHANNEL 5
O3 P15,15 @9 @E01
R16[5(leg)RRR(noleg)]
.CHANNEL 6
O4 P15,15 @9 @E01
R16[5(leg)RRR(noleg)]
.Envelope
.mod 0 wiggle
0,0,1,1,2,2,3,3,2,2,1,1,0,0,-1,-1,-2,-2,-3,-3,-2,-2,-1,-1
.mod 1 wiggle2
0,0,2,2,4,4,6,6,4,4,2,2,0,0,-2,-2,-4,-4,-6,-6,-4,-4,-2,-2 Attachments:squirrel.pce (112.5 KB)
|
|
|
Post by gredler on Nov 9, 2019 9:32:00 GMT
Just gonna leave this here for Legato. Works fine, as documented in the manual. MML used: .TRACK yep .CHANNEL 0 Setup
T80 V31 L16 ^D0
leg=C&C+&D&D+&E&F&F+&G&G+&A&A+&B&B&A+&A&G+&G&F+&F&E&D+&D&C+&C&'
noleg=CC+DD+EFF+GG+AA+BBA+AG+GF+FED+DC+C'
.CHANNEL 1
O2 P15,15 @9 @E01
[5(leg)RRR(noleg)]
.CHANNEL 2
O3 P15,15 @9 @E01
[5(leg)RRR(noleg)]
.CHANNEL 3
O4 P15,15 @9 @E01
[5(leg)RRR(noleg)]
.CHANNEL 4
O2 P15,15 @9 @E01
R16[5(leg)RRR(noleg)]
.CHANNEL 5
O3 P15,15 @9 @E01
R16[5(leg)RRR(noleg)]
.CHANNEL 6
O4 P15,15 @9 @E01
R16[5(leg)RRR(noleg)]
.Envelope
.mod 0 wiggle
0,0,1,1,2,2,3,3,2,2,1,1,0,0,-1,-1,-2,-2,-3,-3,-2,-2,-1,-1
.mod 1 wiggle2
0,0,2,2,4,4,6,6,4,4,2,2,0,0,-2,-2,-4,-4,-6,-6,-4,-4,-2,-2 Heck yeah thank you! I'm looking forward to trying this out! Soon our Dog may howl then name Arkan at the moon! Well, at least it might howl from a low note to a high one without steps beteen notes This makes the adventure theoldman suggested so much easier, really appreciated sir! When I have something to share I'll post it here - thanks again! Edit: I did a fresh install of HuC and Squirrel using the links above, and tried running make.bat and this is the result I get: C:\squirrel>make.bat
C:\squirrel>mml2pce mml/gnop.mml mml2pce - convert mml file to pce playable data Version 2.4.3 Beta Copyright 2010 M.E. Ward / Aetherbyte For Non-Commercial use only.
Special thanks to GobanToba for Vista /Win7 testing. Processing [mml/gnop.mml] Processing Track: [.TRACK 0 GNOP] Processing Channel Section: [.CHANNEL 0 setup] Processing Channel Section: [.CHANNEL 1 TheBass] Processing Channel Section: [.CHANNEL 2 leadA] Channel 2 [leadA]: Ignoring 2 (50) Processing Channel Section: [.CHANNEL 3 leadAecho] Channel 3 [leadAecho]: Ignoring 2 (50) Processing Channel Section: [.CHANNEL 4 leadB] Channel 4 [leadB]: Ignoring 2 (50) Processing Channel Section: [.CHANNEL 5 leadBecho] Channel 5 [leadBecho]: Ignoring 2 (50) Processing Channel Section: [.CHANNEL 6 DRUM]
C:\squirrel>huc -s squirrel.c HuC (v3.99-c266d57, 2018-07-07)
No errors
C:\squirrel>pceas squirrel.s PC Engine Assembler (v 3.23-c266d57, 2018-07-07)
pass 1 pass 2 #[2] startup.asm 440 00:E085 sta _ram_hdwr_tia Undefined symbol in operand field! 442 00:E08A sta _ram_hdwr_tia_rts Undefined symbol in operand field! 449 00:E094 sta LOW_BYTE <_cx Undefined symbol in operand field! 449 00:E098 sta HIGH_BYTE <_cx Undefined symbol in operand field! 450 00:E09A lda LOW_BYTE _rndseed Undefined symbol in operand field! 450 00:E09D sta LOW_BYTE <_dx Undefined symbol in operand field! 450 00:E09F lda HIGH_BYTE _rndseed Undefined symbol in operand field! 450 00:E0A2 sta HIGH_BYTE <_dx Undefined symbol in operand field! 558 00:E0B1 sta LOW_BYTE <_di Undefined symbol in operand field! 558 00:E0B5 sta HIGH_BYTE <_di Undefined symbol in operand field! 568 00:E0B7 ldx <_di Undefined symbol in operand field! 568 00:E0B9 lda <_di +1 Undefined symbol in operand field! 577 00:E0C0 sta <_bl Undefined symbol in operand field! 580 00:E0C4 sta <_cl Undefined symbol in operand field! 581 00:E0C6 lda _font_color+1 Undefined symbol in operand field! 581 00:E0C9 sta <_ah Undefined symbol in operand field! 582 00:E0CB lda _font_color Undefined symbol in operand field! 585 00:E0D1 .fntld: sta <_al Undefined symbol in operand field! 588 00:E0D7 sta <_si Undefined symbol in operand field! 591 00:E0DD sta <_si+1 Undefined symbol in operand field! #[3] sound.asm 44 00:FB3F lda <_dh ; get function number Undefined symbol in operand field! 53 00:FB47 lda <_al ; get parameter Undefined symbol in operand field! #[4] main\PsgBiosFuncs.asm 52 02:C007 lda <_al ; get parameter. Calls above probably trashed A Undefined symbol in operand field! #[4] main\PsgBiosFuncs.asm 253 02:C0D1 lda <_al Undefined symbol in operand field! 255 02:C0D6 lda <_ah Undefined symbol in operand field! 265 02:C0DC lda <_al Undefined symbol in operand field! 267 02:C0E1 lda <_ah Undefined symbol in operand field! 277 02:C0E7 lda <_al Undefined symbol in operand field! 279 02:C0EC lda <_ah Undefined symbol in operand field! 288 02:C0F2 lda <_al Undefined symbol in operand field! 290 02:C0F7 lda <_ah Undefined symbol in operand field! 299 02:C0FD lda <_al Undefined symbol in operand field! 301 02:C102 lda <_ah Undefined symbol in operand field! 311 02:C108 lda <_al Undefined symbol in operand field! 313 02:C10D lda <_ah Undefined symbol in operand field! 323 02:C113 lda <_al Undefined symbol in operand field! 325 02:C118 lda <_ah Undefined symbol in operand field! 382 02:C12F lda <_ah ; get debug wave number Undefined symbol in operand field! #[2] startup.asm 1515 00:FBCE inc _rndseed ; value at stated memory Undefined symbol in operand field! 1515 00:FBD3 inc _rndseed+1 Undefined symbol in operand field! 1539 00:FBF3 sta <_al Undefined symbol in operand field! 1542 00:FBF7 .t1: lsr <_al Undefined symbol in operand field! #[1] squirrel.s 69 0A:A462 sta <_dh Undefined symbol in operand field! 78 0A:A468 sta <_al ; _al is driver system number Undefined symbol in operand field! 92 0A:A491 sta <_dh Undefined symbol in operand field! 101 0A:A497 sta <_al ; irq to use. 1 = vsync Undefined symbol in operand field! 115 0A:A4EA sta <_dh ; save function Undefined symbol in operand field! 131 0A:A263 sta <_dh ; save function Undefined symbol in operand field! 137 0A:A269 sta <_ah Undefined symbol in operand field! 140 0A:A26F sta <_al Undefined symbol in operand field! 157 0A:A302 sta <_dh ; save function Undefined symbol in operand field! 163 0A:A308 sta <_al Undefined symbol in operand field! 166 0A:A30D sta <_ah Undefined symbol in operand field! 183 0A:A155 sta <_dh ; save function Undefined symbol in operand field! 189 0A:A15B sta _al Undefined symbol in operand field! 192 0A:A161 sta _ah Undefined symbol in operand field! 209 0A:A18B sta <_dh ; save function Undefined symbol in operand field! 215 0A:A191 sta _al Undefined symbol in operand field! 218 0A:A197 sta _ah Undefined symbol in operand field! 235 0A:A1C1 sta <_dh ; save function Undefined symbol in operand field! 241 0A:A1C7 sta _al Undefined symbol in operand field! 244 0A:A1CD sta _ah Undefined symbol in operand field! 261 0A:A1F7 sta <_dh ; save function Undefined symbol in operand field! 267 0A:A1FD sta _al Undefined symbol in operand field! 270 0A:A203 sta _ah Undefined symbol in operand field! 287 0A:A22D sta <_dh ; save function Undefined symbol in operand field! 293 0A:A233 sta _al Undefined symbol in operand field! 296 0A:A239 sta _ah Undefined symbol in operand field! 313 0A:A336 sta <_dh Undefined symbol in operand field! 319 0A:A33C sta _al Undefined symbol in operand field! 320 0A:A33F stz _ah Undefined symbol in operand field! 336 0A:A4D4 sta <_dh ; set function number Undefined symbol in operand field! 353 0A:A4DF sta <_dh ; set function number Undefined symbol in operand field! 371 0A:A298 sta <_dh ; set function number Undefined symbol in operand field! 377 0A:A29E sta _al Undefined symbol in operand field! 378 0A:A2A1 stz _ah Undefined symbol in operand field! 396 0A:A2CD sta <_dh ; set function number Undefined symbol in operand field! 402 0A:A2D3 sta _al Undefined symbol in operand field! 403 0A:A2D6 stz _ah Undefined symbol in operand field! 420 0A:A4F2 sta <_dh ; set function number Undefined symbol in operand field! 436 0A:A369 sta <_dh ; set function number Undefined symbol in operand field! 442 0A:A36F sta _al Undefined symbol in operand field! 443 0A:A372 stz _ah Undefined symbol in operand field! 460 0A:A39C sta <_dh ; set function number Undefined symbol in operand field! 466 0A:A3A2 sta _al Undefined symbol in operand field! 467 0A:A3A5 stz _ah Undefined symbol in operand field! 484 0A:A3CF sta <_dh ; set function number Undefined symbol in operand field! 490 0A:A3D5 sta _al Undefined symbol in operand field! 491 0A:A3D8 stz _ah Undefined symbol in operand field! 508 0A:A402 sta <_dh ; set function number Undefined symbol in operand field! 514 0A:A408 sta _al Undefined symbol in operand field! 531 0A:A432 sta <_dh ; set function number Undefined symbol in operand field! 537 0A:A438 sta _al Undefined symbol in operand field! 553 0A:A4AC sta <_dh Undefined symbol in operand field! 555 0A:A4B0 sta <_al Undefined symbol in operand field! 556 0A:A4B2 stz <_ah Undefined symbol in operand field! 562 0A:A4B9 sta <_dh Undefined symbol in operand field! 564 0A:A4BD sta <_al Undefined symbol in operand field! 566 0A:A4C1 sta <_ah Undefined symbol in operand field! 572 0A:A4C8 sta <_dh Undefined symbol in operand field! 574 0A:A4CC sta <_al Undefined symbol in operand field! # 101 error(s)
I then tried compiling a test level I made for looking at tilemaps and sprites and it compiles fine. Is there something I need to change or do after an inital setup of HuC and squirrel for make.bat to spit out a working .pce rom? I thought it was an issue with copy-pasting the above mml, but mml2pce works file with or without Arkhan's suggestion code. Maybe I am overlooking something in my late night lethargy, but I am still excited to hear some slidey notes!
|
|
|
Post by theoldman on Nov 9, 2019 18:31:44 GMT
Edit: I did a fresh install of HuC and Squirrel using the links above, and tried running make.bat and this is the result I get: C:\squirrel>make.bat
C:\squirrel>mml2pce mml/gnop.mml mml2pce - convert mml file to pce playable data Version 2.4.3 Beta Copyright 2010 M.E. Ward / Aetherbyte For Non-Commercial use only.
C:\squirrel>huc -s squirrel.c HuC (v3.99-c266d57, 2018-07-07)
No errors
C:\squirrel>pceas squirrel.s PC Engine Assembler (v 3.23-c266d57, 2018-07-07)
pass 1 pass 2 #[2] startup.asm 440 00:E085 sta _ram_hdwr_tia Undefined symbol in operand field! 442 00:E08A sta _ram_hdwr_tia_rts Undefined symbol in operand field! 449 00:E094 sta LOW_BYTE <_cx Undefined symbol in operand field! 449 00:E098 sta HIGH_BYTE <_cx Undefined symbol in operand field! 450 00:E09A lda LOW_BYTE _rndseed Undefined symbol in operand field! 450 00:E09D sta LOW_BYTE <_dx Undefined symbol in operand field! 450 00:E09F lda HIGH_BYTE _rndseed Undefined symbol in operand field! 450 00:E0A2 sta HIGH_BYTE <_dx .... 591 00:E0DD sta <_si+1 Undefined symbol in operand field! #[3] sound.asm 44 00:FB3F lda <_dh ; get function number Undefined symbol in operand field! 53 00:FB47 lda <_al ; get parameter Undefined symbol in operand field! ... 574 0A:A4CC sta <_al Undefined symbol in operand field! # 101 error(s)
I then tried compiling a test level I made for looking at tilemaps and sprites and it compiles fine. Is there something I need to change or do after an inital setup of HuC and squirrel for make.bat to spit out a working .pce rom? I thought it was an issue with copy-pasting the above mml, but mml2pce works file with or without Arkhan's suggestion code. Maybe I am overlooking something in my late night lethargy, but I am still excited to hear some slidey notes!
I can see you are using the 'latest' version of mml2pce, so that's good. You can use -p_ to get rid of -most- of the register errors, iirc.
But the real problem is you need to install elmer's patched version of squirrel. You're using the NewHuc, and the old squirrel has problems with it.
If you are doing a fresh install just to play with sound, you don't really need Arkhans squirrel. elmers squirrel-2019-11-01 is the known working version for HuC 3.99. It should include mml2pce, and everything should work.
|
|
|
Post by Arkhan on Nov 9, 2019 20:00:01 GMT
Oops, GNOP.mml has some octave shifts in the wrong spot lol. Doesnt impact anything really. songs still work. I'm curious if legato works on the modified one. I would assume yes at this point since it appears we aren't really in a state where "OMFG NOTHING WORKS MML SUCKS" anymore. Here is another sample of legato (attached). It's just some hasty crazy train guitar solo I ripped by plopping the MIDI into 3MLE, and copy pasting the 4ish bars of the solo out. You can again hear the difference between use of, and lack of legato. However I need to point out, the "slideyness" of a legato is wholly dependent on the tempo and duration of the notes involved and is generally for going between notes near each other physically, or "note"ly. The "Hot For Teacher" guitar intro is an example of what I mean by "note"ly. www.youtube.com/watch?v=bMPlPJP2brwThe tapping at the beginning is done across about half the neck of the guitar, but the notes are all keyed together so it doesn't sound stupid. If you move your tapping finger just like, two frets in either direction, it goes to shit immediately. The slide you want is referred to as portamento, and you will be able to mess with that using the sweep stuff we've previously mentioned. Squirrel has no "portamento" command. It's not documented by us, Develo, official docs, nor is it in the player. The Sweep can do it though. You just need to experiment and dial it in. You can hear similar things in Atlantean. The alarm going off at the start of the level is a slide using the sweep. EDIT: youtu.be/z4gbl_OW5WI?t=56Here watch Josh play Atlantean and listen to the weooopweoooop sound. A dog howl would just be that slower, and in the opposite direction, I'd say. Attachments:squirrel.pce (112.5 KB)
|
|
|
Post by gredler on Nov 9, 2019 20:34:13 GMT
You can again hear the difference between use of, and lack of legato. However I need to point out, the "slideyness" of a legato is wholly dependent on the tempo and duration of the notes involved and is generally for going between notes near each other physically, or "note"ly. The "Hot For Teacher" guitar intro is an example of what I mean by "note"ly. www.youtube.com/watch?v=bMPlPJP2brwThe tapping at the beginning is done across about half the neck of the guitar, but the notes are all keyed together so it doesn't sound stupid. If you move your tapping finger just like, two frets in either direction, it goes to shit immediately. The slide you want is referred to as portamento, and you will be able to mess with that using the sweep stuff we've previously mentioned. Squirrel has no "portamento" command. It's not documented by us, Develo, official docs, nor is it in the player. The Sweep can do it though. You just need to experiment and dial it in. You can hear similar things in Atlantean. The alarm going off at the start of the level is a slide using the sweep. EDIT: youtu.be/z4gbl_OW5WI?t=56Here watch Josh play Atlantean and listen to the weooopweoooop sound. A dog howl would just be that slower, and in the opposite direction, I'd say. Thank you! Yes it was probably a poor setup and operator error, when I get the process building correctly I'll give the sweep and legato stuff a try! Using tempo and envelopes to bleed the notes together makes a lot of sense, thanks again!
|
|
pokun
Gun-headed
Posts: 85
Homebrew skills: HuC6280 assembly
|
Post by pokun on Nov 9, 2019 20:38:13 GMT
Elmer's latest HuC build (2018-07-07) includes "mml.exe". From the readme (from Uli I guess) it sounds like this is the Develo MML compiler ripped from a Develo CD (and converted to work on modern PCs?). Since I think Squirel is based on Develo's MML, is this "mml.exe" compatible with Squirrel?
|
|
|
Post by Arkhan on Nov 9, 2019 20:55:36 GMT
Elmer's latest HuC build (2018-07-07) includes "mml.exe". From the readme (from Uli I guess) it sounds like this is the Develo MML compiler ripped from a Develo CD (and converted to work on modern PCs?). Since I think Squirel is based on Develo's MML, is this "mml.exe" compatible with Squirrel? No. That one from what I remember, requires a much more rigid, sort of painful setup. I had examples laying around somewhere but that was awhile ago. We borrowed formatting ideas and such from Musica on MSX to simplify things compared to how HuSIC/PPMCK worked, in an effort to make more people interested. It did not work. lol
|
|
pokun
Gun-headed
Posts: 85
Homebrew skills: HuC6280 assembly
|
Post by pokun on Nov 10, 2019 0:19:09 GMT
I see, so it's an original MML. I guess the compiled sound files are at least somewhat compatible since Squirrel uses the System Card PSG BIOS though.
Now I just wish I could use Squirrel with assembly. Is it heavily dependant on HuC or could I just take the PSG driver files and assemble with my project?
|
|
|
Post by Arkhan on Nov 10, 2019 0:41:19 GMT
I see, so it's an original MML. I guess the compiled sound files are at least somewhat compatible since Squirrel uses the System Card PSG BIOS though. Now I just wish I could use Squirrel with assembly. Is it heavily dependant on HuC or could I just take the PSG driver files and assemble with my project? You should be able to fudge it into an asm project easily. The Squirrel outputs are bytecode data for the player, and a sngInit.c file that is just two C wrappers for setting up the data, and making init calls in assembly. The player stuff is mostly all C wrappers for assembly routines. I don't think you will have much trouble. If you do go this route, let me know. I wanted to try doing it at some point but haven't had time yet.
|
|
pokun
Gun-headed
Posts: 85
Homebrew skills: HuC6280 assembly
|
Post by pokun on Nov 11, 2019 14:13:23 GMT
Thank you, that's what I wanted to hear! I have some other things to do first, but I hope to take a look at it eventually. It beats having to code my own sound driver from scratch.
|
|