…Show last 241 lines
61seg000:7C68 ; ---------------------------------------------------------------------------
62seg000:7C68
63seg000:7C68 loc_7C68: ; CODE XREF: seg000:7C63j
64seg000:7C68 mov bx, 40h
65seg000:7C6B mov es, bx
66seg000:7C6D assume es:nothing
67seg000:7C6D mov bx, es:10h
68seg000:7C72 and bx, 30h
69seg000:7C76 cmp bx, 30h
70seg000:7C79 jnz short loc_7C7E
71seg000:7C7B call sub_7D4E
72seg000:7C7E
73seg000:7C7E loc_7C7E: ; CODE XREF: seg000:7C79j
74seg000:7C7E mov ah, 0
75seg000:7C80 mov al, 4
76seg000:7C82 int 10h ; - VIDEO - SET VIDEO MODE
77seg000:7C82 ; AL = mode
78seg000:7C84 xor bp, bp
79seg000:7C86 mov ax, 0F000h
80seg000:7C89 mov ds, ax
81seg000:7C8B assume ds:nothing
82seg000:7C8B mov si, 0FFFEh
83seg000:7C8E lodsb
84seg000:7C8F cmp al, 0FDh
85seg000:7C91 jnz short loc_7C98
86seg000:7C93 mov bp, 1
87seg000:7C96 jmp short loc_7CA0
88seg000:7C98 ; ---------------------------------------------------------------------------
89seg000:7C98
90seg000:7C98 loc_7C98: ; CODE XREF: seg000:7C91j
91seg000:7C98 mov dx, 3D8h
92seg000:7C9B mov al, 2
93seg000:7C9D out dx, al
94seg000:7C9E jmp short loc_7CAA
95seg000:7CA0 ; ---------------------------------------------------------------------------
96seg000:7CA0
97seg000:7CA0 loc_7CA0: ; CODE XREF: seg000:7C96j
98seg000:7CA0 mov dx, 3DAh
99seg000:7CA3 in al, dx ; Video status bits:
100seg000:7CA3 ; 0: retrace. 1=display is in vert or horiz retrace.
101seg000:7CA3 ; 1: 1=light pen is triggered; 0=armed
102seg000:7CA3 ; 2: 1=light pen switch is open; 0=closed
103seg000:7CA3 ; 3: 1=vertical sync pulse is occurring.
104seg000:7CA4 xor al, al
105seg000:7CA6 out dx, al ; Video: bits 0-1 control
106seg000:7CA6 ; Feature Control outputs FC0 and FC1
107seg000:7CA7 mov al, 2
108seg000:7CA9 out dx, al ; Video: bits 0-1 control
109seg000:7CA9 ; Feature Control outputs FC0 and FC1
110seg000:7CAA
111seg000:7CAA loc_7CAA: ; CODE XREF: seg000:7C9Ej
112seg000:7CAA mov ax, 0B800h
113seg000:7CAD mov es, ax
114seg000:7CAF assume es:nothing
115seg000:7CAF mov bx, 0
116seg000:7CB2 mov dx, 0
117seg000:7CB5 mov ch, 1
118seg000:7CB7 mov cl, 1
119seg000:7CB9 mov al, 9
120seg000:7CBB mov ah, 2
121seg000:7CBD int 13h ; DISK - READ SECTORS INTO MEMORY
122seg000:7CBD ; AL = number of sectors to read, CH = track, CL = sector
123seg000:7CBD ; DH = head, DL = drive, ES:BX -> buffer to fill
124seg000:7CBD ; Return: CF set on error, AH = status, AL = number of sectors read
125seg000:7CBF jb short loc_7CDB
126seg000:7CC1 mov bx, 1200h
127seg000:7CC4 mov al, 9
128seg000:7CC6 mov ch, 2
129seg000:7CC8 mov cl, 1
130seg000:7CCA mov ah, 2
131seg000:7CCC int 13h ; DISK - READ SECTORS INTO MEMORY
132seg000:7CCC ; AL = number of sectors to read, CH = track, CL = sector
133seg000:7CCC ; DH = head, DL = drive, ES:BX -> buffer to fill
134seg000:7CCC ; Return: CF set on error, AH = status, AL = number of sectors read
135seg000:7CCE jb short loc_7CDB
136seg000:7CD0 mov bx, 2400h
137seg000:7CD3 mov ch, 3
138seg000:7CD5 mov al, 9
139seg000:7CD7 mov ah, 2
140seg000:7CD9 int 13h ; DISK - READ SECTORS INTO MEMORY
141seg000:7CD9 ; AL = number of sectors to read, CH = track, CL = sector
142seg000:7CD9 ; DH = head, DL = drive, ES:BX -> buffer to fill
143seg000:7CD9 ; Return: CF set on error, AH = status, AL = number of sectors read
144seg000:7CDB
145seg000:7CDB loc_7CDB: ; CODE XREF: seg000:7CBFj
146seg000:7CDB ; seg000:7CCEj
147seg000:7CDB jb short loc_7D4C
148seg000:7CDD mov bx, 3600h
149seg000:7CE0 mov ch, 4
150seg000:7CE2 mov al, 5
151seg000:7CE4 mov ah, 2
152seg000:7CE6 int 13h ; DISK - READ SECTORS INTO MEMORY
153seg000:7CE6 ; AL = number of sectors to read, CH = track, CL = sector
154seg000:7CE6 ; DH = head, DL = drive, ES:BX -> buffer to fill
155seg000:7CE6 ; Return: CF set on error, AH = status, AL = number of sectors read
156seg000:7CE8 jb short loc_7D4C
157seg000:7CEA test bp, bp
158seg000:7CEC jnz short loc_7CF6
159seg000:7CEE mov dx, 3D9h
160seg000:7CF1 mov al, 21h
161seg000:7CF3 out dx, al
162seg000:7CF4 jmp short loc_7D06
163seg000:7CF6 ; ---------------------------------------------------------------------------
164seg000:7CF6
165seg000:7CF6 loc_7CF6: ; CODE XREF: seg000:7CECj
166seg000:7CF6 mov dx, 3DAh
167seg000:7CF9 in al, dx ; Video status bits:
168seg000:7CF9 ; 0: retrace. 1=display is in vert or horiz retrace.
169seg000:7CF9 ; 1: 1=light pen is triggered; 0=armed
170seg000:7CF9 ; 2: 1=light pen switch is open; 0=closed
171seg000:7CF9 ; 3: 1=vertical sync pulse is occurring.
172seg000:7CFA mov al, 2
173seg000:7CFC out dx, al ; Video: bits 0-1 control
174seg000:7CFC ; Feature Control outputs FC0 and FC1
175seg000:7CFD mov al, 1
176seg000:7CFF out dx, al ; Video: bits 0-1 control
177seg000:7CFF ; Feature Control outputs FC0 and FC1
178seg000:7D00 mov al, 10h
179seg000:7D02 out dx, al ; Video: bits 0-1 control
180seg000:7D02 ; Feature Control outputs FC0 and FC1
181seg000:7D03 mov al, 1
182seg000:7D05 out dx, al ; Video: bits 0-1 control
183seg000:7D05 ; Feature Control outputs FC0 and FC1
184seg000:7D06
185seg000:7D06 loc_7D06: ; CODE XREF: seg000:7CF4j
186seg000:7D06 test bp, bp
187seg000:7D08 jnz short loc_7D12
188seg000:7D0A mov dx, 3D8h
189seg000:7D0D mov al, 0Ah
190seg000:7D0F out dx, al
191seg000:7D10 jmp short loc_7D1C
192seg000:7D12 ; ---------------------------------------------------------------------------
193seg000:7D12
194seg000:7D12 loc_7D12: ; CODE XREF: seg000:7D08j
195seg000:7D12 mov dx, 3DAh
196seg000:7D15 in al, dx ; Video status bits:
197seg000:7D15 ; 0: retrace. 1=display is in vert or horiz retrace.
198seg000:7D15 ; 1: 1=light pen is triggered; 0=armed
199seg000:7D15 ; 2: 1=light pen switch is open; 0=closed
200seg000:7D15 ; 3: 1=vertical sync pulse is occurring.
201seg000:7D16 xor al, al
202seg000:7D18 out dx, al ; Video: bits 0-1 control
203seg000:7D18 ; Feature Control outputs FC0 and FC1
204seg000:7D19 mov al, 0Ah
205seg000:7D1B out dx, al ; Video: bits 0-1 control
206seg000:7D1B ; Feature Control outputs FC0 and FC1
207seg000:7D1C
208seg000:7D1C loc_7D1C: ; CODE XREF: seg000:7D10j
209seg000:7D1C xor ax, ax
210seg000:7D1E mov es, ax
211seg000:7D20 assume es:nothing
212seg000:7D20 mov bx, 0F000h
213seg000:7D23 mov cx, 270Ah
214seg000:7D26 mov dx, 0
215seg000:7D29
216seg000:7D29 loc_7D29: ; CODE XREF: seg000:7D36j
217seg000:7D29 mov ax, 201h
218seg000:7D2C int 13h ; DISK - READ SECTORS INTO MEMORY
219seg000:7D2C ; AL = number of sectors to read, CH = track, CL = sector
220seg000:7D2C ; DH = head, DL = drive, ES:BX -> buffer to fill
221seg000:7D2C ; Return: CF set on error, AH = status, AL = number of sectors read
222seg000:7D2E jb short loc_7D4C
223seg000:7D30 add cl, 0Ah
224seg000:7D33 cmp cl, 5Ah
225seg000:7D36 jbe short loc_7D29
226seg000:7D38 mov cl, 6
227seg000:7D3A mov ch, 4
228seg000:7D3C mov dx, 0
229seg000:7D3F mov al, 4
230seg000:7D41 mov ah, 2
231seg000:7D43 int 13h ; DISK - READ SECTORS INTO MEMORY
232seg000:7D43 ; AL = number of sectors to read, CH = track, CL = sector
233seg000:7D43 ; DH = head, DL = drive, ES:BX -> buffer to fill
234seg000:7D43 ; Return: CF set on error, AH = status, AL = number of sectors read
235seg000:7D45 jb short loc_7D4C
236seg000:7D47 mov ax, 0F000h
237seg000:7D4A push ax
238seg000:7D4B retn
239seg000:7D4C ; ---------------------------------------------------------------------------
240seg000:7D4C
241seg000:7D4C loc_7D4C: ; CODE XREF: seg000:7C65j
242seg000:7D4C ; seg000:loc_7CDBj ...
243seg000:7D4C int 19h ; DISK BOOT
244seg000:7D4C ; causes reboot of disk system
245seg000:7D4E
246seg000:7D4E ; =============== S U B R O U T I N E =======================================
247seg000:7D4E
248seg000:7D4E
249seg000:7D4E sub_7D4E proc near ; CODE XREF: seg000:7C7Bp
250seg000:7D4E mov ah, 0
251seg000:7D50 mov al, 2
252seg000:7D52 int 10h ; - VIDEO - SET VIDEO MODE
253seg000:7D52 ; AL = mode
254seg000:7D54 mov cx, 0F0Fh
255seg000:7D57 mov ah, 1
256seg000:7D59 int 10h ; - VIDEO - SET CURSOR CHARACTERISTICS
257seg000:7D59 ; CH bits 0-4 = start line for cursor in character cell
258seg000:7D59 ; bits 5-6 = blink attribute
259seg000:7D59 ; CL bits 0-4 = end line for cursor in character cell
260seg000:7D5B mov dh, 0Ch
261seg000:7D5D mov dl, 0
262seg000:7D5F mov bh, 0
263seg000:7D61 mov ah, 2
264seg000:7D63 int 10h ; - VIDEO - SET CURSOR POSITION
265seg000:7D63 ; DH,DL = row, column (0,0 = upper left)
266seg000:7D63 ; BH = page number
267seg000:7D65 push cs
268seg000:7D66 pop ds
269seg000:7D67 assume ds:nothing
270seg000:7D67 lea si, aThisProductReq ; " This product requires an "...
271seg000:7D6B
272seg000:7D6B loc_7D6B: ; CODE XREF: sub_7D4E+29j
273seg000:7D6B lodsb
274seg000:7D6C and al, 7Fh
275seg000:7D6E jz short loc_7D79
276seg000:7D70 mov ah, 0Eh
277seg000:7D72 mov bx, 7
278seg000:7D75 int 10h ; - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE)
279seg000:7D75 ; AL = character, BH = display page (alpha modes)
280seg000:7D75 ; BL = foreground color (graphics modes)
281seg000:7D77 jmp short loc_7D6B
282seg000:7D79 ; ---------------------------------------------------------------------------
283seg000:7D79
284seg000:7D79 loc_7D79: ; CODE XREF: sub_7D4E+20j
285seg000:7D79 mov bx, 40h ; BIOS data: https://stanislavs.org/helppc/bios_data_area.html
286seg000:7D7C mov es, bx
287seg000:7D7E assume es:nothing
288seg000:7D7E and byte ptr es:10h, 0CFh ; 40:10 2 bytes Equipment list flags
289seg000:7D84 or byte ptr es:10h, 20h
290seg000:7D8A retn
291seg000:7D8A sub_7D4E endp
292seg000:7D8A
293seg000:7D8A ; ---------------------------------------------------------------------------
294seg000:7D8B db 11h
295seg000:7D8C db 11h
296seg000:7D8D aThisProductReq db ' This product requires an IBM Color/Graphics Adapter'
297seg000:7D8D ; DATA XREF: sub_7D4E+19o
298seg000:7D8D db 0
299seg000:7DCF db 31h dup(0) ; fill to reach 512 bytes
300seg000:7DCF seg000 ends