Merge branch 'experimental' into 'experimental_host_fst'
# Conflicts: # src/host_fst.c
@ -71,6 +71,7 @@ package-ubuntu-sdl2:
|
|||||||
paths:
|
paths:
|
||||||
- gsplus
|
- gsplus
|
||||||
- config.txt
|
- config.txt
|
||||||
|
- doc/README.txt
|
||||||
- doc/gsplusmanual.txt
|
- doc/gsplusmanual.txt
|
||||||
- doc/gsplusmanual.pdf
|
- doc/gsplusmanual.pdf
|
||||||
- doc/COPYING.txt
|
- doc/COPYING.txt
|
||||||
@ -96,9 +97,11 @@ package-osx:
|
|||||||
script:
|
script:
|
||||||
- chmod +x make_dist_mac.sh
|
- chmod +x make_dist_mac.sh
|
||||||
- ./make_dist_mac.sh
|
- ./make_dist_mac.sh
|
||||||
|
- chmod +x make_dmg_mac.sh
|
||||||
|
- ./make_dmg_mac.sh
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- gsplus-osx.tar.gz
|
- GSplus-Install.dmg
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -127,6 +130,7 @@ package-win32:
|
|||||||
- cp /bin/cyggcc_s-1.dll .
|
- cp /bin/cyggcc_s-1.dll .
|
||||||
- cp /bin/cygstdc++-6.dll .
|
- cp /bin/cygstdc++-6.dll .
|
||||||
- cp /bin/cygwin1.dll .
|
- cp /bin/cygwin1.dll .
|
||||||
|
- cp /bin/cygfreetype-6.dll .
|
||||||
|
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
@ -134,10 +138,12 @@ package-win32:
|
|||||||
- config.txt
|
- config.txt
|
||||||
- doc/gsplusmanual.txt
|
- doc/gsplusmanual.txt
|
||||||
- doc/gsplusmanual.pdf
|
- doc/gsplusmanual.pdf
|
||||||
|
- doc/README.txt
|
||||||
- doc/COPYING.txt
|
- doc/COPYING.txt
|
||||||
- cyggcc_s-1.dll
|
- cyggcc_s-1.dll
|
||||||
- cygstdc++-6.dll
|
- cygstdc++-6.dll
|
||||||
- cygwin1.dll
|
- cygwin1.dll
|
||||||
|
- cygfreetype-6.dll .
|
||||||
|
|
||||||
|
|
||||||
build-win-sdl:
|
build-win-sdl:
|
||||||
@ -164,6 +170,7 @@ package-win-sdl:
|
|||||||
- cp /bin/cyggcc_s-1.dll .
|
- cp /bin/cyggcc_s-1.dll .
|
||||||
- cp /bin/cygstdc++-6.dll .
|
- cp /bin/cygstdc++-6.dll .
|
||||||
- cp /bin/cygwin1.dll .
|
- cp /bin/cygwin1.dll .
|
||||||
|
- cp /bin/cygfreetype-6.dll .
|
||||||
|
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
@ -172,6 +179,8 @@ package-win-sdl:
|
|||||||
- doc/gsplusmanual.txt
|
- doc/gsplusmanual.txt
|
||||||
- doc/gsplusmanual.pdf
|
- doc/gsplusmanual.pdf
|
||||||
- doc/COPYING.txt
|
- doc/COPYING.txt
|
||||||
|
- doc/README.txt
|
||||||
- cyggcc_s-1.dll
|
- cyggcc_s-1.dll
|
||||||
- cygstdc++-6.dll
|
- cygstdc++-6.dll
|
||||||
- cygwin1.dll
|
- cygwin1.dll
|
||||||
|
- cygfreetype-6.dll
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
# sudo pip install pillow
|
# sudo pip install pillow
|
||||||
# ^^ on mac osx
|
# ^^ on mac osx
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
im = Image.open("gsp_icon_128.png") #Can be many different formats.
|
#im = Image.open("gsp_icon_128.png") #Can be many different formats.
|
||||||
#im = Image.open("gsp_icon_256.png") #Can be many different formats.
|
im = Image.open("gsp_icon_256.png") #Can be many different formats.
|
||||||
pix = im.load()
|
pix = im.load()
|
||||||
print im.size #Get the width and hight of the image for iterating over
|
print im.size #Get the width and hight of the image for iterating over
|
||||||
width = im.size[0]
|
width = im.size[0]
|
||||||
|
BIN
assets/gsp-dmg-icons.icns
Normal file
BIN
assets/gsp_dmg_bg_600x500.png
Normal file
After Width: | Height: | Size: 162 KiB |
BIN
assets/gsp_dmg_bg_600x500.psd
Normal file
BIN
assets/gsp_dmg_icon_1024.png
Normal file
After Width: | Height: | Size: 502 KiB |
BIN
assets/gsp_dmg_icon_128.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
assets/gsp_dmg_icon_16.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
assets/gsp_dmg_icon_256.png
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
assets/gsp_dmg_icon_32.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
assets/gsp_dmg_icon_512.png
Normal file
After Width: | Height: | Size: 224 KiB |
BIN
assets/gsp_dmg_icon_64.png
Normal file
After Width: | Height: | Size: 7.4 KiB |
BIN
assets/gsp_icon_1024.png
Normal file
After Width: | Height: | Size: 299 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 16 KiB |
BIN
assets/gsp_icon_16.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
assets/gsp_icon_256.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
assets/gsp_icon_32.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
assets/gsp_icon_512.png
Normal file
After Width: | Height: | Size: 114 KiB |
BIN
assets/gsp_icon_64.png
Normal file
After Width: | Height: | Size: 5.8 KiB |
BIN
assets/gsp_icon_dmg.psd
Normal file
21
doc/README.txt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
Getting started
|
||||||
|
===============
|
||||||
|
|
||||||
|
1. Download the emulator package and put it in a folder
|
||||||
|
2. Download the Apple IIgs Firmware ROMs, for either a ROM01 or ROM03 machine.
|
||||||
|
(If you have a real IIgs, there are ways to save it from your machine too.)
|
||||||
|
Try: ftp://ftp.apple.asimov.net/pub/apple_II/emulators/rom_images/
|
||||||
|
3. Download some Apple IIgs software.
|
||||||
|
I recommend the excellent Apple IIgs dedicated site,
|
||||||
|
http://www.whatisthe2gs.apple2.org.za/
|
||||||
|
If you have a real IIgs, you can transfer your disks using ADTPro
|
||||||
|
http://adtpro.sourceforge.net/
|
||||||
|
4. Edit your config:
|
||||||
|
You can manually edit the config.txt file
|
||||||
|
.. or while the emulator is running... hit F4 to enter config menu.
|
||||||
|
Set up the ROM to point to your IIgs ROM file from step 2.
|
||||||
|
Set up the slots to point to disks from step 3.
|
||||||
|
5. Boot the Apple IIgs by running the emulator
|
||||||
|
Windows: gsplus32.exe
|
||||||
|
Mac/Ubuntu: ./gsplus
|
||||||
|
|
@ -1,58 +1,59 @@
|
|||||||
_______ _______ _
|
gsp_icon_512.png
|
||||||
| || | _| |_
|
|
||||||
| ___|| _____||_ _|
|
|
||||||
| | __ | |_____ |_|
|
|
||||||
| || ||_____ |
|
|
||||||
| |_| | _____| |
|
|
||||||
|_______||_______|
|
|
||||||
|
|
||||||
GSplus
|
|
||||||
|
|
||||||
Modern cross-platform Apple IIgs emulator and tools based on KEGS
|
|
||||||
|
|
||||||
Manual Versions: Alpha Draft: 2016-10-27, Initial Draft: 2016-05-01
|
|
||||||
|
|
||||||
|
GSplus
|
||||||
|
Modern cross-platform Apple IIgs emulator and tools based on KEGS & GSPort
|
||||||
|
Manual Versions:
|
||||||
|
Alpha Release: 2016-11-02
|
||||||
|
Alpha Draft: 2016-10-27
|
||||||
|
Initial Draft: 2016-05-01
|
||||||
Overview & Purpose
|
Overview & Purpose
|
||||||
This project is an attempt to build a better Apple IIgs emulator by modernizing the KEGS/GSport emulator family and extending it into a platform.
|
This project is an attempt to build a better Apple IIgs emulator by modernizing the KEGS/GSport emulator family and extending it into a platform.
|
||||||
The first steps were a release of a new SDL2 driver. SDL or "Simple DirectMedia Layer" enables the writing of one cross-platform driver to handle input and output (video, mouse, keyboard, audio, joystick). This helps the goal of providing first-class support for all of the major platforms supported by SDL, including Mac OSX, Windows and Linux.
|
The first steps were a release of a new SDL2 driver. SDL or "Simple DirectMedia Layer" enables the writing of one cross-platform driver to handle input and output (video, mouse, keyboard, audio, joystick). This helps the goal of providing first-class support for all of the major platforms supported by SDL, including Mac OSX, Windows and Linux.
|
||||||
Part of this effort has also led to the development of an automated build and packaging pipeline using Gitlab CI. This helps our team of one continue to develop on primarily a single platform, while still ensuring that it works across many operating systems
|
Part of this effort has also led to the development of an automated build and packaging pipeline using Gitlab CI. This helps our team of one continue to develop on primarily a single platform, while still ensuring that it works across many operating systems
|
||||||
Currently, the main supported platforms are Linux, OSX and *Windows. *Unfortunately the SDL2 version of Windows is not done as of this draft, but the Win32 API version still works well and is regularly built, though missing some features like screenshots.
|
Currently, the main supported platforms are Linux, OSX and *Windows.
|
||||||
|
Getting started
|
||||||
|
1. Download the emulator package and put it in a folder
|
||||||
|
2. Download the Apple IIgs Firmware ROMs, for either a ROM01 or ROM03 machine.
|
||||||
|
(If you have a real IIgs, there are ways to save it from your machine too.)
|
||||||
|
Try: ftp://ftp.apple.asimov.net/pub/apple_II/emulators/rom_images/
|
||||||
|
3. Download some Apple IIgs software.
|
||||||
|
I recommend the excellent Apple IIgs dedicated site:
|
||||||
|
http://www.whatisthe2gs.apple2.org.za/
|
||||||
|
If you have a real IIgs, you can transfer your disks using ADTPro
|
||||||
|
http://adtpro.sourceforge.net/
|
||||||
|
4. Edit your config:
|
||||||
|
You can manually edit the config.txt file
|
||||||
|
.. or while the emulator is running… hit F4 to enter config menu.
|
||||||
|
Set up the ROM to point to your IIgs ROM file from step 2.
|
||||||
|
Set up the slots to point to disks from step 3.
|
||||||
|
5. Boot the Apple IIgs by running the emulator
|
||||||
|
Windows: gsplus32.exe
|
||||||
|
Mac/Ubuntu: ./gsplus
|
||||||
|
|
||||||
|
|
||||||
________________
|
________________
|
||||||
|
|
||||||
Getting started
|
|
||||||
1. Download the emulator package and put it in a folder
|
|
||||||
2. Download the Apple IIgs Firmware ROMs, for either a ROM01 or ROM03 machine. (If you have a real IIgs, there are ways to save it from your machine as well.)
|
|
||||||
3. Download some Apple IIgs software.
|
|
||||||
1. I recommend the excellent Apple IIgs dedicated site, http://www.whatisthe2gs.apple2.org.za/
|
|
||||||
2. If you have a real IIgs, you can transfer your disks using ADTPro http://adtpro.sourceforge.net/
|
|
||||||
1. Edit your config:
|
|
||||||
1. You can manually edit the config.txt file … OR ...
|
|
||||||
2. While the emulator is running… hit F4 to enter config menu.
|
|
||||||
1. Boot the Apple IIgs by running the emulator
|
|
||||||
1. Windows: gsplus.exe
|
|
||||||
2. Mac/Ubuntu: ./gsplus
|
|
||||||
|
|
||||||
Emulator Hot-Keys
|
Emulator Hot-Keys
|
||||||
There are several keys used to interact with the emulator while it is running. Here’s a quick list of the main hot-keys and what they do.
|
There are several keys used to interact with the emulator while it is running. Here’s a quick list of the main hot-keys and what they do.
|
||||||
F4 - Configuration menu
|
F4 - Configuration menu
|
||||||
F5 - Config menu
|
F5 - Paste from host OS into emulator
|
||||||
F6 - Toggle System Speed (1, 2.8, 8, ∞ MHz )
|
Shift-F5 - Screenshot
|
||||||
F7 - Toggle Fast Disk Emulation
|
F6 - Toggle System Speed (1, 2.8, 8, ∞ MHz )
|
||||||
F9 - Invert Paddles
|
F7 - Toggle Fast Disk Emulation
|
||||||
F10 - Toggle a2vid_palette (?)
|
F9 - Invert Paddles
|
||||||
F11 - Toggle Fullscreen Mode
|
F10 - Toggle a2vid_palette (?)
|
||||||
F12 - RESET Key (so to hit “Ctrl-Reset” on an Apple II, you hit “Ctrl-F12”)
|
F11 - Toggle Fullscreen Mode
|
||||||
SHIFT+F5 - Screenshot
|
F12 - RESET Key (so to hit “Ctrl-Reset” on an Apple II, you hit “Ctrl-F12”)
|
||||||
|
|
||||||
Other Input/Output
|
Other Input/Output
|
||||||
1. Mouse and keyboard should automatically work
|
1. Mouse and keyboard should automatically work
|
||||||
2. Joystick with SDL2 driver is known to be working. It simply uses the “first” joystick and the first analog pad on that stick plus the first two buttons. The axes and buttons are not yet configurable. Better info forthcoming.
|
2. Joystick with SDL2 driver is known to be working. It simply uses the “first” joystick and the first analog pad on that stick plus the first two buttons. The axes and buttons are not yet configurable. Better info forthcoming.
|
||||||
3. There are drivers for serial controller, ImageWriter (II?) printer, and networking. I may have broken some of this functionality to get builds working. I’m not currently familiar with the state of these drivers or their usage. More info will be added as I take time to research more of the modules.
|
3. There are drivers for serial controller, ImageWriter (II?) printer, and networking. I may have broken some of this functionality to get builds working. I’m not currently familiar with the state of these drivers or their usage. More info will be added as I take time to research more of the modules.
|
||||||
|
|
||||||
Configuration Menu
|
Configuration Menu
|
||||||
Configuration options are loaded from, and saved to, a configuration text file. The default configuration file is config.txt. If you are just starting out, it’s recommended to use the configuration menu versus editing the file yourself.
|
Configuration options are loaded from, and saved to, a configuration text file. The default configuration file is config.txt. If you are just starting out, it’s recommended to use the configuration menu versus editing the file yourself.
|
||||||
Enter the configuration menu at any time while running GSplus by hitting <F4>.
|
Enter the configuration menu at any time while running GSplus by hitting <F4>.
|
||||||
|
Screen Shot 2016-05-01 at 9.10.00 AM.png
|
||||||
|
|
||||||
Most importantly, you can use the Disk Configuration menu option to “mount” and “eject” disks.
|
Most importantly, you can use the Disk Configuration menu option to “mount” and “eject” disks.
|
||||||
Command-line Options
|
Command-line Options
|
||||||
@ -79,6 +80,7 @@ This is from source, some are experimental and not all may be built on your syst
|
|||||||
-enet value Set ethernet to value
|
-enet value Set ethernet to value
|
||||||
-config value Set config file to value
|
-config value Set config file to value
|
||||||
-debugport value Set debugport to value
|
-debugport value Set debugport to value
|
||||||
|
-ssdir value Set screenshot save directory to value
|
||||||
Note: The final argument, if not a flag, will be tried as a mountable device.
|
Note: The final argument, if not a flag, will be tried as a mountable device.
|
||||||
|
|
||||||
|
|
||||||
@ -86,7 +88,9 @@ Note: The final argument, if not a flag, will be tried as a mountable device.
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
Debugger Commands
|
Debugger Commands - BROKEN!!!
|
||||||
|
Sorry, the debugger is currently broken due to a change in debugging frameworks.
|
||||||
|
The documentation below is accurate, but does not currently work.
|
||||||
Enter from the debugger prompt (Shift-F6)
|
Enter from the debugger prompt (Shift-F6)
|
||||||
GSplus CLI Debugger help (courtesy Fredric Devernay)
|
GSplus CLI Debugger help (courtesy Fredric Devernay)
|
||||||
General command syntax: [bank]/[address][command]
|
General command syntax: [bank]/[address][command]
|
||||||
@ -94,44 +98,42 @@ e.g. 'e1/0010B' to set a breakpoint at the interrupt jump pt
|
|||||||
Enter all addresses using lower-case. As with the IIgs monitor, you can omit the bank number after having set it: 'e1/0010B' followed by '14B' will set breakpoints at e1/0010 and e1/0014
|
Enter all addresses using lower-case. As with the IIgs monitor, you can omit the bank number after having set it: 'e1/0010B' followed by '14B' will set breakpoints at e1/0010 and e1/0014
|
||||||
|
|
||||||
|
|
||||||
g Go
|
g Go
|
||||||
[bank]/[addr]g Go from [bank]/[address]
|
[bank]/[addr]g Go from [bank]/[address]
|
||||||
s Step one instruction
|
s Step one instruction
|
||||||
[bank]/[addr]s Step one instr at [bank]/[address]
|
[bank]/[addr]s Step one instr at [bank]/[address]
|
||||||
[bank]/[addr]B Set breakpoint at [bank]/[address]
|
[bank]/[addr]B Set breakpoint at [bank]/[address]
|
||||||
B Show all breakpoints
|
B Show all breakpoints
|
||||||
[bank]/[addr]D Delete breakpoint at [bank]/[address]
|
[bank]/[addr]D Delete breakpoint at [bank]/[address]
|
||||||
[bank]/[addr1].[addr2] View memory
|
[bank]/[addr1].[addr2] View memory
|
||||||
[bank]/[addr]L Disassemble memory
|
[bank]/[addr]L Disassemble memory
|
||||||
P Dump the trace to 'pc_log_out'
|
P Dump the trace to 'pc_log_out'
|
||||||
Z Dump SCC state
|
Z Dump SCC state
|
||||||
I Dump IWM state
|
I Dump IWM state
|
||||||
[drive].[track]I Dump IWM state
|
[drive].[track]I Dump IWM state
|
||||||
E Dump Ensoniq state
|
E Dump Ensoniq state
|
||||||
[osc]E Dump oscillator [osc] state
|
[osc]E Dump oscillator [osc] state
|
||||||
R Dump dtime array and events
|
R Dump dtime array and events
|
||||||
T Show toolbox log
|
T Show toolbox log
|
||||||
[bank]/[addr]T Dump tools using ptr [bank]/[addr] as 'tool_set_info'
|
[bank]/[addr]T Dump tools using ptr [bank]/[addr] as 'tool_set_info'
|
||||||
[mode]V XOR verbose with 1=DISK, 2=IRQ,4=CLK,8=SHADOW,10=IWM,20=DOC,
|
[mode]V XOR verbose with 1=DISK, 2=IRQ,4=CLK,8=SHADOW,10=IWM,20=DOC,
|
||||||
40=ABD,80=SCC, 100=TEST, 200=VIDEO
|
40=ABD,80=SCC, 100=TEST, 200=VIDEO
|
||||||
[mode]H XOR halt_on with 1=SCAN_INT,2=IRQ, 4=SHADOW_REG, 8=C70D_WRITES
|
[mode]H XOR halt_on with 1=SCAN_INT,2=IRQ, 4=SHADOW_REG, 8=C70D_WRITES
|
||||||
r Reset
|
r Reset
|
||||||
[0/1]=m Changes m bit for l listings
|
[0/1]=m Changes m bit for l listings
|
||||||
[0/1]=x Changes x bit for l listings
|
[0/1]=x Changes x bit for l listings
|
||||||
[t]=z Stops at absolute time t (obsolete)
|
[t]=z Stops at absolute time t (obsolete)
|
||||||
S show_bankptr_bank0 & smartport errs
|
S show_bankptr_bank0 & smartport errs
|
||||||
P show_pmhz
|
P show_pmhz
|
||||||
A show_a2_line_stuff show_adb_log
|
A show_a2_line_stuff show_adb_log
|
||||||
Ctrl-e Dump registers
|
Ctrl-e Dump registers
|
||||||
[bank]/[addr1].[addr2]us[file] Save mem area to [file]
|
[bank]/[addr1].[addr2]us[file] Save mem area to [file]
|
||||||
[bank]/[addr1].[addr2]ul[file] Load mem area from [file]
|
[bank]/[addr1].[addr2]ul[file] Load mem area from [file]
|
||||||
v Show video information
|
v Show video information
|
||||||
q Exit Debugger (and GSplus)
|
q Exit Debugger (and GSplus)
|
||||||
|
|
||||||
|
|
||||||
________________
|
________________
|
||||||
|
|
||||||
Project Info
|
Project Info
|
||||||
Developers inquire within :P
|
Developers inquire within :P
|
||||||
Main page and full source code repository: https://github.com/digarok/gsplus
|
Main page and full source code repository: https://github.com/digarok/gsplus
|
||||||
This project has an ugly unmaintained homepage at http://apple2.gs/plus/
|
This project has a homepage at http://apple2.gs/plus/
|
||||||
|
The homepage hosts the latest build for a variety of OSes.
|
@ -1,3 +1,4 @@
|
|||||||
|
DEXTRAS=gsplus-osx/
|
||||||
DDIR=gsplus-osx/GSplus.app
|
DDIR=gsplus-osx/GSplus.app
|
||||||
ADIR=assets
|
ADIR=assets
|
||||||
mkdir -p $DDIR/Contents/MacOS
|
mkdir -p $DDIR/Contents/MacOS
|
||||||
@ -7,4 +8,13 @@ cp gsplus $DDIR/Contents/MacOS
|
|||||||
cp $ADIR/Info.plist $DDIR/Contents
|
cp $ADIR/Info.plist $DDIR/Contents
|
||||||
cp $ADIR/gsp-icons.icns $DDIR/Contents/Resources
|
cp $ADIR/gsp-icons.icns $DDIR/Contents/Resources
|
||||||
dylibbundler -od -b -x $DDIR/Contents/MacOS/gsplus -d $DDIR/Contents/libs/
|
dylibbundler -od -b -x $DDIR/Contents/MacOS/gsplus -d $DDIR/Contents/libs/
|
||||||
tar -cvzf gsplus-osx.tar.gz gsplus-osx/
|
|
||||||
|
# files to include in dmg
|
||||||
|
cp doc/gsplusmanual.pdf $DEXTRAS
|
||||||
|
cp doc/gsplusmanual.txt $DEXTRAS
|
||||||
|
cp doc/README.txt $DEXTRAS
|
||||||
|
cp COPYING.txt $DEXTRAS
|
||||||
|
|
||||||
|
#tar -cvzf gsplus-osx.tar.gz gsplus-osx/
|
||||||
|
|
||||||
|
# packaging now in DMG script
|
||||||
|
22
make_dmg_mac.sh
Executable file
@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
git clone https://github.com/andreyvit/yoursway-create-dmg.git
|
||||||
|
cd yoursway-create-dmg
|
||||||
|
|
||||||
|
test -f GSplus-Install.dmg && rm GSplus-Install.dmg
|
||||||
|
./create-dmg \
|
||||||
|
--volname "GSplus" \
|
||||||
|
--volicon "../assets/gsp-dmg-icons.icns" \
|
||||||
|
--background "../assets/gsp_dmg_bg_600x500.png" \
|
||||||
|
--window-pos 200 120 \
|
||||||
|
--window-size 600 500 \
|
||||||
|
--icon-size 100 \
|
||||||
|
--icon GSplus.app 180 130 \
|
||||||
|
--hide-extension GSplus.app \
|
||||||
|
--app-drop-link 410 130 \
|
||||||
|
--icon README.txt 80 330 \
|
||||||
|
--icon gsplusmanual.pdf 220 330 \
|
||||||
|
--icon gsplusmanual.txt 360 330 \
|
||||||
|
--icon COPYING.txt 500 330 \
|
||||||
|
GSplus-Install.dmg \
|
||||||
|
../gsplus-osx/
|
||||||
|
cp GSplus-Install.dmg ..
|
11
src/adb.c
@ -24,6 +24,7 @@
|
|||||||
/* adb_mode bit 3 and bit 2 (faster repeats for arrows and space/del) not done*/
|
/* adb_mode bit 3 and bit 2 (faster repeats for arrows and space/del) not done*/
|
||||||
|
|
||||||
#include "adb.h"
|
#include "adb.h"
|
||||||
|
#include "glog.h"
|
||||||
|
|
||||||
int g_fullscreen = 0;
|
int g_fullscreen = 0;
|
||||||
|
|
||||||
@ -180,7 +181,7 @@ adb_init()
|
|||||||
for(i = 0; i < 128; i++) {
|
for(i = 0; i < 128; i++) {
|
||||||
keycode = a2_key_to_ascii[i][0];
|
keycode = a2_key_to_ascii[i][0];
|
||||||
if(keycode != i) {
|
if(keycode != i) {
|
||||||
printf("ADB keycode lost/skipped: i=%x: keycode=%x\n",
|
gloghead(); printf("ADB keycode lost/skipped: i=%x: keycode=%x\n",
|
||||||
i, keycode);
|
i, keycode);
|
||||||
my_exit(1);
|
my_exit(1);
|
||||||
}
|
}
|
||||||
@ -496,14 +497,12 @@ adb_set_config(word32 val0, word32 val1, word32 val2)
|
|||||||
new_mouse = val0 >> 4;
|
new_mouse = val0 >> 4;
|
||||||
new_kbd = val0 & 0xf;
|
new_kbd = val0 & 0xf;
|
||||||
if(new_mouse != g_mouse_ctl_addr) {
|
if(new_mouse != g_mouse_ctl_addr) {
|
||||||
printf("ADB config: mouse from %x to %x!\n",
|
gloghead(); printf("ADB config: mouse from %x to %x!\n", g_mouse_ctl_addr, new_mouse);
|
||||||
g_mouse_ctl_addr, new_mouse);
|
|
||||||
adb_error();
|
adb_error();
|
||||||
g_mouse_ctl_addr = new_mouse;
|
g_mouse_ctl_addr = new_mouse;
|
||||||
}
|
}
|
||||||
if(new_kbd != g_kbd_ctl_addr) {
|
if(new_kbd != g_kbd_ctl_addr) {
|
||||||
printf("ADB config: kbd from %x to %x!\n",
|
gloghead(); printf("ADB config: kbd from %x to %x!\n", g_kbd_ctl_addr, new_kbd);
|
||||||
g_kbd_ctl_addr, new_kbd);
|
|
||||||
adb_error();
|
adb_error();
|
||||||
g_kbd_ctl_addr = new_kbd;
|
g_kbd_ctl_addr = new_kbd;
|
||||||
}
|
}
|
||||||
@ -566,7 +565,7 @@ void
|
|||||||
adb_set_new_mode(word32 val)
|
adb_set_new_mode(word32 val)
|
||||||
{
|
{
|
||||||
if(val & 0x03) {
|
if(val & 0x03) {
|
||||||
printf("Disabling keyboard/mouse:%02x!\n", val);
|
gloghead(); printf("Disabling keyboard/mouse:%02x!\n", val);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(val & 0xa2) {
|
if(val & 0xa2) {
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
#include "gsos.h"
|
#include "gsos.h"
|
||||||
#include "fst.h"
|
#include "fst.h"
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#if defined(__APPLE__)
|
||||||
#include <sys/xattr.h>
|
#include <sys/xattr.h>
|
||||||
#include <sys/attr.h>
|
#include <sys/attr.h>
|
||||||
#include <sys/paths.h>
|
#include <sys/paths.h>
|
||||||
@ -28,11 +28,17 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
#if defined(_WIN32) || defined(WIN_SDL)
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
#define ftruncate(a,b) _chsize(a,b)
|
#include <sys/xattr.h>
|
||||||
|
//#define ftruncate(a,b) _chsize(a,b)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__linux__)
|
||||||
|
#include <time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifndef XATTR_FINDERINFO_NAME
|
#ifndef XATTR_FINDERINFO_NAME
|
||||||
#define XATTR_FINDERINFO_NAME "com.apple.FinderInfo"
|
#define XATTR_FINDERINFO_NAME "com.apple.FinderInfo"
|
||||||
#endif
|
#endif
|
||||||
@ -360,7 +366,7 @@ static int file_type_to_finder_info(byte *buffer, word16 file_type, word32 aux_t
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if defined __APPLE__
|
#if defined(__APPLE__) || defined(__linux__)
|
||||||
static void get_file_xinfo(const char *path, struct file_info *fi) {
|
static void get_file_xinfo(const char *path, struct file_info *fi) {
|
||||||
|
|
||||||
ssize_t tmp;
|
ssize_t tmp;
|
||||||
@ -376,7 +382,7 @@ static void get_file_xinfo(const char *path, struct file_info *fi) {
|
|||||||
finder_info_to_filetype(fi->finder_info, &fi->file_type, &fi->aux_type);
|
finder_info_to_filetype(fi->finder_info, &fi->file_type, &fi->aux_type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#elif defined _WIN32
|
#elif defined _WIN32_old
|
||||||
static void get_file_xinfo(const char *path, struct file_info *fi) {
|
static void get_file_xinfo(const char *path, struct file_info *fi) {
|
||||||
|
|
||||||
struct stat st;
|
struct stat st;
|
||||||
@ -399,7 +405,7 @@ static void get_file_xinfo(const char *path, struct file_info *fi) {
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
#elif defined __sun
|
#elif defined(__sun)
|
||||||
static void get_file_xinfo(const char *path, struct file_info *fi) {
|
static void get_file_xinfo(const char *path, struct file_info *fi) {
|
||||||
|
|
||||||
struct stat st;
|
struct stat st;
|
||||||
@ -425,7 +431,7 @@ static void get_file_xinfo(const char *path, struct file_info *fi) {
|
|||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#elif defined __linux__
|
#elif defined(__linux__) || defined(_WIN32) || defined(WIN_SDL)
|
||||||
static void get_file_xinfo(const char *path, struct file_info *fi) {
|
static void get_file_xinfo(const char *path, struct file_info *fi) {
|
||||||
|
|
||||||
ssize_t tmp;
|
ssize_t tmp;
|
||||||
@ -434,7 +440,7 @@ static void get_file_xinfo(const char *path, struct file_info *fi) {
|
|||||||
fi->resource_eof = tmp;
|
fi->resource_eof = tmp;
|
||||||
fi->resource_blocks = (tmp + 511) / 512;
|
fi->resource_blocks = (tmp + 511) / 512;
|
||||||
|
|
||||||
tmp = getxattr(path, "user.apple.FinderInfo", fi->finder_info, 32, 0, 0);
|
tmp = getxattr(path, "user.apple.FinderInfo", fi->finder_info, 32);
|
||||||
if (tmp == 16 || tmp == 32){
|
if (tmp == 16 || tmp == 32){
|
||||||
fi->has_fi = 1;
|
fi->has_fi = 1;
|
||||||
|
|
||||||
@ -459,7 +465,7 @@ static word32 get_file_info(const char *path, struct file_info *fi) {
|
|||||||
fi->create_date = st.st_ctime;
|
fi->create_date = st.st_ctime;
|
||||||
fi->modified_date = st.st_mtime;
|
fi->modified_date = st.st_mtime;
|
||||||
|
|
||||||
#if defined __APPLE__
|
#if defined(__APPLE__)
|
||||||
fi->create_date = st.st_birthtime;
|
fi->create_date = st.st_birthtime;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -505,7 +511,7 @@ static word32 get_file_info(const char *path, struct file_info *fi) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if defined __APPLE__
|
#if defined(__APPLE__)
|
||||||
static word32 set_file_info(const char *path, struct file_info *fi) {
|
static word32 set_file_info(const char *path, struct file_info *fi) {
|
||||||
|
|
||||||
int ok;
|
int ok;
|
||||||
@ -541,7 +547,7 @@ static word32 set_file_info(const char *path, struct file_info *fi) {
|
|||||||
if (i) ok = setattrlist(path, &list, dates, i * sizeof(struct timespec), 0);
|
if (i) ok = setattrlist(path, &list, dates, i * sizeof(struct timespec), 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#elif defined _WIN32
|
#elif defined _WIN32_old
|
||||||
|
|
||||||
|
|
||||||
static void UnixTimeToFileTime(time_t t, LPFILETIME pft)
|
static void UnixTimeToFileTime(time_t t, LPFILETIME pft)
|
||||||
@ -599,7 +605,7 @@ static word32 set_file_info(const char *path, struct file_info *fi) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined __sun
|
#elif defined(__sun)
|
||||||
static word32 set_file_info(const char *path, struct file_info *fi) {
|
static word32 set_file_info(const char *path, struct file_info *fi) {
|
||||||
|
|
||||||
if (fi->has_fi && fi->storage_type != 0x0d) {
|
if (fi->has_fi && fi->storage_type != 0x0d) {
|
||||||
@ -610,7 +616,7 @@ static word32 set_file_info(const char *path, struct file_info *fi) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (fi->modified_date) {
|
if (fi->modified_date) {
|
||||||
|
/*
|
||||||
struct timeval times[2];
|
struct timeval times[2];
|
||||||
|
|
||||||
memset(times, 0, sizeof(times));
|
memset(times, 0, sizeof(times));
|
||||||
@ -618,13 +624,13 @@ static word32 set_file_info(const char *path, struct file_info *fi) {
|
|||||||
|
|
||||||
times[0] = 0; // access
|
times[0] = 0; // access
|
||||||
times[1].tv_sec = fi.modified_date; // modified
|
times[1].tv_sec = fi.modified_date; // modified
|
||||||
|
*/
|
||||||
int ok = utimes(path);
|
int ok = utimes(path);
|
||||||
if (ok < 0) return map_errno();
|
if (ok < 0) return map_errno();
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#elif defined __linux__
|
#elif defined(__linux__) || defined(_WIN32) || defined(WIN_SDL)
|
||||||
static word32 set_file_info(const char *path, struct file_info *fi) {
|
static word32 set_file_info(const char *path, struct file_info *fi) {
|
||||||
|
|
||||||
if (fi->has_fi && fi->storage_type != 0x0d) {
|
if (fi->has_fi && fi->storage_type != 0x0d) {
|
||||||
@ -633,7 +639,7 @@ static word32 set_file_info(const char *path, struct file_info *fi) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (fi->modified_date) {
|
if (fi->modified_date) {
|
||||||
|
/*
|
||||||
struct timeval times[2];
|
struct timeval times[2];
|
||||||
|
|
||||||
memset(times, 0, sizeof(times));
|
memset(times, 0, sizeof(times));
|
||||||
@ -641,9 +647,9 @@ static word32 set_file_info(const char *path, struct file_info *fi) {
|
|||||||
|
|
||||||
times[0] = 0; // access
|
times[0] = 0; // access
|
||||||
times[1].tv_sec = fi.modified_date; // modified
|
times[1].tv_sec = fi.modified_date; // modified
|
||||||
|
|
||||||
int ok = utimes(path);
|
int ok = utimes(path);
|
||||||
if (ok < 0) return map_errno();
|
if (ok < 0) return map_errno();
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1323,7 +1329,7 @@ static int open_data_fork(const char *path, word16 *access, word16 *error) {
|
|||||||
}
|
}
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
#if defined __APPLE__
|
#if defined(__APPLE__)
|
||||||
static int open_resource_fork(const char *path, word16 *access, word16 *error) {
|
static int open_resource_fork(const char *path, word16 *access, word16 *error) {
|
||||||
// os x / hfs/apfs don't need to specifically create a resource fork.
|
// os x / hfs/apfs don't need to specifically create a resource fork.
|
||||||
// or do they?
|
// or do they?
|
||||||
@ -1363,7 +1369,7 @@ static int open_resource_fork(const char *path, word16 *access, word16 *error) {
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
#elif defined _WIN32
|
#elif defined(_WIN32) || defined(WIN_SDL) || defined(__linux__)
|
||||||
static int open_resource_fork(const char *path, word16 *access, word16 *error) {
|
static int open_resource_fork(const char *path, word16 *access, word16 *error) {
|
||||||
char *rpath = append_string(path, ":" XATTR_RESOURCEFORK_NAME);
|
char *rpath = append_string(path, ":" XATTR_RESOURCEFORK_NAME);
|
||||||
|
|
||||||
@ -1839,7 +1845,7 @@ static word32 fst_get_eof(int class) {
|
|||||||
|
|
||||||
if (S_ISREG(e->st_mode)) {
|
if (S_ISREG(e->st_mode)) {
|
||||||
|
|
||||||
#if _WIN32
|
#if _WIN32_old
|
||||||
eof = filelength(fd);
|
eof = filelength(fd);
|
||||||
if (eof == -1) return map_errno();
|
if (eof == -1) return map_errno();
|
||||||
#else
|
#else
|
||||||
|
2564
src/icongs.h
@ -24,6 +24,7 @@
|
|||||||
// @todo: mouse clip bugs.. great western shootout. Paint 8/16. still in win32
|
// @todo: mouse clip bugs.. great western shootout. Paint 8/16. still in win32
|
||||||
#include "SDL.h"
|
#include "SDL.h"
|
||||||
#include "SDL_image.h"
|
#include "SDL_image.h"
|
||||||
|
#include "glog.h"
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
@ -264,7 +265,7 @@ dev_video_init()
|
|||||||
void do_icon() {
|
void do_icon() {
|
||||||
#ifdef HAVE_ICON
|
#ifdef HAVE_ICON
|
||||||
//surface = SDL_CreateRGBSurfaceFrom(pixels,w,h,depth,pitch,rmask,gmask,bmask,amask);
|
//surface = SDL_CreateRGBSurfaceFrom(pixels,w,h,depth,pitch,rmask,gmask,bmask,amask);
|
||||||
int size = 128; // icon size
|
int size = 256; // icon size
|
||||||
SDL_Surface *surface; // declare an SDL_Surface to be filled in with pixel data from an image file
|
SDL_Surface *surface; // declare an SDL_Surface to be filled in with pixel data from an image file
|
||||||
surface = SDL_CreateRGBSurfaceFrom(icon_pixels,size,size,32,size*4,0xff000000,0x00ff0000,0x0000ff00,0x000000ff);
|
surface = SDL_CreateRGBSurfaceFrom(icon_pixels,size,size,32,size*4,0xff000000,0x00ff0000,0x0000ff00,0x000000ff);
|
||||||
|
|
||||||
|
@ -1356,7 +1356,16 @@ setup_gsplus_file(char *outname, int maxlen, int ok_if_missing,
|
|||||||
fatal_printf(" %s\n", *path_ptr++);
|
fatal_printf(" %s\n", *path_ptr++);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
gloghead(); fatal_printf("Could not find required file \"%s\"", *name_ptr);
|
gloghead(); printf("Could not find required file \"%s\" !!!\n", *name_ptr);
|
||||||
|
if (strcmp(*name_ptr, "ROM")) {
|
||||||
|
glog(" IIgs will likely hang now!");
|
||||||
|
glog(" Get an Apple IIgs firmware ROM image from somewhere like:");
|
||||||
|
glog(" ftp://ftp.apple.asimov.net/pub/apple_II/emulators/rom_images/");
|
||||||
|
glog(" ... and rename the file to \"ROM\" and restart");
|
||||||
|
glog(" ... or hit <F4> and browse for a valid ROM image.");
|
||||||
|
}
|
||||||
|
// if (strcmp(*name_ptr, "config.txt")) {
|
||||||
|
//}
|
||||||
|
|
||||||
if(can_create_file) {
|
if(can_create_file) {
|
||||||
// If we didn't find a file, pick a place to put it.
|
// If we didn't find a file, pick a place to put it.
|
||||||
|
@ -79,7 +79,7 @@ CAPTION "About"
|
|||||||
FONT 8, "MS Sans Serif"
|
FONT 8, "MS Sans Serif"
|
||||||
BEGIN
|
BEGIN
|
||||||
DEFPUSHBUTTON "OK",IDOK,78,61,50,14
|
DEFPUSHBUTTON "OK",IDOK,78,61,50,14
|
||||||
LTEXT "GSport: GS Emulator.\nBased on KEGS by Kent Dickey\nWindows Port by Chea Chee Keong\n\nThis software is licensed under GNU GPL.",
|
LTEXT "GSplus: GS Emulator.\nBased on KEGS by Kent Dickey and GSport\nWindows Port by Chea Chee Keong\n\nThis software is licensed under GNU GPL.",
|
||||||
IDC_STATIC,38,7,162,45,NOT WS_GROUP
|
IDC_STATIC,38,7,162,45,NOT WS_GROUP
|
||||||
ICON "GSPORT32_ICON",IDC_STATIC,7,7,21,20,0
|
ICON "GSPORT32_ICON",IDC_STATIC,7,7,21,20,0
|
||||||
END
|
END
|
||||||
@ -148,14 +148,14 @@ CAPTION "Help About Key Commands"
|
|||||||
FONT 8, "MS Sans Serif"
|
FONT 8, "MS Sans Serif"
|
||||||
BEGIN
|
BEGIN
|
||||||
DEFPUSHBUTTON "OK",IDOK,65,151,50,14
|
DEFPUSHBUTTON "OK",IDOK,65,151,50,14
|
||||||
LTEXT "GSport Key Commands",IDC_STATIC,7,7,82,10
|
LTEXT "GSplus Key Commands",IDC_STATIC,7,7,82,10
|
||||||
LTEXT "Alt/F1\t\tOpen-Apple\nF2\t\tClose-Apple\nF7\t\tToggle Fast Disk Emulation\nF8\t\tToggle Mouse Pointer\n\t\tDisplay\n",
|
LTEXT "Alt/F1\t\tOpen-Apple\nF2\t\tClose-Apple\nF7\t\tToggle Fast Disk Emulation\nF8\t\tToggle Mouse Pointer\n\t\tDisplay\n",
|
||||||
IDC_STATIC,21,25,151,42
|
IDC_STATIC,21,25,151,42
|
||||||
LTEXT "F11\t\tToggle Fullscreen Display\nF12\t\tReset\nCtrl-Alt-Break\tReboot Emulator\nCtrl-Alt-Esc\tControl-Panel\nCtrl-Break\tReset Emulator",
|
LTEXT "F11\t\tToggle Fullscreen Display\nF12\t\tReset\nCtrl-Alt-Break\tReboot Emulator\nCtrl-Alt-Esc\tControl-Panel\nCtrl-Break\tReset Emulator",
|
||||||
IDC_STATIC,21,66,141,50
|
IDC_STATIC,21,66,141,50
|
||||||
CONTROL "",IDC_STATIC,"Static",SS_BLACKFRAME | WS_DISABLED |
|
CONTROL "",IDC_STATIC,"Static",SS_BLACKFRAME | WS_DISABLED |
|
||||||
WS_BORDER,7,17,172,1
|
WS_BORDER,7,17,172,1
|
||||||
LTEXT "Please visit http://gsport.sourceforge.net",
|
LTEXT "Please visit http://apple2.gs/plus",
|
||||||
IDC_STATIC,21,124,144,19
|
IDC_STATIC,21,124,144,19
|
||||||
END
|
END
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ void get_cwd(LPTSTR buffer, int size)
|
|||||||
hSelf = GetModuleHandle(NULL);
|
hSelf = GetModuleHandle(NULL);
|
||||||
GetModuleFileName(hSelf,buffer,size);
|
GetModuleFileName(hSelf,buffer,size);
|
||||||
PathRemoveFileSpec(buffer);
|
PathRemoveFileSpec(buffer);
|
||||||
printf("Local directory: [%s]\n",buffer);
|
//printf("Local directory: [%s]\n",buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -161,7 +161,7 @@ main(int argc, char **argv)
|
|||||||
// Create the window.
|
// Create the window.
|
||||||
get_default_window_size(&size);
|
get_default_window_size(&size);
|
||||||
|
|
||||||
HWND hwnd = CreateWindowEx(WS_EX_ACCEPTFILES, "gsport", "GSport - Apple //gs Emulator",
|
HWND hwnd = CreateWindowEx(WS_EX_ACCEPTFILES, "gsport", "GSplus - Apple //gs Emulator",
|
||||||
WS_TILED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
|
WS_TILED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
|
||||||
CW_USEDEFAULT, CW_USEDEFAULT,
|
CW_USEDEFAULT, CW_USEDEFAULT,
|
||||||
size.cx, size.cy,
|
size.cx, size.cy,
|
||||||
|