_______THE_BIOS_OF_LITTLE_QUADERNO__________________________________________ Send any comments or questions or corrections on this text to: (or a formatted, well-arranged version in good English ;-) Internet: westfeld@freia.inf.tu-dresden.de AX.25: dl1dsx@db0tud (ibm@ww, Subject: Quaderno) last modification: Sep 6 1993 All absolute addresses in segment 0f000h belongs to Rev 1.06. The BIOS of Little Quaderno contains a Bundle of about 100 far procedure vectors (Rev. 1.06). Vector 0x64 is the most important. Description of other vectors will follow as soon as possible. A pointer to the table is at F000:F010 (32bit) and its length at F000:F014 (16bit). How to find the bios vector 0x64: mov ax,64h ;the vector index mov bx,0f000h mov ds,bx mov bx,[ds:0f010h] shl ax,1 shl ax,1 cmp [ds:0f014h],ax ja fail ;n/a add bx,ax les bx,[bx] es:bx is now the pointer to a far procedure (ending with retf). In BIOS Rev. 1.06: F000:6860 Sample program switching the clock rate to "Hi": org 100h ;com---skip psp mov ax,64h*4 ;the vector index*4 mov bx,0f000h mov ds,bx mov bx,[ds:0f010h] add bx,ax lds si,[bx] mov ax,400h mov bh,1 call far [si] ret Sample program switching the clock rate to "Hi" with Rev 1.06: mov ax,400 mov bh,1 call f000:6860 ret Sorry for having no time to rewrite it in English BIOS-Vektor 0x64 (first part) ________________ 02_________________________________________________ F000:68B6<-please ignore this 1st line on every function (BIOS internal) function: Startwert für den Schlafmodustimer setzen Dieser Wert wird bei Aktivitäten an Tastatur oder Bildschirm in das Timer-Register geschrieben. Nach Ablauf des Schlafmodustimers wird der Bildschirm abgeschaltet. Der Schlafmodus ist nur ohne externe Stromversorgung aktiv. input: ah=2 (Funktionsnummer) al= bit 0: 0 - Schlafmodus erlauben 1 - Schlafmodus aus bits 1...7: unbenutzt bh= !0 - Konfigurationsregister ändern (gültig in aktueller Sitzung) 0 - cmos verändern (gültig nach Neustart) bl= bits 0...3: Startwert für Timer (in Minuten) bits 4...7: unbenutzt (landet aber im cmos) output: ah= 00 0E 03_________________________________________________ F000:691C function: Startwert für den Schlafmodustimer lesen Dieser Wert wird bei Aktivitäten an Tastatur oder Bildschirm in das Timer-Register geschrieben. Nach Ablauf des Schlafmodustimers wird der Bildschirm abgeschaltet. Der Schlafmodus ist nur ohne externe Stromversorgung aktiv. input: ah=3 (Funktionsnummer) output: al= aus cmos: 1 - Schlafmodus ist aus 0 - Schlafmodus ist erlaubt bl= aus cmos: bits 0...3 Startwert für Schlafmodustimer (in Minuten) bits 4...7 ungültig ah= aus config-register: 1 - Schlafmodus ist aus 0 - Schlafmodus ist erlaubt bh= aus config-register: bits 0...3 Startwert für Schlafmodustimer (in Minuten) bits 4...7 Null 04_________________________________________________ F000:694B function: Taktfrequenz setzen Eine von vier möglichen Taktfrequenzen wird gesetzt. input: ah=4 (Funktionsnummer) al= bits 0...1: 0 HI 16 MHz 1 MD 8 MHz 2 LO 4 MHz 3 XLO 2 MHz bits 2...7: unbenutzt bh= !0 - Konfigurationsregister ändern (gültig in aktueller Sitzung) 0 - cmos verändern (gültig nach Neustart) output: ah= 00 05_________________________________________________ F000:6988 function: Taktfrequenz ermitteln input: ah=5 (Funktionsnummer) output: al= aus cmos: 0 HI 16 MHz 1 MD 8 MHz 2 LO 4 MHz 3 XLO 2 MHz ah= aus config-register: 0 HI 16 MHz 1 MD 8 MHz 2 LO 4 MHz 3 XLO 2 MHz 06_________________________________________________ F000:69A7 function: HDU-Stromsparmodus Startwert für den HDU-Timer setzen Dieser Wert wird bei Aktivitäten an Tastatur oder Bildschirm in das Timer-Register geschrieben. Nach Ablauf des HDU-Timers wird die Festplatte abgeschaltet. Dieser Modus ist nur ohne externe Stromversorgung aktiv. ah=6 (Funktionsnummer) al= !0: HDU-Stromsparmodus ausschalten 0: HDU-Stromsparmodus erlauben bh= !0 - Konfigurationsregister ändern (gültig in aktueller Sitzung) 0 - cmos verändern (gültig nach Neustart) bl= 0 wie 1 1...0xdc Startzeit für Timer (in 5 Sekunden) 0xdd...0xff wie 0xdc output: ah= 00 01 falls port62&4 != 0 (kommt nur bei input: bh==0 vor) 0E falls Netzanschluß (kommt nur bei input: bh!=0 vor) 07_________________________________________________ F000:6A24 function: HDU-Stromsparmodus, Startwerte ermitteln input: ah=7 (Funktionsnummer) output: al= aus cmos: 0 - HDU-Stromsparmodus erlaubt 1 - HDU-Stromsparmodus gesperrt ah= aus config-register: 0 - HDU-Stromsparmodus erlaubt 1 - HDU-Stromsparmodus gesperrt bl= aus cmos: Startwert für HDU-Timer (Einheit: 5 Sekunden) bh= aus config-register: Startwert für HDU-Timer (Einheit: 5 Sekunden) 08_________________________________________________ F000:6A51 function: Bildschirmdarstellung setzen Der Bildschirm kann entweder normal oder invers dargestellt werden. Mit "normal" bezeichne ich die Darstellungsart, die nach einem RESET verwendet wird. ah=8 (Funktionsnummer) al= bit 0: 1 - Bildschirm invers 0 - Bildschirm normal bh= !0 - Konfigurationsregister ändern (gültig in aktueller Sitzung) 0 - cmos verändern (gültig nach Neustart) output: ah= 00 09_________________________________________________ F000:6A8E function: Bildschirmdarstellung lesen Der Bildschirm kann entweder normal oder invers dargestellt werden. Mit "normal" bezeichne ich die Darstellungsart, die nach einem RESET verwendet wird. input: ah=9 (Funktionsnummer) output: al= aus cmos: 1 - Bildschirm invers 0 - Bildschirm normal ah= aus config-register: 1 - Bildschirm invers 0 - Bildschirm normal 0A_________________________________________________ F000:6AAB function: Codepage setzen Hinweis: Videomodus darf für aktuelle Konfiguration (input bl!=0) nicht größer als 0x3f sein. ah=0x0A (Funktionsnummer) al= bits 0...2: 0 - USA 1 - Multilingual 2 - Portuguese 3 - Canadian-French 4 - Nordic bh= !0 - Konfigurationsregister ändern (gültig in aktueller Sitzung) 0 - cmos verändern (gültig nach Neustart) output: ah= 00 02 falls [40:49]>=0x40 (kommt nur bei input: bh!=0 vor) 0B_________________________________________________ F000:6AF9 function: Codepage ermitteln input: ah=0x0b (Funktionsnummer) output: al= aus cmos: 0 - USA 1 - Multilingual 2 - Portuguese 3 - Canadian-French 4 - Nordic ah= aus config-register: 0 - USA 1 - Multilingual 2 - Portuguese 3 - Canadian-French 4 - Nordic 0C_________________________________________________ F000:6B19 function: Graustufendarstellung schreiben ah=0x0c (Funktionsnummer) al= bit 0: 1 - Graustufen aus 0 - Graustufen ein bits 1...7: beliebig bh= !0 - Konfigurationsregister ändern (gültig in aktueller Sitzung) 0 - cmos verändern (gültig nach Neustart) output: ah= 00 02 falls Videomodus [40:49]>=0x40 (kommt nur bei input: bh!=0 vor) 0D_________________________________________________ F000:6B5D function: Graustufendarstellung ermitteln input: ah=0x0d (Funktionsnummer) output: al= aus cmos: 1 - Graustufen aus 0 - Graustufen ein ah= aus config-register: 1 - Graustufen aus 0 - Graustufen ein 10_________________________________________________ F000:6B7D function: Batteriealarmflag schreiben Hinweis: Wird im CMOS registriert und ist in der aktuellen Sitzung gültig ah=0x10 (Funktionsnummer) al= bit 0: 1 - Batteriealarm aus 0 - Batteriealarm ein bits 1...7: beliebig output: ah= 00 02 falls Videomodus [40:49]>=0x40 (kommt nur bei input: bh!=0 vor) 11_________________________________________________ F000:6BA9 function: Batteriealarmflag ermitteln input: ah=0x11 (Funktionsnummer) output: al= aus cmos: 1 - Batteriealarm aus 0 - Batteriealarm ein 16_________________________________________________ F000:6B7D function: Funktion der Netztaste Hinweis: Wird im CMOS registriert und ist in der aktuellen Sitzung gültig ah=0x10 (Funktionsnummer) al= !0 - Netztaste schaltet aus 0 - Netztaste schaltet auf Bereitschaft output: ah= 00 17_________________________________________________ F000:6BD0 function: Netztastenfunktion ermitteln input: ah=0x17 (Funktionsnummer) output: al= aus cmos: 1 - Netztaste schaltet aus 0 - Netztaste schaltet auf Bereitschaft 18_________________________________________________ F000:6BE3 function: Startwert für den Bereitschaftsmodustimer setzen Dieser Wert wird bei Aktivitäten an Tastatur oder Bildschirm in das Timer-Register geschrieben. Nach Ablauf des Timers wird das Gerät in den Bereitschaftsmodus geschaltet. Dieser Modus ist nur ohne externe Stromversorgung aktiv. ah=0x18 (Funktionsnummer) al= bit 0: 1 - Modus ausschalten 0 - Modus erlauben bits 1...7: ignoriert bl= bits 0...3: Timerstartwert (Einheit: 5 Minuten) bits 4...7: unbenutzt (werden ins cmos geschrieben) bh= !0 - Konfigurationsregister ändern (gültig in aktueller Sitzung) 0 - cmos verändern (gültig nach Neustart) output: ah= 00 0E falls Netzanschluß besteht (nur bei input: bh!=0) 19_________________________________________________ F000:6C54 function: Startwert für den Bereitschaftsmodustimer lesen Dieser Wert wird bei Aktivitäten an Tastatur oder Bildschirm in das Timer-Register geschrieben. Nach Ablauf des Timers wird das Gerät in den Bereitschaftsmodus geschaltet. Dieser Modus ist nur ohne externe Stromversorgung aktiv. input: ah=0x19 (Funktionsnummer) output: al= aus cmos: 1 - Modus ausgeschaltet 0 - Modus erlaubt ah= aus config-register: 1 - Modus ausgeschaltet 0 - Modus erlaubt bl= aus cmos: bits 0...3: Timerstartwert (Einheit: 5 Minuten) bits 4...7: unbestimmt bh= aus config-register: Timerstartwert (Einheit: 5 Minuten) 1A_________________________________________________ F000:6C90 function: Modem Ring Auto Power-on Zähler setzen ah=0x1a (Funktionsnummer) al= bit 0: 1 - Modus ausschalten 0 - Modus erlauben bits 1...7: ignoriert bl= bits 0...2: autom. Einschaltsignalzähler bits 3...7: ignoriert bh= !0 - Konfigurationsregister ändern (gültig in aktueller Sitzung) 0 - cmos verändern (gültig nach Neustart) output: ah= 00 01 (nur bei input: bh!=0) 1B_________________________________________________ F000:6CDC function: Modem Ring Auto Power-on Zähler lesen input: ah=0x1b (Funktionsnummer) output: ah=al= aus cmos: 1 - Modus ausgeschaltet 0 - Modus erlaubt bh=bl= aus cmos: Zähler 1C_________________________________________________ F000:6D02 function: Startwert für den Schlummermodustimer setzen Dieser Wert wird bei Aktivitäten an Tastatur oder Bildschirm in das Timer-Register geschrieben. Nach Ablauf des Timers wird das Gerät in den Schlummermodus geschaltet. Dieser Modus ist nur ohne externe Stromversorgung aktiv. ah=0x1c (Funktionsnummer) al= bit 0: 1 - Modus ausschalten 0 - Modus erlauben bits 1...7: ignoriert bl= bits 0...3: Timerstartwert (Einheit: 1/8 Sekunde?) bits 4...7: unbenutzt (werden ins cmos geschrieben) bh= !0 - Konfigurationsregister ändern (gültig in aktueller Sitzung) 0 - cmos verändern (gültig nach Neustart) output: ah= 00 0E falls Netzanschluß besteht (nur bei input: bh!=0) 1D_________________________________________________ F000:6D6D function: Startwert für den Schlummermodustimer lesen Dieser Wert wird bei Aktivitäten an Tastatur oder Bildschirm in das Timer-Register geschrieben. Nach Ablauf des Timers wird das Gerät in den Schlummermodus geschaltet. Dieser Modus ist nur ohne externe Stromversorgung aktiv. input: ah=0x1d (Funktionsnummer) output: al= aus cmos: 1 - Modus ausgeschaltet 0 - Modus erlaubt ah= aus config-register: 1 - Modus ausgeschaltet 0 - Modus erlaubt bl= aus cmos: Timerstartwert (Einheit: 1/8 Sekunde?) bh= aus config-register: Timerstartwert (Einheit: 1/8 Sekunde?) Konfigurationsregister >>info needed<< ______________________ Port 0x178: index Port 0x179: data index data ____________ ?0xc2 bits 0...2: Taktfrequenz (Belegung?) bits 3-4: gesetzt über Konfigurationsfunktion 0x1e Port 0x300: index Port 0x302: data index data ____________ 0x13 bit 7: 1 - Netzanschluß 0x1a bit 0: 1 - Schlafmodus aus bit 1: 1 - HDU-Stromsparmodus aus bit 2: 1 - Graustufen aus bit 4: 1 - Schlummermodus aus bit 5: 1 - Bereitschaftstimer aus bit 7: 1 - inverser Bildschirm 0x1b bits 0...1: Taktfrequenz: 0 HI 16 MHz 1 MD 8 MHz 2 LO 4 MHz 3 XLO 2 MHz bits 2...4: 0 - USA 1 - Multilingual 2 - Portuguese 3 - Canadian-French 4 - Nordic 0x1c Startwert für HDU-Stromsparmodus 0x1d bits 0...3: Startwert für Bereitschaftsmodustimer bits 4...7: Startwert für Schlafmodus-Timer 0x1e bits 4...7: Startwert für Schlummermodustimer CMOS-Konfiguration __________________ 0x00 bit 0: 1 - Schlafmodus aus bit 1: 1 - HDU-Stromsparmodus aus bit 2: 1 - Graustufen aus bit 3: 1 - Batteriealarm aus bit 4: 1 - Schlummermodus aus bit 5: 1 - Bereitschaftstimer aus bit 7: 1 - inverser Bildschirm 0x01 bits 0...1: Taktfrequenz: 0 HI 16 MHz 1 MD 8 MHz 2 LO 4 MHz 3 XLO 2 MHz bits 2...4: 0 - USA 1 - Multilingual 2 - Portuguese 3 - Canadian-French 4 - Nordic 0x02 bits 0...1: 3 - Passwort ist gesetzt bits 2...4: Auto Power-on Ring Count bit 5: Modem Ring Auto Power-on bits 6...7: gesetzt über Konfigurationsfunktion 0x1e 0x05 Startwert für Schlafmodustimer (bits 0...3 benutzt) 0x06 Startwert für Bereitschaftsmodustimer (bits 0...3 benutzt) 0x07 Startwert für HDU-Timer 0x08 Startwert für Schlummermodustimer (bits 0...3 benutzt) 0x09 00 - Netztaste schaltet aus 5A - Netztaste schaltet auf Bereitschaft subroutines: Segment 0xf000: (BIOS internal) 0x6ecc if(bl) Lautsprecherton ein; else aus; 0x6ed9 cmos checksum update 0x6eed set clock rate (al) 0x6f6e Bereitschaftstimer setzen 0x6f8e Einschlatsignalzähler für Modem setzen (bl) 0x7087 Codepage setzen al=0...4 0x70cd if(al&1) Bildschirm invers; else normal; /*port3D5[DF]&80=al<<7;*/ 0x70e5 if(al&1) Graustufen aus; else an; /*port3D5[DA]=(al&1)?5F:40;*/ 0x70fc Schlummermodus setzen 0x7163 Schlafmodustimer setzen 0x7187 2-1, 6-1, (test ah,4) (Netzanschluß?) 0x71e7 bits 3&4 in port179[C2] auf al&1 und bl&1 setzen 0x7206 if(al) word ptr [40:92]=0; else [40:92]=bl*0x5b; HDU-Timer setzen; ?0x7c54 Einschaltsignalzähler setzen 0x9468 ah=cmos[al], inc al 0x9471 cmos[al]=ah, inc al 0x9af9 ah=port179[al], inc al 0x9b1d ah=port302[al], inc al 0x9b31 port302[al]=ah, inc al _______________________________________________________________________________ int15_________________________________________________ Olivetti Quaderno's BIOS and the TSR c:\pa\xbios.com supports functions driving the LCD and the DSP. They are called via int 15h. AX is in the range 0x44C0 to 0x44C9. This description ends with a sample program using the DSP and LCD. 44c0________________________________________________________________ >info wanted< function: init something input: ax=44c0h es:di=new far pointer to DSP procedure (exchanged with cmos[28]) es:si=far pointer to buffer output: [es:si]= ten bytes from cmos: cmos[14],...,cmos[1C],0 (cmos[15]...cmos[1C] only if they are less than 0x21) es:di=far pointer to old DSP procedure 44c1________________________________________________________________ >info wanted< 44c2________________________________________________________________ function: "out 350h,dl" >info wanted< input: ax=44c2h dl=byte which will be written in port 350h output: none 44c3________________________________________________________________ >info wanted< function: "... in dl,350h ..." input: output: dh= bits 0-1 "tres complique" bits 2-4 zero bits 5-7 =bits 5-7 of port 351h dl= port 350h 44c4________________________________________________________________ >info wanted< 44c5________________________________________________________________ >info wanted< 44c6________________________________________________________________ function: read LCD LCD looks like: 99:99: AA where "9" means a hex digit "A" means an alphanumerical character ":" is a colon (really!) input: ax=44c6h output: dx= 0000h ... 0fffeh: hex number displayed on "9999"-position bh=left char "A" bl=right char "A" characters which are displayed: 00...0F: as hex digit (0123456789AbcdEF) 2B: as "+" 2D: as "-" 30...39: as "0"..."9" 41...5A: as "A"..."Z" 61...6A: as "a"..."z" all others: blank " " cl= bit 0: 1 right colon on bit 1: 1 left colon on bits 2...7: unused dx= 0ffffh: clock is displayed and HI, Md or Lo bx, cl: as before 44c7________________________________________________________________ function: write on LCD LCD looks like: 99:99: AA where "9" means a hex digit "A" means an alphanumerical character ":" is a colon (really!) input: ax=44c7h dx= 0000h ... 0fffeh: display hex number on "9999"-position bh=left char "A" bl=right char "A" characters which are displayed: 00...0F: as hex digit (0123456789AbcdEF) 2B: as "+" 2D: as "-" 30...39: as "0"..."9" 41...5A: as "A"..."Z" 61...6A: as "a"..."z" all others: blank " " cl= bit 0: 1 right colon on bit 1: 1 left colon on bits 2...7: unused dx= 0ffffh: display clock and HI, Md or Lo bx, cl: unused output: 44c8________________________________________________________________ >info wanted< 44c9________________________________________________________________ Get version number of xbios input: ax=44C9h output: ah=subversion al=main version sample program de DC1YB @ DB0LAN, ">" is quoting Herwig. > SPK.COM spricht den ersten Eintrag in der Datei RECORDER.VOI des > Olivetti-Quaderno (z.B. Highscreen-Notebook): spk.com speaks the first entry of the file recorder.voi of Little Quaderno (e. g. on Highscreen Notebook): > > ;Beispielprogramm zur Verwendung > ;des DSP im Olivetti-Quaderno. > ;Es wird die erste Mitteilung in > ;C:\RECORDER.VOI als Sprache > ;ausgegeben. - (c) DC1YB 1993 > > code segment > assume cs:code,ds:code,es:code > org 100h ;.COM-Datei! > start: > mov ax,3d02h > mov dx,offset file > int 21h ;R/W-Open > jc qui ;skip header: > mov bx,ax ;Header > mov dx,80h ;überspringen > xor cx,cx > mov ax,4200h > int 21h > mov cx,4002h > mov ax,44c8h ;press play: > int 15h ;Play drücken > mov cx,4000h > mov ax,44c8h ;release play: > int 15h ;Play losl. > push bx ;wait for output > wai:mov cl,21h ;Ausgabe > mov ax,44c8h;abwarten > int 15h > test bl,2 > jnz wai > pop bx > mov ah,3eh ;Close > int 21h ;display clock > mov dx,-1 ;Uhrzeit > mov ax,44c7h;anzeigen > int 15h > qui:int 20h > > file db 'C:\RECORDER.VOI',0 > code ends > end start > > Viel Spass de Herwig, DC1YB @ DB0LAN! memory.lst_______________________________________________________ segment 40h: offset size description 92h word HDD-power-saving timer in ticks (HDD turns off when one->zero) sample program: park.com (turn HDD off, if no external power is connected) pop ds ;ds=0 mov word ptr [492],1 int 20h video.lst________________________________________________________ The video adapter is compatible to AT&T (640 x 400) (use ATT400.BGI). there are 4 modes with 640x400: 40h - 25 lines 48h - 50 lines 0C0h - 25 lines (overlay == set without clrscr) 0C8h - 50 lines (overlay) sample program: set48.com (set graphics 640 x 400, 50 lines of text) mov ax,48 int 10 ret ____________________EOF____________________ -- Andreas äöüß=aeoeuesz westfeld@freia.inf.tu-dresden.de (141.76.99.1) From uwm.edu!cs.utexas.edu!uunet!math.fu-berlin.de!news.tu-chemnitz.de!irz401!aw4 Wed Sep 8 10:00:04 CDT 1993 Article: 9273 of comp.sys.palmtops Path: uwm.edu!cs.utexas.edu!uunet!math.fu-berlin.de!news.tu-chemnitz.de!irz401!aw4 From: aw4@irz.inf.tu-dresden.de (Andreas Westfeld) Newsgroups: comp.sys.palmtops Subject: @1 Quaderno.lst (BIOS description) Date: 8 Sep 1993 12:32:58 +0200 Organization: Dept. of Computer Science, TU Dresden, Germany Lines: 135 Distribution: world Message-ID: <26kccq$1ot@irz406.inf.tu-dresden.de> References: <26eubr$m12@irz405.inf.tu-dresden.de> Reply-To: westfeld@freia.inf.tu-dresden.de NNTP-Posting-Host: irz406.inf.tu-dresden.de Keywords: Quaderno *** First Continuation *** _______THE_BIOS_OF_LITTLE_QUADERNO__________________________________________ Send any comments or questions or corrections on this text to: (or a formatted, well-arranged version in good English ;-) Internet: westfeld@freia.inf.tu-dresden.de AX.25: dl1dsx@db0tud (ibm@ww, Subject: Quaderno) last modification: Sep 8 1993 All absolute addresses in segment 0f000h belongs to Rev 1.06/1.07 The BIOS of Little Quaderno contains a Bundle of about 100 far procedure vectors (Rev. 1.06). Vector 0x64 is the most important. Description of other vectors will follow as soon as possible. A pointer to the table is at F000:F010 (32bit) and its length at F000:F014 (16bit). vector table F000:724A (1A0 Bytes) 00 0000 F000:73ED in al,6ah; ah=0; 01 0004 F000:73F2 LCD set position (see int 15h, ax=44c7,44c6) 02 0008 F000:741E LCD write " ax=44c7 03 000C F000:743F LCD read " ax=44c6 04 0010 F000:745D in al,ah; ah=0; 05 0014 F000:7469 out ah,al; ah=0; 06 0018 F000:7475 in al,dx; ah=0; 07 001C F000:7479 out dx,al; ah=0; 08 0020 F000:747D al=cmos[ah]; ah=0; 09 0024 F000:7487 cmos[ah]=al; ah=0; 0A 0028 F000:7491 if(ah==1) cmos-checksum ok ? ah=0 : ah=4; else ah=0Dh; 0B 002C F000:74AF if(ah==1) {update cmos-checksum; ah=0;} else ah=0Dh; 0C 0030 F000:74EA if(cmos confidence test==ok) ah=0; else ah=5; write any patterns in cmos[0]...cmos[27] (non-destructive) 0D 0034 F000:73EA mov ah,0Dh 0E 0038 F000:73EA mov ah,0Dh 0F 003C F000:73EA mov ah,0Dh 10 0040 F000:73EA mov ah,0Dh 11 0044 F000:73EA mov ah,0Dh 12 0048 F000:73EA mov ah,0Dh 13 004C F000:73EA mov ah,0Dh 14 0050 F000:73EA mov ah,0Dh 15 0054 F000:73EA mov ah,0Dh 16 0058 F000:73EA mov ah,0Dh 17 005C F000:7501 port179[CC]=0; ah=0; 18 0060 F000:7513 port179[CC]=80; ah=0; 19 0064 F000:7525 >>info wanted<< cmos[2]&2 ... 1A 0068 F000:753B >>info wanted<< cmos[2]|=1; checksum update; 1B 006C F000:7565 >>info wanted<< cmos[2]&= ~1; checksum update; 1C 0070 F000:758F delay(cx); (cx-unit depends on clock rate) 1D 0074 F000:73EA mov ah,0Dh 1E 0078 F000:73EA mov ah,0Dh 1F 007C F000:73EA mov ah,0Dh 20 0080 F000:73EA mov ah,0Dh 21 0084 F000:73EA mov ah,0Dh 22 0088 F000:73EA mov ah,0Dh 23 008C F000:73EA mov ah,0Dh 24 0090 F000:73EA mov ah,0Dh 25 0094 F000:73EA mov ah,0Dh 26 0098 F000:73EA mov ah,0Dh 27 009C F000:73EA mov ah,0Dh 28 00A0 F000:73EA mov ah,0Dh 29 00A4 F000:73EA mov ah,0Dh 2A 00A8 F000:73EA mov ah,0Dh 2B 00AC F000:73EA mov ah,0Dh 2C 00B0 F000:73EA mov ah,0Dh 2D 00B4 F000:73EA mov ah,0Dh 2E 00B8 F000:73EA mov ah,0Dh 2F 00BC F000:73EA mov ah,0Dh 30 00C0 F000:73EA mov ah,0Dh 31 00C4 F000:73EA mov ah,0Dh 32 00C8 F000:7597 al=port3D5[ah]; 33 00CC F000:759F port3D5[ah]=al; 34 00D0 F000:75A7 al=port302[ah]; 35 00D4 F000:75AF port302[ah]=al; 36 00D8 F000:73EA mov ah,0Dh 37 00DC F000:73EA mov ah,0Dh 38 00E0 F000:75B7 al=port179[ah]; 39 00E4 F000:75BF port179[ah]=al; 3A 00E8 F000:75C7 al=port27[ah]; 3B 00EC F000:75CF port27[ah]=al; 3C 00F0 F000:73EA mov ah,0Dh 3D 00F4 F000:73EA mov ah,0Dh 3E 00F8 F000:73EA mov ah,0Dh 3F 00FC F000:73EA mov ah,0Dh 40 0100 F000:73EA mov ah,0Dh 41 0104 F000:73EA mov ah,0Dh 42 0108 F000:73EA mov ah,0Dh 43 010C F000:73EA mov ah,0Dh 44 0110 F000:73EA mov ah,0Dh 45 0114 F000:73EA mov ah,0Dh 46 0118 F000:73EA mov ah,0Dh 47 011C F000:73EA mov ah,0Dh 48 0120 F000:73EA mov ah,0Dh 49 0124 F000:73EA mov ah,0Dh 4A 0128 F000:73EA mov ah,0Dh 4B 012C F000:73EA mov ah,0Dh 4C 0130 F000:73EA mov ah,0Dh 4D 0134 F000:73EA mov ah,0Dh 4E 0138 F000:73EA mov ah,0Dh 4F 013C F000:73EA mov ah,0Dh 50 0140 F000:73EA mov ah,0Dh 51 0144 F000:73EA mov ah,0Dh 52 0148 F000:73EA mov ah,0Dh 53 014C F000:73EA mov ah,0Dh 54 0150 F000:73EA mov ah,0Dh 55 0154 F000:75D7 >>info wanted<< 56 0158 F000:7638 >>info wanted<< 57 015C F000:767E get version: write 8 bytes to [ES:DI]={6,1,5,1,2,2,16h,1} 1.06; 1.05;?,?,?,? >>info wanted<< 58 0160 F000:76EF cmos[34]=es:bx; >>info wanted<< 59 0164 F000:76F8 es:bx=cmos[34]; 5A 0168 F000:7701 cmos[30]=es:bx; >>info wanted<< 5B 016C F000:770A es:bx=cmos[30]; 5C 0170 F000:7713 >>info wanted<< 5D 0174 F000:773F turn Little Quaderno off 5E 0178 F000:7793 cmos[2C]=es:bx; >>info wanted<< 5F 017C F000:779C es:bx=cmos[2C]; 60 0180 F000:0018 >>info wanted<< no procedure! 61 0184 F000:77A5 >>info wanted<< lcd? 62 0188 F000:77AD >>info wanted<< 63 018C F000:782C >>info wanted<< cmos[1D]... 64 0190 F000:6860 configuration functions (see extra description) power-saving features 65 0194 F000:7856 >>info wanted<< lcd? 66 0198 F000:7878 cmos[28]=es:bx; pointer to DSP driver >>info wanted<< 67 019C F000:789A es:bx=cmos[28]; see int 15h ax=44C0..44C9 -- (c) 1993 Andreas Westfeld -- Andreas äöüß=aeoeuesz westfeld@freia.inf.tu-dresden.de (141.76.99.1)