mirror of
https://github.com/DerekK19/PDP-8-E-Simulator.git
synced 2024-05-31 15:41:30 +00:00
94 lines
4.3 KiB
C
94 lines
4.3 KiB
C
|
/*
|
||
|
* PDP-8/E Simulator
|
||
|
*
|
||
|
* Copyright © 1994-2015 Bernhard Baehr
|
||
|
*
|
||
|
* PluginAPI.h - Plugin API Definitions for PDP-8/E I/O Device Plugins
|
||
|
*
|
||
|
* This file is part of PDP-8/E Simulator.
|
||
|
*
|
||
|
* PDP-8/E Simulator is free software: you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License as published by
|
||
|
* the Free Software Foundation, either version 3 of the License, or
|
||
|
* (at your option) any later version.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
*/
|
||
|
|
||
|
|
||
|
#define PLUGIN_API_VERSION_0 0
|
||
|
#define CURRENT_PLUGIN_API_VERSION PLUGIN_API_VERSION_0 // see apiVersion method, below
|
||
|
#define API_VERSION - (unsigned) apiVersion { \
|
||
|
LOG_ASSERTING (); \
|
||
|
return CURRENT_PLUGIN_API_VERSION; \
|
||
|
}
|
||
|
|
||
|
|
||
|
#define DEFAULT_IO_INFO_FILENAME @"io-info" // see iotInformationPlistName method
|
||
|
// keys in this property list:
|
||
|
#define IO_INFO_IOFLAGS_KEY @"ioflags" // an array of I/O flag names in the plist
|
||
|
#define IO_INFO_IOADDRESSES_KEY @"ioaddresses" // an array of I/O addresses in the plist
|
||
|
#define IO_INFO_IOTS_KEY @"iots" // an array of IOT mnemonics in the plist
|
||
|
|
||
|
|
||
|
/* Notification that is posted after all plugins are loaded. Plugins are loaded on the
|
||
|
NSApplicationWillFinishLaunchingNotification, then on the NSApplicationDidFinishLaunchingNotification,
|
||
|
the PLUGINS_LOADED_NOTIFICATION is posted. Use this notification e. g. to make plugin windows visible
|
||
|
to avoid screen flicker. */
|
||
|
#define PLUGINS_LOADED_NOTIFICATION @"PluginsLoadedNotification"
|
||
|
|
||
|
|
||
|
@class PDP8;
|
||
|
|
||
|
|
||
|
@interface PDP8Plugin : NSObject
|
||
|
{
|
||
|
@private
|
||
|
NSBundle *bundle;
|
||
|
@protected
|
||
|
PDP8 *pdp8;
|
||
|
}
|
||
|
|
||
|
- (void) setPDP8:(PDP8 *)p8; // gives the plugin a pointer to the global PDP-8 object
|
||
|
- (unsigned) apiVersion; // get the API compiletime version, you must define this
|
||
|
// method in your implementation with the API_VERSION macro, above
|
||
|
- (NSBundle *) bundle; // returns the plugin bundle private variable
|
||
|
- (void) setBundle:(NSBundle *)bndl; // sets the plugin bundle private variable
|
||
|
- (NSString *) pluginName; // returns the plugin name, i. e. file system name of the bundle
|
||
|
- (void *) pluginPointer; // returns a pointer of the plugin instance that can be accessed
|
||
|
// by the IOT functions via the PLUGIN_POINTER macro from pdp8.h
|
||
|
// useful for multiinstance plugins to access the correct instance
|
||
|
- (NSString *) ioInformationPlistName; // returns the name (in the localizable resources directory)
|
||
|
// for the property list that contains the I/O flag and IOT info
|
||
|
- (NSDictionary *) ioInformation; // returns a dictionary with information about I/O flags and IOTs
|
||
|
- (NSArray *) iotsForAddress:(int)ioAddress;
|
||
|
// get 8 IOTs for an I/O address (nil for unused)
|
||
|
- (NSArray *) skiptestsForAddress:(int)ioAddress;
|
||
|
// get 8 skiptests for an I/O address (nil for unused)
|
||
|
// called after the iotsForAddress method
|
||
|
- (void) setIOFlag:(unsigned long)flag forIOFlagName:(NSString *)name;
|
||
|
// called for each I/O flag name from the property list in that order
|
||
|
- (void) loadNibs; // called after it is known that the I/O device fits into the PDP-8,
|
||
|
// called after the methods above, so they must not access resources
|
||
|
// from nibs
|
||
|
- (void) pluginDidLoad; // called after the plugin has loaded and the PDP-8, the IOTs and
|
||
|
// I/O flags have been setup and the nibs are loaded
|
||
|
- (void) CAF:(int)ioAddress; // called when the CPU performs the CAF instruction; must not update
|
||
|
// the GUI e. g. by sending notifications; is called from non-main
|
||
|
// thread) (note: for devices without I/O adresses, it is not called)
|
||
|
- (void) clearAllFlags:(int)ioAddress; // called when the user operates the Clear key of the KC8-EA console
|
||
|
// (or the equivalent menu item); is called from main thread and must
|
||
|
// update the GUI e. g. by sending notifications
|
||
|
// (note: for devices without I/O addresses, it is not called, but
|
||
|
// you can listen for the CLEAR_ALL_FLAGS_NOTIFICAITON)
|
||
|
- (void) resetDevice; // called when the user resets the simulator (might be nearly
|
||
|
// the same as clearAllFlags:)
|
||
|
|
||
|
@end
|