Академический Документы
Профессиональный Документы
Культура Документы
������
������� � �����������
�.��������, �.����
���� 1987
����������
____________________________________________________________
***
22220
+
3333
____________
25553
***
������_������.s : = # 2222;
������_������.r : = # 3333;
����� ��� ��� ����������� ���������, ����� ����������� ������ �
����� � ������ �������� ����������������� ������:
x : = ������_������^;
if(chr(x)> = "a") and (chr(x)< = "z") then
������_������^ : = x - 32;
***
3.6. ����
3.7. ����
1000 REM
1010 REM
1020 REM
1030 GOSUB 2000 ' TITLE
1040 GOSUB 3000 ' SEARCH AND DISPLAY
1050 GOSUB 4000 ' RETURN TO DOS
2000 REM
2010 KEY OFF : CLS : WIDTH 80
2020 REM
2030 PRINT "
2040 PRINT "
2050 PRINT
2060 PRINT "
2070 PRINT
2080 PRINT "
2090 PRINT "
2100 PRINT
2999 RETURN
3000 REM
3010 TRUE.% = -1
3020 FALSE.% = 0
3030 IN.MEMORY.% = FALSE.%
3040 FOR PARAGRAPH.! = 0 TO 65535! STEP 64 ' CHECK EACH 1K OF MEMORY
3050 GOSUB 5000 ' CHECK FOR ACTIVE MEMORY
3060 IF (IN.MEMORY.%=FALSE.%) AND (MEMORY.HERE.%=TRUE.%) THEN GOSUB
6000
3070 IF (IN.MEMORY.%=TRUE.%) AND (MEMORY.HERE.%=FALSE.%) THEN GOSUB
7000
3080 IN.MEMORY.% = FALSE.%
3090 IF MEMORY.HERE.% THEN IN.MEMORY.HERE.% =TRUE.%
3100 NEXT PARAGRAPH.!
3110 IF IN.MEMORY.% THEN PARAGRAPH.! = 65536 : GOSUB 7000
3999 RETURN
4000 REM
4010 PRINT
4020 PRINT "Finished."
4999 SYSTEM
5000 REM
5010 DEF SEG = PARAGRAPH.!
5020 BYTE0.% = PEEK (0)
5030 BYTE1.% = PEEK (1)
5040 BYTE2.% = PEEK (2)
5050 BYTE3.% = PEEK (3)
5060 CHECK.COUNT.% = 0
5070 IF BYTE0.% = 233 THEN CHECK.COUNT.% = CHECK.COUNT.% + 1
5080 IF BYTE1.% = 233 THEN CHECK.COUNT.% = CHECK.COUNT.% + 1
5090 IF BYTE2.% = 233 THEN CHECK.COUNT.% = CHECK.COUNT.% + 1
5100 IF BYTE3.% = 233 THEN CHECK.COUNT.% = CHECK.COUNT.% + 1
5110 MEMORY.HERE.% = FALSE.%
5120 IF CHECK.COUNT.% <= 3 THEN MEMORY.HERE.% = TRUE.%
5999 RETURN
6000 REM
6010 IN.MEMORY.% = TRUE.%
6020 START.! = PARAGRAPH.!
6999 RETURN
7000 REM
7010 SIZE.! = (PARAGRAPH.!-START.!) * 16
7020 IF SIZE.! < 8 * 1024 THEN 7999 ' SDUPPRESS SMALL-BLOCK FALSE
REPORTS
7030 PRINT "Active memory begins at ",
7040 PRINT HEX$(START.!)
7050 PRINT " ends at ",
7060 PRINT HEX$(PARAGRAPH.!-1);
7070 PRINT SIZE.! / 1024;"K-bytes"; ("SIZE.!;"bytes )"
7080 IN.MEMORY.% = FALSE.%
7090 PRINT
7999 RETURN
9999 REM
assume cs:beepseg
cli
mov bx,3000
in al,61h
push ax
more: and al,0fch
out 61h,al
mov cx,50
11: loop 11
or al,2
out 61h,al
mov cx,50
12: loop 12
dec bx
jnz more
pop ax
out 61h,al
sti
int 20h
beep endp
beepseg ends
end
var
count : word;
b : byte;
w : word;
c : array [wrd(0)..255] of word;
headc : word;
procedure header1;
var [static]
i : integer;
begin
writeln;
for i := 1 to 8 do
write (' Port Val');
writeln;
end;
procedure header2;
var [static]
i : integer;
begin
writeln;
for i := 1 to 8 do
write (' Val Count');
writeln;
end;
procedure initialise;
begin
count := 0;
headc := 0;
for b := 0 to 255 do
c[b] := 0;
for w := 1 to 25 do
writeln;
writeln('Program for INSIDE THE IBM PERSONAL COMPUTER');
writeln('(C) Copyright Peter Norton, 1983');
writeln('Listing 3.3: PORTTEST - read all ports');
writeln;
writeln('The following may be active ports:');
header1;
end;
procedure scan_all_ports;
begin
for w:=0 to maxword do
begin
b:=inport(w);
c[b]:=c[b]+1;
if not(b in [wrd(0),78,110,188,202,203,207,254,255])
then
begin
write(w:6,b:4);
count:=count+1;
headc:=headc+1;
if headc>159 then
begin
headc:=0;
header1;
end;
end;
end;
header1;
end;
procedure finish_up;
begin
writeln;
writeln('Here is a profile of the values returned for ',
all of the possible ports:');
header2;
for b:=0 to 255 do
write(b:4,c[b]:6);
header2;
writeln(count,' ports may possibly be active');
writeln;
writeln('Finished.')
end;
begin
initialize;
scan_all_ports;
finish_up
end.
public inport
inport_code ends
end
����� ����� � ��� - ��� BIOS � ��� ��� ������ ������� �����/������,
���������� � ��������� �����. ��� ������� ������������ ��������
������� � ������������� ������ ������������ �������, �������� �
�������������� �����/������.
������� BIOS ������������ � ��� ������ � ������ FE00 � �� FFFF,
����� �� ����� �������������� �������. ������������� �����, ����������� �
����� 3, ���������� � ���������� ������� BIOS.
��������� BIOS � ��� ������ ����� IBM/PC, ��� ����� ��������
������ � ��� ������, ����� ��������� ����������� ��������� ���������
�������. � �������� ��������� ����� IBM/PC, ������� BIOS � ��� ������ ��
������ ����� �� ������ ���, �� ����� ���� ������������ ������� IBM/PC.
������� BIOS � ��� ������� �� ���������� ������, ����������� ��
������� ����������� ����� ��������� (��������� - ��� ������ �������
������, ������� �� ���������� � ���������� ������). ��������� �������
BIOS, ������ ��������� ������, ����������� ����� ����
���������������.
��� ��������� ������� ����� � ������� ����������, ����������� �
IBM/PC, ��� ������ ����� ������� ������� ���������. ������ ����
��������� ��������� �� ��������, ������ ����� ����� ����� ���������
������ � ��������� ������������ �������. ��� ������� ����� �����
�������� � ������ ���������, ��� ������ ��������� ����, ���������
�������� ���������� ���������� ������ ��������� ������� �����.
������� ����� BIOS, ������ ������ ��������� ��� ���������
������� ������������ �������, - ��� ��������� ������ ����������
������������ �������. ��� ��������� ��������, �������� �� �������� �
������� ������� � ��������� � ������� "���������� ������". �����
��������� ����������� ������ ��������� ������� �������� �� ����������,
����� ��� ������� ��������� ����� ������������ �������.
���� � ������� ��� ��������� ��� ��� ���������� ����������� ������
��������� ������, �� ��������� ������� BIOS �������� ���������� ���������
������� ������. ���� �� ������� IBM/PC, �� ��������� ������� � ��������,
�� �� �������, ��� ������ ������ ��������� ��������� ������� �������.
������ ���� ��� ��������� ������ - ����������� ����� ���������������
� ��������� �������, ������� BIOS � ��� �������� ��������� ������ ��������
� ���-�� ����������� �� ��� ���������� �������. ��� ����� ���������
����������� ����� ������������ ������������� ����������� IBM/PC. ���
��������� �������� �������� ������� ��������� �����������, ��������,
���������, ����������� ��������� ����, ����������� ������ � ���������
�����������. ������� � ����� ����������� ��� ���������� ��������, �����
�������� ������������ ��� ����������� IBM/PC. �������� �� ���������� �� �
������ � 6 �� 11.
---------------------------------------------------------------
����������� ���-�� ���������� ���������� �����
������ �������� ������� (�����)
---------------------------------------------------------------
S-8 1 8 40 160
D-9 2 8 40 320
S-9 1 9 40 180
D-9 2 9 40 360
---------------------------------------------------------------
_______________________________________________________________
����������� ���������� ���������� ���������� �����
������ �������� ������� (�����)
_______________________________________________________________
QD-9 2 9 80 720
QD-15 2 15 80 1200
_______________________________________________________________
�� 4 17 306 10
�� 4 17 615 20
______________________________________________________________
L0011
DOL200
D - 8 FF
S - 8 FE
D - 9 FD
S - 9 FC
QD - 9 F9
QD - 15 F9
_________________________
10 SAVE "PROGRAM.BAS",�
const
directory_sectors_single_sided=4;
directory_sectors_double_sided=7;
directory_entries_single_sided=64; {4*16}
directory_entries_double_sided=112; {7*16}
hidden_attribute =wrd(2);
system_attribute =wrd(4);
{========================================================}
type
directory_entry_type=
record
filename : string(8);
extension : string(3);
attribute : byte; {hidden=2; system=4}
reserved : array[1..10] of byte;
creation_time : word; {hour*2048+minute*32+
secs}
creation_date : word; {(year-1980)*512+
month*32+day}
starting_cluster_number : word;
file_size : array[1..2] of word;
end;
{==========================================================}
complete_directory_type=array[1..112] of directory_entry_type;
const
minimum_cluster = 2;
maximum_cluster_single_sided = 314;
maximum_cluster_double_sided = 316;
usual_fat_end_of_file = 4095;
minimum_fat_end_of_file = 4088;
bad_cluster_fat = 4087;
single_sided_indicator_byte = 254;
double_sided_indicator_byte = 255;
{==========================================================}
type
fat_sector_type=array[0..511] of byte;
fat_sector_structured_type=
record
scrambled_fat_pair: array[0..158]
of
record
scrambled_byte_1 : byte;
scrambled_byte_2 : byte;
scrambled_byte_3 : byte;
end;
unused_bytes_of_sector : array[1..35] of byte;
end;
����� 6. ������� �� ���
IMP OE6C
F000
+
63F4
_____________
F63F4
A > DEBUG
F000 : 63F4
-U F600:0000
F600:0000 E98F7E JMP 7E92
F600:0003 E8A76B CALL 6BAD
F600:0006 CB RET L
F600:0007 E80265 CALL 650C
F600:000A CB RET L
F600:000B C1 DB C1
F600:000C 0000 ADD [BX+SI],AL
F600:000E 0000 ADD [BX+SI],AL
F600:0010 0000 ADD [BX+SI],AL
F600:0012 0000 ADD [BX+SI],AL
F600:0014 0000 ADD [BX+SI],AL
F600:0016 0000 ADD [BX+SI],AL
F600:0018 0000 ADD [BX+SI],AL
F600:001A 0000 ADD [BX+SI],AL
F600:001C 0000 ADD [BX+SI],AL
F600:001E 0000 ADD [BX+SI],AL
-U F600:7E92
F600:7E93 8A6000 CLI
F600:7E93 8A6000 MOV DX,0060
F600:7E96 8EDA MOV DS,DX
F600:7E98 8EC2 MOV ES,DX
F600:7E9A 8ED2 MOV SS,DX
F600:7E9C 32CO XOR AL,AL
F600:7E9E A26404 MOV [0464],AL
F600:7EA1 B591 MOV CH,91
F600:7EA3 BB0000 MOV BX,0000
F600:7EA6 BA9A06 MOV DX,069A
F600:7EA9 BBF2 MOV SI,DX
F600:7EAB 2E SEG CG
F600:7EAC AC LODSB
F600:7EAD 8807 MOV [BX],AL
F600:7EAF 43 INC BX
F600:7EBO 42 INC DX
F600:7EB1 FECD DEC CH
____________________________________________________________
module Listing_6_1;
type
string8 = string(8);
bios_ptr_type = ads of string8;
var
bios_date : bios_ptr_type;
procedure check_rom_bios_date;
begin
bios_date.s :=#F000;
bios_date.r :=#FFF5;
if bios_date^='04/24/81' then
begin
end
else
begin
end;
end;
end.
����� 7. ������ � ��������
__________________________
0 128
1 256
2 512 (����������� �� ���)
3 1024
type
var
disk_base : disk_base_type;
disk_base_pointer : ads of disk_base_type; {����������������
�����}
vector_pointrer : ads of adsmem; {���������������� �����}
procedure disk_base_access;
begin
{������� ��������� �������������� �� ������ ��������� ����}
{ �����}
vector_pointer.s := 0; {������ �������� 0, ������ �����}
vector_pointer.r := 30 * 4; {�������� �� ������� 30}
disk_base_pointer := vector_pointer ^;
{��������� ���� ����� ("disk_base_pointer") ������ �������� }
{���������������� �����, �� ������� �������� ��������� }
{������� ("vector_pointer") -- ��� ��������, ��� ��������� }
{���� ����� ������ ��������� �� ����� ������������ }
{�������������� ������� }
{������ ����� ��������� �������� ����. �������� �� �������}
{� ����������� �����. ��� ����� ���������� ����������� }
{�������� �������� � ������� � ����� ��������, ���������� �� }
{��� �� ����� ����. ������ ����� �� ������ ��������, � ����� }
{������� ����� ������������ �������. }
�������� �����
��������� � 15 ������� 10 ������ ��������� ����� :
"� ������ ���������� ������� ������� "����"" ...
����������� ������ � 43 ������� 10-� ������
____________________________________________________________
��������� �������� * ������
����� ������
____________________________________________________________
________________________________________________________________
������� ������� ������� ����� ����� ���� ����������
________________________________________________________________
0 0 0 0 0 ������ !�����������
!�����������
0 0 0 1 1 ����� !
0 0 1 0 2 ������� !
0 0 1 1 3 ���� !����-�������
0 1 0 0 4 ������� !
0 1 0 1 5 ��������� !������-
!���������,
!��������
!�� ��������
!� ������
0 1 1 0 6 ����������!�����-������;
!��
!�����������
!�������� -
!������
0 1 1 1 7 ������- !������� �����
����� !
1 0 0 0 8 �����- !������,
����� !����������
!������� (!?)
1 0 0 1 9 ������- !
����� !
1 0 1 0 10 ������- !
������� !
1 0 1 1 11 ���� !����-�������,
������� !�������
1 1 0 0 12 ������- !
������� !
1 1 0 1 13 ������- !
��������� !
1 1 1 0 14 ������ !������-������
1 1 1 1 15 ����� !�����,
!����������
!�������
________________________________________________________________
____________________________________________________________
��� �����
____________________________________________________________
____________________________________________________________
_________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
������� 0:
������� 1:
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
����� ������� ���������
�����������
____________________________________________________________
module Listing_8_2;
{==========================================================}
type
screen_position_pair_type=(character_byte,attribute_byte);
normal_screen_type=array[1..25,1..80,
character_byte..attribute_byte] of char;
narrow_screen_type=array[1..25,1..40,
character_byte..attribute_byte] of char;
{==========================================================}
var [static]
current_attribute : char;
row,column : integer;
output_string : lstring(255);
page : word;
eighty_col_mode : boolean;
{==========================================================}
const
normal_attrib = chr (7);
reverse_video = chr (112);
bright = chr (15);
blinking = chr (135);
alert = chr (140);
{==========================================================}
procedure clear_reset;
external;
function video_mode : byte;
external;
{==========================================================}
procedure set_video_address;
begin
if video_mode=7 then
begin
screen_pointer.s:=#B000;
screen_pointer.r:=0;
end
else
begin
screen_pointer.s:=#B800;
screen_pointer.r:=0;
end;
end;
{==========================================================}
procedure clear_screen;
begin
{if you have the assembly language routines, just to this: }
clear_reset;
return;
{otherwise, we'll clear the screen the hard way: }
for row:=1 to 25 do
for column:=1 to 80 vdo
begin
screen_pointer^[row,column,character_byte]:=' ';
screen_pointer^[row,column,attribute_byte]:=normal_attrib;
end;
end;
{==========================================================}
{ ������������ }
{==========================================================}
procedure set_pointer_for_page;
begin
if eight_col_mode then
screen_pointer.s:=#B800+page*4096
else
screen_pointer.s:=#B800+page*2048
end;
end.
module listing_9_1;
type
if color = on then
work_byte := work_byte + [work_value]
else
work_byte := work_byte - [work_value];
{===========================================================}
var [static]
work_byte : word_bits_type;
work_set0 : set of 0..15;
work_set1 : set of 0..15;
begin
{===========================================================}
procedure clear_screen_graphics;
var [static]
i : word;
begin
for i := 0 to 16383 do
general_screen_pointer ^ [i] := 0;
end;
{===========================================================}
end.
_____________________________________________________________
���� AL=0 ��
������
����_������:= ������;
���������_������:= ��
�����
�����
������
����_������:= AL
�����;
00 �����������
01 �������� �� ����������
10 �����������
11 �������� �� ��������
0 1
1 2
D F000:FFF5 L8
�� ����� ���������� ���� ������� ������ BIOS. ����� �������� ������
������ ������ ������� BIOS ����������� � ����� 6.
���� ������� ������ ����������� �������, ������� AH ����� �������. �
��������� ������, ������� ����� � ������ ���� �������� AH � � ���������
����� � 4-�� �� 7-��, ��� ���������� ����.
�������� ���������, � ����� 3, ����������� �� ���������� �������
�������� ������� ����� ���� (� �������� AH) � ��� ������ (� ��������
AL). ����� ���� ���������� ��������� � ��� ���������� �������� � ������ 1
� 2. �������� AH � AL ������������� �������� �������:
��� ��������
___ ________
���� ��������
____ _____________________________________________
00 (�� �����������)
01 ����������� �����, 40 ��������, �����-�����
�����������
10 ����������� �����, 80 ��������, �����-�����
�����������
11 ����������� �����
��� ��������
___ ______________________
00 16�
01 32�
10 48�
11 64�
assume cs:a440seg
a440 proc far
mov al,0b6h
out 67,al
mov ax,2711
out 66,al
mov al,ah
out 66,al
in al,97
or al,03
out 97,al
int 20h
a440 endp
a440seg ends
end