Jump to content


  • Content Count

  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Man! Just recapped the logic board of the Classic 1 as practice for installing surface mount tantalum capacitors that are...quite small. The machine I care more about is obviously my SE/30. I don't think I did a stellar job on the Classic: -regular toothbrush removed some, but not all green corrosion on some of the pins of some ICs -I think I removed a thin film of leakage around the old Al 47 uF caps -my tantalums were installed unevenly and shoodily, sometimes with an embarassing angle. But they seem to stick. -I did test them all by slowly giving them charge by measuring resistance, then verified that their voltage dropped with a voltmeter. It's probably a way too basic test but at least they all behaved -It booted (not that it had a problem of it now, but I wouldn't have let it stay in its state for long) And I seemed to have solved my too weak sound problem (even at max volume, the sound didn't sound much - that was a problem it had the day of its purchase while the previous owners let me do a boot test...in 2005)
  2. Yeah, it forces a delay between each frame. I wouldn't bet much money on it being accurate under every machine, but it tries to. As for the original question about avoiding vertical blanking interactions - I can't seem to easily find if that project does it. I seem to have made a sprite object and abundantly use my BlitSprite method in Sprites.c, dealing with 3 cases: where the sprite must clean after itself, where there's a mask, or where it doesn't care about what damage it does under itself (white backg). Ultimately, the main Macintosh method I'm using is CopyBits from an offscreen buffer. It seems quick enough to not create flickering. I remember I spent a LOT of time settling on that after a mountain of debugging, searching tech notes and testing many strategies. void BlitSprite(SpriteHandle theSprite, short frameIndex){ BitMap buffBM; BitMapHandle buffh = NULL; buffBM.baseAddr = NULL; if(IsSpriteCleaning(theSprite)) { buffh = (**theSprite).buffer; if(NULL == (**buffh).baseAddr) { buffBM.bounds = (*((**theSprite).frames))[frameIndex].bounds; InitBitMap(&buffBM); (**buffh) = buffBM; (**theSprite).bufferRect = (**theSprite).theRect; GetSpriteBuffer(theSprite); } HLock((Handle)buffh); HLock((Handle)theSprite); CopyBits(&(**buffh),&qd.thePort->portBits,&(**buffh).bounds, &(**theSprite).bufferRect,srcCopy, NULL); HUnlock((Handle)theSprite); HUnlock((Handle)buffh); (**theSprite).bufferRect = (**theSprite).theRect; GetSpriteBuffer(theSprite); } if(IsSpriteMasked(theSprite)) { DrawMask(theSprite,frameIndex,srcBic); DrawSprite(theSprite,frameIndex,srcOr); } else DrawSprite(theSprite,frameIndex,srcCopy); }
  3. I made you an example video where CorrectTime is equal to 25 (ms) instead of 1. The effect is significantly slowed down:
  4. Mu0n

    Best games/apps to showcase B&W mac?

    The Mac Plus was all I had in that era, so I slogged happily through all the Quest games I could lay my hands on. I very infrequently saw them at other people's places on PCs so I wasn't too spoiled for my platform.
  5. Here's the full source code of a simpler project that only dissolves in the moon landscape into view. Disclaimer: -I was far less skilled in C back then -I had too-long-method-syndrome -Some of those self-made includes are generic and were used in a lot of various tests, so they are a bit on the beefy side StartTiming just keeps track of the tick count (into a global) of an operation I want to do: void StartTiming(void) { oldTicks=TickCount(); } TimeCorrection forces a delay for that operation to last a predetermined time: void TimeCorrection(int tickCount) { long newTicks; newTicks=TickCount(); while (newTicks-oldTicks<tickCount) Delay(1L, &newTicks); } afasterdissolve.c Dissolve wipe.c Misc.c Misc.h Offscreen.c Offscreen.h Sprites.c Sprites.h
  6. Mu0n

    Best games/apps to showcase B&W mac?

    Chipwits had Mac 512k written on the box. I remember because I so wanted that game back then, but we were locked out of it by having a Mac Plus
  7. Mu0n

    Best games/apps to showcase B&W mac?

    I think the weird Alice chess game could run on the original.
  8. I'm fairly certain I found a tech note or a method in a book somewhere about it. Here's the method from my source code: short DissolveBox(GrafPtr newImage, GrafPtr destGrafPtr, Rect *source, Rect *dest) { long offRowBytes, sizeOfOff; Ptr myBits; Rect bRect; GrafPort myGrafPort; GrafPtr myGrafPtr; RgnHandle oldClipRgn; int i, j; Pattern thePattern; char order[16]; long randtemp; char ordertemp; /* the dissolve effect works by creating a random set of patterns which sum (OR) to a black pattern. We make another offscreen bitmap and fill it with the pattern at each stage, and use it as a mask for the bitcopy. Here, we create the offscreen bitmap. */ SetPort(newImage); bRect = *source; myGrafPtr = &myGrafPort; OpenPort(myGrafPtr); offRowBytes = (((source->right - source->left) + 15) >> 4) << 1; sizeOfOff = (long)(source->bottom - source->top) * offRowBytes; OffsetRect(&bRect, -bRect.left, -bRect.top); myBits = NewPtr(sizeOfOff); if(myBits == 0L) return -1; /* memory error */ myGrafPort.portBits.baseAddr = myBits; myGrafPort.portBits.rowBytes = offRowBytes; myGrafPort.portBits.bounds = bRect; myGrafPort.portRect = bRect; oldClipRgn = myGrafPort.clipRgn; myGrafPort.clipRgn = destGrafPtr->visRgn; for(i = 0; i < 16; i++) order[i] = i; /* this randomly shuffles the order in which the pattern bits will appear */ for(i = 15; i >= 0; i--) { randtemp = (((long)Random() + 32767) * (i + 1)) / 65535; ordertemp = order[randtemp]; order[randtemp] = order[i]; order[i] = ordertemp; } for(i = 0; i <= 16; i++) { StartTiming(); SetPort(myGrafPtr); for(j = 0; j < 8; j++) thePattern[j] = 0; thePattern[order[i] >> 2] = 1 << (order[i] & 0x03); thePattern[order[i] >> 2] |= 16 << (order[i] & 0x03); thePattern[(order[i] >> 2) + 4] = 1 << (order[i] & 0x03); thePattern[(order[i] >> 2) + 4] |= 16 << (order[i] & 0x03); i++; thePattern[order[i] >> 2] = 1 << (order[i] & 0x03); thePattern[order[i] >> 2] |= 16 << (order[i] & 0x03); thePattern[(order[i] >> 2) + 4] = 1 << (order[i] & 0x03); thePattern[(order[i] >> 2) + 4] |= 16 << (order[i] & 0x03); FillRect(&bRect, thePattern); SetPort(destGrafPtr); CopyMask(&(newImage->portBits), &(myGrafPtr->portBits), &(destGrafPtr->portBits), source, &bRect, dest); TimeCorrection(CorrectTime); } StartTiming(); SetPort(myGrafPtr); for(j = 0; j < 8; j++) thePattern[j] = 0xFF; FillRect(&bRect, thePattern); SetPort(destGrafPtr); CopyMask(&(newImage->portBits), &(myGrafPtr->portBits), &(destGrafPtr->portBits), source, &bRect, dest); TimeCorrection(CorrectTime); myGrafPort.clipRgn = oldClipRgn; ClosePort(myGrafPtr); DisposPtr(myBits); return 0; }
  9. Mu0n

    Best games/apps to showcase B&W mac?

    Try Disk Copy 3.5 (though it may only write to disk? I don't remember). There might be others, and I can find that for you if you need it.
  10. On a Mac SE, you can probably run Disk Copy 3.5 like so: However, depending on how the disk image file were made, you might not be able to open them with it. It'd require something a bit more modern (and running on System 7+) like Disk Copy 6.1.2 (needs Sytem 7.0.1+) or Disk Copy 6.3.3. Which is why, if you can deal with the "Mount Image + copy out the files" in an emulated environment before copying them to a physical disk, it would open some options for you for some programs (not all!).
  11. Here's a mock company animated logo intro I made back in 2005 when I had goals of making full fledged games targeting System 6 Macs. It was programmed in C and used a cool little dissolve effect + fast blit non-flickering animation. It was not easy learning what was necessary for game programming in that era. It should be updated to 35 Years Ago Entertainment now, lol (or 40).
  12. If you're not familiar with Bogas Productions' 1986 Studio Session app, then check out this other thread I made: Reverse-Engineer Goal: Load a Studio Session song file (along with its instruments) and play it back, close to the original in a custom game program (eg in an intro splash screen) Target Platform: System 6 to probably System 4.2 (ish) Development Environment: THINK C Manager (using Symantec C++ 6.0 which can deal with both C and ASM code blocks) under System 7.5.5 (emulated) Group Effort?: if this is something that interests you and you have some keen programming knowledge in ASM and C, then that would be grand! I'm always looking for some tips too. In 2004-2006, I wanted to: 1) increase my C/C++ programming skills 2) figure out a way to do game programming on my old Mac Plus machine Back in the day (1986-1993), I only had access to the limiting Microsoft Basic 2.0 development platform. While great for learning programming fundamentals, it showed its limit in terms of fluid animation and sound playback fairly quickly. There were loads of ZX80, Spectrum and C64 programming books in my city's library, but very few for the Macintosh. I did have an introductory book with examples in Basic, but I was light years away from having the tools and examples necessary to do real development that approached the commercial stuff. The goal was to use Studio Session to compose intro/ending music (with not much animation happening on screen) instead of writing a music engine from scratch. While I sadly found no code anywhere on the web, in the hotline retromac68k server or countless various FTPs. I did find a spec document written in 1993 by a MIT student who was interested by the very same challenge! I was able to use his document somewhat to start gathering the global data of a song file. If I recall correctly, I might have been successful into recording a sound in a modern PC of that 2005 era, convert it a bunch of times into the sound file needed to create a new Studio Session Instrument. They are the same format as used by SoundCaps 4.2 (which can run in System 6 but not System 7). Project Goals: Phase 1: Simply interpret a song file and play one track back using the square-wave or one of the tracks from the four-tone synth, just to get pitch and tempo right (ie ditch instrument data and any track that's not #1) Phase 2: Play up to 4 tracks under the four-tone synth Phase 3: Mix the 6 potential tracks in the free-form synth - this will possibly involve on-the-fly mixing of wave data as the song is interpreted. This is the real challenge as you don't know in advance how the tracks go into activation or fade out, since the notes can be of various length and the sound files associated with each instruments have different lengths. Here's the spec document in full: Studio Session Song (.sss).txt
  13. I'm not sure what your exact needs are, but here's my transfer workflow: Modern Windows 10 PC: HFVExplorer to move files such as .hqx or .sit or .bin you find on the internet to a virtual hard disk file used by emulators (.hfv or .dsk extension). Basilisk II emulator v0.8 build 142 running the Shapeshifter ROM (Quadra 605 / LC / Performa 475/575) with System 7.5.5. It has tools to extract .hqx, bin and .sit and mount virtual disks USB disk drive that can deal only with 1.44 mb disks. They can be formatted in Mac HFS format by HFVExplorer. Gateway Mac (Powerbook 180, Mac SE/30 or equivalent) Some tools are present on these as well. They have some version of System 7 (like 7.5.5). I do have disk image mounting utilities on there which work great. There are also archive extractors if needed. The gateway mac has to accept 800k disks as well. Target Mac (Mac 128k to Mac SE): Max System version 7.something (but not too high). Some Utilities of disk image writing can still be done at this step Notes: -At no point must the Mac archive files (.hqx, .sit or .bin) must be extracted on the PC, since you'll lose the resource fork (which contain icons, text strings and various important stuff) for your files, while only accessing the data fork. -The easiest route is to extract the files in Basilisk II right away. If your app doesn't need to be in its original disk content form (because of copy protection reasons) and it can happily run just be double clicking, without caring where it's located, then you can perform a simple copy using HFVExplorer to a physical disk. -A less simple route would be to extract a disk image file (400k, 800k, or anything below 1.44 mb) in the emulated environment. Then, you copy that image to a physical disk in HFVExplorer with the goal of mounting the virtual disk in the gateway computer, where the final disk writing (a 800k diskette) will occur. -The most complicated route is to A) extract in the emulator b) copy the disk image to the gateway c) copy the disk image fle to a 800k disk if it fits d) mount-to-write the disk image on the target computer so you can write to a final (and different) disk. -If your target mac is mini-vMac, so that you can test out a Mac Plus or similar, it becomes much more easier. System 7.5.5 and System 6.0.8 can both see the same virtual hard disk file. Have them each have their own booting virtual hard disk, but then create a shared 3rd data virtual hard disk so that they can share stuff to each other.
  14. Back around in 2005, I tinkered about C programming, specifically targeting System 6 and below. My working environment was THINK C (symantec C++ 6.0) running under Basilisk II (Using System 7.5.5, emulating a Mac of the Quadra era) on a Windows XP PC, but my compiled programs would find their way under either mini-vMac running System 6.0.8 or my Mac Plus (or SE, passing through a Powerbook 170 first). I became very interested in the Sound Driver and all of its capabilities. It could be used for: -A single square-wave synthetiser (2% CPU) -Up to 4 tones with simple wave forms (array of 256 bytes, 50% CPU) -A Free form synth (up to 30001 bytes, 20% CPU) My end goal was to reverse-engineer playback of Studio Session Files, but I started with much lower goals, fiddling with the simpler parts of the Sound Driver. This app lets you play with the 4-tone synth and modify their waves in real time, while the sounds are being played. It's not particularly useful for any serious application but it was a major stepping stone in understanding C programming for that platform. Here is it in action:
  15. PC user here as well - you may not like to read this, but my method involves a gateway computer with a superdrive disk which can deal with both 800k and 1.44 mb disks. System 7 is a must in order to be able to run the tools to extract some archives as well as mount disk images. I often use my Powerbook 180, or my Mac SE/30. I haven't explored the Network side of this issue at all, though. Sounds like even more pain.