بلدي أول قارئ شارب PC3000

كنت دائما أحب القراءة. بدءا من رياض الأطفال. ثم في المدرسة ، أعد قراءة المكتبة بأكملها تقريبًا. عندما ذهبت إلى العمل ، في تسعينيات القرن الماضي ، اشتريت مجموعة من الكتب في الأسواق. كان الوقت صعبًا. ذهب كثيرون إلى ألمانيا للإقامة الدائمة. غادر صديقي أيضا. ثم ، بعد بضع سنوات ، في أواخر التسعينات ، أرسل طردًا ، بالإضافة إلى الحلويات الخارجية غير المسبوقة ، كان هناك 3 أجهزة كمبيوتر Sharp PC3000.

فقط مثل:



ونتيجة لذلك ، تم إطلاق اثنين منهم ، وترك الثالث لقطع الغيار. في الواقع ، كان IBM PC XT منتظمًا على معالج 8088 مع ذاكرة 1 ميجا بايت ، وشاشة عرض مع 4 تدرجات من السطوع ، ومنافذ COM ، و LPT ، و Dock ، وفتحتا PCMCIA في واحدة منها وجدت بطاقة ذاكرة 512 كيلو بايت بها بطارية CR2032.



فرحي لا يعرف حدودا!

ولكن بعد الجلوس ، ولف هذا الشيء الصغير بين يديه ، لم يكن من الواضح لماذا يمكن استخدامه. في palmtop ، تم تثبيت التطبيقات مسبقًا بشكل أساسي للأعمال - تقويم ، دفتر ملاحظات ، مدير ملفات. كانت الموصلات كوم و LPT الملكية. مصغرة ، على غرار نظرائهم الكامل ، ولكن من دون دبابيس ، وسكين ، مثل PCI أو PCIe. كان الإنترنت في ذلك الوقت الذي أصدرته كوبونات في مرحلة الطفولة بحيث كان من الممكن الاتصال فقط في الليل وليس لفترة طويلة ، لأن الاتصال تم قطع اتصاله باستمرار. نتيجة لذلك ، تم العثور على pinout من الموصلات ، تم نقش محولات السكين وصنع كابل مودم فارغ للتواصل مع الأخ الأكبر. لكن في النهاية ، كان من المستحيل التواصل مع الأداة المدمجة. لم يكن تطبيق LapLink الذي وجدته على الإنترنت ولم أستطع الخروج من palmtop هو نفس الإصدار. استمرت عمليات البحث وكنتيجة لذلك وجدت مجموعة توزيع مع أدوات مساعدة.

يبدو أن المشكلة قد تم حلها ، قم بتنزيل البرنامج واستخدمه لمتعتك. لقد عانيت في الاسبوع. ذهبت من خلال جميع أنواع البرامج ، وخاصة اللعب. ولكن بسبب الانحراف عن تنسيق IBM PC الكلاسيكي ، فإن العديد من التطبيقات إما لم تعمل أو لم تعمل بشكل صحيح. أو لم يكن لديهم ذاكرة كافية على الخريطة. لذلك ، تخلت عنها حتى أوقات أفضل.

بعد مرور بعض الوقت ، حصلت على وظيفة في مصنع التقطير كواجب مجبر للأجهزة والأتمتة. كان هناك ما يكفي من العمل خلال نوبة العمل النهارية ، ولكن لم يكن هناك شيء يمكن القيام به في الليل ، لأن المعدات كانت جديدة ولم تنقطع عملياً. لم أعد أشتري الكتب بعد الآن ، حيث تم بيع الأقراص التي تحتوي على مجموعة من جميع أنواع الأدب بتنسيق DOS txt في أسواق السلع المستعملة. وبعد شراء قرص واحد من هذا القبيل ، يمكنك قراءته لعدة سنوات. ثم جاءت الفكرة لي لاستخدام جهاز الكمبيوتر الشخصي Micro الخاص بي.

كانت خصوصية تنفيذ الذاكرة هي أن التطبيقات المضمنة تم إطلاقها من قرص ROM وتم تكييفها لاستخدامها. يقع بدء تشغيل النظام والتكوينات على قرص ذاكرة الوصول العشوائي (RAM) المدمج بسعة 76 كيلو بايت ، والذي تدعمه البطارية. كان هناك أيضًا قرص ذاكرة الوصول العشوائي (RAM) بسعة 1 ميجابايت ، والذي كانت البطارية الرئيسية تدعمه. في النهاية ، قررت أن أكتب طلبًا صغيرًا جدًا. ويبدو أنه قد بدأ في المجمع ، ولكن نقص أدوات التصحيح كان يقتل. حسنًا ، تذكر على الأرجح tasm ... كنتيجة لذلك ، أطلقت Turbo C 2.0 على BB وبدأت بالنحت. أظهر التمهيد الأول في Sharp أن لا شيء يعمل. إذا كان كل شيء يعمل بشكل ممتاز على BB ، فلن يعرض التطبيق أي شيء على سطح palmtop. اضطررت للذهاب إلى أقصى الحدود وقطعت إلى الحد الأدنى Turbo C وضعها في palmtop. في النهاية ، ما زلت أكتب قارئًا واستمتعت بقراءة كتبي المفضلة خلال ساعات العمل لعدة سنوات. علاوة على ذلك ، تبين أن الشاشة الموجودة في Sharp PC3000 هي الأكثر ملاءمة للقراءة ، لأنها صنعت باستخدام التكنولوجيا الكلاسيكية القديمة دون الإضاءة الخلفية. كان وضع 80 × 25 هو الوضع الأمثل وكانت الأحرف على الشاشة هي نفسها في الحجم كما في الكتب. تم تشغيل Palmtop بواسطة ثلاث بطاريات AA. لكن وجود الدائرة سمح لي بتركيب البطاريات وتوصيل دائرة شحن منخفضة التيار من خلال جهاز التثبيت. اعتاد أن يأكل البطاريات والبطاريات بشكل جيد ، لذلك تم استخدام البطاريات فقط لتخزين المعلومات في قرص RAM. نعم ، وكان من الصعب العثور على البطاريات العادية في ذلك الوقت ، لذلك كان القارئ دائمًا متصلاً بالشبكة. حسنا ، أو لفترة قصيرة من البطاريات لنقلها إلى مكان آخر.

مصدر البرنامج
#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); } 


→ المصادر والبرنامج الذي يمكنك القيام به هنا

  1. الصورة مأخوذة من هنا.

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


All Articles