_______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)



    Source: geocities.com/eureka/5673

               ( geocities.com/eureka)