_______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)
               (
geocities.com/eureka)