[release] Update version information for 0.9.4 release
[gpxe.git] / contrib / hdload / hdload.S
blob3bb5649bdf1562454fbf6072f6e9f9f074fbe908
1 #if     !defined(USE_NASM) && !defined(USE_AS86)\r
2 #define USE_AS86\r
3 #endif\r
4 \r
5 #ifdef  USE_AS86\r
6 #define CON(x)          *x\r
7 #define BCON(x)         *x\r
8 #define WCON(x)         *x\r
9 #define LOC(x)          x\r
10 #define BLOC(x)         byte ptr x\r
11 #define WLOC(x)         word ptr x\r
12 #define JMP(x)          jmp x\r
13 #define STRDECL(s)      .ascii  s\r
14 #define SEGCS           seg     cs\r
15 #define SEGES           seg     es\r
16 #define ALIGN(x)        .align  x\r
17 #define SPACE(x)        .space  x\r
18 #endif\r
20 #ifdef  USE_NASM\r
21 #define CON(x)          x\r
22 #define BCON(x)         byte x\r
23 #define WCON(x)         word x\r
24 #define LOC(x)          [x]\r
25 #define BLOC(x)         byte [x]\r
26 #define WLOC(x)         word [x]\r
27 #define JMP(x)          jmp short x\r
28 #define STRDECL(s)      db      s\r
29 #define SEGCS           cs\r
30 #define SEGES           es\r
31 #define ALIGN(x)        align x, db 0\r
32 #define SPACE(x)        times x db 0\r
33 #endif\r
35 ROMLOAD equ     0x5000\r
37 start:\r
38         cli\r
39         xor     ax, ax\r
40         mov     ss, ax\r
41         mov     sp, CON(0x7C00)\r
42         mov     si, sp\r
43         mov     es, ax\r
44         mov     ds, ax\r
45         sti\r
46         cld\r
47         mov     di, CON(0x600)\r
48         mov     cx, CON(0x100)\r
49         rep\r
50         movsw\r
51         db      0xEA\r
52         dw      jump\r
53         dw      0\r
54 jump:\r
55         mov     si, CON(Hlaska)\r
56         call    print\r
58         ; rozmery prvniho HD\r
59         mov     ah, CON(8)\r
60         mov     dl, CON(0x80)\r
61         int     0x13\r
62         jc      chyba\r
63         ; dh - H, cx - CS\r
65         ; prvi stopa obsahuje bootrom, tak ji natahneme do RAM\r
66         mov     ah, CON(2)\r
67         mov     al, cl\r
68         and     al, CON(0x3F)\r
69         dec     al\r
70         mov     dx, CON(0x80)\r
71         mov     cx, CON(2)\r
72         mov     bx, CON(ROMLOAD)\r
73         mov     es, bx\r
74         xor     bx, bx\r
75         int     0x13\r
76         jc      chyba\r
78         ; hromada kodu podle zdrojaku netboot\r
79         xor     di, di\r
80         mov     es, di\r
81         mov     di, CON(0x380)\r
82         push    di\r
83         mov     cx, CON(10)\r
84         cld\r
85         rep\r
86         stosw\r
87         pop     di\r
88 #ifdef  USE_AS86\r
89         mov     word ptr [ di ], CON(0x5a5a)\r
90         mov     byte ptr [ di + 2 ], CON(0x50)\r
91         mov     word ptr [ di + 0x10 ], CON(0xFFFF)\r
92         mov     word ptr [ di + 0x12 ], CON(0xFFFF)\r
93 #endif\r
94 #ifdef  USE_NASM\r
95         mov     word [ di ], CON(0x5a5a)\r
96         mov     byte [ di + 2 ], CON(0x50)\r
97         mov     word [ di + 10h ], CON(0xFFFF)\r
98         mov     word [ di + 12h ], CON(0xFFFF)\r
99 #endif\r
101         ; navratova adresa, kdyby nezabrala ROM\r
102         SEGCS\r
103         mov     WLOC(OfsErr), CON(RomErr)\r
104         push    cs\r
105         push    WCON(chyba)\r
106         mov     ax, CON(ROMLOAD)\r
107         mov     es, ax\r
108         push    es\r
109         ; kouzelny jump....\r
110         SEGES\r
111         mov     si, [ 0x1a ]\r
112         SEGES\r
113 #ifdef  USE_AS86\r
114         push    word ptr [ si + 0x1a ] ; ...do bootrom v RAM\r
115 #endif\r
116 #ifdef  USE_NASM\r
117         push    word [ si + 0x1a ] ; ...do bootrom v RAM\r
118 #endif\r
119         retf\r
121 chyba:\r
122         SEGCS\r
123         mov     si, LOC(OfsErr)\r
124         call    print\r
125         mov     si, CON(CRLF)\r
126         call    print\r
127         JMP(chyba)\r
129 print:\r
130         lodsb\r
131         cmp     al,CON(0)\r
132         je      navrat\r
133         push    si\r
134         mov     bx,CON(7)\r
135         mov     ah,CON(0x0E)\r
136         int     0x10\r
137         pop     si\r
138         JMP(print)\r
140 navrat:\r
141         ret\r
143 Hlaska: db      13, 10\r
144         STRDECL('HD Net Loader v1.0 (c) poli 1999')\r
145         db      13, 10, 0\r
146 CRLF:   db      13, 10, 0\r
147 OfsErr: dw      Error\r
148 Error:  STRDECL('Error load from HD !')\r
149         db      0\r
150 RomErr: STRDECL('ROM Error !')\r
151         db      0\r
153 mbrend:\r
154         ret\r
156 #ifdef  USE_AS86\r
157         org     510\r
158 #endif\r
159 #ifdef  USE_NASM\r
160         times   510-($-$$) db 0\r
161 #endif\r
162         dw      0xAA55\r