08H 09H 0AH A 0BH B 0CH C 0DH D , - : A: 7 1 = ( 0, ) B: 6 1 = 5 1 = 4 1 = 1 1 = 24, 0 = 12 0 1 = AT - IRQ8. , [1.2.3]. 4AH. , , , [2.1.7] ( ). , . . - . - . . 1AH BIOS AT, . - , - (BCD), . ASCII. 48 - ASCII, . IBM PC 0 1 1AH - BIOS. AT : 2: : CH = BCD CL = BCD DH = BCD 3: : CH = BCD CL = BCD DH = BCD DL = if daylight savings, else 1 4: : CH = BCD (19 20) CL = BCD ( 1980) DH = BCD DL = BCD 5: : CH = BCD (19 20) CL = BCD ( 1980) DH = BCD DL = BCD 6: : CH = BCD CL = BCD DH = BCD 7: ( ) , - . 23:59:59. - , 4AH . , ( , - ), 2, 4 6 . 2.1.5 . , , . - , , . - - (, , , ). , - IBM PC - - - . - . 18.2 , , ( - . [2.1.1]). , . . . , - . , , 0040:006C ( , ). 14 - . (, - , ). . SOUND [2.2.2] - , 32767. - . - , . 5- 91 (5 * 18.2). 100 SOUND 32767,91 ' 5 : 100 DEF SEG = 0 ' 110 LOWBYTE = PEEK(&H46C) ' 120 NEXTBYTE = PEEK(&H46D) ' 130 LOWCOUNT = NEXTBYTE*256 + LOWBYTE ' . BIOS, 0 1AH 1/18 . - , - . . 1AH DX ( - ), , - CX, , 32- . 5 , 91 . ;--- MOV AH,0 ; "" INT 1AH ; ADD DX,91 ; 5 . MOV BX,DX ; BX ;--- BIOS REPEAT: INT 1AH ; CMP DX,BX ; JNE REPEAT ; , ;, AT 15H, . 86H AH, CX:DX. - . 2.1.6 . - , : - . --, , . BIOS, 1/18 , ::. 100 GOSUB 500 ' 110 START = TOTAL ' START . ( , ) . 300 GOSUB 500 ' 310 TOTAL = TOTAL - START ' 320 HOURS = FIX(TOTAL/65520) ' 330 TOTAL = TOTAL - HOURS*65520 ' TOTAL 340 MINUTES = FIX(TOTAL/1092) ' 350 TOTAL = TOTAL - MINUTES*1092 ' TOTAL 360 SECONDS = FIX(TOTAL/18.2) ' 370 PRINT HOURS,MINUTES,SECONDS ' 380 END . . 500 DEF SEG = 0 ' 510 A = PEEK(&H46C) ' 520 A = PEEK(&H46D) ' 530 A = PEEK(&H46E) ' 540 TOTAL = A + B*256 + C*65535 ' TOTAL 550 RETURN ' TIMER , , 0. , . , TIMER , . N = TIMER. . 1AH (AH = 1) (AH = 0) . AH = 0. CX:DX, CX. AL - 0, 24 . , AH - 1. . . , , , . ;--- OLDCOUNT DW 0 ; ;--- MOV AH,0 ; INT 1AH ; MOV OLDCOUNT,DX ; . ( , ) . ;--- MOV AH,0 ; INT 1AH ; MOV BX,OLDCOUNT ; CMP BX,DX ; JG ADJUST ; SUB DX,BX ; JMP SHORT FIGURE_TIME ; ;--- ADJUST: MOV CX,0FFFFH ; CX SUB CX,BX ; ADD CX,DX ; MOV DX,CX ; DX ;--- FIGURE_TIME: ; 18.2 .. 2.1.7 . - , . , . . , , - , , . - , [2.1.5]. . , - , - . , 18.2 . , , . . 2-3. , , - , . ( [2.2.6] , .) . ON TIMER(n) GOSUB. , n . . n , , - , - , . n . ON TIMER , - TIMER ON. TIMER OFF - . , , , TIMER STOP. , n - , , TIMER ON. , ON TIMER : 100 ON TIMER(60) GOSUB 500 ' 60 110 TIMER ON ' . . 500 LOCATE 1,35:PRINT "TIME: ";LEFT$(TIME$,5) ' 510 RETURN ' . BIOS (1CH), , . IRET ( ); . 1CH , BIOS , . , - , 18.2 . , . 18.2 . . [1.2.3]. - , - , , . , - , , - . , . ( ) - ( 60), , . , MINUTES, 1092 . 16 - 32- . - ALARMCOUNT. 1CH , ALARM. , , ALARM 18.2 - . 1AH ALARMCOUNT. BEEP ( - - . [2.2.4]), . . (MOV AH,20H / OUT 20H,AL) - , . . ;--- MINUTES DW 0 ; ALARMCOUNT DW 0 ; ;--- CALL REQUEST_MINUTES ; MOV AX,MINUTES ; AX MOV BX,1092 ; MUL BX ; - AX ; MOV AH,0 ; INT 1AH ; , DX ; ADD AX,DX ; MOV ALARMCOUNT,AX ; ;--- PUSH DS ; MOV AX,SEG ALARM ; ALARM MOV DS,AX ; DS MOV DX,OFFSET ALARM ; MOV AL,1CH ; MOV AH,25H ; INT 21H ; POP DS ; ; ;--- ; ;--- MOV DX,0FF53H ; MOV AX,0F000H ; 1CH MOV DS,AX ; DS MOV AL,1CH ; MOV AH,25H ; INT 21H ; ;--- ALARM PROC FAR ; PUSH AX ; PUSH CX ; PUSH DX ; ;--- MOV AH,0 ; INT 1AH ; ;--- MOV CX,ALARMCOUNT ; CMP DX,CX ; JNE NOT_YET ; , ;--- , CALL BEEP ; ;--- NOT_YET: POP DX ; POP CX ; POP AX ; IRET ; ALARM ENDP ; 2.1.8 . . - . - . , . , , . 100 RANDOMIZE TIMER ' 110 PRINT RND,RND,RND ' : .7122483 .4695052 .9132487 . ( 0), , . , - 23. 3 2 ( 42H) - [2.1.1]. ( 10000, - 0 9999). , , 43H "", 4 5. . 4 5 , . IN , AL. , , . ;--- COMMAND_REG EQU 43H ; CHANNEL_2 EQU 42H ; 2 CALL SET_COUNT ; . ;--- , . CALL GET_NUMBER ; . . ;--- 2 SET_COUNT PROC MOV AL,10110110B ; 2, 2, OUT COMMAND_REG,AL ; MOV AX,10000 ; OUT CHANNEL_2,AL ; MOV AL,AH ; AL OUT CHANNEL_2,AL ; RET SET_COUNT ENDP ;--- READ_NUMBER PROC ;--- MOV AL,10000110B ; OUT COMMAND_REG,AL ; ;--- MOV AL,10110110B ; / OUT COMMAND_REG,AL ; IN AL,CHANNEL_2 ; MOV AH,AL ; AH IN AL,CHANNEL_2 ; CALL SET_COUNT ; SWAP AH,AL ; RET ; AX READ_NUMBER ENDP  2. . , . - - , 8253. 2 . 3, - . - - , . , 8253 - , , . , . . 2-2 [2.1.1] , , 8255 [1.1.1]. , . PCjr , - . , . . PCjr , - , . 2.2.1 76496 ( PCjr). PCjr 4- , , . , , . - TI SN76496N. 8 - 2 - 0C0H. - ; IN, . PCjr . - 8253. - . 5 6 B - 8255 ( 61H - . [1.1.1]). : 6 5 00 8253 01 10 / 11 76496 BIOS PCjr 80H 1AH. AL 0 3, - , . . 76496 , - PCjr. , , 4-6 , . : 6-4 000 001 010 011 100 101 110 111 . : 1: 0-3 4 4-6 7 1 2: 0-5 6 6 7 0 10- - , 111 843 . , , 110 (111 843/2^10). ( - B 8255), , - . . ( 6 ), , . . . : 0-1 2 3 4-6 7 1 ( ), 2 1 ( ), 2 0. 0-1 00B 10B; 11B, 3. . . : 0-3 4-6 7 1 4 0, . 1, . - . 0 2 (), 1 - 4 , 2 - 8 3 - 16 . - 28 . 2.2.2 . , ; [2.2.3] , . , . - 8253, . , - , . , [2.2.8] . . SOUND - . ( 37 32767), BIOS ( 0 65535), 18.2 . SOUND 440,91 A 5 (5*18.2). , C() : C() 523.3 D() 587.3 E() 659.3 F() 698.5 G() 784.0 A() 880.0 B() 987.7 , , - . , (- - ). [2.2.1] PCjr - SOUND , . : SOUND , , , . - 0 15, 8. 0 2, 0. PCjr , . SOUND ON. SOUND OFF - . D- (-- ) (D-F-A) , : 100 SOUND ON ' 110 SOUND 587,50,3,0 ' 120 SOUND 699,50,3,1 ' 130 SOUND 880,50,3,1 ' . 8255 B, ( 1). B 61H ( AT 8255 , ). , , - . . , 0 B 2 , . , . . 2-4 - . . , "FREQUENCY", . , . - "NUMBER_CYCLES" . . , . , . , (18.2 - ), . , , BIOS . , , , . NUMBER_CYCLES EQU 1000 FREQUENCY EQU 300 PORT_B EQU 61H CLI ; MOV DX,NUMBER_CYCLES ; DX IN AL,PORT_B ; B AND AL,11111110B ; NEXT_CYCLE: OR AL,00000010B ; OUT PORT_B,AL ; B MOV CX,FREQUENCY ; - CX FIRST_HALF: LOOP FIRST_HALF ; AND AL,11111101B ; OUT PORT_B,AL ; B MOV CX,FREQUENCY ; - CX SECOND_HALF: LOOP SECOND_HALF ; DEC DX ; JNZ NEXT_CYCLE ; 0, STI ; 2.2.3 . . . 8253 , , . 2 , - . . SOUND - , PLAY - . PLAY , - , , . PLAY - [2.2.5]. MB ( ), - . , MF ( ) , . A () : 100 PLAY "MB A" ' ... 110 ...... ' , , X = PLAY(0) ( 32), . PCjr (0-2), . . 2, [2.1.1]. B 8255 ( 61H). , 1.19 . , 2. 1 B 0, - . - BIOS, [2.1.6]. 440 . . ;--- 2 B 8255 PORT_B EQU 61H ; B IN AL,PORT_B ; OR AL,3 ; OUT PORT_B,AL ; B ;--- / COMMAND_REG EQU 43H ; CHANNEL_2 EQU 42H ; 2 MOV AL,10110110B ; 2 OUT COMMAND_REG,AL ; ;--- MOV AX,2705 ; = 1190000/440 OUT CHANNEL_2,AL ; MOV AL,AH ; AL OUT CHANNEL_2,AL ; ;--- MOV AH,1 ; 21H INT 21H ; ;--- IN AL,PORT_B ; B AND AL,11111100B ; OUT PORT_B,AL ; 2.2.4 . . , - , , , . . - - . - [2.2.7] , , ( ASCII 7 ). . BEEP. , : 100 INPUT "Enter your age",AGE ' 110 IF AGE > 100 THEN BEEP:PRINT"Are you really over 100?" SOUND. : SOUND , , (3000 - ), - . SOUND 3000,18 . - , . 100 FOR N = 1 TO 200 ' 110 SOUND 500,1 ' 1 120 SOUND 5000,1 ' 1 130 NEXT ' . . - ASCII 7 (.. ), DOS BIOS. ASCII 7 - "" - . 2 21H: MOV AH,2 ; MOV DL,7 ; ASCII 7 INT 21H ; . , 8255 [1.1.1]. , , - . ;--- MOV DX,800 ; IN AL,61H ; B 8255 AND AL,0FEH ; 8253 NEXTCYCLE: OR AL,2 ; OUT 61H,AL ; B MOV CX,150 ; CYCLEUP: LOOP CYCLEUP ; AND AL,0FDH ; OUT 61H,AL ; B CYCLEDOWN: LOOP CYCLEDOWN ; DEC DX ; JNZ NEXTCYCLE ; DX 0 2.2.5 . ,