www.cavefischer.at/Sharp Pocket Computer
// Externes 64kB ROM (Bank1, Bank2, Bank3, Bank4) vom Sharp PC-1403 auslesen
// Je Byte 2x4 bit parallel über EXT1-EXT4 übertragen, Handshake mit Fo3 und IN1
unsigned long RomAdr = 16384; // Beginn ext. ROM
int indexBk = 0;
byte ByteArray[4]; // Speicherbereich für 4 Bytes (Bank 1 - Bank 4)
const int IN_Ext1 = 2; // Pin D2, Ext1 Sharp PC-1403, pin 11 der 11-pol. Buchsenleiste
const int IN_Ext2 = 3; // Pin D3, Ext2 Sharp PC-1403, pin 10 der 11-pol. Buchsenleiste
const int IN_Ext3 = 4; // Pin D4, Ext3 Sharp PC-1403, pin 5 der 11-pol. Buchsenleiste
const int IN_Ext4 = 5; // Pin D5, Ext4 Sharp PC-1403, pin 8 der 11-pol. Buchsenleiste
const int IN_Fo3 = 6; // Pin D6, Fo3 Sharp PC-1403, pin 4 der 11-pol. Buchsenleiste
const int OUT_IN1 = 7; // Pin D7, IN1 Sharp PC-1403, pin 9 der 11-pol. Buchsenleiste
const int InfoLED = 13;
byte DataBit1;
byte DataBit2;
byte DataBit3;
byte DataBit4;
byte DataBit5;
byte DataBit6;
byte DataBit7;
byte DataBit8;
byte Nib1;
byte Nib2;
byte DataByte = 0;
int Vorher;
int Jetzt;
void setup() {
Serial.begin(115200);
pinMode(IN_Fo3, INPUT);
pinMode(IN_Ext1, INPUT);
pinMode(IN_Ext2, INPUT);
pinMode(IN_Ext3, INPUT);
pinMode(IN_Ext4, INPUT);
pinMode(OUT_IN1, OUTPUT);
pinMode(InfoLED, OUTPUT);
Serial.println("Ext. ROM PC-1403 64kB");
Serial.println("Adr. ;Bk1;Bk2;Bk3;Bk4");
Vorher = millis();
}
void loop() {
if (digitalRead(IN_Fo3)) { // Data available
digitalWrite(InfoLED, HIGH);
digitalWrite(OUT_IN1, LOW);
DataBit1 = digitalRead(IN_Ext1);
DataBit2 = digitalRead(IN_Ext2);
DataBit3 = digitalRead(IN_Ext3);
DataBit4 = digitalRead(IN_Ext4);
while (digitalRead(IN_Fo3));
while (!digitalRead(IN_Fo3));
DataBit5 = digitalRead(IN_Ext1);
DataBit6 = digitalRead(IN_Ext2);
DataBit7 = digitalRead(IN_Ext3);
DataBit8 = digitalRead(IN_Ext4);
while (digitalRead(IN_Fo3));
Nib1 = DataBit1 | (DataBit2 << 1) | (DataBit3 << 2) | (DataBit4 << 3);
Nib2 = (DataBit5 << 4) | (DataBit6 << 5) | (DataBit7 << 6) | (DataBit8 << 7);
DataByte = Nib1 | Nib2;
AddByte();
DataByte = 0;
digitalWrite(InfoLED, LOW);
digitalWrite(OUT_IN1, HIGH);
Vorher = millis();
}
Jetzt = millis();
if ((Jetzt - Vorher) > 5) {
RomAdr = 16384;
digitalWrite(OUT_IN1, LOW);
}
} // Ende loop
void AddByte() {
ByteArray[indexBk] = DataByte;
indexBk++;
if (indexBk == 4) {
indexBk = 0;
SerialPrintBytes();
RomAdr++;
}
}
void SerialPrintBytes() {
Serial.print(RomAdr);
Serial.print(';');
for (int y=0; y<4; y++) {
byte d = ByteArray[y];
if (d < 10) Serial.print(char(32));
if (d < 100) Serial.print(char(32));
Serial.print(d);
if (y < 3) Serial.print(';');
}
Serial.println();
}
10:RESTORE
20:FOR X=0 TO 97
30:READ D
40:POKE &F100+X,D
50:NEXT X
60:END
100:"A"
110:CALL &F100
120:BEEP 1
140:END
200:DATA &85,2,&3F,219,&84,2,&FF,219
210:DATA 16,&3C,&00,2,0,82,36,120,&F1,&4B
220:DATA 16,&3C,&00,2,1,82,4,37,120,&F1,&4B
230:DATA 16,&3C,&00,2,10,82,4,37,120,&F1,&4B
240:DATA 16,&3C,&00,2,11,82,4,37,120,&F1,&4B
250:DATA &85,99,&7F,58,7,&84,99,&FF,58,2,55
260:DATA 16,&3C,&00,214,128,57,3,107,8,126,&F1,&08,55
270:DATA 16,&3A,&00,82,18,&5E,97,4,95,206,96,0,95
280:DATA 88,82,97,4,95,206,96,0,95,55
| Assemblerdarstellung des Maschinenprogramms für PC-1403 | |||||||||||
| &F100: | &85 | LP05 | |||||||||
| &F101: | 002 | &3F | LIA | &3F | &3FFF (16383) = Startadresse (-1) des externen ROMs in das X-Reg laden | ||||||
| &F103: | 219 | EXAM | |||||||||
| &F104: | &84 | LP04 | |||||||||
| &F105: | 002 | &FF | LIA | &FF | |||||||
| &F107: | 219 | EXAM | |||||||||
| &F108: | 016 | &3C | &00 | LIDP | &3C00 | < | ┐ | Zur Ansteuerung der ROM Bank 1 | |||
| &F10B: | 002 | 000 | LIA | 0 | │ | 0 in das Bankregister &3C00 laden | |||||
| &F10D: | &82 | STD | │ | ||||||||
| &F10E: | 036 | IXL | │ | ||||||||
| &F10F: | 120 | &F1 | &4B | CALL | &F14B | │ | |||||
| &F112: | 016 | &3C | &00 | LIDP | &3C00 | │ | Zur Ansteuerung der ROM Bank 2 | ||||
| &F115: | 002 | 001 | LIA | 1 | │ | 1 in das Bankregister &3C00 laden | |||||
| &F117: | &82 | STD | │ | ||||||||
| &F118: | 004 | IX | │ | ||||||||
| &F119: | 037 | DXL | │ | ||||||||
| &F11A: | 120 | &F1 | &4B | CALL | &F14B | │ | |||||
| &F11D: | 016 | &3C | &00 | LIDP | &3C00 | │ | Zur Ansteuerung der ROM Bank 3 | ||||
| &F120: | 002 | 010 | LIA | 10 | │ | 10 in das Bankregister &3C00 laden | |||||
| &F122: | &82 | STD | │ | ||||||||
| &F123: | 004 | IX | │ | ||||||||
| &F124: | 037 | DXL | │ | ||||||||
| &F125: | 120 | &F1 | &4B | CALL | &F14B | │ | |||||
| &F128: | 016 | &3C | &00 | LIDP | &3C00 | │ | Zur Ansteuerung der ROM Bank 4 | ||||
| &F12B: | 002 | 011 | LIA | 11 | │ | 11 in das Bankregister &3C00 laden | |||||
| &F12D: | &82 | STD | │ | ||||||||
| &F12E: | 004 | IX | │ | ||||||||
| &F12F: | 037 | DXL | │ | ||||||||
| &F130: | 120 | &F1 | &4B | CALL | &F14B | │ | |||||
| &F133: | &85 | LP05 | │ | ||||||||
| &F134: | 099 | &7F | CPIM | &7F | │ | Das Programm am Ende des ROMs bei &7FFF verlassen | |||||
| &F136: | 058 | 007 | JRCP | 7 | │ | ||||||
| &F138: | &84 | LP04 | │ | ||||||||
| &F139: | 099 | &FF | CPIM | &FF | │ | ||||||
| &F13B: | 058 | 002 | JRCP | 2 | │ | ||||||
| &F13D: | 055 | RTN | │ | ||||||||
| &F13E: | 016 | &3C | &00 | LIDP | &3C00 | │ | Port IN1 abfragen | ||||
| &F141: | 214 | 128 | TSID | 128 | │ | ||||||
| &F143: | 057 | 003 | JRZM | 3 | │ | ||||||
| &F145: | 107 | 008 | TEST | 8 | │ | Abfrage der BRK Taste | |||||
| &F147: | 126 | &F1 | &08 | JPZ | &F108 | ─ | ┘ | ||||
| &F14A: | 055 | RTN | |||||||||
| &F14B: | 016 | &3A | &00 | LIDP | &3A00 | Ausgabe des Datenbytes über Ext1-Ext4 des Portregisters &3A00 | |||||
| &F14E: | 082 | STD | |||||||||
| &F14F: | 018 | &5E | LIP | &5E | |||||||
| &F151: | 097 | 004 | ORIM | 4 | |||||||
| &F153: | 095 | OUTF | |||||||||
| &F154: | 206 | NOPT | |||||||||
| &F155: | 096 | 000 | ANIM | 0 | |||||||
| &F157: | 095 | OUTF | |||||||||
| &F158: | 088 | SWP | |||||||||
| &F159: | 082 | STD | |||||||||
| &F15A: | 097 | 004 | ORIM | 4 | |||||||
| &F15C: | 095 | OUTF | |||||||||
| &F15D: | 206 | NOPT | |||||||||
| &F15E: | 096 | 000 | ANIM | 0 | |||||||
| &F160: | 095 | OUTF | |||||||||
| &F161: | 055 | RTN | |||||||||
| Arduino UNO Pin | Name | Sharp PC 11-pol. Schnittstelle |
| GND | GND | Pin 3 |
| D7 | Port IN 1 | Pin 9 |
| D6 (mit pull-down Widerstand auf GND) | Port Fo 3 | Pin 4 |
| D5 (mit pull-down Widerstand auf GND) | Port Ext 4 | Pin 8 |
| D4 (mit pull-down Widerstand auf GND) | Port Ext 3 | Pin 5 |
| D3 (mit pull-down Widerstand auf GND) | Port Ext 2 | Pin 10 |
| D2 (mit pull-down Widerstand auf GND) | Port Ext 1 | Pin 11 |