Skip to content

Commit

Permalink
Add Didaktik 80/40 emulation (part of patch #331)
Browse files Browse the repository at this point in the history
Legacy-ID: 5248
  • Loading branch information
szaszg authored and sdbrady committed May 11, 2015
1 parent f248dab commit ddb31ca
Show file tree
Hide file tree
Showing 23 changed files with 733 additions and 13 deletions.
15 changes: 15 additions & 0 deletions fuse.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
#include "peripherals/ay.h"
#include "peripherals/dck.h"
#include "peripherals/disk/beta.h"
#include "peripherals/disk/didaktik.h"
#include "peripherals/disk/fdd.h"
#include "peripherals/fuller.h"
#include "peripherals/ide/divide.h"
Expand Down Expand Up @@ -123,6 +124,7 @@ typedef struct start_files_t {
const char *disk_opus;
const char *disk_plusd;
const char *disk_beta;
const char *disk_didaktik80;
const char *disk_disciple;
const char *dock;
const char *if2;
Expand Down Expand Up @@ -284,6 +286,7 @@ static int fuse_init(int argc, char **argv)
beta_init();
opus_init();
plusd_init();
didaktik80_init();
disciple_init();
fdd_init_events();
if( simpleide_init() ) return 1;
Expand Down Expand Up @@ -490,6 +493,7 @@ setup_start_files( start_files_t *start_files )
start_files->disk_plus3 = settings_current.plus3disk_file;
start_files->disk_opus = settings_current.opusdisk_file;
start_files->disk_plusd = settings_current.plusddisk_file;
start_files->disk_didaktik80 = settings_current.didaktik80disk_file;
start_files->disk_disciple = settings_current.discipledisk_file;
start_files->disk_beta = settings_current.betadisk_file;
start_files->dock = settings_current.dck_file;
Expand Down Expand Up @@ -589,6 +593,9 @@ parse_nonoption_args( int argc, char **argv, int first_arg,
case LIBSPECTRUM_CLASS_DISK_OPUS:
start_files->disk_opus = filename; break;

case LIBSPECTRUM_CLASS_DISK_DIDAKTIK:
start_files->disk_didaktik80 = filename; break;

case LIBSPECTRUM_CLASS_DISK_PLUSD:
if( periph_is_active( PERIPH_TYPE_DISCIPLE ) )
start_files->disk_disciple = filename;
Expand All @@ -613,6 +620,8 @@ parse_nonoption_args( int argc, char **argv, int first_arg,
start_files->disk_beta = filename;
else if( periph_is_active( PERIPH_TYPE_PLUSD ) )
start_files->disk_plusd = filename;
else if( periph_is_active( PERIPH_TYPE_DIDAKTIK80 ) )
start_files->disk_didaktik80 = filename;
else if( periph_is_active( PERIPH_TYPE_DISCIPLE ) )
start_files->disk_disciple = filename;
else if( periph_is_active( PERIPH_TYPE_OPUS ) )
Expand Down Expand Up @@ -724,6 +733,11 @@ do_start_files( start_files_t *start_files )
if( error ) return error;
}

if( start_files->disk_didaktik80 ) {
error = utils_open_file( start_files->disk_didaktik80, autoload, NULL );
if( error ) return error;
}

if( start_files->disk_disciple ) {
error = utils_open_file( start_files->disk_disciple, autoload, NULL );
if( error ) return error;
Expand Down Expand Up @@ -853,6 +867,7 @@ static int fuse_end(void)
beta_end();
opus_end();
plusd_end();
didaktik80_end();
disciple_end();
spectranet_end();
speccyboot_end();
Expand Down
5 changes: 5 additions & 0 deletions hacking/ChangeLog
Original file line number Diff line number Diff line change
Expand Up @@ -4810,3 +4810,8 @@
to name clash on Solaris (thanks, Brian Ruthven) (Fred).
20150510 Makefile.am,m4/pkg.m4: update pkg.m4 and add explicit distribution rule
for ax_pthread.m4 (Sergio).
20150511 fuse.c,hacking/ChangeLog,machines/machines_periph.c,menu.[ch],
menu_data.dat,periph.h,peripherals/disk/{Makefile.am,didaktik.[ch],
disk.[ch],wd_fdc.c},settings.{dat,pl},ui.c,ui/{options.dat,ui.h,
uimedia.h},utils.c,z80/{coretest.c,z80_checks.h,z80_ops.c}: add
Didaktik 80/40 emulation (part of patch #331) (Gergely Szasz).
1 change: 1 addition & 0 deletions machines/machines_periph.c
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,7 @@ machines_periph_48( void )
base_peripherals_48_128();
periph_set_present( PERIPH_TYPE_FULLER, PERIPH_PRESENT_OPTIONAL );
periph_set_present( PERIPH_TYPE_ZXPRINTER, PERIPH_PRESENT_OPTIONAL );
periph_set_present( PERIPH_TYPE_DIDAKTIK80, PERIPH_PRESENT_OPTIONAL );
periph_set_present( PERIPH_TYPE_DISCIPLE, PERIPH_PRESENT_OPTIONAL );
}

Expand Down
33 changes: 29 additions & 4 deletions menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
#include "machines/specplus3.h"
#include "peripherals/dck.h"
#include "peripherals/disk/beta.h"
#include "peripherals/disk/didaktik.h"
#include "peripherals/disk/disciple.h"
#include "peripherals/disk/opus.h"
#include "peripherals/disk/plusd.h"
Expand Down Expand Up @@ -265,10 +266,11 @@ MENU_CALLBACK_WITH_ACTION( menu_options_selectroms_peripheral_select )
case 1: menu_select_peripheral_roms( "Interface 1", 0, 1 ); return;
case 2: menu_select_peripheral_roms( "Beta 128", 1, 1 ); return;
case 3: menu_select_peripheral_roms( "+D", 2, 1 ); return;
case 4: menu_select_peripheral_roms( "DISCiPLE", 3, 1 ); return;
case 5: menu_select_peripheral_roms( "Opus Discovery", 4, 1 ); return;
case 6: menu_select_peripheral_roms( "SpeccyBoot", 5, 1 ); return;
case 7: menu_select_peripheral_roms( "uSource", 6, 1 ); return;
case 4: menu_select_peripheral_roms( "Didaktik 80", 3, 1 ); return;
case 5: menu_select_peripheral_roms( "DISCiPLE", 4, 1 ); return;
case 6: menu_select_peripheral_roms( "Opus Discovery", 5, 1 ); return;
case 7: menu_select_peripheral_roms( "SpeccyBoot", 6, 1 ); return;
case 8: menu_select_peripheral_roms( "uSource", 7, 1 ); return;

}

Expand Down Expand Up @@ -1093,6 +1095,22 @@ menu_plusd2_detail( void )
return menu_disk_detail( f );
}

const char*
menu_didaktik_a_detail( void )
{
fdd_t *f = didaktik80_get_fdd( DIDAKTIK80_DRIVE_A );

return menu_disk_detail( f );
}

const char*
menu_didaktik_b_detail( void )
{
fdd_t *f = didaktik80_get_fdd( DIDAKTIK80_DRIVE_B );

return menu_disk_detail( f );
}

const char*
menu_disciple1_detail( void )
{
Expand All @@ -1108,3 +1126,10 @@ menu_disciple2_detail( void )

return menu_disk_detail( f );
}

MENU_CALLBACK( menu_machine_didaktiksnap )
{
ui_widget_finish();
didaktik80_snap = 1;
event_add( 0, z80_nmi_event );
}
3 changes: 3 additions & 0 deletions menu.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ MENU_CALLBACK( menu_options_save );
MENU_CALLBACK( menu_machine_profiler_start );
MENU_CALLBACK( menu_machine_profiler_stop );
MENU_CALLBACK( menu_machine_nmi );
MENU_CALLBACK( menu_machine_didaktiksnap );

MENU_CALLBACK( menu_media_tape_browse );
MENU_CALLBACK( menu_media_tape_open );
Expand Down Expand Up @@ -151,6 +152,8 @@ MENU_DETAIL( menu_opus1_detail );
MENU_DETAIL( menu_opus2_detail );
MENU_DETAIL( menu_plusd1_detail );
MENU_DETAIL( menu_plusd2_detail );
MENU_DETAIL( menu_didaktik_a_detail );
MENU_DETAIL( menu_didaktik_b_detail );
MENU_DETAIL( menu_disciple1_detail );
MENU_DETAIL( menu_disciple2_detail );
MENU_CALLBACK_WITH_ACTION( menu_options_joysticks_select );
Expand Down
36 changes: 32 additions & 4 deletions menu_data.dat
Original file line number Diff line number Diff line change
Expand Up @@ -108,10 +108,11 @@ Options/Select ROMs/_Peripheral ROMs, Branch
Options/Select ROMs/Peripheral ROMs/_Interface 1..., Item,, menu_options_selectroms_peripheral_select,, 1
Options/Select ROMs/Peripheral ROMs/_Beta 128..., Item,, menu_options_selectroms_peripheral_select,, 2
Options/Select ROMs/Peripheral ROMs/+_D..., Item,, menu_options_selectroms_peripheral_select,, 3
Options/Select ROMs/Peripheral ROMs/DISCiP_LE..., Item,, menu_options_selectroms_peripheral_select,, 4
Options/Select ROMs/Peripheral ROMs/_Opus Discovery..., Item,, menu_options_selectroms_peripheral_select,, 5
Options/Select ROMs/Peripheral ROMs/Specc_yBoot..., Item,, menu_options_selectroms_peripheral_select,, 6
Options/Select ROMs/Peripheral ROMs/_uSource..., Item,, menu_options_selectroms_peripheral_select,, 7
Options/Select ROMs/Peripheral ROMs/Didaktik _80..., Item,, menu_options_selectroms_peripheral_select,, 4
Options/Select ROMs/Peripheral ROMs/DISCiP_LE..., Item,, menu_options_selectroms_peripheral_select,, 5
Options/Select ROMs/Peripheral ROMs/_Opus Discovery..., Item,, menu_options_selectroms_peripheral_select,, 6
Options/Select ROMs/Peripheral ROMs/Specc_yBoot..., Item,, menu_options_selectroms_peripheral_select,, 7
Options/Select ROMs/Peripheral ROMs/_uSource..., Item,, menu_options_selectroms_peripheral_select,, 8

Options/_Filter..., Item,,, menu_filter_detail

Expand Down Expand Up @@ -143,6 +144,7 @@ Machine/Profiler/_Start, Item
Machine/Profiler/_Stop, Item

Machine/_NMI, Item
Machine/Didaktik SNA_P, Item

M_edia, Branch

Expand Down Expand Up @@ -406,6 +408,32 @@ Media/Disk/Opus/Drive 2/Write _protect, Branch
Media/Disk/Opus/Drive 2/Write protect/_Enable, Item,, menu_media_writeprotect,, 0x142
Media/Disk/Opus/Drive 2/Write protect/_Disable, Item,, menu_media_writeprotect,, 0x042

Media/Disk/_Didaktik 80, Branch
Media/Disk/Didaktik 80/Drive _A, Branch,,,menu_didaktik_a_detail
Media/Disk/Didaktik 80/Drive A/Insert _New, Item,, menu_media_insert_new,, 0x61
Media/Disk/Didaktik 80/Drive A/_Insert..., Item,, menu_media_insert,, 0x61
Media/Disk/Didaktik 80/Drive A/_Eject, Item,, menu_media_eject,, 0x61
Media/Disk/Didaktik 80/Drive A/_Save, Item,, menu_media_save,, 0x061
Media/Disk/Didaktik 80/Drive A/Save _As..., Item,, menu_media_save,, 0x161
Media/Disk/Didaktik 80/Drive A/_Flip disk, Branch
Media/Disk/Didaktik 80/Drive A/Flip disk/Turn _upside down, Item,, menu_media_flip,, 0x161
Media/Disk/Didaktik 80/Drive A/Flip disk/Turn _back, Item,, menu_media_flip,, 0x061
Media/Disk/Didaktik 80/Drive A/Write _protect, Branch
Media/Disk/Didaktik 80/Drive A/Write protect/_Enable, Item,, menu_media_writeprotect,, 0x161
Media/Disk/Didaktik 80/Drive A/Write protect/_Disable, Item,, menu_media_writeprotect,, 0x061
Media/Disk/Didaktik 80/Drive _B, Branch,,,menu_didaktik_b_detail
Media/Disk/Didaktik 80/Drive B/Insert _New, Item,, menu_media_insert_new,, 0x62
Media/Disk/Didaktik 80/Drive B/_Insert..., Item,, menu_media_insert,, 0x62
Media/Disk/Didaktik 80/Drive B/_Eject, Item,, menu_media_eject,, 0x62
Media/Disk/Didaktik 80/Drive B/_Save, Item,, menu_media_save,, 0x062
Media/Disk/Didaktik 80/Drive B/Save _As..., Item,, menu_media_save,, 0x162
Media/Disk/Didaktik 80/Drive B/_Flip disk, Branch
Media/Disk/Didaktik 80/Drive B/Flip disk/Turn _upside down, Item,, menu_media_flip,, 0x162
Media/Disk/Didaktik 80/Drive B/Flip disk/Turn _back, Item,, menu_media_flip,, 0x062
Media/Disk/Didaktik 80/Drive B/Write _protect, Branch
Media/Disk/Didaktik 80/Drive B/Write protect/_Enable, Item,, menu_media_writeprotect,, 0x162
Media/Disk/Didaktik 80/Drive B/Write protect/_Disable, Item,, menu_media_writeprotect,, 0x062

Media/_Cartridge, Branch
Media/Cartridge/_Timex Dock, Branch
Media/Cartridge/Timex Dock/_Insert..., Item
Expand Down
1 change: 1 addition & 0 deletions periph.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ typedef enum periph_type {
PERIPH_TYPE_BETA128_PENTAGON_LATE, /* Beta128 disk interface as found on later Pentagons */
PERIPH_TYPE_DIVIDE, /* DivIDE interface */
PERIPH_TYPE_PLUSD, /* +D disk interface */
PERIPH_TYPE_DIDAKTIK80, /* Didaktik 40/80 disk interface */
PERIPH_TYPE_DISCIPLE, /* DISCiPLE disk interface */
PERIPH_TYPE_FULLER, /* Fuller box */
PERIPH_TYPE_INTERFACE1, /* Interface 1 */
Expand Down
2 changes: 2 additions & 0 deletions peripherals/disk/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ AM_CPPFLAGS += @LIBSPEC_CFLAGS@ @GTK_CFLAGS@ @GLIB_CFLAGS@

libdisk_a_SOURCES = beta.c \
crc.c \
didaktik.c \
disciple.c \
disk.c \
fdd.c \
Expand All @@ -41,6 +42,7 @@ libdisk_a_SOURCES = beta.c \

noinst_HEADERS = beta.h \
crc.h \
didaktik.h \
disciple.h \
disk.h \
fdd.h \
Expand Down
Loading

0 comments on commit ddb31ca

Please sign in to comment.