summaryrefslogtreecommitdiffstatshomepage
path: root/trunk/src/emu/cpu/sc61860/readpc.c
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/emu/cpu/sc61860/readpc.c')
-rw-r--r--trunk/src/emu/cpu/sc61860/readpc.c195
1 files changed, 195 insertions, 0 deletions
diff --git a/trunk/src/emu/cpu/sc61860/readpc.c b/trunk/src/emu/cpu/sc61860/readpc.c
new file mode 100644
index 00000000000..79900746c3f
--- /dev/null
+++ b/trunk/src/emu/cpu/sc61860/readpc.c
@@ -0,0 +1,195 @@
+#if 0
+#include <sys/time.h>
+#include <sys/stat.h>
+#include <sys/io.h>
+#include <fcntl.h>
+#include <unistd.h>
+#endif
+#include <stdio.h>
+#include <dos.h>
+
+// gcc -O
+// important because of inb, outb
+
+/*
+ dumps data sent form sharp pc1401 into file
+ at sharp the following program must be started after
+ this dos program was started
+ simple dos utility
+ first arg (filename of file to be written) must be specified
+
+ ct eprop needed
+ changing to parallel port should be easy
+
+nearly all sharp pocket pc's system roms should be readable
+this way.
+
+for some early pocket pc's it would be necessary to load
+this program into memory.
+(they don't have poke/peek/call instructions,
+so this program can't be typed in)
+
+adapter sharp - cteprommer
+
+1
+2 6v
+3 gnd 8 bit textool gnd pin 20
+4 f0 data--> 8 bit textool data 0 pin 17
+5 f1 handshake --> 8 bit textool data 1 pin 18
+6 save
+7 load
+8 ib7 <--handshake 8 bit textool address 0 pin 16
+9 ib9
+10
+11
+
+problems with the handshake in at the sharp
+so I didn't use the handshake in the sharp side
+but the pc side must not be interrupted with interrupt
+(pure dos needed?)
+
+*/
+
+
+#define outb(v,adr) outportb(adr,v)
+#define inb(adr) inportb(adr)
+
+#if 0
+ /* this routine dump the memory (start 0)
+ in an endless loop,
+ the pc side must be started before this
+ actual version should be in mess/machine/pocketc.c
+ */
+
+1 restore: for i=16384 to 16455:read a: poke i,a: next i
+10 call 16384
+100 data
+#if 1
+ 18,4,//lip xl
+ 2,0,//lia 0 startaddress low
+ 219,//exam
+ 18,5,//lip xh
+ 2,0,//lia 0 startaddress high
+ 219,//exam
+//400f x:
+ // dump internal rom
+ 18,5,//lip 4
+ 89,//ldm
+ 218,//exab
+ 18,4,//lip 5
+ 89,//ldm
+ 4,//ix for increasing x
+ 0,0,//lii,0
+ 18,20,//lip 20
+ 53, //
+ 18,20,// lip 20
+ 219,//exam
+#else
+ 18,4,//lip xl
+ 2,255,//lia 0
+ 219,//exam
+ 18,5,//lip xh
+ 2,255,//lia 0
+ 219,//exam
+//400f x:
+ // dump external memory
+ 4, //ix
+ 87,// ldd
+#endif
+ 218,//exab
+
+
+
+ 0,4,//lii 4
+
+ //a:
+ 218,// exab
+ 90,// sl
+ 218,// exab
+ 18,94,// lip 94
+ 96,252,// anma 252
+ 2,2, //lia 2
+ 196,// adcm
+ 95,// outf
+ //b:
+ 204,//inb
+ 102,128,//tsia 0x80
+#if 0
+ 41,4,// jnzm b
+#else
+ // input not working reliable!
+ // so handshake removed, PC side must run with disabled
+ // interrupt to not lose data
+ 78,20, //wait 20
+#endif
+
+ 218,// exab
+ 90,// sl
+ 218,// exab
+ 18,94,// lip 94
+ 96,252,//anma 252
+ 2,0,// lia 0
+ 196,//adcm
+ 95,// outf
+ //c:
+ 204,//inb
+ 102,128,//tsia 0x80
+#if 0
+ 57,4,// jzm c
+#else
+ 78,20, //wait 20
+#endif
+
+ 65,//deci
+ 41,34,//jnzm a
+
+ 41,41,//jnzm x:
+
+ 55,// rtn
+// fill up with several 55
+// so you don't have to calculate the exact end in the loop
+#endif
+
+#define PORT_BASE 0x3e0
+
+int main(int argc, char *argv[])
+{
+ unsigned i,v,j,a;
+ char buffer[32768];
+ FILE *out=fopen(argv[1],"wb");
+
+#if 0
+ ioperm(PORT_BASE,8,1);
+ nice(-256);
+#endif
+ asm { cli }
+
+ outb(0x18,PORT_BASE+3); // VCC ON
+ outb(0xc0, PORT_BASE+2);
+ outb(7,PORT_BASE+6); // VPP 12.5, reset off
+
+ outb(0,PORT_BASE);
+ for(j=0;j<0x8000;j++) {
+ for (i=0,v=0;i<4;i++) {
+ for(;((a=inb(PORT_BASE+4))&2)==0; ) ;
+ v=(v<<1)|(a&1);
+ outb(1,PORT_BASE);
+ for(;((a=inb(PORT_BASE+4))&2)!=0; ) ;
+ v=(v<<1)|(a&1);
+ outb(0,PORT_BASE);
+ }
+ buffer[j]=v;
+// printf("%.2x\n",v);
+ }
+ asm { sti }
+ fwrite(buffer,2,0x4000,out);
+ fclose(out);
+
+#if 0
+ outb(8,PORT_BASE+2); // led off
+ outb(0,PORT_BASE+3); //VCC off
+ outb(0,PORT_BASE+6); //VPP off
+#endif
+ return 0;
+}
+