Mein erster Sharp PC3000 Reader

Ich habe immer gerne gelesen. Ab dem Kindergarten. Dann habe ich in der Schule fast die gesamte Bibliothek noch einmal gelesen. Als ich in den neunziger Jahren zur Arbeit ging, kaufte ich ein paar Bücher auf den Märkten. Die Zeit war hart. Viele gingen nach Deutschland, um dort dauerhaft zu wohnen. Mein Freund ist auch gegangen. Dann, einige Jahre später, Ende der neunziger Jahre, schickte er ein Paket, in dem sich neben beispiellosen Süßigkeiten aus Übersee drei Sharp PC3000-Computer befanden.

Einfach so:



Infolgedessen wurden 2 von ihnen auf den Markt gebracht, und der dritte wurde für Ersatzteile übrig gelassen. Tatsächlich war es ein normaler IBM PC XT auf einem 8088-Prozessor mit 1 MB Speicher, einem Grafikdisplay mit 4 Helligkeitsstufen, COM, LPT, Dock-Ports und zwei PCMCIA-Steckplätzen, in denen ich eine 512-KB-Speicherkarte mit einem CR2032-Akku fand.



Meine Freude kannte keine Grenzen!

Aber nachdem er gesessen und dieses kleine Ding in seinen Händen gedreht hatte, war nicht klar, warum es verwendet werden konnte. In diesem Palmtop wurden Anwendungen hauptsächlich für Unternehmen vorinstalliert - ein Kalender, ein Notizbuch, ein Dateimanager. Die Com- und LPT-Anschlüsse waren proprietär. Miniatur, ähnlich wie ihre vollständigen Gegenstücke, jedoch ohne Stifte und Messer wie PCI oder PCIe. Das damals auf Gutscheinen ausgestellte Internet steckte noch in den Kinderschuhen, so dass eine Verbindung nur nachts und nicht lange möglich war, da die Verbindung ständig getrennt wurde. Als Ergebnis wurde eine Pinbelegung der Anschlüsse gefunden, Messeradapter wurden geätzt und ein Nullmodemkabel für die Kommunikation mit dem großen Bruder hergestellt. Am Ende war es jedoch unmöglich, eine Verbindung mit dem integrierten Dienstprogramm herzustellen. Die LapLink-Anwendung, die ich im Internet gefunden habe und die nicht aus dem Palmtop herauskommen konnte, war nicht dieselbe Version. Die Suche wurde fortgesetzt und als Ergebnis fand ich ein Distributionskit mit Dienstprogrammen.

Es scheint, dass das Problem gelöst ist. Laden Sie das Programm herunter und verwenden Sie es zu Ihrem Vergnügen. Ich habe eine Woche gelitten. Ich habe alle Arten von Programmen durchlaufen, hauptsächlich Spielzeug. Aufgrund der Abweichung vom klassischen IBM PC-Format funktionierten viele Anwendungen entweder nicht oder nicht richtig. Oder sie hatten nicht genug Speicher auf der Karte. Deshalb habe ich es bis zu besseren Zeiten aufgegeben.

Nach einiger Zeit bekam ich einen Job in der Brennerei als Installateur für Instrumentierung und Automatisierung. Während der Tagschicht gab es genug Arbeit, aber nachts gab es nichts zu tun, da die Ausrüstung neu war und praktisch nicht kaputt ging. Ich habe keine Bücher mehr gekauft, da Disketten mit einer Reihe von Literatur aller Art im DOS-TXT-Format auf Flohmärkten verkauft wurden. Und nachdem Sie eine solche CD gekauft hatten, konnten Sie sie mehrere Jahre lang lesen. Dann kam mir die Idee, meinen Micro-PC zu benutzen.

Die ganze Besonderheit der Speicherimplementierung bestand darin, dass die eingebetteten Anwendungen von der ROM-Festplatte gestartet und für ihre Verwendung angepasst wurden. Der Systemstart und die Konfigurationen lagen auf der eingebauten 76-KB-RAM-Festplatte, deren Nichtflüchtigkeit von der Batterie unterstützt wurde. Es gab auch eine 1 MB RAM-Disk, deren Nichtflüchtigkeit von der Hauptbatterie unterstützt wurde. Am Ende habe ich beschlossen, eine ultrakleine Anwendung zu schreiben. Und es scheint im Assembler begonnen zu haben, aber der Mangel an Debugging-Tools war tödlich. Erinnern Sie sich wahrscheinlich an Tasm ... Als Ergebnis startete ich Turbo C 2.0 auf BB und begann mit der Bildhauerei. Der erste Start in Sharp zeigte, dass nichts funktionierte. Wenn auf dem BB alles einwandfrei funktioniert hat, hat die Anwendung auf dem Palmtop nichts angezeigt. Ich musste bis zum Äußersten gehen und es auf ein Minimum reduzieren. Turbo C legte es in einen Palmtop. Am Ende schrieb ich immer noch einen Leser und las mehrere Jahre lang gerne meine Lieblingsbücher während der Arbeitszeit. Darüber hinaus erwies sich der Bildschirm des Sharp PC3000 als am bequemsten zum Lesen, da er mit der alten klassischen Technologie ohne Hintergrundbeleuchtung hergestellt wurde. Der 80x25-Modus war am optimalsten und die Buchstaben auf dem Bildschirm waren gleich groß wie in den Büchern. Palmtop wurde mit drei AA-Batterien betrieben. Das Vorhandensein des Stromkreises ermöglichte es mir jedoch, die Batterien einzulegen und einen Niedrigstrom-Ladekreis über den Stabilisator anzuschließen. Er aß Batterien und Batterien gut, daher wurden die Batterien nur zum Speichern von Informationen auf einer RAM-Disk verwendet. Ja, und normale Batterien waren zu dieser Zeit schwer zu finden, sodass der Leser immer mit dem Netzwerk verbunden war. Nun, oder für kurze Zeit von Batterien, um an einen anderen Ort zu übertragen.

Programmquelle
#include <dir.h> #include <bios.h> #include <dos.h> #include <fcntl.h> #include <io.h> #include <stat.h> #include <alloc.h> #include <conio.h> #include <stdio.h> #include <stat.h> #include <stdlib.h> #include <stdarg.h> #include <graphics.h> #include <process.h> unsigned char qui,c,membl[2000],fname[20],memtxt[128],Statusin,me; unsigned int h,pos=0,ads,seg,t,t1,t2,memseg,memoffset,membuff,tx,rx,startbuff,buffoff=0,buffbeg,xcor,ycor,buttons,tb; int *memblock,xpos,ypos; long membu,memtext,lenght; unsigned long textposit; int memcoord,fontadr; int GraphDriver,txtfile; int GraphMode; double AspectRatio; int MaxX, MaxY; int MaxColors; int ErrorCode; struct palettetype palette; /*struct ffblk ffblk;*/ unsigned char filelist[192][15]; unsigned char i,x,xp,yp,xl,p,zc; char *driv,*diskname; unsigned int key,drive; int z,filepos,dr,pgs; void main() { void loadfont(); void gettextadr(); void Help(); void Search(); void zprintf(); void Initialize(); void book(); void Oscill(); void Quit(); void cls(); void prtmen(); void files(); void drivesel(); char *buf; clrscr(); drive=getdisk(); if (drive==0) diskname="A"; if (drive==1) diskname="B"; if (drive==2) diskname="C"; if (drive==3) diskname="D"; if (drive==4) diskname="E"; files(); loadfont(); printf("National font loaded\n\n"); filepos=0; clrscr(); while (qui!='q') { while (key!=0x1c0d) { prtmen(); gotoxy(1,25); sprintf(buf,"%-3s ", filelist[drive]); driv=buf; while (bioskey(1)==0) ; key=bioskey(0); if (key==0x5000) { /* down*/ filepos=filepos+1; } if (key==0x4800) { /* up*/ filepos=filepos-1; } if (key==0x4d00) { /* right*/ filepos=filepos+22; } if (key==0x4b00) { /* left*/ filepos=filepos-22; } if (key==0x3B00) { clrscr(); printf("\n National Book Reader v2.0\n\n"); printf(" View only russian and english TXT files\n\n"); printf(" LEFT,RIGHT,UP,DOWN - select file or drive.\n\n"); printf(" ENTER - view file.\n\n"); printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n (C) 2000 MSW Computing"); getch(); clrscr(); } if (filepos<0) filepos=0; if (filepos>=i) filepos=i-1; if (key==0x11b) break; } if (key==0x11b) break; key=0; if (filepos<5) { drive=filepos; clrscr(); drivesel(); files(); } if (filepos>4) { clrscr(); strcpy(fname,filelist[filepos]); book(); } } clrscr(); exit(0); } void prtmen() { unsigned long pages,fl; unsigned int pgs,result; FILE *stream; zc=0; for (xp=0;xp<=4;xp++) { xl=xp*15; for (yp=1;yp<23;yp++) { if (filepos==zc) { gotoxy(xl+1,yp); cprintf(">%s",filelist[zc]); zc=zc+1; gotoxy(1,25); if (zc-1<5){ cprintf("Select drive: %-2s ",filelist[zc-1]); } else { strcpy(fname,filelist[filepos]); if ((stream=fopen(fname,"r"))==NULL) { restorecrtmode(); fprintf(stderr,"Can't open txt file"); exit(1); } result=fseek(stream,0L,SEEK_END); fl=ftell(stream); result=fseek(stream,0L,SEEK_SET); pgs=fl/1920; fclose(stream); cprintf("%-1s:\\%-12s Size: %-10lu ",diskname,filelist[zc-1],fl); gotoxy (60,25); cprintf ("%10u pages",pgs); } } else { gotoxy(xl+1,yp); cprintf(" %s",filelist[zc]); zc=zc+1; } if (zc==i) break; } if (zc==i) break; } } void files(void) { struct ffblk ffblk; char nam=" "; unsigned long siz=0; FILE *street; textmode(BW80); z=findfirst("*.*",&ffblk,0); strcpy(filelist[0],"A:\\"); strcpy(filelist[1],"B:\\"); strcpy(filelist[2],"C:\\"); strcpy(filelist[3],"D:\\"); strcpy(filelist[4],"E:\\"); for (i=5;i<110;i++) { if (z==-1) break; nam=" "; p=sprintf(nam,"%s",ffblk.ff_name); strcpy(filelist[i],nam); filelist[i][13]=0xa; z=findnext(&ffblk); } } void drivesel(void) { dr=setdisk(drive); if (dr==0) { gotoxy(1,25); cprintf("Not ready %s",filelist[filepos]); delay(2000); setdisk(2); } } void book(void) { unsigned int key,i; unsigned char status,a; Initialize(); Oscill(); restorecrtmode(); } void Oscill(void) { unsigned char bitq,c,s,asdf,pps,result,resoa; unsigned int key,h,i,x,y,sda,scl,qsel=0,ksearch,xc,yc,zc,zx,fil,er,keypressed=0; unsigned long posit=0,prev[3000],lastz,last; unsigned long fl,pageset,pagesel,pconst=1920; FILE *stream; int pp,ppc,fn,z,dec,sig; struct stat buf; pp=0; prev[pp]=0; if ((stream=fopen(fname,"r"))==NULL) { restorecrtmode(); fprintf(stderr,"Can't open txt file"); exit(1); } result=fseek(stream,0L,SEEK_END); fl=ftell(stream); result=fseek(stream,0L,SEEK_SET); pgs=fl/1920; while (!feof(stream)) { cls(); bitq=0; ypos=0; xpos=0; lastz=ftell(stream); for (h=0;h<24;h++) { ypos=h; last=ftell(stream); for (pps=0;pps<80;pps++) { keypressed=0; result=fgetc(stream); if (result==0xa) break; if (result == 0xFF) { sprintf(memtxt,"End of file. Press [ESC] for quit or [ARROW LEFT] to Page UP\n"); fseek(stream,last,SEEK_SET); xpos=0; ypos=24; zprintf(); while (bioskey(1)==0) ; key=bioskey(0); if (key==0x5000) { /* down*/ keypressed=1; } if (key==0x4800) { /* up*/ keypressed=2; } if (key==0x4d00) { /* right*/ keypressed=3; } if (key==0x4b00) { /* left*/ keypressed=4; } if (key==0x11b) { /*quit*/ keypressed=5; } bitq=1; if (keypressed==5|keypressed==4) break; /*sym='q';*/ } /*end if EOF*/ if (keypressed==5|keypressed==4) break; if (result<32) { memtxt[pps]='.'; } else memtxt[pps]=result; } /*end line*/ if (keypressed==5|keypressed==4) break; memtxt[pps]=0x0a; zprintf(); /*end page*/ posit=ftell(stream); ppc=posit/1920; sprintf(memtxt," File: %s Page: %u Pages: %u (C) 1999 MSW \n ",fname,ppc,pgs); xpos=0; ypos=24; zprintf(); sprintf(memtxt," "); xpos=0; } while (bitq!=1) { while (bioskey(1)==0) ; key=bioskey(0); if (key==0x3C00) { int pagesel; pagesel=ppc; xpos=0; ypos=24; sprintf(memtxt,"Select page: \n"); zprintf(); while (qsel==0) { while (bioskey(1)==0) ; ksearch=bioskey(0); xpos=14; ypos=24; sprintf(memtxt,"%d \n",pagesel); zprintf(); if (ksearch==0x4800) { pagesel=pagesel+1; } if (ksearch==0x5000) { pagesel=pagesel-1; } if (pagesel>pgs) pagesel=pgs; if (pagesel<1) pagesel=0; if (ksearch==0x1c0d) break; } if (pagesel==0) { pageset=0; } else { pageset = pagesel * pconst; } result=fseek(stream,pageset,SEEK_SET); bitq=1; } if (key==0x3B00) { bitq=1; key=0; Help(); bioskey(0); fseek(stream,lastz,SEEK_SET); keypressed=0; } if (key==0x5000) { /* down*/ keypressed=1; } if (key==0x4800) { /* up*/ keypressed=2; } if (key==0x4d00) { /* right*/ keypressed=3; } if (key==0x4b00) { /* left*/ keypressed=4; } if (key==0x11b) { /*quit*/ keypressed=5; } if (keypressed==5) break; if (keypressed==4) { bitq=1; } if (keypressed==3) { pp=pp+1; prev[pp]=posit; bitq=1; } } if (keypressed==4) { pp=pp-1; if (pp<=0) pp=0; fseek(stream,prev[pp],SEEK_SET); } if (keypressed==5) break; } fclose(stream); } void Search(void) { } void Help(void) { xpos=0; ypos=0; cls(); sprintf(memtxt," National Book Reader v2.0\n"); zprintf(); xpos=0; ypos=2; sprintf(memtxt," LEFT - page down\n"); zprintf(); xpos=0; ypos=4; sprintf(memtxt," RIGHT - page up\n"); zprintf(); xpos=0; ypos=6; sprintf(memtxt," ESC - exit\n"); zprintf(); xpos=0; ypos=8; sprintf(memtxt," F1 - this screen\n"); zprintf(); xpos=0; ypos=10; sprintf(memtxt," F2 - go to page\n"); zprintf(); sprintf(memtxt," UP - increment value\n"); xpos=0; ypos=12; zprintf(); sprintf(memtxt," DOWN - decrement value\n"); xpos=0; ypos=14; zprintf(); sprintf(memtxt," ENTER - select page\n"); xpos=0; ypos=16; zprintf(); xpos=0; ypos=24; sprintf(memtxt," (C) 2000 MSW Home Computing\n"); zprintf(); } void Quit(void) { textcolor(WHITE); textbackground(BLACK); restorecrtmode(); exit(0); } void Initialize(void) { int xasp, yasp, fontst,errorcode; GraphDriver = DETECT; /*errorcode = registerbgidriver(CGA_driver); if(errorcode < 0) { printf("ЋЎЄ :%s\n",grapherrormessage(errorcode)); printf("„«  ў  ¦¬Ґ «Ў Є« ў\n"); getch(); exit(1); } */ initgraph( &GraphDriver, CGAHI, "" ); settextstyle(DEFAULT_FONT,HORIZ_DIR,USER_CHAR_SIZE); ErrorCode = graphresult(); if( ErrorCode != grOk ){ printf(" Graphics System Error\n"); exit( 1 ); } getpalette( &palette ); MaxColors = getmaxcolor() + 1; MaxX = getmaxx(); MaxY = getmaxy(); getaspectratio( &xasp, &yasp ); AspectRatio = (double)xasp / (double)yasp; } void zprintf(void) { unsigned int i,g,z; unsigned char l,w; z=0; c=memtxt[z]; while (c!=0xA) { c=memtxt[z]; if (c>=0x20) { gettextadr(); fontadr=(c-0x20)*8; for (i=0;i<7;i++) { g=fontadr+i; l=membl[g]; pokeb(0xB800,memcoord,l); i=i++; g=fontadr+i; l=membl[g]; pokeb(0xB800,memcoord+8192,l); memcoord=memcoord+80; } xpos=xpos+1; } z=z++; } } void gettextadr(void) { memcoord=xpos+(ypos*320); } void cls(void) { unsigned int cl; for (cl=0;cl<16384;cl++) pokeb (0xb800,cl,0); } void loadfont(void) { unsigned int fil,i; char c; fil = _open("book.fnt",O_RDONLY); if (fil==-1) { printf("File BOOK.FNT not found\n"); abort(); } if ((_read(fil,membl,1792))==-1) { printf("Can't load national font file"); perror(""); } /*fseek(fil,0,SEEK_SET); for (i=0;i<1792;i++) { fseek(fil,i,SEEK_SET); membl[i]=fgetc(fil); } fclose(fil); */ _close(fil); } 


→ Quellen und das Programm können Sie hier nehmen

  1. Foto von hier gemacht.

Source: https://habr.com/ru/post/de444256/


All Articles