top of page

Forum Comments

Atari USB - C PSU Device
In General Discussions
TattlerSolutions WiModem
In General Discussions
Sneak Peek
In General Discussions
Ripjetski
Feb 23, 2024
Thanks! The Action! version of the library doesnt have as much as the C version does. C eclipsed it last year, and I havent back-ported any of the new stuff. The format will be documented, and exampled (already done, at least in my dev notes). The library itself is easy to use in my opinion, and the documentation I wrote for it explains how in detail, as well as all the API function details. Right now, without indexing, it wont be terribly useful. This demo app is large and uses almost all of the different aspects of my library (minus FujiNet). Theoretically the following limitations apply, keep in mind a 48K machine. • 65534 records available. Depending on record size, that will likely be beyond the biggest file size for any Atari DOS. • I imposed a 254 byte record length. I could change this, but it was easy to start with. I envisioned keeping 10 to 30 records in memory at any given time, and going to disk to retrieve another 10 and drop 10 from memory as needed - such as a browse. So, 10 records is 2540 bytes, times 3 would be 7620 bytes. Not a small amount to hang onto. • I imposed a 50 field count max. This was originally 254 as well, I reduced it because ech field definition takes up 13 bytes in the database file, and that would over 3K just in field definitions. The field definitions need to be held in memory to support the other routines. 50 *13 is 650, which is much more realistic to hold onto for this. • The maximum field size for Character is 250. Again,I was aligning to a shorter record length. • Numeric fields can be up to 12 digits in length (inclusive of precision if needed), and allowed precision up to 4 digits of that 12. Use this tool to create the database files, and pack them as you feel. Packing would remove records marked for deletion. Then use your program loosely like this: DBInit to setup the memory structures, then DBOpen to open an ADB file and read in the header and field definition info. Then add/edit/delete data, which would make use of routines like DBGetRec, DBPutRec, etc. Kind of proof of concept like I said. I was thinking I could shed a lot of overhead by creating a "dot" command program like dBase/FoxPro that didnt use any windowing - just scroll off the screen, but would need a command language parser that might make up for that savings. It would be interesting, but still wouldnt work as a stand alone database program per say. I mainly just want to show that it could work. I'll take what I learn with it and apply what I can to FujiNet SQL bindings I've been slowly working on. That will be something useful! Offloading all the index, and search work to a real backend DB. My target for this is CubeSQL which is a "server" wrapped vesion SQLite. I need FujiNet-PC to work with latest firmware to finish this, well I dont, but it will make development a lot easier. I cant get the current version of Fujinet-PC with the SSL/Hash stuff to work properly on Mac ARM, which means I have to go back and forth from Mac to Atari - a lot to compile and test.
1
Bobterm, Atari 800xl and Fujinet question.
In General Discussions
Atari Desk Setups (then and now)
In General Discussions
C & P/M Graphics
In General Discussions
Ripjetski
Sep 04, 2023
Following the Compute books instructions I redid the routine that sets up PM. Still not getting valid results, but I think its closer. The players are cleared after the graphics are setup which is done in another routine. I am a bit defeated at this point and going to step away and come back with a fresh perspective at some point in time, unless I get some new understanding of where I'm failing. At this point I think its something CC65 is doing with the memory segments -or- the display list is getting knocked out. One thing the book says is to give a graphics 0 command after setup so the OS will move the display and display list below the new RAMTOP. I cant figure out how to do that in CC65. I dont have a screen shot, essentially it gets through this procedure, then starts clearing the players. Once it hits the 2nd pleyer, the screen goes into graphics 13 and you can see some text flash in and out of the first line. void PMGraphics(byte bN) { // Address Masks, and Mem Sizes for each mode unsigned int aAM[4] = { 0, 0xF800, 0xFC00 }, aMS[4] = { 0, 0x800, 0x400 }; // Default # pages to reserve for gr0 display byte bR = 4; // RAMTOP worker byte bT = 0; // Move all players and missiles off screen memset((byte *) &(HPOSP0), 0, 8); // word // Ensure tracking coords are all 0 memset(aPMH, 0, 8); memset(aPMV, 0, 8); // Set sizes to 0 and clear shapes of all 5 players memset((byte *) &(SIZEP0), 0, 10); // word // If current PM mode is not 0, default everything // as we restart if (bPMM != 0) { SDMCTL = 34; // Default GRACTL = 0; } // If requested mode is 1 (single line) if (bN == 1) { // Add 8 pages for single line res bR += 8; } else { // Add 4 pages for double line res bR += 4; } // If requested mode is 0, turn off PMG if (bN == 0) { SDMCTL = 34; GRACTL = 0; // Reset RAMTOP ? **************************************************** // Save mode bPMM = bN; } else { // Get current RAMTOP bT = RAMTOP; // Lower RAMTOP by # reserve pages RAMTOP = RAMTOP - bR; gotoxy(0,16); printf("Old RAMTOP=%u (%u), R=%d\n", bT, bT * 256, bR); // 40960 (160) printf("New RAMTOP=%u (%u)\n", RAMTOP, RAMTOP * 256); printf(" APPMHI=%u\n", APPMHI); // 23583 // Set PMBASE to new RAMTOP PMBASE = RAMTOP * 256; wPMB = RAMTOP * 256; printf("wPMB=%u (%u)\n", wPMB >> 8, wPMB); // 37888 printf(" PMBASE=%u\n", PEEK(54279U)); // 148 (* 256 = 37888) // If requested mode is 1 (single line) if (bN == 1) { SDMCTL = 62; } else { // Else double line SDMCTL = 46; } // Set player priority GPRIOR = (GPRIOR & 0xC0) | 1; printf(" GPRIOR=%d\n", GPRIOR); // Turn on PMG GRACTL = 3; // Save mode bPMM = bN; } }
0
0
Old OS security
In General Discussions

Ripjetski

More actions
bottom of page