Jump to content


+AtariAge Subscriber
  • Content Count

  • Joined

  • Last visited

  • Days Won


jedimatt42 last won the day on May 7 2017

jedimatt42 had the most liked content!

Community Reputation

4,199 Excellent


About jedimatt42

  • Rank
    River Patroller
  • Birthday 05/15/1973

Contact / Social Media

Profile Information

  • Gender
  • Location
    Beaverton, OR
  • Interests
    Programming, old and new.
    My TI.
  • Currently Playing
    Mousing around on my TI-99/4A

Recent Profile Visitors

17,438 profile views
  1. I think stick figure guy shows up in the most games. Bigfoot, Tennis, midnight mason... The smaller rendition shows up in at least a half dozen other games...
  2. Looks like one of my hosting sites in down but the resources for the USB keyboard are here: https://www.jedimatt42.com/ti99usbkeys.html and here: https://github.com/jedimatt42/TI-99-usb-keys
  3. I think this will be easier to fix than carry forward as an exception... with post on close.
  4. Scroll back a few conversations for full cloud storage writeup. Your imagination is the limit. (or read: https://github.com/jedimatt42/tipi/wiki/Cloud) Just looks like directories and files to the TI. No feature penalties. Regarding 'SAVE' to PI.HTTPS... to be clear it is PAB opcode 0x06 'SAVE', not TI BASIC keyword 'SAVE' that is supported. Most of the time, TI BASIC 'SAVE' issues an opcode 0x06 'SAVE' to the storage device. But, if in TI Extended BASIC, your program exceeds certain criteria or the mode is forced, the 'SAVE' keyword may perform opcode 'OPEN', 'WRITE', a bunch... and 'CLOSE' - the latter is not supported. However, TOD, Adventure, TI-Artist, and other instances where data or code is written or stored with the 0x06 opcode 'SAVE' should also work.
  5. The 'user-agent' and save to PI.HTTP/PI.HTTPS stuff is with regard to an earlier conversation here with @OLD CS1 who wanted to setup a custom web site that can serve and receive TIFILES... The TLS stuff is mostly about enabling us to write network clients that connect to servers requiring secure communication. Data is encrypted from the PI to the server and back. Same capabilities as the TCP socket support, basically, but some application layer protocols like Gemini, secure irc, most email and https require TLS to be handled before you can send and receive the useful stuff.
  6. No.. the linker produces ELF binaries. But then there is a bespoke extraction tools for PROGRAM images, and cart... and gnu objcopy to extract binary segments. Someone could write something that transforms a binary into TI's E/A3 loader format... I typically use objcopy and post-process the binary to create what I want. There isn't a runtime. Or, it's craft your own. I think the examples from Insomnia bring startup code to initialize BSS segments, or for C++ code run the constructors of static scoped instances. And then launch into your program. But you have full control of that. for an EA5 the runtime is whatever piece of machine code is linked in at the launch/first address. For cartridges, you included a header that dictates where program entry begins. You can make single instruction programs if you like. Along with no runtime, there is no stdio. No console. No heap. I've found certain code constructs implicitly expect certain functions to exist. Such as literal string assignment to a char array declaration will invoke memcpy. But we seem to have to provide our own memcpy ( if you use that sort of code ) - I suspect I'm overlooking something here, but we have control. I like that. Tursi's libti99 is a good place to start. It fills the void of having no runtime. Provides an implementation of memcpy, and real routines for getting IO done on the 4A. Generally each function is isolated in the .a archive so linking only includes the routines you use. examples of 'runtime' : * my crazy cart: https://github.com/jedimatt42/fcmd/blob/master/b0_crt0.c * libti99's testlib example: https://github.com/tursilion/libti99/blob/master/crt0_ea5.asm For the longest time, I used no 'crt0' like substance, and just made sure my main function was linked first, and that I initialized any memory addresses to the state I needed them to be at, never assuming anything, and that worked quite well. I make my little Force Command executables with gcc, and no '_start' or anything, but instead follow a custom cartridge like model... where there is just a start address in a header on the file at a well known location. So after it loads I know where to BL to. When you write your own loader, you can do whatever you want.
  7. Update 2.25 - 2021-09-05 - added TLS socket support as messaging type 0x24. Same API as 0x22 TCP, but without the server socket features. There is no certificate management, remote host is not verified at this time. I'm sure that will bug me for a while, and I'll fix it in some future. - added PI.TLS=<hostname>:<port> DSR level support for secure sockets. - added user agent header to PI.HTTP(S) gets... - added SAVE to PI.HTTP and PI.HTTPS ( 'WRITE' just 'SAVE' ... I suppose I could add POST on CLOSE for write... but later... ) The TIFILES file is letting unix curl form encode the file... ::::> curl -v -A agent-string -F '[email protected]/tmp/CF' https://yourspecialserver.com/cgi-bin/php-whatsit user agent string looks like: ti994a-Tipi/2.25 I don't remember why 'Tipi' is mixed case... I think it was cited earlier that classic99 submits a user-agent on gets with the substring 'Tipi' in it. so.. probably why... Wiki documentation is NOT there yet. TLS socket support added to messaging cause I'm interested in this: https://gemini.circumlunar.space/ - no promises.
  8. We have tech demos that show it should be fast enough. Network latency need to be less that 25ms to seem responsive at 30fps. You should be able to get that in a local LAN setting. With modern games, predictive compute is used to make up for network latency.
  9. A little secret, the zoom meetings are actually open all the time . 24/7. .. so if a group of you want to gather at a coordinated alternate time, you are welcome to do so. The later Sunday timeslots has been successful at enabling a different group of attendees. If people want a European oriented time, I am happy to add another slot.
  10. Yep. Burn in is endless... But page on a 512k corcomp should never be more than 15 (0-15 32k pages). So there's a bug I need to fix. The corcomp card I tested on is also subject to intermittent failure. If it is rare like that, might just be edge card contacts.
  11. Common USB floppy drives take power from the Raspberry PI and cause undervoltage/load spikes. Stick with USB floppy drives that have their own external power... Otherwise, if linux has a filesystem support for it, it'll likely work. That's a question for the 'Linux' and 'Raspbian' side of the internet. I can mount a 720K floppy on linux in a usb drive with sudo mount -t msdos /dev/sdb /mnt/teac where /dev/sdb is the device described as the floppy in /var/log/syslog, and /mnt/teac is a directory I created to mount it into... on a TIPI, for access from the 4A, you'd make a directory under /home/tipi/tipi_disk, and mount there... But.. On my usb-floppy powered by the PI, it fails for me with read errors 'cause PI power... a powered usb hub might improve things... But if you are going to TIPI, you might as well PLIPBox the Amiga, and use SAMBA... there is a SAMBA share on TIPI already, so you can just use the Amiga to slurp your backup up... Now... where did I put my PLIPBox...
  12. Looks right. TIPI sidecar crubase jumpers are oriented in a column, with least significant bit at the bottom, and a full nibble of control. https://github.com/jedimatt42/tipi/wiki/crubase TIPI/32k by J-Data crubase is the first 3 jumpers in the row, with least significant bit on the left, and the right most jumper controls 32k disable when closed. It is a binary encoding in jumpers of the second (x) nibble of the crubase 1x00. Closed jumper is a set bit (1) (My orientation's are with regard to holding the PCB.. J-Data type is female edge connection up, jedimatt42 style is with url in English orientation. ) Ideally people would be considerate and ship these with the crubase set to >1100 for optimal usage when no floppy drive is present.
  13. The real beauty to this isn't for end users... There is something interesting in the architecture. It looks like a perl script was written to translate the TI GROMs basic implementation into c code that calls a GPL interpreter layer. Genius.
  14. In BASIC, I believe in INTERNAL mode items are written as length encoded binary values... a float gets an 0x08 and then the 8 byte encoded float.. strings get a length byte and then the bytes of each character... no separator is used.. In DISPLAY mode, strings are written without the length byte, and items are separated by a comma (? maybe, it was some punctuation) and numbers are written in text form as well. This is with regard to PRINT #1:A$,B,C and INPUT #1:L$,M,N type access. So, depending on your data, DISPLAY could be more bytes per record, or less... Since, if I recall (or it is still the case), the compiler doesn't support floats, it makes sense it doesn't support a file data format that depends on float encoding. But things that fit in a byte in DISPLAY mode would consume 2 to 4 bytes on disk. Where in INTERNAL mode they would always consume 9 bytes. But to Tursi's point, that isn't a quality of the filesystem, from the disk controller point of view, it is just a flag. Outside of BASIC, it is up to the consuming program to decide what that flag means.
  15. No. It is focused on the things that page in the 32k expansion space. Thus it runs itself from ROM space. Mostly cause prior tests I could find would 'pass' when I knew there was a fault. Supported cards: https://github.com/jedimatt42/ti994a-memtest#supported-cards I no longer have an HRD, but I assume with the recent re-release of HRD-4000s and it not conflicting with test code living in 32k space, there must be a trusted test out there already. Any other reality seems foolish. Note: RAMDISK testing in my program destroys any data in the RAMDISK.
  • Create New...