Jump to content

Tursi

Members
  • Posts

    8,706
  • Joined

  • Last visited

  • Days Won

    9

Tursi last won the day on December 27 2023

Tursi had the most liked content!

6 Followers

About Tursi

  • Birthday 11/29/1971

Contact / Social Media

Profile Information

  • Custom Status
    HarmlessLion
  • Gender
    Male
  • Location
    YYC
  • Interests
    Buy me a Kofi! https://Ko-fi.com/tursilion

    Or fill in my 'SurveyWalrus' and help choose my next task!
    https://harmlesslion.com/cgi-bin/walrusquery.cgi
  • Currently Playing
    Current Project: Website update
  • Playing Next
    Next project (per survey): Finish Super Space Acer ColecoVision

Recent Profile Visitors

34,045 profile views

Tursi's Achievements

Quadrunner

Quadrunner (9/9)

10.2k

Reputation

  1. That's possible, especially given in the /4 it IS only 6 bytes per character!
  2. It looks interesting, but it looks like you need to have an Azure account as well just to access the service...? Still, looks like it might work out cheaper than any other service... to start at least
  3. It took significantly more tries to get SNAKE as in the video. This code works, but isn't perfect: 10 REM SNAKE 20 CALL CLEAR 30 X=10 40 Y=10 50 DX=1 60 DY=0 65 PX=X 66 PY=Y 70 CALL HCHAR(Y,X,64) 80 GOSUB 372 90 REM MOVE SNAKE 100 GOSUB 400 110 X=X+DX 120 Y=Y+DY 130 IF (X<1)+(X>28)+(Y<1)+(Y>12)THEN 380 140 CALL GCHAR(Y,X,C) 150 IF C<>ASC("O")THEN 160 151 GOSUB 372 160 CALL HCHAR(Y,X,64) 170 FOR DELAY=1 TO 50 180 NEXT DELAY 190 REM HANDLE KEYS 200 CALL KEY(0,K,S) 210 IF K=ASC("E")THEN 250 220 IF K=ASC("X")THEN 280 230 IF K=ASC("S")THEN 310 240 IF K=ASC("D")THEN 340 245 GOTO 100 250 DX=0 260 DY=-1 270 GOTO 100 280 DX=0 290 DY=1 300 GOTO 100 310 DX=-1 320 DY=0 330 GOTO 100 340 DX=1 350 DY=0 360 GOTO 100 370 REM GENERATE FOOD 372 FX=INT(RND*28)+1 374 FY=INT(RND*12)+1 376 IF (FX=X)*(FY=Y)THEN 372 378 CALL HCHAR(FY,FX,79) 379 RETURN 380 REM END GAME 382 PRINT "GAME OVER" 390 END 400 REM SNAKE TRAIL 410 CALL HCHAR(PY,PX,32) 420 PX=X 430 PY=Y 460 CALL HCHAR(PY,PX,45) 461 RETURN Importantly the trail is only a single character long, so you can never hit yourself and you never grow. It required significant coaxing to make the keyboard and food work, to remember the limitations of IF..THEN, and repeatedly I had to call out specific line numbers in its own code. BUT it did better than ChatGPT did and I didn't WRITE any of this code. (Oh, and for some reason it decided maximum row was 12... but that's good enough for today.)
  4. I played with it after watching the video posted in the Python thread, but I didn't want to hijack that thread. What might be most interesting was this answer, if it's true: Basically, I iterated with it till it created a TI BASIC program that should actually work. This has potential - the system could gain experience from many people teaching it. But it's also highly probable that in many areas it will be taught garbage. It would be interesting if someone else could try it - go to Meta.AI and ask for a program that moves an asterisk across the screen (I actually asked for a human, but it was struggling and kept wanting to use a predefined character) using TI BASIC for the TI-99/4A (you have to specify that, or it uses the calculator syntax). See if it gets it in one try or not. 10 REM MOVECHAR 20 X=1 30 PRINT TAB(X);"*" 40 X=X+1 50 IF X>28 THEN 60 55 GOTO 70 60 X=1 70 FOR DELAY=1 TO 50 80 NEXT DELAY 90 GOTO 30 100 END This isn't a very interesting program, but it's correct and runs. We got there solely by my telling it how to fix errors in the generated code, took 10 iterations.
  5. Cartpack is the funniest one, because there's almost no PC executable code in there. It's a bunch of structures, ROM data, copyright debug, and four 1-line functions to report the ROMs to the emulator. Oddly, using OutputDebugString is now considered suspicious activity. I had no idea many viruses make a point of reporting every step they take. (Maybe the vendors assume that such things are removed from release builds, but running DebugView will quickly show you they aren't ).
  6. I'm sure they've thought about it many times. I dunno if signing it will help... I keep meaning to buy a cert and find out. Just hate the idea of a recurring yearly cost for something that's supposed to just be a hobby. I guess I could go subscription, lootbox and DLC like everything else? Classic99 399 Ultra! Only $2.99/month, comes with 1 disk drive and 32k RAM, just like your original system! Install AMS for only $19.99, and every drive is only another $12! Or purchase the random "PEBBOX" for $7.99 and you'll never know which expansion you might unlock! It might even be the rare Video controller, or the side-car acoustic coupler (you'll have to hold your phone against your PC speakers for this one.)
  7. Getting more and more instances of false positives. At least I hope they're false!! Every single one is an AI detection, so far.
  8. The 9901 interrupt pin was an interesting gotcha too... I accidentally turned on interrupts on the joystick left line when I added the SID Blaster support to Super Space Acer. I didn't realize it was interrupts until I asked ArcadeShopper to try it and he reported that it lit up the PEB. Basically, I was turning on the SID blaster by writing to the keyboard column select at CRU 24. But, I accidentally wrote >24. The result was holding left would freeze the game while the console ROM tried to figure out which DSR asked for an interrupt. Since Classic99 didn't support 9901 pin interrupts, there was no real help there. >24 is 36, but the CRU pin space is only 32 bits long, and Classic99 also wasn't wrapping the address around in that space like it was supposed to. (Bit at address 4 is joystick left.) Soooo.. those two changes to the 9901 code came out of my needing several days to figure that out. Though it's kind of neat to know that yes, joystick and keyboard inputs can trigger interrupts.
  9. This update is worth mentioning - file system fix. It's a gotcha. Classic99 399.069 This fixes a detection issue accessing DF128 headerless on FIAD if any part of your disk path contains a period (assuming an extension exists, which isn't allowed). It was checking the entire path instead of just the filename. Note you can always bypass that restriction using the ".?X" option (ie: DSK1.?X.WIN.EXE would allow opening an exe as DF128). Also: mute "Skipped 0 sentences on shut up" message (we don't care if it was 0) fixed case of DLL load on FilterDLL.dll and hq4xdll.dll for those running from case sensitive filesystems. (If you renamed the DLLs, you may have to rename them back). emit a warning in the debug log if loading a DSR to an invalid CRU base correct address wraparound in the 9901 address mapping add interrupt pin warning to debug log in the 9901 emulation (Classic99 does not support 9901 hardware interrupts) don't spam the same debug statement repeatedly to the log (note: no timeout. If you NEED to see a repeated statement, force another one in between. For instance, press Control to get the speech clear debug) also note the external debugger (debugview) is NOT filtered this way, so that you have best visibility there Given that bug has been in there since I first added DF128 headerless support, it's probably a pretty obscure case. But there was no help in the debug log when it happened, so worth fixing. As usual, the web site may require 24 hours to update but the download zip is uploaded (edit: looks like I got in right before the update ran ) https://harmlesslion.com/software/classic99 (Regarding the 3 uploads comment from way back, yeah. I had to push to git, then ftp the zip to my server, then go into my database update tool and write the update there. Now I just push to git and everything else is automated. )
  10. I'll give these a try! As for the SYNTAX ERROR, you'll probably find all you needed was to insert a CALL INIT before calling CALL LOAD. (Edit) Impressive amount of work there! The Megaman sprite looks great, too!
  11. Well, he won't get a thousand bucks for it. And if he does, I have two I'm not using...
  12. I doubt the disk side is different, but I only have the one dump. It definitely follows the TI DSR, but in doing a direct compare just now, it doesn't directly compare. It's possible he reassembled it with his patches rather than just hacking the binary. (Given that he needed to free the last 512 bytes for the hardware interface, that makes sense.)
  13. Well, I wrote literally 42 helpers for converting, massaging, and mangling VGM (and other audio) files, so let me have a quick play. They'll handle the noise pitch conversion for you or let you do it manually, and if you don't want to use my compressor the final intermediate format is a simple text file that should be easy to pack into whatever you are using. https://harmlesslion.com/software/vgmcomp2/ The VGM unpacker informed me one potential issue with re-tuning the noise: It seems like that's true only in selected parts though, as I test play it. (The 0 notes tuned output there is a bug, it still retunes all the noise). (Note it also converted the 50hz original for 60hz playback). My default converter in that case will keep the channel 2 frequency and map the noise to the closest fixed shift rate, so I went ahead and tried that out... So we can see that 3935 notes out of 8206 may have changed. If they are drum beats, we probably won't notice. If they aren't, we probably will. It's good for a little while, but about halfway through the song there are some long notes on channel 2 AND some long notes on the custom noise channel... and changing them to non-custom as the converter wanted to did not work. (Around 1:24). This is a bit of a tricky case. Most of the song is fine with the fall-back to fixed rates. But those places absolutely are not. So it would be necessary to either mute the noise channel during those areas, or deliberately detune channel 2, or live with the detuned noise. I don't know if there's a happy medium there. My tools would allow the detune of channel 2, and then overlay 2 onto the noise channel so that the prepare tool can make the right decisions. D:\new>d:\work\ti\vgmcomp2\release\scalepitch.exe 1.066667 bbcapple-palsms-3_2.vgm_ton02.60hz VGMComp2 Pitch Scaling Tool - v20210707 Opened channel 0: bbcapple-palsms-3_2.vgm_ton02.60hz Imported 12400 rows, scaling by 1.066667 0 notes clipped (lossy) 0 notes zeroed (lossy) Writing: bbcapple-palsms-3_2.vgm_ton02.60hz ** DONE ** But this was really really bad and immediately wrong, though, as soon as channel 2 kicked in. So I think the only answer, if using this source, would be to let the noise be slightly detuned during those long stretches. It would be correct everywhere else. There appears to be no need to mess with channel 2 vs 3 anywhere but those long sections, but that would require hand editting of the psg files to cut out just the parts to edit, so in the interest of speed, I went ahead and overlaid channel 2 on 3 (after undoing the pitch scale above). This means that both channels will have the same pitch so prepare doesn't try to remap the noise, while not interfering with the custom noise pitches while channel 2 is otherwise silent. (I had to make a new tool, I never thought of this case before): Also had to tweak the prepare tool to accept a case where channel 2 and noise were both playing but asking for the same shift count. Made it seem a lot happier (we preprocessed away a lot of the noises that were having trouble). Seems to sound okay though! I dunno. Sorry for the spam. I just wanted to take a stab and it, and it revealed a couple places I could do better, so was happy for that. bbcapple_vgmcomp2.zip
  14. We are all building on the work that came before us - that's how we advance
  15. DJ's here in Calgary, I did lunch with him once and saw some of his robotics projects. Oddly, he also knows one of the guys I worked with down in San Francisco at Neato. Small world!
×
×
  • Create New...