Code Monkey home page Code Monkey logo

steve2's Introduction

Steve2

Steve ][ - Speedy Apple ][ Emulator

Pronunciation: Steve Two

Steve ][ is an Apple ][ emulator initially developed for Mac under GPL v3 license.

Steve ][ Project is created by Tamas Rudnai on 7/14/19 Copyright © 2019, 2020 Tamas Rudnai. All rights reserved

This file is part of Steve ][ -- The Apple ][ Emulator

(See licensing and copyright info in COPYING)

The name refers to "two Steves", Steve Wozniak and Steve Jobs who created Apple ][ and founded Apple.

Steve ][ was introduce at KansasFest 2020 (Journey of an Apple ][ Emulator) and release on GitHub as an Open Source project.

Original goal of the project was to find out how fast Apple ][ would be in today's technologies. The original Apple ][ was introduced in 1977, including Integer BASIC and Assembler Monitor functions. Later on the BASIC interpreter was replaced by Microsoft's AppleSoft BASIC, and the hardware design went through on several iterations. Most models were using a variant of 6502 CPU at a clock speed of 1.023 MHz. Looking at it 40 years later it seems like impossible to do anything on those computers, however, at that time Apple ][ was the state of the art technology. People used it for text processing, the very first spreadsheet app was written on it, and of course games, many many games. Some notable titles include Karateka, Prince of Persia and Castle of Wolfeinstein. This latter one evolved to Doom on the PC platform.

At 1.023 MHz operation speed was limited. Just an example of it, if you wrote a BASIC program to count from 1 to 65536 printing out the number at each iterations, it takes about 31 minutes. The very same emulating Apple ][ at 1.3 GHz takes only 2 seconds.

Main Features of Steve ][

  • Very fast 6502 CPU emulation
  • Fast Disk ][ emulation
  • Modern User Interface with Light and Dark mode
  • Game Mode with low Input Latency and 60 FPS
  • Eco Mode for fast operation and low energy consumption
  • Natively supports WOZ 1 disk image format
  • DSK / DO / PO disk image support with smooth internal auto-convert

Further Features

  • CRT Mode for realistic retro feeling
  • Color Monitor
  • Green Mono Monitor
  • Amber Mono Monitor
  • White Mono Monitor
  • Select + Copy + Paste from/to Text screen

How to clone (download from GitHub):

Open Terminal app and enter the following code:

git clone http://github.com/trudnai/Steve2

How to run:

Open A2Mac project, make sure A2Mac > My Mac target is selected at the top left corner and hit the button or press R

In Memoriam

I would like to dedicate this project to my Father. He was a mechanical engineer, plumbing engineer designing heating and water supply system for large buildings. He bought our first Apple ][ computer to help on his projects. He was a dedicated man and even though he was not a software developer, he wrote several programs, most notable a budget calculator. Budget calculation for plumbing system meant he had to count all components such as different length and size of pipes and fittings and count every single bits to the last screw. Then he had to look all the components up one by one for prices and estimated work hours to be able to estimate the financial needs to realize the project. It was a tedious job, and he was able to reduce that work from 3 weeks to 3 days with the computer. This is obvious today, but at that time it was novel. His program on the Apple ][ was working on the calculation for 3-4 hours each time. Back then that was considered as small amount of time compared to what it takes to do that manually.

When my Father passed away, I have found our old Apple ][ in the basement, and many memories rushed into my head from that time. I remembered the times he eagerly waited for the Apple ][ to finish a calculation. He had a nice 1.5 hours lunch and coffee and conversation with the family, and the program was still running.

I started to wonder how long that calculation would take on a modern computer -- or more precisely if the Apple ][ was built by today's technology. That was the initial goal of this project.

Steve ][ on my 2015 15" MacBook Pro was able to emulate a 1.3 GHz Apple ][. That is 1300x faster than the original one. So if that calculation is lasted for 4 hours back then:

]O = 4 * 60 * 60

]? O
14400

]? O / 1300
11.0769231

...then it would have lasted for 11 seconds if Apple ][ was built today (calculating with the measured 1300x speed increase)

Disclaimer: This is just an estimation, on a real hardware most probably it would even faster several times. That is because even if Steve ][ very is fast, it is still an emulator -- and an emulator needs to do a lot of things on the host CPU to emulate just a single opcode.

steve2's People

Contributors

trudnai avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

steve2's Issues

Oregon Trail disk change

was playing a bit of Oregon Trail with no issues, but when it asked for side 2, i switched DSK images in drive 1 and hit space, but the game doesn't recognize it. :( DSK files attached.

using prebuilt 0.85 (1) installed from PKG.

oregon trail.zip

UI Overhaul

Make a bit more intuitive and attractive UI for the initial release

Crash due to EXC_BAD_ACCESS

After running the emulator for approximately two days with a minor basic program - II stopped the basic program and attempted to CATALOG the disk. Prior to the catalog the emulator was responding normally.
Screen Shot 2020-11-30 at 7 57 05 AM

Add JoyStick Support

  • Mouse 2 Joystick
  • Keyboard 2 Joystick
  • USB Joystick 2 Joystick
  • USB Game Controller 2 Joystick (is this same as above?)

Add Support for 2IMG Disk Image Format

File Extension (2IMG/*.2MG) - This image is usually 800K in size, and is a proprietary format used by the XGS multi-platform IIgs emulator as well as Bernie ][ The Rescue on the Macintosh. It usually has the *.2MG extension. The size of the image is due to fact it contains a copy of an 800K 3.5" disk (usually ProDOS) rather than a single density 5.25" disk (although these may also be imported into 2IMG format by the utilities below). The format is primarily created by converting a ProDOS 800K disk into a DiskCopy image on a Macintosh, and then using the XGS "Image" utilities by Matthew Conte [email protected], or "Revival" by Thomas Fok [email protected]. "Revival" can also convert DOS 3.3 Ordered, ProDOS Ordered, and ApplePC HDV images into 2IMG format. The 2IMG format is explained at:
http://www.glink.net.hk/~thomas/2img.txt

Add Volume Control

Add volume control for the speaker.
This can be done by adjusting SPKR_LEVEL_MIN and MAX

Add Support for the Nibble (NDO/NIB) Disk Image Format

File Extension (NDO/*.NIB) - This image is 232960 bytes in size, and it usually has the *.NIB extension. According to the original "Apple2 Emulation Frequently Asked Questions" guide, "every three bytes of data have been 'bit twiddled' into four bytes, and each sector has an 'address field' that has the track and sector numbers." The format was originally used solely in the "ApplEmu" emulator before becoming widely used to store copy-protected software. The conversion utilities listed below are solely for use with "ApplEmu" images containing standard software! NDO images rely on the extra space to store non-standard track information which would otherwise be lost in a DO or PO image. With newer emulators such as AppleWin and ApplePC, NDO can be used to store copy-protected or non- standard Apple disk-images (created by SST - see "Super Saltines Transcopy" in Section 5.3).
On the MACINTOSH - There is currently no way to convert either from or to NDO on the Macintosh. NDO images are used by the "Catakig" emulator (File Creator: 'Ctkg', File Type: 'A2D5')
On the PC - To convert PO disk-images to NDO (for use with ApplEmu), use "Em2Emu" by Tom Baker [email protected]. To convert NDO back to DO use "Emu2Em" by Dan Scholnik [email protected] to re-order this format back into the "standard" 143360 size. AppleEmu can run NDO images containing copy-protected software without conversion. Newer emulators support multiple disk-images types but will support all NDO types containing standard software.
PROGRAM LOCATIONS:
ftp://ftp.apple.asimov.net/pub/apple_II/utility/em2emu.zip
ftp://ftp.apple.asimov.net/pub/apple_II/utility/emu2em.zip

Configurable Virtual Machine

  • CPU Variants
    • Add Flexible Compile Time Variants using Macros and INLINEs
  • Expansion Cards
  • Memory
  • Game Controller

Unable to launch: NSInternalInconsistencyException

Let me know how I can help troubleshoot!

iMac Pro 3.2 GHz 8-Core Intel Xeon W, 32Gb RAM
Radeon Pro Vega 56 8 GB
Catalina 10.15.5

XCode 11.6 (11E708)

2020-08-09 21:36:03.413436-0400 Steve ][[40735:81182034] This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.
 Stack:(
	0   Foundation                          0x00007fff37354ce9 _AssertAutolayoutOnAllowedThreadsOnly + 195
	1   Foundation                          0x00007fff37364e61 -[NSISEngine tryToChangeConstraintSuchThatMarker:isReplacedByMarkerPlusDelta:undoHandler:] + 38
	2   Foundation                          0x00007fff3735cfd5 -[NSLayoutConstraint _tryToChangeContainerGeometryWithUndoHandler:] + 389
	3   Foundation                          0x00007fff3734fae4 -[NSLayoutConstraint _setSymbolicConstant:constant:] + 553
	4   Foundation                          0x00007fff37352b80 -[NSLayoutConstraint setConstant:] + 66
	5   AppKit                              0x00007fff31fe7197 -[NSView(NSConstraintBasedLayout) _updateSimpleAutoresizingConstraintsInPlace:forAutoresizingMask:] + 895
	6   AppKit                              0x00007fff31f5e53d NSViewUpdateConstraintsForFrameChange + 434
	7   AppKit                              0x00007fff31f5692a -[NSView setFrameSize:] + 1894
	8   AppKit                              0x00007fff320e2d31 -[NSTextView(NSPrivate) _setFrameSize:forceScroll:] + 962
	9   AppKit                              0x00007fff320e2865 -[NSTextView setFrameSize:] + 145
	10  AppKit                              0x00007fff32053ebb -[NSTextView setConstrainedFrameSize:] + 591
	11  UIFoundation                        0x00007fff65cc7338 -[NSLayoutManager(NSPrivate) _resizeTextViewForTextContainer:] + 1103
	12  UIFoundation                        0x00007fff65d0c405 _resizeTextViewsIfNeeded + 284
	13  UIFoundation                        0x00007fff65cd5870 _NSFastFillAllLayoutHolesForGlyphRange + 1863
	14  UIFoundation                        0x00007fff65cf765a -[NSLayoutManager(NSPrivate) _firstPassGlyphRangeForBoundingRect:inTextContainer:okToFillHoles:] + 1441
	15  UIFoundation                        0x00007fff65cf611b -[NSLayoutManager(NSPrivate) _glyphRangeForBoundingRect:inTextContainer:fast:okToFillHoles:] + 857
	16  AppKit                              0x00007fff320eefaa -[NSTextView drawRect:] + 1076
	17  AppKit                              0x00007fff320a8d8f _NSViewDrawRect + 139
	18  AppKit                              0x00007fff320a809e -[NSView(NSInternal) _recursive:displayRectIgnoringOpacity:inContext:stopAtLayerBackedViews:] + 2170
	19  AppKit                              0x00007fff320a749a -[NSView(NSLayerKitGlue) _drawViewBackingLayer:inContext:drawingHandler:] + 1271
	20  QuartzCore                          0x00007fff40790c5d CABackingStoreUpdate_ + 595
	21  QuartzCore                          0x00007fff407f07d9 ___ZN2CA5Layer8display_Ev_block_invoke + 53
	22  QuartzCore                          0x00007fff40790162 -[CALayer _display] + 2103
	23  AppKit                              0x00007fff320a6e8a -[_NSBackingLayer display] + 537
	24  AppKit                              0x00007fff32008977 -[_NSViewBackingLayer display] + 800
	25  QuartzCore                          0x00007fff407b83fd _ZL16display_callbackPvS_ + 71
	26  QuartzCore                          0x00007fff407b835f _ZN2CA13DispatchGroup8dispatchEb + 65
	27  libdispatch.dylib                   0x00007fff6ec4a658 _dispatch_client_callout + 8
	28  libdispatch.dylib                   0x00007fff6ec4fc44 _dispatch_lane_serial_drain + 597
	29  libdispatch.dylib                   0x00007fff6ec505d6 _dispatch_lane_invoke + 363
	30  libdispatch.dylib                   0x00007fff6ec59c09 _dispatch_workloop_worker_thread + 596
	31  libsystem_pthread.dylib             0x00007fff6eea4a3d _pthread_wqthread + 290
	32  libsystem_pthread.dylib             0x00007fff6eea3b77 start_wqthread + 15
)
2020-08-09 21:36:03.425916-0400 Steve ][[40735:81182034] [General] An uncaught exception was raised
2020-08-09 21:36:03.425977-0400 Steve ][[40735:81182034] [General] Modifications to the layout engine must not be performed from a background thread after it has been accessed from the main thread.
2020-08-09 21:36:03.426048-0400 Steve ][[40735:81182034] [General] (
	0   CoreFoundation                      0x00007fff34d24be7 __exceptionPreprocess + 250
	1   libobjc.A.dylib                     0x00007fff6dafc5bf objc_exception_throw + 48
	2   Foundation                          0x00007fff37354dd7 _AssertAutolayoutOnAllowedThreadsOnly + 433
	3   Foundation                          0x00007fff37364e61 -[NSISEngine tryToChangeConstraintSuchThatMarker:isReplacedByMarkerPlusDelta:undoHandler:] + 38
	4   Foundation                          0x00007fff3735cfd5 -[NSLayoutConstraint _tryToChangeContainerGeometryWithUndoHandler:] + 389
	5   Foundation                          0x00007fff3734fae4 -[NSLayoutConstraint _setSymbolicConstant:constant:] + 553
	6   Foundation                          0x00007fff37352b80 -[NSLayoutConstraint setConstant:] + 66
	7   AppKit                              0x00007fff31fe7197 -[NSView(NSConstraintBasedLayout) _updateSimpleAutoresizingConstraintsInPlace:forAutoresizingMask:] + 895
	8   AppKit                              0x00007fff31f5e53d NSViewUpdateConstraintsForFrameChange + 434
	9   AppKit                              0x00007fff31f5692a -[NSView setFrameSize:] + 1894
	10  AppKit                              0x00007fff320e2d31 -[NSTextView(NSPrivate) _setFrameSize:forceScroll:] + 962
	11  AppKit                              0x00007fff320e2865 -[NSTextView setFrameSize:] + 145
	12  AppKit                              0x00007fff32053ebb -[NSTextView setConstrainedFrameSize:] + 591
	13  UIFoundation                        0x00007fff65cc7338 -[NSLayoutManager(NSPrivate) _resizeTextViewForTextContainer:] + 1103
	14  UIFoundation                        0x00007fff65d0c405 _resizeTextViewsIfNeeded + 284
	15  UIFoundation                        0x00007fff65cd5870 _NSFastFillAllLayoutHolesForGlyphRange + 1863
	16  UIFoundation                        0x00007fff65cf765a -[NSLayoutManager(NSPrivate) _firstPassGlyphRangeForBoundingRect:inTextContainer:okToFillHoles:] + 1441
	17  UIFoundation                        0x00007fff65cf611b -[NSLayoutManager(NSPrivate) _glyphRangeForBoundingRect:inTextContainer:fast:okToFillHoles:] + 857
	18  AppKit                              0x00007fff320eefaa -[NSTextView drawRect:] + 1076
	19  AppKit                              0x00007fff320a8d8f _NSViewDrawRect + 139
	20  AppKit                              0x00007fff320a809e -[NSView(NSInternal) _recursive:displayRectIgnoringOpacity:inContext:stopAtLayerBackedViews:] + 2170
	21  AppKit                              0x00007fff320a749a -[NSView(NSLayerKitGlue) _drawViewBackingLayer:inContext:drawingHandler:] + 1271
	22  QuartzCore                          0x00007fff40790c5d CABackingStoreUpdate_ + 595
	23  QuartzCore                          0x00007fff407f07d9 ___ZN2CA5Layer8display_Ev_block_invoke + 53
	24  QuartzCore                          0x00007fff40790162 -[CALayer _display] + 2103
	25  AppKit                              0x00007fff320a6e8a -[_NSBackingLayer display] + 537
	26  AppKit                              0x00007fff32008977 -[_NSViewBackingLayer display] + 800
	27  QuartzCore                          0x00007fff407b83fd _ZL16display_callbackPvS_ + 71
	28  QuartzCore                          0x00007fff407b835f _ZN2CA13DispatchGroup8dispatchEb + 65
	29  libdispatch.dylib                   0x00007fff6ec4a658 _dispatch_client_callout + 8
	30  libdispatch.dylib                   0x00007fff6ec4fc44 _dispatch_lane_serial_drain + 597
	31  libdispatch.dylib                   0x00007fff6ec505d6 _dispatch_lane_invoke + 363
	32  libdispatch.dylib                   0x00007fff6ec59c09 _dispatch_workloop_worker_thread + 596
	33  libsystem_pthread.dylib             0x00007fff6eea4a3d _pthread_wqthread + 290
	34  libsystem_pthread.dylib             0x00007fff6eea3b77 start_wqthread + 15
)
2020-08-09 21:36:03.426485-0400 Steve ][[40735:81182034] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Modifications to the layout engine must not be performed from a background thread after it has been accessed from the main thread.'
*** First throw call stack:
(
	0   CoreFoundation                      0x00007fff34d24be7 __exceptionPreprocess + 250
	1   libobjc.A.dylib                     0x00007fff6dafc5bf objc_exception_throw + 48
	2   Foundation                          0x00007fff37354dd7 _AssertAutolayoutOnAllowedThreadsOnly + 433
	3   Foundation                          0x00007fff37364e61 -[NSISEngine tryToChangeConstraintSuchThatMarker:isReplacedByMarkerPlusDelta:undoHandler:] + 38
	4   Foundation                          0x00007fff3735cfd5 -[NSLayoutConstraint _tryToChangeContainerGeometryWithUndoHandler:] + 389
	5   Foundation                          0x00007fff3734fae4 -[NSLayoutConstraint _setSymbolicConstant:constant:] + 553
	6   Foundation                          0x00007fff37352b80 -[NSLayoutConstraint setConstant:] + 66
	7   AppKit                              0x00007fff31fe7197 -[NSView(NSConstraintBasedLayout) _updateSimpleAutoresizingConstraintsInPlace:forAutoresizingMask:] + 895
	8   AppKit                              0x00007fff31f5e53d NSViewUpdateConstraintsForFrameChange + 434
	9   AppKit                              0x00007fff31f5692a -[NSView setFrameSize:] + 1894
	10  AppKit                              0x00007fff320e2d31 -[NSTextView(NSPrivate) _setFrameSize:forceScroll:] + 962
	11  AppKit                              0x00007fff320e2865 -[NSTextView setFrameSize:] + 145
	12  AppKit                              0x00007fff32053ebb -[NSTextView setConstrainedFrameSize:] + 591
	13  UIFoundation                        0x00007fff65cc7338 -[NSLayoutManager(NSPrivate) _resizeTextViewForTextContainer:] + 1103
	14  UIFoundation                        0x00007fff65d0c405 _resizeTextViewsIfNeeded + 284
	15  UIFoundation                        0x00007fff65cd5870 _NSFastFillAllLayoutHolesForGlyphRange + 1863
	16  UIFoundation                        0x00007fff65cf765a -[NSLayoutManager(NSPrivate) _firstPassGlyphRangeForBoundingRect:inTextContainer:okToFillHoles:] + 1441
	17  UIFoundation                        0x00007fff65cf611b -[NSLayoutManager(NSPrivate) _glyphRangeForBoundingRect:inTextContainer:fast:okToFillHoles:] + 857
	18  AppKit                              0x00007fff320eefaa -[NSTextView drawRect:] + 1076
	19  AppKit                              0x00007fff320a8d8f _NSViewDrawRect + 139
	20  AppKit                              0x00007fff320a809e -[NSView(NSInternal) _recursive:displayRectIgnoringOpacity:inContext:stopAtLayerBackedViews:] + 2170
	21  AppKit                              0x00007fff320a749a -[NSView(NSLayerKitGlue) _drawViewBackingLayer:inContext:drawingHandler:] + 1271
	22  QuartzCore                          0x00007fff40790c5d CABackingStoreUpdate_ + 595
	23  QuartzCore                          0x00007fff407f07d9 ___ZN2CA5Layer8display_Ev_block_invoke + 53
	24  QuartzCore                          0x00007fff40790162 -[CALayer _display] + 2103
	25  AppKit                              0x00007fff320a6e8a -[_NSBackingLayer display] + 537
	26  AppKit                              0x00007fff32008977 -[_NSViewBackingLayer display] + 800
	27  QuartzCore                          0x00007fff407b83fd _ZL16display_callbackPvS_ + 71
	28  QuartzCore                          0x00007fff407b835f _ZN2CA13DispatchGroup8dispatchEb + 65
	29  libdispatch.dylib                   0x00007fff6ec4a658 _dispatch_client_callout + 8
	30  libdispatch.dylib                   0x00007fff6ec4fc44 _dispatch_lane_serial_drain + 597
	31  libdispatch.dylib                   0x00007fff6ec505d6 _dispatch_lane_invoke + 363
	32  libdispatch.dylib                   0x00007fff6ec59c09 _dispatch_workloop_worker_thread + 596
	33  libsystem_pthread.dylib             0x00007fff6eea4a3d _pthread_wqthread + 290
	34  libsystem_pthread.dylib             0x00007fff6eea3b77 start_wqthread + 15
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

Add Support for the DSK/DO Disk Image Format

File Extension (DO/*.DSK) - This image is 143360 bytes in size (143488 with MacBinary header). It usually has the *.DSK extension, but may also be found with the *.DO extension as well. As suggested by the title, data is stored track by track and sector by sector (Track 0, Sector 0 -> Track 22, Sector 15) for a standard 1:1 copy of a 35 track, 16 sector DOS 3.3 disk (256 bytes per sector). This is the most widely-used disk-image format for 8-bit emulators, and is easily translated into other formats. This format is incapable of storing copy-protected software unless it has been "cracked" first. A basic guide to determining what type is software may be stored in a DO image is whether it can be first duplicated on an Apple with standard copy utilities such as "copya".
On the MACINTOSH - Unlike the PC, which determines file-types by the extension, the Macintosh adds a "resource header" to all files containing file type and creator information (creating a "forked" file). Files stored on Internet FTP sites, or transferred from a Unix or PC platform, will generally not contain this resource header. As such, the disk-image will not appear as a file usuable by any of the Macintosh emulators. It is a (relatively) simple case to change the File Type and File Creator information to "register" the disk-images to belong to a certain emulator. The relevant disk-image File Type and Creator information is displayed in the reviews of each Macintosh emulator in Section 2. For example, to use this format with Stop The Madness, ensure that the file is downloaded or transferred in binary - not Macbinary - mode (and is 143360 bytes). STM will NOT recognize the disk-image unless it has the correct file type/creator, even if it is of the correct size and is a binary file. Set the file type to 'DSK5' and the creator to 'A2EM' using ResEdit, UUlite, etc. Alternatively "Drop?Disk" is a drag-and-drop application which automatically converts the file type and creator of disk-images for use with STM. For the other Macintosh emulators, a useful utility to bulk- change resource information is the "Snitch" extension by Mitch Jones [email protected], which adds resource functionality to the Finder's "Get Info" window. Simply select a number of disk-image files, do a simultaneous "Get Info" command and change the active window's resource information. Then select "Change All" from Snitch's menu.
There are a number of utilities for the Macintosh which modify to and from ProDOS Order disk-images: "Easy.STM Convert.1.0" by Jim Surine [email protected], "Aconv v1.0" by Dan Bornstein and "Converter" will reorder PO disk-image sectors into the DO type used by STM. To re-order the sectors into ProDOS order, use "DOS Order Converter" by Rene Gaudet [email protected] or "ProDOS-Order Converter" (the "mapper" algorithm automatically reorders between the two formats).
PROGRAM LOCATIONS:
ftp://ftp.wustl.edu/systems/mac/info-mac/cfg/snitch-251.hqx
ftp://cassandra.ucr.edu/pub/apple2/converter.hqx
ftp://cassandra.ucr.edu/pub/apple2/easy.convert.1.0.sea.hqx
ftp://ftp.apple.asimov.net/pub/apple_II/utility/do2po_v0.1.sit.hqx
ftp://ftp.apple.asimov.net/pub/apple_II/utility/Po_to_Do.gz
ftp://ftp.apple.asimov.net/pub/apple_II/utility/ProDOSOrderConv.sit.bin
On the PC - The PC simply determines file-type by extension (although the emulators themselves may do some checking with regard to correct file size). To use this format with all of the PC emulators, ensure that the file is downloaded or transferred in binary mode (and is 143360 bytes) and that it has an eight character filename and *.DSK extension. The current version of Apl2Em requires that the D1 and D2 disk-images have default names (usually SYSTEM.DSK and BLANK.DSK respectively), so you will have to rename your disk-image files to use them. Applewin can actually read *.DSK files of 143488 bytes (MacBinary files with the *BIN extension) but for compatibility with other emulators it is better to translate the files correctly prior to use - see Section 4. No other form of conversion is necessary.

The Text display is very dimm

I have run the application on several macintoshes (Monterey or Big Sur) and always get the same issue.
The text displayed in the window application is almost unreadable being so dark.
image

I was not able to find where I could change the text color in your code.
regards

Add Support for the PO Disk Image Format

File Extension (PO/*.DSK) - This image is 143360 bytes in size (143488 with MacBinary header). It usually has the *.DSK extension, but may also be found with the *.PO extension as well. This disk-image stores data in block rather than track/sector format (block 0, block 1 -> block 279) - the difference in the structure is due to ProDOS interleaving data in blocks (which equal two DOS sectors). Although newer emulators are capable of distinguishing between DO and PO (and thus using both) older emulators strictly require the DO type despite the identical size. ProDOS Order images are still useful since they are capable of being converted back into SDK images by "Nulib" (which are compatible with ShrinkIt on the Apple). DO images are not capable of this. PO is an older disk-image format (used more widely with Unix emulators, since ShrinkIt archives extracted by "Nulib" produce PO images). Like DO, this format is incapable of storing copy- protected software unless it has been "cracked" first. A basic guide to determining what type is software may be stored in a PO image is whether it can be first duplicated on an Apple with standard copy utilities such as "copya".
On the MACINTOSH - The file must be downloaded in binary mode. None of the Macintosh emulators really use the PO format, except for "][ In a Mac", which uses images of non-standard size. To use this format with "][ In a Mac", drop a DO or Copy II+ 7.1 image file onto "Image Converter" by Lazarus I. Long and select the required format; output images will have the correct resource information. The application "Easy Convert" will re-order the sectors of a PO disk-image into DOS3.3 Order, and will automatically set the file type/creator attributes upon output to 'DSK5'/'A2EM' for use with STM. Alternatively, use "ProDOS-Order Converter".
PROGRAM LOCATIONS:
ftp://ftp.apple.asimov.net/pub/apple_II/utility/ic.sit
ftp://cassandra.ucr.edu/pub/apple2/easy.convert.1.0.sea.hqx
ftp://ftp.apple.asimov.net/pub/apple_II/utility/Po_to_Do.gz
ftp://ftp.apple.asimov.net/pub/apple_II/utility/ProDOSOrderConv.sit.bin
On the PC - No emulators on the PC require PO images (although newer emulators such as AppleWin support them). Use "Mapper" by Rene Gaudet [email protected] to convert DO to PO and vice versa.
PROGRAM LOCATIONS:
ftp://ftp.apple.asimov.net/pub/apple_II/utility/mapper.zip

Joystick / Paddle Emulation Options

Give options for the Joystick emulation

  • No Joystick / Paddle
  • Keyboard 2 Joystick
    • Options:
      • Reversing X/Y
      • Digital: Left/Right/Up/Down to extreme ends, otherwise spot on the middle
        • Calibration:
          • Middle point
          • End points
      • Progressive: Continuously increasing till the ends, decreasing when depressed
        • Calibration:
          • Middle point
          • End points
  • Mouse 2 Joystick
    • Options:
      • Reversing X/Y
      • Calibration:
        • Middle point
        • End points
        • Mouse range
          • Full Screen
          • Window
          • Rectangle
  • USB Joystick / Game controller 2 Joystick (should be default is there is attached)
    • Options:
      • Reversing X/Y
      • Calibration:
        • Middle point
        • End points

Add Speaker Softness Control

Adjusting fadeLevel increments in spkr_toggle() makes it possible to change softness of sound. Softer sound might give you better audio for speech synthesis, also some people might prefer that.
Harder sound might give you more accurate sound on average games.

  • Hard: fadeLevel *= 0.16; or below
  • Medium: fadeLevel *= 0.64;
  • Soft: fadeLevel *= 0.75; or above

Mock Stereo

Add Mock Stereo (Fake Stereo)

Delay Left and Right channel based on Frequency Ranges. It is easy to implement it in spkr_toggle()...

Make this is an optional setting.

Duophonic - Wikipedia

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.