for the Commodore 64
How would your digital adult image collection have been looked in the 1980s?
Ever wondered how your pron stash would have looked on floppy disk?
Try it out with HypraFap!
With HypraFap you can store and view about 16 beautiful color images per disk side on your Commodore 64!
It of course works on an C64 emulator like VICE, too.
π π¦ Note: All sample images on this page are censored
You can try out HypraFap with it's Demo Disk!
Install a C64 emulator like VICE:
https://vice-emu.sourceforge.io/
You can download the demo disk in d64 format here:
https://github.com/pronopython/hyprafap/raw/main/hyprafap_demo_disk.d64
If you are using VICE, you can Autostart the disk.
Otherwise attach the disk image and load HypraFap with
LOAD"*",8,1
and then start it with
RUN
It then loads the first image on disk, which in case of this Demo Disk is the index picture.
π π¦ Note: Without any fastloader the speed is totally normal for the C64 Floppy: very slow! It takes 25 Seconds to load an image!
The Demo Disk greets you with images of shoes (sorry no prono d64 disks on github :-) ):
Every image in HypraFap has a number or letter. See here how all the images are labled 1-9, A-F. The index you are currently seeing has the number 0.
You can press Space
to advance to the first image (the one labled 1 in the image):
After the image is loaded, press Space
again to advance to the next image, the shoe image with the brown background.
You can directly select an image by pressing its number/letter. Press 5
to jump to the blue image.
Press 0
or i
(as in index) to jump back to the index image.
Now press F3
to switch to the second screen and load image number 3 by pressing 3
.
You then can switch back to screen 1 (with the index) by pressing F1
. Jump back and forth between both screens. Everytime you press an image number or space, hyprafap loads the image to the currently selected screen.
While loading the next screen the old image is visible and you can see how it is overwritten with new image data. This is intentional (you know HypraFap is doing something). This first version has no double screen buffers etc. Load happens directly into video ram section.
See here how the next image is faintly visible on the top half (a face in the middle):
If you load a compressed Koala image (.gg
), you cannot see how it is loaded because the data is loaded off screen to a buffer for decompressing.
If you have multiple disks with images, you can swap a disk out anytime while no drive access happens.
Press R
to reload the directory of the new disk and access the images on it.
Also, when you start HypraFap as a standalone .prg
in VICE and thus no image is loaded at startup, use R
to switch to and load an image disk.
key | command |
---|---|
0 -9 , A -H |
Load image 0..17 to current screen |
I |
Load first image / number 0 (index / gallery) to current screen |
Space |
next image |
R |
Reload directory after disk swap. Loads first image on new disk to current screen |
f1 | Switch to screen 1 |
f3 | Switch to screen 2 |
The shoe demo disk is not that exciting -- make your own disk!
HypraFap uses standard uncompressed Koala Painter images produced by a lot of programs. I recommend Convertron 3000:
https://github.com/fieserWolF/convertron3000
to convert .jpg
/ .png
files to .koa
files.
You can also use RLE-compressed Koala Painter images (.gg
), which you can convert from .koa
files with different programs like Pixcen. This will typically make room for 1 more image per disk side.
Note that the pixels are not perfectly square on a C64.
You get the best results when you compose your image in Photoshop or Gimp on a 320 x 214 pixel canvas and then reduce it to 160 x 200 pixels. After that blow it up again without antialias to 320 x 200. This then should be the version you put into Convertron 3000.
To create your disk you can use tools like cc1541:
https://csdb.dk/release/?id=230166
Under Ubuntu you can find this tool in the standard repo!
Write the content in the following order to the disk image:
- HypraFap.prg (Download below)
- Your index image (if any)
- all other images
Download the latest HypraFap prg file here: https://github.com/pronopython/hyprafap/raw/main/hyprafap.prg
See how the Demo Disk looks like:
Images need to have the name ending in .koa
(uncompressed) or .gg
(compressed) for HypraFap to recognize them!
Add up to 16 Koala images per disk uncompressed or 17-18 compressed!
Index pages are just koala pictures like all the other pictures on the disks. An index images has to be the first image in the directory with the ending .koa
or .gg
.
You can use this template for your index image:
Note that this image is 160 x 200 and after you added all images you need to blow it up to 320 x 200 without antialias.
HypraFap works with Ultraload Plus. Download Ultraload Plus from csdb:
https://csdb.dk/release/?id=60309
Load Ultraload Plus and start it. After that change the disk to HypraFap and load it as usual.
Images now load within 5 seconds!
HypraFap was written for Turbo Macro Pro Cross Assembler ("TMPx"):
If you have the linux bin in the same directory (src) as the .asm
files run:
./tmpx -i hyprafap.asm -o hyprafap.prg
to compile HypraFap.
π π¦ Note: This is retrived through reverse engineering
Koala Painter files with extension .gg are RLE compressed as follows:
Starting at byte number 3 to skip the first two load address bytes ($00 $60), if 3 or more bytes are identical, these are replaced by
$FE [identical byte] [number of repetitions]
[number of repetitions]
can be between $00 and $FF ($00 represents 256 repetitions)
If $FE is found in the source bytes it is compressed, even when it only occures one time (one occurents of $FE results in bytes: $FE $FE $01
). This can in rare occurences make the file larger than uncompressed.
The load address' second byte $60 is not compressed even when several $60 bytes follow. Only the bytes starting at 3rd position are compressed -- thus only the image information is compressed! This makes sense as otherwise a load of a .gg file would fail in rare cases.
(That $00 represents 256 repetitions is not mentioned in other documentations!)
address | for Screen | Description |
---|---|---|
$0400 | Screen 1 | Screen RAM |
$0801 | HypraFap program code | |
$2000 | Screen 1 | Bitmap |
$3f40 | Screen 1 | Screen Data |
$4328 | Screen 1 | Color Data |
$4710 | Screen 1 | Color 0 |
$5c00 | Screen 2 | Screen RAM |
$6000 | Screen 2 | Bitmap |
$7f40 | Screen 2 | Screen Data |
$8328 | Screen 2 | Color Data |
$8710 | Screen 2 | Color 0 |
$9000 | Buffer 1 | RLE Load Buffer |
$c320 | Number of images, other variables | |
$c581 | Directory entries | |
$d800 | Color RAM |
See headers.asm
for all labels in use.
- "Loading" message is written to screen ram, color changes in the old image partially when load is started. Since the old image is overwritten, that is not that of a problem.
- Currently there is absolutly no error handling. If something is wrong with your disk or drive or filenames or whatever, HypraFap will just crash and you will probably see a frozen C64.
- Although there's this logo screenshot on top of this page, HypraFap comes without it. No one wants to wait 25 seconds for a logo. And it takes up 10 kB on disk ;-)
Problem | Solution |
---|---|
It is slow! | Yes, the data transfer between disk drive and computer is 400 bytes (!) per second. A 10kB Koala image takes about 25 seconds to load. You can speed this up with a fastloader, see above. |
The GitHub discussion boards are open for sharing ideas and plans for HypraFap.
You can report errors through a GitHub issue.
Don't want to use GitHub? You can also contact me via email: [email protected] If you want to contact me anonymously, create yourself a burner email account.
- 2 Screens available: Swicht between them with f1/f3
- .gg file support with RLE decompression
- Pictures are now numbered 0-9,A-H (18 total) to accomodate 1 or 2 more pictures through RLE compression
- Crash when no image is present on startup
- Initial Release
For me this is just a weekend fun project to learn a bit 6502 assembly language on an 8 bit computer :-)