mirror of
https://github.com/ksherlock/TwoTerm.git
synced 2024-09-27 08:54:24 +00:00
add 40-column Apple console.
This commit is contained in:
parent
0bc20c6fa8
commit
bcf03e124b
@ -12,12 +12,19 @@
|
|||||||
#include "iGeometry.h"
|
#include "iGeometry.h"
|
||||||
#include "Screen.h"
|
#include "Screen.h"
|
||||||
|
|
||||||
@interface Apple80 : NSObject <Emulator> {
|
@interface AppleX : NSObject <Emulator> {
|
||||||
|
|
||||||
unsigned cs;
|
unsigned cs;
|
||||||
|
unsigned _columns;
|
||||||
int _scratch[4];
|
int _scratch[4];
|
||||||
|
|
||||||
context _context;
|
context _context;
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@interface Apple40 : AppleX
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface Apple80 : AppleX
|
||||||
|
@end
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include "Screen.h"
|
#include "Screen.h"
|
||||||
#include "algorithm.h"
|
#include "algorithm.h"
|
||||||
|
|
||||||
|
#import "CharacterGenerator.h"
|
||||||
|
|
||||||
%%{
|
%%{
|
||||||
machine console;
|
machine console;
|
||||||
@ -30,7 +31,7 @@
|
|||||||
|
|
||||||
action advance {
|
action advance {
|
||||||
// advance cursor
|
// advance cursor
|
||||||
if (++cursor.x == 80) {
|
if (++cursor.x == _columns) {
|
||||||
cursor.x = 0;
|
cursor.x = 0;
|
||||||
if (cursor.y >= 24-1) {
|
if (cursor.y >= 24-1) {
|
||||||
screen->scrollUp();
|
screen->scrollUp();
|
||||||
@ -74,7 +75,7 @@
|
|||||||
|
|
||||||
if (cursor.x) cursor.x--;
|
if (cursor.x) cursor.x--;
|
||||||
else {
|
else {
|
||||||
cursor.x = 80-1;
|
cursor.x = _columns-1;
|
||||||
// go up, possibly scrolling.
|
// go up, possibly scrolling.
|
||||||
if (cursor.y) cursor.y--;
|
if (cursor.y) cursor.y--;
|
||||||
}
|
}
|
||||||
@ -101,11 +102,11 @@
|
|||||||
|
|
||||||
iRect tmp;
|
iRect tmp;
|
||||||
tmp.origin = cursor;
|
tmp.origin = cursor;
|
||||||
tmp.size = iSize(80 - cursor.x, 1);
|
tmp.size = iSize(_columns - cursor.x, 1);
|
||||||
|
|
||||||
screen->eraseRect(tmp);
|
screen->eraseRect(tmp);
|
||||||
|
|
||||||
tmp = iRect(0, 0, 80, 24);
|
tmp = iRect(0, 0, _columns, 24);
|
||||||
tmp.origin.y = cursor.y+1;
|
tmp.origin.y = cursor.y+1;
|
||||||
tmp.size.height -= cursor.y+1;
|
tmp.size.height -= cursor.y+1;
|
||||||
screen->eraseRect(tmp);
|
screen->eraseRect(tmp);
|
||||||
@ -172,7 +173,7 @@
|
|||||||
/* clear line */
|
/* clear line */
|
||||||
iRect tmp;
|
iRect tmp;
|
||||||
tmp.origin = iPoint(0, cursor.y);
|
tmp.origin = iPoint(0, cursor.y);
|
||||||
tmp.size = iSize(80, 1);
|
tmp.size = iSize(_columns, 1);
|
||||||
screen->eraseRect(tmp);
|
screen->eraseRect(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -187,7 +188,7 @@
|
|||||||
/* Moves cursor right one column; if at end of line, does Control-M */
|
/* Moves cursor right one column; if at end of line, does Control-M */
|
||||||
// n.b. - BASIC ^M also moves to next line.
|
// n.b. - BASIC ^M also moves to next line.
|
||||||
cursor.x++;
|
cursor.x++;
|
||||||
if (cursor.x == 80) cursor.x = 0;
|
if (cursor.x == _columns) cursor.x = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
| 0x1d ${
|
| 0x1d ${
|
||||||
@ -195,7 +196,7 @@
|
|||||||
/* clear to end of line */
|
/* clear to end of line */
|
||||||
iRect tmp;
|
iRect tmp;
|
||||||
tmp.origin = cursor;
|
tmp.origin = cursor;
|
||||||
tmp.size = iSize(80 - cursor.x, 1);
|
tmp.size = iSize(_columns - cursor.x, 1);
|
||||||
|
|
||||||
screen->eraseRect(tmp);
|
screen->eraseRect(tmp);
|
||||||
}
|
}
|
||||||
@ -204,7 +205,7 @@
|
|||||||
// CTRL('^'):
|
// CTRL('^'):
|
||||||
/* goto x y */
|
/* goto x y */
|
||||||
// todo - verify behavior for illegal values.
|
// todo - verify behavior for illegal values.
|
||||||
cursor.x = clamp(_scratch[0], 0, 80 - 1);
|
cursor.x = clamp(_scratch[0], 0, (int)_columns - 1);
|
||||||
cursor.y = clamp(_scratch[1], 0, 24 - 1);
|
cursor.y = clamp(_scratch[1], 0, 24 - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -248,26 +249,21 @@
|
|||||||
write data;
|
write data;
|
||||||
}%%
|
}%%
|
||||||
|
|
||||||
@implementation Apple80
|
@implementation AppleX
|
||||||
|
|
||||||
|
|
||||||
+(void)load
|
- (NSString *)name {
|
||||||
{
|
return @"Apple X";
|
||||||
[EmulatorManager registerClass: self];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
+(NSString *)name
|
|
||||||
{
|
+ (NSString *)name {
|
||||||
return @"Apple 80";
|
return @"Apple X";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
-(NSString *)name
|
|
||||||
{
|
|
||||||
return @"Apple 80";
|
|
||||||
}
|
|
||||||
|
|
||||||
-(const char *)termName
|
- (const char *)termName {
|
||||||
{
|
|
||||||
return "appleIIe";
|
return "appleIIe";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -276,7 +272,7 @@
|
|||||||
{
|
{
|
||||||
|
|
||||||
%%write init;
|
%%write init;
|
||||||
_context.window = iRect(0, 0, 80, 24);
|
_context.window = iRect(0, 0, _columns, 24);
|
||||||
_context.cursor = iPoint(0,0);
|
_context.cursor = iPoint(0,0);
|
||||||
_context.flags = 0;
|
_context.flags = 0;
|
||||||
}
|
}
|
||||||
@ -288,7 +284,7 @@
|
|||||||
|
|
||||||
-(struct winsize)defaultSize
|
-(struct winsize)defaultSize
|
||||||
{
|
{
|
||||||
struct winsize ws = { 24, 80, 0, 0 };
|
struct winsize ws = { 24, (unsigned short)_columns, 0, 0 };
|
||||||
|
|
||||||
return ws;
|
return ws;
|
||||||
}
|
}
|
||||||
@ -393,4 +389,70 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@implementation Apple40
|
||||||
|
|
||||||
|
+(void)load
|
||||||
|
{
|
||||||
|
[EmulatorManager registerClass: self];
|
||||||
|
}
|
||||||
|
|
||||||
|
+(NSString *)name
|
||||||
|
{
|
||||||
|
return @"Apple 40";
|
||||||
|
}
|
||||||
|
|
||||||
|
-(NSString *)name
|
||||||
|
{
|
||||||
|
return @"Apple 40";
|
||||||
|
}
|
||||||
|
|
||||||
|
-(const char *)termName
|
||||||
|
{
|
||||||
|
return "appleIIe";
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void) reset {
|
||||||
|
_columns = 40;
|
||||||
|
[super reset];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(CharacterGenerator *)characterGenerator {
|
||||||
|
return [CharacterGenerator generatorForCharacterSet: CGApple40];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation Apple80
|
||||||
|
|
||||||
|
+(void)load
|
||||||
|
{
|
||||||
|
[EmulatorManager registerClass: self];
|
||||||
|
}
|
||||||
|
|
||||||
|
+(NSString *)name
|
||||||
|
{
|
||||||
|
return @"Apple 80";
|
||||||
|
}
|
||||||
|
|
||||||
|
-(NSString *)name
|
||||||
|
{
|
||||||
|
return @"Apple 80";
|
||||||
|
}
|
||||||
|
|
||||||
|
-(const char *)termName
|
||||||
|
{
|
||||||
|
return "appleIIe";
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void) reset {
|
||||||
|
_columns = 80;
|
||||||
|
[super reset];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user