source: bootcd/isolinux/syslinux-6.03/diag/geodsp/geodspms.asm

Last change on this file was e16e8f2, checked in by Edwin Eefting <edwin@datux.nl>, 3 years ago

bootstuff

  • Property mode set to 100644
File size: 4.1 KB
Line 
1; -----------------------------------------------------------------------
2;
3;   Copyright 2010 Gene Cumm
4;
5;   Portions from diskstart.inc:
6;   Copyright 1994-2009 H. Peter Anvin - All Rights Reserved
7;   Copyright 2009-2010 Intel Corporation; author: H. Peter Anvin
8;
9;   This program is free software; you can redistribute it and/or modify
10;   it under the terms of the GNU General Public License as published by
11;   the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
12;   Boston MA 02110-1301, USA; either version 2 of the License, or
13;   (at your option) any later version; incorporated herein by reference.
14;
15; -----------------------------------------------------------------------
16
17;
18; geodspms.asm
19;
20; Display geometry translation info for diagnosing misconceptions
21; multi-sector variant
22;
23;       nasm -Ox -f bin -o geodsp.bin -l geodsp.lst geodsp.asm
24;
25;       nasm -Ox -f elf -o geodsp.o -l geodsp.lst geodsp.asm
26;       ld -m elf_i386  -T syslinux.ld -M -o geodsp.elf geodsp.o > geodsp.map
27;       objcopy -O binary geodsp.elf geodsp.raw
28;
29;       # OF=/dev/sdb
30;       # dd if=core/geodsp.bin of=$OF
31;       # dd skip=1 seek=1 if=../dbg/lba-img/lba-img.bin of=$OF
32;       # eject $OF
33;       # dd count=$() if=/dev/zero of=$OF
34;
35;       # OF=geo-2.255.63.i
36;       # (dd if=core/geodsp.bin; dd skip=1 if=../dbg/lba-img/lba-img.bin; dd count=$((2*255*63 - 256*63 - 1)) if=/dev/zero )|dd of=$OF
37;       # OF=geo-20.16.63.i
38;       # (dd if=core/geodsp.bin; dd skip=1 if=../dbg/lba-img/lba-img.bin; dd count=$((40*16*63 - 256*63 - 1)) if=/dev/zero )|dd of=$OF
39;
40
41; Just to define it to look like SYSLINUX
42%define IS_SYSLINUX 1
43
44%include "macros.inc"
45; %include "layout.inc"
46
47m_CHS0          equ 00534843h           ;'CHS',0
48m_EDD0          equ 00444445h           ;'EDD',0
49m_EDD_SP        equ 20444445h           ;'EDD '
50retry_count     equ 16
51dbuf            equ 8000h
52; int13_ret     equ 7e00h
53LDLINUX_MAGIC   equ 0x3eb202fe          ; A random number to identify ourselves with
54
55Sect1Ptr0_VAL   equ 1
56Sect1Ptr1_VAL   equ 0
57
58;               global STACK_LEN, STACK_TOP, STACK_BASE
59; STACK_LEN     equ 4096
60STACK_TOP       equ 7c00h
61; STACK_BASE    equ STACK_TOP - STACK_LEN
62                section .init
63                org STACK_TOP
64geodsp_start:
65
66%include "diskboot.inc"
67
68HEXDATE         equ 1
69
70                section .init
71sector_1:
72ldlinux_sys:
73                alignz 8
74ldlinux_magic   dd LDLINUX_MAGIC
75                dd LDLINUX_MAGIC^HEXDATE
76
77
78ldlinux_ent:
79
80get_geo:                ; DL and ES ready
81                mov ah,08h
82                mov di,0
83                call xint13
84write_geo:
85                jc .bad_geo
86                mov si,s_chs
87                call writestr_early
88                call write_chs
89                call crlf
90                jmp short .done
91.bad_geo:
92.done:
93
94                mov bx,dbuf
95get_h1c:                ; 0,1,1
96                mov cx,0001h
97                mov dh,01h
98                call getonesec_chs
99                call write_chs_lba
100get_c1c:                ; 1,0,1
101                mov cx,0101h
102                mov dh,00h
103                call getonesec_chs
104                call write_chs_lba
105
106
107
108; Do we have EBIOS (EDD)?
109;
110edd:
111.check:
112                mov bx,55AAh
113                mov ah,41h              ; EDD existence query
114                call xint13
115                jc .noedd
116                cmp bx,0AA55h
117                jne .noedd
118                test cl,1               ; Extended disk access functionality set
119                jz .noedd
120                ;
121                ; We have EDD support...
122                ;
123                mov bx,dbuf     ; ES should still be safe.
124                xor edx,edx
125                mov dword [s_chs],m_EDD_SP
126.get_lba63:
127                mov eax,63      ; Same length as mov al,64; movzx eax,al
128                call getonesec_ebios
129                jc .bad_edd     ;read error
130                call write_edd_lba
131.get_lba16065:
132                mov eax,16065
133                call getonesec_ebios
134                jc .bad_edd     ;read error
135                call write_edd_lba
136.good_edd:
137                mov dword [s_type],m_EDD0
138.bad_edd:
139.noedd:
140.end:
141
142write_final_type:
143                mov si,s_typespec
144                call writestr_early
145                jmp kaboom
146
147;
148; getonesec_chs:
149;
150; CX,DH specifies CHS address
151;
152getonesec_chs:  ; We could use an xchg and get a loop
153;               mov cx,retry_count
154.retry:
155                pushad
156                mov ax,0201h            ; Read one sector
157                call xint13
158                popad
159                jc .error
160                ret
161
162.error:
163;               loop .retry
164                ; Fall through to disk_error
165                jmp disk_error
166
167%include "geodsplib.inc"
168
169;
170;
171; writestr_early: write a null-terminated string to the console
172;           This assumes we're on page 0.  This is only used for early
173;           messages, so it should be OK.
174;
175writestr_early:
176                pushad
177.loop:          lodsb
178                and al,al
179                jz .return
180                mov ah,0Eh              ; Write to screen as TTY
181                mov bx,0007h            ; Attribute
182                int 10h
183                jmp short .loop
184.return:        popad
185                ret
186
187SuperInfo:      zd 32                   ; The first 16 bytes expanded 8 times
188
189                ; This fails if the sector overflowsg
190                zb 400h-($-$$)
191end:
192
193                absolute 4*1Eh
194fdctab          equ $
195fdctab1         resw 1
196fdctab2         resw 1
Note: See TracBrowser for help on using the repository browser.