Mi primer lector Sharp PC3000

Siempre me ha encantado leer. A partir de la guardería. Luego en la escuela releí casi toda la biblioteca. Cuando fui a trabajar, en los apuestos noventa, compré un montón de libros en los mercados. El tiempo fue duro. Muchos fueron a Alemania para la residencia permanente. Mi amigo también se fue. Luego, unos años más tarde, a fines de los noventa, envió un paquete en el que, además de dulces en el extranjero sin precedentes, había 3 computadoras Sharp PC3000.

Solo tal:



Como resultado, se lanzaron 2 de ellos y el tercero se dejó para piezas de repuesto. De hecho, era un IBM PC XT normal en un procesador 8088 con 1 MB de memoria, una pantalla gráfica con 4 gradaciones de brillo, COM, LPT, puertos Dock, dos ranuras PCMCIA en una de las cuales encontré una tarjeta de memoria de 512 KB con una batería CR2032.



¡Mi alegría no conocía límites!

Pero después de sentarse y torcer esta pequeña cosa en sus manos, no estaba claro por qué podría usarse. En este palmtop, las aplicaciones se preinstalaron principalmente para negocios: un calendario, una notebook, un administrador de archivos. Los conectores Com y LPT eran propietarios. Miniatura, similar a sus homólogos completos, pero sin clavijas y cuchillo, como PCI o PCIe. En ese momento, Internet emitía cupones en una etapa tan temprana que era posible conectarse solo de noche y no por mucho tiempo, porque la conexión se desconectaba constantemente. Como resultado, se encontró un pinout de los conectores, se grabaron adaptadores de cuchilla y se hizo un cable de módem nulo para la comunicación con el hermano mayor. Pero al final, fue imposible conectarse con la utilidad incorporada. La aplicación LapLink que encontré en Internet y no pude salir de la computadora de bolsillo no era la misma versión. Las búsquedas continuaron y como resultado encontré un kit de distribución con utilidades.

Parece que el problema está resuelto, descargue el programa y úselo para su placer. Yo sufrí una semana. Pasé por todo tipo de programas, principalmente juguetes. Pero debido a la desviación del formato clásico de PC de IBM, muchas aplicaciones no funcionaron o no funcionaron correctamente. O no tenían suficiente memoria en el mapa. Por lo tanto, lo abandoné hasta tiempos mejores.

Después de un tiempo, conseguí un trabajo en la destilería como instalador de instrumentación y automatización. Había suficiente trabajo durante el turno de día, pero no había nada que hacer por la noche, ya que el equipo era nuevo y prácticamente no se rompía. Ya no compraba libros, ya que los discos con un montón de todo tipo de literatura en formato txt de DOS se vendían en mercados de pulgas. Y habiendo comprado uno de esos discos, podría leerlo durante varios años. Entonces se me ocurrió la idea de usar mi Micro PC.

Toda la peculiaridad de la implementación de la memoria fue que las aplicaciones integradas se lanzaron desde el disco ROM y se adaptaron para su uso. El inicio y las configuraciones del sistema se encuentran en el disco RAM integrado de 76 kb, cuya no volatilidad era compatible con la batería. También había un disco RAM de 1 MB, cuya no volatilidad era compatible con la batería principal. Al final, decidí escribir una aplicación ultra pequeña. Y parece haber comenzado en ensamblador, pero la falta de herramientas de depuración fue mortal. Bueno, recuerde que probablemente sea un problema ... Como resultado, lancé Turbo C 2.0 en BB y comencé a esculpir. El primer arranque en Sharp mostró que nada funcionaba. Si todo funcionaba perfectamente en la BB, la aplicación no mostraba nada en el palmtop. Tuve que ir al extremo y cortar al mínimo Turbo C lo puse en la palma de la mano. Al final, todavía escribí un lector y disfruté leyendo mis libros favoritos durante las horas de trabajo durante varios años. Además, la pantalla en el Sharp PC3000 resultó ser la más conveniente para la lectura, ya que se hizo usando la vieja tecnología clásica sin retroiluminación. El modo 80x25 fue el más óptimo y las letras en la pantalla tenían el mismo tamaño que en los libros. Palmtop funciona con tres pilas AA. Pero la presencia del circuito me permitió instalar las baterías y conectar un circuito de carga de baja corriente a través del estabilizador. Solía ​​comer baterías y baterías bien, por lo que las baterías se usaban solo para almacenar información en un disco RAM. Sí, y las baterías normales en ese momento eran difíciles de encontrar, por lo que el lector siempre estaba conectado a la red. Bueno, o por un corto tiempo de baterías para transferir a otro lugar.

Fuente del programa
#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); } 


→ Fuentes y el programa que puedes tomar aquí

  1. Foto tomada desde aquí.

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


All Articles