Permalink
Cannot retrieve contributors at this time
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
20938 lines (20938 sloc)
905 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| F000:0000 ; | |
| F000:0000 ; ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» | |
| F000:0000 ; º This file is generated by The Interactive Disassembler (IDA) º | |
| F000:0000 ; º Copyright (c) 2010 by Hex-Rays SA, <support@hex-rays.com> º | |
| F000:0000 ; º Licensed to: Freeware version º | |
| F000:0000 ; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ | |
| F000:0000 ; | |
| F000:0000 ; Input MD5 : C66B49CD7082D1B81442FB2704542401 | |
| F000:0000 ; File Name : Z:\Users\riq\progs\ibm_pcjr-bios\rom\bios-f0000-fffff.bin | |
| F000:0000 ; Format : Binary file | |
| F000:0000 ; Base Address: F000h Range: F0000h - 100000h Loaded length: 10000h | |
| F000:0000 .8086 | |
| F000:0000 .model small | |
| F000:0000 ; ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ | |
| F000:0000 ; Segment type: Pure code | |
| F000:0000 F000 segment byte public 'CODE' | |
| F000:0000 a1504036Copr_Ibm19811 db '1504036 COPR. IBM 1981,1983' | |
| F000:001B z1 dw offset l12 ; return pointers for rtns called before stack is initialized | |
| F000:001D dw offset l14 | |
| F000:001F dw offset l16 | |
| F000:0021 dw offset l19 | |
| F000:0023 dw offset l24 | |
| F000:0025 f3b db ' KB' ; DATA XREF: q35+36o | |
| F000:0028 ex_0 dw offset eb0 ; DATA XREF: e_msg+83o | |
| F000:002A dw offset eb0 | |
| F000:002C dw offset totlpt0 | |
| F000:002E ex1 dw offset mo1 ; DATA XREF: e_msg+BFo | |
| F000:0030 ;---------------------------------------------------- | |
| F000:0030 ; message area for post | |
| F000:0030 ;---------------------------------------------------- | |
| F000:0030 error_err db 'ERROR' ; DATA XREF: e_msg+25o | |
| F000:0035 mem_err db 'A' | |
| F000:0036 key_err db 'B' ; DATA XREF: key_scan_save+16o | |
| F000:0037 cass_err db 'C' | |
| F000:0038 com1_err db 'D' | |
| F000:0039 com2_err db 'E' | |
| F000:003A rom_err db 'F' | |
| F000:003B cart_err db 'G' | |
| F000:003C disk_err db 'H' ; DATA XREF: F000:086Fo | |
| F000:003D f4 dw 378h ; DATA XREF: F000:f15co | |
| F000:003D ; print source table | |
| F000:003F dw 278h | |
| F000:0041 imasks dw 0F7EFh ; DATA XREF: uart:at1o | |
| F000:0041 ; interrupt masks for 8259 interrupt controllers | |
| F000:0043 ;---------------------------------------------------- | |
| F000:0043 ; setup | |
| F000:0043 ; disable nmi, maskable ints. | |
| F000:0043 ; sound chip, and video. | |
| F000:0043 ; turn drive 0 motor off | |
| F000:0043 ;---------------------------------------------------- | |
| F000:0043 ; START OF FUNCTION CHUNK FOR kb_int | |
| F000:0043 reset: ; CODE XREF: F000:f19_0j | |
| F000:0043 ; kb_int+10Dj kb_int+11Aj | |
| F000:0043 ; F000:E05Bj F000:loc_FFFF0J | |
| F000:0043 mov al, 0 | |
| F000:0045 out 0A0h, al ; disables nmi | |
| F000:0047 dec al ; send ff to mfg_tester | |
| F000:0049 out 10h, al | |
| F000:004B in al, 0A0h ; reset nmi f/f | |
| F000:004D cli ; disable maskable interrupts | |
| F000:004D ; disable attenuation in sound chip | |
| F000:004E mov ax, 108Fh ; reg address in ah, attenuator in off | |
| F000:004E ; in al | |
| F000:0051 mov dx, 0C0h ; 'À' ; address of sound chip | |
| F000:0054 mov cx, 4 ; 4 attenuators to disable | |
| F000:0057 l1: ; CODE XREF: kb_int-1504j | |
| F000:0057 or al, ah ; combine reg address and data | |
| F000:0059 out dx, al | |
| F000:005A add ah, 20h ; ' ' ; point to next reg | |
| F000:005D loop l1 | |
| F000:005F mov al, 0A0h ; ' ' ; turn drive 0 motor off, enable timer | |
| F000:0061 out 0F2h, al | |
| F000:0063 mov dx, 3DAh ; video gate array control | |
| F000:0066 in al, dx ; sync vga to accept reg | |
| F000:0067 mov al, 4 ; set vga reset reg | |
| F000:0069 out dx, al ; select it | |
| F000:006A mov al, 1 ; set async reset | |
| F000:006C out dx, al ; reset video gate array | |
| F000:006D ;---------------------------------------------------- | |
| F000:006D ; test 1 | |
| F000:006D ; 8088 processor test | |
| F000:006D ; description | |
| F000:006D ; verify 8088 flags, registers | |
| F000:006D ; and conditional jumps | |
| F000:006D ; | |
| F000:006D ; mfg. error code 0001h | |
| F000:006D ;---------------------------------------------------- | |
| F000:006D mov ah, 0D5h ; 'Õ' | |
| F000:006F sahf | |
| F000:0070 loc_F0070: ; DATA XREF: diag_bios_break+5r | |
| F000:0070 jnb short l4 | |
| F000:0072 jnz short l4 | |
| F000:0074 jnp short l4 | |
| F000:0076 jns short l4 | |
| F000:0078 lahf | |
| F000:0079 mov cl, 5 | |
| F000:007B shr ah, cl | |
| F000:007D jnb short l4 | |
| F000:007F loc_F007F: ; DATA XREF: timer_int+38o | |
| F000:007F mov al, 40h ; '@' | |
| F000:0081 shl al, 1 | |
| F000:0083 loc_F0083: ; DATA XREF: sub_F5DB5+Cw | |
| F000:0083 ; sub_F5DB5+25r | |
| F000:0083 jno short l4 | |
| F000:0085 xor ah, ah | |
| F000:0087 sahf | |
| F000:0088 jbe short l4 | |
| F000:008A js short l4 | |
| F000:008C jp short l4 | |
| F000:008E lahf | |
| F000:008F mov cl, 5 | |
| F000:0091 shr ah, cl | |
| F000:0093 jb short l4 | |
| F000:0095 shl ah, 1 | |
| F000:0097 jo short l4 | |
| F000:0099 ;----- read/write the 8088 general and segmentation registers | |
| F000:0099 ; with all one's and zeroes's | |
| F000:0099 mov ax, 0FFFFh | |
| F000:009C stc | |
| F000:009D l2: ; CODE XREF: kb_int-14A9j | |
| F000:009D mov ds, ax | |
| F000:009F mov bx, ds | |
| F000:00A1 mov es, bx | |
| F000:00A3 mov cx, es | |
| F000:00A5 mov ss, cx | |
| F000:00A7 mov dx, ss | |
| F000:00A9 mov sp, dx | |
| F000:00AB mov bp, sp | |
| F000:00AD mov si, bp | |
| F000:00AF mov di, si | |
| F000:00B1 jnb short l3 | |
| F000:00B3 xor ax, di | |
| F000:00B5 jnz short l4 | |
| F000:00B7 clc | |
| F000:00B8 jmp short l2 | |
| F000:00BA l3: ; CODE XREF: kb_int-14B0j | |
| F000:00BA or ax, di | |
| F000:00BC jz short l5 | |
| F000:00BE l4: ; CODE XREF: kb_int:loc_F0070j | |
| F000:00BE ; kb_int-14EFj kb_int-14EDj | |
| F000:00BE ; kb_int-14EBj kb_int-14E4j | |
| F000:00BE ; kb_int:loc_F0083j ... | |
| F000:00BE mov dx, 10h | |
| F000:00C1 mov al, 0 | |
| F000:00C3 out dx, al | |
| F000:00C4 inc dx | |
| F000:00C5 out dx, al | |
| F000:00C6 inc al | |
| F000:00C8 out dx, al | |
| F000:00C9 hlt | |
| F000:00CA ;---------------------------------------------------- | |
| F000:00CA ; test 2 | |
| F000:00CA ; 8522 initialization and test | |
| F000:00CA ; description | |
| F000:00CA ; first initialize 8255 prog. | |
| F000:00CA ; peripheral interface. ports a&b | |
| F000:00CA ; are latched output | |
| F000:00CA ; buffers. c is input. | |
| F000:00CA ; | |
| F000:00CA ; mfg. err. code =0002h | |
| F000:00CA ;---------------------------------------------------- | |
| F000:00CA l5: ; CODE XREF: kb_int-14A5j | |
| F000:00CA mov al, 0FEh ; 'þ' | |
| F000:00CC out 10h, al ; send fe to mfg | |
| F000:00CE mov al, 10001001b | |
| F000:00D0 out 63h, al ; configures i/o ports (63h = cmd_port) | |
| F000:00D2 sub ax, ax ; test pattern seed = 0000 | |
| F000:00D4 l6: ; CODE XREF: kb_int-147Dj | |
| F000:00D4 mov al, ah | |
| F000:00D6 out 60h, al ; write pattern port port a | |
| F000:00D8 in al, 60h ; read pattern from port a | |
| F000:00DA out 61h, al ; write pattern to port b | |
| F000:00DC in al, 61h ; read output port | |
| F000:00DE cmp al, ah ; data as expected? | |
| F000:00E0 jnz short l7 ; if not, something is wrong | |
| F000:00E2 inc ah ; make new data pattern | |
| F000:00E4 jnz short l6 ; loop till 255 data patterns done | |
| F000:00E6 jmp short l8 ; continue if done | |
| F000:00E8 l7: ; CODE XREF: kb_int-1481j | |
| F000:00E8 mov bl, 2 | |
| F000:00EA jmp e_msg | |
| F000:00ED l8: ; CODE XREF: kb_int-147Bj | |
| F000:00ED xor al, al | |
| F000:00EF out 60h, al ; clear kb port | |
| F000:00F1 in al, 62h | |
| F000:00F3 and al, 8 ; 64k card present? | |
| F000:00F5 mov al, 1Bh ; port setting for 64k sys | |
| F000:00F7 jnz short l9 | |
| F000:00F9 mov al, 3Fh ; '?' ; port setting for 128k sys | |
| F000:00FB l9: ; CODE XREF: kb_int-146Aj | |
| F000:00FB mov dx, 3DFh | |
| F000:00FE out dx, al | |
| F000:00FF mov al, 1101b ; initialize output ports | |
| F000:0101 out 61h, al | |
| F000:0103 ;---------------------------------------------------- | |
| F000:0103 ; Part 3 | |
| F000:0103 ; set up video gate array and 6845 to get memory working | |
| F000:0103 ; | |
| F000:0103 ;---------------------------------------------------- | |
| F000:0103 mov al, 0FDh ; 'ý' | |
| F000:0105 out 10h, al | |
| F000:0107 mov dx, 3D4h ; set address of 6845 | |
| F000:010A mov bx, offset video_parms ; point to 6845 parms | |
| F000:010D mov cx, 10h ; set parm len | |
| F000:0110 nop | |
| F000:0111 xor ah, ah ; ah is reg # | |
| F000:0113 l10: ; CODE XREF: kb_int-1442j | |
| F000:0113 mov al, ah ; get 6845 reg # | |
| F000:0115 out dx, al | |
| F000:0116 inc dx ; point to data port | |
| F000:0117 inc ah ; next reg value | |
| F000:0119 mov al, cs:[bx] ; get table value | |
| F000:011C out dx, al ; out to chip | |
| F000:011D inc bx ; next in table | |
| F000:011E dec dx ; back to pointer reg | |
| F000:011F loop l10 | |
| F000:0121 mov dx, 3DAh ; set address of vga | |
| F000:0124 in al, dx ; be sure addr/data flag is in the proper state | |
| F000:0125 mov cx, 5 ; # of registers | |
| F000:0128 xor ah, ah ; ah is reg counter | |
| F000:012A l11: ; CODE XREF: kb_int-142Fj | |
| F000:012A mov al, ah ; get reg # | |
| F000:012C out dx, al ; select it | |
| F000:012D xor al, al ; set zero for data | |
| F000:012F out dx, al | |
| F000:0130 inc ah ; next reg | |
| F000:0132 loop l11 | |
| F000:0134 ;---------------------------------------------------- | |
| F000:0134 ; test 4 | |
| F000:0134 ; planar board ros checksum test | |
| F000:0134 ; description | |
| F000:0134 ; a checksum test is done for each ros | |
| F000:0134 ; module on the planar board to. | |
| F000:0134 ; mfg error code =0003h module at address | |
| F000:0134 ; f000:0000 error | |
| F000:0134 ; 0004h module at address | |
| F000:0134 ; f800:0000 error | |
| F000:0134 ;---------------------------------------------------- | |
| F000:0134 mov al, 0FCh ; 'ü' | |
| F000:0136 out 10h, al ; mfg out = fc | |
| F000:0138 ; check module at f000:0 (lenght 32k) | |
| F000:0138 xor si, si | |
| F000:013A mov ax, cs | |
| F000:013C mov ss, ax | |
| F000:013E mov ds, ax | |
| F000:0140 mov cx, 8000h | |
| F000:0143 mov sp, 1Bh | |
| F000:0146 jmp ros_checksum | |
| F000:0146 ; END OF FUNCTION CHUNK FOR kb_int | |
| F000:0149 l12: ; DATA XREF: F000:z1o | |
| F000:0149 jz short l13 | |
| F000:014B mov bx, 3 | |
| F000:014E jmp e_msg | |
| F000:0151 l13: ; CODE XREF: F000:l12j | |
| F000:0151 mov cx, 8000h | |
| F000:0154 jmp ros_checksum | |
| F000:0157 l14: ; DATA XREF: F000:001Do | |
| F000:0157 jz short l15 | |
| F000:0159 mov bx, 4 ; indicate error | |
| F000:015C jmp e_msg | |
| F000:015F ;---------------------------------------------------- | |
| F000:015F ; test 5 | |
| F000:015F ; base 2k read/write storage test | |
| F000:015F ; description | |
| F000:015F ; write/read/verify data patterns | |
| F000:015F ; aa,55 and 00 to 1st 2k of storage | |
| F000:015F ; and the 2k just below 64k (crt buffer) | |
| F000:015F ; verify storage addressability. | |
| F000:015F ; on exit set crt page to 3. set | |
| F000:015F ; temporary stack also. | |
| F000:015F ; mfg. error code 04xx for system board mem. | |
| F000:015F ; 05xx for 64k attrib. cd. mem | |
| F000:015F ; 06xx for error in both | |
| F000:015F ; (xx= error bits) | |
| F000:015F ;---------------------------------------------------- | |
| F000:015F l15: ; CODE XREF: F000:l14j | |
| F000:015F mov al, 0FBh ; 'û' | |
| F000:0161 out 10h, al ; set mfg flag = fb | |
| F000:0163 mov cx, 400h | |
| F000:0166 xor ax, ax | |
| F000:0168 mov es, ax ; load es with 0000 segment | |
| F000:016A jmp podstg | |
| F000:016D l16: ; DATA XREF: F000:001Fo | |
| F000:016D jnz short l20 ; bad storage found | |
| F000:016F mov al, 0FAh ; 'ú' ; mfg out = fa | |
| F000:0171 out 10h, al | |
| F000:0173 mov cx, 400h ; 1024 words to be tested in the regen buffer | |
| F000:0176 in al, 60h ; where is the regen buffer? | |
| F000:0178 cmp al, 1Bh ; top of 64k? | |
| F000:017A mov ax, 0F80h ; set pointer to there if it is (0xf800) | |
| F000:017D jz short l18 | |
| F000:017F mov ah, 1Fh ; or set pointer to top of 128k (0x1f800) | |
| F000:0181 l18: ; CODE XREF: F000:017Dj | |
| F000:0181 mov es, ax | |
| F000:0183 jmp podstg | |
| F000:0186 l19: ; DATA XREF: F000:0021o | |
| F000:0186 jz short l23 | |
| F000:0188 l20: ; CODE XREF: F000:l16j | |
| F000:0188 mov bh, 4 ; error 04 | |
| F000:018A in al, 62h ; get config bits | |
| F000:018C and al, 8 ; test for attrib card present | |
| F000:018E jz short l21 ; worry about odd/even if it is | |
| F000:0190 mov bl, cl | |
| F000:0192 or bl, ch ; cobine error bits if it isn't | |
| F000:0194 jmp short l22 | |
| F000:0196 l21: ; CODE XREF: F000:018Ej | |
| F000:0196 cmp ah, 2 ; even byte error? err 04xx | |
| F000:0199 mov bl, cl | |
| F000:019B jz short l22 | |
| F000:019D inc bh ; make into 05xx err | |
| F000:019F or bl, ch ; move and possible combine error bits | |
| F000:01A1 cmp ah, 1 ; odd byte error | |
| F000:01A4 jz short l22 | |
| F000:01A6 inc bh ; must have been both - make into 06hh | |
| F000:01A8 l22: ; CODE XREF: F000:0194j | |
| F000:01A8 ; F000:019Bj F000:01A4j | |
| F000:01A8 jmp e_msg ; jump to error output routine | |
| F000:01AB ; retest high 2k using b8000 address path | |
| F000:01AB l23: ; CODE XREF: F000:l19j | |
| F000:01AB mov al, 0F9h ; 'ù' ; mfg out=f9 | |
| F000:01AD out 10h, al | |
| F000:01AF mov cx, 400h ; 1k words | |
| F000:01B2 mov ax, 0BB80h ; point to area just tested with direct addressing | |
| F000:01B5 mov es, ax | |
| F000:01B7 jmp podstg | |
| F000:01BA l24: ; DATA XREF: F000:0023o | |
| F000:01BA jz short l25 | |
| F000:01BC mov bx, 5 | |
| F000:01BF jmp e_msg | |
| F000:01C2 l25: ; CODE XREF: F000:l24j | |
| F000:01C2 mov ax, 30h ; '0' | |
| F000:01C5 mov ss, ax | |
| F000:01C7 mov sp, 100h | |
| F000:01CA xor ax, ax | |
| F000:01CC mov ds, ax | |
| F000:01CE ;----- setup crt page | |
| F000:01CE mov word ptr ds:462h, 7 ; 40:62 (active page) | |
| F000:01D4 ;----- set preliminary memory size word | |
| F000:01D4 mov bx, 64 | |
| F000:01D7 in al, 62h | |
| F000:01D9 and al, 8 ; 64k card present? | |
| F000:01DB mov al, 1Bh ; port system for 64k system | |
| F000:01DD jnz short l26 | |
| F000:01DF add bx, 64 ; else set for 128k | |
| F000:01E2 mov al, 3Fh ; '?' ; port setting for 128k system | |
| F000:01E4 l26: ; CODE XREF: F000:01DDj | |
| F000:01E4 mov ds:415h, bx ; 40:15 (true_mem) | |
| F000:01E8 mov ds:48Ah, al ; 40:8a (pagdat) | |
| F000:01EB ;---------------------------------------------------- | |
| F000:01EB ; part 6 | |
| F000:01EB ; interrupts | |
| F000:01EB ; description | |
| F000:01EB ; 32 interrupts are initialized to point to a | |
| F000:01EB ; dummy handler. the bios interrupts are loaded. | |
| F000:01EB ; diagnostics interrupts are loaded | |
| F000:01EB ; system configuration word is put in memory. | |
| F000:01EB ; the dummy interrupt handler resides here. | |
| F000:01EB ;---------------------------------------------------- | |
| F000:01EB mov ax, 50h ; 'P' | |
| F000:01EE mov ds, ax | |
| F000:01F0 mov byte ptr ds:seg50.mfg_tst, 0F8h ; 'ø' ; set up mfg checkpoint from this point | |
| F000:01F5 call mfg_up ; update mfg checkpoint | |
| F000:01F8 mov word ptr ds:seg50.mfg_rtn, offset mfg_out | |
| F000:01FE mov ax, cs | |
| F000:0200 mov ds:seg50.mfg_ret_s, ax ; set doubleword pointer to mfg. | |
| F000:0200 ; error output routine so diags | |
| F000:0200 ; don't have to duplicate code | |
| F000:0203 mov ax, 0 | |
| F000:0206 mov ds, ax | |
| F000:0208 ;----- set up the interrupt vectors to temp interrupt | |
| F000:0208 mov cx, 0FFh ; first all interrupts | |
| F000:020B sub di, di ; first interrupt location is 0000 | |
| F000:020D mov es, di ; set es=0000 also | |
| F000:020F d3: ; CODE XREF: F000:0216j | |
| F000:020F mov ax, offset d11 ; move addr of intr proc seg | |
| F000:0212 stosw | |
| F000:0213 mov ax, cs ; get addr of intr proc seg | |
| F000:0215 stosw | |
| F000:0216 loop d3 ; vectbl0 | |
| F000:0218 mov word ptr ds:124h, offset extab ; set up ekt. scan table (int 0x49) | |
| F000:021E ;----- set up bios interrupts | |
| F000:021E mov di, 40h ; '@' ; set up video int (int 0x10) | |
| F000:0221 push cs | |
| F000:0222 pop ds ; place cs in ds | |
| F000:0223 mov si, offset vector_table_16 | |
| F000:0226 mov cx, 16 ; 16 entries | |
| F000:0229 d4: ; CODE XREF: F000:022Cj | |
| F000:0229 movsw ; move interrupt vector to low memory | |
| F000:022A inc di | |
| F000:022B inc di ; point to next vector entry | |
| F000:022C loop d4 ; repeat for all 16 bios interrupts | |
| F000:022E ;----- set up diagnostics interrupts | |
| F000:022E mov di, 200h ; start with int 80h | |
| F000:0231 mov si, offset diag_table_ptr ; point to entry point table | |
| F000:0234 mov cx, 16 ; 16 entries | |
| F000:0237 d5: ; CODE XREF: F000:023Aj | |
| F000:0237 movsw ; move interrupt vector to low memory | |
| F000:0238 inc di | |
| F000:0239 inc di ; point to next vector entry | |
| F000:023A loop d5 ; repeat for all 16 bios interrupts | |
| F000:023C mov ds, cx ; set ds to zero | |
| F000:023E mov word ptr ds:204h, offset locate_1_int_81 ; int 0x81 | |
| F000:0244 mov word ptr ds:208h, offset prtn3_int_82 ; int 0x82 | |
| F000:024A mov word ptr ds:224h, offset int_89_diag_joystick ; int 0x89 | |
| F000:0250 ;----- set up default equipment determination word | |
| F000:0250 ; bit 15,14 = number of printers attached | |
| F000:0250 ; bit 13 = 1 = serial printer present | |
| F000:0250 ; bit 12 = game i/o attached | |
| F000:0250 ; bit 11,10,9 = number of rs232 cards attached | |
| F000:0250 ; bit 8 = dma (0=dma present, 1=no dma on system) | |
| F000:0250 ; bit 7,6 = number of diskette drives | |
| F000:0250 ; 00=1, 01=2, 10=3, 11=4 only if bit 0 = 1 | |
| F000:0250 ; bit 5,4 = initial video mode | |
| F000:0250 ; 00 - unused | |
| F000:0250 ; 01 - 40x25 bw using color card | |
| F000:0250 ; 10 - 80x25 bw using color card | |
| F000:0250 ; 11 - 80x25 bw using bw card | |
| F000:0250 ; bit 3,2 = planar ram size (10=48k, 11=64k) | |
| F000:0250 ; bit 1 not used | |
| F000:0250 ; bit 0 = 1 (ipl diskette installed) | |
| F000:0250 ;---------------------------------------------------- | |
| F000:0250 mov bx, 1118h ; default gameio, 40x25, no dma, 48k on planar | |
| F000:0253 in al, 62h | |
| F000:0255 and al, 8 ; 64k card present | |
| F000:0257 jnz short d55 ; no, jump | |
| F000:0259 or bl, 4 ; set 64k on planar | |
| F000:025C d55: ; CODE XREF: F000:0257j | |
| F000:025C mov ds:410h, bx ; 0:410 = 40:10 = equip flag | |
| F000:0260 ;---------------------------------------------------- | |
| F000:0260 ; test 7 | |
| F000:0260 ; initialize and test the 8259 interrupt controller chip | |
| F000:0260 ; mfg err. code 07xx (xx=00, data path or internal failure, | |
| F000:0260 ; xx=any other bits on=unexpected interrupts | |
| F000:0260 ;---------------------------------------------------- | |
| F000:0260 call mfg_up ; mfg code=f7 | |
| F000:0263 mov al, 10011b ; icw1 - reset edge sense circuit, set single 8259 chip and icw4 read | |
| F000:0265 out 20h, al | |
| F000:0267 mov al, 8 ; icw2 - set interrupt type 8 (8-f) | |
| F000:0269 out 21h, al | |
| F000:026B mov al, 1001b ; icw4 - set buffered mode/slave and 8086 mode | |
| F000:026D out 21h, al | |
| F000:026F ;---------------------------------------------------- | |
| F000:026F ; test ability to write/read the mask register | |
| F000:026F ;---------------------------------------------------- | |
| F000:026F mov al, 0 ; write zeroes to imr | |
| F000:0271 mov bl, al ; preset error indicator | |
| F000:0273 out 21h, al ; device interrupts enabled | |
| F000:0275 in al, 21h ; read imr | |
| F000:0277 or al, al ; imr = 0? | |
| F000:0279 jnz short gerror ; no - go to error routine | |
| F000:027B mov al, 0FFh ; disable device interrupts | |
| F000:027D out 21h, al ; write ones to imr | |
| F000:027F in al, 21h ; read imr | |
| F000:0281 add al, 1 ; all imr bits on? (add should produce 0) | |
| F000:0283 jnz short gerror ; no - go to error routine | |
| F000:0285 ;---------------------------------------------------- | |
| F000:0285 ; check for hot interrupts | |
| F000:0285 ;---------------------------------------------------- | |
| F000:0285 sti | |
| F000:0286 mov cx, 50h ; 'P' | |
| F000:0289 hot1: ; CODE XREF: F000:hot1j | |
| F000:0289 loop hot1 | |
| F000:028B mov bl, ds:484h ; 0:484 == 40:84 == intr_flag. did any interrupts occur? | |
| F000:028F or bl, bl | |
| F000:0291 jz short end_testg | |
| F000:0293 gerror: ; CODE XREF: F000:0279j | |
| F000:0293 ; F000:0283j | |
| F000:0293 mov bh, 7 | |
| F000:0295 jmp e_msg | |
| F000:0298 ; fire the diskette watchdog timer | |
| F000:0298 end_testg: ; CODE XREF: F000:0291j | |
| F000:0298 mov al, 0E0h ; 'à' | |
| F000:029A out 0F2h, al | |
| F000:029C mov al, 0A0h ; ' ' | |
| F000:029E out 0F2h, al | |
| F000:02A0 ;----- initialize timer 1 and timer 0 for test | |
| F000:02A0 call mfg_up ; mfg ckpoint=f6 | |
| F000:02A3 mov ax, 176h ; set timer 1 to mode 3 binary | |
| F000:02A6 mov bx, 0FFFFh ; initial count of ffff | |
| F000:02A9 call init_timer ; initialize timer 1 | |
| F000:02AC mov ax, 110110b ; set timer 0 to mode 3 binary | |
| F000:02AF call init_timer ; initialize timer 0 | |
| F000:02B2 ;---------------------------------------------------- | |
| F000:02B2 ; set bit 5 of port a0 so timer 1 clock will be pulsed by the | |
| F000:02B2 ; timer 0 output rather than the system clock | |
| F000:02B2 ;---------------------------------------------------- | |
| F000:02B2 mov al, 100000b ; (timer 0 output used as clk input for timer 1) | |
| F000:02B4 out 0A0h, al | |
| F000:02B6 ;---------------------------------------------------- | |
| F000:02B6 ; check if all bits go on an off in timer 0 (check for stuck | |
| F000:02B6 ; bits) | |
| F000:02B6 ;---------------------------------------------------- | |
| F000:02B6 mov ah, 0 ; timer 0 | |
| F000:02B8 call bits_on_off ; let subroutine check it | |
| F000:02BB jnb short timer1_nz ; no stuck bits (carry flag not set) | |
| F000:02BD mov bl, 0 ; stuck bits in timer 0 | |
| F000:02BF jmp timer_error | |
| F000:02C2 ;---------------------------------------------------- | |
| F000:02C2 ; since timer 0 has completed at least one complete cycle, | |
| F000:02C2 ; timer 1 should be non-zero. check that this is the case. | |
| F000:02C2 ;---------------------------------------------------- | |
| F000:02C2 timer1_nz: ; CODE XREF: F000:02BBj | |
| F000:02C2 in al, 41h ; read lsb of timer 1 | |
| F000:02C4 mov ah, al ; save lsb | |
| F000:02C6 in al, 41h ; read msb of timer 1 | |
| F000:02C8 cmp ax, 0FFFFh ; still ffff? | |
| F000:02CB jnz short timer0_intr ; no - timer 1 has been bumped | |
| F000:02CD mov bl, 1 ; timer 1 was not bumped by timer 0 | |
| F000:02CF jmp timer_error | |
| F000:02D2 ;---------------------------------------------------- | |
| F000:02D2 ; check for timer 0 interrupt | |
| F000:02D2 ;---------------------------------------------------- | |
| F000:02D2 timer0_intr: ; CODE XREF: F000:02CBj | |
| F000:02D2 sti ; enable maskable ext interrupts | |
| F000:02D3 in al, 21h | |
| F000:02D5 and al, 0FEh ; mask all intrs except lvl 0 | |
| F000:02D7 and ds:484h, al ; clear int received | |
| F000:02DB out 21h, al ; write the 8259 imr | |
| F000:02DD mov cx, 0FFFFh ; set loop count | |
| F000:02E0 wait_intr_loop: ; CODE XREF: F000:02E7j | |
| F000:02E0 test byte ptr ds:484h, 1 ; timer 0 int occur? | |
| F000:02E5 jnz short reset_intrs ; yes - continue | |
| F000:02E7 loop wait_intr_loop ; wait for interrupt for specified time | |
| F000:02E9 mov bl, 2 ; timer 0 intr didn't occur | |
| F000:02EB jmp short timer_error | |
| F000:02ED ;---------------------------------------------------- | |
| F000:02ED ; housekeeping for timer 0 interrupts | |
| F000:02ED ;---------------------------------------------------- | |
| F000:02ED reset_intrs: ; CODE XREF: F000:02E5j | |
| F000:02ED cli | |
| F000:02EE ; set timer int. to point to mfg. heartbeat routine if in mfg mode | |
| F000:02EE mov dx, 201h | |
| F000:02F1 in al, dx ; get mfg. bits | |
| F000:02F2 and al, 0F0h | |
| F000:02F4 cmp al, 10000b ; sys test mode? | |
| F000:02F6 jz short d6 | |
| F000:02F8 or al, al ; or burn-in mode | |
| F000:02FA jnz short time_1 | |
| F000:02FC d6: ; CODE XREF: F000:02F6j | |
| F000:02FC mov word ptr ds:20h, offset mfg_tick ; set to point to mfg. (int 0x08) | |
| F000:0302 mov word ptr ds:70h, offset mfg_tick ; also set user timer int for diags. use (int 0x1c) | |
| F000:0308 mov al, 0FEh ; 'þ' | |
| F000:030A out 21h, al ; (enable lvl 0 interrupt) | |
| F000:030C sti | |
| F000:030D ;---------------------------------------------------- | |
| F000:030D ; reset d5 of port a0 so that the timer 1 clock will be | |
| F000:030D ; pulsed by the system clock | |
| F000:030D ;---------------------------------------------------- | |
| F000:030D time_1: ; CODE XREF: F000:02FAj | |
| F000:030D mov al, 0 ; make al = 0 | |
| F000:030F out 0A0h, al | |
| F000:0311 ;---------------------------------------------------- | |
| F000:0311 ; check for stuck bits in timer 1 | |
| F000:0311 ;---------------------------------------------------- | |
| F000:0311 mov ah, 1 ; timer 1 | |
| F000:0313 call bits_on_off | |
| F000:0316 jnb short timer2_init ; no stuck bits | |
| F000:0318 mov bl, 3 ; stuck bits in timer 1 | |
| F000:031A jmp short timer_error | |
| F000:031C ;---------------------------------------------------- | |
| F000:031C ; initialize timer 2 | |
| F000:031C ;---------------------------------------------------- | |
| F000:031C timer2_init: ; CODE XREF: F000:0316j | |
| F000:031C mov ax, 2B6h ; set timer 2 to mode 3 binary | |
| F000:031F mov bx, 0FFFFh ; initial count | |
| F000:0322 call init_timer | |
| F000:0325 ;---------------------------------------------------- | |
| F000:0325 ; set pb0 of port_b of 8255 (timer 2 gate) | |
| F000:0325 ;---------------------------------------------------- | |
| F000:0325 in al, 61h ; current status | |
| F000:0327 or al, 1 ; set bit 0, others alone | |
| F000:0329 out 61h, al | |
| F000:032B mov ah, 2 | |
| F000:032D call bits_on_off | |
| F000:0330 jnb short reinit_t2 | |
| F000:0332 mov bl, 5 | |
| F000:0334 jmp short timer_error | |
| F000:0336 reinit_t2: ; CODE XREF: F000:0330j | |
| F000:0336 in al, 61h | |
| F000:0338 and al, 0FEh | |
| F000:033A out 61h, al | |
| F000:033C mov ax, 2B0h | |
| F000:033F mov bx, 0Ah | |
| F000:0342 call init_timer | |
| F000:0345 in al, 62h | |
| F000:0347 and al, 20h | |
| F000:0349 jz short ck2_on | |
| F000:034B mov bl, 4 | |
| F000:034D jmp short timer_error | |
| F000:034F ck2_on: ; CODE XREF: F000:0349j | |
| F000:034F in al, 61h | |
| F000:0351 or al, 1 | |
| F000:0353 out 61h, al | |
| F000:0355 mov cx, 0Ah | |
| F000:0358 ck2_lo: ; CODE XREF: F000:ck2_loj | |
| F000:0358 loop ck2_lo | |
| F000:035A in al, 62h | |
| F000:035C and al, 20h | |
| F000:035E jnz short pod_13_end | |
| F000:0360 mov bl, 6 | |
| F000:0362 timer_error: ; CODE XREF: F000:02BFj | |
| F000:0362 ; F000:02CFj F000:02EBj | |
| F000:0362 ; F000:031Aj F000:0334j | |
| F000:0362 ; F000:034Dj | |
| F000:0362 mov bh, 8 ; timer error indicator | |
| F000:0364 call e_msg | |
| F000:0367 jmp short pod_13_end | |
| F000:0369 latches db 0 ; DATA XREF: bits_on_off+9o | |
| F000:0369 ; latch mask for timer 0 | |
| F000:036A db 40h ; @ ; latch mask for timer 1 | |
| F000:036B db 80h ; ; latch mask for timer 2 | |
| F000:036C ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:036C bits_on_off proc near ; CODE XREF: F000:02B8p | |
| F000:036C ; F000:0313p F000:032Dp | |
| F000:036C xor bx, bx | |
| F000:036E xor si, si | |
| F000:0370 mov dx, 40h ; '@' | |
| F000:0373 add dl, ah | |
| F000:0375 mov di, offset latches | |
| F000:0378 xor al, al | |
| F000:037A xchg al, ah | |
| F000:037C add di, ax | |
| F000:037E outer_loop: ; CODE XREF: bits_on_off+47j | |
| F000:037E mov cx, 8 | |
| F000:0381 inner_loop: ; CODE XREF: bits_on_off+3Ej | |
| F000:0381 push cx | |
| F000:0382 mov cx, 0FFFFh | |
| F000:0385 tst_bits: ; CODE XREF: bits_on_off+3Bj | |
| F000:0385 mov al, cs:[di] ; timer latch mask index | |
| F000:0388 out 43h, al ; latch timer | |
| F000:038A push ax ; pause | |
| F000:038B pop ax | |
| F000:038C in al, dx ; read timer lsb | |
| F000:038D or si, si | |
| F000:038F jnz short second ; second pass | |
| F000:0391 or al, 1 | |
| F000:0393 or bl, al | |
| F000:0395 in al, dx | |
| F000:0396 or bh, al | |
| F000:0398 cmp bx, 0FFFFh | |
| F000:039C jmp short tst_cmp | |
| F000:039E second: ; CODE XREF: bits_on_off+23j | |
| F000:039E and bl, al | |
| F000:03A0 in al, dx | |
| F000:03A1 and bh, al | |
| F000:03A3 or bx, bx | |
| F000:03A5 tst_cmp: ; CODE XREF: bits_on_off+30j | |
| F000:03A5 jz short chk_end | |
| F000:03A7 loop tst_bits | |
| F000:03A9 pop cx | |
| F000:03AA loop inner_loop | |
| F000:03AC stc | |
| F000:03AD retn | |
| F000:03AE chk_end: ; CODE XREF: bits_on_off:tst_cmpj | |
| F000:03AE pop cx | |
| F000:03AF inc si | |
| F000:03B0 cmp si, 2 | |
| F000:03B3 jnz short outer_loop | |
| F000:03B5 clc | |
| F000:03B6 retn | |
| F000:03B6 bits_on_off endp | |
| F000:03B7 ;---------------------------------------------------- | |
| F000:03B7 ; crt attachment test | |
| F000:03B7 ; 1. init crt to 40x25 - bw | |
| F000:03B7 ; 2. check for vertical and video enables, and check | |
| F000:03B7 ; timing of same | |
| F000:03B7 ; 3. check vertical interrupt | |
| F000:03B7 ; 4. check red, green, blue and intensify dots | |
| F000:03B7 ; 5. init to 40x25 - color | |
| F000:03B7 ; mfg. error code 09xx (xx-see comments in code) | |
| F000:03B7 ;---------------------------------------------------- | |
| F000:03B7 pod_13_end: ; CODE XREF: F000:035Ej | |
| F000:03B7 ; F000:0367j | |
| F000:03B7 call mfg_up ; mfg checkpoint=f5 | |
| F000:03BA cli | |
| F000:03BB mov al, 1110000b ; set timer 1 to mode 0 | |
| F000:03BB ; (tim 1, lsb/msb, interrupt on terminal count, binary) | |
| F000:03BD out 43h, al | |
| F000:03BF mov cx, 8000h | |
| F000:03C2 q1: ; CODE XREF: F000:q1j | |
| F000:03C2 loop q1 ; wait for mode set to "take" | |
| F000:03C4 mov al, 0 | |
| F000:03C6 out 41h, al ; send first byte to timer | |
| F000:03C8 sub ax, ax ; set mode 40x25 bw | |
| F000:03CA int 10h | |
| F000:03CC mov ax, 507h ; set video page 7 | |
| F000:03CF int 10h | |
| F000:03D1 mov dx, 3DAh ; set addressing to video array | |
| F000:03D4 sub cx, cx | |
| F000:03D6 ; look for vertical | |
| F000:03D6 q2: ; CODE XREF: F000:03DBj | |
| F000:03D6 in al, dx ; get status | |
| F000:03D7 test al, 8 ; vertical there yet? | |
| F000:03D9 jnz short q3 ; continue if it is | |
| F000:03DB loop q2 | |
| F000:03DD mov bl, 0 | |
| F000:03DF jmp short q115 ; no vertical = error 0900 | |
| F000:03E1 ; got vertical - start timer | |
| F000:03E1 q3: ; CODE XREF: F000:03D9j | |
| F000:03E1 xor al, al | |
| F000:03E3 out 41h, al ; send 2nd byte to timer to start | |
| F000:03E5 sub bx, bx ; init. enable counter | |
| F000:03E7 ; wait for vertical to go away | |
| F000:03E7 xor cx, cx | |
| F000:03E9 q4: ; CODE XREF: F000:03EEj | |
| F000:03E9 in al, dx ; get status | |
| F000:03EA test al, 8 ; vertical still there? | |
| F000:03EC jz short q5 ; continue if it's gone | |
| F000:03EE loop q4 | |
| F000:03F0 mov bl, 1 ; vertical stuck on = error 0901 | |
| F000:03F2 jmp short q115 | |
| F000:03F4 ; now start looking for enable transitions | |
| F000:03F4 q5: ; CODE XREF: F000:03ECj | |
| F000:03F4 ; F000:041Fj | |
| F000:03F4 sub cx, cx | |
| F000:03F6 q6: ; CODE XREF: F000:03FFj | |
| F000:03F6 in al, dx ; get status | |
| F000:03F7 test al, 1 ; enable on yet? | |
| F000:03F9 jnz short q7 ; go on if it is | |
| F000:03FB test al, 8 ; vertical on again? | |
| F000:03FD jnz short q11 ; continue if it is | |
| F000:03FF loop q6 ; keep looking if not | |
| F000:0401 mov bl, 2 | |
| F000:0403 jmp short q115 ; enable stuck off = error 0902 | |
| F000:0405 ; make sure vertical went off with enable going on | |
| F000:0405 q7: ; CODE XREF: F000:03F9j | |
| F000:0405 test al, 8 ; vertical off? | |
| F000:0407 jz short q8 ; go on if it is | |
| F000:0409 mov bl, 3 | |
| F000:040B jmp short q115 ; vertical stuck on = error 0903 | |
| F000:040D ; now wait for enable go to off | |
| F000:040D q8: ; CODE XREF: F000:0407j | |
| F000:040D sub cx, cx | |
| F000:040F q9: ; CODE XREF: F000:0414j | |
| F000:040F in al, dx ; get status | |
| F000:0410 test al, 1 ; enable off yet? | |
| F000:0412 jz short q10 ; proceed if it is | |
| F000:0414 loop q9 ; keep looking if not yet low | |
| F000:0416 mov bl, 4 | |
| F000:0418 jmp short q115 | |
| F000:041A ; enable has toggled , bump counter and test for next vertical | |
| F000:041A q10: ; CODE XREF: F000:0412j | |
| F000:041A inc bx ; bump enable counter | |
| F000:041B jz short q11 ; if counter wraps, error | |
| F000:041D test al, 8 ; did enable go low because of vertical? | |
| F000:041F jz short q5 ; if not, look for another enable toggle | |
| F000:0421 ; have had complete vertical-vertical cycle, now test results | |
| F000:0421 q11: ; CODE XREF: F000:03FDj | |
| F000:0421 ; F000:041Bj | |
| F000:0421 mov al, 1000000b ; latch timer1 | |
| F000:0421 ; (tim 1, latching, interrupt on terminal count, binary) | |
| F000:0423 out 43h, al | |
| F000:0425 cmp bx, 200 ; number of enables between verticals o.k.? | |
| F000:0429 jz short q12 | |
| F000:042B mov bl, 5 | |
| F000:042D q115: ; CODE XREF: F000:03DFj | |
| F000:042D ; F000:03F2j F000:0403j | |
| F000:042D ; F000:040Bj F000:0418j | |
| F000:042D jmp short q22 ; wrong # enables = error 0905 | |
| F000:042F q12: ; CODE XREF: F000:0429j | |
| F000:042F in al, 41h ; get timer value low | |
| F000:0431 mov ah, al ; save it | |
| F000:0433 nop | |
| F000:0434 in al, 41h ; get timer high | |
| F000:0436 xchg ah, al | |
| F000:0438 sti ; interrupts back on | |
| F000:0439 nop | |
| F000:043A cmp ax, 0A0ACh ; (0xb286 * 0.9) | |
| F000:043A ; there are 0x4dc8 PIT cycles per screen (262*76) | |
| F000:043A ; and 0x10000-0xb286 = 0x4d7a... a few PIT cycles short... but good enough | |
| F000:043D jge short q13 | |
| F000:043F mov bl, 6 | |
| F000:0441 jmp short q22 ; verticals too far appart | |
| F000:0441 ; = error 0906 | |
| F000:0443 q13: ; CODE XREF: F000:043Dj | |
| F000:0443 cmp ax, 0C460h ; (0xb286 * 1.1) | |
| F000:0446 jle short q14 | |
| F000:0448 mov bl, 7 | |
| F000:044A jmp short q22 ; verticals too close together | |
| F000:044A ; = error 0907 | |
| F000:044C ; timings seem o.k., now check vertical interrupt (level 5) | |
| F000:044C q14: ; CODE XREF: F000:0446j | |
| F000:044C sub cx, cx ; set timeout reg | |
| F000:044E in al, 21h | |
| F000:0450 and al, 11011111b ; unmask int. level 5 | |
| F000:0452 out 21h, al | |
| F000:0454 and ds:484h, al ; intr flag | |
| F000:0458 sti ; enable ints | |
| F000:0459 q15: ; CODE XREF: F000:0460j | |
| F000:0459 test byte ptr ds:484h, 20h ; see if intr. 5 happened yet | |
| F000:045E jnz short q16 ; go on if it did | |
| F000:0460 loop q15 ; keep looking if it didn't | |
| F000:0462 mov bl, 8 | |
| F000:0464 jmp short q22 ; no vertical interrupt = error 0908 | |
| F000:0466 q16: ; CODE XREF: F000:045Ej | |
| F000:0466 in al, 21h ; disable interrupts for level 5 | |
| F000:0468 or al, 20h | |
| F000:046A out 21h, al | |
| F000:046C ; see if red, green, blue and intesify dots work | |
| F000:046C ; first, set a line of reverse video, intensified blanksinto video | |
| F000:046C ; buffer | |
| F000:046C mov ax, 9DBh ; write chars, blocks | |
| F000:046F mov bx, 77Fh ; page 7, reverse video, high intensity | |
| F000:0472 mov cx, 40 ; 40 characters | |
| F000:0475 int 10h | |
| F000:0477 xor ax, ax ; start with blue dots | |
| F000:0479 q17: ; CODE XREF: F000:04A1j | |
| F000:0479 sub cx, cx | |
| F000:047B out dx, al ; set video array address for dots | |
| F000:047C ; see if dot comes on | |
| F000:047C q18: ; CODE XREF: F000:0481j | |
| F000:047C in al, dx ; get status | |
| F000:047D test al, 10h ; dot there? | |
| F000:047F jnz short q19 ; go look for dot to turn off | |
| F000:0481 loop q18 ; continue testing for dot on | |
| F000:0483 mov bl, 10h | |
| F000:0485 or bl, ah ; or in dot being tested | |
| F000:0487 jmp short q22 ; dot not coming on = error 091x | |
| F000:0487 ; ( x=0, blue; x=1, green; | |
| F000:0487 ; x=2, red;, x=3, intensity) | |
| F000:0489 ; see if dot comes off | |
| F000:0489 q19: ; CODE XREF: F000:047Fj | |
| F000:0489 sub cx, cx | |
| F000:048B q20: ; CODE XREF: F000:0490j | |
| F000:048B in al, dx ; get status | |
| F000:048C test al, 10h ; is dot still on? | |
| F000:048E jz short q21 ; go on if dot off | |
| F000:0490 loop q20 ; else, keep waiting for dot to go off | |
| F000:0492 mov bl, 20h ; ' ' | |
| F000:0494 or bl, ah ; or in dot being tested | |
| F000:0496 jmp short q22 ; dot stuck on = error 092x | |
| F000:0496 ; ( x=0, blue; x=1, green; | |
| F000:0496 ; x=2, red; x=3 intensity) | |
| F000:0498 ; adjust to point to next dot | |
| F000:0498 q21: ; CODE XREF: F000:048Ej | |
| F000:0498 inc ah | |
| F000:049A cmp ah, 4 ; all for dots gone? | |
| F000:049D jz short q23 ; go end | |
| F000:049F mov al, ah | |
| F000:04A1 jmp short q17 ; go look for another dot | |
| F000:04A3 q22: ; CODE XREF: F000:q115j | |
| F000:04A3 ; F000:0441j F000:044Aj | |
| F000:04A3 ; F000:0464j F000:0487j | |
| F000:04A3 ; F000:0496j | |
| F000:04A3 mov bh, 9 ; set msb of error code | |
| F000:04A5 jmp e_msg | |
| F000:04A8 ; done with test reset to 40x25 - color | |
| F000:04A8 q23: ; CODE XREF: F000:049Dj | |
| F000:04A8 call dss | |
| F000:04AB mov ax, 1 ; init to 40x25 - color | |
| F000:04AE int 10h | |
| F000:04B0 mov ax, 507h ; set video page 7 | |
| F000:04B3 int 10h | |
| F000:04B5 cmp word ptr ds:seg40.reset_flag, 1234h ; warm start? | |
| F000:04BB jz short q24 ; bypass putting up power-on screen | |
| F000:04BD call put_logo ; put logo on screen | |
| F000:04C0 q24: ; CODE XREF: F000:04BBj | |
| F000:04C0 mov al, 1110110b ; re-init timer 1 | |
| F000:04C0 ; (tim 1, read/load lsb/msb, square, binary) | |
| F000:04C2 out 43h, al | |
| F000:04C4 mov al, 0 | |
| F000:04C6 out 41h, al | |
| F000:04C8 nop | |
| F000:04C9 nop | |
| F000:04CA out 41h, al | |
| F000:04CC call mfg_up ; mfg checkpoint=f4 | |
| F000:04CF xor ax, ax | |
| F000:04D1 mov ds, ax | |
| F000:04D3 mov word ptr ds:8, offset kdbnmi ; set interrupt vector (int 0x2) | |
| F000:04D9 mov word ptr ds:120h, offset key_scan_save ; set vector for pod int handler (int 0x48) | |
| F000:04DF loc_F04DF: | |
| F000:04DF push cs | |
| F000:04E0 loc_F04E0: | |
| F000:04E0 pop ax | |
| F000:04E1 loc_F04E1: ; (int 0x48 segment) | |
| F000:04E1 mov ds:122h, ax | |
| F000:04E4 loc_F04E4: ; set data segment | |
| F000:04E4 call dss | |
| F000:04E7 mov si, 1Eh | |
| F000:04EA mov ds:seg40.buffer_head, si | |
| F000:04EE mov ds:seg40.buffer_tail, si | |
| F000:04F2 mov ds:seg40.buffer_start, si | |
| F000:04F6 add si, 32 ; set default buffer of 32 bytes | |
| F000:04F9 mov ds:seg40.buffer_end, si | |
| F000:04FD in al, 0A0h ; clear nmi f/f | |
| F000:04FF mov al, 10000000b ; enable nmi | |
| F000:0501 out 0A0h, al | |
| F000:0503 call mfg_up ; mfg checkpoint=f3 | |
| F000:0506 mov bx, 64 ; start with base 64k | |
| F000:0509 in al, 62h ; get config byte | |
| F000:050B test al, 8 ; see if 64k card installed | |
| F000:050D jnz short q25 | |
| F000:050F add bx, 64 ; add 64k | |
| F000:0512 q25: ; CODE XREF: F000:050Dj | |
| F000:0512 push bx ; save k count | |
| F000:0513 sub bx, 16 ; substract 16k crt refresh space | |
| F000:0516 mov ds:seg40.memory_size, bx ; load "contiguous memory" word | |
| F000:051A pop bx | |
| F000:051B mov dx, 2000h ; set pointer to just about 128k | |
| F000:051E sub di, di ; set di to point to beginning | |
| F000:0520 mov cx, 0AA55h ; load data pattern | |
| F000:0523 q26: ; CODE XREF: F000:053Bj | |
| F000:0523 mov es, dx ; set segment to point to memory space | |
| F000:0525 mov es:[di], cx ; set data pattern to memory | |
| F000:0528 mov al, 0Fh | |
| F000:052A mov ax, es:[di] | |
| F000:052D xor ax, cx ; see if data made it back | |
| F000:052F jnz short q27 ; no? then end of mem has been reached | |
| F000:0531 add dx, 1000h ; point to beginning of next 64k | |
| F000:0535 add bx, 40h ; '@' ; adjust total mem counter | |
| F000:0538 cmp dh, 0A0h ; ' ' ; past 640 yet? | |
| F000:053B jnz short q26 ; check for another block if not | |
| F000:053D q27: ; CODE XREF: F000:052Fj | |
| F000:053D mov ds:seg40.true_mem, bx ; load "total memory" word | |
| F000:0541 ; size has been determined, now test or clear all of memory | |
| F000:0541 mov ax, 4 ; 4 kb known ok at this point | |
| F000:0544 call q35 | |
| F000:0547 mov dx, 80h ; '' ; set pointer to just about lower 2k | |
| F000:054A mov cx, 7800h ; test 30k words (60k) | |
| F000:054D q28: ; CODE XREF: F000:0595j | |
| F000:054D mov es, dx | |
| F000:054F push cx | |
| F000:0550 push bx | |
| F000:0551 push ax | |
| F000:0552 call podstg ; test of fill mem | |
| F000:0555 jz short q29 | |
| F000:0557 jmp q39 ; jump if error | |
| F000:055A q29: ; CODE XREF: F000:0555j | |
| F000:055A pop ax | |
| F000:055B pop bx | |
| F000:055C pop cx ; recover | |
| F000:055D cmp ch, 78h ; 'x' ; was this a 60k pass | |
| F000:0560 pushf | |
| F000:0561 add ax, 3Ch ; '<' ; bump good storage by 60k | |
| F000:0564 popf | |
| F000:0565 jz short q30 | |
| F000:0567 add ax, 2 ; add 2 for a 62k pass | |
| F000:056A q30: ; CODE XREF: F000:0565j | |
| F000:056A call q35 | |
| F000:056D cmp ax, bx ; are we done yet? | |
| F000:056F jnz short q31 | |
| F000:0571 jmp q43 ; all done, if so | |
| F000:0574 q31: ; CODE XREF: F000:056Fj | |
| F000:0574 cmp ax, 128 ; done with 1st 128k? | |
| F000:0577 jz short q32 ; go finish rest of mem. | |
| F000:0579 mov dx, 0F80h ; set pointer to finish 1st 64 kb | |
| F000:057C mov cx, 400h | |
| F000:057F mov es, dx | |
| F000:0581 push ax | |
| F000:0582 push bx | |
| F000:0583 push dx | |
| F000:0584 call podstg ; go test/fill | |
| F000:0587 jnz short q39 | |
| F000:0589 pop dx | |
| F000:058A pop bx | |
| F000:058B pop ax | |
| F000:058C add ax, 2 ; update good count | |
| F000:058F mov dx, 1000h ; set pointer to 2nd 64k block | |
| F000:0592 mov cx, 7C00h ; 62k worth | |
| F000:0595 jmp short q28 | |
| F000:0597 q32: ; CODE XREF: F000:0577j | |
| F000:0597 mov dx, 2000h ; point to block about 128k | |
| F000:059A q33: ; CODE XREF: F000:05BAj | |
| F000:059A cmp bx, ax ; compare good mem to total mem | |
| F000:059C jnz short q34 | |
| F000:059E jmp q43 ; exit if all done | |
| F000:05A1 q34: ; CODE XREF: F000:059Cj | |
| F000:05A1 mov cx, 4000h ; set for 32kb block | |
| F000:05A4 mov es, dx | |
| F000:05A6 push ax | |
| F000:05A7 push bx | |
| F000:05A8 push dx | |
| F000:05A9 call podstg ; go test/fill | |
| F000:05AC jnz short q39 | |
| F000:05AE pop dx | |
| F000:05AF pop bx | |
| F000:05B0 pop ax | |
| F000:05B1 add ax, 32 ; bump good memory count | |
| F000:05B4 call q35 ; display current good mem | |
| F000:05B7 add dh, 8 ; set pointer to next 32k | |
| F000:05BA jmp short q33 ; and make another pass | |
| F000:05BC ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:05BC ; subroutine for printing tested | |
| F000:05BC ; memory ok msg on the crt | |
| F000:05BC ; call params: ax = x of good memory | |
| F000:05BC ; (in hex) | |
| F000:05BC q35 proc near ; CODE XREF: F000:0544p | |
| F000:05BC ; F000:q30p F000:05B4p | |
| F000:05BC call dss | |
| F000:05BF cmp word ptr ds:seg40.reset_flag, 1234h | |
| F000:05C5 jz short q35e | |
| F000:05C7 push bx | |
| F000:05C8 push cx | |
| F000:05C9 push dx | |
| F000:05CA push ax | |
| F000:05CB mov ah, 2 | |
| F000:05CD mov dx, 1421h ; row 20 (row 20, col. 33) | |
| F000:05D0 mov bh, 7 | |
| F000:05D2 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:05D2 ; DH,DL = row, column (0,0 = upper left) | |
| F000:05D2 ; BH = page number | |
| F000:05D4 pop ax | |
| F000:05D5 push ax | |
| F000:05D6 mov bx, 0Ah | |
| F000:05D9 mov cx, 3 | |
| F000:05DC q36: ; CODE XREF: q35+28j | |
| F000:05DC xor dx, dx | |
| F000:05DE div bx | |
| F000:05E0 or dl, 30h | |
| F000:05E3 push dx | |
| F000:05E4 loop q36 | |
| F000:05E6 mov cx, 3 | |
| F000:05E9 q37: ; CODE XREF: q35+31j | |
| F000:05E9 pop ax | |
| F000:05EA call prt_hex | |
| F000:05ED loop q37 | |
| F000:05EF mov cx, 3 | |
| F000:05F2 mov si, offset f3b ; print " kb" | |
| F000:05F5 q38: ; CODE XREF: q35+40j | |
| F000:05F5 mov al, cs:[si] | |
| F000:05F8 inc si | |
| F000:05F9 call prt_hex | |
| F000:05FC loop q38 | |
| F000:05FE pop ax | |
| F000:05FF pop dx | |
| F000:0600 pop cx | |
| F000:0601 pop bx | |
| F000:0602 q35e: ; CODE XREF: q35+9j | |
| F000:0602 retn | |
| F000:0602 q35 endp | |
| F000:0603 q39: ; CODE XREF: F000:0557j | |
| F000:0603 ; F000:0587j F000:05ACj | |
| F000:0603 pop dx | |
| F000:0604 cmp dx, 2000h | |
| F000:0608 jl short q40 | |
| F000:060A mov bl, cl | |
| F000:060C or bl, ch | |
| F000:060E mov cl, 4 | |
| F000:0610 shr dh, cl | |
| F000:0612 mov bh, 10h | |
| F000:0614 or bh, dh | |
| F000:0616 jmp short q42 | |
| F000:0618 q40: ; CODE XREF: F000:0608j | |
| F000:0618 mov bh, 0Ah | |
| F000:061A in al, 62h | |
| F000:061C and al, 8 | |
| F000:061E jz short q41 | |
| F000:0620 mov bl, cl | |
| F000:0622 or bl, ch | |
| F000:0624 jmp short q42 | |
| F000:0626 q41: ; CODE XREF: F000:061Ej | |
| F000:0626 cmp ah, 2 | |
| F000:0629 mov bl, cl | |
| F000:062B jz short q42 | |
| F000:062D inc bh | |
| F000:062F or bl, ch | |
| F000:0631 cmp ah, 1 | |
| F000:0634 jz short q42 | |
| F000:0636 inc bh | |
| F000:0638 q42: ; CODE XREF: F000:0616j | |
| F000:0638 ; F000:0624j F000:062Bj | |
| F000:0638 ; F000:0634j | |
| F000:0638 mov si, 35h ; '5' | |
| F000:063B call e_msg | |
| F000:063E cli | |
| F000:063F hlt | |
| F000:0640 ; keyboard test | |
| F000:0640 q43: ; CODE XREF: F000:0571j | |
| F000:0640 ; F000:059Ej | |
| F000:0640 call mfg_up ; mfg code=f2 | |
| F000:0643 call dss | |
| F000:0646 mov bx, 1Eh | |
| F000:0649 mov al, [bx] | |
| F000:064B or al, al | |
| F000:064D jz short f6_y | |
| F000:064F mov bh, 22h ; '"' | |
| F000:0651 mov bl, al | |
| F000:0653 jmp short f6 | |
| F000:0655 f6_y: ; CODE XREF: F000:064Dj | |
| F000:0655 cmp byte ptr ds:seg40.kdb_error, 0 | |
| F000:065A jz short f7 | |
| F000:065C mov bx, 2000h | |
| F000:065F f6: ; CODE XREF: F000:0653j | |
| F000:065F ; F000:06FCj | |
| F000:065F mov si, 36h ; '6' | |
| F000:0662 cmp word ptr ds:seg40.reset_flag, 4321h ; warm start to diags | |
| F000:0668 jz short f6_z ; do not put up message | |
| F000:066A cmp word ptr ds:seg40.reset_flag, 1234h ; warm system start | |
| F000:0670 jz short f6_z ; do not put up message | |
| F000:0672 call e_msg ; pritn msg on screen | |
| F000:0675 f6_z: ; CODE XREF: F000:0668j | |
| F000:0675 ; F000:0670j | |
| F000:0675 jmp f6_x | |
| F000:0678 ;check link card, if present | |
| F000:0678 f7: ; CODE XREF: F000:065Aj | |
| F000:0678 mov dx, 201h | |
| F000:067B in al, dx ; check for burn-in mode | |
| F000:067C and al, 0F0h | |
| F000:067E jz short f6_x ; bypass check in burn-in mode | |
| F000:0680 in al, 62h ; get config port data | |
| F000:0682 and al, 10000000b ; keyboard cable attached? | |
| F000:0684 jz short f6_x ; bypass test if it is | |
| F000:0686 in al, 61h | |
| F000:0688 and al, 11111100b ; drop speaker data | |
| F000:068A out 61h, al | |
| F000:068C mov al, 10110110b ; mode set timer 2 | |
| F000:068C ; (tim 2, read/load lsb/msb, square, binary) | |
| F000:068E out 43h, al | |
| F000:0690 mov al, 1000000b ; disable nmi | |
| F000:0692 out 0A0h, al | |
| F000:0694 mov al, 32 ; lsb to timer 2 (approx. 40khz vaue) | |
| F000:0696 mov dx, 42h ; 'B' | |
| F000:0699 out dx, al | |
| F000:069A sub ax, ax | |
| F000:069C mov cx, ax | |
| F000:069E out dx, al ; msb to timer 2 (start timer) | |
| F000:069F in al, 61h | |
| F000:06A1 or al, 1 | |
| F000:06A3 out 61h, al ; enable timer 2 | |
| F000:06A5 f7_0: ; CODE XREF: F000:06ABj | |
| F000:06A5 in al, 62h ; see if keyboard data active | |
| F000:06A7 and al, 40h ; '@' | |
| F000:06A9 jnz short f7_1 ; exit loop if data showed up | |
| F000:06AB loop f7_0 | |
| F000:06AD mov bl, 2 ; set no keyboard data error | |
| F000:06AF jmp short f6_1 | |
| F000:06B1 f7_1: ; CODE XREF: F000:06A9j | |
| F000:06B1 push es ; save es | |
| F000:06B2 sub ax, ax ; set up segment reg | |
| F000:06B4 mov es, ax ; * | |
| F000:06B6 mov word ptr es:8, offset d11 ; set up new nmi vector | |
| F000:06BD mov ds:seg40.intr_flag, al ; reset intr. flag | |
| F000:06C0 in al, 61h ; disable internal beeper to | |
| F000:06C2 or al, 30h ; prevent error beep | |
| F000:06C4 out 61h, al | |
| F000:06C6 mov al, 11000000b | |
| F000:06C8 out 0A0h, al ; enable nmi | |
| F000:06CA mov cx, 100h | |
| F000:06CD f6_0: ; CODE XREF: F000:f6_0j | |
| F000:06CD loop f6_0 ; wait a bit | |
| F000:06CF in al, 61h ; re-enable beeper | |
| F000:06D1 and al, 0CFh | |
| F000:06D3 out 61h, al | |
| F000:06D5 mov al, ds:seg40.intr_flag ; get intr. flag | |
| F000:06D8 or al, al ; will be non-zero if nmi happened | |
| F000:06DA mov bl, 3 ; set possible error code | |
| F000:06DC mov word ptr es:8, offset kdbnmi ; reset nmi vector | |
| F000:06E3 pop es | |
| F000:06E4 jz short f6_1 | |
| F000:06E6 mov al, 0 ; disable feedback ckt | |
| F000:06E8 out 0A0h, al | |
| F000:06EA in al, 61h | |
| F000:06EC and al, 0FEh ; drop gate to timer 2 | |
| F000:06EE out 61h, al | |
| F000:06F0 f6_2: ; CODE XREF: F000:06F6j | |
| F000:06F0 in al, 62h ; see if keyboard data active | |
| F000:06F2 and al, 40h | |
| F000:06F4 jz short f6_x ; exit loop if data went low | |
| F000:06F6 loop f6_2 | |
| F000:06F8 mov bl, 1 | |
| F000:06FA f6_1: ; CODE XREF: F000:06AFj | |
| F000:06FA ; F000:06E4j | |
| F000:06FA mov bh, 21h ; '!' | |
| F000:06FC jmp f6 | |
| F000:06FF f6_x: ; CODE XREF: F000:f6_zj | |
| F000:06FF ; F000:067Ej F000:0684j | |
| F000:06FF ; F000:06F4j | |
| F000:06FF mov al, 0 ; disable feedback ckt | |
| F000:0701 out 0A0h, al | |
| F000:0703 ; cassette interface test | |
| F000:0703 call mfg_up | |
| F000:0706 in al, 61h | |
| F000:0708 or al, 9 | |
| F000:070A out 61h, al | |
| F000:070C ;----- write a bit | |
| F000:070C in al, 21h | |
| F000:070E or al, 1 ; disable timer interrupts | |
| F000:0710 out 21h, al | |
| F000:0712 mov al, 10110110b ; sel tim 2, lsb, msb, md 3 | |
| F000:0712 ; (tim 2, read/load lsb/msb, square, binary) | |
| F000:0714 out 43h, al | |
| F000:0716 mov ax, 4D2h | |
| F000:0719 out 42h, al | |
| F000:071B mov al, ah | |
| F000:071D out 42h, al | |
| F000:071F sub cx, cx | |
| F000:0721 l0: ; CODE XREF: F000:l0j | |
| F000:0721 loop l0 | |
| F000:0723 ;----- read cassette input | |
| F000:0723 in al, 62h | |
| F000:0725 and al, 10h | |
| F000:0727 mov ds:6Bh, al | |
| F000:072A call read_half_bit | |
| F000:072D call read_half_bit | |
| F000:0730 jcxz short f8 | |
| F000:0732 push bx | |
| F000:0733 call read_half_bit | |
| F000:0736 pop ax | |
| F000:0737 jcxz short f8 | |
| F000:0739 add ax, bx | |
| F000:073B cmp ax, 0A9Ah | |
| F000:073E jnb short f8 | |
| F000:0740 cmp ax, 8ADh | |
| F000:0743 jb short f8 | |
| F000:0745 mov dx, 201h | |
| F000:0748 in al, dx | |
| F000:0749 and al, 0F0h ; determine mode | |
| F000:074B cmp al, 10h ; mfg? | |
| F000:074D jz short f9 | |
| F000:074F cmp al, 1000000b ; service? | |
| F000:0751 jnz short t13_end ; go to next test if not | |
| F000:0753 f9: ; CODE XREF: F000:074Dj | |
| F000:0753 in al, 61h | |
| F000:0755 mov dl, al | |
| F000:0757 and al, 0E5h | |
| F000:0759 out 61h, al | |
| F000:075B xor cx, cx | |
| F000:075D f91: ; CODE XREF: F000:f91j | |
| F000:075D loop f91 | |
| F000:075F call read_half_bit | |
| F000:0762 call read_half_bit | |
| F000:0765 mov al, dl | |
| F000:0767 out 61h, al | |
| F000:0769 jcxz short t13_end | |
| F000:076B mov bx, 23FFh | |
| F000:076E jmp short f81 | |
| F000:0770 f8: ; CODE XREF: F000:0730j | |
| F000:0770 ; F000:0737j F000:073Ej | |
| F000:0770 ; F000:0743j | |
| F000:0770 mov bx, 2300h | |
| F000:0773 f81: ; CODE XREF: F000:076Ej | |
| F000:0773 mov si, 37h ; '7' | |
| F000:0776 call e_msg | |
| F000:0779 t13_end: ; CODE XREF: F000:0751j | |
| F000:0779 ; F000:0769j | |
| F000:0779 in al, 21h | |
| F000:077B and al, 0FEh ; enable timer ints | |
| F000:077D out 21h, al | |
| F000:077F in al, 0A0h ; clear nmi flip/flop | |
| F000:0781 mov al, 10000000b ; enable nmi interrupts | |
| F000:0783 out 0A0h, al | |
| F000:0785 call mfg_up | |
| F000:0788 mov dx, 2F8h | |
| F000:078B call uart | |
| F000:078E jnb short tm | |
| F000:0790 mov si, 38h ; '8' | |
| F000:0793 call e_msg | |
| F000:0796 tm: ; CODE XREF: F000:078Ej | |
| F000:0796 call mfg_up | |
| F000:0799 in al, 62h | |
| F000:079B and al, 2 | |
| F000:079D jnz short tm1 | |
| F000:079F mov dx, 3F8h | |
| F000:07A2 call uart | |
| F000:07A5 jnb short tm1 | |
| F000:07A7 mov si, 39h ; '9' | |
| F000:07AA call e_msg | |
| F000:07AD tm1: ; CODE XREF: F000:079Dj | |
| F000:07AD ; F000:07A5j | |
| F000:07AD sub ax, ax | |
| F000:07AF mov es, ax | |
| F000:07B1 mov cx, 8 ; get vector cnt | |
| F000:07B4 push cs ; setup ds seg reg | |
| F000:07B5 pop ds | |
| F000:07B6 mov si, offset vector_table | |
| F000:07B9 mov di, 20h ; ' ' | |
| F000:07BC f7a: ; CODE XREF: F000:07BFj | |
| F000:07BC movsw | |
| F000:07BD inc di ; skip over segment | |
| F000:07BE inc di | |
| F000:07BF loop f7a | |
| F000:07C1 mov ds, cx | |
| F000:07C3 mov word ptr ds:14h, offset print_screen ; print screen (int 0x5) | |
| F000:07C9 mov word ptr ds:120h, offset key62_int ; 62 key conversion routine (int 0x48) | |
| F000:07CF mov word ptr ds:110h, offset crt_char_gen ; dot table (int 0x44) | |
| F000:07D5 mov word ptr ds:60h, offset bas_ent ; cassette basic entry (int 0x18) | |
| F000:07DB push cs | |
| F000:07DC pop ax | |
| F000:07DD mov ds:62h, ax ; code segment for cassette (int 0x18) | |
| F000:07E0 mov al, 1 | |
| F000:07E2 out 13h, al ; (activity signal) | |
| F000:07E4 call mfg_up ; mfg routine = ee | |
| F000:07E7 mov dx, 0C000h ; set beginning address | |
| F000:07EA rom_scan_1: ; CODE XREF: F000:0804j | |
| F000:07EA mov ds, dx | |
| F000:07EC sub bx, bx | |
| F000:07EE mov ax, [bx] | |
| F000:07F0 push bx | |
| F000:07F1 pop bx | |
| F000:07F2 cmp ax, 0AA55h | |
| F000:07F5 jnz short next_rom | |
| F000:07F7 call rom_check | |
| F000:07FA jmp short are_we_done | |
| F000:07FC next_rom: ; CODE XREF: F000:07F5j | |
| F000:07FC add dx, 80h ; '' | |
| F000:0800 are_we_done: ; CODE XREF: F000:07FAj | |
| F000:0800 cmp dx, 0F000h | |
| F000:0804 jl short rom_scan_1 | |
| F000:0806 ;---------------------------------------------------- | |
| F000:0806 ; diskette attachment test | |
| F000:0806 ; description: | |
| F000:0806 ; check if ipl diskette drive is attached to system. if | |
| F000:0806 ; attached, verify status of nec fdc after a reset. issue | |
| F000:0806 ; a recal and seek cmd to fdc and check status. complete | |
| F000:0806 ; system initialization then pass control to the boot | |
| F000:0806 ; loader program | |
| F000:0806 ; mfg err codes: 2601 reset to diskette controller cd. failed | |
| F000:0806 ; 2602 recalibrate to diskette drive failed | |
| F000:0806 ; 2603 watchdog timer failed | |
| F000:0806 ;---------------------------------------------------- | |
| F000:0806 call mfg_up ; mfg routine = ed | |
| F000:0809 call dss ; point to data area | |
| F000:080C mov al, 0FFh | |
| F000:080E mov ds:seg40.track_0, al ; init diskette scratchpads | |
| F000:0811 mov ds:seg40.track_1, al | |
| F000:0814 mov ds:seg40.track_2, al | |
| F000:0817 in al, 62h ; diskette present? | |
| F000:0819 and al, 100b | |
| F000:081B jz short f10_0 | |
| F000:081D jmp f15 ; no, bypass diskette test | |
| F000:0820 f10_0: ; CODE XREF: F000:081Bj | |
| F000:0820 or byte ptr ds:seg40.equip_flag, 1 ; set ipl diskette indication in equip. flag | |
| F000:0825 cmp word ptr ds:seg40.reset_flag, 0 ; running from power-on state? | |
| F000:082A jnz short f10 ; bypass watchdog test | |
| F000:082C mov al, 0Ah ; read int. request register cmd. | |
| F000:082E out 20h, al | |
| F000:0830 in al, 20h | |
| F000:0832 and al, 40h ; has watchdog gone off | |
| F000:0834 jnz short f10 ; proceed if it has | |
| F000:0836 mov bl, 3 ; set error code | |
| F000:0838 jmp short f13 | |
| F000:083A f10: ; CODE XREF: F000:082Aj | |
| F000:083A ; F000:0834j | |
| F000:083A mov al, 80h ; '' | |
| F000:083C out 0F2h, al ; disable watchdog timer | |
| F000:083E mov ah, 0 ; reset nec fdc | |
| F000:0840 mov dl, ah ; set for drive 0 | |
| F000:0842 int 13h ; verify status after reset | |
| F000:0844 test ah, 0FFh ; status ok? | |
| F000:0847 mov bl, 1 ; set up possible error code | |
| F000:0849 jnz short f13 ; no - fdc failed | |
| F000:084B ;----- turn drive 0 motor on | |
| F000:084B mov al, 81h ; '' ; turn motor on, drive 0 | |
| F000:084D out 0F2h, al ; write fdc control reg | |
| F000:084F sub cx, cx | |
| F000:0851 f11: ; CODE XREF: F000:f11j | |
| F000:0851 loop f11 ; wait for one second | |
| F000:0853 f12: ; CODE XREF: F000:f12j | |
| F000:0853 loop f12 | |
| F000:0855 xor dx, dx ; select drive 0 | |
| F000:0857 mov ch, 1 ; select track 1 | |
| F000:0859 mov ds:seg40.seek_status, dl | |
| F000:085D call seek ; recalibrate disk | |
| F000:0860 mov bl, 2 ; error code | |
| F000:0862 jb short f13 ; go to err subroutine if err | |
| F000:0864 mov ch, 34 ; select track 34 | |
| F000:0866 call seek ; seek to track 34 | |
| F000:0869 jnb short f14 ; ok, turn motor off | |
| F000:086B mov bl, 2 | |
| F000:086D f13: ; CODE XREF: F000:0838j | |
| F000:086D ; F000:0849j F000:0862j | |
| F000:086D mov bh, 26h ; '&' ; dsk_err: (26xx) | |
| F000:086F mov si, offset disk_err ; get addr of msg | |
| F000:0872 call e_msg ; go print error msg | |
| F000:0875 f14: ; CODE XREF: F000:0869j | |
| F000:0875 mov al, 82h ; '' | |
| F000:0877 out 0F2h, al | |
| F000:0879 in al, 0E2h | |
| F000:087B and al, 110b | |
| F000:087D cmp al, 10b | |
| F000:087F jnz short f14_1 | |
| F000:0881 mov al, 84h ; '' | |
| F000:0883 out 0F2h, al | |
| F000:0885 in al, 0E2h | |
| F000:0887 and al, 110b | |
| F000:0889 cmp al, 100b | |
| F000:088B jnz short f14_1 | |
| F000:088D in al, 0E2h | |
| F000:088F and al, 110000b | |
| F000:0891 jz short f14_1 | |
| F000:0893 cmp al, 10000b | |
| F000:0895 mov ah, 40h ; '@' | |
| F000:0897 jz short f14_2 | |
| F000:0899 mov ah, 80h ; '' | |
| F000:089B f14_2: ; CODE XREF: F000:0897j | |
| F000:089B or ds:seg40.equip_flag, ah | |
| F000:089F ;----- turn drive 0 motor off | |
| F000:089F f14_1: ; CODE XREF: F000:087Fj | |
| F000:089F ; F000:088Bj F000:0891j | |
| F000:089F mov al, 80h ; '' ; turn drive 0 motor off | |
| F000:08A1 out 0F2h, al | |
| F000:08A3 f15: ; CODE XREF: F000:081Dj | |
| F000:08A3 mov byte ptr ds:seg40.intr_flag, 0 ; set stray interrupt flag = 00 | |
| F000:08A8 mov di, 78h ; 'x' ; set default prt timeout | |
| F000:08AB push ds | |
| F000:08AC pop es | |
| F000:08AD mov ax, 1414h ; default=20 | |
| F000:08B0 stosw | |
| F000:08B1 stosw | |
| F000:08B2 mov ax, 101h ; rs232 default=01 | |
| F000:08B5 stosw | |
| F000:08B6 stosw | |
| F000:08B7 in al, 21h | |
| F000:08B9 and al, 0FEh ; enable timer int. (lvl 0) | |
| F000:08BB out 21h, al | |
| F000:08BD push ds | |
| F000:08BE mov ax, 50h ; 'P' | |
| F000:08C1 mov ds, ax | |
| F000:08C3 cmp byte ptr ds:seg50.post_err, 0 ; check for "post_err" non-zero | |
| F000:08C8 pop ds | |
| F000:08C9 jz short f15a_0 ; continue if no error | |
| F000:08CB mov dl, 2 | |
| F000:08CD call err_beep | |
| F000:08D0 err_wait: ; CODE XREF: F000:08D7j | |
| F000:08D0 mov ah, 0 | |
| F000:08D2 int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY | |
| F000:08D2 ; Return: AH = scan code, AL = character | |
| F000:08D4 cmp ah, 1Ch | |
| F000:08D7 jnz short err_wait | |
| F000:08D9 jmp short f15c | |
| F000:08DB f15a_0: ; CODE XREF: F000:08C9j | |
| F000:08DB mov dl, 1 | |
| F000:08DD call err_beep | |
| F000:08E0 ;----- setup printer and rs232 base addresses if device attached | |
| F000:08E0 f15c: ; CODE XREF: F000:08D9j | |
| F000:08E0 mov bp, offset f4 | |
| F000:08E3 xor si, si | |
| F000:08E5 f16: ; CODE XREF: F000:08FEj | |
| F000:08E5 mov dx, cs:[bp+0] | |
| F000:08E9 mov al, 0AAh ; 'ª' | |
| F000:08EB out dx, al | |
| F000:08EC push ds | |
| F000:08ED in al, dx | |
| F000:08EE pop ds | |
| F000:08EF cmp al, 0AAh ; 'ª' | |
| F000:08F1 jnz short f17 | |
| F000:08F3 mov [si+8], dx | |
| F000:08F7 inc si | |
| F000:08F8 inc si | |
| F000:08F9 f17: ; CODE XREF: F000:08F1j | |
| F000:08F9 inc bp | |
| F000:08FA inc bp | |
| F000:08FB cmp bp, 41h ; 'A' | |
| F000:08FE jnz short f16 | |
| F000:0900 xor bx, bx | |
| F000:0902 mov dx, 3FAh | |
| F000:0905 in al, dx | |
| F000:0906 test al, 0F8h | |
| F000:0908 jnz short f18 | |
| F000:090A mov word ptr [bx+0], 3F8h | |
| F000:0910 inc bx | |
| F000:0911 inc bx | |
| F000:0912 f18: ; CODE XREF: F000:0908j | |
| F000:0912 mov word ptr [bx+0], 2F8h | |
| F000:0918 inc bx | |
| F000:0919 inc bx | |
| F000:091A mov ax, si | |
| F000:091C mov cl, 3 | |
| F000:091E ror al, cl | |
| F000:0920 or al, bl | |
| F000:0922 or ds:11h, al | |
| F000:0926 mov cx, ax | |
| F000:0928 mov bx, 2FEh | |
| F000:092B mov dx, 2FCh | |
| F000:092E sub al, al | |
| F000:0930 out dx, al | |
| F000:0931 jmp short $+2 | |
| F000:0933 xchg dx, bx | |
| F000:0935 in al, dx | |
| F000:0936 jmp short $+2 | |
| F000:0938 mov al, 2 | |
| F000:093A xchg dx, bx | |
| F000:093C out dx, al | |
| F000:093D jmp short $+2 | |
| F000:093F xchg dx, bx | |
| F000:0941 in al, dx | |
| F000:0942 test al, 8 | |
| F000:0944 jz short f19_a | |
| F000:0946 test al, 1 | |
| F000:0948 jnz short f19_a | |
| F000:094A sub al, al | |
| F000:094C xchg dx, bx | |
| F000:094E out dx, al | |
| F000:094F jmp short $+2 | |
| F000:0951 xchg dx, bx | |
| F000:0953 in al, dx | |
| F000:0954 and al, 8 | |
| F000:0956 jz short f19_a | |
| F000:0958 ; carrier detect if following rts-indicate serial printer attached | |
| F000:0958 or cl, 100000b | |
| F000:095B test cl, 11000000b | |
| F000:095E jnz short f19_a | |
| F000:0960 or cl, 1000000b | |
| F000:0963 mov word ptr ds:seg40.printer_base, 2F8h | |
| F000:0969 f19_a: ; CODE XREF: F000:0944j | |
| F000:0969 ; F000:0948j F000:0956j | |
| F000:0969 ; F000:095Ej | |
| F000:0969 or ds:seg40.equip_flag+1, cl | |
| F000:096D xor dx, dx | |
| F000:096F test cl, 40h | |
| F000:0972 jz short f19_c | |
| F000:0974 cmp word ptr ds:seg40, 2F8h | |
| F000:097A jz short f19_b | |
| F000:097C inc dx | |
| F000:097D f19_b: ; CODE XREF: F000:097Aj | |
| F000:097D mov ax, 87h ; '' ; init serial printer | |
| F000:0980 int 14h | |
| F000:0982 test ah, 1Eh ; error? | |
| F000:0985 jnz short f19_c ; yes, jump | |
| F000:0987 mov ax, 118h ; send cancel command to | |
| F000:098A int 14h ; ...serial printer | |
| F000:098C f19_c: ; CODE XREF: F000:0972j | |
| F000:098C ; F000:0985j | |
| F000:098C mov dx, 201h | |
| F000:098F in al, dx ; get mfg./ service mode info | |
| F000:0990 and al, 0F0h ; is high order nibble = 0 ? | |
| F000:0992 jnz short f19_1 ; (burn-in mode) | |
| F000:0994 f19_0: ; CODE XREF: F000:0999j | |
| F000:0994 jmp reset | |
| F000:0997 f19_1: ; CODE XREF: F000:0992j | |
| F000:0997 cmp al, 100000b ; service mode loop? | |
| F000:0999 jz short f19_0 ; branch to start | |
| F000:099B cmp word ptr ds:seg40.reset_flag, 4321h ; diag. control program restart | |
| F000:09A1 jz short f19_3 ; no, go boot | |
| F000:09A3 cmp al, 10000b ; mfg dcp run request | |
| F000:09A5 jz short f19_3 | |
| F000:09A7 mov word ptr ds:seg40.reset_flag, 1234h ; set warm start indicator in case of cartridge reset | |
| F000:09AD int 19h ; go to boot loader | |
| F000:09AF f19_3: ; CODE XREF: F000:09A1j | |
| F000:09AF ; F000:09A5j | |
| F000:09AF cli | |
| F000:09B0 sub ax, ax | |
| F000:09B2 mov ds, ax ; reset timer int. | |
| F000:09B4 mov word ptr ds:20h, offset timer_int ; (int 0x08) | |
| F000:09BA int 80h ; enter dcp through int. 80h | |
| F000:09BC ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:09BC ; this subroutine is the general error handler for the post | |
| F000:09BC ; si = offset(address) of message buffer | |
| F000:09BC ; bx = error code for manufacturing or service mode | |
| F000:09BC ; registers are not preserved | |
| F000:09BC ; location "post_err" is set non-zero if an error occurs in | |
| F000:09BC ; customer mode | |
| F000:09BC ; service/manufacturing flags as follows: (high nibble of | |
| F000:09BC ; port 201) | |
| F000:09BC ; 0000 = manufacturing (burn-in) mode | |
| F000:09BC ; 0001 = manufacturing (system test) mode | |
| F000:09BC ; 0010 = service mode (loop post) | |
| F000:09BC ; 0100 = service mode (system test) | |
| F000:09BC e_msg proc near ; CODE XREF: kb_int-1477j | |
| F000:09BC ; F000:014Ej F000:015Cj | |
| F000:09BC ; F000:l22j F000:01BFj | |
| F000:09BC ; F000:0295j ... | |
| F000:09BC mov dx, 201h | |
| F000:09BF in al, dx ; get mode bits | |
| F000:09C0 and al, 0F0h ; isolate bits of interest | |
| F000:09C2 jnz short em0 | |
| F000:09C4 jmp mfg_out ; manufacturing mode (burn-in) | |
| F000:09C7 em0: ; CODE XREF: e_msg+6j | |
| F000:09C7 cmp al, 10000b | |
| F000:09C9 jnz short em1 | |
| F000:09CB jmp mfg_out ; mfg. mode (system test) | |
| F000:09CE em1: ; CODE XREF: e_msg+Dj | |
| F000:09CE mov dh, al ; save mode | |
| F000:09D0 cmp bh, 0Ah ; error code above 0ah (crt started display possible?) | |
| F000:09D3 jl short beeps ; do beep output if below 10 | |
| F000:09D5 push bx ; save error and mode flags | |
| F000:09D6 push si | |
| F000:09D7 push dx | |
| F000:09D8 mov ah, 2 ; set cursor | |
| F000:09DA mov dx, 1521h ; row 21, col. 33 | |
| F000:09DD mov bh, 7 ; page 7 | |
| F000:09DF int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:09DF ; DH,DL = row, column (0,0 = upper left) | |
| F000:09DF ; BH = page number | |
| F000:09E1 mov si, offset error_err ; "ERROR" | |
| F000:09E4 mov cx, 5 | |
| F000:09E7 em_0: ; CODE XREF: e_msg+32j | |
| F000:09E7 mov al, cs:[si] | |
| F000:09EA inc si | |
| F000:09EB call prt_hex | |
| F000:09EE loop em_0 | |
| F000:09F0 ; look for a blank space to possibly put customer level errors (in | |
| F000:09F0 ; case of multi error) | |
| F000:09F0 mov dh, 16h | |
| F000:09F2 em_1: ; CODE XREF: e_msg+42j | |
| F000:09F2 mov ah, 2 | |
| F000:09F4 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:09F4 ; DH,DL = row, column (0,0 = upper left) | |
| F000:09F4 ; BH = page number | |
| F000:09F6 mov ah, 8 | |
| F000:09F8 int 10h ; - VIDEO - READ ATTRIBUTES/CHARACTER AT CURSOR POSITION | |
| F000:09F8 ; BH = display page | |
| F000:09F8 ; Return: AL = character | |
| F000:09F8 ; AH = attribute of character (alpha modes) | |
| F000:09FA inc dl | |
| F000:09FC cmp al, 20h ; ' ' | |
| F000:09FE jnz short em_1 | |
| F000:0A00 pop dx | |
| F000:0A01 pop si | |
| F000:0A02 pop bx | |
| F000:0A03 cmp dh, 100000b ; service mode ? | |
| F000:0A06 jz short serv_out | |
| F000:0A08 cmp dh, 1000000b | |
| F000:0A0B jz short serv_out | |
| F000:0A0D mov al, cs:[si] ; get error char | |
| F000:0A10 call prt_hex ; display it | |
| F000:0A13 cmp bh, 20h ; ' ' ; error below 20? (mem trouble?) | |
| F000:0A16 jge short em_2 | |
| F000:0A18 jmp totlpt0 ; halt system if so. | |
| F000:0A1B em_2: ; CODE XREF: e_msg+5Aj | |
| F000:0A1B push ds | |
| F000:0A1C push ax | |
| F000:0A1D mov ax, 50h ; 'P' | |
| F000:0A20 mov ds, ax | |
| F000:0A22 mov ds:seg50.post_err, bh ; set error flag to non-zero | |
| F000:0A26 pop ax | |
| F000:0A27 pop ds | |
| F000:0A28 retn ; return to caller | |
| F000:0A29 serv_out: ; CODE XREF: e_msg+4Aj | |
| F000:0A29 ; e_msg+4Fj | |
| F000:0A29 mov al, bh | |
| F000:0A2B push bx | |
| F000:0A2C call xpc_byte | |
| F000:0A2F pop bx | |
| F000:0A30 mov al, bl | |
| F000:0A32 call xpc_byte | |
| F000:0A35 jmp totlpt0 | |
| F000:0A38 beeps: ; CODE XREF: e_msg+17j | |
| F000:0A38 cli | |
| F000:0A39 mov ax, cs | |
| F000:0A3B mov ss, ax | |
| F000:0A3D mov dl, 2 | |
| F000:0A3F mov sp, offset ex_0 ; set dummy return (eb0) | |
| F000:0A42 eb: ; CODE XREF: e_msg+8Fj | |
| F000:0A42 mov bl, 1 | |
| F000:0A44 jmp beep | |
| F000:0A47 eb0: ; CODE XREF: e_msg:eb0j | |
| F000:0A47 ; DATA XREF: F000:ex_0o | |
| F000:0A47 ; F000:002Ao | |
| F000:0A47 loop eb0 | |
| F000:0A49 dec dl | |
| F000:0A4B jnz short eb | |
| F000:0A4D cmp bh, 5 | |
| F000:0A50 jnz short totlpt0 | |
| F000:0A52 cmp dh, 20h ; ' ' | |
| F000:0A55 jz short eb1 | |
| F000:0A57 cmp dh, 40h ; '@' | |
| F000:0A5A jnz short totlpt0 | |
| F000:0A5C eb1: ; CODE XREF: e_msg+99j | |
| F000:0A5C mov bl, 1 | |
| F000:0A5E jmp beep | |
| F000:0A61 mfg_out: ; CODE XREF: e_msg+8j | |
| F000:0A61 ; e_msg+Fj | |
| F000:0A61 ; DATA XREF: F000:01F8o | |
| F000:0A61 cli | |
| F000:0A62 in al, 61h | |
| F000:0A64 and al, 0FCh | |
| F000:0A66 out 61h, al | |
| F000:0A68 mov dx, 11h | |
| F000:0A6B mov al, bh ; send data to addresses 11,12 | |
| F000:0A6D out dx, al | |
| F000:0A6E inc dx ; send high byte | |
| F000:0A6F mov al, bl | |
| F000:0A71 out dx, al ; send low byte | |
| F000:0A72 ; init. on-board rs232 port for communications w/mfg monitor | |
| F000:0A72 mov ax, 50h ; 'P' | |
| F000:0A75 mov ds, ax ; point to data segment containing checkpoint # | |
| F000:0A77 mov ax, cs | |
| F000:0A79 mov ss, ax ; set stack for rtn | |
| F000:0A7B mov sp, offset ex1 ; (points to mo1) | |
| F000:0A7E mov dx, 2FBh ; line control reg. address | |
| F000:0A81 jmp s8250 ; go set up for 9600, 0dd, 2 stop bits, 8 bits | |
| F000:0A84 mo1: ; DATA XREF: F000:ex1o | |
| F000:0A84 mov cx, dx ; dx came back with xmit reg address in it | |
| F000:0A86 mov dx, 2FCh ; modem control reg | |
| F000:0A89 sub al, al ; set dtr and rts low so possible wrap plug won't confuse things | |
| F000:0A8B out dx, al | |
| F000:0A8C mov dx, 2FEh ; modem status reg | |
| F000:0A8F mo2: ; CODE XREF: e_msg+D6j | |
| F000:0A8F in al, dx | |
| F000:0A90 and al, 10000b ; cts up yet? | |
| F000:0A92 jz short mo2 ; loop til it is | |
| F000:0A94 dec dx ; set dx=2fd (line status reg) | |
| F000:0A95 xchg dx, cx ; point to xmit. data reg | |
| F000:0A97 mov al, ds:seg50.mfg_tst ; get mfg routine error indicator | |
| F000:0A9A out dx, al ; (maybe wrong from early errors) | |
| F000:0A9B jmp short $+2 ; delay | |
| F000:0A9D xchg dx, cx ; point dx=2fd | |
| F000:0A9F mo3: ; CODE XREF: e_msg+E8j | |
| F000:0A9F in al, dx ; transmit empty? | |
| F000:0AA0 and al, 100000b | |
| F000:0AA2 jmp short $+2 ; delay | |
| F000:0AA4 jz short mo3 ; loop til it is | |
| F000:0AA6 xchg dx, cx | |
| F000:0AA8 mov al, bh ; get msb of error word | |
| F000:0AAA out dx, al | |
| F000:0AAB jmp short $+2 ; delay | |
| F000:0AAD xchg dx, cx | |
| F000:0AAF mo4: ; CODE XREF: e_msg+F8j | |
| F000:0AAF in al, dx ; wait for xmit empty | |
| F000:0AB0 and al, 100000b | |
| F000:0AB2 jmp short $+2 ; delay | |
| F000:0AB4 jz short mo4 | |
| F000:0AB6 mov al, bl ; get lsb of error word | |
| F000:0AB8 xchg dx, cx | |
| F000:0ABA out dx, al | |
| F000:0ABB totlpt0: ; CODE XREF: e_msg+5Cj | |
| F000:0ABB ; e_msg+79j e_msg+94j | |
| F000:0ABB ; e_msg+9Ej | |
| F000:0ABB ; DATA XREF: F000:002Co | |
| F000:0ABB cli ; disable ints. | |
| F000:0ABC sub al, al | |
| F000:0ABE out 0F2h, al ; stop diskette motor | |
| F000:0AC0 out 0A0h, al ; disable nmi | |
| F000:0AC2 hlt ; halt | |
| F000:0AC3 retn | |
| F000:0AC3 e_msg endp | |
| F000:0AC4 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:0AC4 i8250 proc near ; CODE XREF: uart+Dp | |
| F000:0AC4 ; uart+11Ep | |
| F000:0AC4 in al, dx | |
| F000:0AC5 mov bl, 2 | |
| F000:0AC7 call rr2 | |
| F000:0ACA and al, 0F0h | |
| F000:0ACC jnz short at20 | |
| F000:0ACE call rr1 | |
| F000:0AD1 and al, 0F8h | |
| F000:0AD3 jnz short at20 | |
| F000:0AD5 inc dx | |
| F000:0AD6 call rr1 | |
| F000:0AD9 and al, 0E0h | |
| F000:0ADB jnz short at20 | |
| F000:0ADD call rr1 | |
| F000:0AE0 and al, 80h | |
| F000:0AE2 jnz short at20 | |
| F000:0AE4 mov al, 60h ; '`' | |
| F000:0AE6 out dx, al | |
| F000:0AE7 jmp short $+2 | |
| F000:0AE9 inc dx | |
| F000:0AEA xor al, al | |
| F000:0AEC out dx, al | |
| F000:0AED call rr3 | |
| F000:0AF0 sub dx, 6 | |
| F000:0AF3 in al, dx | |
| F000:0AF4 clc | |
| F000:0AF5 retn | |
| F000:0AF6 at20: ; CODE XREF: i8250+8j | |
| F000:0AF6 ; i8250+Fj i8250+17j | |
| F000:0AF6 ; i8250+1Ej | |
| F000:0AF6 stc | |
| F000:0AF7 retn | |
| F000:0AF7 i8250 endp | |
| F000:0AF8 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:0AF8 ict proc near ; CODE XREF: uart+36p | |
| F000:0AF8 ; uart+90p uart+D1p | |
| F000:0AF8 in al, dx | |
| F000:0AF9 jmp short $+2 | |
| F000:0AFB or al, ah | |
| F000:0AFD out dx, al | |
| F000:0AFE sub dx, cx | |
| F000:0B00 push cx | |
| F000:0B01 sub cx, cx | |
| F000:0B03 at21: ; CODE XREF: ict+10j | |
| F000:0B03 in al, dx | |
| F000:0B04 test al, 1 | |
| F000:0B06 jz short at22 | |
| F000:0B08 loop at21 | |
| F000:0B0A at22: ; CODE XREF: ict+Ej | |
| F000:0B0A pop cx | |
| F000:0B0B cmp al, bh | |
| F000:0B0D jnz short at23 | |
| F000:0B0F or bl, bl | |
| F000:0B11 jz short at24 | |
| F000:0B13 add dx, cx | |
| F000:0B15 in al, dx | |
| F000:0B16 jmp short at24 | |
| F000:0B18 at23: ; CODE XREF: ict+15j | |
| F000:0B18 mov al, 0FFh | |
| F000:0B1A at24: ; CODE XREF: ict+19j ict+1Ej | |
| F000:0B1A retn | |
| F000:0B1A ict endp | |
| F000:0B1B ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:0B1B ; --- int 0x19 ------------------------------- | |
| F000:0B1B ; boot strap loader | |
| F000:0B1B ; | |
| F000:0B1B ; track 0, sector 1 is read into the | |
| F000:0B1B ; boot location (segment 0, offset 7c00) | |
| F000:0B1B ; and control is transferred there | |
| F000:0B1B ; | |
| F000:0B1B ; if the diskette is not present or has a | |
| F000:0B1B ; problem loading (e.g., not ready), and int. | |
| F000:0B1B ; 18h is executed. if a cartridge has vectored | |
| F000:0B1B ; int 18h to itself, control will be passed to | |
| F000:0B1B ; the cartridge. | |
| F000:0B1B ; -------------------------------------------- | |
| F000:0B1B boot_strap proc near ; CODE XREF: F000:E6F2j | |
| F000:0B1B ; DATA XREF: F000:FF15o | |
| F000:0B1B sti ; enable interrupts | |
| F000:0B1C sub ax, ax ; set 40x25 b&w mode on crt | |
| F000:0B1E int 10h | |
| F000:0B20 sub ax, ax ; establish addressing | |
| F000:0B22 mov ds, ax | |
| F000:0B24 ;----- see if diskette is present | |
| F000:0B24 in al, 62h ; get config bits | |
| F000:0B26 and al, 100b ; is diskette present? | |
| F000:0B28 jnz short h3 ; no, then attempt to go to cart | |
| F000:0B2A ;----- reset the disk parameter table vector | |
| F000:0B2A mov word ptr ds:78h, offset disk_parms ; (int 0x1e offset) | |
| F000:0B30 mov word ptr ds:7Ah, cs ; (int 0x1e segment) | |
| F000:0B34 ;----- load system from diskette -- cx has retry count | |
| F000:0B34 mov cx, 4 ; set retry count | |
| F000:0B37 h1: ; CODE XREF: boot_strap+35j | |
| F000:0B37 push cx ; save retry count | |
| F000:0B38 mov ah, 0 ; reset the diskette system | |
| F000:0B3A int 13h ; diskette_io | |
| F000:0B3C jb short h2 ; if error, try again | |
| F000:0B3E mov ax, 201h ; read in the single sector | |
| F000:0B41 sub dx, dx ; to the boot location | |
| F000:0B43 mov es, dx | |
| F000:0B45 mov bx, 7C00h ; (boot location) | |
| F000:0B48 mov cx, 1 ; drive 0, head 0, sector 1, track 0 | |
| F000:0B4B int 13h ; diskette_io | |
| F000:0B4D h2: ; CODE XREF: boot_strap+21j | |
| F000:0B4D pop cx ; recover retry count | |
| F000:0B4E jnb short h3a ; cf set by unsuccessful read | |
| F000:0B50 loop h1 ; do it for retry times | |
| F000:0B52 ;----- unable to ips from diskette | |
| F000:0B52 h3: ; CODE XREF: boot_strap+Dj | |
| F000:0B52 int 18h ; go to basic or cartridge | |
| F000:0B54 ;----- ips was successful | |
| F000:0B54 h3a: ; CODE XREF: boot_strap+33j | |
| F000:0B54 jmp far ptr 0:7C00h ; (boot location) | |
| F000:0B54 boot_strap endp | |
| F000:0B59 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:0B59 podstg proc near ; CODE XREF: F000:016Aj | |
| F000:0B59 ; F000:0183j F000:01B7j | |
| F000:0B59 ; F000:0552p F000:0584p | |
| F000:0B59 ; F000:05A9p | |
| F000:0B59 cld | |
| F000:0B5A sub di, di | |
| F000:0B5C sub ax, ax | |
| F000:0B5E mov ds, ax | |
| F000:0B60 mov bx, ds:472h ; (0:472 == 40:72 == reset flag) | |
| F000:0B64 cmp bx, 1234h | |
| F000:0B68 mov dx, es | |
| F000:0B6A mov ds, dx | |
| F000:0B6C jnz short p1 | |
| F000:0B6E p12: ; CODE XREF: podstg+24j | |
| F000:0B6E rep stosw ; simple fill with 0 on warm-start | |
| F000:0B70 mov ds, ax | |
| F000:0B72 mov ds:472h, bx ; (0:472 == 40:72 == reset flag) | |
| F000:0B76 mov ds, dx | |
| F000:0B78 retn | |
| F000:0B79 p1: ; CODE XREF: podstg+13j | |
| F000:0B79 cmp bx, 4321h ; diag. restart? | |
| F000:0B7D jz short p12 ; do fill with zeroes | |
| F000:0B7F p2: ; CODE XREF: podstg+35j | |
| F000:0B7F mov [di], al | |
| F000:0B81 mov al, [di] | |
| F000:0B83 xor al, ah | |
| F000:0B85 jz short py | |
| F000:0B87 jmp p8 | |
| F000:0B8A py: ; CODE XREF: podstg+2Cj | |
| F000:0B8A inc ah | |
| F000:0B8C mov al, ah | |
| F000:0B8E jnz short p2 | |
| F000:0B90 mov bp, cx | |
| F000:0B92 mov ax, 0AAAAh | |
| F000:0B95 mov bx, ax | |
| F000:0B97 mov dx, 5555h | |
| F000:0B9A rep stosw | |
| F000:0B9C dec di | |
| F000:0B9D dec di | |
| F000:0B9E std | |
| F000:0B9F mov si, di | |
| F000:0BA1 mov cx, bp | |
| F000:0BA3 p3: ; CODE XREF: podstg+52j | |
| F000:0BA3 lodsw | |
| F000:0BA4 xor ax, bx | |
| F000:0BA6 jnz short p8 | |
| F000:0BA8 mov ax, dx | |
| F000:0BAA stosw | |
| F000:0BAB loop p3 | |
| F000:0BAD mov cx, bp | |
| F000:0BAF cld | |
| F000:0BB0 inc si | |
| F000:0BB1 inc si | |
| F000:0BB2 mov di, si | |
| F000:0BB4 mov bx, dx | |
| F000:0BB6 mov dx, 0FFh | |
| F000:0BB9 px: ; CODE XREF: podstg+68j | |
| F000:0BB9 ; podstg+77j | |
| F000:0BB9 lodsw | |
| F000:0BBA xor ax, bx | |
| F000:0BBC jnz short p8 | |
| F000:0BBE mov ax, dx | |
| F000:0BC0 stosw | |
| F000:0BC1 loop px | |
| F000:0BC3 mov cx, bp | |
| F000:0BC5 std | |
| F000:0BC6 dec si | |
| F000:0BC7 dec si | |
| F000:0BC8 mov di, si | |
| F000:0BCA mov bx, dx | |
| F000:0BCC not dx | |
| F000:0BCE or dl, dl | |
| F000:0BD0 jz short px | |
| F000:0BD2 cld | |
| F000:0BD3 add si, 4 | |
| F000:0BD6 not dx | |
| F000:0BD8 mov di, si | |
| F000:0BDA mov cx, bp | |
| F000:0BDC p4: ; CODE XREF: podstg+89j | |
| F000:0BDC lodsw | |
| F000:0BDD xor ax, dx | |
| F000:0BDF jnz short p8 | |
| F000:0BE1 stosw | |
| F000:0BE2 loop p4 | |
| F000:0BE4 std | |
| F000:0BE5 dec si | |
| F000:0BE6 dec si | |
| F000:0BE7 ;----- check if in service/mfg modes, if so, perform refresh check | |
| F000:0BE7 mov dx, 201h | |
| F000:0BEA in al, dx ; get options bits | |
| F000:0BEB and al, 0F0h | |
| F000:0BED cmp al, 0F0h ; 'ð' ; all bits high=normal mode (no joy buttons pressed) | |
| F000:0BEF jz short p6 | |
| F000:0BF1 mov cx, cs | |
| F000:0BF3 mov bx, ss | |
| F000:0BF5 cmp cx, bx | |
| F000:0BF7 jz short p6 | |
| F000:0BF9 mov al, 18h | |
| F000:0BFB p5: ; CODE XREF: podstg:p5j | |
| F000:0BFB ; podstg+A6j | |
| F000:0BFB loop p5 | |
| F000:0BFD dec al | |
| F000:0BFF jnz short p5 | |
| F000:0C01 p6: ; CODE XREF: podstg+96j | |
| F000:0C01 ; podstg+9Ej | |
| F000:0C01 mov cx, bp | |
| F000:0C03 p7: ; CODE XREF: podstg+AFj | |
| F000:0C03 lodsw | |
| F000:0C04 or ax, ax | |
| F000:0C06 jnz short p8 | |
| F000:0C08 loop p7 | |
| F000:0C0A jmp short p11 | |
| F000:0C0C p8: ; CODE XREF: podstg+2Ej | |
| F000:0C0C ; podstg+4Dj podstg+63j | |
| F000:0C0C ; podstg+86j podstg+ADj | |
| F000:0C0C mov cx, ax | |
| F000:0C0E xor ah, ah | |
| F000:0C10 or ch, ch | |
| F000:0C12 jz short p9 | |
| F000:0C14 inc ah | |
| F000:0C16 p9: ; CODE XREF: podstg+B9j | |
| F000:0C16 or cl, cl | |
| F000:0C18 jz short p10 | |
| F000:0C1A add ah, 2 | |
| F000:0C1D p10: ; CODE XREF: podstg+BFj | |
| F000:0C1D or ah, ah | |
| F000:0C1F p11: ; CODE XREF: podstg+B1j | |
| F000:0C1F cld | |
| F000:0C20 retn | |
| F000:0C20 podstg endp | |
| F000:0C21 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:0C21 put_logo proc near ; CODE XREF: F000:04BDp | |
| F000:0C21 push ds | |
| F000:0C22 push bp | |
| F000:0C23 push ax | |
| F000:0C24 push bx | |
| F000:0C25 push cx | |
| F000:0C26 push dx | |
| F000:0C27 mov bp, offset logo | |
| F000:0C2A mov dx, 8000h ; point dh dl at row column 0, 0 | |
| F000:0C2D mov bl, 11111b ; attribute of characters to be written | |
| F000:0C2F int 82h ; call output routine | |
| F000:0C31 mov bl, 0 ; initialize attribute | |
| F000:0C33 mov dl, 0 ; initialize column | |
| F000:0C35 again: ; CODE XREF: put_logo+20j | |
| F000:0C35 mov dh, 94h ; '' ; set line | |
| F000:0C37 mov bp, offset color ; output given color bar | |
| F000:0C3A int 82h ; call output routine | |
| F000:0C3C inc bl ; increment attribute | |
| F000:0C3E cmp dl, 32 ; is the column counter pointing past 40? | |
| F000:0C41 jl short again ; if not, do it again | |
| F000:0C43 pop dx | |
| F000:0C44 pop cx | |
| F000:0C45 pop bx | |
| F000:0C46 pop ax | |
| F000:0C47 pop bp ; restore bp | |
| F000:0C48 pop ds ; restore ds | |
| F000:0C49 retn | |
| F000:0C49 put_logo endp | |
| F000:0C4A logo db 3 ; DATA XREF: put_logo+6o | |
| F000:0C4B db 20h ; space | |
| F000:0C4C db 0DCh ; half block | |
| F000:0C4D logo_e db 28h, 0FBh, 28h, 0FBh, 2, 7, 1, 9, 3, 4, 9, 4, 1, 0FBh | |
| F000:0C4D db 2, 7, 1, 0Ah, 2, 5, 7, 5, 1, 0FBh, 2, 7, 1, 0Bh, 1 | |
| F000:0C4D db 6, 5, 6, 1, 0FBh, 4, 3, 5, 4 dup(3), 5, 3, 5, 3, 0FBh | |
| F000:0C4D db 4, 3, 5, 4 dup(3), 6, 1, 6, 3, 0FBh, 4, 3, 5, 8, 4 | |
| F000:0C4D db 0Dh, 3, 0FBh, 4, 3, 5, 7, 5, 0Dh, 3, 0FBh, 4, 3, 5 | |
| F000:0C4D db 8, 4, 0Dh, 3, 0FBh, 4, 3, 5, 4 dup(3), 0Dh, 3, 0FBh | |
| F000:0C4D db 4, 3, 5, 5 dup(3), 1, 5, 1, 2 dup(3), 0FBh, 2, 7, 1 | |
| F000:0C4D db 0Bh, 1, 5, 2, 3, 2, 5, 1, 0FBh, 2, 7, 1, 0Ah, 2, 5 | |
| F000:0C4D db 3, 1, 3, 5, 1, 0FBh, 2, 7, 1, 9, 3, 5, 7, 5, 1, 0FBh | |
| F000:0C4D db 28h, 0FBh, 28h, 0FCh | |
| F000:0CDD color db 2 ; DATA XREF: put_logo+16o | |
| F000:0CDE db 0DBh ; Û ; full block | |
| F000:0CDF color_e db 2, 77h, 2, 77h, 2, 77h, 2, 77h, 2, 0FCh | |
| F000:0CE9 moo10 dw offset set_mode ; DATA XREF: video_io+38r | |
| F000:0CE9 ; 0x00 | |
| F000:0CEB dw offset set_ctype ; 0x01 | |
| F000:0CED dw offset set_cpos ; 0x02 | |
| F000:0CEF dw offset read_cursor ; 0x03 | |
| F000:0CF1 dw offset read_lpen ; 0x04 | |
| F000:0CF3 dw offset act_disp_page ; 0x05 | |
| F000:0CF5 dw offset scroll_up ; 0x06 | |
| F000:0CF7 dw offset scroll_down ; 0x07 | |
| F000:0CF9 dw offset read_ac_current ; 0x08 | |
| F000:0CFB dw offset write_ac_current ; 0x09 | |
| F000:0CFD dw offset write_c_current ; 0x0a | |
| F000:0CFF dw offset set_color ; 0x0b | |
| F000:0D01 dw offset write_dot ; 0x0c | |
| F000:0D03 dw offset read_dot ; 0x0d | |
| F000:0D05 dw offset write_tty ; 0x0e | |
| F000:0D07 dw offset video_state ; 0x0f | |
| F000:0D09 dw offset set_palette ; 0x10 | |
| F000:0D0B ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:0D0B video_io proc far ; CODE XREF: F000:F065j | |
| F000:0D0B ; DATA XREF: F000:vector_table_16o | |
| F000:0D0B sti ; interrupts back on | |
| F000:0D0C cld | |
| F000:0D0D push es | |
| F000:0D0E push ds ; save segment registers | |
| F000:0D0F push dx | |
| F000:0D10 push cx | |
| F000:0D11 push bx | |
| F000:0D12 push si | |
| F000:0D13 push di | |
| F000:0D14 push ax ; save ax value | |
| F000:0D15 mov al, ah ; get into low byte | |
| F000:0D17 xor ah, ah ; zero to high byte | |
| F000:0D19 shl ax, 1 ; #2 for table lookup | |
| F000:0D1B mov si, ax ; put into si for branch | |
| F000:0D1D cmp ax, 22h ; '"' ; test for within range | |
| F000:0D20 jb short c1 | |
| F000:0D22 pop ax ; throw away the parameters | |
| F000:0D23 jmp video_return ; do nothing if not in range | |
| F000:0D26 c1: ; CODE XREF: video_io+15j | |
| F000:0D26 call dss | |
| F000:0D29 mov ax, 0B800h ; segment for color card | |
| F000:0D2C cmp byte ptr ds:seg40.crt_mode, 9 ; in mode using 32k regen? | |
| F000:0D31 jb short c2 ; no, jump | |
| F000:0D33 mov ah, ds:seg40.pagdat ; get copy of page regs | |
| F000:0D37 and ah, 111000b ; isolate cpu reg | |
| F000:0D3A shr ah, 1 ; shift to make it into segment value | |
| F000:0D3C c2: ; CODE XREF: video_io+26j | |
| F000:0D3C mov es, ax ; set up to point at video ram area | |
| F000:0D3E pop ax ; recover value | |
| F000:0D3F mov ah, ds:seg40.crt_mode ; get current mode into ah | |
| F000:0D43 jmp cs:moo10[si] | |
| F000:0D43 video_io endp | |
| F000:0D48 ; table of regen lenghts | |
| F000:0D48 moo50 dw 2048 ; DATA XREF: set_mode+1B6r | |
| F000:0D48 ; mode 0 40x25 bw | |
| F000:0D4A dw 2048 ; mode 1 40x25 color | |
| F000:0D4C dw 4096 ; mode 2 80x25 bw | |
| F000:0D4E dw 4096 ; mode 3 80x25 color | |
| F000:0D50 dw 16384 ; mode 4 320x200 4 color | |
| F000:0D52 dw 16384 ; mode 5 320x200 4 color | |
| F000:0D54 dw 16384 ; mode 6 640x200 bw | |
| F000:0D56 dw 0 | |
| F000:0D58 dw 16384 ; mode 8 160x200 16 color | |
| F000:0D5A dw 32768 ; mode 9 320x200 16 color | |
| F000:0D5C dw 32768 ; mode a 640x200 4 color | |
| F000:0D5E ;------ columns | |
| F000:0D5E moo60 db 40, 40, 80, 80, 40, 40, 80, 0, 20, 40, 80 | |
| F000:0D5E ; DATA XREF: set_mode+1AAr | |
| F000:0D5E ; columns | |
| F000:0D69 ;------ table of gate array parameters for mode settings (0x03da) | |
| F000:0D69 ;model control1, palette mask, border color, mode control 2 | |
| F000:0D69 moo70 db 0Ch, 0Fh, 0, 2 ; DATA XREF: set_mode+9Do | |
| F000:0D69 ; mode 0 40x25 bw | |
| F000:0D6D moo70l db 8, 0Fh, 0, 2 ; mode 1 40x25 color | |
| F000:0D71 db 0Dh, 0Fh, 0, 2 ; mode 2 80x25 bw | |
| F000:0D75 db 9, 0Fh, 0, 2 ; mode 3 80x25 color | |
| F000:0D79 db 0Ah, 3, 0, 0 ; mode 4 320x200 4 color | |
| F000:0D7D db 0Eh, 3, 0, 0 ; mode 5 320x200 bw | |
| F000:0D81 db 0Eh, 1, 0, 8 ; mode 6 640x200 bw | |
| F000:0D85 db 0, 0, 0, 0 ; mode 7 invalid | |
| F000:0D89 db 1Ah, 0Fh, 0, 0 ; mode 8 160x200 16 color | |
| F000:0D8D db 1Bh, 0Fh, 0, 0 ; mode 9 320x200 16 color | |
| F000:0D91 db 0Bh, 3, 0, 0 ; mode a 640x200 4 color | |
| F000:0D95 ;---------- tables of palette colors for 2 and 4 color modes | |
| F000:0D95 moo72 db 0, 0Fh, 0, 0 ; DATA XREF: set_mode+42o | |
| F000:0D95 ; set_color+28o | |
| F000:0D95 ; 2 color, set 0 | |
| F000:0D99 moo72l db 0Fh, 0, 0, 0 ; 2 color, set 1 | |
| F000:0D9D moo74 db 0, 2, 4, 6 ; DATA XREF: set_color:c32o | |
| F000:0D9D ; 4 color, set 0 | |
| F000:0DA1 moo75 db 0, 3, 5, 0Fh ; DATA XREF: set_mode+49o | |
| F000:0DA1 ; 4 color, set 1 | |
| F000:0DA5 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:0DA5 set_mode proc far ; CODE XREF: video_io+38j | |
| F000:0DA5 ; DATA XREF: F000:moo10o | |
| F000:0DA5 push ax ; save input mode on stack | |
| F000:0DA6 and al, 7Fh ; remove clear regen switch | |
| F000:0DA8 cmp al, 7 ; check for valid modes | |
| F000:0DAA jz short c3 ; mode 7 is invalid | |
| F000:0DAC cmp al, 0Bh | |
| F000:0DAE jb short c4 ; greater than 0xa is invalid | |
| F000:0DB0 c3: ; CODE XREF: set_mode+5j | |
| F000:0DB0 mov al, 0 ; default to mode 0 | |
| F000:0DB2 c4: ; CODE XREF: set_mode+9j | |
| F000:0DB2 cmp al, 2 ; check for modes needing 128k | |
| F000:0DB4 jz short c5 | |
| F000:0DB6 cmp al, 3 | |
| F000:0DB8 jz short c5 | |
| F000:0DBA cmp al, 9 | |
| F000:0DBC jb short c6 | |
| F000:0DBE c5: ; CODE XREF: set_mode+Fj | |
| F000:0DBE ; set_mode+13j | |
| F000:0DBE cmp word ptr ds:seg40.true_mem, 128 ; do we have 128k? | |
| F000:0DC4 jnb short c6 ; yes, jump | |
| F000:0DC6 mov al, 0 ; no, default to mode 0 | |
| F000:0DC8 c6: ; CODE XREF: set_mode+17j | |
| F000:0DC8 ; set_mode+1Fj | |
| F000:0DC8 mov dx, 3D4h ; address of color card | |
| F000:0DCB mov ah, al ; save mode in ah | |
| F000:0DCD mov ds:seg40.crt_mode, al ; save in global variable | |
| F000:0DD0 mov ds:seg40.addr_6845, dx ; save address in base | |
| F000:0DD4 mov di, ax ; save mode in di | |
| F000:0DD6 mov dx, 3DAh ; point to control register | |
| F000:0DD9 in al, dx ; sync control reg to address | |
| F000:0DDA xor al, al ; set vga reg 0 (mode control 1) | |
| F000:0DDC out dx, al ; select it | |
| F000:0DDD mov al, ds:seg40.crt_mode_set ; get last mode set | |
| F000:0DE0 and al, 11110111b ; turn off video | |
| F000:0DE2 out dx, al ; set in gate array | |
| F000:0DE3 ; ----- set default palettes | |
| F000:0DE3 mov ax, di ; get mode | |
| F000:0DE5 mov ah, 10h ; set palette reg 0 | |
| F000:0DE7 mov bx, offset moo72 ; point to table entry | |
| F000:0DEA cmp al, 6 ; 2 color mode? | |
| F000:0DEC jz short c7 ; yes, jump | |
| F000:0DEE mov bx, offset moo75 ; point to table entry | |
| F000:0DF1 cmp al, 5 ; check for 4 color mode | |
| F000:0DF3 jz short c7 ; yes, jump | |
| F000:0DF5 cmp al, 4 ; check for 4 color mode | |
| F000:0DF7 jz short c7 ; yes, jump | |
| F000:0DF9 cmp al, 0Ah ; check for 4 color mode | |
| F000:0DFB jnz short c9 ; no, jump | |
| F000:0DFD c7: ; CODE XREF: set_mode+47j | |
| F000:0DFD ; set_mode+4Ej set_mode+52j | |
| F000:0DFD mov cx, 4 ; number of regs to set | |
| F000:0E00 c8: ; CODE XREF: set_mode+65j | |
| F000:0E00 mov al, ah ; get reg number | |
| F000:0E02 out dx, al ; select it | |
| F000:0E03 mov al, cs:[bx] ; get data | |
| F000:0E06 out dx, al ; set it | |
| F000:0E07 inc ah ; next reg | |
| F000:0E09 inc bx ; next table value | |
| F000:0E0A loop c8 | |
| F000:0E0C jmp short c11 | |
| F000:0E0E ;----- set palettes for 16 color | |
| F000:0E0E c9: ; CODE XREF: set_mode+56j | |
| F000:0E0E mov cx, 10h ; number of palettes, ah is reg counter | |
| F000:0E11 c10: ; CODE XREF: set_mode+72j | |
| F000:0E11 mov al, ah ; get reg number | |
| F000:0E13 out dx, al ; select it | |
| F000:0E14 out dx, al ; set palette value | |
| F000:0E15 inc ah ; next reg | |
| F000:0E17 loop c10 | |
| F000:0E19 ;----- setup m0 & m1 in pagreg | |
| F000:0E19 c11: ; CODE XREF: set_mode+67j | |
| F000:0E19 mov ax, di ; get current mode | |
| F000:0E1B xor bl, bl ; set up for alpha mode | |
| F000:0E1D cmp al, 4 ; in alpha mode? | |
| F000:0E1F jb short c12 ; yes, jump | |
| F000:0E21 mov bl, 1000000b ; set up for 16k regen (bit 6 on) | |
| F000:0E23 cmp al, 9 ; mode use 16k | |
| F000:0E25 jb short c12 ; yes, jump | |
| F000:0E27 mov bl, 11000000b ; set up for 32k regen (bit 7,6 on) | |
| F000:0E29 c12: ; CODE XREF: set_mode+7Aj | |
| F000:0E29 ; set_mode+80j | |
| F000:0E29 mov dx, 3DFh ; set port address of pagreg | |
| F000:0E2C mov al, ds:seg40.pagdat ; get last data output | |
| F000:0E2F and al, 3Fh ; '?' ; clear m0 & m1 bits | |
| F000:0E31 or al, bl ; set new bits | |
| F000:0E33 out dx, al ; stuff back in port (update video address mode) | |
| F000:0E34 mov ds:seg40.pagdat, al ; save copy in ram | |
| F000:0E37 ;----- enable video and correct port settings | |
| F000:0E37 mov ax, di ; get current mode | |
| F000:0E39 xor ah, ah ; into ax reg | |
| F000:0E3B mov cx, 4 ; set table entry lenght (moo70l) | |
| F000:0E3E mul cx ; times mode for offset into table | |
| F000:0E40 mov bx, ax ; table offset in bx | |
| F000:0E42 add bx, offset moo70 ; add table start to offset | |
| F000:0E46 mov ah, cs:[bx] ; save mode set and palette (ah=mode control 1) | |
| F000:0E49 mov al, cs:[bx+2] ; till we can put them in ram (al=border color) | |
| F000:0E4D mov si, ax | |
| F000:0E4F cli ; disable interrupts | |
| F000:0E50 call mode_alive ; keep memory data valid | |
| F000:0E53 mov al, 10000b ; disable nmi and hold request | |
| F000:0E55 out 0A0h, al | |
| F000:0E57 mov dx, 3DAh | |
| F000:0E5A mov al, 4 ; point to reset reg | |
| F000:0E5C out dx, al ; send to gate array | |
| F000:0E5D mov al, 2 ; set synchronous reset | |
| F000:0E5F out dx, al ; do it | |
| F000:0E60 ; while the gate array is in reset state, we cannot access ram | |
| F000:0E60 mov ax, si ; restore new mode set (ah=mode control 1, al=border color) | |
| F000:0E62 and ah, 11110111b ; turn off video enable (bit 3: video enable) | |
| F000:0E65 xor al, al ; set up to select vga reg 0 (mode control 1) | |
| F000:0E67 out dx, al ; select it | |
| F000:0E68 xchg ah, al ; ah is vga reg counter | |
| F000:0E6A out dx, al ; set mode | |
| F000:0E6B mov al, 4 ; set up to select vga reg 4 (reset) | |
| F000:0E6D out dx, al ; select it | |
| F000:0E6E xor al, al ; (low before changing modes) | |
| F000:0E70 out dx, al ; remove reset from vga | |
| F000:0E71 ; now ok to access ram again | |
| F000:0E71 mov al, 80h ; '' ; enable nmi again | |
| F000:0E73 out 0A0h, al ; 0xa0 = nmi_port | |
| F000:0E75 call mode_alive ; keep memory data valid | |
| F000:0E78 sti | |
| F000:0E79 jmp short c14 | |
| F000:0E7B c13: ; CODE XREF: set_mode+E0j | |
| F000:0E7B mov al, ah ; get vga reg number | |
| F000:0E7D out dx, al ; select reg | |
| F000:0E7E mov al, cs:[bx] ; get table value | |
| F000:0E81 out dx, al ; put in vga reg | |
| F000:0E82 c14: ; CODE XREF: set_mode+D4j | |
| F000:0E82 inc bx ; next in table | |
| F000:0E83 inc ah ; next reg | |
| F000:0E85 loop c13 ; do entire entry | |
| F000:0E87 ;---- set up crt and cpu page regs according to mode & memory size | |
| F000:0E87 mov dx, 3DFh ; set io address of pagreg | |
| F000:0E8A mov al, ds:seg40.pagdat ; get last data output | |
| F000:0E8D and al, 11000000b ; clear reg bits | |
| F000:0E8F mov bl, 110110b ; set up for graphics mode with 32k regen | |
| F000:0E91 test al, 80h ; '' ; in this mode? | |
| F000:0E93 jnz short c15 ; yes, jump | |
| F000:0E95 mov bl, 111111b ; set up for 16k regen and 128k memory | |
| F000:0E97 cmp word ptr ds:seg40.true_mem, 128 ; do we have 128k? | |
| F000:0E9D jnb short c15 ; yes, jump | |
| F000:0E9F mov bl, 11011b ; set up for 16k regen and 64k memory | |
| F000:0EA1 c15: ; CODE XREF: set_mode+EEj | |
| F000:0EA1 ; set_mode+F8j | |
| F000:0EA1 or al, bl ; combine mode bits and reg values | |
| F000:0EA3 out dx, al ; set port | |
| F000:0EA4 mov ds:seg40.pagdat, al ; save copy in ram | |
| F000:0EA7 mov ax, si ; put mode set & palette in ram | |
| F000:0EA9 mov ds:seg40.crt_mode_set, ah | |
| F000:0EAD mov ds:seg40.crt_palette, al | |
| F000:0EB0 in al, 61h ; get current value of 8255 port b | |
| F000:0EB2 and al, 11111011b ; set up graphics mode | |
| F000:0EB4 test ah, 2 ; just set alpha mode in vga? | |
| F000:0EB7 jnz short c16 ; yes, jump | |
| F000:0EB9 or al, 4 ; set up alpha mode | |
| F000:0EBB c16: ; CODE XREF: set_mode+112j | |
| F000:0EBB out 61h, al ; stuff back in 8255 | |
| F000:0EBD ;----- set up 6845 | |
| F000:0EBD push ds ; save data segment value | |
| F000:0EBE xor ax, ax ; set up for abs0 segment | |
| F000:0EC0 mov ds, ax ; establish vector table addressing | |
| F000:0EC2 lds bx, ds:74h ; get pointer to video parms (int 0x1d) | |
| F000:0EC6 mov ax, di ; get current mode in ax | |
| F000:0EC8 mov cx, 10h ; lenghts of each row of table | |
| F000:0ECB nop | |
| F000:0ECC cmp ah, 2 ; determine which to use | |
| F000:0ECF jb short c17 ; mode is 0 or 1 | |
| F000:0ED1 add bx, cx ; move to next row of init table | |
| F000:0ED3 cmp ah, 4 | |
| F000:0ED6 jb short c17 ; mode is 2 or 3 | |
| F000:0ED8 add bx, cx ; move to graphics row of | |
| F000:0EDA cmp ah, 9 ; init_table | |
| F000:0EDD jb short c17 ; mode is 4, 5, 6, 8 or 9 | |
| F000:0EDF add bx, cx ; move to next graphics row of init_table | |
| F000:0EE1 ;----- bx points to correct row of initialization table | |
| F000:0EE1 c17: ; CODE XREF: set_mode+12Aj | |
| F000:0EE1 ; set_mode+131j | |
| F000:0EE1 ; set_mode+138j | |
| F000:0EE1 push ax ; save mode in ah | |
| F000:0EE2 mov al, [bx+2] ; get horz. sync position | |
| F000:0EE5 mov di, [bx+0Ah] ; get cursor type | |
| F000:0EE8 push ds | |
| F000:0EE9 call dss | |
| F000:0EEC mov ds:seg40.horz_pos, al ; save horz. sync position variable | |
| F000:0EEF mov ds:seg40.cursor_mode, di ; save cursor mode | |
| F000:0EF3 push ax | |
| F000:0EF4 mov al, ds:seg40.var_delay ; set default offset | |
| F000:0EF7 and al, 0Fh | |
| F000:0EF9 mov ds:seg40.var_delay, al | |
| F000:0EFC pop ax | |
| F000:0EFD pop ds | |
| F000:0EFE xor ah, ah ; ah will serve as register number during loop | |
| F000:0F00 mov dx, 3D4h ; point to 6845 | |
| F000:0F03 ; loop through table, outputting reg address, then value from table | |
| F000:0F03 c18: ; CODE XREF: set_mode+169j | |
| F000:0F03 mov al, ah ; get 6845 register number | |
| F000:0F05 out dx, al | |
| F000:0F06 inc dx ; point to data port | |
| F000:0F07 inc ah ; next register value | |
| F000:0F09 mov al, [bx] ; get table value | |
| F000:0F0B out dx, al ; out to chip | |
| F000:0F0C inc bx ; next in table | |
| F000:0F0D dec dx ; back to pointer register | |
| F000:0F0E loop c18 ; do the whole table | |
| F000:0F10 pop ax ; get mode back | |
| F000:0F11 pop ds ; recover segment value | |
| F000:0F12 ;----- fill regen area with blank | |
| F000:0F12 xor di, di ; set up pointer for regen | |
| F000:0F14 mov ds:seg40.crt_start, di ; start address saved in global | |
| F000:0F18 mov byte ptr ds:seg40.active_page, 0 ; set page value | |
| F000:0F1D pop dx ; get original input back | |
| F000:0F1E and dl, 80h ; no clear of regen? | |
| F000:0F21 jnz short c21 ; skip clearing regen | |
| F000:0F23 mov dx, 0B800h ; setup segment for 16k regen area | |
| F000:0F26 mov cx, 8192 ; number of words to clear (16k) | |
| F000:0F29 cmp al, 9 ; require 32k byte regen? | |
| F000:0F2B jb short c19 ; no, jump | |
| F000:0F2D shl cx, 1 ; set 16k words to clear (32k) | |
| F000:0F2F mov dx, 1800h ; set up segment for 32k regen arean | |
| F000:0F32 c19: ; CODE XREF: set_mode+186j | |
| F000:0F32 mov es, dx ; set regen segment | |
| F000:0F34 cmp al, 4 ; test for graphics | |
| F000:0F36 mov ax, 0F20h ; fill char for alpha (' ' + 15*256) | |
| F000:0F39 jb short c20 ; no_graphics_init | |
| F000:0F3B xor ax, ax ; fill for graphics mode | |
| F000:0F3D c20: ; CODE XREF: set_mode+194j | |
| F000:0F3D rep stosw ; fill the regen area with blanks | |
| F000:0F3F ;----- enable video | |
| F000:0F3F c21: ; CODE XREF: set_mode+17Cj | |
| F000:0F3F mov dx, 3DAh ; set port address of vga | |
| F000:0F42 xor al, al ; (al=0 -> mode control 1) | |
| F000:0F44 out dx, al ; select vga reg 0 | |
| F000:0F45 mov al, ds:seg40.crt_mode_set ; get mode set value | |
| F000:0F48 out dx, al ; set mode | |
| F000:0F49 ;----- determine number of columns, both for entire display | |
| F000:0F49 ;----- and the number to be used for tty interface | |
| F000:0F49 xor bh, bh | |
| F000:0F4B mov bl, ds:seg40.crt_mode | |
| F000:0F4F mov al, cs:moo60[bx] | |
| F000:0F54 xor ah, ah | |
| F000:0F56 mov ds:seg40.crt_cols, ax ; number of columns in this screen | |
| F000:0F59 ;----- set cursor positions | |
| F000:0F59 shl bx, 1 ; word offset into clear length table | |
| F000:0F5B mov cx, cs:moo50[bx] ; length to clear | |
| F000:0F60 mov ds:seg40.crt_len, cx ; save length of crt | |
| F000:0F64 mov cx, 8 ; clear all cursor positions | |
| F000:0F67 mov di, seg40.cursor_posn | |
| F000:0F6A push ds ; establish segment | |
| F000:0F6B pop es ; addressing | |
| F000:0F6C xor ax, ax ; fill with zeroes | |
| F000:0F6E rep stosw | |
| F000:0F70 video_return: ; CODE XREF: video_io+18j | |
| F000:0F70 ; write_tty+5Ej | |
| F000:0F70 ; set_ctype+11j | |
| F000:0F70 ; set_cpos:loc_FE49Fj | |
| F000:0F70 ; act_disp_page+25j | |
| F000:0F70 ; set_color+22j ... | |
| F000:0F70 pop di | |
| F000:0F71 pop si | |
| F000:0F72 pop bx | |
| F000:0F73 c22: ; CODE XREF: act_disp_page+77j | |
| F000:0F73 ; video_state+Ej | |
| F000:0F73 pop cx | |
| F000:0F74 pop dx | |
| F000:0F75 pop ds | |
| F000:0F76 pop es ; recover segments | |
| F000:0F77 iret ; all done | |
| F000:0F77 set_mode endp ; sp = 0Eh | |
| F000:0F78 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:0F78 ; keyboard nmi interrupt routine | |
| F000:0F78 ; | |
| F000:0F78 ; this routine obtains control upon an nmi interrupt, which | |
| F000:0F78 ; occurs upon a keystroke from the keyboard. | |
| F000:0F78 ; | |
| F000:0F78 ; this routine will de-serialize the bit stream in order to | |
| F000:0F78 ; get the keyboard scan code entered. it then issues int 48 | |
| F000:0F78 ; passing the scan code in al to the key processor . upon return | |
| F000:0F78 ; it re-enables nmi and return to system (iret) | |
| F000:0F78 kdbnmi proc far ; DATA XREF: F000:04D3o | |
| F000:0F78 ; F000:06DCo | |
| F000:0F78 cli | |
| F000:0F79 push si | |
| F000:0F7A push di | |
| F000:0F7B push ax ; save regs | |
| F000:0F7C push bx | |
| F000:0F7D push cx | |
| F000:0F7E push dx | |
| F000:0F7F push ds | |
| F000:0F80 push es | |
| F000:0F81 mov si, 8 ; set up # of data bits | |
| F000:0F84 xor bl, bl ; init parity counter | |
| F000:0F86 xor ah, ah | |
| F000:0F88 mov cx, 5 ; set counter | |
| F000:0F8B i1: ; CODE XREF: kdbnmi:i2j | |
| F000:0F8B in al, 62h ; get sample | |
| F000:0F8D test al, 40h ; test if 1 | |
| F000:0F8F jz short i2 ; jmp if 0 | |
| F000:0F91 inc ah | |
| F000:0F93 i2: ; CODE XREF: kdbnmi+17j | |
| F000:0F93 loop i1 | |
| F000:0F95 cmp ah, 3 | |
| F000:0F98 jnb short i25 | |
| F000:0F9A jmp short i8 | |
| F000:0F9C db 90h ; | |
| F000:0F9D i25: ; CODE XREF: kdbnmi+20j | |
| F000:0F9D mov cx, 32h ; '2' | |
| F000:0FA0 i3: ; CODE XREF: kdbnmi+2Ej | |
| F000:0FA0 in al, 62h | |
| F000:0FA2 test al, 40h | |
| F000:0FA4 jz short i5 | |
| F000:0FA6 loop i3 | |
| F000:0FA8 jmp short i8 | |
| F000:0FAA db 90h ; | |
| F000:0FAB i5: ; CODE XREF: kdbnmi+2Cj | |
| F000:0FAB mov al, 1000000b ; read clock | |
| F000:0FAB ; (tim 1, latching, interrupt on terminal count, binary) | |
| F000:0FAD out 43h, al | |
| F000:0FAF nop | |
| F000:0FB0 nop | |
| F000:0FB1 in al, 41h | |
| F000:0FB3 mov ah, al | |
| F000:0FB5 in al, 41h | |
| F000:0FB7 xchg ah, al | |
| F000:0FB9 mov di, ax ; save clock time in di | |
| F000:0FBB mov cx, 4 ; set counter | |
| F000:0FBE i6: ; CODE XREF: kdbnmi+4Cj | |
| F000:0FBE in al, 62h ; get sample | |
| F000:0FC0 test al, 40h ; test if 0 | |
| F000:0FC2 jnz short i8 ; jmp if invalid transition (sync) | |
| F000:0FC4 loop i6 ; keep looking for valid transition | |
| F000:0FC6 mov dx, 544 ; 310 usec away (.838 us / ct) | |
| F000:0FC9 i7: ; CODE XREF: kdbnmi+67j | |
| F000:0FC9 call i30 | |
| F000:0FCC mov dx, 526 | |
| F000:0FCF push ax | |
| F000:0FD0 call i30 | |
| F000:0FD3 mov cl, al | |
| F000:0FD5 pop ax | |
| F000:0FD6 cmp cl, al | |
| F000:0FD8 jz short i9 | |
| F000:0FDA shr bh, 1 | |
| F000:0FDC or bh, al | |
| F000:0FDE dec si | |
| F000:0FDF jnz short i7 | |
| F000:0FE1 call i30 | |
| F000:0FE4 push ax | |
| F000:0FE5 call i30 | |
| F000:0FE8 mov cl, al | |
| F000:0FEA pop ax | |
| F000:0FEB cmp cl, al | |
| F000:0FED jz short i9 | |
| F000:0FEF and bl, 1 ; check if odd parity | |
| F000:0FF2 jz short i9 ; jmp if parity error | |
| F000:0FF4 sti ; enable interrupts | |
| F000:0FF5 mov al, bh ; place scan code in al | |
| F000:0FF7 int 48h ; character processing (PCjr - Cordless Keyboard Translation) | |
| F000:0FF9 i8: ; CODE XREF: kdbnmi+22j | |
| F000:0FF9 ; kdbnmi+30j kdbnmi+4Aj | |
| F000:0FF9 ; kdbnmi+92j kdbnmi+B7j | |
| F000:0FF9 pop es ; restore regs | |
| F000:0FFA pop ds | |
| F000:0FFB pop dx | |
| F000:0FFC pop cx | |
| F000:0FFD pop bx | |
| F000:0FFE in al, 0A0h ; enable nmi (clear nmi latch) | |
| F000:1000 pop ax | |
| F000:1001 pop di | |
| F000:1002 pop si | |
| F000:1003 iret | |
| F000:1004 ;----------parity, synch or phase error. output missed key beep | |
| F000:1004 i9: ; CODE XREF: kdbnmi+60j | |
| F000:1004 ; kdbnmi+75j kdbnmi+7Aj | |
| F000:1004 call dss ; set up addressing | |
| F000:1007 cmp si, 8 ; are we on the first data bit? | |
| F000:100A jz short i8 ; no audio feedback (might be a glitch) | |
| F000:100C test byte ptr ds:seg40.kb_flag_1, 1 ; check if transmition errors are to be reported | |
| F000:1011 jnz short i10 ; 1=do not beep, 0=beep | |
| F000:1013 mov bx, 80h ; '' ; duration of error beep | |
| F000:1016 mov cx, 48h ; 'H' ; frequency of error beep | |
| F000:1019 call kb_noise ; audio feedback | |
| F000:101C and byte ptr ds:seg40.kb_flag, 0F0h ; clear alt,ctrl,left and right shifts | |
| F000:1021 and byte ptr ds:seg40.kb_flag_1, 0Fh ; clear potential break of ins,caps num and scroll shifts | |
| F000:1026 and byte ptr ds:seg40.kb_flag_2, 1Fh ; clear function states | |
| F000:102B i10: ; CODE XREF: kdbnmi+99j | |
| F000:102B inc byte ptr ds:seg40.kdb_error ; keep track of keyboard errors | |
| F000:102F jmp short i8 | |
| F000:102F kdbnmi endp | |
| F000:1031 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:1031 i30 proc near ; CODE XREF: kdbnmi:i7p | |
| F000:1031 ; kdbnmi+58p kdbnmi+69p | |
| F000:1031 ; kdbnmi+6Dp i30+14j | |
| F000:1031 mov al, 1000000b ; read clock | |
| F000:1031 ; (tim 1, latching, interrupt on terminal count, binary) | |
| F000:1033 out 43h, al | |
| F000:1035 nop | |
| F000:1036 nop | |
| F000:1037 in al, 41h | |
| F000:1039 mov ah, al | |
| F000:103B in al, 41h | |
| F000:103D xchg ah, al | |
| F000:103F mov cx, di ; get last clock time | |
| F000:1041 sub cx, ax ; sub current time | |
| F000:1043 cmp cx, dx ; is it time to sample? | |
| F000:1045 jb short i30 ; no, keep looking at it | |
| F000:1047 sub cx, dx ; update # of counts off | |
| F000:1049 mov di, ax ; save current time as last time | |
| F000:104B add di, cx ; add difference for next time | |
| F000:104D ;----- start sampling data bit (5 samples) | |
| F000:104D mov cx, 5 ; set counter | |
| F000:1050 ;---------------------------------------------------- | |
| F000:1050 ; | |
| F000:1050 ; sample line | |
| F000:1050 ; | |
| F000:1050 ; port_c is sampled cx times and if there are 3 or more 1"s | |
| F000:1050 ; then 80h is returned in al, else 00h is returned in al. | |
| F000:1050 ; parity counter is mantained in es. | |
| F000:1050 ; | |
| F000:1050 ;---------------------------------------------------- | |
| F000:1050 xor ah, ah ; clear counter | |
| F000:1052 i32: ; CODE XREF: i30:i33j | |
| F000:1052 in al, 62h ; get sample | |
| F000:1054 test al, 40h ; test if 1 | |
| F000:1056 jz short i33 ; jump if 0 | |
| F000:1058 inc ah ; keep count of 1's | |
| F000:105A i33: ; CODE XREF: i30+25j | |
| F000:105A loop i32 ; keep sampling | |
| F000:105C cmp ah, 3 ; valid 1? | |
| F000:105F jb short i34 ; jmp if not valid 1 | |
| F000:1061 mov al, 80h ; '' ; return 80h in al (1) | |
| F000:1063 inc bl ; increment parity counter | |
| F000:1065 retn ; return to caller | |
| F000:1066 i34: ; CODE XREF: i30+2Ej | |
| F000:1066 xor al, al ; return 0 in al (0) | |
| F000:1068 retn ; return to caller | |
| F000:1068 i30 endp | |
| F000:1069 ;-----table of valid scan codes | |
| F000:1069 kb0 db key_b, key_q, key_e, key_p, key_s, key_n, key_up_arrow | |
| F000:1069 ; DATA XREF: key62_int+174o | |
| F000:1069 ; key62_int:kb10_1o | |
| F000:1069 db key_down_arrow, key_left_arrow, key_right_arrow, key_minus | |
| F000:1069 db key_equals | |
| F000:1075 ;-----table of new scan codes (fn + kb0 = kb1) | |
| F000:1075 kb1 db key_break, key_pause, key_echo, key_prt_screen, key_scroll | |
| F000:1075 ; DATA XREF: key62_int+1ABr | |
| F000:1075 db key_num, key_home, key_end, key_page_up, key_page_down | |
| F000:1075 db key_minus_pad, key_plus_pad | |
| F000:1081 ;---------------------------------------------------- | |
| F000:1081 ;note: there is a one to one correspondance between | |
| F000:1081 ; the size of kb0 and kb1 | |
| F000:1081 ;---------------------------------------------------- | |
| F000:1081 ;table of numeric keypad scan codes | |
| F000:1081 ; these scan codes were numeric scan codes on | |
| F000:1081 ; the 83 key keyboard. | |
| F000:1081 ;---------------------------------------------------- | |
| F000:1081 num_codes db 4Fh, 50h, 51h, 4Bh, 4Ch, 4Dh, 47h, 48h, 49h, 52h | |
| F000:1081 ; DATA XREF: key62_int+131o | |
| F000:108B ;---------------------------------------------------- | |
| F000:108B ;table of simulated keystrokes | |
| F000:108B ; | |
| F000:108B ; this table represents a 4*2 array. each row | |
| F000:108B ; consists of a sequence of scan codes which | |
| F000:108B ; would have been generated on an 83 key keyboard | |
| F000:108B ; to cause the following functions: | |
| F000:108B ; row 1=echo crt output to the printer | |
| F000:108B ; row 2=break | |
| F000:108B ; the table has both make and break scan codes. | |
| F000:108B ;---------------------------------------------------- | |
| F000:108B scan db 1Dh, 37h, 0B7h, 9Dh ; DATA XREF: key62_int+212o | |
| F000:108B ; ctrl + prtsc | |
| F000:108F db 1Dh, 46h, 0C6h, 9Dh ; ctrl + scroll_lock | |
| F000:1093 ;---------------------------------------------------- | |
| F000:1093 ;table of valid alt shift scan codes | |
| F000:1093 ; | |
| F000:1093 ; this table contains scan codes for keys on the | |
| F000:1093 ; 62 key keyboard. these codes are used in | |
| F000:1093 ; combinations with the alt key to produce scan codes | |
| F000:1093 ; for keys not found on the 62 key keyboard. | |
| F000:1093 ;---------------------------------------------------- | |
| F000:1093 alt_table db 35h, 28h, 34h, 1Ah, 1Bh ; DATA XREF: key62_int+B7o | |
| F000:1093 ; key62_int+C1o | |
| F000:1098 ;---------------------------------------------------- | |
| F000:1098 ;table of translated scan codes with alt shift | |
| F000:1098 ; | |
| F000:1098 ; this table contains the scan codes for the | |
| F000:1098 ; keys which are not in the 62 key keyboard and | |
| F000:1098 ; will be translated with alt shift. there is a | |
| F000:1098 ; one to one correspondence between the sizes | |
| F000:1098 ; of alt_table and new_alt. | |
| F000:1098 ; the following translations are made: | |
| F000:1098 ; alt+ / = \ | |
| F000:1098 ; alt+ ' = ` | |
| F000:1098 ; alt+ [ = | | |
| F000:1098 ; alt+ ] = ~ | |
| F000:1098 ; alt+ . = # | |
| F000:1098 ;---------------------------------------------------- | |
| F000:1098 new_alt db 2Bh, 29h, 37h, 2Bh, 29h ; DATA XREF: key62_int+C6r | |
| F000:109D ;----------------------------------------------------------- | |
| F000:109D ; extab | |
| F000:109D ; table of scan codes for mapping extended set | |
| F000:109D ; of scan codes (scan codes > 85). this table | |
| F000:109D ; allows other devices to use the keyboard interface. | |
| F000:109D ; if the device generates a scan code > 85 this table | |
| F000:109D ; can be used to map the device to the keyboard. the | |
| F000:109D ; device also has the option of having a unioue scan | |
| F000:109D ; code put in the keyboard buffer (instead of mapping | |
| F000:109D ; to the keyboard). the extended scan code put in the | |
| F000:109D ; buffer will be continuous beginning at 150. a zero | |
| F000:109D ; will be used in place of an ascii code (e.g. a | |
| F000:109D ; device generating scan code 86 and not mapping 86 | |
| F000:109D ; to the keyboard will have a [150,0] put in the | |
| F000:109D ; keyboard buffer. | |
| F000:109D ; table format: | |
| F000:109D ; the first byte is a length indicating the number | |
| F000:109D ; of scan codes mapped to the keyboard. the remaining | |
| F000:109D ; entries are words. the first byte (low byte) is a | |
| F000:109D ; scan code and the second byte (high byte) is zero. | |
| F000:109D ; a device generating n scan codes is assumed to generate the | |
| F000:109D ; following stream 86,87,88,...,b6+(n-1). the scan code bytes | |
| F000:109D ; in the table correspond to this set with the first data | |
| F000:109D ; byte matching 86, the second matching 87 etc. | |
| F000:109D ; notes: | |
| F000:109D ; (1) if a device generates a break code, nothing is | |
| F000:109D ; put in the buffer | |
| F000:109D ; (2) a length of 0 indicates that zero scan codes have been | |
| F000:109D ; mapped to the keyboard and all extended scan codes will | |
| F000:109D ; be used | |
| F000:109D ; (3) a device can map some of its scan codes to the keyboard | |
| F000:109D ; and have some its scan codes in the extended set | |
| F000:109D ;----------------------------------------------------------- | |
| F000:109D | |
| F000:109D extab db 14h ; DATA XREF: F000:0218o | |
| F000:109E dw 48h, 49h, 4Dh, 51h, 50h, 4Fh, 4Bh, 47h, 39h, 1Ch, 11h | |
| F000:109E dw 12h, 1Fh, 2Dh, 2Ch, 2Bh, 1Eh, 10h, 0Fh, 1 | |
| F000:10C6 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:10C6 ; ----------------------------------------------------- | |
| F000:10C6 ; key62_int (int 0x48) | |
| F000:10C6 ; the purpose of this routine is to translate scan codes and | |
| F000:10C6 ; scan code combinations from the 62 key keyboard to their | |
| F000:10C6 ; equivalents on the 83 key keyboard. the scan code is | |
| F000:10C6 ; passed in al. each scan code passed either triggers one or | |
| F000:10C6 ; more calls to interrupt 9 or sets flags to retain keyboard | |
| F000:10C6 ; status. when interrupt 9 is called the translated scan | |
| F000:10C6 ; codes are passed to it in al. the intent of this code was | |
| F000:10C6 ; to keep interrupt 9 intact from its origin in the pc family. | |
| F000:10C6 ; this routine is in the front end of interrupt 9 and | |
| F000:10C6 ; transforms a 62 key keyboard to look as if it uere an 83 | |
| F000:10C6 ; key version. | |
| F000:10C6 ; it is assumed that this routine is called from the nmi | |
| F000:10C6 ; deserialization routine and that all registers were saved | |
| F000:10C6 ; in the calling routine. as a consequence all registers are | |
| F000:10C6 ; destroyed | |
| F000:10C6 ; ----------------------------------------------------- | |
| F000:10C6 key62_int proc far ; DATA XREF: F000:07C9o | |
| F000:10C6 sti | |
| F000:10C7 cld ; forward direction | |
| F000:10C8 call dss ; set up addressing | |
| F000:10CB mov ah, al ; save scan code | |
| F000:10CD call tpm ; adjust output for user modification | |
| F000:10D0 jnb short kbx0 ; jump if ok to continue | |
| F000:10D2 iret ; return from interrupt | |
| F000:10D3 ;-----extended scan code check | |
| F000:10D3 kbx0: ; CODE XREF: key62_int+Aj | |
| F000:10D3 cmp al, 0FFh ; is this an overrun char? | |
| F000:10D5 jz short kb0_1 ; pass it to interrupt 9 | |
| F000:10D7 and al, 7Fh ; turn off break bit | |
| F000:10D9 cmp al, 86 ; is this scan code > 86? | |
| F000:10DB jl short kbx4 ; replace break bit | |
| F000:10DD ;-----scan code is in extended set | |
| F000:10DD push ds | |
| F000:10DE xor si, si | |
| F000:10E0 mov ds, si | |
| F000:10E2 les di, ds:124h ; get pointer to extended set (int 0x49) | |
| F000:10E6 mov cl, es:[di] ; get lenght byte | |
| F000:10E9 pop ds | |
| F000:10EA ;-----does scan code get mapped to keyboard or to new extended scan codes? | |
| F000:10EA sub al, 86 ; convert to base to new set | |
| F000:10EC dec cl ; length - 1 | |
| F000:10EE cmp al, cl ; is code in table? | |
| F000:10F0 jg short kbx1 ; jump if scan code not in table | |
| F000:10F2 ;-----get scan code from table | |
| F000:10F2 inc di ; point di past length byte | |
| F000:10F3 mov bx, ax | |
| F000:10F5 xor bh, bh ; preparing for adding to 16 bit register | |
| F000:10F7 shl bx, 1 | |
| F000:10F9 add di, bx ; offset to correct table entry | |
| F000:10FB mov al, es:[di] ; translated scan code in al | |
| F000:10FE cmp al, 86 ; is code in keyboard set? | |
| F000:1100 jl short kbx4 ; in keyboard set, check for break | |
| F000:1102 ;-----scan code gets mapped to extended scan codes | |
| F000:1102 kbx1: ; CODE XREF: key62_int+2Aj | |
| F000:1102 test ah, 80h ; is this a break code? | |
| F000:1105 jz short kbx2 ; make code, put it in buffer | |
| F000:1107 iret ; break code, return from interrupt | |
| F000:1108 kbx2: ; CODE XREF: key62_int+3Fj | |
| F000:1108 add ah, 64 ; extended set codes begin at 150 | |
| F000:110B xor al, al ; zero out ascii value (null) | |
| F000:110D mov bx, ds:seg40.buffer_tail ; get tail pointer | |
| F000:1111 mov si, bx ; save pointer to tail | |
| F000:1113 call k4 ; increment tail value | |
| F000:1116 cmp bx, ds:seg40.buffer_head ; is buffer full? | |
| F000:111A jnz short kbx3 ; put contents of ax in buffer | |
| F000:111C ;-----buffer is full, beep and clear flags | |
| F000:111C mov bx, 80h ; '' ; frequency of beep | |
| F000:111F mov cx, 48h ; 'H' ; duration of beep | |
| F000:1122 call kb_noise ; buffer full beep | |
| F000:1125 and byte ptr ds:seg40.kb_flag, 0F0h ; clear alt, ctrl, left and right shift | |
| F000:112A and byte ptr ds:seg40.kb_flag_1, 0Fh ; clear make of ins, caps_lock, num and scroll | |
| F000:112F and byte ptr ds:seg40.kb_flag_2, 1Fh ; clear function states | |
| F000:1134 iret ; done with interrupt | |
| F000:1135 kbx3: ; CODE XREF: key62_int+54j | |
| F000:1135 mov [si], ax ; put contents of ax in buffer | |
| F000:1137 mov ds:seg40.buffer_tail, bx ; advance buffer tail | |
| F000:113B iret ; return from interrupt | |
| F000:113C kbx4: ; CODE XREF: key62_int+15j | |
| F000:113C ; key62_int+3Aj | |
| F000:113C and ah, 80h ; mask break bit on original scan | |
| F000:113F or al, ah ; update new scan code | |
| F000:1141 mov ah, al ; save al in ah again | |
| F000:1143 ;------83 key keyboard functions shift+prtsc and ctrl+numlock | |
| F000:1143 kb0_1: ; CODE XREF: key62_int+Fj | |
| F000:1143 cmp al, key_num ; is this a numlock? | |
| F000:1145 jnz short kb0_3 ; check for prtsc | |
| F000:1147 test byte ptr ds:seg40.kb_flag, 100b ; is ctrl key being held down? | |
| F000:114C jz short kb0_2 ; numlock without ctrl, continue | |
| F000:114E test byte ptr ds:seg40.kb_flag, 1000b ; is alt key held currently? | |
| F000:1153 jnz short kb0_2 ; pass it on | |
| F000:1155 jmp kb16_1 ; put keyboard in hold state | |
| F000:1158 kb0_2: ; CODE XREF: key62_int+86j | |
| F000:1158 ; key62_int+8Dj | |
| F000:1158 ; key62_int+9Ej | |
| F000:1158 ; key62_int+A5j | |
| F000:1158 jmp cont_int ; continue with interrupt 0x48 | |
| F000:115B ;-----check for prtsc | |
| F000:115B kb0_3: ; CODE XREF: key62_int+7Fj | |
| F000:115B cmp al, 55 ; is this prtsc key? | |
| F000:115D jnz short kb1_1 ; not a prtsc key | |
| F000:115F test byte ptr ds:seg40.kb_flag, 11b ; either shift active? | |
| F000:1164 jz short kb0_2 ; process scan in int9 | |
| F000:1166 test byte ptr ds:seg40.kb_flag, 100b ; is ctrl key pressed? | |
| F000:116B jnz short kb0_2 ; not a valid prtsc (pc compatible) | |
| F000:116D jmp prtsc ; handle the print screen function | |
| F000:1170 ;-----alternate shift translations | |
| F000:1170 kb1_1: ; CODE XREF: key62_int+97j | |
| F000:1170 mov ah, al ; save character | |
| F000:1172 and al, 7Fh ; mask break bit | |
| F000:1174 test byte ptr ds:seg40.kb_flag, 1000b ; is this a potential translation? | |
| F000:1179 jz short kb2 | |
| F000:117B ;-----table lookup | |
| F000:117B push cs | |
| F000:117C pop es ; initialize segment for table lookup | |
| F000:117D mov di, offset alt_table | |
| F000:1180 mov cx, 5 ; get ready for table lookup | |
| F000:1183 repne scasb ; search table | |
| F000:1185 jnz short kb2 ; jump if match is not found | |
| F000:1187 mov cx, (offset alt_table+1) | |
| F000:118A sub di, cx ; update di to index scan code | |
| F000:118C mov al, cs:new_alt[di] ; translate scan code | |
| F000:1191 ;-----check for break code | |
| F000:1191 mov bl, ds:seg40.kb_flag ; save kb_flag status | |
| F000:1195 xor byte ptr ds:seg40.kb_flag, 1000b ; mask off alt shift | |
| F000:119A test ah, 80h ; is this a break character | |
| F000:119D jz short kb1_2 ; jump if scan is a make | |
| F000:119F or al, 80h ; set break bit | |
| F000:11A1 ;-----make code, check for shift sequence | |
| F000:11A1 kb1_2: ; CODE XREF: key62_int+D7j | |
| F000:11A1 cmp di, 3 ; is this a shift sequence | |
| F000:11A4 jl short kb1_3 ; jump if not a shift sequence | |
| F000:11A6 or byte ptr ds:seg40.kb_flag, 10b ; turn on shift flag | |
| F000:11AB kb1_3: ; CODE XREF: key62_int+DEj | |
| F000:11AB out 60h, al | |
| F000:11AD int 9 ; issue int to process scan code | |
| F000:11AF mov ds:seg40.kb_flag, bl ; restore original flag states | |
| F000:11B3 iret | |
| F000:11B4 ;-----function key handler | |
| F000:11B4 kb2: ; CODE XREF: key62_int+B3j | |
| F000:11B4 ; key62_int+BFj | |
| F000:11B4 cmp al, key_fn ; check for function key (fn_key) | |
| F000:11B6 jnz short kb4 ; jump if not function key | |
| F000:11B8 test ah, 80h ; is this a function break | |
| F000:11BB jnz short kb3 ; jump if function break | |
| F000:11BD and byte ptr ds:seg40.kb_flag_2, 1Fh ; clear all previous functions | |
| F000:11C2 or byte ptr ds:seg40.kb_flag_2, 10100000b ; (fn_flag + fn_pending) | |
| F000:11C7 iret ; return from interrupt | |
| F000:11C8 ;-----function break | |
| F000:11C8 kb3: ; CODE XREF: key62_int+F5j | |
| F000:11C8 test byte ptr ds:seg40.kb_flag_2, 100000b ; (fn_pending) | |
| F000:11CD jnz short kb3_1 ; jump if function is pending | |
| F000:11CF and byte ptr ds:seg40.kb_flag_2, 1Fh ; clear all flags | |
| F000:11D4 iret | |
| F000:11D5 kb3_1: ; CODE XREF: key62_int+107j | |
| F000:11D5 or byte ptr ds:seg40.kb_flag_2, 1000000b ; set break flag (fn_break) | |
| F000:11DA kb3_2: ; CODE XREF: key62_int+117j | |
| F000:11DA iret ; return from interrupt | |
| F000:11DB ;-----check if function flag already set | |
| F000:11DB kb4: ; CODE XREF: key62_int+F0j | |
| F000:11DB cmp al, key_phk ; is this a phantom key? (phk) | |
| F000:11DD jz short kb3_2 ; jump if phantom sequence | |
| F000:11DF test byte ptr ds:seg40.kb_flag_2, 10010000b ; are we in function state? (fn_flag + fn_lock) | |
| F000:11E4 jnz short kb5 | |
| F000:11E6 ;-----check if num_state is active | |
| F000:11E6 test byte ptr ds:seg40.kb_flag, 100000b ; (num_state) | |
| F000:11EB jz short kb4_0 ; jump if not in num_state | |
| F000:11ED cmp al, key_num_0 ; are we in numeric keypad region? | |
| F000:11EF ja short kb4_0 ; jump if not in keypad | |
| F000:11F1 dec al ; check lower bound of range | |
| F000:11F3 jz short kb4_0 ; jump if not in range (esc key) | |
| F000:11F5 ;-----translate scan code to numeric keypad | |
| F000:11F5 dec al ; al is offset into table | |
| F000:11F7 mov bx, offset num_codes | |
| F000:11FA xlat byte ptr cs:[bx] ; new scan code is in al | |
| F000:11FC and ah, 80h ; isolate break bit on original scan code | |
| F000:11FF or al, ah ; update keypad scan code | |
| F000:1201 jmp short cont_int ; continue with interrupt | |
| F000:1203 kb4_0: ; CODE XREF: key62_int+125j | |
| F000:1203 ; key62_int+129j | |
| F000:1203 ; key62_int+12Dj | |
| F000:1203 mov al, ah ; get back break bit if set | |
| F000:1205 jmp short cont_int | |
| F000:1207 ;-----check for valid function key | |
| F000:1207 kb5: ; CODE XREF: key62_int+11Ej | |
| F000:1207 cmp al, key_num_0 ; check for range of integers | |
| F000:1209 ja short kb7 ; jump if not in range | |
| F000:120B dec al ; check for esc key (=1) | |
| F000:120D jnz short kb6 ; not escape key, range of integers | |
| F000:120F ;-----escape key, lock keyboard in function lock | |
| F000:120F test ah, 80h ; is this a break code? | |
| F000:1212 jnz short kb8 ; no processing for escape break | |
| F000:1214 test byte ptr ds:seg40.kb_flag_2, 80h ; toggles only when fn held concurrently (fn_flag) | |
| F000:1219 jz short kb8 ; not held concurrently | |
| F000:121B test byte ptr ds:seg40.kb_flag_2, 40h ; has the function key been released (fn_break) | |
| F000:1220 jnz short kb8 ; continue if released. process as esc | |
| F000:1222 test byte ptr ds:seg40.kb_flag, 3 ; either shift? (left_shift+right_shift) | |
| F000:1227 jz short kb8 ; not held down | |
| F000:1229 xor byte ptr ds:seg40.kb_flag_2, 10h ; toggle state (fn_lock) | |
| F000:122E and byte ptr ds:seg40.kb_flag_2, 1Fh ; turn off other states (clear_flags) | |
| F000:1233 iret ; return from interrupt | |
| F000:1234 ;-----scan code in range 1 -> 0 | |
| F000:1234 kb6: ; CODE XREF: key62_int+147j | |
| F000:1234 add al, 58 ; generate correct scan code | |
| F000:1236 jmp short kb12 ; clean-up before return to kb_int | |
| F000:1238 ;-----check table for other valid scan codes | |
| F000:1238 kb7: ; CODE XREF: key62_int+143j | |
| F000:1238 push cs | |
| F000:1239 pop es ; establish address of table | |
| F000:123A mov di, offset kb0 ; base of table | |
| F000:123D mov cx, 0Ch ; lenght of table | |
| F000:1240 repne scasb ; search table for a match | |
| F000:1242 jz short kb10 ; jump if match | |
| F000:1244 ;-----illegal character | |
| F000:1244 kb8: ; CODE XREF: key62_int+14Cj | |
| F000:1244 ; key62_int+153j | |
| F000:1244 ; key62_int+15Aj | |
| F000:1244 ; key62_int+161j | |
| F000:1244 ; key62_int+1A4j | |
| F000:1244 test byte ptr ds:seg40.kb_flag_2, 40h | |
| F000:1249 jz short kb9 | |
| F000:124B test ah, 80h | |
| F000:124E jnz short kb9 | |
| F000:1250 kb85: ; CODE XREF: key62_int+1FCj | |
| F000:1250 and byte ptr ds:seg40.kb_flag_2, 1Fh | |
| F000:1255 mov byte ptr ds:seg40.cur_func, 0 | |
| F000:125A ;-----function break is not set | |
| F000:125A kb9: ; CODE XREF: key62_int+183j | |
| F000:125A ; key62_int+188j | |
| F000:125A mov al, ah ; retreive original scancode | |
| F000:125C cont_int: ; CODE XREF: key62_int:kb0_2j | |
| F000:125C ; key62_int+13Bj | |
| F000:125C ; key62_int+13Fj | |
| F000:125C ; key62_int+203j | |
| F000:125C out 60h, al ; AT Keyboard controller 8042. | |
| F000:125E int 9 ; issue keyboard interrupt | |
| F000:1260 ret_int: ; CODE XREF: key62_int+1D0j | |
| F000:1260 ; key62_int+1E1j | |
| F000:1260 iret | |
| F000:1261 ;-----before translation check for alt+fn+n_key as num lock | |
| F000:1261 kb10: ; CODE XREF: key62_int+17Cj | |
| F000:1261 cmp al, key_n ; is this a potention numlock? (n_key) | |
| F000:1263 jnz short kb10_1 ; not a numkey, translate it | |
| F000:1265 test byte ptr ds:seg40.kb_flag, 8 ; alt held down also? | |
| F000:126A jz short kb8 ; treat as illegal combination | |
| F000:126C kb10_1: ; CODE XREF: key62_int+19Dj | |
| F000:126C mov cx, (offset kb0+1) ; get offset to table | |
| F000:126F sub di, cx ; update index to new scancode table | |
| F000:1271 mov al, cs:kb1[di] ; move new scancode into register | |
| F000:1276 ;-----translated code in al or an offset to the table "scan" | |
| F000:1276 kb12: ; CODE XREF: key62_int+170j | |
| F000:1276 test ah, 80h ; is this a break char? | |
| F000:1279 jz short kb13 ; jump if make code | |
| F000:127B ;-----check for toggle key | |
| F000:127B cmp al, key_num ; is this a num lock? | |
| F000:127D jz short kb12_1 ; jump if toggle key | |
| F000:127F cmp al, key_scroll ; is this a scroll lock? | |
| F000:1281 jnz short kb12_2 ; jump if not a toggle key | |
| F000:1283 kb12_1: ; CODE XREF: key62_int+1B7j | |
| F000:1283 or al, 80h ; turn on break bit | |
| F000:1285 out 60h, al | |
| F000:1287 int 9 ; toggle state | |
| F000:1289 and al, 7Fh ; turn off break bit | |
| F000:128B kb12_2: ; CODE XREF: key62_int+1BBj | |
| F000:128B test byte ptr ds:seg40.kb_flag_2, 40h ; has function break occured? | |
| F000:1290 jz short kb12_3 ; jump if break has not occured | |
| F000:1292 cmp al, ds:seg40.cur_func ; is this a break of old valid function | |
| F000:1296 jnz short ret_int ; allow further current functions | |
| F000:1298 and byte ptr ds:seg40.kb_flag_2, 1Fh ; (clear_flags) | |
| F000:129D kb12_20: ; CODE XREF: key62_int+1E8j | |
| F000:129D mov byte ptr ds:seg40.cur_func, 0 ; clear current function | |
| F000:12A2 iret ; return from interrupt | |
| F000:12A3 kb12_3: ; CODE XREF: key62_int+1CAj | |
| F000:12A3 cmp al, ds:seg40.cur_func ; is this break of first function? | |
| F000:12A7 jnz short ret_int ; ignore | |
| F000:12A9 and byte ptr ds:seg40.kb_flag_2, 0DFh ; turn off pending function (and_mask-fn_pending) | |
| F000:12AE jmp short kb12_20 ; clear current function and return | |
| F000:12B0 ;-----valid make key has pressed | |
| F000:12B0 kb13: ; CODE XREF: key62_int+1B3j | |
| F000:12B0 test byte ptr ds:seg40.kb_flag_2, 40h ; check if function key has been pressed | |
| F000:12B5 jz short kb14_1 ; jump if not set | |
| F000:12B7 ;------function break has already occured | |
| F000:12B7 cmp byte ptr ds:seg40.cur_func, 0 ; is this a new function? | |
| F000:12BC jz short kb14_1 ; initialize new function | |
| F000:12BE cmp ds:seg40.cur_func, al ; is this non-current function | |
| F000:12C2 jnz short kb85 ; jump if no function is pending to retreive original scan code | |
| F000:12C4 ;-----check for scan code generation sequence | |
| F000:12C4 kb14_1: ; CODE XREF: key62_int+1EFj | |
| F000:12C4 ; key62_int+1F6j | |
| F000:12C4 mov ds:seg40.cur_func, al ; initialize current fn | |
| F000:12C7 cmp al, key_prt_screen ; is this a simulated sequence? | |
| F000:12C9 jg short cont_int ; jump if this is a simple translation | |
| F000:12CB jz short prtsc ; do the print screen function | |
| F000:12CD cmp al, key_pause ; is this the hold function? | |
| F000:12CF jz short kb16_1 | |
| F000:12D1 ;-----break or echo | |
| F000:12D1 dec al ; point at base | |
| F000:12D3 shl al, 1 | |
| F000:12D5 shl al, 1 ; multiply by 4 | |
| F000:12D7 cbw | |
| F000:12D8 db 2Eh | |
| F000:12D8 lea si, scan ; address sequence of simulated keystrokes | |
| F000:12DD add si, ax ; update to point at correct set | |
| F000:12DF mov cx, 4 ; loop counter | |
| F000:12E2 generate: ; CODE XREF: key62_int+222j | |
| F000:12E2 lods byte ptr cs:[si] ; get scan code from table | |
| F000:12E4 out 60h, al | |
| F000:12E6 int 9 ; process it | |
| F000:12E8 loop generate ; get next | |
| F000:12EA iret | |
| F000:12EB ;-----put keyboard in hold state | |
| F000:12EB kb16_1: ; CODE XREF: key62_int+8Fj | |
| F000:12EB ; key62_int+209j | |
| F000:12EB test byte ptr ds:seg40.kb_flag_1, 8 | |
| F000:12F0 jnz short kb16_2 | |
| F000:12F2 or byte ptr ds:seg40.kb_flag_1, 8 | |
| F000:12F7 in al, 0A0h ; reset keyboard latch | |
| F000:12F9 hold: ; CODE XREF: key62_int+238j | |
| F000:12F9 test byte ptr ds:seg40.kb_flag_1, 8 | |
| F000:12FE jnz short hold | |
| F000:1300 kb16_2: ; CODE XREF: key62_int+22Aj | |
| F000:1300 iret | |
| F000:1301 ;-----print screen function | |
| F000:1301 prtsc: ; CODE XREF: key62_int+A7j | |
| F000:1301 ; key62_int+205j | |
| F000:1301 test byte ptr ds:seg40.kb_flag_1, 8 ; is hold state in progress | |
| F000:1306 jz short kb16_3 ; ok to continue with prtsc | |
| F000:1308 and byte ptr ds:seg40.kb_flag_1, 0F7h ; turn off flag | |
| F000:130D iret | |
| F000:130E kb16_3: ; CODE XREF: key62_int+240j | |
| F000:130E add sp, 6 ; get rid of call to interrupt 48h | |
| F000:1311 pop es ; pop registers that aren't modified in int5 | |
| F000:1312 pop ds | |
| F000:1313 pop dx | |
| F000:1314 pop cx | |
| F000:1315 pop bx | |
| F000:1316 in al, 0A0h ; reset keyboard latch | |
| F000:1318 int 5 ; issue interrupt | |
| F000:131A pop ax | |
| F000:131B pop di | |
| F000:131C pop si ; pop the rest | |
| F000:131D iret | |
| F000:131D key62_int endp ; sp = 16h | |
| F000:131E ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:131E ; ----------------------------------------------------- | |
| F000:131E ; typamatic | |
| F000:131E ; this routine will check keyboard status bits in kb_flag_2 | |
| F000:131E ; and determine what state the keyboard is in. appropriate | |
| F000:131E ; action will be taken. | |
| F000:131E ; input | |
| F000:131E ; al= scan code of key which triggered non-maskable interrupt | |
| F000:131E ; output | |
| F000:131E ; carry bit = 1 if no action is to be taken | |
| F000:131E ; carry bit = 0 means scan code in al should be processed | |
| F000:131E ; further | |
| F000:131E ; modifications to the variables cur_char and var_delay are | |
| F000:131E ; made. also the putchar bit in kb_flag_2 is toggled when | |
| F000:131E ; the keyboard is in half rate mode | |
| F000:131E ; ----------------------------------------------------- | |
| F000:131E tpm proc near ; CODE XREF: key62_int+7p | |
| F000:131E push bx | |
| F000:131F cmp ds:seg40.cur_char, al ; is this a new char? | |
| F000:1323 jz short tp2 ; jump if same character | |
| F000:1325 ;-----new character check for break sequences | |
| F000:1325 test al, 80h ; is the new key a break key? | |
| F000:1327 jz short tp0 ; jump if not a break key | |
| F000:1329 and al, 7Fh ; clear break bit | |
| F000:132B cmp ds:seg40.cur_char, al ; is the new character the break of the last make? | |
| F000:132F mov al, ah ; retreive original character | |
| F000:1331 jnz short tp ; jump if not the same character | |
| F000:1333 mov byte ptr ds:seg40.cur_char, 0 ; clear current character | |
| F000:1338 tp: ; CODE XREF: tpm+13j tpm+2Fj | |
| F000:1338 ; tpm+36j tpm+5Cj tpm+68j | |
| F000:1338 clc ; clear carry bit | |
| F000:1339 pop bx | |
| F000:133A retn ; return | |
| F000:133B ;-----initialize new character | |
| F000:133B tp0: ; CODE XREF: tpm+9j | |
| F000:133B mov ds:seg40.cur_char, al ; save new character | |
| F000:133E and byte ptr ds:seg40.var_delay, 0F0h ; clear variable delay | |
| F000:1343 and byte ptr ds:seg40.kb_flag_2, 0FEh ; initial putchar bit as zero | |
| F000:1348 test byte ptr ds:seg40.kb_flag_2, 2 ; are we increasing the initial delay? | |
| F000:134D jz short tp ; default delay | |
| F000:134F or byte ptr ds:seg40.var_delay, 0Fh ; increase the delay by 2x | |
| F000:1354 jmp short tp | |
| F000:1356 ;-----check if we are in typamatic mode and if delay is over | |
| F000:1356 tp2: ; CODE XREF: tpm+5j | |
| F000:1356 test byte ptr ds:seg40.kb_flag_2, 8 ; if typamatic turned off? | |
| F000:135B jnz short tp4 ; jump if typamatic turned off | |
| F000:135D mov bl, ds:seg40.var_delay ; get var_delay | |
| F000:1361 and bl, 0Fh ; mask off high order (screen range) | |
| F000:1364 or bl, bl ; is initial delay over? | |
| F000:1366 jz short tp3 ; jump if delay is over | |
| F000:1368 dec bl ; decrease delay wait by another character | |
| F000:136A and byte ptr ds:seg40.var_delay, 0F0h | |
| F000:136F or ds:seg40.var_delay, bl | |
| F000:1373 jmp short tp4 | |
| F000:1375 ;-----check if time to output char | |
| F000:1375 tp3: ; CODE XREF: tpm+48j | |
| F000:1375 test byte ptr ds:seg40.kb_flag_2, 4 ; are we in half rate mode? | |
| F000:137A jz short tp ; jump if we are in normal mode | |
| F000:137C xor byte ptr ds:seg40.kb_flag_2, 1 ; toggle bit | |
| F000:1381 test byte ptr ds:seg40.kb_flag_2, 1 ; is it time to put out a char | |
| F000:1386 jnz short tp ; not time to output character | |
| F000:1388 tp4: ; CODE XREF: tpm+3Dj tpm+55j | |
| F000:1388 stc ; skip this character. set carry flag | |
| F000:1389 pop bx | |
| F000:138A retn | |
| F000:138A tpm endp | |
| F000:138B ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:138B dss proc near ; CODE XREF: F000:q23p | |
| F000:138B ; F000:loc_F04E4p q35p | |
| F000:138B ; F000:0643p F000:0809p | |
| F000:138B ; video_io:c1p ... | |
| F000:138B push ax | |
| F000:138C mov ax, 40h ; '@' | |
| F000:138F mov ds, ax | |
| F000:1391 pop ax | |
| F000:1392 retn | |
| F000:1392 dss endp | |
| F000:1393 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:1393 ; --- int 0x1a ---------------------------------------- | |
| F000:1393 ; time_of_day/sound source select | |
| F000:1393 ; this routine allows the clock to be set/read | |
| F000:1393 ; an interface for setting the multiplexer for | |
| F000:1393 ; audio source is also provided | |
| F000:1393 ; | |
| F000:1393 ; input | |
| F000:1393 ; (ah) = 0 read the current clock setting | |
| F000:1393 ; return cx = high portion of count | |
| F000:1393 ; dx = low portion of count | |
| F000:1393 ; al = 0 if timer has not passed 24 hours | |
| F000:1393 ; since last read. <> 0 if on another day | |
| F000:1393 ; (ah) = 1 set current clock | |
| F000:1393 ; cx = high portion of count | |
| F000:1393 ; dx = low portion of count | |
| F000:1393 ; (ah) = 80h set up sound multiplexer | |
| F000:1393 ; al =(source of sound) --> "audio out" or rf modulator | |
| F000:1393 ; 00 = 8253 channel 2 | |
| F000:1393 ; 01 = cassette input | |
| F000:1393 ; 02 = "audio in" line on i/o channel | |
| F000:1393 ; 03 = complex sound generator chip | |
| F000:1393 ; | |
| F000:1393 ; note: counts occur at the rate of 1193180/65536 counts/sec | |
| F000:1393 ; (out about 18.2 per second -- see equates below) | |
| F000:1393 ; ----------------------------------------------------- | |
| F000:1393 time_of_day proc far ; CODE XREF: F000:FE6Ej | |
| F000:1393 ; DATA XREF: F000:FF17o | |
| F000:1393 sti ; interrupts back on | |
| F000:1394 push ds ; save segment | |
| F000:1395 call dss | |
| F000:1398 cmp ah, 80h ; '' ; ah=80? | |
| F000:139B jz short t4a ; mux_set-up | |
| F000:139D or ah, ah ; ah=0? | |
| F000:139F jz short t2 ; read_time | |
| F000:13A1 dec ah ; ah=1? | |
| F000:13A3 jz short t3 ; set_time | |
| F000:13A5 t1: ; CODE XREF: time_of_day+26j | |
| F000:13A5 ; time_of_day+36j | |
| F000:13A5 ; time_of_day+48j | |
| F000:13A5 sti ; interrupts back on | |
| F000:13A6 pop ds ; recover segment | |
| F000:13A7 iret ; return to caller | |
| F000:13A8 t2: ; CODE XREF: time_of_day+Cj | |
| F000:13A8 cli ; no timer interrupts while reading | |
| F000:13A9 mov al, ds:seg40.timer_ofl | |
| F000:13AC mov byte ptr ds:seg40.timer_ofl, 0 ; get overflow, and reset flag | |
| F000:13B1 mov cx, ds:seg40.timer_high | |
| F000:13B5 mov dx, ds:seg40.timer_low | |
| F000:13B9 jmp short t1 ; tod_return | |
| F000:13BB t3: ; CODE XREF: time_of_day+10j | |
| F000:13BB cli ; no interrupts while writing | |
| F000:13BC mov ds:seg40.timer_low, dx | |
| F000:13C0 mov ds:seg40.timer_high, cx ; set the time | |
| F000:13C4 mov byte ptr ds:seg40.timer_ofl, 0 ; reset overflow | |
| F000:13C9 jmp short t1 ; tod_return | |
| F000:13CB t4a: ; CODE XREF: time_of_day+8j | |
| F000:13CB push cx | |
| F000:13CC mov cl, 5 | |
| F000:13CE shl al, cl ; shift parm bits left 5 positions | |
| F000:13D0 xchg al, ah ; save parm | |
| F000:13D2 in al, 61h ; get current port settings | |
| F000:13D4 and al, 10011111b ; isolate mux bits | |
| F000:13D6 or al, ah ; combine port bits/parm bits | |
| F000:13D8 out 61h, al ; set port to new value | |
| F000:13DA pop cx | |
| F000:13DB jmp short t1 ; tod_return | |
| F000:13DB time_of_day endp | |
| F000:13DD ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:13DD ; --- int 0x16 ---------------------------------------- | |
| F000:13DD ; keyboard i/o | |
| F000:13DD ; these routines provide keyboard support | |
| F000:13DD ; input | |
| F000:13DD ; (ah)=0 read the next ascii character struck from the | |
| F000:13DD ; keyboard, return the result in (al), scan code in | |
| F000:13DD ; (ah) | |
| F000:13DD ; (ah)=1 set the z flag to indicate if an ascii character is | |
| F000:13DD ; available to be read. | |
| F000:13DD ; (zf)=1 -- no code available | |
| F000:13DD ; (zf)=0 -- code is available | |
| F000:13DD ; (ah)=2 return the current shift status in al register | |
| F000:13DD ; the bit settings for this code are indicated in | |
| F000:13DD ; the equates for kb_flag | |
| F000:13DD ; (ah)=3 set typematic rates. the typematic rate can be | |
| F000:13DD ; changed using the following functions: | |
| F000:13DD ; (al)=0 return to default. restores original | |
| F000:13DD ; state. i.e. typematic on, normal initial | |
| F000:13DD ; delay, and normal typematic rate | |
| F000:13DD ; (al)=1 increase initial delay. this is the | |
| F000:13DD ; delay between the first characters | |
| F000:13DD ; by one half. | |
| F000:13DD ; (al)=2 half_rate. slows typematic character | |
| F000:13DD ; by one half. | |
| F000:13DD ; (al)=3 combines al=1 and al=2. increases | |
| F000:13DD ; initial delay and slows typematic | |
| F000:13DD ; characters by one half. | |
| F000:13DD ; (al)=4 turn off typematic characters. only the | |
| F000:13DD ; first character is honored. all others | |
| F000:13DD ; are ignored. | |
| F000:13DD ; al is range checked. if al<0 or al>4 the state | |
| F000:13DD ; remains the same. | |
| F000:13DD ; ***note*** each time the typematic rates are | |
| F000:13DD ; changed all previous states are removed. i.e. if | |
| F000:13DD ; the keyboard is in the half rate mode and you want | |
| F000:13DD ; to add an increase in typematic delay, you must | |
| F000:13DD ; call this routine with ah=3 and al=3 | |
| F000:13DD ; (ah)=4 adjust keyboard by the value in al as follows: | |
| F000:13DD ; (al)=0 turn off keyboard click. | |
| F000:13DD ; (al)=1 turn on keyboard click. | |
| F000:13DD ; al is range checked. the state is unaltered if | |
| F000:13DD ; al <> 1,0. | |
| F000:13DD ; output | |
| F000:13DD ; as noted above, only ax and flags changed | |
| F000:13DD ; all registers retained | |
| F000:13DD ; ----------------------------------------------------- | |
| F000:13DD keyboard_io proc far ; CODE XREF: F000:E82Ej | |
| F000:13DD ; DATA XREF: F000:FF0Fo | |
| F000:13DD sti | |
| F000:13DE push ds | |
| F000:13DF push bx | |
| F000:13E0 call dss | |
| F000:13E3 or ah, ah ; ah=0 | |
| F000:13E5 jz short k1 ; ascii_read | |
| F000:13E7 dec ah ; ah=1 | |
| F000:13E9 jz short k2 ; ascii_status | |
| F000:13EB dec ah ; ah=2 | |
| F000:13ED jz short k3 ; shift_status | |
| F000:13EF jmp short k3_1 | |
| F000:13F1 k1: ; CODE XREF: keyboard_io+8j | |
| F000:13F1 ; keyboard_io+1Fj | |
| F000:13F1 sti | |
| F000:13F2 nop | |
| F000:13F3 cli | |
| F000:13F4 mov bx, ds:seg40.buffer_head | |
| F000:13F8 cmp bx, ds:seg40.buffer_tail | |
| F000:13FC jz short k1 | |
| F000:13FE mov ax, [bx] | |
| F000:1400 call k4 | |
| F000:1403 mov ds:seg40.buffer_head, bx | |
| F000:1407 jmp short ret_int_16 | |
| F000:1409 k2: ; CODE XREF: keyboard_io+Cj | |
| F000:1409 cli | |
| F000:140A mov bx, ds:seg40.buffer_head | |
| F000:140E cmp bx, ds:seg40.buffer_tail | |
| F000:1412 mov ax, [bx] | |
| F000:1414 sti | |
| F000:1415 pop bx | |
| F000:1416 pop ds | |
| F000:1417 retf 2 | |
| F000:141A k3: ; CODE XREF: keyboard_io+10j | |
| F000:141A mov al, ds:seg40.kb_flag | |
| F000:141D jmp short ret_int_16 | |
| F000:141F k3_1: ; CODE XREF: keyboard_io+12j | |
| F000:141F dec ah | |
| F000:1421 jz short k3_3 ; ah=3, adjust typematic | |
| F000:1423 dec ah ; range check for ah=4 | |
| F000:1425 jnz short ret_int_16 ; illegal function call | |
| F000:1427 or al, al ; turn off keyboard click? | |
| F000:1429 jnz short k3_2 ; jump for range check | |
| F000:142B and byte ptr ds:seg40.kb_flag_1, 0FBh ; turn off click | |
| F000:1430 jmp short ret_int_16 | |
| F000:1432 k3_2: ; CODE XREF: keyboard_io+4Cj | |
| F000:1432 cmp al, 1 | |
| F000:1434 jnz short ret_int_16 | |
| F000:1436 or byte ptr ds:seg40.kb_flag_1, 4 ; turn on keyboard click | |
| F000:143B jmp short ret_int_16 | |
| F000:143D k3_3: ; CODE XREF: keyboard_io+44j | |
| F000:143D cmp al, 4 | |
| F000:143F jg short ret_int_16 | |
| F000:1441 and byte ptr ds:seg40.kb_flag_2, 0F1h ; mask off any old typematic states | |
| F000:1446 shl al, 1 ; shift to proper position | |
| F000:1448 or ds:seg40.kb_flag_2, al | |
| F000:144C ret_int_16: ; CODE XREF: keyboard_io+2Aj | |
| F000:144C ; keyboard_io+40j | |
| F000:144C ; keyboard_io+48j | |
| F000:144C ; keyboard_io+53j | |
| F000:144C ; keyboard_io+57j | |
| F000:144C ; keyboard_io+5Ej ... | |
| F000:144C pop bx | |
| F000:144D pop ds | |
| F000:144E iret | |
| F000:144E keyboard_io endp | |
| F000:144F ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:144F ; ----- increment a buffer pointer | |
| F000:144F k4 proc near ; CODE XREF: key62_int+4Dp | |
| F000:144F ; keyboard_io+23p | |
| F000:144F ; kb_int+202p kb_int+2C1p | |
| F000:144F inc bx ; move to next word in list | |
| F000:1450 inc bx | |
| F000:1451 cmp bx, ds:seg40.buffer_end ; at the end of buffer? | |
| F000:1455 jnz short k5 ; no, continue | |
| F000:1457 mov bx, ds:seg40.buffer_start ; yes, reset to buffer beginning | |
| F000:145B k5: ; CODE XREF: k4+6j | |
| F000:145B retn | |
| F000:145B k4 endp | |
| F000:145C ;---- table of shift keys and mask values | |
| F000:145C k6 db 52h, 3Ah, 45h, 46h, 38h, 1Dh, 2Ah, 36h ; DATA XREF: kb_int+32o | |
| F000:145C ; kb_int:k17o | |
| F000:1464 ;---- shift_mask table | |
| F000:1464 k7 db 80h, 40h, 20h, 10h, 8, 4, 2, 1 ; DATA XREF: kb_int+45r | |
| F000:146C ;---- scan code tables | |
| F000:146C k8 db 1Bh, 0FFh, 0, 3 dup(0FFh), 1Eh, 4 dup(0FFh), 1Fh, 0FFh | |
| F000:146C ; DATA XREF: kb_int:k42o | |
| F000:146C db 7Fh, 0FFh, 11h, 17h, 5, 12h, 14h, 19h, 15h, 9, 0Fh | |
| F000:146C db 10h, 1Bh, 1Dh, 0Ah, 0FFh, 1, 13h, 4, 6, 7, 8, 0Ah, 0Bh | |
| F000:146C db 0Ch, 4 dup(0FFh), 1Ch, 1Ah, 18h, 3, 16h, 2, 0Eh, 0Dh | |
| F000:146C db 6 dup(0FFh), 20h, 0FFh | |
| F000:14A6 ;---- ctl table scan | |
| F000:14A6 k9 db 5Eh, 5Fh, 60h, 61h, 62h, 63h, 64h, 65h, 66h, 67h, 2 dup(0FFh) | |
| F000:14A6 ; DATA XREF: kb_int+21Do | |
| F000:14A6 db 77h, 0FFh, 84h, 0FFh, 73h, 0FFh, 74h, 0FFh, 75h, 0FFh | |
| F000:14A6 db 76h, 2 dup(0FFh) | |
| F000:14BF ;---- lc table | |
| F000:14BF k10 db 1Bh, 31h, 32h, 33h, 34h, 35h, 36h, 37h, 38h, 39h, 30h | |
| F000:14BF ; DATA XREF: kb_int:k55o | |
| F000:14BF db 2Dh, 3Dh, 8, 9, 71h, 77h, 65h, 72h, 74h, 79h, 75h, 69h | |
| F000:14BF db 6Fh, 70h, 5Bh, 5Dh, 0Dh, 0FFh, 61h, 73h, 64h, 66h, 67h | |
| F000:14BF db 68h, 6Ah, 6Bh, 6Ch, 3Bh, 27h, 60h, 0FFh, 5Ch, 7Ah, 78h | |
| F000:14BF db 63h, 76h, 62h, 6Eh, 6Dh, 2Ch, 2Eh, 2Fh, 0FFh, 2Ah, 0FFh | |
| F000:14BF db 20h, 0FFh | |
| F000:14F9 ;---- vc table | |
| F000:14F9 k11 db 1Bh, 21h, 40h, 23h, 24h, 25h, 5Eh, 26h, 2Ah, 28h, 29h | |
| F000:14F9 ; DATA XREF: kb_int:k47o | |
| F000:14F9 db 5Fh, 2Bh, 8, 0, 51h, 57h, 45h, 52h, 54h, 59h, 55h, 49h | |
| F000:14F9 db 4Fh, 50h, 7Bh, 7Dh, 0Dh, 0FFh, 41h, 53h, 44h, 46h, 47h | |
| F000:14F9 db 48h, 4Ah, 4Bh, 4Ch, 3Ah, 22h, 7Eh, 0FFh, 7Ch, 5Ah, 58h | |
| F000:14F9 db 43h, 56h, 42h, 4Eh, 4Dh, 3Ch, 3Eh, 3Fh, 0FFh, 0, 0FFh | |
| F000:14F9 db 20h, 0FFh | |
| F000:1533 ;---- uc table scan | |
| F000:1533 k12 db 54h, 55h, 56h, 57h, 58h, 59h, 5Ah, 5Bh, 5Ch, 5Dh | |
| F000:1533 ; DATA XREF: kb_int+23Bo | |
| F000:153D ;---- alt table scan | |
| F000:153D k13 db 68h, 69h, 6Ah, 6Bh, 6Ch, 6Dh, 6Eh, 6Fh, 70h, 71h | |
| F000:1547 ;---- num state table | |
| F000:1547 k14 db 37h, 38h, 39h, 2Dh, 34h, 35h, 36h, 2Bh, 31h, 32h, 33h | |
| F000:1547 ; DATA XREF: kb_int+277o | |
| F000:1547 db 30h, 2Eh | |
| F000:1554 ;---- base case table | |
| F000:1554 k15 db 47h, 48h, 49h, 0FFh, 4Bh, 0FFh, 4Dh, 0FFh, 4Fh, 50h | |
| F000:1554 ; DATA XREF: kb_int+25Eo | |
| F000:1554 db 51h, 52h, 53h | |
| F000:1561 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:1561 ; int 0x09 handler | |
| F000:1561 ; keyboard interrupt routine | |
| F000:1561 kb_int proc far ; CODE XREF: F000:E987j | |
| F000:1561 ; DATA XREF: real_vector_setup+Ao | |
| F000:1561 ; F000:FEF5o | |
| F000:1561 ; FUNCTION CHUNK AT F000:0043 SIZE 00000106 BYTES | |
| F000:1561 sti ; allow further interrupts | |
| F000:1562 push ax | |
| F000:1563 push bx | |
| F000:1564 push cx | |
| F000:1565 push dx | |
| F000:1566 push si | |
| F000:1567 push di | |
| F000:1568 push ds | |
| F000:1569 push es | |
| F000:156A cld ; forward direction | |
| F000:156B call dss | |
| F000:156E mov ah, al ; move scan code in ah | |
| F000:1570 ;----- test for overrun scan code from keyboard | |
| F000:1570 cmp al, 0FFh ; is this an overrun char? | |
| F000:1572 jnz short k16 ; no, test for shift key | |
| F000:1574 mov bx, 80h ; '' ; duration of error beep | |
| F000:1577 mov cx, 48h ; 'H' ; frequency of tone | |
| F000:157A call kb_noise ; buffer full beep | |
| F000:157D and byte ptr ds:seg40.kb_flag, 0F0h | |
| F000:1582 and byte ptr ds:seg40.kb_flag_1, 0Fh | |
| F000:1587 and byte ptr ds:seg40.kb_flag_2, 1Fh | |
| F000:158C jmp k26 | |
| F000:158F ;----- test for shift keys | |
| F000:158F k16: ; CODE XREF: kb_int+11j | |
| F000:158F and al, 7Fh ; test shift | |
| F000:158F ; turn off the break bit | |
| F000:1591 push cs | |
| F000:1592 pop es | |
| F000:1593 mov di, offset k6 | |
| F000:1596 mov cx, 8 | |
| F000:1599 repne scasb | |
| F000:159B mov al, ah | |
| F000:159D jz short k17 | |
| F000:159F jmp k25 | |
| F000:15A2 ;----- shift key found | |
| F000:15A2 k17: ; CODE XREF: kb_int+3Cj | |
| F000:15A2 sub di, (offset k6+1) | |
| F000:15A6 mov ah, cs:k7[di] | |
| F000:15AB test al, 80h | |
| F000:15AD jnz short k23 | |
| F000:15AF ;----- shift make found, determine set or toggle | |
| F000:15AF cmp ah, 10h | |
| F000:15B2 jnb short k18 | |
| F000:15B4 ;----- plain shift key, set shift on | |
| F000:15B4 or ds:seg40.kb_flag, ah | |
| F000:15B8 jmp k26 | |
| F000:15BB ;----- toggled shift key, test for 1st make or not | |
| F000:15BB k18: ; CODE XREF: kb_int+51j | |
| F000:15BB test byte ptr ds:seg40.kb_flag, 4 | |
| F000:15C0 jnz short k25 | |
| F000:15C2 cmp al, 52h ; 'R' | |
| F000:15C4 jnz short k22 | |
| F000:15C6 test byte ptr ds:seg40.kb_flag, 8 | |
| F000:15CB jnz short k25 | |
| F000:15CD test byte ptr ds:seg40.kb_flag, 20h | |
| F000:15D2 jnz short k21 | |
| F000:15D4 test byte ptr ds:seg40.kb_flag, 3 | |
| F000:15D9 jz short k22 | |
| F000:15DB k20: ; CODE XREF: kb_int+85j | |
| F000:15DB mov ax, 5230h ; put out an ascii zero | |
| F000:15DE jmp k57 | |
| F000:15E1 k21: ; CODE XREF: kb_int+71j | |
| F000:15E1 test byte ptr ds:seg40.kb_flag, 3 | |
| F000:15E6 jz short k20 | |
| F000:15E8 k22: ; CODE XREF: kb_int+63j | |
| F000:15E8 ; kb_int+78j | |
| F000:15E8 test ds:seg40.kb_flag_1, ah | |
| F000:15EC jnz short k26 | |
| F000:15EE or ds:seg40.kb_flag_1, ah | |
| F000:15F2 xor ds:seg40.kb_flag, ah | |
| F000:15F6 cmp al, 52h ; 'R' | |
| F000:15F8 jnz short k26 | |
| F000:15FA mov ax, 5200h | |
| F000:15FD jmp k57 ; put into output buffer | |
| F000:1600 ;----- break shift found | |
| F000:1600 k23: ; CODE XREF: kb_int+4Cj | |
| F000:1600 cmp ah, 10h | |
| F000:1603 jnb short k24 | |
| F000:1605 not ah | |
| F000:1607 and ds:seg40.kb_flag, ah | |
| F000:160B cmp al, 0B8h ; '¸' | |
| F000:160D jnz short k26 | |
| F000:160F ;----- alternate shift key released, get the value into buffer | |
| F000:160F mov al, ds:seg40.alt_input | |
| F000:1612 xor ah, ah | |
| F000:1614 mov ds:seg40.alt_input, ah | |
| F000:1618 or al, al | |
| F000:161A jz short k26 | |
| F000:161C jmp k58 | |
| F000:161F k24: ; CODE XREF: kb_int+A2j | |
| F000:161F cmp al, 0BAh ; 'º' | |
| F000:1621 jnz short k24_1 | |
| F000:1623 test byte ptr ds:seg40.kb_flag_1, 2 | |
| F000:1628 jz short k24_1 | |
| F000:162A and byte ptr ds:seg40.kb_flag_1, 0FDh | |
| F000:162F jmp short k26 | |
| F000:1631 db 90h ; | |
| F000:1632 ;----- break or normal toggle | |
| F000:1632 k24_1: ; CODE XREF: kb_int+C0j | |
| F000:1632 ; kb_int+C7j | |
| F000:1632 not ah | |
| F000:1634 and ds:seg40.kb_flag_1, ah | |
| F000:1638 jmp short k26 | |
| F000:163A ;----- test for hold state | |
| F000:163A k25: ; CODE XREF: kb_int+3Ej | |
| F000:163A ; kb_int+5Fj kb_int+6Aj | |
| F000:163A cmp al, 80h ; '' | |
| F000:163C jnb short k26 | |
| F000:163E test byte ptr ds:seg40.kb_flag_1, 8 | |
| F000:1643 jz short k28 | |
| F000:1645 and byte ptr ds:seg40.kb_flag_1, 0F7h | |
| F000:164A k26: ; CODE XREF: kb_int+2Bj | |
| F000:164A ; kb_int+57j kb_int+8Bj | |
| F000:164A ; kb_int+97j kb_int+ACj | |
| F000:164A ; kb_int+B9j ... | |
| F000:164A pop es | |
| F000:164B pop ds | |
| F000:164C pop di | |
| F000:164D pop si | |
| F000:164E pop dx | |
| F000:164F pop cx | |
| F000:1650 pop bx | |
| F000:1651 pop ax | |
| F000:1652 iret | |
| F000:1653 ;----- not in hold state, test for special chars | |
| F000:1653 k28: ; CODE XREF: kb_int+E2j | |
| F000:1653 test byte ptr ds:seg40.kb_flag, 8 | |
| F000:1658 jnz short k29 | |
| F000:165A jmp k38 | |
| F000:165D ;----- test for alt+ctrl key sequences | |
| F000:165D k29: ; CODE XREF: kb_int+F7j | |
| F000:165D test byte ptr ds:seg40.kb_flag, 4 ; test-reset | |
| F000:165D ; are we in control shift also | |
| F000:1662 jz short k31 ; no reset | |
| F000:1664 cmp al, key_del ; shift state is there, test key | |
| F000:1666 jnz short k29_1 ; no_reset | |
| F000:1668 ;----- ctl-alt-del has been found, do i/o cleanup | |
| F000:1668 mov word ptr ds:seg40.reset_flag, 1234h ; set flag for reset function | |
| F000:166E jmp reset ; jump to power on diagnostics | |
| F000:1671 k29_1: ; CODE XREF: kb_int+105j | |
| F000:1671 cmp al, key_ins ; check for reset with diagnostics (ins_key) | |
| F000:1673 jnz short k29_2 ; check for other alt-ctrl-sequences | |
| F000:1675 ;----- alt-ctrl-ins has been found | |
| F000:1675 mov word ptr ds:seg40.reset_flag, 4321h ; set flag for diagnostics | |
| F000:167B jmp reset ; level 1 diagnostics | |
| F000:167E k29_2: ; CODE XREF: kb_int+112j | |
| F000:167E cmp al, key_caps ; check for keyboard click toggle (caps_key) | |
| F000:1680 jnz short k29_3 ; check for screen adjustment | |
| F000:1682 ;----- alt+ctrl+capslock has been found | |
| F000:1682 test byte ptr ds:seg40.kb_flag_1, 2 | |
| F000:1687 jnz short k26 | |
| F000:1689 xor byte ptr ds:seg40.kb_flag_1, 4 ; toogle key for audio keystroke feedback | |
| F000:168E or byte ptr ds:seg40.kb_flag_1, 2 ; set click_sequence state | |
| F000:1693 jmp short k26 ; interrupt is over | |
| F000:1695 k29_3: ; CODE XREF: kb_int+11Fj | |
| F000:1695 cmp al, key_right_arrow ; adjust screen to the right? (right_arrow) | |
| F000:1697 jnz short k29_4 ; look for right adjustment | |
| F000:1699 call get_pos ; get the # of positions the screen is shifted | |
| F000:169C cmp al, 0FCh ; 'ü' ; is the screen shifted as far as possible? | |
| F000:169E jl short k26 ; out of range | |
| F000:16A0 dec byte ptr ds:seg40.horz_pos ; shift value to the right | |
| F000:16A4 dec al ; decrease range value | |
| F000:16A6 call put_pos ; restore storage location | |
| F000:16A9 jmp short k29_5 ; adjust | |
| F000:16AB k29_4: ; CODE XREF: kb_int+136j | |
| F000:16AB cmp al, key_left_arrow ; adjust screen to the left (left_arrow) | |
| F000:16AD jnz short k31 ; not an alt_ctrl sequence | |
| F000:16AF call get_pos ; get number of positions the screen is shifted | |
| F000:16B2 cmp al, 4 ; is screen shifted as far as possible? | |
| F000:16B4 jg short k26 | |
| F000:16B6 inc byte ptr ds:seg40.horz_pos ; shift screen to the left | |
| F000:16BA inc al ; increase number of positions screen is shifted | |
| F000:16BC call put_pos ; put position back in storage | |
| F000:16BF k29_5: ; CODE XREF: kb_int+148j | |
| F000:16BF mov al, 2 ; adjust | |
| F000:16C1 mov dx, 3D4h ; address to crt controller | |
| F000:16C4 out dx, al | |
| F000:16C5 mov al, ds:seg40.horz_pos ; column position | |
| F000:16C8 inc dx ; point at data register | |
| F000:16C9 out dx, al ; mov position | |
| F000:16CA jmp k26 | |
| F000:16CD ;----- in alternate shift, reset not found | |
| F000:16CD k31: ; CODE XREF: kb_int+101j | |
| F000:16CD ; kb_int+14Cj | |
| F000:16CD cmp al, 57 ; no-reset | |
| F000:16CD ; test for space key | |
| F000:16CF jnz short k32 ; not there | |
| F000:16D1 mov al, 20h ; ' ' ; set space char | |
| F000:16D3 jmp k57 ; buffer_fill | |
| F000:16D6 ;---- alt input table | |
| F000:16D6 k30 db 52h, 4Fh, 50h, 51h, 4Bh, 4Ch, 4Dh, 47h, 48h, 49h | |
| F000:16D6 ; DATA XREF: kb_int:k32o | |
| F000:16D6 ; kb_int+1A3o | |
| F000:16E0 ;---- super-shift-table | |
| F000:16E0 db 10h, 11h, 12h, 13h, 14h, 15h, 16h, 17h, 18h, 19h, 1Eh | |
| F000:16E0 db 1Fh, 20h, 21h, 22h, 23h, 24h, 25h, 26h, 2Ch, 2Dh, 2Eh | |
| F000:16E0 db 2Fh, 30h, 31h, 32h | |
| F000:16FA k32: ; CODE XREF: kb_int+16Ej | |
| F000:16FA mov di, offset k30 | |
| F000:16FD mov cx, 0Ah | |
| F000:1700 repne scasb | |
| F000:1702 jnz short k33 | |
| F000:1704 sub di, (offset k30+1) | |
| F000:1708 mov al, ds:seg40.alt_input | |
| F000:170B mov ah, 0Ah | |
| F000:170D mul ah | |
| F000:170F add ax, di | |
| F000:1711 mov ds:seg40.alt_input, al | |
| F000:1714 jmp k26 | |
| F000:1717 k33: ; CODE XREF: kb_int+1A1j | |
| F000:1717 mov byte ptr ds:seg40.alt_input, 0 | |
| F000:171C mov cx, 1Ah | |
| F000:171F repne scasb | |
| F000:1721 jnz short k34 | |
| F000:1723 xor al, al | |
| F000:1725 jmp k57 | |
| F000:1728 k34: ; CODE XREF: kb_int+1C0j | |
| F000:1728 cmp al, 2 | |
| F000:172A jb short k35 | |
| F000:172C cmp al, 0Eh | |
| F000:172E jnb short k35 | |
| F000:1730 add ah, 76h ; 'v' | |
| F000:1733 xor al, al | |
| F000:1735 jmp k57 | |
| F000:1738 k35: ; CODE XREF: kb_int+1C9j | |
| F000:1738 ; kb_int+1CDj | |
| F000:1738 cmp al, 3Bh ; ';' | |
| F000:173A jnb short k37 | |
| F000:173C k36: ; CODE XREF: kb_int+1E0j | |
| F000:173C jmp k26 | |
| F000:173F k37: ; CODE XREF: kb_int+1D9j | |
| F000:173F cmp al, 47h ; 'G' | |
| F000:1741 jnb short k36 | |
| F000:1743 mov bx, 153Dh | |
| F000:1746 jmp k63 | |
| F000:1749 k38: ; CODE XREF: kb_int+F9j | |
| F000:1749 test byte ptr ds:seg40.kb_flag, 4 | |
| F000:174E jz short k44 | |
| F000:1750 cmp al, 46h ; 'F' | |
| F000:1752 jnz short k41 | |
| F000:1754 mov bx, ds:seg40.buffer_head | |
| F000:1758 mov byte ptr ds:seg40.bios_break, 80h ; '' | |
| F000:175D int 1Bh ; CTRL-BREAK KEY | |
| F000:175F sub ax, ax | |
| F000:1761 mov [bx], ax | |
| F000:1763 call k4 | |
| F000:1766 mov ds:seg40.buffer_tail, bx | |
| F000:176A jmp k26 | |
| F000:176D k41: ; CODE XREF: kb_int+1F1j | |
| F000:176D cmp al, 37h ; '7' | |
| F000:176F jnz short k42 | |
| F000:1771 mov ax, 7200h | |
| F000:1774 jmp short k57 | |
| F000:1776 db 90h ; | |
| F000:1777 k42: ; CODE XREF: kb_int+20Ej | |
| F000:1777 mov bx, offset k8 | |
| F000:177A cmp al, 3Bh ; ';' | |
| F000:177C jb short k56 | |
| F000:177E mov bx, offset k9 | |
| F000:1781 jmp k63 | |
| F000:1784 k44: ; CODE XREF: kb_int+1EDj | |
| F000:1784 cmp al, 47h ; 'G' | |
| F000:1786 jnb short k48 | |
| F000:1788 test byte ptr ds:seg40.kb_flag, 3 | |
| F000:178D jz short k54 | |
| F000:178F cmp al, 0Fh | |
| F000:1791 jnz short k46 | |
| F000:1793 mov ax, 0F00h | |
| F000:1796 jmp short k57 | |
| F000:1798 k46: ; CODE XREF: kb_int+230j | |
| F000:1798 cmp al, 3Bh ; ';' | |
| F000:179A jb short k47 | |
| F000:179C mov bx, offset k12 | |
| F000:179F jmp k63 | |
| F000:17A2 k47: ; CODE XREF: kb_int+239j | |
| F000:17A2 mov bx, offset k11 | |
| F000:17A5 jmp short k56 | |
| F000:17A7 k48: ; CODE XREF: kb_int+225j | |
| F000:17A7 test byte ptr ds:seg40.kb_flag, 20h | |
| F000:17AC jnz short k52 | |
| F000:17AE test byte ptr ds:seg40.kb_flag, 3 | |
| F000:17B3 jnz short k53 | |
| F000:17B5 k49: ; CODE XREF: kb_int+273j | |
| F000:17B5 cmp al, 4Ah ; 'J' | |
| F000:17B7 jz short k50 | |
| F000:17B9 cmp al, 4Eh ; 'N' | |
| F000:17BB jz short k51 | |
| F000:17BD sub al, 47h ; 'G' | |
| F000:17BF mov bx, offset k15 | |
| F000:17C2 jmp k64 | |
| F000:17C5 k50: ; CODE XREF: kb_int+256j | |
| F000:17C5 mov ax, 4A2Dh | |
| F000:17C8 jmp short k57 | |
| F000:17CA k51: ; CODE XREF: kb_int+25Aj | |
| F000:17CA mov ax, 4E2Bh | |
| F000:17CD jmp short k57 | |
| F000:17CF k52: ; CODE XREF: kb_int+24Bj | |
| F000:17CF test byte ptr ds:seg40.kb_flag, 3 | |
| F000:17D4 jnz short k49 | |
| F000:17D6 k53: ; CODE XREF: kb_int+252j | |
| F000:17D6 sub al, 46h ; 'F' | |
| F000:17D8 mov bx, offset k14 | |
| F000:17DB jmp short k56 | |
| F000:17DD k54: ; CODE XREF: kb_int+22Cj | |
| F000:17DD cmp al, 3Bh ; ';' | |
| F000:17DF jb short k55 | |
| F000:17E1 xor al, al | |
| F000:17E3 jmp short k57 | |
| F000:17E5 k55: ; CODE XREF: kb_int+27Ej | |
| F000:17E5 mov bx, offset k10 | |
| F000:17E8 k56: ; CODE XREF: kb_int+21Bj | |
| F000:17E8 ; kb_int+244j kb_int+27Aj | |
| F000:17E8 dec al | |
| F000:17EA xlat byte ptr cs:[bx] | |
| F000:17EC ;----- put character into buffer | |
| F000:17EC k57: ; CODE XREF: kb_int+7Dj | |
| F000:17EC ; kb_int+9Cj kb_int+172j | |
| F000:17EC ; kb_int+1C4j kb_int+1D4j | |
| F000:17EC ; kb_int+213j ... | |
| F000:17EC cmp al, 0FFh ; buffer fill | |
| F000:17EC ; is this an ignore char? | |
| F000:17EE jz short k59 ; yes, do nothing with it | |
| F000:17F0 cmp ah, 0FFh ; look for -1 pseudo scan | |
| F000:17F3 jz short k59 ; near interrupt return | |
| F000:17F5 k58: ; CODE XREF: kb_int+BBj | |
| F000:17F5 test byte ptr ds:seg40.kb_flag, 40h | |
| F000:17FA jz short k61 | |
| F000:17FC test byte ptr ds:seg40.kb_flag, 3 | |
| F000:1801 jz short k60 | |
| F000:1803 cmp al, 41h ; 'A' | |
| F000:1805 jb short k61 | |
| F000:1807 cmp al, 5Ah ; 'Z' | |
| F000:1809 ja short k61 | |
| F000:180B add al, 20h ; ' ' | |
| F000:180D jmp short k61 | |
| F000:180F k59: ; CODE XREF: kb_int+28Dj | |
| F000:180F ; kb_int+292j | |
| F000:180F jmp k26 | |
| F000:1812 ;----- convert any lower case to upper case | |
| F000:1812 k60: ; CODE XREF: kb_int+2A0j | |
| F000:1812 cmp al, 61h ; 'a' ; lower-to-upper | |
| F000:1812 ; find out if alphabetic | |
| F000:1814 jb short k61 ; not_caps_state | |
| F000:1816 cmp al, 7Ah ; 'z' | |
| F000:1818 ja short k61 ; not_caps_state | |
| F000:181A sub al, 20h ; ' ' ; convert to uppper case ('a' - 'A') | |
| F000:181C k61: ; CODE XREF: kb_int+299j | |
| F000:181C ; kb_int+2A4j kb_int+2A8j | |
| F000:181C ; kb_int+2ACj kb_int+2B3j | |
| F000:181C ; kb_int+2B7j | |
| F000:181C mov bx, ds:seg40.buffer_tail ; not_caps_state | |
| F000:181C ; get the end pointer to the buffer | |
| F000:1820 mov si, bx ; save the value | |
| F000:1822 call k4 ; advance the tail | |
| F000:1825 cmp bx, ds:seg40.buffer_head ; has the buffer wrapped around | |
| F000:1829 jnz short k61_1 ; buffer_full_beep | |
| F000:182B push bx ; save buffer tail | |
| F000:182C mov bx, 80h ; '' ; duration of error beep | |
| F000:182F mov cx, 48h ; 'H' ; frequency of error beep half tone | |
| F000:1832 call kb_noise ; output noise | |
| F000:1835 and byte ptr ds:seg40.kb_flag, 0F0h ; clear alt,clrl,left and right shifts | |
| F000:183A and byte ptr ds:seg40.kb_flag_1, 0Fh ; clear potential break of ins,caps,num and scroll shift | |
| F000:183F and byte ptr ds:seg40.kb_flag_2, 1Fh ; clear function states | |
| F000:1844 pop bx ; retreive buffer tail | |
| F000:1845 jmp k26 ; return from interrupt | |
| F000:1848 k61_1: ; CODE XREF: kb_int+2C8j | |
| F000:1848 test byte ptr ds:seg40.kb_flag_1, 4 ; is audio feedback enabled? | |
| F000:184D jz short k61_2 ; no, just put in buffer | |
| F000:184F push bx ; save buffer tail value | |
| F000:1850 mov bx, 1 ; duration of click | |
| F000:1853 mov cx, 10h ; frequency of click | |
| F000:1856 call kb_noise ; output audio feedback of key stroke | |
| F000:1859 pop bx ; retreive buffer_tail value | |
| F000:185A k61_2: ; CODE XREF: kb_int+2ECj | |
| F000:185A mov [si], ax ; store the value | |
| F000:185C mov ds:seg40.buffer_tail, bx ; move the pointer up | |
| F000:1860 jmp k26 ; interrupt_return | |
| F000:1863 ;----- translate scan for pseudo scan codes | |
| F000:1863 k63: ; CODE XREF: kb_int+1E5j | |
| F000:1863 ; kb_int+220j kb_int+23Ej | |
| F000:1863 sub al, 59 ; translate-scan | |
| F000:1863 ; convert origin to function keys | |
| F000:1865 k64: ; CODE XREF: kb_int+261j | |
| F000:1865 xlat byte ptr cs:[bx] ; translate-scan-orgd | |
| F000:1865 ; ctl table scan | |
| F000:1867 mov ah, al ; put value into ah | |
| F000:1869 xor al, al ; zero ascii code | |
| F000:186B jmp k57 ; put it into the buffer | |
| F000:186B kb_int endp | |
| F000:186E ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:186E get_pos proc near ; CODE XREF: kb_int+138p | |
| F000:186E ; kb_int+14Ep | |
| F000:186E push cx | |
| F000:186F mov al, ds:seg40.var_delay | |
| F000:1872 and al, 0F0h ; mask off low nibble | |
| F000:1874 mov cl, 4 | |
| F000:1876 sar al, cl | |
| F000:1878 pop cx | |
| F000:1879 retn | |
| F000:1879 get_pos endp | |
| F000:187A ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:187A put_pos proc near ; CODE XREF: kb_int+145p | |
| F000:187A ; kb_int+15Bp | |
| F000:187A push cx | |
| F000:187B mov cl, 4 | |
| F000:187D shl al, cl | |
| F000:187F mov cl, ds:seg40.var_delay | |
| F000:1883 and cl, 0Fh | |
| F000:1886 or al, cl | |
| F000:1888 mov ds:seg40.var_delay, al | |
| F000:188B pop cx | |
| F000:188C retn | |
| F000:188C put_pos endp | |
| F000:188D ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:188D ; ----------------------------------------------------- | |
| F000:188D ; manufactoring activity signal routine - invoked through the timer | |
| F000:188D ; tick routine during manufacturing activities. (accessed through | |
| F000:188D ; int 1ch) | |
| F000:188D ; ----------------------------------------------------- | |
| F000:188D mfg_tick proc far ; DATA XREF: F000:d6o | |
| F000:188D ; F000:0302o | |
| F000:188D push ax | |
| F000:188E sub ax, ax ; send a 00 to port 13 as a | |
| F000:1890 out 13h, al ; activity signal | |
| F000:1892 in al, 61h ; flip speaker data to opposite sense | |
| F000:1894 mov ah, al ; save orig setting | |
| F000:1896 and ah, 10011101b ; make sure mux is -> right and isolate speaker bit | |
| F000:1899 not al ; flip all bits | |
| F000:189B and al, 10b ; isolate speaker data bit (now in opposite sense) | |
| F000:189D or al, ah ; combine with orig. data form port b | |
| F000:189F or al, 10000b ; and disable internal speaker | |
| F000:18A1 out 61h, al | |
| F000:18A3 mov al, 20h ; ' ' ; eoi to intr. chip | |
| F000:18A5 out 20h, al | |
| F000:18A7 pop ax | |
| F000:18A8 iret | |
| F000:18A8 mfg_tick endp | |
| F000:18A9 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:18A9 ; ----------------------------------------------------- | |
| F000:18A9 ; convert and print ascii code | |
| F000:18A9 ; | |
| F000:18A9 ; al must contain number to be converted. | |
| F000:18A9 ; ax and bx destroyed. | |
| F000:18A9 ; ----------------------------------------------------- | |
| F000:18A9 xpc_byte proc near ; CODE XREF: e_msg+70p | |
| F000:18A9 ; e_msg+76p rom_check+33p | |
| F000:18A9 push ax | |
| F000:18AA mov cl, 4 | |
| F000:18AC shr al, cl | |
| F000:18AE call xlat_pr | |
| F000:18B1 pop ax | |
| F000:18B2 and al, 0Fh | |
| F000:18B2 xpc_byte endp | |
| F000:18B4 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:18B4 xlat_pr proc near ; CODE XREF: xpc_byte+5p | |
| F000:18B4 add al, 90h ; '' | |
| F000:18B6 daa | |
| F000:18B7 adc al, 40h ; '@' | |
| F000:18B9 daa | |
| F000:18B9 xlat_pr endp | |
| F000:18BA ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:18BA prt_hex proc near ; CODE XREF: q35+2Ep q35+3Dp | |
| F000:18BA ; e_msg+2Fp e_msg+54p | |
| F000:18BA ; p_msg+5p | |
| F000:18BA push bx | |
| F000:18BB mov ah, 0Eh | |
| F000:18BD mov bh, 0 | |
| F000:18BF int 10h | |
| F000:18C1 pop bx | |
| F000:18C2 retn | |
| F000:18C2 prt_hex endp | |
| F000:18C3 ; START OF FUNCTION CHUNK FOR printer_io | |
| F000:18C3 reprint: ; CODE XREF: printer_io+1Cj | |
| F000:18C3 sub dx, dx | |
| F000:18C5 test ch, 4 | |
| F000:18C8 jz short loc_F18CB | |
| F000:18CA inc dx | |
| F000:18CB loc_F18CB: ; CODE XREF: printer_io-D70Aj | |
| F000:18CB or ah, ah | |
| F000:18CD jz short loc_F1910 | |
| F000:18CF dec ah | |
| F000:18D1 jz short loc_F18F0 | |
| F000:18D3 dec ah | |
| F000:18D5 jnz short loc_F18ED | |
| F000:18D7 push ax | |
| F000:18D8 mov ah, 3 | |
| F000:18DA int 14h ; SERIAL I/O - GET USART STATUS | |
| F000:18DA ; DX = port number (0-3) | |
| F000:18DA ; Return: AX = port status code | |
| F000:18DC call fake | |
| F000:18DF pop ax | |
| F000:18E0 or dh, dh | |
| F000:18E2 jz short loc_F18EB | |
| F000:18E4 mov ah, dh | |
| F000:18E6 and ah, 0FEh | |
| F000:18E9 jmp short loc_F18ED | |
| F000:18EB loc_F18EB: ; CODE XREF: printer_io-D6F0j | |
| F000:18EB mov ah, 90h ; '' | |
| F000:18ED loc_F18ED: ; CODE XREF: printer_io-D6FDj | |
| F000:18ED ; printer_io-D6E9j | |
| F000:18ED ; printer_io-D6C8j | |
| F000:18ED ; printer_io-D6C4j | |
| F000:18ED ; printer_io-D6B3j | |
| F000:18ED ; printer_io-D6AFj | |
| F000:18ED jmp loc_FF00D | |
| F000:18F0 loc_F18F0: ; CODE XREF: printer_io-D701j | |
| F000:18F0 mov si, dx | |
| F000:18F2 mov al, ds:78h | |
| F000:18F5 add al, 0Ah | |
| F000:18F7 mov [si+7Ch], al | |
| F000:18FB push ax | |
| F000:18FC mov al, 87h ; '' | |
| F000:18FE sub ah, ah | |
| F000:1900 int 14h ; SERIAL I/O - INITIALIZE USART | |
| F000:1900 ; AL = initializing parameters, DX = port number (0-3) | |
| F000:1900 ; Return: AH = RS-232 status code bits, AL = modem status bits | |
| F000:1902 call fake | |
| F000:1905 pop ax | |
| F000:1906 mov ah, dh | |
| F000:1908 or ah, ah | |
| F000:190A jz short loc_F18ED | |
| F000:190C mov ah, 0A8h ; '¨' | |
| F000:190E jmp short loc_F18ED | |
| F000:1910 loc_F1910: ; CODE XREF: printer_io-D705j | |
| F000:1910 push ax | |
| F000:1911 mov ah, 1 | |
| F000:1913 int 14h ; SERIAL I/O - TRANSMIT CHARACTER | |
| F000:1913 ; AL = character, DX = port number (0-3) | |
| F000:1913 ; Return: AH = RS-232 status code bits, AL = modem status bits | |
| F000:1915 call fake | |
| F000:1918 pop ax | |
| F000:1919 or dh, dh | |
| F000:191B jz short loc_F1921 | |
| F000:191D mov ah, dh | |
| F000:191F jmp short loc_F18ED | |
| F000:1921 loc_F1921: ; CODE XREF: printer_io-D6B7j | |
| F000:1921 mov ah, 10h | |
| F000:1923 jmp short loc_F18ED | |
| F000:1923 ; END OF FUNCTION CHUNK FOR printer_io | |
| F000:1925 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:1925 fake proc near ; CODE XREF: printer_io-D6F6p | |
| F000:1925 ; printer_io-D6D0p | |
| F000:1925 ; printer_io-D6BDp | |
| F000:1925 xor dh, dh | |
| F000:1927 test ah, 1Eh | |
| F000:192A jz short b13_1 | |
| F000:192C mov dh, 8 | |
| F000:192E retn | |
| F000:192F b13_1: ; CODE XREF: fake+5j | |
| F000:192F test ah, 80h | |
| F000:1932 jz short b13_2 | |
| F000:1934 mov dh, 9 | |
| F000:1936 b13_2: ; CODE XREF: fake+Dj | |
| F000:1936 retn | |
| F000:1936 fake endp | |
| F000:1937 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:1937 ; ----------------------------------------------------- | |
| F000:1937 ; new_int9 | |
| F000:1937 ; this routine is the interrupt 9 handler when the machine is | |
| F000:1937 ; first powered on and cassette basic is given control. it | |
| F000:1937 ; handles the first keystrokes entered from the keyboard and | |
| F000:1937 ; performs "special" actions as follows: | |
| F000:1937 ; if esc is the first key enetered mini-welcome is | |
| F000:1937 ; executed | |
| F000:1937 ; if ctrl-esc is the first sequence "load cas1",r" is | |
| F000:1937 ; executed giving the user the ability to boot | |
| F000:1937 ; from cassette | |
| F000:1937 ; after these keystrokes or after any other keystrokes the | |
| F000:1937 ; interrupt 9 vector is changed to point at the real | |
| F000:1937 ; interrupt 9 routine. | |
| F000:1937 ; ----------------------------------------------------- | |
| F000:1937 new_int_9 proc far ; DATA XREF: bas_ent+4o | |
| F000:1937 cmp al, 1 ; is this an escape key? | |
| F000:1939 jz short esc_key ; jump if al=esc key | |
| F000:193B cmp al, key_ctl ; else, is this a control key? | |
| F000:193D jz short ctrl_key ; jump if al=ctrl key | |
| F000:193F call real_vector_setup ; otherwise initialize real int 9 vector | |
| F000:1942 int 9 ; pass the scan code in al | |
| F000:1944 iret ; return to interrupt 0x48 | |
| F000:1945 ctrl_key: ; CODE XREF: new_int_9+6j | |
| F000:1945 or byte ptr ds:seg40.kb_flag, 4 ; turn on ctrl shift in kb_flag | |
| F000:194A iret ; return to interrupt | |
| F000:194B esc_key: ; CODE XREF: new_int_9+2j | |
| F000:194B test byte ptr ds:seg40.kb_flag, 4 ; has control shift occured? | |
| F000:1950 jz short esc_only ; no. escape only | |
| F000:1952 ;control escape has occured, put message in buffer for cassette | |
| F000:1952 ;load | |
| F000:1952 mov byte ptr ds:seg40.kb_flag, 0 ; zero out control state | |
| F000:1957 push ds | |
| F000:1958 pop es ; initialize es for bios data | |
| F000:1959 push ds ; save old ds | |
| F000:195A push cs ; point ds at code segment | |
| F000:195B pop ds | |
| F000:195C mov si, offset cas_load ; get message | |
| F000:195F mov di, 1Eh ; point at keyboard buffer | |
| F000:1962 mov cx, 0Fh ; lenght of cassette message | |
| F000:1965 nop | |
| F000:1966 t_loop: ; CODE XREF: new_int_9+31j | |
| F000:1966 lodsb ; get ascii character from message | |
| F000:1967 stosw ; put in keyboard buffer | |
| F000:1968 loop t_loop | |
| F000:196A pop ds ; retreive bios data segment | |
| F000:196B ;-----initialize queue so message will be removed from buffer | |
| F000:196B mov word ptr ds:seg40.buffer_head, 1Eh ; (kb_buffer) | |
| F000:1971 mov word ptr ds:seg40.buffer_tail, 3Ch ; '<' ; (kb_buffer+cas_lenght*2) | |
| F000:1977 ;---------------------------------------------------- | |
| F000:1977 ;***note*** | |
| F000:1977 ; it is assumed that the lenght of the cassette message is | |
| F000:1977 ; less than or equal to the lenght of the buffer. if this is | |
| F000:1977 ; not the case the buffer will eventually consume memory. | |
| F000:1977 ;---------------------------------------------------- | |
| F000:1977 call real_vector_setup | |
| F000:197A iret | |
| F000:197B esc_only: ; CODE XREF: new_int_9+19j | |
| F000:197B call real_vector_setup | |
| F000:197E mov cx, offset mini | |
| F000:1981 jmp cx ; enter the world of keyboard caper | |
| F000:1981 new_int_9 endp | |
| F000:1983 ;-----message for output when control-escape is entered as first | |
| F000:1983 ; key sequence | |
| F000:1983 cas_load db 'LOAD "CAS1:",R',0Dh ; DATA XREF: new_int_9+25o | |
| F000:1992 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:1992 write_tty proc far ; CODE XREF: video_io+38j | |
| F000:1992 ; DATA XREF: F000:0D05o | |
| F000:1992 push ax | |
| F000:1993 push ax | |
| F000:1994 mov bh, ds:seg40.active_page | |
| F000:1998 push bx | |
| F000:1999 mov bl, bh | |
| F000:199B xor bh, bh | |
| F000:199D shl bx, 1 | |
| F000:199F mov dx, [bx+50h] | |
| F000:19A3 pop bx | |
| F000:19A4 pop ax | |
| F000:19A5 cmp al, 8 | |
| F000:19A7 jz short loc_F19F9 | |
| F000:19A9 cmp al, 0Dh | |
| F000:19AB jz short loc_F1A01 | |
| F000:19AD cmp al, 0Ah | |
| F000:19AF jz short loc_F19C6 | |
| F000:19B1 cmp al, 7 | |
| F000:19B3 jz short loc_F1A05 | |
| F000:19B5 mov ah, 0Ah | |
| F000:19B7 mov cx, 1 | |
| F000:19BA int 10h ; - VIDEO - WRITE CHARACTERS ONLY AT CURSOR POSITION | |
| F000:19BA ; AL = character, BH = display page - alpha mode | |
| F000:19BA ; BL = color of character (graphics mode, PCjr only) | |
| F000:19BA ; CX = number of times to write character | |
| F000:19BC inc dl | |
| F000:19BE cmp dl, ds:seg40.crt_cols | |
| F000:19C2 jnz short loc_F19F5 | |
| F000:19C4 xor dl, dl | |
| F000:19C6 loc_F19C6: ; CODE XREF: write_tty+1Dj | |
| F000:19C6 cmp dh, 18h | |
| F000:19C9 jnz short loc_F19F3 | |
| F000:19CB mov ah, 2 | |
| F000:19CD int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:19CD ; DH,DL = row, column (0,0 = upper left) | |
| F000:19CD ; BH = page number | |
| F000:19CF mov al, ds:seg40.crt_mode | |
| F000:19D2 cmp al, 4 | |
| F000:19D4 jb short loc_F19DA | |
| F000:19D6 xor bh, bh | |
| F000:19D8 jmp short loc_F19E0 | |
| F000:19DA loc_F19DA: ; CODE XREF: write_tty+42j | |
| F000:19DA mov ah, 8 | |
| F000:19DC int 10h ; - VIDEO - READ ATTRIBUTES/CHARACTER AT CURSOR POSITION | |
| F000:19DC ; BH = display page | |
| F000:19DC ; Return: AL = character | |
| F000:19DC ; AH = attribute of character (alpha modes) | |
| F000:19DE mov bh, ah | |
| F000:19E0 loc_F19E0: ; CODE XREF: write_tty+46j | |
| F000:19E0 mov ax, 601h | |
| F000:19E3 sub cx, cx | |
| F000:19E5 mov dh, 18h | |
| F000:19E7 mov dl, ds:seg40.crt_cols | |
| F000:19EB dec dl | |
| F000:19ED loc_F19ED: ; CODE XREF: write_tty+65j | |
| F000:19ED int 10h ; - VIDEO - SCROLL PAGE UP | |
| F000:19ED ; AL = number of lines to scroll window (0 = blank whole window) | |
| F000:19ED ; BH = attributes to be used on blanked lines | |
| F000:19ED ; CH,CL = row,column of upper left corner of window to scroll | |
| F000:19ED ; DH,DL = row,column of lower right corner of window | |
| F000:19EF loc_F19EF: ; CODE XREF: write_tty+78j | |
| F000:19EF pop ax | |
| F000:19F0 jmp video_return | |
| F000:19F3 loc_F19F3: ; CODE XREF: write_tty+37j | |
| F000:19F3 inc dh | |
| F000:19F5 loc_F19F5: ; CODE XREF: write_tty+30j | |
| F000:19F5 ; write_tty+69j | |
| F000:19F5 ; write_tty+6Dj | |
| F000:19F5 ; write_tty+71j | |
| F000:19F5 mov ah, 2 | |
| F000:19F7 jmp short loc_F19ED | |
| F000:19F9 loc_F19F9: ; CODE XREF: write_tty+15j | |
| F000:19F9 or dl, dl | |
| F000:19FB jz short loc_F19F5 | |
| F000:19FD dec dl | |
| F000:19FF jmp short loc_F19F5 | |
| F000:1A01 loc_F1A01: ; CODE XREF: write_tty+19j | |
| F000:1A01 xor dl, dl | |
| F000:1A03 jmp short loc_F19F5 | |
| F000:1A05 loc_F1A05: ; CODE XREF: write_tty+21j | |
| F000:1A05 mov bl, 2 | |
| F000:1A07 call beep | |
| F000:1A0A jmp short loc_F19EF | |
| F000:1A0A write_tty endp | |
| F000:1A0C ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:1A0C ; dl = number of times to beep | |
| F000:1A0C err_beep proc near ; CODE XREF: F000:08CDp | |
| F000:1A0C ; F000:08DDp | |
| F000:1A0C pushf | |
| F000:1A0D push bx | |
| F000:1A0E cli | |
| F000:1A0F g3: ; CODE XREF: err_beep+Cj | |
| F000:1A0F mov bl, 1 | |
| F000:1A11 call beep | |
| F000:1A14 g4: ; CODE XREF: err_beep:g4j | |
| F000:1A14 loop g4 | |
| F000:1A16 dec dl | |
| F000:1A18 jnz short g3 | |
| F000:1A1A g5: ; CODE XREF: err_beep:g5j | |
| F000:1A1A loop g5 | |
| F000:1A1C g6: ; CODE XREF: err_beep:g6j | |
| F000:1A1C loop g6 | |
| F000:1A1E pop bx | |
| F000:1A1F popf | |
| F000:1A20 retn | |
| F000:1A20 err_beep endp | |
| F000:1A21 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:1A21 video_set_cursor_pos proc near ; CODE XREF: prtn3_int_82:set_cur_pos_and_printp | |
| F000:1A21 ; prtn3_int_82:set_cur_pos_and_exitp | |
| F000:1A21 mov ah, 2 | |
| F000:1A23 push di | |
| F000:1A24 push si | |
| F000:1A25 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:1A25 ; DH,DL = row, column (0,0 = upper left) | |
| F000:1A25 ; BH = page number | |
| F000:1A27 pop si | |
| F000:1A28 pop di | |
| F000:1A29 retn | |
| F000:1A29 video_set_cursor_pos endp | |
| F000:1A2A ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:1A2A ; print something using basic strings | |
| F000:1A2A ; bp = pointer to bas string | |
| F000:1A2A ; dh = row bit7 bit6 special meaning | |
| F000:1A2A ; dl = col | |
| F000:1A2A ; bl = char attribute | |
| F000:1A2A ; Attributes: bp-based frame | |
| F000:1A2A prtn3_int_82 proc far ; DATA XREF: F000:0244o | |
| F000:1A2A push ax | |
| F000:1A2B push es | |
| F000:1A2C push bp | |
| F000:1A2D mov bp, sp | |
| F000:1A2F mov ax, [bp+8] | |
| F000:1A32 mov es, ax | |
| F000:1A34 pop bp | |
| F000:1A35 push bx | |
| F000:1A36 push cx | |
| F000:1A37 push bp | |
| F000:1A38 push si | |
| F000:1A39 push di | |
| F000:1A3A push ds | |
| F000:1A3B push dx | |
| F000:1A3C call dss | |
| F000:1A3F mov bh, ds:seg40.active_page | |
| F000:1A43 xor cx, cx | |
| F000:1A45 start_again: ; CODE XREF: prtn3_int_82+70j | |
| F000:1A45 ; prtn3_int_82+102j | |
| F000:1A45 mov di, 1 ; offset to pattern | |
| F000:1A48 mov al, es:[bp+0] ; pattern len | |
| F000:1A4C xor ah, ah | |
| F000:1A4E mov si, ax ; pattern len in si | |
| F000:1A50 test dh, 80h ; '' ; bit 7 = on -> use custom attrib | |
| F000:1A53 jnz short skip_attrib | |
| F000:1A55 mov bl, 111b ; attrib 7 = white | |
| F000:1A57 skip_attrib: ; CODE XREF: prtn3_int_82+29j | |
| F000:1A57 test dh, 40h ; bit 6 = off -> regural version | |
| F000:1A5A jz short do_reg_version | |
| F000:1A5C inc si ; len + 1 | |
| F000:1A5D and dx, 1F7Fh ; row = 0-31. col=0-127 | |
| F000:1A61 l1: ; CODE XREF: prtn3_int_82+8Aj | |
| F000:1A61 inc cl ; total read +1 | |
| F000:1A63 dec di ; attrib offset = 0 (?) | |
| F000:1A64 not si ; len is in not'ed. re-not it. | |
| F000:1A66 add si, 2 | |
| F000:1A69 next_char: ; CODE XREF: prtn3_int_82+4Fj | |
| F000:1A69 ; prtn3_int_82+57j | |
| F000:1A69 ; prtn3_int_82+66j | |
| F000:1A69 ; prtn3_int_82+CAj | |
| F000:1A69 inc di ; offset + 1 | |
| F000:1A6A inc si ; len-1 | |
| F000:1A6B jz short _set_cur_pos_and_exit | |
| F000:1A6D mov al, es:[bp+di] ; al = char from user buffer | |
| F000:1A70 cmp al, 0Dh ; carriage return? | |
| F000:1A72 jnz short not_cr | |
| F000:1A74 add dh, 1 ; dh = row++ | |
| F000:1A74 ; dl = col = 0 | |
| F000:1A77 mov dl, 0 | |
| F000:1A79 jmp short next_char | |
| F000:1A7B not_cr: ; CODE XREF: prtn3_int_82+48j | |
| F000:1A7B cmp al, 0Ah ; line feed? | |
| F000:1A7D jnz short not_linefeed | |
| F000:1A7F inc dh ; row ++ | |
| F000:1A81 jmp short next_char | |
| F000:1A83 not_linefeed: ; CODE XREF: prtn3_int_82+53j | |
| F000:1A83 cmp al, 0Bh ; vertical tab? | |
| F000:1A85 jnz short not_vt | |
| F000:1A87 inc dh ; row ++ | |
| F000:1A89 inc si ; next char | |
| F000:1A8A inc di | |
| F000:1A8B mov al, es:[bp+di] | |
| F000:1A8E add dl, al ; col += char from buffer | |
| F000:1A90 jmp short next_char | |
| F000:1A92 not_vt: ; CODE XREF: prtn3_int_82+5Bj | |
| F000:1A92 cmp al, 0Ch ; form feed? | |
| F000:1A94 jnz short set_cur_pos_and_print | |
| F000:1A96 inc di | |
| F000:1A97 inc di | |
| F000:1A98 add bp, di ; bp += 2 | |
| F000:1A9A jmp short start_again | |
| F000:1A9C do_reg_version: ; CODE XREF: prtn3_int_82+30j | |
| F000:1A9C and dx, 1F7Fh ; row = 0-31. col=0-127 | |
| F000:1AA0 reg_version_loop: ; CODE XREF: prtn3_int_82+D6j | |
| F000:1AA0 ; prtn3_int_82+E1j | |
| F000:1AA0 ; prtn3_int_82+EAj | |
| F000:1AA0 ; prtn3_int_82+FDj | |
| F000:1AA0 mov cl, es:[bp+si] ; cl = control code | |
| F000:1AA3 inc si ; si = offset + 1 | |
| F000:1AA4 cmp cl, 0 ; cl == 0 ? | |
| F000:1AA7 jz short ctl_is_0 | |
| F000:1AA9 jl short ctl_is_g_than_128 | |
| F000:1AAB cmp cl, 51h ; 'Q' | |
| F000:1AAE jl short set_cur_pos_and_print | |
| F000:1AB0 jmp short check_more_ctrl_codes | |
| F000:1AB2 ctl_is_g_than_128: ; CODE XREF: prtn3_int_82+7Fj | |
| F000:1AB2 inc cl | |
| F000:1AB4 jz short l1 ; cl = 0xff ? | |
| F000:1AB6 inc cl | |
| F000:1AB8 jz short reset_pattern_offset ; cl = 0xfe ? | |
| F000:1ABA inc cl | |
| F000:1ABC jz short update_row ; cl = 0xfd ? | |
| F000:1ABE inc cl | |
| F000:1AC0 jz short _set_cur_pos_and_exit ; cl = 0xfc ? | |
| F000:1AC2 inc cl | |
| F000:1AC4 jz short new_row ; cl = 0xfb ? | |
| F000:1AC6 inc cl | |
| F000:1AC8 jz short start_new_pattern ; cl = 0xfa | |
| F000:1ACA sub cx, 6 ; restore orignal cx value (before the inc's) | |
| F000:1ACD check_more_ctrl_codes: ; CODE XREF: prtn3_int_82+86j | |
| F000:1ACD sub cl, 51h ; 'Q' | |
| F000:1AD0 cmp cl, 50h ; 'P' | |
| F000:1AD3 jl short update_col | |
| F000:1AD5 sub cl, 50h ; 'P' | |
| F000:1AD8 cmp cl, 51h ; 'Q' | |
| F000:1ADB jl short update_attrib_and_print | |
| F000:1ADD _set_cur_pos_and_exit: ; CODE XREF: prtn3_int_82+41j | |
| F000:1ADD ; prtn3_int_82+96j | |
| F000:1ADD jmp short set_cur_pos_and_exit | |
| F000:1ADF set_cur_pos_and_print: ; CODE XREF: prtn3_int_82+6Aj | |
| F000:1ADF ; prtn3_int_82+84j | |
| F000:1ADF ; prtn3_int_82+F2j | |
| F000:1ADF call video_set_cursor_pos | |
| F000:1AE2 push di | |
| F000:1AE3 push si | |
| F000:1AE4 mov ah, 9 | |
| F000:1AE6 mov al, es:[bp+di] ; al = char to print (pattern) | |
| F000:1AE9 add dl, cl ; update column w/times char is written | |
| F000:1AEB int 10h ; - VIDEO - WRITE ATTRIBUTES/CHARACTERS AT CURSOR POSITION | |
| F000:1AEB ; AL = character, BH = display page | |
| F000:1AEB ; BL = attributes of character (alpha modes) or color (graphics modes) | |
| F000:1AEB ; CX = number of times to write character | |
| F000:1AED pop si | |
| F000:1AEE pop di | |
| F000:1AEF ctl_is_0: ; CODE XREF: prtn3_int_82+7Dj | |
| F000:1AEF ; prtn3_int_82+F0j | |
| F000:1AEF cmp si, 0 | |
| F000:1AF2 jge short check_pattern | |
| F000:1AF4 jmp next_char | |
| F000:1AF7 check_pattern: ; CODE XREF: prtn3_int_82+C8j | |
| F000:1AF7 mov al, es:[bp+0] ; fetch pattern len | |
| F000:1AFB xor ah, ah | |
| F000:1AFD inc di ; pattern offset ++ | |
| F000:1AFE cmp ax, di ; end of pattern? | |
| F000:1B00 jg short reg_version_loop | |
| F000:1B02 jmp short reset_pattern_offset | |
| F000:1B04 new_row: ; CODE XREF: prtn3_int_82+9Aj | |
| F000:1B04 mov dl, 0 ; col = 0 | |
| F000:1B06 inc dh ; next row | |
| F000:1B08 reset_pattern_offset: ; CODE XREF: prtn3_int_82+8Ej | |
| F000:1B08 ; prtn3_int_82+D8j | |
| F000:1B08 mov di, 1 ; reset pattern offset | |
| F000:1B0B jmp short reg_version_loop | |
| F000:1B0D update_col: ; CODE XREF: prtn3_int_82+A9j | |
| F000:1B0D sub cl, 40 | |
| F000:1B10 add dl, cl ; update col | |
| F000:1B12 inc dh ; row++ | |
| F000:1B14 jmp short reg_version_loop | |
| F000:1B16 update_attrib_and_print: ; CODE XREF: prtn3_int_82+B1j | |
| F000:1B16 mov bl, es:[bp+di] ; get attrib value | |
| F000:1B19 inc di ; pattern offset++ | |
| F000:1B1A jz short ctl_is_0 ; is it 0? (overflow?) | |
| F000:1B1C jmp short set_cur_pos_and_print | |
| F000:1B1E update_row: ; CODE XREF: prtn3_int_82+92j | |
| F000:1B1E mov ah, es:[bp+si] ; ah = ctrl from buffer | |
| F000:1B21 inc si ; ctl offset++ | |
| F000:1B22 sub ah, 40 | |
| F000:1B25 add dh, ah ; row += ah | |
| F000:1B27 jmp reg_version_loop | |
| F000:1B2A start_new_pattern: ; CODE XREF: prtn3_int_82+9Ej | |
| F000:1B2A add bp, si | |
| F000:1B2C jmp start_again | |
| F000:1B2F set_cur_pos_and_exit: ; CODE XREF: prtn3_int_82:_set_cur_pos_and_exitj | |
| F000:1B2F call video_set_cursor_pos | |
| F000:1B32 pop bx | |
| F000:1B33 push bx | |
| F000:1B34 test bh, 20h | |
| F000:1B37 jz short read_char_y_n | |
| F000:1B39 test bh, 80h | |
| F000:1B3C jz short beep_1 | |
| F000:1B3E mov bl, 3 ; long beep | |
| F000:1B40 call beep | |
| F000:1B43 jmp short read_char_y_n | |
| F000:1B45 beep_1: ; CODE XREF: prtn3_int_82+112j | |
| F000:1B45 mov bl, 1 ; short beep | |
| F000:1B47 call beep | |
| F000:1B4A read_char_y_n: ; CODE XREF: prtn3_int_82+10Dj | |
| F000:1B4A ; prtn3_int_82+119j | |
| F000:1B4A pop bx | |
| F000:1B4B test bl, 80h | |
| F000:1B4E jz short exit | |
| F000:1B50 mov ah, 0 | |
| F000:1B52 int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY | |
| F000:1B52 ; Return: AH = scan code, AL = character | |
| F000:1B54 cmp al, 59h ; 'Y' | |
| F000:1B56 clc | |
| F000:1B57 jnz short exit | |
| F000:1B59 stc | |
| F000:1B5A exit: ; CODE XREF: prtn3_int_82+124j | |
| F000:1B5A ; prtn3_int_82+12Dj | |
| F000:1B5A pop ds | |
| F000:1B5B pop di | |
| F000:1B5C pop si | |
| F000:1B5D pop bp | |
| F000:1B5E pop cx | |
| F000:1B5F pop bx | |
| F000:1B60 pop es | |
| F000:1B61 pop ax | |
| F000:1B62 iret | |
| F000:1B62 prtn3_int_82 endp | |
| F000:1B63 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:1B63 ; does something with row/cols...then prints '*' | |
| F000:1B63 ; input: | |
| F000:1B63 ; al = col used for ?? | |
| F000:1B63 ; | |
| F000:1B63 locate_1_int_81 proc far ; DATA XREF: F000:023Eo | |
| F000:1B63 push bx | |
| F000:1B64 push bp | |
| F000:1B65 push ax | |
| F000:1B66 mov bh, 7 ; page number | |
| F000:1B68 l0: ; CODE XREF: locate_1_int_81+12j | |
| F000:1B68 mov ah, 3 | |
| F000:1B6A int 10h ; - VIDEO - READ CURSOR POSITION | |
| F000:1B6A ; BH = page number | |
| F000:1B6A ; Return: DH,DL = row,column, CH = cursor start line, CL = cursor end line | |
| F000:1B6C pop ax | |
| F000:1B6D push ax | |
| F000:1B6E cmp dh, 20 ; row < 20? | |
| F000:1B71 jl short found | |
| F000:1B73 dec bh ; page-- | |
| F000:1B75 jmp short l0 | |
| F000:1B77 found: ; CODE XREF: locate_1_int_81+Ej | |
| F000:1B77 mov ah, 38 ; max col (?) | |
| F000:1B79 sub ah, dl ; 38 - current col | |
| F000:1B7B cmp al, ah | |
| F000:1B7D jl short end | |
| F000:1B7F mov dl, 2 | |
| F000:1B81 add dh, 12 | |
| F000:1B84 cmp dh, 20 | |
| F000:1B87 jl short end | |
| F000:1B89 mov dx, 1525h ; row=21, col=37 | |
| F000:1B8C mov bp, offset unk_F1BA0 | |
| F000:1B8F int 82h ; reserved for BASIC | |
| F000:1B91 dec bh | |
| F000:1B93 mov al, bh | |
| F000:1B95 mov ah, 5 | |
| F000:1B97 int 10h ; - VIDEO - SELECT DISPLAY PAGE | |
| F000:1B97 ; AL = display page, 0-7 for modes 0 & 1, 0-3 for modes 2 & 3 | |
| F000:1B99 mov dx, 102h | |
| F000:1B9C end: ; CODE XREF: locate_1_int_81+1Aj | |
| F000:1B9C ; locate_1_int_81+24j | |
| F000:1B9C pop ax | |
| F000:1B9D pop bp | |
| F000:1B9E pop bx | |
| F000:1B9F iret | |
| F000:1B9F locate_1_int_81 endp | |
| F000:1BA0 unk_F1BA0 db 2 ; DATA XREF: locate_1_int_81+29o | |
| F000:1BA1 db 2Ah ; * | |
| F000:1BA2 db 0FFh | |
| F000:1BA3 db 0 | |
| F000:1BA4 db 0FCh ; ü | |
| F000:1BA5 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:1BA5 ; int 0x89 | |
| F000:1BA5 ; test joystick | |
| F000:1BA5 ; input: | |
| F000:1BA5 ; ah = '6', '7' (official test) | |
| F000:1BA5 ; = 'E' or 0xff (mfg test) | |
| F000:1BA5 ; = 0 (err msg) | |
| F000:1BA5 ; = 1 (another err msg) | |
| F000:1BA5 ; output: | |
| F000:1BA5 ; dl/dh = error msg | |
| F000:1BA5 int_89_diag_joystick proc far ; DATA XREF: F000:024Ao | |
| F000:1BA5 ; FUNCTION CHUNK AT F000:1E32 SIZE 0000012A BYTES | |
| F000:1BA5 xor bx, bx | |
| F000:1BA7 or ah, ah | |
| F000:1BA9 jz short error_and_exit0 | |
| F000:1BAB cmp ah, 1 | |
| F000:1BAE jz short error_and_exit1 | |
| F000:1BB0 cmp ah, 36h ; '6' | |
| F000:1BB3 jz short run_test_67 | |
| F000:1BB5 cmp ah, 45h ; 'E' | |
| F000:1BB8 jz short run_test_e | |
| F000:1BBA cmp ah, 0FFh | |
| F000:1BBD jz short run_test_e | |
| F000:1BBF mov bl, 5Ah ; 'Z' | |
| F000:1BC1 cmp ah, 37h ; '7' | |
| F000:1BC4 jz short run_test_67 | |
| F000:1BC6 jmp locret | |
| F000:1BC9 word_F1BC9 dw 36Bh, 2 ; DATA XREF: int_89_diag_joystick+99o | |
| F000:1BCD word_F1BCD dw 28h, 12h, 46h, 25h, 6Dh, 3Ch, 8Dh, 4Fh | |
| F000:1BCD ; DATA XREF: int_89_diag_joystick+4Bo | |
| F000:1BDD error_and_exit0: ; CODE XREF: int_89_diag_joystick+4j | |
| F000:1BDD call diag_joy_err_msg | |
| F000:1BE0 iret | |
| F000:1BE1 error_and_exit1: ; CODE XREF: int_89_diag_joystick+9j | |
| F000:1BE1 call diag_joy_err_msg | |
| F000:1BE4 mov bp, offset byte_F1DFA | |
| F000:1BE7 int 82h ; reserved for BASIC | |
| F000:1BE9 iret | |
| F000:1BEA run_test_e: ; CODE XREF: int_89_diag_joystick+13j | |
| F000:1BEA ; int_89_diag_joystick+18j | |
| F000:1BEA push cs | |
| F000:1BEB pop ds ; ds = cs | |
| F000:1BEC xor bx, bx | |
| F000:1BEE mov ah, 1 ; wait for joy 1, horizontal movement | |
| F000:1BF0 mov si, offset word_F1BCD | |
| F000:1BF3 l3: ; CODE XREF: int_89_diag_joystick+5Cj | |
| F000:1BF3 call diag_joy_wait_until_read | |
| F000:1BF6 call sub_F1D59 | |
| F000:1BF9 add si, 4 | |
| F000:1BFC rol ah, 1 ; and then test joy1 Y, joy2 X and finally joy2 Y | |
| F000:1BFE test ah, 10h ; tested all 4 LSB bits? | |
| F000:1C01 jz short l3 ; no, keep testing then | |
| F000:1C03 mov dh, bh | |
| F000:1C05 or dh, bl | |
| F000:1C07 jmp l20 | |
| F000:1C0A run_test_67: ; CODE XREF: int_89_diag_joystick+Ej | |
| F000:1C0A ; int_89_diag_joystick+1Fj | |
| F000:1C0A mov ax, 1 | |
| F000:1C0D int 10h ; - VIDEO - SET VIDEO MODE | |
| F000:1C0D ; AL = mode | |
| F000:1C0F push cs | |
| F000:1C10 pop ds | |
| F000:1C11 mov ah, 1 | |
| F000:1C13 mov ch, 20h ; ' ' | |
| F000:1C15 int 10h ; - VIDEO - SET CURSOR CHARACTERISTICS | |
| F000:1C15 ; CH bits 0-4 = start line for cursor in character cell | |
| F000:1C15 ; bits 5-6 = blink attribute | |
| F000:1C15 ; CL bits 0-4 = end line for cursor in character cell | |
| F000:1C17 mov dx, 400h | |
| F000:1C1A mov bp, offset byte_F1D85 | |
| F000:1C1D int 82h ; reserved for BASIC | |
| F000:1C1F mov cx, 0Dh | |
| F000:1C22 mov dx, 800h | |
| F000:1C25 mov bp, offset byte_F1DBD | |
| F000:1C28 l5: ; CODE XREF: int_89_diag_joystick+85j | |
| F000:1C28 int 82h ; reserved for BASIC | |
| F000:1C2A loop l5 | |
| F000:1C2C cmp bl, 5Ah ; 'Z' | |
| F000:1C2F jnz short l6 | |
| F000:1C31 jmp simulate_joy_test | |
| F000:1C34 l6: ; CODE XREF: int_89_diag_joystick+8Aj | |
| F000:1C34 ; int_89_diag_joystick+139j | |
| F000:1C34 mov bp, offset byte_F1DCA | |
| F000:1C37 mov ah, 1 ; wait for joy 1, horizontal movement | |
| F000:1C39 l7: ; CODE XREF: int_89_diag_joystick+A7j | |
| F000:1C39 ; int_89_diag_joystick+C9j | |
| F000:1C39 mov dl, al | |
| F000:1C3B call diag_joy_wait_until_read | |
| F000:1C3E mov si, offset word_F1BC9 | |
| F000:1C41 call sub_F1D59 | |
| F000:1C44 call sub_F1D22 | |
| F000:1C47 rol ah, 1 | |
| F000:1C49 test ah, 1010b | |
| F000:1C4C jnz short l7 | |
| F000:1C4E mov dh, al | |
| F000:1C50 add dx, 8817h | |
| F000:1C54 test ah, 10h | |
| F000:1C57 pushf | |
| F000:1C58 jz short l8 | |
| F000:1C5A sub dl, 13h | |
| F000:1C5D l8: ; CODE XREF: int_89_diag_joystick+B3j | |
| F000:1C5D push bx | |
| F000:1C5E cmp bh, 11h | |
| F000:1C61 mov bl, 0Fh | |
| F000:1C63 jnz short l9 | |
| F000:1C65 mov bl, 0 | |
| F000:1C67 l9: ; CODE XREF: int_89_diag_joystick+BEj | |
| F000:1C67 call sub_F1D38 | |
| F000:1C6A int 82h ; reserved for BASIC | |
| F000:1C6C pop bx | |
| F000:1C6D popf | |
| F000:1C6E jz short l7 | |
| F000:1C70 push bx | |
| F000:1C71 mov dx, 201h | |
| F000:1C74 in al, dx | |
| F000:1C75 mov dx, 821Fh ; row=8, col=33 | |
| F000:1C78 mov bp, offset unk_F1DCD | |
| F000:1C7B l10: ; CODE XREF: int_89_diag_joystick+EAj | |
| F000:1C7B ; int_89_diag_joystick+EDj | |
| F000:1C7B mov bl, 9 | |
| F000:1C7D test al, ah | |
| F000:1C7F jnz short l11 | |
| F000:1C81 mov bl, 0 ; attrib = 0. black over black? | |
| F000:1C83 l11: ; CODE XREF: int_89_diag_joystick+DAj | |
| F000:1C83 int 82h ; reserved for BASIC | |
| F000:1C85 or dh, 80h | |
| F000:1C88 rol ah, 1 | |
| F000:1C8A jb short l12 | |
| F000:1C8C test ah, 40h | |
| F000:1C8F jz short l10 | |
| F000:1C91 dec dx | |
| F000:1C92 jmp short l10 | |
| F000:1C94 l12: ; CODE XREF: int_89_diag_joystick+E5j | |
| F000:1C94 pop bx | |
| F000:1C95 mov dx, 2A2Ah | |
| F000:1C98 or bx, bx | |
| F000:1C9A jz short l19 | |
| F000:1C9C test bx, 8888h | |
| F000:1CA0 jz short l13 | |
| F000:1CA2 mov dx, 4320h | |
| F000:1CA5 jmp short l20 | |
| F000:1CA7 l13: ; CODE XREF: int_89_diag_joystick+FBj | |
| F000:1CA7 cmp bx, 1111h | |
| F000:1CAB jnz short l14 | |
| F000:1CAD mov dx, 4141h | |
| F000:1CB0 jmp short l20 | |
| F000:1CB2 l14: ; CODE XREF: int_89_diag_joystick+106j | |
| F000:1CB2 cmp bl, 11h | |
| F000:1CB5 jnz short l15 | |
| F000:1CB7 mov dl, 41h ; 'A' | |
| F000:1CB9 and bl, 0CCh | |
| F000:1CBC l15: ; CODE XREF: int_89_diag_joystick+110j | |
| F000:1CBC cmp bh, 11h | |
| F000:1CBF jnz short l16 | |
| F000:1CC1 mov dh, 41h ; 'A' | |
| F000:1CC3 and bh, 0CCh | |
| F000:1CC6 l16: ; CODE XREF: int_89_diag_joystick+11Aj | |
| F000:1CC6 or bl, bl | |
| F000:1CC8 jz short l17 | |
| F000:1CCA mov dl, 42h ; 'B' | |
| F000:1CCC l17: ; CODE XREF: int_89_diag_joystick+123j | |
| F000:1CCC or bh, bh | |
| F000:1CCE jz short l18 | |
| F000:1CD0 mov dh, 42h ; 'B' | |
| F000:1CD2 jmp short l20 | |
| F000:1CD4 l18: ; CODE XREF: int_89_diag_joystick+129j | |
| F000:1CD4 cmp dl, 42h ; 'B' | |
| F000:1CD7 jz short l20 | |
| F000:1CD9 l19: ; CODE XREF: int_89_diag_joystick+F5j | |
| F000:1CD9 call diag_bios_break | |
| F000:1CDC jnz short l20 | |
| F000:1CDE jmp l6 | |
| F000:1CE1 l20: ; CODE XREF: int_89_diag_joystick+62j | |
| F000:1CE1 ; int_89_diag_joystick+100j | |
| F000:1CE1 ; int_89_diag_joystick+10Bj | |
| F000:1CE1 ; int_89_diag_joystick+12Dj | |
| F000:1CE1 ; int_89_diag_joystick+132j | |
| F000:1CE1 ; int_89_diag_joystick+137j ... | |
| F000:1CE1 stc | |
| F000:1CE2 retf 2 | |
| F000:1CE5 locret: ; CODE XREF: int_89_diag_joystick+21j | |
| F000:1CE5 iret | |
| F000:1CE5 int_89_diag_joystick endp | |
| F000:1CE6 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:1CE6 diag_joy_err_msg proc near ; CODE XREF: int_89_diag_joystick:error_and_exit0p | |
| F000:1CE6 ; int_89_diag_joystick:error_and_exit1p | |
| F000:1CE6 mov bp, offset byte_F1DD6 | |
| F000:1CE9 mov al, 3 | |
| F000:1CEB int 81h ; reserved for BASIC | |
| F000:1CED int 82h ; reserved for BASIC | |
| F000:1CEF retn | |
| F000:1CEF diag_joy_err_msg endp | |
| F000:1CF0 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:1CF0 diag_bios_break proc near ; CODE XREF: int_89_diag_joystick:l19p | |
| F000:1CF0 ; int_89_diag_joystick+39Cp | |
| F000:1CF0 push ax | |
| F000:1CF1 push ds | |
| F000:1CF2 call dss | |
| F000:1CF5 mov al, byte ptr ds:loc_F0070+1 | |
| F000:1CF8 pop ds | |
| F000:1CF9 test al, 80h | |
| F000:1CFB pop ax | |
| F000:1CFC retn | |
| F000:1CFC diag_bios_break endp | |
| F000:1CFD ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:1CFD ; input | |
| F000:1CFD ; ah = ? | |
| F000:1CFD diag_joy_wait_until_read proc near ; CODE XREF: int_89_diag_joystick:l3p | |
| F000:1CFD ; int_89_diag_joystick+96p | |
| F000:1CFD push dx | |
| F000:1CFE mov dx, 201h | |
| F000:1D01 mov cx, 875 | |
| F000:1D04 l0: ; CODE XREF: diag_joy_wait_until_read+Aj | |
| F000:1D04 in al, dx ; Game I/O port | |
| F000:1D04 ; bits 0-3: Coordinates (resistive, time-dependent inputs) | |
| F000:1D04 ; bits 4-7: Buttons/Triggers (digital inputs) | |
| F000:1D05 test al, ah | |
| F000:1D07 loopne l0 | |
| F000:1D09 mov cx, 875 | |
| F000:1D0C cli | |
| F000:1D0D out dx, al ; Game I/O port | |
| F000:1D0D ; bits 0-3: Coordinates (resistive, time-dependent inputs) | |
| F000:1D0D ; bits 4-7: Buttons/Triggers (digital inputs) | |
| F000:1D0E l1: ; CODE XREF: diag_joy_wait_until_read+14j | |
| F000:1D0E in al, dx ; Game I/O port | |
| F000:1D0E ; bits 0-3: Coordinates (resistive, time-dependent inputs) | |
| F000:1D0E ; bits 4-7: Buttons/Triggers (digital inputs) | |
| F000:1D0F test al, ah | |
| F000:1D11 loopne l1 | |
| F000:1D13 sti | |
| F000:1D14 jcxz short l2 | |
| F000:1D16 neg cx | |
| F000:1D18 add cx, 875 | |
| F000:1D1C jmp short l3 | |
| F000:1D1E l2: ; CODE XREF: diag_joy_wait_until_read+17j | |
| F000:1D1E mov al, 0FFh | |
| F000:1D20 l3: ; CODE XREF: diag_joy_wait_until_read+1Fj | |
| F000:1D20 pop dx | |
| F000:1D21 retn | |
| F000:1D21 diag_joy_wait_until_read endp | |
| F000:1D22 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:1D22 ; input: | |
| F000:1D22 ; cx = ? | |
| F000:1D22 sub_F1D22 proc near ; CODE XREF: int_89_diag_joystick+9Fp | |
| F000:1D22 push bx | |
| F000:1D23 mov bx, 0Ah | |
| F000:1D26 mov al, 0 | |
| F000:1D28 l0: ; CODE XREF: sub_F1D22+12j | |
| F000:1D28 cmp cx, bx | |
| F000:1D2A jl short l1 | |
| F000:1D2C cmp al, 12 | |
| F000:1D2E jz short l1 | |
| F000:1D30 add bx, 8 | |
| F000:1D33 inc ax | |
| F000:1D34 jmp short l0 | |
| F000:1D36 l1: ; CODE XREF: sub_F1D22+8j | |
| F000:1D36 ; sub_F1D22+Cj | |
| F000:1D36 pop bx | |
| F000:1D37 retn | |
| F000:1D37 sub_F1D22 endp | |
| F000:1D38 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:1D38 sub_F1D38 proc near ; CODE XREF: int_89_diag_joystick:l9p | |
| F000:1D38 ; int_89_diag_joystick+306p | |
| F000:1D38 ; int_89_diag_joystick+385p | |
| F000:1D38 push bp | |
| F000:1D39 push dx | |
| F000:1D3A push cx | |
| F000:1D3B push bx | |
| F000:1D3C push ax | |
| F000:1D3D mov ax, 600h | |
| F000:1D40 mov bh, 7 | |
| F000:1D42 mov cx, 804h | |
| F000:1D45 cmp dl, 14h | |
| F000:1D48 mov dx, 1410h | |
| F000:1D4B jl short l0 | |
| F000:1D4D mov cl, 17h | |
| F000:1D4F mov dl, 23h ; '#' | |
| F000:1D51 l0: ; CODE XREF: sub_F1D38+13j | |
| F000:1D51 int 10h ; - VIDEO - SCROLL PAGE UP | |
| F000:1D51 ; AL = number of lines to scroll window (0 = blank whole window) | |
| F000:1D51 ; BH = attributes to be used on blanked lines | |
| F000:1D51 ; CH,CL = row,column of upper left corner of window to scroll | |
| F000:1D51 ; DH,DL = row,column of lower right corner of window | |
| F000:1D53 pop ax | |
| F000:1D54 pop bx | |
| F000:1D55 pop cx | |
| F000:1D56 pop dx | |
| F000:1D57 pop bp | |
| F000:1D58 retn | |
| F000:1D58 sub_F1D38 endp | |
| F000:1D59 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:1D59 ; intput: | |
| F000:1D59 ; al = ? | |
| F000:1D59 ; cx = ? | |
| F000:1D59 ; si = pointer to something | |
| F000:1D59 ; output: | |
| F000:1D59 ; bl = ?? | |
| F000:1D59 sub_F1D59 proc near ; CODE XREF: int_89_diag_joystick+51p | |
| F000:1D59 ; int_89_diag_joystick+9Cp | |
| F000:1D59 push cx | |
| F000:1D5A cmp al, 0FFh | |
| F000:1D5C jnz short l0 | |
| F000:1D5E or bl, 1 | |
| F000:1D61 jmp short l3 | |
| F000:1D63 l0: ; CODE XREF: sub_F1D59+3j | |
| F000:1D63 cmp cx, 36Bh | |
| F000:1D67 jle short l1 | |
| F000:1D69 or bl, 4 | |
| F000:1D6C jmp short l3 | |
| F000:1D6E l1: ; CODE XREF: sub_F1D59+Ej | |
| F000:1D6E cmp cx, [si] | |
| F000:1D70 jle short l2 | |
| F000:1D72 or bl, 2 | |
| F000:1D75 jmp short l3 | |
| F000:1D77 l2: ; CODE XREF: sub_F1D59+17j | |
| F000:1D77 cmp cx, [si+2] | |
| F000:1D7A jge short l3 | |
| F000:1D7C or bl, 8 | |
| F000:1D7F l3: ; CODE XREF: sub_F1D59+8j | |
| F000:1D7F ; sub_F1D59+13j | |
| F000:1D7F ; sub_F1D59+1Cj | |
| F000:1D7F ; sub_F1D59+21j | |
| F000:1D7F mov cl, 4 | |
| F000:1D81 ror bx, cl | |
| F000:1D83 pop cx | |
| F000:1D84 retn | |
| F000:1D84 sub_F1D59 endp | |
| F000:1D85 byte_F1D85 db 5 ; DATA XREF: int_89_diag_joystick+75o | |
| F000:1D86 db 7 | |
| F000:1D87 db 20h | |
| F000:1D88 db 9 | |
| F000:1D89 db 0DBh ; Û | |
| F000:1D8A db 0A4h ; ¤ | |
| F000:1D8B db 0A7h ; § | |
| F000:1D8C db 0A4h ; ¤ | |
| F000:1D8D db 0A7h ; § | |
| F000:1D8E db 0A5h ; ¥ | |
| F000:1D8F db 0A7h ; § | |
| F000:1D90 db 0A4h ; ¤ | |
| F000:1D91 db 0A7h ; § | |
| F000:1D92 db 0FBh ; û | |
| F000:1D93 db 0FBh ; û | |
| F000:1D94 db 0FBh ; û | |
| F000:1D95 db 0FAh ; ú | |
| F000:1D96 db 7 | |
| F000:1D97 db 20h | |
| F000:1D98 db 0C9h ; É | |
| F000:1D99 db 0C8h ; È | |
| F000:1D9A db 0CDh ; Í | |
| F000:1D9B db 0BBh ; » | |
| F000:1D9C db 0BCh ; ¼ | |
| F000:1D9D db 3 | |
| F000:1D9E db 1 | |
| F000:1D9F db 0 | |
| F000:1DA0 db 0Dh | |
| F000:1DA1 db 1 | |
| F000:1DA2 db 0 | |
| F000:1DA3 db 4 | |
| F000:1DA4 db 1 | |
| F000:1DA5 db 0 | |
| F000:1DA6 db 0Dh | |
| F000:1DA7 db 1 | |
| F000:1DA8 db 0 | |
| F000:1DA9 db 3 | |
| F000:1DAA db 0FDh ; ý | |
| F000:1DAB db 35h ; 5 | |
| F000:1DAC db 0FBh ; û | |
| F000:1DAD db 3 | |
| F000:1DAE db 0 | |
| F000:1DAF db 1 | |
| F000:1DB0 db 0Dh | |
| F000:1DB1 db 0 | |
| F000:1DB2 db 1 | |
| F000:1DB3 db 4 | |
| F000:1DB4 db 0 | |
| F000:1DB5 db 1 | |
| F000:1DB6 db 0Dh | |
| F000:1DB7 db 0 | |
| F000:1DB8 db 1 | |
| F000:1DB9 db 3 | |
| F000:1DBA db 0FBh ; û | |
| F000:1DBB db 85h ; | |
| F000:1DBC db 0FCh ; ü | |
| F000:1DBD byte_F1DBD db 3 ; DATA XREF: int_89_diag_joystick+80o | |
| F000:1DBE db 20h | |
| F000:1DBF db 0BAh ; º | |
| F000:1DC0 db 3 | |
| F000:1DC1 db 1 | |
| F000:1DC2 db 0Dh | |
| F000:1DC3 db 1 | |
| F000:1DC4 db 4 | |
| F000:1DC5 db 1 | |
| F000:1DC6 db 0Dh | |
| F000:1DC7 db 1 | |
| F000:1DC8 db 0FBh ; û | |
| F000:1DC9 db 0FCh ; ü | |
| F000:1DCA byte_F1DCA db 2 ; DATA XREF: int_89_diag_joystick:l6o | |
| F000:1DCB db 0Fh | |
| F000:1DCC db 0FFh | |
| F000:1DCD unk_F1DCD db 2 ; DATA XREF: int_89_diag_joystick+D3o | |
| F000:1DCE db 0DBh ; Û ; full block | |
| F000:1DCF db 6, 73h, 6, 6Ah, 0FDh, 26h, 0FCh | |
| F000:1DD6 byte_F1DD6 db 21 ; DATA XREF: diag_joy_err_msgo | |
| F000:1DD7 db 3 dup(0Ah), 0Bh, 2, 0FEh, 0Bh, 0FEh, 0DAh, 0C1h, 0BFh | |
| F000:1DD7 db 0Bh, 0FDh, 0C0h, 0C4h, 0D9h, 0Ah, 0Bh, 0FDh, 0Ch | |
| F000:1DEB db 0FFh | |
| F000:1DEC db 7 | |
| F000:1DED db 7 | |
| F000:1DEE db 20h | |
| F000:1DEF db 87h ; | |
| F000:1DF0 db 36h ; 6 | |
| F000:1DF1 db 7 | |
| F000:1DF2 db 20h | |
| F000:1DF3 db 0A2h ; ¢ | |
| F000:1DF4 db 0A2h ; ¢ | |
| F000:1DF5 db 0A2h ; ¢ | |
| F000:1DF6 db 0FDh ; ý | |
| F000:1DF7 db 1Fh | |
| F000:1DF8 db 7Bh ; { | |
| F000:1DF9 db 0FCh ; ü | |
| F000:1DFA byte_F1DFA db 5 ; DATA XREF: int_89_diag_joystick+3Fo | |
| F000:1DFB db 87h ; | |
| F000:1DFC db 20h | |
| F000:1DFD db 45h ; E | |
| F000:1DFE db 20h | |
| F000:1DFF db 0FDh ; ý | |
| F000:1E00 db 2Fh ; / | |
| F000:1E01 db 74h ; t | |
| F000:1E02 db 0A2h ; ¢ | |
| F000:1E03 db 1 | |
| F000:1E04 db 1 | |
| F000:1E05 db 0FDh ; ý | |
| F000:1E06 db 1Fh | |
| F000:1E07 db 7Bh ; { | |
| F000:1E08 db 0FCh ; ü | |
| F000:1E09 byte_F1E09 db 48h ; DATA XREF: int_89_diag_joystick+2BCo | |
| F000:1E09 ; int_89_diag_joystick+2C5o | |
| F000:1E09 ; up arrow | |
| F000:1E0A db 4Bh ; K ; left arrow | |
| F000:1E0B db 47h ; G ; home? (left?) | |
| F000:1E0C db 4Dh ; M ; right arrow | |
| F000:1E0D db 49h ; I ; page up? | |
| F000:1E0E db 50h ; P ; down arrow | |
| F000:1E0F db 4Fh ; O ; end? | |
| F000:1E10 db 51h ; Q ; page down? | |
| F000:1E11 db 1Ch ; enter | |
| F000:1E12 db 39h ; 9 ; space | |
| F000:1E13 db 11h ; w | |
| F000:1E14 db 1Eh ; a | |
| F000:1E15 db 10h ; q | |
| F000:1E16 db 1Fh ; s | |
| F000:1E17 db 12h ; e | |
| F000:1E18 db 2Ch ; , ; z | |
| F000:1E19 db 2Bh ; + ; \ | |
| F000:1E1A db 2Dh ; - ; x | |
| F000:1E1B db 1 | |
| F000:1E1C db 0Fh | |
| F000:1E1D unk_F1E1D db 1 ; DATA XREF: int_89_diag_joystick+2C9o | |
| F000:1E1E db 2 | |
| F000:1E1F db 3 | |
| F000:1E20 db 4 | |
| F000:1E21 db 5 | |
| F000:1E22 db 8 | |
| F000:1E23 db 0Ah | |
| F000:1E24 db 0Ch | |
| F000:1E25 db 10h | |
| F000:1E26 db 20h | |
| F000:1E27 db 41h ; A | |
| F000:1E28 db 42h ; B | |
| F000:1E29 db 43h ; C | |
| F000:1E2A db 44h ; D | |
| F000:1E2B db 45h ; E | |
| F000:1E2C db 48h ; H | |
| F000:1E2D db 4Ah ; J | |
| F000:1E2E db 4Ch ; L | |
| F000:1E2F db 50h ; P | |
| F000:1E30 db 60h ; ` | |
| F000:1E31 db 0 | |
| F000:1E32 ; START OF FUNCTION CHUNK FOR int_89_diag_joystick | |
| F000:1E32 simulate_joy_test: ; CODE XREF: int_89_diag_joystick+8Cj | |
| F000:1E32 call dss ; ds = 0x40 | |
| F000:1E35 push ds | |
| F000:1E36 mov byte ptr ds:seg40.kdb_error, 0 | |
| F000:1E3B mov ax, 50h ; 'P' | |
| F000:1E3E mov ds, ax | |
| F000:1E40 push ds | |
| F000:1E41 pop es | |
| F000:1E42 mov cx, 6 | |
| F000:1E45 mov al, 1 | |
| F000:1E47 mov di, 29h ; ')' | |
| F000:1E4A rep stosw | |
| F000:1E4C jmp short l23 | |
| F000:1E4E l22: ; CODE XREF: int_89_diag_joystick+3A1j | |
| F000:1E4E mov ah, 1 | |
| F000:1E50 int 16h ; KEYBOARD - CHECK BUFFER, DO NOT CLEAR | |
| F000:1E50 ; Return: ZF clear if character in buffer | |
| F000:1E50 ; AH = scan code, AL = character | |
| F000:1E50 ; ZF set if no character in buffer | |
| F000:1E52 jnz short l24 | |
| F000:1E54 l23: ; CODE XREF: int_89_diag_joystick+2A7j | |
| F000:1E54 jmp l36 | |
| F000:1E57 l24: ; CODE XREF: int_89_diag_joystick+2ADj | |
| F000:1E57 mov ah, 0 | |
| F000:1E59 int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY | |
| F000:1E59 ; Return: AH = scan code, AL = character | |
| F000:1E5B mov al, ah ; move scan code to al | |
| F000:1E5D mov cx, 15h | |
| F000:1E60 cld | |
| F000:1E61 mov di, offset byte_F1E09 | |
| F000:1E64 push cs | |
| F000:1E65 pop es | |
| F000:1E66 repne scasb | |
| F000:1E68 mov ax, di | |
| F000:1E6A sub ax, offset byte_F1E09 | |
| F000:1E6D dec ax | |
| F000:1E6E mov bx, offset unk_F1E1D | |
| F000:1E71 xlat byte ptr cs:[bx] | |
| F000:1E73 mov bx, 29h ; ')' | |
| F000:1E76 test al, 40h | |
| F000:1E78 pushf | |
| F000:1E79 jz short l25 | |
| F000:1E7B add bx, 6 | |
| F000:1E7E l25: ; CODE XREF: int_89_diag_joystick+2D4j | |
| F000:1E7E mov dx, 8C1Bh | |
| F000:1E81 test al, 1 | |
| F000:1E83 jz short l26 | |
| F000:1E85 mov dh, 88h ; '' | |
| F000:1E87 l26: ; CODE XREF: int_89_diag_joystick+2DEj | |
| F000:1E87 test al, 8 | |
| F000:1E89 jz short l27 | |
| F000:1E8B mov dh, 90h ; '' | |
| F000:1E8D l27: ; CODE XREF: int_89_diag_joystick+2E4j | |
| F000:1E8D test al, 4 | |
| F000:1E8F jz short l28 | |
| F000:1E91 mov dl, 1Fh | |
| F000:1E93 l28: ; CODE XREF: int_89_diag_joystick+2EAj | |
| F000:1E93 test al, 2 | |
| F000:1E95 jz short l29 | |
| F000:1E97 mov dl, 17h | |
| F000:1E99 l29: ; CODE XREF: int_89_diag_joystick+2F0j | |
| F000:1E99 cmp dx, 8C1Bh | |
| F000:1E9D jz short l32 | |
| F000:1E9F popf | |
| F000:1EA0 pushf | |
| F000:1EA1 jz short l30 | |
| F000:1EA3 sub dl, 13h | |
| F000:1EA6 l30: ; CODE XREF: int_89_diag_joystick+2FCj | |
| F000:1EA6 cmp [bx+0Ch], dx | |
| F000:1EA9 jz short l31 | |
| F000:1EAB call sub_F1D38 | |
| F000:1EAE mov bp, 1F5Ch | |
| F000:1EB1 push dx | |
| F000:1EB2 push bx | |
| F000:1EB3 mov bl, 0Eh | |
| F000:1EB5 int 82h ; reserved for BASIC | |
| F000:1EB7 pop bx | |
| F000:1EB8 pop dx | |
| F000:1EB9 mov [bx+0Ch], dx | |
| F000:1EBC l31: ; CODE XREF: int_89_diag_joystick+304j | |
| F000:1EBC mov word ptr [bx], 5FFh | |
| F000:1EC0 l32: ; CODE XREF: int_89_diag_joystick+2F8j | |
| F000:1EC0 mov dx, 821Fh | |
| F000:1EC3 mov bp, 1DCDh | |
| F000:1EC6 popf | |
| F000:1EC7 jz short l33 | |
| F000:1EC9 mov dl, 0Ch | |
| F000:1ECB l33: ; CODE XREF: int_89_diag_joystick+322j | |
| F000:1ECB test al, 10h | |
| F000:1ECD jz short l34 | |
| F000:1ECF push bx | |
| F000:1ED0 mov bl, 0 | |
| F000:1ED2 int 82h ; reserved for BASIC | |
| F000:1ED4 pop bx | |
| F000:1ED5 mov word ptr [bx+2], 5FFh | |
| F000:1EDA jmp short l35 | |
| F000:1EDC l34: ; CODE XREF: int_89_diag_joystick+328j | |
| F000:1EDC sub dl, 9 | |
| F000:1EDF l35: ; CODE XREF: int_89_diag_joystick+335j | |
| F000:1EDF test al, 20h | |
| F000:1EE1 jz short l36 | |
| F000:1EE3 push bx | |
| F000:1EE4 mov bl, 0 | |
| F000:1EE6 or dh, 80h | |
| F000:1EE9 int 82h ; reserved for BASIC | |
| F000:1EEB pop bx | |
| F000:1EEC mov word ptr [bx+4], 5FFh | |
| F000:1EF1 l36: ; CODE XREF: int_89_diag_joystick:l23j | |
| F000:1EF1 ; int_89_diag_joystick+33Cj | |
| F000:1EF1 mov cx, 4 | |
| F000:1EF4 mov bx, 2Bh ; '+' | |
| F000:1EF7 mov dx, 821Fh | |
| F000:1EFA mov bp, 1DCDh | |
| F000:1EFD l37: ; CODE XREF: int_89_diag_joystick+374j | |
| F000:1EFD dec word ptr [bx] | |
| F000:1EFF jnz short l38 | |
| F000:1F01 push bx | |
| F000:1F02 mov bl, 9 | |
| F000:1F04 int 82h ; reserved for BASIC | |
| F000:1F06 pop bx | |
| F000:1F07 or dh, 80h | |
| F000:1F0A jmp short l39 | |
| F000:1F0C l38: ; CODE XREF: int_89_diag_joystick+35Aj | |
| F000:1F0C sub dl, 9 | |
| F000:1F0F l39: ; CODE XREF: int_89_diag_joystick+365j | |
| F000:1F0F cmp dl, 0Dh | |
| F000:1F12 jnz short l40 | |
| F000:1F14 dec dx | |
| F000:1F15 inc bx | |
| F000:1F16 inc bx | |
| F000:1F17 l40: ; CODE XREF: int_89_diag_joystick+36Dj | |
| F000:1F17 inc bx | |
| F000:1F18 inc bx | |
| F000:1F19 loop l37 | |
| F000:1F1B sub bx, 0Ch | |
| F000:1F1E mov cl, 2 | |
| F000:1F20 mov bp, offset unk_F1F5C | |
| F000:1F23 mov dx, 0C1Bh | |
| F000:1F26 l41: ; CODE XREF: int_89_diag_joystick+39Aj | |
| F000:1F26 dec word ptr [bx] | |
| F000:1F28 jnz short l42 | |
| F000:1F2A call sub_F1D38 | |
| F000:1F2D push bx | |
| F000:1F2E mov [bx+0Ch], dx | |
| F000:1F31 or dh, 80h | |
| F000:1F34 mov bl, 0Eh | |
| F000:1F36 int 82h ; reserved for BASIC | |
| F000:1F38 pop bx | |
| F000:1F39 l42: ; CODE XREF: int_89_diag_joystick+383j | |
| F000:1F39 mov dx, 0C08h | |
| F000:1F3C add bx, 6 | |
| F000:1F3F loop l41 | |
| F000:1F41 call diag_bios_break | |
| F000:1F44 jnz short l43 | |
| F000:1F46 jmp l22 | |
| F000:1F49 l43: ; CODE XREF: int_89_diag_joystick+39Fj | |
| F000:1F49 pop ds | |
| F000:1F4A sub dh, dh | |
| F000:1F4C mov bl, dh | |
| F000:1F4E mov bh, ds:12h | |
| F000:1F52 or bh, bh | |
| F000:1F54 jz short l44 | |
| F000:1F56 mov dx, 4220h | |
| F000:1F59 l44: ; CODE XREF: int_89_diag_joystick+3AFj | |
| F000:1F59 jmp l20 | |
| F000:1F59 ; END OF FUNCTION CHUNK FOR int_89_diag_joystick | |
| F000:1F5C unk_F1F5C db 2 ; DATA XREF: int_89_diag_joystick+37Bo | |
| F000:1F5D db 0DBh ; Û ; full block | |
| F000:1F5E db 5, 74h, 5, 74h, 5, 74h, 5, 74h, 5, 0FCh | |
| F000:1F68 db 97h dup(0), 0ABh | |
| F000:2000 mini: ; DATA XREF: new_int_9+47o | |
| F000:2000 jmp short mini_welcome_init | |
| F000:2002 nop | |
| F000:2003 diag_kbd_opt_j: ; CODE XREF: int_8b_diag_keyboard+2Dp | |
| F000:2003 ; DATA XREF: int_8b_diag_keyboard:off_F5F71o | |
| F000:2003 jmp short diag_kbd_init_j | |
| F000:2005 nop | |
| F000:2006 diag_kbd_opt_k: ; CODE XREF: int_8b_diag_keyboard:do_k_testsp | |
| F000:2006 ; DATA XREF: int_8b_diag_keyboard:off_F5F73o | |
| F000:2006 jmp short diag_kdb_init_k | |
| F000:2008 nop | |
| F000:2009 call diag_music_setup_int_1c | |
| F000:200C retf | |
| F000:200D ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:200D diag_int_iret proc far ; DATA XREF: mini_welcome_init+3Co | |
| F000:200D iret | |
| F000:200D diag_int_iret endp | |
| F000:200E ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:200E diag_kbd_init_j proc near ; CODE XREF: F000:diag_kbd_opt_jj | |
| F000:200E mov ax, 60h ; '`' | |
| F000:2011 mov es, ax ; es = 0x60 | |
| F000:2013 mov byte ptr es:seg60_diag.opt_k_enabled, 0 | |
| F000:2019 mov byte ptr es:seg60_diag.field_4E0, 0FFh | |
| F000:201F jmp diag_kbd_init | |
| F000:201F diag_kbd_init_j endp | |
| F000:2022 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:2022 diag_kdb_init_k proc near ; CODE XREF: F000:diag_kbd_opt_kj | |
| F000:2022 mov ax, 60h ; '`' | |
| F000:2025 mov es, ax ; es = 0x60 | |
| F000:2027 mov byte ptr es:seg60_diag.opt_k_enabled, 1 | |
| F000:202D mov byte ptr es:seg60_diag.field_4E0, 0FFh | |
| F000:2033 jmp diag_kbd_init | |
| F000:2033 diag_kdb_init_k endp | |
| F000:2036 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:2036 mini_welcome_init proc near ; CODE XREF: F000:minij | |
| F000:2036 ; mini_welcome_init+23Bj | |
| F000:2036 mov ax, 30h ; '0' | |
| F000:2039 mov ss, ax ; ss = 0x30 | |
| F000:203B mov sp, 100h ; stack from 30:ff to 30:00 (1023 to 768). Could overwrite some int vectors??? | |
| F000:203E mov ax, 60h ; '`' | |
| F000:2041 mov es, ax ; es = 0x60 | |
| F000:2043 mov ax, cs | |
| F000:2045 mov ds, ax ; ds = cs | |
| F000:2047 call diag_unpack_sprites | |
| F000:204A mov ax, 4 ; 320x200 4 colors | |
| F000:204D int 10h ; - VIDEO - SET VIDEO MODE | |
| F000:204D ; AL = mode | |
| F000:204F call diag_init_video | |
| F000:2052 mov ah, 0Bh | |
| F000:2054 mov bx, 1 | |
| F000:2057 int 10h ; - VIDEO - SET COLOR PALETTE | |
| F000:2057 ; BH = 00h, BL = border color | |
| F000:2057 ; BH = 01h, BL = palette (0-3) | |
| F000:2059 mov ah, 0Bh | |
| F000:205B mov bx, 100h | |
| F000:205E int 10h ; - VIDEO - SET COLOR PALETTE | |
| F000:205E ; BH = 00h, BL = border color | |
| F000:205E ; BH = 01h, BL = palette (0-3) | |
| F000:2060 mov bx, 303h | |
| F000:2063 mov ax, 583h | |
| F000:2066 int 10h ; - VIDEO - SELECT DISPLAY PAGE | |
| F000:2066 ; AL = display page, 0-7 for modes 0 & 1, 0-3 for modes 2 & 3 | |
| F000:2068 mov al, 0 | |
| F000:206A mov cx, 4E2h | |
| F000:206D mov di, 0 | |
| F000:2070 rep stosb ; clean 60:0000 -> 60:04e2 (diag tmp buffer?) | |
| F000:2072 mov bx, offset diag_int_iret | |
| F000:2075 push ds | |
| F000:2076 sub ax, ax | |
| F000:2078 mov ds, ax ; ds = 0 | |
| F000:207A mov dx, offset diag_int_1f ; charset 128-255 | |
| F000:207D mov ax, cs ; ax = segment cs | |
| F000:207F mov di, ds:7Ch ; old int 0x1f offset | |
| F000:2083 mov si, ds:7Eh ; old int 0x1f segment | |
| F000:2087 mov ds:7Ch, dx ; new int 0x1f offset | |
| F000:208B mov ds:7Eh, ax ; new int 0x1f segment | |
| F000:208E mov ds:70h, bx ; new int 0x1c offset | |
| F000:2092 mov ds:72h, ax ; new int 0x1c segment | |
| F000:2095 mov ds:14h, bx ; new int 0x05 offset | |
| F000:2099 mov ds:16h, ax ; new int 0x05 segment | |
| F000:209C mov ds:6Ch, bx ; new int 0x1b offset | |
| F000:20A0 mov ds:6Eh, ax ; new int 0x1b segment | |
| F000:20A3 pop ds | |
| F000:20A4 mov es:seg60_diag.old_int_1f_off, di ; save old 0x1f offset | |
| F000:20A9 mov es:seg60_diag.old_int_1f_seg, si ; save old 0x1f segment | |
| F000:20AE mov byte ptr es:seg60_diag.foreground_color, 2 | |
| F000:20B4 push es | |
| F000:20B5 mov ax, 4Ch ; 'L' | |
| F000:20B8 mov es, ax ; es = 0x4c | |
| F000:20BA mov byte ptr es:seg4c.flag1, 0 | |
| F000:20C0 pop es | |
| F000:20C1 mov cl, 2 ; two items | |
| F000:20C3 mov bp, offset row_cols_times_array_a | |
| F000:20C6 ;-----write top and bottom boders using char 0x80 | |
| F000:20C6 l0: ; CODE XREF: mini_welcome_init+B0j | |
| F000:20C6 mov dx, ds:[bp+0] ; dh = rows, dl = cols | |
| F000:20CA mov ah, 2 | |
| F000:20CC mov bh, 0 | |
| F000:20CE int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:20CE ; DH,DL = row, column (0,0 = upper left) | |
| F000:20CE ; BH = page number | |
| F000:20D0 push cx | |
| F000:20D1 mov cx, ds:[bp+2] ; times to write | |
| F000:20D5 l1: ; CODE XREF: mini_welcome_init+AAj | |
| F000:20D5 mov al, 80h ; '' ; char to write. horizontal dash for top and bottom borders | |
| F000:20D7 call diag_write_char_in_both_buffers | |
| F000:20DA inc dl ; col++ | |
| F000:20DC mov ah, 2 | |
| F000:20DE int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:20DE ; DH,DL = row, column (0,0 = upper left) | |
| F000:20DE ; BH = page number | |
| F000:20E0 loop l1 | |
| F000:20E2 pop cx | |
| F000:20E3 add bp, 4 ; next item | |
| F000:20E6 loop l0 | |
| F000:20E8 ;-----write "top/left corner" char | |
| F000:20E8 mov ah, 2 | |
| F000:20EA mov dx, 80Ch ; row = 8, col = 12 | |
| F000:20ED int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:20ED ; DH,DL = row, column (0,0 = upper left) | |
| F000:20ED ; BH = page number | |
| F000:20EF mov al, 82h ; '' ; "corner" char | |
| F000:20F1 call diag_write_char_in_both_buffers | |
| F000:20F4 ;-----write left/right borders using char 0x81 | |
| F000:20F4 mov cl, 2 | |
| F000:20F6 mov bp, offset row_cols_times_array_b | |
| F000:20F9 l2: ; CODE XREF: mini_welcome_init+E1j | |
| F000:20F9 mov dx, ds:[bp+0] ; get row/col | |
| F000:20FD mov ah, 2 | |
| F000:20FF int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:20FF ; DH,DL = row, column (0,0 = upper left) | |
| F000:20FF ; BH = page number | |
| F000:2101 push cx | |
| F000:2102 mov cx, ds:[bp+2] ; times to write | |
| F000:2106 l3: ; CODE XREF: mini_welcome_init+DBj | |
| F000:2106 mov al, 81h ; '' ; char to write: vertical dash | |
| F000:2108 call diag_write_char_in_both_buffers | |
| F000:210B inc dh | |
| F000:210D mov ah, 2 | |
| F000:210F int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:210F ; DH,DL = row, column (0,0 = upper left) | |
| F000:210F ; BH = page number | |
| F000:2111 loop l3 | |
| F000:2113 pop cx | |
| F000:2114 add bp, 4 ; next item | |
| F000:2117 loop l2 | |
| F000:2119 ;-----write bottom/right corner char | |
| F000:2119 mov ah, 2 | |
| F000:211B mov dx, 101Fh ; row = 16, col = 31 | |
| F000:211E int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:211E ; DH,DL = row, column (0,0 = upper left) | |
| F000:211E ; BH = page number | |
| F000:2120 mov al, 83h ; '' ; bottom/right char | |
| F000:2122 call diag_write_char_in_both_buffers | |
| F000:2125 ;----write "key" char | |
| F000:2125 mov ah, 2 | |
| F000:2127 mov dx, 603h | |
| F000:212A int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:212A ; DH,DL = row, column (0,0 = upper left) | |
| F000:212A ; BH = page number | |
| F000:212C mov al, 84h ; '' | |
| F000:212E call diag_write_char_in_both_buffers | |
| F000:2131 ;-------? | |
| F000:2131 mov word ptr es:seg60_diag.row_col_2, 0 | |
| F000:2138 mov word ptr es:seg60_diag.row_col_1, 0 | |
| F000:213F mov bx, offset song_kdb_unk1 | |
| F000:2142 call diag_music_setup_int_1c | |
| F000:2145 ;-----animate sprite to bottom of screen | |
| F000:2145 mov dx, 22h ; '"' ; row = 0, col = 34 | |
| F000:2148 mov cx, 40 ; # of rows to move the sprite down | |
| F000:214B call diag_sprite_move_down_n_rows | |
| F000:214E ;-----? | |
| F000:214E call diag_init_seg4c_flag1 | |
| F000:2151 mov cx, 4000h | |
| F000:2154 delay: ; CODE XREF: mini_welcome_init:delayj | |
| F000:2154 loop delay ; delay | |
| F000:2156 mov al, 1001b ; timer 2 gate, speaker off, graphics mode, casette off, 8253 timer 2 | |
| F000:2158 out 61h, al | |
| F000:215A mov bx, 40h ; '@' | |
| F000:215D mov cx, 20h ; ' ' | |
| F000:2160 call diag_play_beep | |
| F000:2163 l4: ; CODE XREF: mini_welcome_init+1D8j | |
| F000:2163 ; mini_welcome_init:l8j | |
| F000:2163 mov ah, 0 | |
| F000:2165 int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY | |
| F000:2165 ; Return: AH = scan code, AL = character | |
| F000:2167 mov ch, ah ; ch = scan code | |
| F000:2169 mov byte ptr es:seg60_diag.avoid_interal_box_check, 0 ; internal bounding box check: enabled | |
| F000:216F call diag_move_sprite_with_cursor | |
| F000:2172 cmp dx, 700h | |
| F000:2176 jz short key_touched | |
| F000:2178 cmp dx, 900h | |
| F000:217C jz short key_touched | |
| F000:217E cmp dx, 601h | |
| F000:2182 jz short key_touched | |
| F000:2184 cmp dx, 0A01h | |
| F000:2188 jz short key_touched | |
| F000:218A cmp dx, 0B01h | |
| F000:218E jz short key_touched | |
| F000:2190 cmp dx, 0C01h | |
| F000:2194 jz short key_touched | |
| F000:2196 cmp dx, 602h | |
| F000:219A jz short key_touched | |
| F000:219C cmp dx, 702h | |
| F000:21A0 jz short key_touched | |
| F000:21A2 cmp dx, 802h | |
| F000:21A6 jz short key_touched | |
| F000:21A8 cmp dx, 902h | |
| F000:21AC jz short key_touched | |
| F000:21AE cmp dx, 0A02h | |
| F000:21B2 jz short key_touched | |
| F000:21B4 jmp short l7 | |
| F000:21B6 nop | |
| F000:21B7 key_touched: ; CODE XREF: mini_welcome_init+140j | |
| F000:21B7 ; mini_welcome_init+146j | |
| F000:21B7 ; mini_welcome_init+14Cj | |
| F000:21B7 ; mini_welcome_init+152j | |
| F000:21B7 ; mini_welcome_init+158j | |
| F000:21B7 ; mini_welcome_init+15Ej ... | |
| F000:21B7 mov byte ptr es:seg60_diag.key_touched, 1 | |
| F000:21BD push dx | |
| F000:21BE call diag_sprite_replace | |
| F000:21C1 ;-----replace "key" with empty char | |
| F000:21C1 mov ah, 2 | |
| F000:21C3 mov dx, 603h ; location of key. row 6, col 3 | |
| F000:21C6 mov bh, 0 | |
| F000:21C8 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:21C8 ; DH,DL = row, column (0,0 = upper left) | |
| F000:21C8 ; BH = page number | |
| F000:21CA mov al, 20h ; ' ' ; replace key with empty char | |
| F000:21CC call diag_write_char_in_both_buffers | |
| F000:21CF call diag_copy_sprite_to_tmp_buffer? | |
| F000:21D2 mov bp, seg60_diag.spr_front ; 0x60:bp -> src | |
| F000:21D5 call diag_sprite_or | |
| F000:21D8 call diag_sprite_replace | |
| F000:21DB mov ah, 2 | |
| F000:21DD mov dx, 603h ; key pos: row=6, col=3 | |
| F000:21E0 mov bh, 0 | |
| F000:21E2 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:21E2 ; DH,DL = row, column (0,0 = upper left) | |
| F000:21E2 ; BH = page number | |
| F000:21E4 mov al, 20h ; ' ' ; replace key with empty char, again? | |
| F000:21E6 call diag_write_char_in_both_buffers | |
| F000:21E9 ;-----"open door" (clear 3 spaces) | |
| F000:21E9 mov ah, 2 | |
| F000:21EB mov dx, 814h ; open door: row=8, col=20 | |
| F000:21EE mov bh, 0 | |
| F000:21F0 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:21F0 ; DH,DL = row, column (0,0 = upper left) | |
| F000:21F0 ; BH = page number | |
| F000:21F2 mov cx, 3 ; 3 spaces | |
| F000:21F5 l6: ; CODE XREF: mini_welcome_init+1CCj | |
| F000:21F5 mov al, 20h ; ' ' | |
| F000:21F7 call diag_write_char_in_both_buffers | |
| F000:21FA inc dl ; new col | |
| F000:21FC mov ah, 2 | |
| F000:21FE mov bh, 0 | |
| F000:2200 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2200 ; DH,DL = row, column (0,0 = upper left) | |
| F000:2200 ; BH = page number | |
| F000:2202 loop l6 | |
| F000:2204 ;-----? | |
| F000:2204 pop dx | |
| F000:2205 call diag_copy_sprite_to_tmp_buffer? | |
| F000:2208 mov bp, seg60_diag.spr_right_1 ; 0x60:bp -> source | |
| F000:220B call diag_sprite_or | |
| F000:220E jmp l4 | |
| F000:2211 ;-----got to center of screen? | |
| F000:2211 l7: ; CODE XREF: mini_welcome_init+17Ej | |
| F000:2211 cmp dh, 17 ; row = 17 ? | |
| F000:2214 jnz short l8 | |
| F000:2216 cmp dl, 19 ; col = 19 ? | |
| F000:2219 jz short mini_welcome_part_2 ; if so, go to "mini welcome part 2" | |
| F000:221B l8: ; CODE XREF: mini_welcome_init+1DEj | |
| F000:221B jmp l4 | |
| F000:221E ;---------------------------------------------------- | |
| F000:221E ; moves the sprite down nine times from left to right | |
| F000:221E ; changing the background color each time | |
| F000:221E ; and playing music | |
| F000:221E ;----------------------------------------------------- | |
| F000:221E mini_welcome_part_2: ; CODE XREF: mini_welcome_init+1E3j | |
| F000:221E call diag_init_video | |
| F000:2221 mov bx, offset song_kbd_f1 | |
| F000:2224 call diag_music_setup_int_1c | |
| F000:2227 mov ax, 4 ; 320x200 4 color | |
| F000:222A int 10h ; - VIDEO - SET VIDEO MODE | |
| F000:222A ; AL = mode | |
| F000:222C mov ah, 0Bh | |
| F000:222E mov bx, 100h | |
| F000:2231 int 10h ; - VIDEO - SET COLOR PALETTE | |
| F000:2231 ; BH = 00h, BL = border color | |
| F000:2231 ; BH = 01h, BL = palette (0-3) | |
| F000:2233 mov cx, 9 ; go down 9 times, also used as background color | |
| F000:2236 mov dx, 0 ; col = 0, row = 0 | |
| F000:2239 l10: ; CODE XREF: mini_welcome_init+21Bj | |
| F000:2239 push cx | |
| F000:223A push dx | |
| F000:223B mov ah, 0Bh | |
| F000:223D mov bx, cx ; background color | |
| F000:223F int 10h ; - VIDEO - SET COLOR PALETTE | |
| F000:223F ; BH = 00h, BL = border color | |
| F000:223F ; BH = 01h, BL = palette (0-3) | |
| F000:2241 pop dx | |
| F000:2242 push dx | |
| F000:2243 mov cx, 40 ; rows to move the sprite down | |
| F000:2246 call diag_sprite_move_down_n_rows | |
| F000:2249 call diag_sprite_replace | |
| F000:224C pop dx | |
| F000:224D add dx, 4 ; row += 4 (9 * 4 = 36) | |
| F000:2250 pop cx | |
| F000:2251 loop l10 | |
| F000:2253 ;-----restore charset ptr (int 0x1f) | |
| F000:2253 mov di, es:seg60_diag.old_int_1f_off ; restores 0x1f (charset 128-255) | |
| F000:2258 mov si, es:seg60_diag.old_int_1f_seg | |
| F000:225D push ds | |
| F000:225E sub ax, ax | |
| F000:2260 mov ds, ax ; ds = 0 | |
| F000:2262 mov ds:7Ch, di ; restore int 0x1f off | |
| F000:2266 mov ds:7Eh, si ; restore int 0x1f seg | |
| F000:226A pop ds ; ds = cs (restored) | |
| F000:226B ;-----call "kbd test routine" | |
| F000:226B call diag_kbd_init | |
| F000:226E call diag_init_video | |
| F000:2271 jmp mini_welcome_init | |
| F000:2271 mini_welcome_init endp | |
| F000:2274 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:2274 ; input: | |
| F000:2274 ; ah = scan code | |
| F000:2274 ; dl = col | |
| F000:2274 ; dh = row | |
| F000:2274 diag_move_sprite_with_cursor proc near ; CODE XREF: mini_welcome_init+139p | |
| F000:2274 ; diag_kdb_eval_scancode+2F4p | |
| F000:2274 ; diag_kdb_eval_scancode+30Ep | |
| F000:2274 ; diag_kdb_eval_scancode+3EDp | |
| F000:2274 ; diag_kdb_eval_scancode+43Cp | |
| F000:2274 cmp ah, key_up_arrow | |
| F000:2277 jnz short l0 | |
| F000:2279 jmp up_arrow | |
| F000:227C l0: ; CODE XREF: diag_move_sprite_with_cursor+3j | |
| F000:227C cmp ah, key_down_arrow | |
| F000:227F jnz short l1 | |
| F000:2281 jmp down_arrow | |
| F000:2284 l1: ; CODE XREF: diag_move_sprite_with_cursor+Bj | |
| F000:2284 cmp ah, key_left_arrow | |
| F000:2287 jz short left_arrow | |
| F000:2289 cmp ah, key_right_arrow | |
| F000:228C jz short right_arrow | |
| F000:228E retn | |
| F000:228F right_arrow: ; CODE XREF: diag_move_sprite_with_cursor+18j | |
| F000:228F cmp dl, 35 ; reached right border? | |
| F000:2292 jl short right_l0 ; yes, ok | |
| F000:2294 jmp exit ; already at the right border, exit | |
| F000:2297 right_l0: ; CODE XREF: diag_move_sprite_with_cursor+1Ej | |
| F000:2297 cmp byte ptr es:seg60_diag.avoid_interal_box_check, 0 | |
| F000:229D jnz short right_l1 | |
| F000:229F cmp dl, 8 ; check internal bounding box | |
| F000:22A2 jl short right_l1 | |
| F000:22A4 cmp dl, 30 | |
| F000:22A7 jge short right_l1 | |
| F000:22A9 cmp dh, 8 | |
| F000:22AC jle short right_l1 | |
| F000:22AE cmp dh, 32 | |
| F000:22B1 jge short right_l1 | |
| F000:22B3 jmp exit | |
| F000:22B6 right_l1: ; CODE XREF: diag_move_sprite_with_cursor+29j | |
| F000:22B6 ; diag_move_sprite_with_cursor+2Ej | |
| F000:22B6 ; diag_move_sprite_with_cursor+33j | |
| F000:22B6 ; diag_move_sprite_with_cursor+38j | |
| F000:22B6 ; diag_move_sprite_with_cursor+3Dj | |
| F000:22B6 call diag_sprite_replace | |
| F000:22B9 add dl, 1 ; col++ | |
| F000:22BC cmp byte ptr es:seg60_diag, 0 | |
| F000:22C2 jz short right_l2 | |
| F000:22C4 mov byte ptr es:seg60_diag, 0 | |
| F000:22CA call diag_copy_sprite_to_tmp_buffer? | |
| F000:22CD mov bp, seg60_diag.spr_right_0 ; 0x60:bp -> source offset | |
| F000:22D0 call diag_sprite_or | |
| F000:22D3 mov bx, 5 | |
| F000:22D6 mov cx, 80h ; '' | |
| F000:22D9 call diag_play_beep | |
| F000:22DC retn | |
| F000:22DD right_l2: ; CODE XREF: diag_move_sprite_with_cursor+4Ej | |
| F000:22DD call diag_copy_sprite_to_tmp_buffer? | |
| F000:22E0 mov bp, seg60_diag.spr_right_1 ; 0x60:bp:-> source offset | |
| F000:22E3 call diag_sprite_or | |
| F000:22E6 mov bx, 2 | |
| F000:22E9 mov cx, 80h ; '' | |
| F000:22EC call diag_play_beep | |
| F000:22EF mov byte ptr es:seg60_diag, 1 | |
| F000:22F5 retn | |
| F000:22F6 left_arrow: ; CODE XREF: diag_move_sprite_with_cursor+13j | |
| F000:22F6 cmp dl, 0 | |
| F000:22F9 jg short left_l0 | |
| F000:22FB jmp exit | |
| F000:22FE left_l0: ; CODE XREF: diag_move_sprite_with_cursor+85j | |
| F000:22FE cmp byte ptr es:seg60_diag.avoid_interal_box_check, 0 | |
| F000:2304 jnz short left_l1 | |
| F000:2306 cmp dl, 30 | |
| F000:2309 jg short left_l1 | |
| F000:230B cmp dl, 8 | |
| F000:230E jle short left_l1 | |
| F000:2310 cmp dh, 8 | |
| F000:2313 jle short left_l1 | |
| F000:2315 cmp dh, 32 | |
| F000:2318 jge short left_l1 | |
| F000:231A jmp exit | |
| F000:231D left_l1: ; CODE XREF: diag_move_sprite_with_cursor+90j | |
| F000:231D ; diag_move_sprite_with_cursor+95j | |
| F000:231D ; diag_move_sprite_with_cursor+9Aj | |
| F000:231D ; diag_move_sprite_with_cursor+9Fj | |
| F000:231D ; diag_move_sprite_with_cursor+A4j | |
| F000:231D call diag_sprite_replace | |
| F000:2320 sub dl, 1 ; col-- | |
| F000:2323 cmp byte ptr es:seg60_diag.field_1, 0 | |
| F000:2329 jz short left_l2 | |
| F000:232B mov byte ptr es:seg60_diag.field_1, 0 | |
| F000:2331 call diag_copy_sprite_to_tmp_buffer? | |
| F000:2334 mov bp, seg60_diag.spr_left_0 ; 0x60:bp = source | |
| F000:2337 call diag_sprite_or | |
| F000:233A mov bx, 5 | |
| F000:233D mov cx, 80h ; '' | |
| F000:2340 call diag_play_beep | |
| F000:2343 retn | |
| F000:2344 left_l2: ; CODE XREF: diag_move_sprite_with_cursor+B5j | |
| F000:2344 call diag_copy_sprite_to_tmp_buffer? | |
| F000:2347 mov bp, seg60_diag.spr_left_1 ; 0x60:bp = source | |
| F000:234A call diag_sprite_or | |
| F000:234D mov bx, 2 | |
| F000:2350 mov cx, 80h ; '' | |
| F000:2353 call diag_play_beep | |
| F000:2356 mov byte ptr es:seg60_diag.field_1, 1 | |
| F000:235C retn | |
| F000:235D up_arrow: ; CODE XREF: diag_move_sprite_with_cursor+5j | |
| F000:235D cmp dh, 0 ; top border? | |
| F000:2360 jnz short up_l0 ; exit if already top border | |
| F000:2362 jmp exit | |
| F000:2365 up_l0: ; CODE XREF: diag_move_sprite_with_cursor+ECj | |
| F000:2365 cmp byte ptr es:seg60_diag.avoid_interal_box_check, 0 | |
| F000:236B jnz short up_l2 | |
| F000:236D cmp dh, 32 | |
| F000:2370 jg short up_l2 | |
| F000:2372 cmp dh, 8 | |
| F000:2375 jle short up_l2 | |
| F000:2377 cmp dl, 8 | |
| F000:237A jle short up_l2 | |
| F000:237C cmp dl, 30 | |
| F000:237F jge short up_l2 | |
| F000:2381 cmp byte ptr es:seg60_diag.key_touched, 0 | |
| F000:2387 jz short up_l1 | |
| F000:2389 cmp dl, 19 | |
| F000:238C jz short up_l2 | |
| F000:238E up_l1: ; CODE XREF: diag_move_sprite_with_cursor+113j | |
| F000:238E jmp exit | |
| F000:2391 up_l2: ; CODE XREF: diag_move_sprite_with_cursor+F7j | |
| F000:2391 ; diag_move_sprite_with_cursor+FCj | |
| F000:2391 ; diag_move_sprite_with_cursor+101j | |
| F000:2391 ; diag_move_sprite_with_cursor+106j | |
| F000:2391 ; diag_move_sprite_with_cursor+10Bj | |
| F000:2391 ; diag_move_sprite_with_cursor+118j | |
| F000:2391 call diag_sprite_replace | |
| F000:2394 dec dh ; row-- (go up one) | |
| F000:2396 cmp dx, 1113h ; row = 17, col 19? | |
| F000:239A jnz short up_l3 | |
| F000:239C mov byte ptr es:seg60_diag.field_4E1, 0B3h ; '³' | |
| F000:23A2 up_l3: ; CODE XREF: diag_move_sprite_with_cursor+126j | |
| F000:23A2 call diag_copy_sprite_to_tmp_buffer? | |
| F000:23A5 mov bp, seg60_diag.spr_front ; 0x60:bp = source | |
| F000:23A8 call diag_sprite_or | |
| F000:23AB cmp byte ptr es:seg60_diag.field_4CF, 0 | |
| F000:23B1 jz short up_exit | |
| F000:23B3 mov bx, seg60_diag.field_363 | |
| F000:23B6 mov al, es:[bx] | |
| F000:23B9 cmp al, 0 | |
| F000:23BB jnz short up_exit | |
| F000:23BD cmp dx, 1B18h ; row = 27, col = 24 ? | |
| F000:23C1 jnz short up_exit | |
| F000:23C3 push dx | |
| F000:23C4 mov ah, 3 | |
| F000:23C6 mov bh, 0 | |
| F000:23C8 int 10h ; - VIDEO - READ CURSOR POSITION | |
| F000:23C8 ; BH = page number | |
| F000:23C8 ; Return: DH,DL = row,column, CH = cursor start line, CL = cursor end line | |
| F000:23CA push dx | |
| F000:23CB mov dx, 0D13h ; row = 13, col = 19 | |
| F000:23CE mov ah, 2 | |
| F000:23D0 mov bh, 0 | |
| F000:23D2 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:23D2 ; DH,DL = row, column (0,0 = upper left) | |
| F000:23D2 ; BH = page number | |
| F000:23D4 mov al, 20h ; ' ' | |
| F000:23D6 mov byte ptr es:seg60_diag.avoid_swap_crt_cpu_page, 0 | |
| F000:23DC call diag_write_char_in_both_buffers | |
| F000:23DF mov byte ptr es:seg60_diag.avoid_swap_crt_cpu_page, 1 | |
| F000:23E5 mov byte ptr es:seg60_diag.field_4D0, 1 | |
| F000:23EB pop dx | |
| F000:23EC mov ah, 2 | |
| F000:23EE mov bh, 0 | |
| F000:23F0 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:23F0 ; DH,DL = row, column (0,0 = upper left) | |
| F000:23F0 ; BH = page number | |
| F000:23F2 pop dx | |
| F000:23F3 up_exit: ; CODE XREF: diag_move_sprite_with_cursor+13Dj | |
| F000:23F3 ; diag_move_sprite_with_cursor+147j | |
| F000:23F3 ; diag_move_sprite_with_cursor+14Dj | |
| F000:23F3 retn | |
| F000:23F4 down_arrow: ; CODE XREF: diag_move_sprite_with_cursor+Dj | |
| F000:23F4 cmp dh, 40 | |
| F000:23F7 jnz short down_l0 | |
| F000:23F9 jmp exit | |
| F000:23FC down_l0: ; CODE XREF: diag_move_sprite_with_cursor+183j | |
| F000:23FC cmp byte ptr es:seg60_diag.avoid_interal_box_check, 0 | |
| F000:2402 jnz short down_l2 | |
| F000:2404 cmp dh, 8 | |
| F000:2407 jl short down_l2 | |
| F000:2409 cmp dh, 32 | |
| F000:240C jge short down_l2 | |
| F000:240E cmp dl, 8 | |
| F000:2411 jle short down_l2 | |
| F000:2413 cmp dl, 30 | |
| F000:2416 jge short down_l2 | |
| F000:2418 cmp byte ptr es:seg60_diag.key_touched, 0 | |
| F000:241E jz short down_l1 | |
| F000:2420 cmp dl, 19 | |
| F000:2423 jz short down_l2 | |
| F000:2425 down_l1: ; CODE XREF: diag_move_sprite_with_cursor+1AAj | |
| F000:2425 jmp short exit | |
| F000:2427 nop | |
| F000:2428 down_l2: ; CODE XREF: diag_move_sprite_with_cursor+18Ej | |
| F000:2428 ; diag_move_sprite_with_cursor+193j | |
| F000:2428 ; diag_move_sprite_with_cursor+198j | |
| F000:2428 ; diag_move_sprite_with_cursor+19Dj | |
| F000:2428 ; diag_move_sprite_with_cursor+1A2j | |
| F000:2428 ; diag_move_sprite_with_cursor+1AFj | |
| F000:2428 call diag_sprite_replace | |
| F000:242B inc dh ; row++ (go down one) | |
| F000:242D call diag_copy_sprite_to_tmp_buffer? | |
| F000:2430 mov bp, seg60_diag.spr_front | |
| F000:2433 call diag_sprite_or | |
| F000:2436 cmp byte ptr es:seg60_diag.field_4CD, 0 | |
| F000:243C jz short down_exit | |
| F000:243E ;-----TODO: what does this code do? | |
| F000:243E push dx | |
| F000:243F mov ah, 3 | |
| F000:2441 mov bh, 0 | |
| F000:2443 int 10h ; - VIDEO - READ CURSOR POSITION | |
| F000:2443 ; BH = page number | |
| F000:2443 ; Return: DH,DL = row,column, CH = cursor start line, CL = cursor end line | |
| F000:2445 mov ax, dx | |
| F000:2447 pop dx | |
| F000:2448 push ax ; ax contains row/col | |
| F000:2449 cmp dx, 240Fh ; row 36 and column 15 ? | |
| F000:244D jnz short down_l3 | |
| F000:244F mov dx, 0C0Fh ; reset cursor to row = 12, column 15 | |
| F000:2452 mov ah, 2 | |
| F000:2454 mov bh, 0 | |
| F000:2456 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2456 ; DH,DL = row, column (0,0 = upper left) | |
| F000:2456 ; BH = page number | |
| F000:2458 mov al, 42h ; 'B' ; TODO: what is this??? | |
| F000:245A mov byte ptr es:seg60_diag.avoid_swap_crt_cpu_page, 0 | |
| F000:2460 call diag_write_char_in_both_buffers | |
| F000:2463 mov byte ptr es:seg60_diag.avoid_swap_crt_cpu_page, 1 | |
| F000:2469 mov byte ptr es:seg60_diag.field_4CE, 1 | |
| F000:246F down_l3: ; CODE XREF: diag_move_sprite_with_cursor+1D9j | |
| F000:246F pop ax | |
| F000:2470 push dx | |
| F000:2471 mov dx, ax | |
| F000:2473 mov ah, 2 | |
| F000:2475 mov bh, 0 | |
| F000:2477 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2477 ; DH,DL = row, column (0,0 = upper left) | |
| F000:2477 ; BH = page number | |
| F000:2479 pop dx | |
| F000:247A down_exit: ; CODE XREF: diag_move_sprite_with_cursor+1C8j | |
| F000:247A retn | |
| F000:247B exit: ; CODE XREF: diag_move_sprite_with_cursor+20j | |
| F000:247B ; diag_move_sprite_with_cursor+3Fj | |
| F000:247B ; diag_move_sprite_with_cursor+87j | |
| F000:247B ; diag_move_sprite_with_cursor+A6j | |
| F000:247B ; diag_move_sprite_with_cursor+EEj | |
| F000:247B ; diag_move_sprite_with_cursor:up_l1j ... | |
| F000:247B mov bx, 40h ; '@' | |
| F000:247E mov cx, 20h ; ' ' | |
| F000:2481 call diag_play_beep | |
| F000:2484 retn | |
| F000:2484 diag_move_sprite_with_cursor endp | |
| F000:2485 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:2485 ; input | |
| F000:2485 ; cx = times to repeat | |
| F000:2485 ; dx = initial row/col of sprite | |
| F000:2485 diag_sprite_move_down_n_rows proc near ; CODE XREF: mini_welcome_init+115p | |
| F000:2485 ; mini_welcome_init+210p | |
| F000:2485 ; diag_sprite_move_down_n_rows+10j | |
| F000:2485 ; diag_kbd_init+A9p | |
| F000:2485 ; diag_kdb_eval_scancode+11Ap | |
| F000:2485 ; diag_kdb_eval_scancode+261p ... | |
| F000:2485 push cx | |
| F000:2486 inc dh ; go down one | |
| F000:2488 call diag_copy_sprite_to_tmp_buffer? | |
| F000:248B mov bp, seg60_diag.spr_front | |
| F000:248E call diag_sprite_or | |
| F000:2491 call diag_sprite_replace | |
| F000:2494 pop cx | |
| F000:2495 loop diag_sprite_move_down_n_rows | |
| F000:2497 call diag_copy_sprite_to_tmp_buffer? | |
| F000:249A mov bp, seg60_diag.spr_front | |
| F000:249D call diag_sprite_or | |
| F000:24A0 retn | |
| F000:24A0 diag_sprite_move_down_n_rows endp | |
| F000:24A1 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:24A1 ; input: | |
| F000:24A1 ; bx = duration ? | |
| F000:24A1 ; cx = frequency ? | |
| F000:24A1 diag_play_beep proc near ; CODE XREF: mini_welcome_init+12Ap | |
| F000:24A1 ; diag_move_sprite_with_cursor+65p | |
| F000:24A1 ; diag_move_sprite_with_cursor+78p | |
| F000:24A1 ; diag_move_sprite_with_cursor+CCp | |
| F000:24A1 ; diag_move_sprite_with_cursor+DFp | |
| F000:24A1 ; diag_move_sprite_with_cursor+20Dp ... | |
| F000:24A1 in al, 61h | |
| F000:24A3 push ax | |
| F000:24A4 l0: ; CODE XREF: diag_play_beep+14j | |
| F000:24A4 and al, 0FCh | |
| F000:24A6 out 61h, al | |
| F000:24A8 push cx | |
| F000:24A9 delay0: ; CODE XREF: diag_play_beep:delay0j | |
| F000:24A9 loop delay0 ; delay | |
| F000:24AB or al, 2 | |
| F000:24AD out 61h, al | |
| F000:24AF pop cx | |
| F000:24B0 push cx | |
| F000:24B1 delay1: ; CODE XREF: diag_play_beep:delay1j | |
| F000:24B1 loop delay1 ; delay | |
| F000:24B3 dec bx | |
| F000:24B4 pop cx | |
| F000:24B5 jnz short l0 | |
| F000:24B7 pop ax | |
| F000:24B8 out 61h, al | |
| F000:24BA retn | |
| F000:24BA diag_play_beep endp | |
| F000:24BB ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:24BB ; input | |
| F000:24BB ; al = char to print | |
| F000:24BB ; dh = row for cursor | |
| F000:24BB ; dl = column for cursor | |
| F000:24BB diag_write_char_in_both_buffers proc near ; CODE XREF: mini_welcome_init+A1p | |
| F000:24BB ; mini_welcome_init+BBp | |
| F000:24BB ; mini_welcome_init+D2p | |
| F000:24BB ; mini_welcome_init+ECp | |
| F000:24BB ; mini_welcome_init+F8p | |
| F000:24BB ; mini_welcome_init+196p ... | |
| F000:24BB push bx | |
| F000:24BC push cx | |
| F000:24BD push dx | |
| F000:24BE push ax | |
| F000:24BF mov ah, 0Eh | |
| F000:24C1 mov bl, es:seg60_diag.foreground_color | |
| F000:24C6 mov bh, 0 ; page 0 | |
| F000:24C8 int 10h ; - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE) | |
| F000:24C8 ; AL = character, BH = display page (alpha modes) | |
| F000:24C8 ; BL = foreground color (graphics modes) | |
| F000:24CA mov ah, 2 ; go back to previous cursor position | |
| F000:24CC mov bh, 0 | |
| F000:24CE int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:24CE ; DH,DL = row, column (0,0 = upper left) | |
| F000:24CE ; BH = page number | |
| F000:24D0 call diag_swap_crt_cpu_page_regs | |
| F000:24D3 pop ax | |
| F000:24D4 mov ah, 0Eh ; and write char again, but in different page | |
| F000:24D6 mov bl, es:seg60_diag.foreground_color | |
| F000:24DB mov bh, 0 | |
| F000:24DD int 10h ; - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE) | |
| F000:24DD ; AL = character, BH = display page (alpha modes) | |
| F000:24DD ; BL = foreground color (graphics modes) | |
| F000:24DF cmp byte ptr es:seg60_diag.avoid_swap_crt_cpu_page, 0 | |
| F000:24E5 jnz short l0 | |
| F000:24E7 call diag_swap_crt_cpu_page_regs | |
| F000:24EA l0: ; CODE XREF: diag_write_char_in_both_buffers+2Aj | |
| F000:24EA pop dx | |
| F000:24EB pop cx | |
| F000:24EC pop bx | |
| F000:24ED retn | |
| F000:24ED diag_write_char_in_both_buffers endp | |
| F000:24EE ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:24EE diag_init_video proc near ; CODE XREF: mini_welcome_init+19p | |
| F000:24EE ; mini_welcome_init:mini_welcome_part_2p | |
| F000:24EE ; mini_welcome_init+238p | |
| F000:24EE ; diag_kbd_init+53p | |
| F000:24EE mov bl, 2 | |
| F000:24F0 mov bh, 3 | |
| F000:24F2 mov al, 83h ; '' | |
| F000:24F4 mov ah, 5 | |
| F000:24F6 int 10h ; - VIDEO - SELECT DISPLAY PAGE | |
| F000:24F6 ; AL = display page, 0-7 for modes 0 & 1, 0-3 for modes 2 & 3 | |
| F000:24F8 call clear_video_buffer_16k | |
| F000:24FB mov bl, 3 | |
| F000:24FD mov bh, 2 | |
| F000:24FF mov al, 83h ; '' | |
| F000:2501 mov ah, 5 | |
| F000:2503 int 10h ; - VIDEO - SELECT DISPLAY PAGE | |
| F000:2503 ; AL = display page, 0-7 for modes 0 & 1, 0-3 for modes 2 & 3 | |
| F000:2505 call clear_video_buffer_16k | |
| F000:2508 mov dx, 101h | |
| F000:250B call diag_copy_sprite_to_tmp_buffer? | |
| F000:250E call diag_swap_crt_cpu_page_regs | |
| F000:2511 call diag_copy_sprite_to_tmp_buffer? | |
| F000:2514 call diag_swap_crt_cpu_page_regs | |
| F000:2517 retn | |
| F000:2517 diag_init_video endp | |
| F000:2518 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:2518 clear_video_buffer_16k proc near ; CODE XREF: diag_init_video+Ap | |
| F000:2518 ; diag_init_video+17p | |
| F000:2518 push es | |
| F000:2519 mov dx, 0B800h | |
| F000:251C mov es, dx ; es = 0xb800 (video segment) | |
| F000:251E xor di, di | |
| F000:2520 mov cx, 2000h ; 8k words (16k bytes) | |
| F000:2523 xor ax, ax ; ax = 0. all black | |
| F000:2525 rep stosw ; clear video buffer (16k) | |
| F000:2527 pop es | |
| F000:2528 retn | |
| F000:2528 clear_video_buffer_16k endp | |
| F000:2529 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:2529 diag_unpack_sprites proc near ; CODE XREF: mini_welcome_init+11p | |
| F000:2529 ; diag_kbd_init+9p | |
| F000:2529 mov di, seg60_diag.spr_front ; dst -> 60:04e6 | |
| F000:252C mov cx, 1600 ; quantity of bytes. 320 each sprites. clean 5 sprites | |
| F000:252F xor ax, ax | |
| F000:2531 rep stosw ; clear 3200 bytes | |
| F000:2533 mov si, offset sprite_0 | |
| F000:2536 mov di, seg60_diag.spr_front+2 | |
| F000:2539 mov cx, 96 | |
| F000:253C l0: ; CODE XREF: diag_unpack_sprites+1Dj | |
| F000:253C push cx | |
| F000:253D mov cx, 6 | |
| F000:2540 rep movsb ; copy 576 bytes (96*6) | |
| F000:2542 pop cx | |
| F000:2543 add di, 4 ; after 6 bytes copied, skip 4 at dst | |
| F000:2546 loop l0 | |
| F000:2548 mov si, offset sprite_1 | |
| F000:254B mov di, seg60_diag.spr_left_1+7 ; dst -> 60:08ad | |
| F000:254E mov cx, 64 ; 64*6 = 384 bytes to copy/unpack | |
| F000:2551 l1: ; CODE XREF: diag_unpack_sprites+52j | |
| F000:2551 push cx | |
| F000:2552 mov cx, 6 | |
| F000:2555 l2: ; CODE XREF: diag_unpack_sprites+4Cj | |
| F000:2555 mov al, [si] ; unpacking sprite? | |
| F000:2557 ror al, 1 | |
| F000:2559 ror al, 1 | |
| F000:255B ror al, 1 | |
| F000:255D ror al, 1 | |
| F000:255F mov ah, al | |
| F000:2561 shl al, 1 | |
| F000:2563 shl al, 1 | |
| F000:2565 and al, 11001100b | |
| F000:2567 shr ah, 1 | |
| F000:2569 shr ah, 1 | |
| F000:256B and ah, 110011b | |
| F000:256E or al, ah | |
| F000:2570 mov es:[di], al | |
| F000:2573 dec di ; go back 6 | |
| F000:2574 inc si | |
| F000:2575 loop l2 | |
| F000:2577 pop cx | |
| F000:2578 add di, 16 ; go forward 16 | |
| F000:257B loop l1 | |
| F000:257D retn | |
| F000:257D diag_unpack_sprites endp | |
| F000:257E diag_int_1f db 0FFh, 0, 0, 0, 0, 0, 0, 0 ; DATA XREF: mini_welcome_init+44o | |
| F000:257E ; top/bottom char (0x80) | |
| F000:2586 db 0C0h, 0C0h, 0C0h, 0C0h, 0C0h, 0C0h, 0C0h, 0C0h ; left/right char (0x81) | |
| F000:258E db 0FFh, 0C0h, 0C0h, 0C0h, 0C0h, 0C0h, 0C0h, 0C0h ; top left corner (0x82) | |
| F000:2596 db 0C0h, 0, 0, 0, 0, 0, 0, 0 ; bottom/right corner (0x83) | |
| F000:259E db 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0FFh, 0FFh ; key char (0x84) | |
| F000:25A6 row_cols_times_array_a dw 80Ch, 13h, 100Ch, 13h ; DATA XREF: mini_welcome_init+8Do | |
| F000:25A6 ; 1st dw: col/row for cursor. 2nd dw: times to draw | |
| F000:25AE row_cols_times_array_b dw 90Ch, 7, 81Fh, 8 ; DATA XREF: mini_welcome_init+C0o | |
| F000:25B6 db 0 | |
| F000:25B7 db 0 | |
| F000:25B8 db 0 | |
| F000:25B9 db 0 | |
| F000:25BA db 0 | |
| F000:25BB db 0 | |
| F000:25BC db 0 | |
| F000:25BD db 0 | |
| F000:25BE db 0 | |
| F000:25BF db 0 | |
| F000:25C0 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:25C0 ; input | |
| F000:25C0 ; dh = row | |
| F000:25C0 ; dl = col | |
| F000:25C0 diag_copy_sprite_to_tmp_buffer? proc near ; CODE XREF: mini_welcome_init+199p | |
| F000:25C0 ; mini_welcome_init+1CFp | |
| F000:25C0 ; diag_move_sprite_with_cursor+56p | |
| F000:25C0 ; diag_move_sprite_with_cursor:right_l2p | |
| F000:25C0 ; diag_move_sprite_with_cursor+BDp | |
| F000:25C0 ; diag_move_sprite_with_cursor:left_l2p ... | |
| F000:25C0 push dx | |
| F000:25C1 cmp byte ptr es:seg60_diag.field_2, 0 | |
| F000:25C7 jz short l0 | |
| F000:25C9 mov bx, seg60_diag.field_161 ; es:bx = dst | |
| F000:25CC mov es:seg60_diag.row_col_1, dx | |
| F000:25D1 jmp short l1 | |
| F000:25D3 l0: ; CODE XREF: diag_copy_sprite_to_tmp_buffer?+7j | |
| F000:25D3 mov es:seg60_diag.row_col_2, dx | |
| F000:25D8 mov bx, 0Bh ; es:bx = dst | |
| F000:25DB l1: ; CODE XREF: diag_copy_sprite_to_tmp_buffer?+11j | |
| F000:25DB mov ax, 0 | |
| F000:25DE mov al, dh ; al = row | |
| F000:25E0 mul ds:row_len | |
| F000:25E4 shl dl, 1 ; col * 2 | |
| F000:25E6 mov dh, 0 | |
| F000:25E8 add ax, dx | |
| F000:25EA mov bp, ax ; ds:bp = src | |
| F000:25EC mov si, 0 ; dst increment | |
| F000:25EF mov di, 512 ; src increment | |
| F000:25F2 push ds | |
| F000:25F3 push es | |
| F000:25F4 mov ax, 0B800h | |
| F000:25F7 mov ds, ax ; ds = 0xb800 (video segment) | |
| F000:25F9 mov ax, 0 ; replace operation | |
| F000:25FC call diag_sprite_paint?? | |
| F000:25FF pop es | |
| F000:2600 pop ds | |
| F000:2601 pop dx | |
| F000:2602 retn | |
| F000:2602 diag_copy_sprite_to_tmp_buffer? endp | |
| F000:2603 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:2603 diag_sprite_replace proc near ; CODE XREF: mini_welcome_init+188p | |
| F000:2603 ; mini_welcome_init+1A2p | |
| F000:2603 ; mini_welcome_init+213p | |
| F000:2603 ; diag_move_sprite_with_cursor:right_l1p | |
| F000:2603 ; diag_move_sprite_with_cursor:left_l1p | |
| F000:2603 ; diag_move_sprite_with_cursor:up_l2p ... | |
| F000:2603 push dx | |
| F000:2604 cmp byte ptr es:seg60_diag.field_2, 0 | |
| F000:260A jz short l0 | |
| F000:260C mov bp, 161h ; src off | |
| F000:260F mov dx, es:seg60_diag.row_col_1 | |
| F000:2614 jmp short l11 | |
| F000:2616 l0: ; CODE XREF: diag_sprite_replace+7j | |
| F000:2616 mov dx, es:seg60_diag.row_col_2 | |
| F000:261B mov bp, 11 ; src off | |
| F000:261E l11: ; CODE XREF: diag_sprite_replace+11j | |
| F000:261E mov ax, 0 | |
| F000:2621 mov al, dh | |
| F000:2623 mul ds:row_len | |
| F000:2627 shl dl, 1 | |
| F000:2629 mov dh, 0 | |
| F000:262B add ax, dx | |
| F000:262D mov bx, ax | |
| F000:262F mov di, 0 | |
| F000:2632 mov si, 200h ; dst seg increment (== 0x2000 offset increment) | |
| F000:2635 push ds | |
| F000:2636 push es | |
| F000:2637 push es | |
| F000:2638 pop ds ; src seg = 0x60 | |
| F000:2639 mov ax, 0B800h | |
| F000:263C mov es, ax ; dst seg (video) | |
| F000:263E mov ax, 0 ; ax == 0: move operation | |
| F000:2641 call diag_sprite_paint?? | |
| F000:2644 pop es | |
| F000:2645 pop ds | |
| F000:2646 pop dx | |
| F000:2647 retn | |
| F000:2647 diag_sprite_replace endp | |
| F000:2648 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:2648 ; input | |
| F000:2648 ; dh = row for dst | |
| F000:2648 ; dl = col for dst | |
| F000:2648 ; bp = offset for src | |
| F000:2648 diag_sprite_or proc near ; CODE XREF: mini_welcome_init+19Fp | |
| F000:2648 ; mini_welcome_init+1D5p | |
| F000:2648 ; diag_move_sprite_with_cursor+5Cp | |
| F000:2648 ; diag_move_sprite_with_cursor+6Fp | |
| F000:2648 ; diag_move_sprite_with_cursor+C3p | |
| F000:2648 ; diag_move_sprite_with_cursor+D6p ... | |
| F000:2648 push dx | |
| F000:2649 push ds | |
| F000:264A mov ax, cs | |
| F000:264C mov ds, ax ; ds = cs | |
| F000:264E mov ax, 0 | |
| F000:2651 mov al, dh | |
| F000:2653 mul ds:row_len ; ax = 160 * al (assuming 80 col screen) | |
| F000:2657 shl dl, 1 ; since each char takes 2 bytes (char/attr) | |
| F000:2659 mov dh, 0 | |
| F000:265B add ax, dx | |
| F000:265D mov bx, ax ; bx = offset for dst | |
| F000:265F pop ds ; restore ds | |
| F000:2660 mov si, 200h ; dst seg increment. (+= 2000 offset) | |
| F000:2663 mov di, 0 ; src seg increment: 0 | |
| F000:2666 push ds | |
| F000:2667 push es | |
| F000:2668 mov ax, 0B800h | |
| F000:266B mov es, ax ; es = 0xb800 | |
| F000:266D mov ax, 60h ; '`' | |
| F000:2670 mov ds, ax ; ds = 0x60 | |
| F000:2672 mov ax, 1 ; operation = or | |
| F000:2675 call diag_sprite_paint?? | |
| F000:2678 pop es ; restore es | |
| F000:2679 pop ds ; restore ds | |
| F000:267A pop dx | |
| F000:267B call diag_swap_crt_cpu_page_regs | |
| F000:267E retn | |
| F000:267E diag_sprite_or endp | |
| F000:267F ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:267F diag_swap_crt_cpu_page_regs proc near ; CODE XREF: diag_write_char_in_both_buffers+15p | |
| F000:267F ; diag_write_char_in_both_buffers+2Cp | |
| F000:267F ; diag_init_video+20p | |
| F000:267F ; diag_init_video+26p | |
| F000:267F ; diag_sprite_or+33p | |
| F000:267F ; diag_kbd_init+9Dp | |
| F000:267F cmp byte ptr es:seg60_diag.field_2, 1 | |
| F000:2685 jz short l0 | |
| F000:2687 mov byte ptr es:seg60_diag.field_2, 1 | |
| F000:268D mov bl, 2 ; cpu page reg | |
| F000:268F mov bh, 3 ; crt page reg | |
| F000:2691 jmp short l1 | |
| F000:2693 l0: ; CODE XREF: diag_swap_crt_cpu_page_regs+6j | |
| F000:2693 mov byte ptr es:seg60_diag.field_2, 0 | |
| F000:2699 mov bl, 3 ; cpu page reg | |
| F000:269B mov bh, 2 ; crt page reg | |
| F000:269D l1: ; CODE XREF: diag_swap_crt_cpu_page_regs+12j | |
| F000:269D mov al, 83h ; '' ; set both crt/cpu page regs | |
| F000:269F mov ah, 5 | |
| F000:26A1 int 10h ; - VIDEO - SELECT DISPLAY PAGE | |
| F000:26A1 ; AL = display page, 0-7 for modes 0 & 1, 0-3 for modes 2 & 3 | |
| F000:26A3 retn | |
| F000:26A3 diag_swap_crt_cpu_page_regs endp | |
| F000:26A4 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:26A4 ; input | |
| F000:26A4 ; ds:bp -> source | |
| F000:26A4 ; es:bx -> dst | |
| F000:26A4 ; di -> increment for src seg | |
| F000:26A4 ; si -> increment for dst seg | |
| F000:26A4 ; ax = 0: replace (mov) | |
| F000:26A4 ; 1: or | |
| F000:26A4 diag_sprite_paint?? proc near ; CODE XREF: diag_copy_sprite_to_tmp_buffer?+3Cp | |
| F000:26A4 ; diag_sprite_replace+3Ep | |
| F000:26A4 ; diag_sprite_or+2Dp | |
| F000:26A4 mov dx, 10h ; times to do the big loop: 16 | |
| F000:26A7 l0: ; CODE XREF: diag_sprite_paint??+8Bj | |
| F000:26A7 mov cx, 5 ; copy/or 10 bytes (5 char/attr) | |
| F000:26AA push ax | |
| F000:26AB l1: ; CODE XREF: diag_sprite_paint??+29j | |
| F000:26AB pop ax | |
| F000:26AC cmp ax, 1 | |
| F000:26AF jz short l2 | |
| F000:26B1 push ax | |
| F000:26B2 mov ax, ds:[bp+0] | |
| F000:26B6 mov es:[bx], ax ; ax == 0, do the mov | |
| F000:26B9 jmp short l3 | |
| F000:26BB nop | |
| F000:26BC l2: ; CODE XREF: diag_sprite_paint??+Bj | |
| F000:26BC push ax | |
| F000:26BD mov ax, ds:[bp+0] | |
| F000:26C1 or ax, es:[bx] ; ax == 1, do the or | |
| F000:26C4 mov es:[bx], ax | |
| F000:26C7 l3: ; CODE XREF: diag_sprite_paint??+15j | |
| F000:26C7 add bx, 2 | |
| F000:26CA add bp, 2 ; src,dst += 2 (just one char/attr) | |
| F000:26CD loop l1 | |
| F000:26CF mov cx, 5 ; copy/or 10 bytes | |
| F000:26D2 cmp si, 0 | |
| F000:26D5 jnz short l4 | |
| F000:26D7 sub bp, 10 ; si == 0 -> bp -= 10 (reset src off) | |
| F000:26DA jmp short l5 | |
| F000:26DC l4: ; CODE XREF: diag_sprite_paint??+31j | |
| F000:26DC sub bx, 10 ; si != 0 -> bx -= 10 (reset dst off) | |
| F000:26DF l5: ; CODE XREF: diag_sprite_paint??+36j | |
| F000:26DF mov ax, es | |
| F000:26E1 add ax, si | |
| F000:26E3 mov es, ax ; es += si | |
| F000:26E5 mov ax, ds | |
| F000:26E7 add ax, di | |
| F000:26E9 mov ds, ax ; ds += di | |
| F000:26EB l6: ; CODE XREF: diag_sprite_paint??+69j | |
| F000:26EB pop ax | |
| F000:26EC cmp ax, 1 | |
| F000:26EF jz short l7 | |
| F000:26F1 push ax | |
| F000:26F2 mov ax, ds:[bp+0] | |
| F000:26F6 mov es:[bx], ax ; ax == 0, do the mov | |
| F000:26F9 jmp short l8 | |
| F000:26FB nop | |
| F000:26FC l7: ; CODE XREF: diag_sprite_paint??+4Bj | |
| F000:26FC push ax | |
| F000:26FD mov ax, ds:[bp+0] | |
| F000:2701 or ax, es:[bx] ; ax == 1, do the or | |
| F000:2704 mov es:[bx], ax | |
| F000:2707 l8: ; CODE XREF: diag_sprite_paint??+55j | |
| F000:2707 add bx, 2 | |
| F000:270A add bp, 2 ; src,dst += 2 | |
| F000:270D loop l6 | |
| F000:270F dec dx | |
| F000:2710 cmp si, 0 | |
| F000:2713 jnz short l9 | |
| F000:2715 add bp, 70 ; si == 0 -> bp += 70 (src off) | |
| F000:2718 jmp short l10 | |
| F000:271A l9: ; CODE XREF: diag_sprite_paint??+6Fj | |
| F000:271A add bx, 70 ; si != 0 -> bp += 70 (dst off) | |
| F000:271D l10: ; CODE XREF: diag_sprite_paint??+74j | |
| F000:271D mov ax, es | |
| F000:271F sub ax, si | |
| F000:2721 mov es, ax ; es -= si | |
| F000:2723 mov ax, ds | |
| F000:2725 sub ax, di | |
| F000:2727 mov ds, ax ; ds -= di | |
| F000:2729 pop ax | |
| F000:272A cmp dx, 0 | |
| F000:272D jz short l11 | |
| F000:272F jmp l0 | |
| F000:2732 l11: ; CODE XREF: diag_sprite_paint??+89j | |
| F000:2732 retn | |
| F000:2732 diag_sprite_paint?? endp | |
| F000:2733 row_len db 160 ; DATA XREF: diag_copy_sprite_to_tmp_buffer?+20r | |
| F000:2733 ; diag_sprite_replace+20r | |
| F000:2733 ; diag_sprite_or+Br | |
| F000:2734 sprite_0 db 0, 0Ah, 0AAh, 0AAh, 0A0h, 0, 0, 0Ah, 0AAh, 0AAh, 0A0h | |
| F000:2734 ; DATA XREF: diag_unpack_sprites+Ao | |
| F000:2734 db 0, 0, 0AAh, 0AAh, 0AAh, 0AAh, 0, 0, 0Fh, 0FFh, 0FFh | |
| F000:2734 db 0F0h, 0, 0, 3Fh, 0FFh, 0FFh, 0FCh, 0, 0, 0FFh, 0EBh | |
| F000:2734 db 0FAh, 0FFh, 0, 0, 0FFh, 0FFh, 0FFh, 0FFh, 0, 0, 3Fh | |
| F000:2734 db 0FFh, 0FFh, 0FCh, 0, 0, 3Fh, 0EFh, 0FBh, 0FCh, 0, 0 | |
| F000:2734 db 0Fh, 0FAh, 0AFh, 0F0h, 0, 0, 3, 0FFh, 0FFh, 0C0h, 0 | |
| F000:2734 db 0, 0, 0FFh, 0FFh, 0, 0, 0, 0, 0Fh, 0F0h, 0, 0, 0, 55h | |
| F000:2734 db 0AAh, 0AAh, 55h, 0, 5, 55h, 55h, 55h, 55h, 50h, 15h | |
| F000:2734 db 55h, 55h, 55h, 55h, 54h, 54h, 55h, 55h, 55h, 55h, 15h | |
| F000:2734 db 55h, 5, 55h, 55h, 50h, 55h, 5, 55h, 55h, 55h, 55h, 50h | |
| F000:2734 db 0, 1Fh, 55h, 55h, 0F4h, 0, 0, 0Fh, 0AAh, 0AAh, 0F0h | |
| F000:2734 db 0, 0, 0Ah, 0AAh, 0AAh, 0A0h, 0, 0, 0Ah, 0AAh, 0AAh | |
| F000:2734 db 0A0h, 0, 0, 0Ah, 0AAh, 0AAh, 0A0h, 0, 0, 0Ah, 0AAh | |
| F000:2734 db 0AAh, 0A0h, 0, 0, 0Ah, 0AAh, 0AAh, 0A0h, 0, 0, 2Ah | |
| F000:2734 db 0AAh, 0AAh, 0A8h, 0, 0, 2Ah, 0A8h, 2Ah, 0A8h, 0, 0 | |
| F000:2734 db 2Ah, 0A8h, 2Ah, 0A8h, 0, 0, 2Ah, 0A8h, 2Ah, 0A8h, 0 | |
| F000:2734 db 3, 0FFh, 0F0h, 0Fh, 0FFh, 0C0h, 3, 0FFh, 0F0h, 0Fh | |
| F000:2734 db 0FFh, 0C0h | |
| F000:27F4 sprite_1 db 0, 0, 2, 0AAh, 0AAh, 80h, 0, 0, 2, 0AAh, 0AAh, 80h | |
| F000:27F4 ; DATA XREF: diag_unpack_sprites+1Fo | |
| F000:27F4 db 0, 0, 0AAh, 0AAh, 0AAh, 0AAh, 0, 0, 3, 0FFh, 0FFh, 0C0h | |
| F000:27F4 db 0, 0, 0Fh, 0FFh, 0FFh, 0F0h, 0, 0, 0Fh, 0FFh, 0FAh | |
| F000:27F4 db 0F0h, 0, 0, 0Fh, 0FFh, 0FFh, 0FCh, 0, 0, 0Fh, 0FFh | |
| F000:27F4 db 0FFh, 0FCh, 0, 0, 0Fh, 0FFh, 0FAh, 0F0h, 0, 0, 3, 0FFh | |
| F000:27F4 db 0FFh, 0A0h, 0, 0, 0, 0FFh, 0FFh, 0, 0, 0, 0, 0Fh, 0F0h | |
| F000:27F4 db 0, 0, 0, 0, 0Fh, 0F0h, 0, 0, 0, 0, 0Ah, 0A0h, 0, 0 | |
| F000:27F4 db 0, 0, 55h, 50h, 0, 0, 0, 1, 55h, 54h, 0, 0, 0, 5, 55h | |
| F000:27F4 db 54h, 0, 0, 0, 15h, 55h, 55h, 0, 0, 0, 54h, 55h, 55h | |
| F000:27F4 db 0, 0, 0, 15h, 55h, 55h, 0, 0, 0, 5, 5Ah, 0AAh, 0, 0 | |
| F000:27F4 db 0, 0, 0FEh, 0AAh, 0, 0, 0, 0, 0FEh, 0AAh, 0, 0, 0, 0 | |
| F000:27F4 db 0AAh, 0AAh, 0, 0, 0, 0, 0AAh, 0AAh, 0, 0, 0, 0, 0AAh | |
| F000:27F4 db 2Ah, 80h, 0, 0, 0, 0AAh, 0Ah, 0A0h, 0, 0, 0, 0AAh, 2 | |
| F000:27F4 db 0A8h, 0, 0, 0, 0AAh, 0Ah, 0A0h, 0, 0, 0, 0AAh, 2Ah | |
| F000:27F4 db 80h, 0, 0, 0, 0FFh, 3Fh, 0, 0, 0, 0, 0FFh, 0CFh, 0F0h | |
| F000:27F4 db 0, 2, 0AAh, 0AAh, 80h, 0, 0, 2, 0AAh, 0AAh, 80h, 0 | |
| F000:27F4 db 0, 0AAh, 0AAh, 0AAh, 0AAh, 0, 0, 3, 0FFh, 0FFh, 0C0h | |
| F000:27F4 db 0, 0, 0Fh, 0FFh, 0FFh, 0F0h, 0, 0, 0Fh, 0FFh, 0FAh | |
| F000:27F4 db 0F0h, 0, 0, 0Fh, 0FFh, 0FFh, 0FCh, 0, 0, 0Fh, 0FFh | |
| F000:27F4 db 0FFh, 0FCh, 0, 0, 0Fh, 0FFh, 0FEh, 0F0h, 0, 0, 3, 0FFh | |
| F000:27F4 db 0FFh, 0A0h, 0, 0, 0, 0FFh, 0FFh, 0, 0, 0, 0, 0Fh, 0F0h | |
| F000:27F4 db 0, 0, 0, 0, 0Fh, 0F0h, 0, 0, 0, 0, 0Ah, 0A0h, 0, 0 | |
| F000:27F4 db 0, 0, 55h, 55h, 0, 3Fh, 0, 5, 55h, 55h, 0, 3Fh, 0, 15h | |
| F000:27F4 db 55h, 55h, 40h, 54h, 0, 55h, 55h, 55h, 51h, 50h, 1, 54h | |
| F000:27F4 db 55h, 55h, 55h, 40h, 1, 50h, 55h, 55h, 15h, 0, 3, 0F0h | |
| F000:27F4 db 0AAh, 0AAh, 0, 0, 3, 0F0h, 0AAh, 0AAh, 0, 0, 0, 0, 0AAh | |
| F000:27F4 db 0AAh, 0, 0, 0, 0, 0AAh, 0AAh, 0, 0, 0, 0, 0AAh, 0AAh | |
| F000:27F4 db 0AAh, 80h, 0, 0, 0AAh, 0AAh, 0AAh, 80h, 0, 0, 0AAh | |
| F000:27F4 db 0AAh, 0AAh, 80h, 0Fh, 0AAh, 0A0h, 0, 0Ah, 80h, 0Fh | |
| F000:27F4 db 0AAh, 0A0h, 0, 0Ah, 80h, 0Fh, 0AAh, 0A0h, 0, 0Ah, 80h | |
| F000:27F4 db 0Fh, 0, 0, 0, 0Fh, 0F0h, 0, 0, 0, 0, 0Fh, 0F0h, 0, 0 | |
| F000:27F4 db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | |
| F000:2980 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:2980 diag_kbd_init proc near ; CODE XREF: diag_kbd_init_j+11j | |
| F000:2980 ; diag_kdb_init_k+11j | |
| F000:2980 ; mini_welcome_init+235p | |
| F000:2980 ; diag_kbd_init:l29j | |
| F000:2980 mov ax, cs | |
| F000:2982 mov ds, ax ; ds = cs | |
| F000:2984 mov ax, 60h ; '`' | |
| F000:2987 mov es, ax ; es = 0x60 | |
| F000:2989 call diag_unpack_sprites | |
| F000:298C push ds | |
| F000:298D sub ax, ax | |
| F000:298F mov ds, ax ; ds = 0 | |
| F000:2991 mov dx, offset diag_control_break_handler | |
| F000:2994 mov ax, cs | |
| F000:2996 mov bx, ds:6Ch ; old int 0x1b offset (control + break handler) | |
| F000:299A mov cx, ds:6Eh ; old int 0x1b segment | |
| F000:299E mov ds:6Ch, dx ; new int 0x1b offset | |
| F000:29A2 mov ds:6Eh, ax ; new int 0x1b segment | |
| F000:29A5 pop ds ; ds = back to cs | |
| F000:29A6 mov es:seg60_diag.old_int_1b_off, bx | |
| F000:29AB mov es:seg60_diag.old_int_1b_seg, cx | |
| F000:29B0 mov al, 0 | |
| F000:29B2 mov cx, 4DBh ; times to clean | |
| F000:29B5 mov di, 0 | |
| F000:29B8 rep stosb ; clean 60:0000 -> 60:04da | |
| F000:29BA mov byte ptr es:seg60_diag.avoid_interal_box_check, 1 | |
| F000:29C0 mov byte ptr es:seg60_diag.foreground_color, 3 ; cyan color | |
| F000:29C6 push es | |
| F000:29C7 mov ax, 4Ch ; 'L' | |
| F000:29CA mov es, ax ; es = 0x4c | |
| F000:29CC mov byte ptr es:seg4c.flag1, 0 | |
| F000:29D2 pop es ; es = back to 0x60 | |
| F000:29D3 call diag_init_video | |
| F000:29D6 push ds | |
| F000:29D7 mov ax, 40h ; '@' | |
| F000:29DA mov ds, ax ; ds = 0x40 | |
| F000:29DC mov bx, 1Eh | |
| F000:29DF mov ds:seg40.buffer_head, bx | |
| F000:29E3 mov ds:seg40.buffer_tail, bx | |
| F000:29E7 pop ds ; ds = back to cs | |
| F000:29E8 mov ah, 0 | |
| F000:29EA mov al, 4 ; 320x200 4 colors | |
| F000:29EC int 10h ; - VIDEO - SET VIDEO MODE | |
| F000:29EC ; AL = mode | |
| F000:29EE mov ah, 0Bh | |
| F000:29F0 mov bh, 0 | |
| F000:29F2 mov bl, 0 | |
| F000:29F4 int 10h ; - VIDEO - SET COLOR PALETTE | |
| F000:29F4 ; BH = 00h, BL = border color | |
| F000:29F4 ; BH = 01h, BL = palette (0-3) | |
| F000:29F6 mov ah, 0Bh | |
| F000:29F8 mov bh, 1 | |
| F000:29FA mov bl, 0 | |
| F000:29FC int 10h ; - VIDEO - SET COLOR PALETTE | |
| F000:29FC ; BH = 00h, BL = border color | |
| F000:29FC ; BH = 01h, BL = palette (0-3) | |
| F000:29FE cmp byte ptr es:seg60_diag.opt_k_enabled, 0 | |
| F000:2A04 jz short l0 | |
| F000:2A06 mov si, offset diag_msg_for_kdb_j | |
| F000:2A09 jmp short l1 | |
| F000:2A0B l0: ; CODE XREF: diag_kbd_init+84j | |
| F000:2A0B mov si, offset diag_msg_for_kdb_k | |
| F000:2A0E l1: ; CODE XREF: diag_kbd_init+89j | |
| F000:2A0E mov di, seg60_diag.field_2B7 ; dst -> 60:02b7 | |
| F000:2A11 mov cx, 86 ; 172 times (86 * 2) | |
| F000:2A14 rep movsw ; copy them | |
| F000:2A16 push ds | |
| F000:2A17 mov dx, 6Fh ; 'o' | |
| F000:2A1A call diag_copy_sprite_to_tmp_buffer? | |
| F000:2A1D call diag_swap_crt_cpu_page_regs | |
| F000:2A20 call diag_copy_sprite_to_tmp_buffer? | |
| F000:2A23 mov dx, 11h | |
| F000:2A26 mov cx, 0Eh | |
| F000:2A29 call diag_sprite_move_down_n_rows | |
| F000:2A2C mov es:seg60_diag.field_6, dx | |
| F000:2A31 pop ds | |
| F000:2A32 call sub_F36C3 | |
| F000:2A35 cmp byte ptr es:seg60_diag.field_4E1, 0B3h ; '³' | |
| F000:2A3B jnz short l3 | |
| F000:2A3D mov cx, 8 | |
| F000:2A40 mov dx, 0C0Dh | |
| F000:2A43 l2: ; CODE XREF: diag_kbd_init+D0j | |
| F000:2A43 push cx | |
| F000:2A44 mov ah, 2 | |
| F000:2A46 mov bh, 0 | |
| F000:2A48 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2A48 ; DH,DL = row, column (0,0 = upper left) | |
| F000:2A48 ; BH = page number | |
| F000:2A4A call sub_F31C6 | |
| F000:2A4D inc dx | |
| F000:2A4E inc dx | |
| F000:2A4F pop cx | |
| F000:2A50 loop l2 | |
| F000:2A52 l3: ; CODE XREF: diag_kbd_init+BBj | |
| F000:2A52 mov dx, 3 | |
| F000:2A55 mov ah, 2 | |
| F000:2A57 mov bh, 0 | |
| F000:2A59 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2A59 ; DH,DL = row, column (0,0 = upper left) | |
| F000:2A59 ; BH = page number | |
| F000:2A5B call sub_F31C6 | |
| F000:2A5E l4: ; CODE XREF: diag_kbd_init+186j | |
| F000:2A5E ; diag_kbd_init+192j | |
| F000:2A5E ; diag_kbd_init+19Aj | |
| F000:2A5E ; diag_kbd_init+1A2j | |
| F000:2A5E ; diag_kbd_init+1AAj | |
| F000:2A5E ; diag_kbd_init+1C8j ... | |
| F000:2A5E mov ah, 2 | |
| F000:2A60 int 16h ; KEYBOARD - GET SHIFT STATUS | |
| F000:2A60 ; AL = shift status bits | |
| F000:2A62 cmp byte ptr es:seg60_diag.field_4D4, 0 | |
| F000:2A68 jnz short l5 | |
| F000:2A6A test al, 8 | |
| F000:2A6C jz short l5 | |
| F000:2A6E jmp l21 | |
| F000:2A71 l5: ; CODE XREF: diag_kbd_init+E8j | |
| F000:2A71 ; diag_kbd_init+ECj | |
| F000:2A71 cmp byte ptr es:seg60_diag.field_4D5, 0 | |
| F000:2A77 jnz short l6 | |
| F000:2A79 test al, 4 | |
| F000:2A7B jz short l6 | |
| F000:2A7D jmp l22 | |
| F000:2A80 l6: ; CODE XREF: diag_kbd_init+F7j | |
| F000:2A80 ; diag_kbd_init+FBj | |
| F000:2A80 cmp byte ptr es:seg60_diag.field_4D6, 0 | |
| F000:2A86 jnz short l7 | |
| F000:2A88 test al, 2 | |
| F000:2A8A jz short l7 | |
| F000:2A8C jmp l23 | |
| F000:2A8F l7: ; CODE XREF: diag_kbd_init+106j | |
| F000:2A8F ; diag_kbd_init+10Aj | |
| F000:2A8F cmp byte ptr es:seg60_diag.field_4D7, 0 | |
| F000:2A95 jnz short l8 | |
| F000:2A97 test al, 1 | |
| F000:2A99 jz short l8 | |
| F000:2A9B jmp l24 | |
| F000:2A9E l8: ; CODE XREF: diag_kbd_init+115j | |
| F000:2A9E ; diag_kbd_init+119j | |
| F000:2A9E cmp byte ptr es:seg60_diag.field_4D3, 0 | |
| F000:2AA4 jnz short l9 | |
| F000:2AA6 test al, 40h | |
| F000:2AA8 jz short l9 | |
| F000:2AAA jmp l25 | |
| F000:2AAD l9: ; CODE XREF: diag_kbd_init+124j | |
| F000:2AAD ; diag_kbd_init+128j | |
| F000:2AAD cmp byte ptr es:seg60_diag.opt_k_enabled, 0 | |
| F000:2AB3 jz short l11 | |
| F000:2AB5 cmp byte ptr es:seg60_diag.field_4D9, 0 | |
| F000:2ABB jnz short l10 | |
| F000:2ABD test al, 20h | |
| F000:2ABF jz short l10 | |
| F000:2AC1 jmp l27 | |
| F000:2AC4 l10: ; CODE XREF: diag_kbd_init+13Bj | |
| F000:2AC4 ; diag_kbd_init+13Fj | |
| F000:2AC4 cmp byte ptr es:seg60_diag.field_4DA, 0 | |
| F000:2ACA jnz short l11 | |
| F000:2ACC test al, 10h | |
| F000:2ACE jz short l11 | |
| F000:2AD0 jmp l28 | |
| F000:2AD3 l11: ; CODE XREF: diag_kbd_init+133j | |
| F000:2AD3 ; diag_kbd_init+14Aj | |
| F000:2AD3 ; diag_kbd_init+14Ej | |
| F000:2AD3 cmp byte ptr es:seg60_diag.field_4CB, 0 | |
| F000:2AD9 jnz short l12 | |
| F000:2ADB push ds | |
| F000:2ADC mov ax, 40h ; '@' | |
| F000:2ADF mov ds, ax ; ds = 0x40 | |
| F000:2AE1 mov al, ds:seg40.kb_flag_2 | |
| F000:2AE4 push ax | |
| F000:2AE5 and al, 7Fh | |
| F000:2AE7 mov ds:seg40.kb_flag_2, al | |
| F000:2AEA pop ax | |
| F000:2AEB pop ds | |
| F000:2AEC and al, 80h | |
| F000:2AEE test al, 80h | |
| F000:2AF0 jz short l12 | |
| F000:2AF2 jmp l26 | |
| F000:2AF5 l12: ; CODE XREF: diag_kbd_init+159j | |
| F000:2AF5 ; diag_kbd_init+170j | |
| F000:2AF5 test byte ptr es:seg60_diag.ctrl_break_pressed, 80h | |
| F000:2AFB jz short l13 | |
| F000:2AFD jmp l30 | |
| F000:2B00 l13: ; CODE XREF: diag_kbd_init+17Bj | |
| F000:2B00 mov ah, 1 | |
| F000:2B02 int 16h ; KEYBOARD - CHECK BUFFER, DO NOT CLEAR | |
| F000:2B02 ; Return: ZF clear if character in buffer | |
| F000:2B02 ; AH = scan code, AL = character | |
| F000:2B02 ; ZF set if no character in buffer | |
| F000:2B04 jnz short l14 | |
| F000:2B06 jmp l4 | |
| F000:2B09 l14: ; CODE XREF: diag_kbd_init+184j | |
| F000:2B09 mov ah, 0 | |
| F000:2B0B int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY | |
| F000:2B0B ; Return: AH = scan code, AL = character | |
| F000:2B0D cmp ax, 240Ah ; ctrl + j? | |
| F000:2B10 jnz short l15 | |
| F000:2B12 jmp l4 | |
| F000:2B15 l15: ; CODE XREF: diag_kbd_init+190j | |
| F000:2B15 cmp ax, 320Dh ; ctrl + m? | |
| F000:2B18 jnz short l16 | |
| F000:2B1A jmp l4 | |
| F000:2B1D l16: ; CODE XREF: diag_kbd_init+198j | |
| F000:2B1D cmp ax, 2308h ; ctrl + h? | |
| F000:2B20 jnz short l17 | |
| F000:2B22 jmp l4 | |
| F000:2B25 l17: ; CODE XREF: diag_kbd_init+1A0j | |
| F000:2B25 cmp ax, 2207h ; ctrl + g? | |
| F000:2B28 jnz short l18 | |
| F000:2B2A jmp l4 | |
| F000:2B2D l18: ; CODE XREF: diag_kbd_init+1A8j | |
| F000:2B2D cmp ah, 5Dh ; ']' | |
| F000:2B30 jz short l29 | |
| F000:2B32 l19: ; CODE XREF: diag_kbd_init+1D4j | |
| F000:2B32 ; diag_kbd_init+1DFj | |
| F000:2B32 ; diag_kbd_init+1EAj | |
| F000:2B32 ; diag_kbd_init+1F5j | |
| F000:2B32 ; diag_kbd_init+200j | |
| F000:2B32 ; diag_kbd_init+20Bj ... | |
| F000:2B32 call diag_kdb_eval_scancode | |
| F000:2B35 cmp byte ptr es:seg60_diag.field_4CC, 2 | |
| F000:2B3B jnz short l20 | |
| F000:2B3D jmp short exit | |
| F000:2B3F nop | |
| F000:2B40 l20: ; CODE XREF: diag_kbd_init+1BBj | |
| F000:2B40 cmp byte ptr es:seg60_diag.field_4CC, 0 | |
| F000:2B46 jnz short l29 | |
| F000:2B48 jmp l4 | |
| F000:2B4B l21: ; CODE XREF: diag_kbd_init+EEj | |
| F000:2B4B mov ax, 3800h | |
| F000:2B4E mov byte ptr es:seg60_diag.field_4D4, 1 | |
| F000:2B54 jmp short l19 | |
| F000:2B56 l22: ; CODE XREF: diag_kbd_init+FDj | |
| F000:2B56 mov ax, 1D00h | |
| F000:2B59 mov byte ptr es:seg60_diag.field_4D5, 1 | |
| F000:2B5F jmp short l19 | |
| F000:2B61 l23: ; CODE XREF: diag_kbd_init+10Cj | |
| F000:2B61 mov ax, 2A00h | |
| F000:2B64 mov byte ptr es:seg60_diag.field_4D6, 1 | |
| F000:2B6A jmp short l19 | |
| F000:2B6C l24: ; CODE XREF: diag_kbd_init+11Bj | |
| F000:2B6C mov ax, 3600h | |
| F000:2B6F mov byte ptr es:seg60_diag.field_4D7, 1 | |
| F000:2B75 jmp short l19 | |
| F000:2B77 l25: ; CODE XREF: diag_kbd_init+12Aj | |
| F000:2B77 mov ax, 3A00h | |
| F000:2B7A mov byte ptr es:seg60_diag.field_4D3, 1 | |
| F000:2B80 jmp short l19 | |
| F000:2B82 l26: ; CODE XREF: diag_kbd_init+172j | |
| F000:2B82 mov ax, 5400h | |
| F000:2B85 mov byte ptr es:seg60_diag.field_4CB, 1 | |
| F000:2B8B jmp short l19 | |
| F000:2B8D l27: ; CODE XREF: diag_kbd_init+141j | |
| F000:2B8D mov ax, 4500h | |
| F000:2B90 mov byte ptr es:seg60_diag.field_4D9, 1 | |
| F000:2B96 jmp short l19 | |
| F000:2B98 l28: ; CODE XREF: diag_kbd_init+150j | |
| F000:2B98 mov ax, 4600h | |
| F000:2B9B mov byte ptr es:seg60_diag.field_4DA, 1 | |
| F000:2BA1 jmp short l19 | |
| F000:2BA3 l29: ; CODE XREF: diag_kbd_init+1B0j | |
| F000:2BA3 ; diag_kbd_init+1C6j | |
| F000:2BA3 jmp diag_kbd_init | |
| F000:2BA6 l30: ; CODE XREF: diag_kbd_init+17Dj | |
| F000:2BA6 mov byte ptr es:seg60_diag.ctrl_break_pressed, 0 | |
| F000:2BAC cmp byte ptr es:seg60_diag.field_4E0, 0 | |
| F000:2BB2 jnz short exit | |
| F000:2BB4 call diag_init_seg4c_flag1 | |
| F000:2BB7 jmp l4 | |
| F000:2BBA exit: ; CODE XREF: diag_kbd_init+1BDj | |
| F000:2BBA ; diag_kbd_init+232j | |
| F000:2BBA call diag_init_seg4c_flag1 | |
| F000:2BBD push ds | |
| F000:2BBE mov ax, 40h ; '@' | |
| F000:2BC1 mov ds, ax ; ds = 0x40 | |
| F000:2BC3 mov byte ptr ds:seg40.kb_flag, 0 | |
| F000:2BC8 mov byte ptr ds:seg40.kb_flag_1, 0 | |
| F000:2BCD pop ds | |
| F000:2BCE mov cx, es:seg60_diag.old_int_1b_seg | |
| F000:2BD3 mov bx, es:seg60_diag.old_int_1b_off | |
| F000:2BD8 push ds | |
| F000:2BD9 sub ax, ax | |
| F000:2BDB mov ds, ax | |
| F000:2BDD mov ds:6Ch, bx ; restore offset of int 0x1b (control-break handler) | |
| F000:2BE1 mov ds:6Eh, cx ; restore segment of int 0x1b | |
| F000:2BE5 pop ds | |
| F000:2BE6 mov cx, 4000h | |
| F000:2BE9 delay: ; CODE XREF: diag_kbd_init:delayj | |
| F000:2BE9 loop delay | |
| F000:2BEB retn | |
| F000:2BEB diag_kbd_init endp | |
| F000:2BEC ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:2BEC ; ah = scancode | |
| F000:2BEC diag_kdb_eval_scancode proc near ; CODE XREF: diag_kbd_init:l19p | |
| F000:2BEC ; diag_kdb_eval_scancode:l85j | |
| F000:2BEC push ax | |
| F000:2BED mov cx, ax | |
| F000:2BEF cmp ch, 3Bh ; ';' ; f1? | |
| F000:2BF2 jnz short l0 | |
| F000:2BF4 jmp play_song_0 | |
| F000:2BF7 l0: ; CODE XREF: diag_kdb_eval_scancode+6j | |
| F000:2BF7 cmp ch, 3Ch ; '<' ; f2? | |
| F000:2BFA jnz short l1 | |
| F000:2BFC jmp play_song_1 | |
| F000:2BFF l1: ; CODE XREF: diag_kdb_eval_scancode+Ej | |
| F000:2BFF cmp ch, 3Dh ; '=' ; f3? | |
| F000:2C02 jnz short l2 | |
| F000:2C04 jmp set_palette_0 | |
| F000:2C07 l2: ; CODE XREF: diag_kdb_eval_scancode+16j | |
| F000:2C07 cmp ch, 3Eh ; '>' ; f4? | |
| F000:2C0A jnz short l3 | |
| F000:2C0C jmp set_palette_1 | |
| F000:2C0F l3: ; CODE XREF: diag_kdb_eval_scancode+1Ej | |
| F000:2C0F cmp ch, 3Fh ; '?' ; f5? | |
| F000:2C12 jnz short l4 | |
| F000:2C14 jmp border_black | |
| F000:2C17 l4: ; CODE XREF: diag_kdb_eval_scancode+26j | |
| F000:2C17 cmp ch, 40h ; '@' ; f6? | |
| F000:2C1A jnz short l5 | |
| F000:2C1C jmp border_yellow | |
| F000:2C1F l5: ; CODE XREF: diag_kdb_eval_scancode+2Ej | |
| F000:2C1F cmp ch, 41h ; 'A' | |
| F000:2C22 jnz short l6 ; f7? | |
| F000:2C24 jmp l43 | |
| F000:2C27 l6: ; CODE XREF: diag_kdb_eval_scancode+36j | |
| F000:2C27 cmp ch, 42h ; 'B' ; f8? | |
| F000:2C2A jnz short l7 | |
| F000:2C2C jmp l45 | |
| F000:2C2F l7: ; CODE XREF: diag_kdb_eval_scancode+3Ej | |
| F000:2C2F cmp ch, 44h ; 'D' ; f10? | |
| F000:2C32 jnz short l8 | |
| F000:2C34 jmp l48 | |
| F000:2C37 l8: ; CODE XREF: diag_kdb_eval_scancode+46j | |
| F000:2C37 cmp ch, 52h ; 'R' ; insert? | |
| F000:2C3A jnz short l9 | |
| F000:2C3C jmp l54 | |
| F000:2C3F l9: ; CODE XREF: diag_kdb_eval_scancode+4Ej | |
| F000:2C3F cmp ch, 53h ; 'S' ; delete? | |
| F000:2C42 jnz short l10 | |
| F000:2C44 jmp l54 | |
| F000:2C47 l10: ; CODE XREF: diag_kdb_eval_scancode+56j | |
| F000:2C47 cmp ch, 48h ; 'H' ; up? | |
| F000:2C4A jnz short l11 | |
| F000:2C4C jmp l52 | |
| F000:2C4F l11: ; CODE XREF: diag_kdb_eval_scancode+5Ej | |
| F000:2C4F cmp ch, 50h ; 'P' ; down? | |
| F000:2C52 jnz short l12 | |
| F000:2C54 jmp l53 | |
| F000:2C57 l12: ; CODE XREF: diag_kdb_eval_scancode+66j | |
| F000:2C57 cmp ch, 55h ; 'U' ; shift f2? | |
| F000:2C5A jnz short l13 | |
| F000:2C5C jmp border_cyan | |
| F000:2C5F l13: ; CODE XREF: diag_kdb_eval_scancode+6Ej | |
| F000:2C5F cmp ch, 56h ; 'V' ; shift f3? | |
| F000:2C62 jnz short l14 | |
| F000:2C64 jmp l39 | |
| F000:2C67 l14: ; CODE XREF: diag_kdb_eval_scancode+76j | |
| F000:2C67 cmp ch, 57h ; 'W' ; shift f4? | |
| F000:2C6A jnz short l15 | |
| F000:2C6C jmp border_light_gray | |
| F000:2C6F l15: ; CODE XREF: diag_kdb_eval_scancode+7Ej | |
| F000:2C6F cmp ch, 5Eh ; '^' ; ctrl f1? | |
| F000:2C72 jz short l21 | |
| F000:2C74 cmp ch, 68h ; 'h' ; alt f1? | |
| F000:2C77 jz short l22 | |
| F000:2C79 cmp ch, 70h ; 'p' ; alt f9? | |
| F000:2C7C jnz short l16 | |
| F000:2C7E jmp l27 | |
| F000:2C81 l16: ; CODE XREF: diag_kdb_eval_scancode+90j | |
| F000:2C81 cmp ch, 5Ch ; '\' ; shift f9? | |
| F000:2C84 jnz short l17 | |
| F000:2C86 jmp l30 | |
| F000:2C89 l17: ; CODE XREF: diag_kdb_eval_scancode+98j | |
| F000:2C89 jmp l54 | |
| F000:2C8C play_song_0: ; CODE XREF: diag_kdb_eval_scancode+8j | |
| F000:2C8C mov bx, offset song_kbd_f1 | |
| F000:2C8F play_song: ; CODE XREF: diag_kdb_eval_scancode+ACj | |
| F000:2C8F ; diag_kdb_eval_scancode+B1j | |
| F000:2C8F ; diag_kdb_eval_scancode+191j | |
| F000:2C8F call diag_music_setup_int_1c | |
| F000:2C92 jmp l69 | |
| F000:2C95 play_song_1: ; CODE XREF: diag_kdb_eval_scancode+10j | |
| F000:2C95 mov bx, offset song_kdb_f2 | |
| F000:2C98 jmp short play_song | |
| F000:2C9A l21: ; CODE XREF: diag_kdb_eval_scancode+86j | |
| F000:2C9A mov bx, offset song_kdb_f2 | |
| F000:2C9D jmp short play_song | |
| F000:2C9F l22: ; CODE XREF: diag_kdb_eval_scancode+8Bj | |
| F000:2C9F mov bl, 1 | |
| F000:2CA1 mov ah, 0Bh | |
| F000:2CA3 mov bh, 0 | |
| F000:2CA5 int 10h ; - VIDEO - SET COLOR PALETTE | |
| F000:2CA5 ; BH = 00h, BL = border color | |
| F000:2CA5 ; BH = 01h, BL = palette (0-3) | |
| F000:2CA7 cmp byte ptr es:seg60_diag.field_4D2, 0 | |
| F000:2CAD jnz short l24 | |
| F000:2CAF l23: ; CODE XREF: diag_kdb_eval_scancode+CFj | |
| F000:2CAF jmp l69 | |
| F000:2CB2 l24: ; CODE XREF: diag_kdb_eval_scancode+C1j | |
| F000:2CB2 mov bx, seg60_diag.field_363 | |
| F000:2CB5 mov ax, es:[bx] | |
| F000:2CB8 cmp ax, 726Ah | |
| F000:2CBB jnz short l23 | |
| F000:2CBD push dx | |
| F000:2CBE mov bh, 0 | |
| F000:2CC0 mov ah, 3 | |
| F000:2CC2 int 10h ; - VIDEO - READ CURSOR POSITION | |
| F000:2CC2 ; BH = page number | |
| F000:2CC2 ; Return: DH,DL = row,column, CH = cursor start line, CL = cursor end line | |
| F000:2CC4 push dx | |
| F000:2CC5 mov dx, 0C19h | |
| F000:2CC8 mov ah, 2 | |
| F000:2CCA mov bh, 0 | |
| F000:2CCC int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2CCC ; DH,DL = row, column (0,0 = upper left) | |
| F000:2CCC ; BH = page number | |
| F000:2CCE mov al, 6Ah ; 'j' | |
| F000:2CD0 mov byte ptr es:seg60_diag.avoid_swap_crt_cpu_page, 0 | |
| F000:2CD6 call diag_write_char_in_both_buffers | |
| F000:2CD9 mov dx, 0C1Bh | |
| F000:2CDC mov ah, 2 | |
| F000:2CDE mov bh, 0 | |
| F000:2CE0 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2CE0 ; DH,DL = row, column (0,0 = upper left) | |
| F000:2CE0 ; BH = page number | |
| F000:2CE2 mov al, 72h ; 'r' | |
| F000:2CE4 call diag_write_char_in_both_buffers | |
| F000:2CE7 mov byte ptr es:seg60_diag.avoid_swap_crt_cpu_page, 1 | |
| F000:2CED pop dx | |
| F000:2CEE mov ah, 2 | |
| F000:2CF0 mov bh, 0 | |
| F000:2CF2 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2CF2 ; DH,DL = row, column (0,0 = upper left) | |
| F000:2CF2 ; BH = page number | |
| F000:2CF4 pop dx | |
| F000:2CF5 mov bx, offset song_kbd_f1 | |
| F000:2CF8 call diag_music_setup_int_1c | |
| F000:2CFB mov cx, 9 | |
| F000:2CFE mov dx, 0 | |
| F000:2D01 l25: ; CODE XREF: diag_kdb_eval_scancode+12Aj | |
| F000:2D01 push cx | |
| F000:2D02 push dx | |
| F000:2D03 mov cx, 40 ; go down 40 pos | |
| F000:2D06 call diag_sprite_move_down_n_rows | |
| F000:2D09 pop dx | |
| F000:2D0A add dx, 4 | |
| F000:2D0D pop cx | |
| F000:2D0E push dx | |
| F000:2D0F mov ah, 0Bh | |
| F000:2D11 mov bx, cx | |
| F000:2D13 int 10h ; - VIDEO - SET COLOR PALETTE | |
| F000:2D13 ; BH = 00h, BL = border color | |
| F000:2D13 ; BH = 01h, BL = palette (0-3) | |
| F000:2D15 pop dx | |
| F000:2D16 loop l25 | |
| F000:2D18 mov ah, 1 | |
| F000:2D1A int 16h ; KEYBOARD - CHECK BUFFER, DO NOT CLEAR | |
| F000:2D1A ; Return: ZF clear if character in buffer | |
| F000:2D1A ; AH = scan code, AL = character | |
| F000:2D1A ; ZF set if no character in buffer | |
| F000:2D1C jz short l26 | |
| F000:2D1E mov ah, 0 | |
| F000:2D20 int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY | |
| F000:2D20 ; Return: AH = scan code, AL = character | |
| F000:2D22 cmp al, 54h ; 'T' | |
| F000:2D24 jnz short l26 | |
| F000:2D26 mov ah, 0 | |
| F000:2D28 int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY | |
| F000:2D28 ; Return: AH = scan code, AL = character | |
| F000:2D2A l26: ; CODE XREF: diag_kdb_eval_scancode+130j | |
| F000:2D2A ; diag_kdb_eval_scancode+138j | |
| F000:2D2A jmp short l31 | |
| F000:2D2C nop | |
| F000:2D2D l27: ; CODE XREF: diag_kdb_eval_scancode+92j | |
| F000:2D2D cmp byte ptr es:seg60_diag.field_4C9, 1 | |
| F000:2D33 jz short l28 | |
| F000:2D35 jmp l69 | |
| F000:2D38 l28: ; CODE XREF: diag_kdb_eval_scancode+147j | |
| F000:2D38 cmp byte ptr es:seg60_diag.field_4D0, 0 | |
| F000:2D3E jz short l29 | |
| F000:2D40 mov bx, 363h | |
| F000:2D43 mov al, es:[bx] | |
| F000:2D46 cmp al, 50h ; 'P' | |
| F000:2D48 jnz short l29 | |
| F000:2D4A push dx | |
| F000:2D4B mov bh, 0 | |
| F000:2D4D mov ah, 3 | |
| F000:2D4F int 10h ; - VIDEO - READ CURSOR POSITION | |
| F000:2D4F ; BH = page number | |
| F000:2D4F ; Return: DH,DL = row,column, CH = cursor start line, CL = cursor end line | |
| F000:2D51 push dx | |
| F000:2D52 mov dx, 0C15h ; row = 13, col = 21 | |
| F000:2D55 mov ah, 2 | |
| F000:2D57 mov bh, 0 | |
| F000:2D59 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2D59 ; DH,DL = row, column (0,0 = upper left) | |
| F000:2D59 ; BH = page number | |
| F000:2D5B mov al, 50h ; 'P' | |
| F000:2D5D mov byte ptr es:seg60_diag.avoid_swap_crt_cpu_page, 0 | |
| F000:2D63 call diag_write_char_in_both_buffers | |
| F000:2D66 mov byte ptr es:seg60_diag.avoid_swap_crt_cpu_page, 1 | |
| F000:2D6C pop dx | |
| F000:2D6D mov ah, 2 | |
| F000:2D6F mov bh, 0 | |
| F000:2D71 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2D71 ; DH,DL = row, column (0,0 = upper left) | |
| F000:2D71 ; BH = page number | |
| F000:2D73 pop dx | |
| F000:2D74 mov byte ptr es:seg60_diag.field_4D1, 1 | |
| F000:2D7A l29: ; CODE XREF: diag_kdb_eval_scancode+152j | |
| F000:2D7A ; diag_kdb_eval_scancode+15Cj | |
| F000:2D7A mov bx, offset song_kdb_f2 | |
| F000:2D7D jmp play_song | |
| F000:2D80 l30: ; CODE XREF: diag_kdb_eval_scancode+9Aj | |
| F000:2D80 cmp byte ptr es:seg60_diag.field_4E0, 0 | |
| F000:2D86 jnz short l32 | |
| F000:2D88 l31: ; CODE XREF: diag_kdb_eval_scancode:l26j | |
| F000:2D88 mov byte ptr es:seg60_diag.field_4CC, 2 | |
| F000:2D8E jmp l69 | |
| F000:2D91 l32: ; CODE XREF: diag_kdb_eval_scancode+19Aj | |
| F000:2D91 call diag_init_seg4c_flag1 | |
| F000:2D94 jmp l69 | |
| F000:2D97 set_palette_0: ; CODE XREF: diag_kdb_eval_scancode+18j | |
| F000:2D97 mov bl, 0 | |
| F000:2D99 jmp short set_palette | |
| F000:2D9B nop | |
| F000:2D9C set_palette_1: ; CODE XREF: diag_kdb_eval_scancode+20j | |
| F000:2D9C mov bl, 1 | |
| F000:2D9E set_palette: ; CODE XREF: diag_kdb_eval_scancode+1ADj | |
| F000:2D9E mov ah, 0Bh | |
| F000:2DA0 mov bh, 1 | |
| F000:2DA2 int 10h ; - VIDEO - SET COLOR PALETTE | |
| F000:2DA2 ; BH = 00h, BL = border color | |
| F000:2DA2 ; BH = 01h, BL = palette (0-3) | |
| F000:2DA4 jmp l69 | |
| F000:2DA7 border_yellow: ; CODE XREF: diag_kdb_eval_scancode+30j | |
| F000:2DA7 mov bl, 0Eh | |
| F000:2DA9 jmp short set_border_color | |
| F000:2DAB nop | |
| F000:2DAC border_black: ; CODE XREF: diag_kdb_eval_scancode+28j | |
| F000:2DAC mov bl, 0 | |
| F000:2DAE jmp short set_border_color | |
| F000:2DB0 nop | |
| F000:2DB1 border_cyan: ; CODE XREF: diag_kdb_eval_scancode+70j | |
| F000:2DB1 mov bl, 3 | |
| F000:2DB3 jmp short set_border_color | |
| F000:2DB5 nop | |
| F000:2DB6 l39: ; CODE XREF: diag_kdb_eval_scancode+78j | |
| F000:2DB6 cmp byte ptr es:seg60_diag.field_4C9, 1 | |
| F000:2DBC jnz short l44 | |
| F000:2DBE push es | |
| F000:2DBF mov ax, 4Ch ; 'L' | |
| F000:2DC2 mov es, ax ; es = 0x4c | |
| F000:2DC4 mov al, es:seg4c.flag1 | |
| F000:2DC8 pop es ; es = 0x60 | |
| F000:2DC9 cmp al, 0 | |
| F000:2DCB jz short l44 | |
| F000:2DCD cmp byte ptr es:seg60_diag.field_4D1, 0 | |
| F000:2DD3 jz short border_red | |
| F000:2DD5 mov bx, 363h | |
| F000:2DD8 mov al, es:[bx] | |
| F000:2DDB cmp al, 43h ; 'C' | |
| F000:2DDD jnz short border_red | |
| F000:2DDF mov byte ptr es:seg60_diag.field_4D2, 1 | |
| F000:2DE5 mov ah, 2 | |
| F000:2DE7 mov dx, 0C17h | |
| F000:2DEA mov bh, 0 | |
| F000:2DEC int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2DEC ; DH,DL = row, column (0,0 = upper left) | |
| F000:2DEC ; BH = page number | |
| F000:2DEE mov al, 43h ; 'C' | |
| F000:2DF0 call diag_write_char_in_both_buffers | |
| F000:2DF3 jmp l57 | |
| F000:2DF6 border_red: ; CODE XREF: diag_kdb_eval_scancode+1E7j | |
| F000:2DF6 ; diag_kdb_eval_scancode+1F1j | |
| F000:2DF6 mov bl, 4 ; red color | |
| F000:2DF8 jmp short set_border_color | |
| F000:2DFA nop | |
| F000:2DFB border_light_gray: ; CODE XREF: diag_kdb_eval_scancode+80j | |
| F000:2DFB mov bl, 7 ; light gray color | |
| F000:2DFD jmp short set_border_color | |
| F000:2DFF nop | |
| F000:2E00 set_border_color: ; CODE XREF: diag_kdb_eval_scancode+1BDj | |
| F000:2E00 ; diag_kdb_eval_scancode+1C2j | |
| F000:2E00 ; diag_kdb_eval_scancode+1C7j | |
| F000:2E00 ; diag_kdb_eval_scancode+20Cj | |
| F000:2E00 ; diag_kdb_eval_scancode+211j | |
| F000:2E00 mov ah, 0Bh | |
| F000:2E02 mov bh, 0 | |
| F000:2E04 int 10h ; - VIDEO - SET COLOR PALETTE | |
| F000:2E04 ; BH = 00h, BL = border color | |
| F000:2E04 ; BH = 01h, BL = palette (0-3) | |
| F000:2E06 jmp l69 | |
| F000:2E09 l43: ; CODE XREF: diag_kdb_eval_scancode+38j | |
| F000:2E09 cmp byte ptr es:seg60_diag.opt_k_enabled, 0 | |
| F000:2E0F jnz short l44 | |
| F000:2E11 call sub_F37C1 | |
| F000:2E14 mov byte ptr es:seg60_diag.avoid_swap_crt_cpu_page, 1 | |
| F000:2E1A mov byte ptr es:seg60_diag.field_4C6, 0 | |
| F000:2E20 pop ax | |
| F000:2E21 retn | |
| F000:2E22 l44: ; CODE XREF: diag_kdb_eval_scancode+1D0j | |
| F000:2E22 ; diag_kdb_eval_scancode+1DFj | |
| F000:2E22 ; diag_kdb_eval_scancode+223j | |
| F000:2E22 jmp l69 | |
| F000:2E25 l45: ; CODE XREF: diag_kdb_eval_scancode+40j | |
| F000:2E25 cmp byte ptr es:seg60_diag.avoid_swap_crt_cpu_page, 0 | |
| F000:2E2B jnz short l46 | |
| F000:2E2D jmp l69 | |
| F000:2E30 l46: ; CODE XREF: diag_kdb_eval_scancode+23Fj | |
| F000:2E30 cmp byte ptr es:seg60_diag.field_4C9, 0 | |
| F000:2E36 jz short l47 | |
| F000:2E38 mov byte ptr es:seg60_diag.field_4C9, 0 | |
| F000:2E3E push dx | |
| F000:2E3F mov dx, es:seg60_diag.field_6 | |
| F000:2E44 call diag_sprite_replace | |
| F000:2E47 mov dx, 411h | |
| F000:2E4A mov cx, 0Ch | |
| F000:2E4D call diag_sprite_move_down_n_rows | |
| F000:2E50 mov es:seg60_diag.field_6, dx | |
| F000:2E55 pop dx | |
| F000:2E56 jmp l69 | |
| F000:2E59 l47: ; CODE XREF: diag_kdb_eval_scancode+24Aj | |
| F000:2E59 mov byte ptr es:seg60_diag.field_4C9, 1 | |
| F000:2E5F jmp l69 | |
| F000:2E62 l48: ; CODE XREF: diag_kdb_eval_scancode+48j | |
| F000:2E62 cmp byte ptr es:seg60_diag.field_4C9, 0 | |
| F000:2E68 jz short l49 | |
| F000:2E6A jmp l69 | |
| F000:2E6D l49: ; CODE XREF: diag_kdb_eval_scancode+27Cj | |
| F000:2E6D mov ah, 3 | |
| F000:2E6F mov bh, 0 | |
| F000:2E71 int 10h ; - VIDEO - READ CURSOR POSITION | |
| F000:2E71 ; BH = page number | |
| F000:2E71 ; Return: DH,DL = row,column, CH = cursor start line, CL = cursor end line | |
| F000:2E73 inc dh | |
| F000:2E75 mov ah, 2 | |
| F000:2E77 mov bh, 0 | |
| F000:2E79 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2E79 ; DH,DL = row, column (0,0 = upper left) | |
| F000:2E79 ; BH = page number | |
| F000:2E7B mov al, 20h ; ' ' | |
| F000:2E7D call diag_write_char_in_both_buffers | |
| F000:2E80 mov ah, 2 | |
| F000:2E82 mov bh, 0 | |
| F000:2E84 mov dx, 3 | |
| F000:2E87 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2E87 ; DH,DL = row, column (0,0 = upper left) | |
| F000:2E87 ; BH = page number | |
| F000:2E89 mov cx, 23h ; '#' | |
| F000:2E8C mov bx, seg60_diag.field_363 | |
| F000:2E8F l50: ; CODE XREF: diag_kdb_eval_scancode+2ACj | |
| F000:2E8F mov al, es:[bx] | |
| F000:2E92 call diag_write_char_in_both_buffers | |
| F000:2E95 inc bx | |
| F000:2E96 inc dl ; next column | |
| F000:2E98 loop l50 | |
| F000:2E9A cmp byte ptr es:seg60_diag.field_4CE, 0 | |
| F000:2EA0 jz short l51 | |
| F000:2EA2 push es | |
| F000:2EA3 mov ax, 4Ch ; 'L' | |
| F000:2EA6 mov es, ax ; es = 0x4c | |
| F000:2EA8 mov al, es:seg4c.flag1 | |
| F000:2EAC pop es | |
| F000:2EAD cmp al, 0 | |
| F000:2EAF jz short l51 | |
| F000:2EB1 mov bx, seg60_diag.field_363 | |
| F000:2EB4 mov al, es:[bx] | |
| F000:2EB7 cmp al, 4Dh ; 'M' | |
| F000:2EB9 jnz short l51 | |
| F000:2EBB mov byte ptr es:seg60_diag.field_4CF, 1 | |
| F000:2EC1 mov ah, 2 | |
| F000:2EC3 mov dx, 0C11h | |
| F000:2EC6 mov bh, 0 | |
| F000:2EC8 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2EC8 ; DH,DL = row, column (0,0 = upper left) | |
| F000:2EC8 ; BH = page number | |
| F000:2ECA mov al, 4Dh ; 'M' | |
| F000:2ECC call diag_write_char_in_both_buffers | |
| F000:2ECF l51: ; CODE XREF: diag_kdb_eval_scancode+2B4j | |
| F000:2ECF ; diag_kdb_eval_scancode+2C3j | |
| F000:2ECF ; diag_kdb_eval_scancode+2CDj | |
| F000:2ECF jmp l57 | |
| F000:2ED2 l52: ; CODE XREF: diag_kdb_eval_scancode+60j | |
| F000:2ED2 cmp byte ptr es:seg60_diag.field_4C9, 0 | |
| F000:2ED8 jz short l54 | |
| F000:2EDA push dx | |
| F000:2EDB mov dx, es:seg60_diag.field_6 | |
| F000:2EE0 call diag_move_sprite_with_cursor | |
| F000:2EE3 mov es:seg60_diag.field_6, dx | |
| F000:2EE8 pop dx | |
| F000:2EE9 jmp l69 | |
| F000:2EEC l53: ; CODE XREF: diag_kdb_eval_scancode+68j | |
| F000:2EEC cmp byte ptr es:seg60_diag.field_4C9, 0 | |
| F000:2EF2 jz short l54 | |
| F000:2EF4 push dx | |
| F000:2EF5 mov dx, es:seg60_diag.field_6 | |
| F000:2EFA call diag_move_sprite_with_cursor | |
| F000:2EFD mov es:seg60_diag.field_6, dx | |
| F000:2F02 pop dx | |
| F000:2F03 jmp l69 | |
| F000:2F06 l54: ; CODE XREF: diag_kdb_eval_scancode+50j | |
| F000:2F06 ; diag_kdb_eval_scancode+58j | |
| F000:2F06 ; diag_kdb_eval_scancode:l17j | |
| F000:2F06 ; diag_kdb_eval_scancode+2ECj | |
| F000:2F06 ; diag_kdb_eval_scancode+306j | |
| F000:2F06 cmp ch, 1Ch ; enter? | |
| F000:2F09 jnz short l58 | |
| F000:2F0B cmp byte ptr es:seg60_diag.field_4C9, 0 | |
| F000:2F11 jz short l55 | |
| F000:2F13 jmp l69 | |
| F000:2F16 l55: ; CODE XREF: diag_kdb_eval_scancode+325j | |
| F000:2F16 mov ah, 3 ; enter was pressed | |
| F000:2F18 mov bh, 0 | |
| F000:2F1A int 10h ; - VIDEO - READ CURSOR POSITION | |
| F000:2F1A ; BH = page number | |
| F000:2F1A ; Return: DH,DL = row,column, CH = cursor start line, CL = cursor end line | |
| F000:2F1C inc dh ; next row | |
| F000:2F1E mov ah, 2 ; and update cursor position | |
| F000:2F20 mov bh, 0 | |
| F000:2F22 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2F22 ; DH,DL = row, column (0,0 = upper left) | |
| F000:2F22 ; BH = page number | |
| F000:2F24 mov al, 20h ; ' ' ; print space | |
| F000:2F26 call diag_write_char_in_both_buffers | |
| F000:2F29 mov cx, 23h ; '#' | |
| F000:2F2C mov ah, 2 | |
| F000:2F2E mov bh, 0 ; page 0 | |
| F000:2F30 mov dx, 3 ; row 0, col 3 | |
| F000:2F33 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2F33 ; DH,DL = row, column (0,0 = upper left) | |
| F000:2F33 ; BH = page number | |
| F000:2F35 mov bx, 363h ; page 3 | |
| F000:2F38 l56: ; CODE XREF: diag_kdb_eval_scancode+35Bj | |
| F000:2F38 mov ah, 8 | |
| F000:2F3A int 10h ; - VIDEO - READ ATTRIBUTES/CHARACTER AT CURSOR POSITION | |
| F000:2F3A ; BH = display page | |
| F000:2F3A ; Return: AL = character | |
| F000:2F3A ; AH = attribute of character (alpha modes) | |
| F000:2F3C mov es:[bx], al ; save char | |
| F000:2F3F mov al, 20h ; ' ' ; write space | |
| F000:2F41 call diag_write_char_in_both_buffers | |
| F000:2F44 inc bx | |
| F000:2F45 inc dl ; next column | |
| F000:2F47 loop l56 | |
| F000:2F49 cmp byte ptr es:seg60_diag.field_4E1, 0B3h ; '³' | |
| F000:2F4F jnz short l57 | |
| F000:2F51 mov bx, seg60_diag.field_363 | |
| F000:2F54 mov al, es:[bx] | |
| F000:2F57 cmp al, 49h ; 'I' | |
| F000:2F59 jnz short l57 | |
| F000:2F5B mov byte ptr es:seg60_diag.field_4CD, 1 | |
| F000:2F61 mov ah, 2 | |
| F000:2F63 mov dx, 0C0Dh ; row = 12, col = 13 | |
| F000:2F66 mov bh, 0 | |
| F000:2F68 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2F68 ; DH,DL = row, column (0,0 = upper left) | |
| F000:2F68 ; BH = page number | |
| F000:2F6A mov al, 49h ; 'I' | |
| F000:2F6C call diag_write_char_in_both_buffers | |
| F000:2F6F l57: ; CODE XREF: diag_kdb_eval_scancode+207j | |
| F000:2F6F ; diag_kdb_eval_scancode:l51j | |
| F000:2F6F ; diag_kdb_eval_scancode+363j | |
| F000:2F6F ; diag_kdb_eval_scancode+36Dj | |
| F000:2F6F mov ah, 2 | |
| F000:2F71 mov dx, 3 | |
| F000:2F74 mov bh, 0 | |
| F000:2F76 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2F76 ; DH,DL = row, column (0,0 = upper left) | |
| F000:2F76 ; BH = page number | |
| F000:2F78 call sub_F31C6 | |
| F000:2F7B jmp l69 | |
| F000:2F7E l58: ; CODE XREF: diag_kdb_eval_scancode+31Dj | |
| F000:2F7E cmp ch, 0Eh | |
| F000:2F81 jnz short l62 | |
| F000:2F83 cmp byte ptr es:seg60_diag.field_4C9, 0 | |
| F000:2F89 jnz short l59 | |
| F000:2F8B mov ah, 3 | |
| F000:2F8D mov bh, 0 | |
| F000:2F8F int 10h ; - VIDEO - READ CURSOR POSITION | |
| F000:2F8F ; BH = page number | |
| F000:2F8F ; Return: DH,DL = row,column, CH = cursor start line, CL = cursor end line | |
| F000:2F91 cmp dl, 3 | |
| F000:2F94 jg short l60 | |
| F000:2F96 l59: ; CODE XREF: diag_kdb_eval_scancode+39Dj | |
| F000:2F96 jmp l69 | |
| F000:2F99 l60: ; CODE XREF: diag_kdb_eval_scancode+3A8j | |
| F000:2F99 inc dh | |
| F000:2F9B mov ah, 2 | |
| F000:2F9D mov bh, 0 | |
| F000:2F9F int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2F9F ; DH,DL = row, column (0,0 = upper left) | |
| F000:2F9F ; BH = page number | |
| F000:2FA1 mov al, 20h ; ' ' | |
| F000:2FA3 call diag_write_char_in_both_buffers | |
| F000:2FA6 dec dh | |
| F000:2FA8 cmp dl, 3 | |
| F000:2FAB jz short l61 | |
| F000:2FAD dec dl | |
| F000:2FAF l61: ; CODE XREF: diag_kdb_eval_scancode+3BFj | |
| F000:2FAF mov ah, 2 | |
| F000:2FB1 mov bh, 0 | |
| F000:2FB3 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2FB3 ; DH,DL = row, column (0,0 = upper left) | |
| F000:2FB3 ; BH = page number | |
| F000:2FB5 mov al, 20h ; ' ' | |
| F000:2FB7 call diag_write_char_in_both_buffers | |
| F000:2FBA mov ah, 2 | |
| F000:2FBC mov bh, 0 | |
| F000:2FBE int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2FBE ; DH,DL = row, column (0,0 = upper left) | |
| F000:2FBE ; BH = page number | |
| F000:2FC0 call sub_F31C6 | |
| F000:2FC3 jmp l69 | |
| F000:2FC6 l62: ; CODE XREF: diag_kdb_eval_scancode+395j | |
| F000:2FC6 cmp ch, 4Bh ; 'K' | |
| F000:2FC9 jnz short l65 | |
| F000:2FCB cmp byte ptr es:seg60_diag.field_4C9, 0 | |
| F000:2FD1 jz short l63 | |
| F000:2FD3 push dx | |
| F000:2FD4 mov dx, es:seg60_diag.field_6 | |
| F000:2FD9 call diag_move_sprite_with_cursor | |
| F000:2FDC mov es:seg60_diag.field_6, dx | |
| F000:2FE1 pop dx | |
| F000:2FE2 jmp l69 | |
| F000:2FE5 l63: ; CODE XREF: diag_kdb_eval_scancode+3E5j | |
| F000:2FE5 mov ah, 3 | |
| F000:2FE7 mov bh, 0 | |
| F000:2FE9 int 10h ; - VIDEO - READ CURSOR POSITION | |
| F000:2FE9 ; BH = page number | |
| F000:2FE9 ; Return: DH,DL = row,column, CH = cursor start line, CL = cursor end line | |
| F000:2FEB inc dh | |
| F000:2FED mov ah, 2 | |
| F000:2FEF mov bh, 0 | |
| F000:2FF1 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:2FF1 ; DH,DL = row, column (0,0 = upper left) | |
| F000:2FF1 ; BH = page number | |
| F000:2FF3 mov al, 20h ; ' ' | |
| F000:2FF5 call diag_write_char_in_both_buffers | |
| F000:2FF8 cmp dl, 3 | |
| F000:2FFB jz short l64 | |
| F000:2FFD dec dl | |
| F000:2FFF l64: ; CODE XREF: diag_kdb_eval_scancode+40Fj | |
| F000:2FFF mov ah, 2 | |
| F000:3001 mov bh, 0 | |
| F000:3003 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:3003 ; DH,DL = row, column (0,0 = upper left) | |
| F000:3003 ; BH = page number | |
| F000:3005 mov al, 16h | |
| F000:3007 call diag_write_char_in_both_buffers | |
| F000:300A dec dh | |
| F000:300C mov ah, 2 | |
| F000:300E mov bh, 0 | |
| F000:3010 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:3010 ; DH,DL = row, column (0,0 = upper left) | |
| F000:3010 ; BH = page number | |
| F000:3012 jmp short l69 | |
| F000:3014 nop | |
| F000:3015 l65: ; CODE XREF: diag_kdb_eval_scancode+3DDj | |
| F000:3015 cmp ch, 4Dh ; 'M' | |
| F000:3018 jnz short l68 | |
| F000:301A cmp byte ptr es:4C9h, 0 | |
| F000:3020 jz short l66 | |
| F000:3022 push dx | |
| F000:3023 mov dx, es:seg60_diag.field_6 | |
| F000:3028 call diag_move_sprite_with_cursor | |
| F000:302B mov es:seg60_diag.field_6, dx | |
| F000:3030 pop dx | |
| F000:3031 jmp short l69 | |
| F000:3033 nop | |
| F000:3034 l66: ; CODE XREF: diag_kdb_eval_scancode+434j | |
| F000:3034 mov ah, 3 | |
| F000:3036 mov bh, 0 | |
| F000:3038 int 10h ; - VIDEO - READ CURSOR POSITION | |
| F000:3038 ; BH = page number | |
| F000:3038 ; Return: DH,DL = row,column, CH = cursor start line, CL = cursor end line | |
| F000:303A cmp dl, 23h ; '#' | |
| F000:303D jz short l67 | |
| F000:303F inc dh | |
| F000:3041 mov ah, 2 | |
| F000:3043 mov bh, 0 | |
| F000:3045 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:3045 ; DH,DL = row, column (0,0 = upper left) | |
| F000:3045 ; BH = page number | |
| F000:3047 mov al, 20h ; ' ' | |
| F000:3049 call diag_write_char_in_both_buffers | |
| F000:304C inc dl | |
| F000:304E mov al, 16h | |
| F000:3050 call diag_write_char_in_both_buffers | |
| F000:3053 dec dh | |
| F000:3055 mov ah, 2 | |
| F000:3057 mov bh, 0 | |
| F000:3059 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:3059 ; DH,DL = row, column (0,0 = upper left) | |
| F000:3059 ; BH = page number | |
| F000:305B l67: ; CODE XREF: diag_kdb_eval_scancode+451j | |
| F000:305B jmp short l69 | |
| F000:305D l68: ; CODE XREF: diag_kdb_eval_scancode+42Cj | |
| F000:305D cmp byte ptr es:seg60_diag.field_4C9, 0 | |
| F000:3063 jnz short l69 | |
| F000:3065 cmp cl, 0 | |
| F000:3068 jz short l69 | |
| F000:306A cmp dl, 23h ; '#' | |
| F000:306D jz short l69 | |
| F000:306F cmp cx, 0Dh | |
| F000:3072 jz short l69 | |
| F000:3074 cmp cx, 0Ah | |
| F000:3077 jz short l69 | |
| F000:3079 cmp cx, 8 | |
| F000:307C jz short l69 | |
| F000:307E mov al, cl | |
| F000:3080 call diag_write_char_in_both_buffers | |
| F000:3083 call sub_F31C6 | |
| F000:3086 l69: ; CODE XREF: diag_kdb_eval_scancode+A6j | |
| F000:3086 ; diag_kdb_eval_scancode:l23j | |
| F000:3086 ; diag_kdb_eval_scancode+149j | |
| F000:3086 ; diag_kdb_eval_scancode+1A2j | |
| F000:3086 ; diag_kdb_eval_scancode+1A8j | |
| F000:3086 ; diag_kdb_eval_scancode+1B8j ... | |
| F000:3086 mov bx, 2B7h | |
| F000:3089 pop ax | |
| F000:308A test ah, 80h | |
| F000:308D jz short l70 | |
| F000:308F jmp l80 | |
| F000:3092 l70: ; CODE XREF: diag_kdb_eval_scancode+4A1j | |
| F000:3092 cmp ah, 54h ; 'T' | |
| F000:3095 jle short l71 | |
| F000:3097 jmp l80 | |
| F000:309A l71: ; CODE XREF: diag_kdb_eval_scancode+4A9j | |
| F000:309A mov al, ah | |
| F000:309C mov ah, 0 | |
| F000:309E shl ax, 1 | |
| F000:30A0 add ax, bx | |
| F000:30A2 mov bx, ax | |
| F000:30A4 mov ax, es:[bx] | |
| F000:30A7 cmp ax, 0 | |
| F000:30AA jnz short l72 | |
| F000:30AC jmp l80 | |
| F000:30AF l72: ; CODE XREF: diag_kdb_eval_scancode+4BEj | |
| F000:30AF mov word ptr es:[bx], 0 | |
| F000:30B4 push dx | |
| F000:30B5 push ax | |
| F000:30B6 mov dx, es:6 | |
| F000:30BB cmp byte ptr es:seg60_diag.field_4C6, 0 | |
| F000:30C1 jnz short l73 | |
| F000:30C3 call diag_sprite_replace | |
| F000:30C6 call sub_F3483 | |
| F000:30C9 l73: ; CODE XREF: diag_kdb_eval_scancode+4D5j | |
| F000:30C9 pop ax | |
| F000:30CA push ax | |
| F000:30CB cmp ax, 1B02h | |
| F000:30CE jnz short l74 | |
| F000:30D0 jmp short set_border_red_palette_1 | |
| F000:30D2 nop | |
| F000:30D3 l74: ; CODE XREF: diag_kdb_eval_scancode+4E2j | |
| F000:30D3 cmp ax, 1B20h | |
| F000:30D6 jz short l75 | |
| F000:30D8 cmp ax, 2709h | |
| F000:30DB jz short set_border_blue_palette_0 | |
| F000:30DD jmp short l78 | |
| F000:30DF nop | |
| F000:30E0 l75: ; CODE XREF: diag_kdb_eval_scancode+4EAj | |
| F000:30E0 mov ah, 0Bh | |
| F000:30E2 mov bh, 0 | |
| F000:30E4 mov bl, 2 | |
| F000:30E6 int 10h ; - VIDEO - SET COLOR PALETTE | |
| F000:30E6 ; BH = 00h, BL = border color | |
| F000:30E6 ; BH = 01h, BL = palette (0-3) | |
| F000:30E8 mov ah, 0Bh | |
| F000:30EA mov bh, 1 | |
| F000:30EC mov bl, 1 | |
| F000:30EE int 10h ; - VIDEO - SET COLOR PALETTE | |
| F000:30EE ; BH = 00h, BL = border color | |
| F000:30EE ; BH = 01h, BL = palette (0-3) | |
| F000:30F0 jmp short l78 | |
| F000:30F2 nop | |
| F000:30F3 set_border_red_palette_1: ; CODE XREF: diag_kdb_eval_scancode+4E4j | |
| F000:30F3 mov ah, 0Bh | |
| F000:30F5 mov bh, 0 | |
| F000:30F7 mov bl, 4 | |
| F000:30F9 int 10h ; - VIDEO - SET COLOR PALETTE | |
| F000:30F9 ; BH = 00h, BL = border color | |
| F000:30F9 ; BH = 01h, BL = palette (0-3) | |
| F000:30FB mov ah, 0Bh | |
| F000:30FD mov bh, 1 | |
| F000:30FF mov bl, 1 | |
| F000:3101 int 10h ; - VIDEO - SET COLOR PALETTE | |
| F000:3101 ; BH = 00h, BL = border color | |
| F000:3101 ; BH = 01h, BL = palette (0-3) | |
| F000:3103 jmp short l78 | |
| F000:3105 nop | |
| F000:3106 set_border_blue_palette_0: ; CODE XREF: diag_kdb_eval_scancode+4EFj | |
| F000:3106 mov ah, 0Bh | |
| F000:3108 mov bh, 0 | |
| F000:310A mov bl, 1 | |
| F000:310C int 10h ; - VIDEO - SET COLOR PALETTE | |
| F000:310C ; BH = 00h, BL = border color | |
| F000:310C ; BH = 01h, BL = palette (0-3) | |
| F000:310E mov ah, 0Bh | |
| F000:3110 mov bh, 1 | |
| F000:3112 mov bl, 0 | |
| F000:3114 int 10h ; - VIDEO - SET COLOR PALETTE | |
| F000:3114 ; BH = 00h, BL = border color | |
| F000:3114 ; BH = 01h, BL = palette (0-3) | |
| F000:3116 l78: ; CODE XREF: diag_kdb_eval_scancode+4F1j | |
| F000:3116 ; diag_kdb_eval_scancode+504j | |
| F000:3116 ; diag_kdb_eval_scancode+517j | |
| F000:3116 pop ax | |
| F000:3117 call sub_F3380 | |
| F000:311A mov cx, 4000h | |
| F000:311D delay: ; CODE XREF: diag_kdb_eval_scancode:delayj | |
| F000:311D loop delay | |
| F000:311F mov al, 9 | |
| F000:3121 out 61h, al | |
| F000:3123 mov ah, 0Bh | |
| F000:3125 mov bh, 0 | |
| F000:3127 mov bl, 0 | |
| F000:3129 int 10h ; - VIDEO - SET COLOR PALETTE | |
| F000:3129 ; BH = 00h, BL = border color | |
| F000:3129 ; BH = 01h, BL = palette (0-3) | |
| F000:312B mov ah, 0Bh | |
| F000:312D mov bh, 1 | |
| F000:312F mov bl, 0 | |
| F000:3131 int 10h ; - VIDEO - SET COLOR PALETTE | |
| F000:3131 ; BH = 00h, BL = border color | |
| F000:3131 ; BH = 01h, BL = palette (0-3) | |
| F000:3133 mov byte ptr es:seg60_diag.field_4C6, 1 | |
| F000:3139 pop dx | |
| F000:313A call sub_F319D | |
| F000:313D cmp byte ptr es:seg60_diag.avoid_swap_crt_cpu_page, 1 | |
| F000:3143 jz short l86 | |
| F000:3145 l80: ; CODE XREF: diag_kdb_eval_scancode+4A3j | |
| F000:3145 ; diag_kdb_eval_scancode+4ABj | |
| F000:3145 ; diag_kdb_eval_scancode+4C0j | |
| F000:3145 ; diag_kdb_eval_scancode+566j | |
| F000:3145 ; diag_kdb_eval_scancode+56Dj | |
| F000:3145 ; diag_kdb_eval_scancode+574j ... | |
| F000:3145 mov ah, 1 | |
| F000:3147 int 16h ; KEYBOARD - CHECK BUFFER, DO NOT CLEAR | |
| F000:3147 ; Return: ZF clear if character in buffer | |
| F000:3147 ; AH = scan code, AL = character | |
| F000:3147 ; ZF set if no character in buffer | |
| F000:3149 jz short l86 | |
| F000:314B mov ah, 0 | |
| F000:314D int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY | |
| F000:314D ; Return: AH = scan code, AL = character | |
| F000:314F cmp ah, 41h ; 'A' | |
| F000:3152 jz short l80 | |
| F000:3154 cmp ax, 240Ah | |
| F000:3157 jnz short l81 | |
| F000:3159 jmp short l80 | |
| F000:315B l81: ; CODE XREF: diag_kdb_eval_scancode+56Bj | |
| F000:315B cmp ax, 320Dh | |
| F000:315E jnz short l82 | |
| F000:3160 jmp short l80 | |
| F000:3162 l82: ; CODE XREF: diag_kdb_eval_scancode+572j | |
| F000:3162 cmp ax, 2308h | |
| F000:3165 jnz short l83 | |
| F000:3167 jmp short l80 | |
| F000:3169 l83: ; CODE XREF: diag_kdb_eval_scancode+579j | |
| F000:3169 cmp ax, 2207h | |
| F000:316C jnz short l84 | |
| F000:316E jmp short l80 | |
| F000:3170 l84: ; CODE XREF: diag_kdb_eval_scancode+580j | |
| F000:3170 cmp ah, 5Dh ; ']' | |
| F000:3173 jnz short l85 | |
| F000:3175 mov byte ptr es:seg60_diag.field_4CC, 1 | |
| F000:317B l85: ; CODE XREF: diag_kdb_eval_scancode+587j | |
| F000:317B jmp diag_kdb_eval_scancode | |
| F000:317E l86: ; CODE XREF: diag_kdb_eval_scancode+557j | |
| F000:317E ; diag_kdb_eval_scancode+55Dj | |
| F000:317E cmp byte ptr es:seg60_diag.field_4C6, 0 | |
| F000:3184 jz short lret | |
| F000:3186 push dx | |
| F000:3187 mov dx, 411h | |
| F000:318A mov cx, 0Ch | |
| F000:318D call diag_sprite_move_down_n_rows | |
| F000:3190 mov es:6, dx | |
| F000:3195 pop dx | |
| F000:3196 mov byte ptr es:seg60_diag.field_4C6, 0 | |
| F000:319C lret: ; CODE XREF: diag_kdb_eval_scancode+598j | |
| F000:319C retn | |
| F000:319C diag_kdb_eval_scancode endp | |
| F000:319D ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:319D sub_F319D proc near ; CODE XREF: diag_kdb_eval_scancode+54Ep | |
| F000:319D push dx | |
| F000:319E mov cx, 1 | |
| F000:31A1 l0: ; CODE XREF: sub_F319D+1Fj | |
| F000:31A1 mov al, cl | |
| F000:31A3 mov ah, 0 | |
| F000:31A5 mov bx, 2B7h | |
| F000:31A8 shl ax, 1 | |
| F000:31AA add ax, bx | |
| F000:31AC mov bx, ax | |
| F000:31AE mov dx, es:[bx] | |
| F000:31B1 cmp dh, 0 | |
| F000:31B4 jnz short l2 | |
| F000:31B6 cmp cx, 54h ; 'T' | |
| F000:31B9 jz short l1 | |
| F000:31BB inc cx | |
| F000:31BC jmp short l0 | |
| F000:31BE l1: ; CODE XREF: sub_F319D+1Cj | |
| F000:31BE mov byte ptr es:seg60_diag.avoid_swap_crt_cpu_page, 1 | |
| F000:31C4 l2: ; CODE XREF: sub_F319D+17j | |
| F000:31C4 pop dx | |
| F000:31C5 retn | |
| F000:31C5 sub_F319D endp | |
| F000:31C6 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:31C6 sub_F31C6 proc near ; CODE XREF: diag_kbd_init+CAp | |
| F000:31C6 ; diag_kbd_init+DBp | |
| F000:31C6 ; diag_kdb_eval_scancode+38Cp | |
| F000:31C6 ; diag_kdb_eval_scancode+3D4p | |
| F000:31C6 ; diag_kdb_eval_scancode+497p | |
| F000:31C6 mov ah, 3 | |
| F000:31C8 mov bh, 0 | |
| F000:31CA int 10h ; - VIDEO - READ CURSOR POSITION | |
| F000:31CA ; BH = page number | |
| F000:31CA ; Return: DH,DL = row,column, CH = cursor start line, CL = cursor end line | |
| F000:31CC inc dh | |
| F000:31CE dec dl | |
| F000:31D0 mov ah, 2 | |
| F000:31D2 mov bh, 0 | |
| F000:31D4 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:31D4 ; DH,DL = row, column (0,0 = upper left) | |
| F000:31D4 ; BH = page number | |
| F000:31D6 mov al, 20h ; ' ' | |
| F000:31D8 call diag_write_char_in_both_buffers | |
| F000:31DB cmp dl, 25h ; '%' | |
| F000:31DE jnz short l0 | |
| F000:31E0 mov dl, 2 | |
| F000:31E2 l0: ; CODE XREF: sub_F31C6+18j | |
| F000:31E2 inc dl | |
| F000:31E4 mov ah, 2 | |
| F000:31E6 mov bh, 0 | |
| F000:31E8 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:31E8 ; DH,DL = row, column (0,0 = upper left) | |
| F000:31E8 ; BH = page number | |
| F000:31EA mov al, 16h | |
| F000:31EC call diag_write_char_in_both_buffers | |
| F000:31EF dec dh | |
| F000:31F1 mov ah, 2 | |
| F000:31F3 mov bh, 0 | |
| F000:31F5 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:31F5 ; DH,DL = row, column (0,0 = upper left) | |
| F000:31F5 ; BH = page number | |
| F000:31F7 retn | |
| F000:31F7 sub_F31C6 endp | |
| F000:31F8 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:31F8 ; int 0x1b handler | |
| F000:31F8 diag_control_break_handler proc far ; DATA XREF: diag_kbd_init+11o | |
| F000:31F8 push es | |
| F000:31F9 mov ax, 60h ; '`' | |
| F000:31FC mov es, ax ; es = 0x60 | |
| F000:31FE mov byte ptr es:seg60_diag.ctrl_break_pressed, 0FFh | |
| F000:3204 pop es ; restore es | |
| F000:3205 iret | |
| F000:3205 diag_control_break_handler endp | |
| F000:3206 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:3206 diag_init_seg4c_flag1 proc near ; CODE XREF: mini_welcome_init+118p | |
| F000:3206 ; diag_kbd_init+234p | |
| F000:3206 ; diag_kbd_init:exitp | |
| F000:3206 ; diag_kdb_eval_scancode:l32p | |
| F000:3206 ; sub_F3380+3Fp | |
| F000:3206 ; sub_F3380:l7p | |
| F000:3206 push es | |
| F000:3207 mov ax, 4Ch ; 'L' | |
| F000:320A mov es, ax ; es = 0x4c | |
| F000:320C cmp byte ptr es:seg4c.flag1, 0 | |
| F000:3212 jz short l0 | |
| F000:3214 mov byte ptr es:seg4c.flag1, 2 | |
| F000:321A l0: ; CODE XREF: diag_init_seg4c_flag1+Cj | |
| F000:321A pop es ; restore es | |
| F000:321B retn | |
| F000:321B diag_init_seg4c_flag1 endp | |
| F000:321C diag_msg_for_kdb_k db 0, 0, 2, 1Bh, 4, 1Bh, 6, 1Bh, 8, 1Bh, 0Ah, 1Bh, 0Ch | |
| F000:321C ; DATA XREF: diag_kbd_init:l0o | |
| F000:321C db 1Bh, 0Eh, 1Bh, 10h, 1Bh, 12h, 1Bh, 14h, 1Bh, 16h, 1Bh | |
| F000:321C db 18h, 1Bh, 1Ah, 1Bh, 1Ch, 1Bh, 2, 1Eh, 5, 1Eh, 7, 1Eh | |
| F000:321C db 9, 1Eh, 0Bh, 1Eh, 0Dh, 1Eh, 0Fh, 1Eh, 11h, 1Eh, 13h | |
| F000:321C db 1Eh, 15h, 1Eh, 17h, 1Eh, 19h, 1Eh, 1Bh, 1Eh, 1Dh, 1Eh | |
| F000:321C db 2, 21h, 6, 21h, 8, 21h, 0Ah, 21h, 0Ch, 21h, 0Eh, 21h | |
| F000:321C db 10h, 21h, 12h, 21h, 14h, 21h, 16h, 21h, 18h, 21h, 1Ah | |
| F000:321C db 21h, 0, 0, 4, 24h, 0, 0, 7, 24h, 9, 24h, 0Bh, 24h, 0Dh | |
| F000:321C db 24h, 0Fh, 24h, 11h, 24h, 13h, 24h, 15h, 24h, 17h, 24h | |
| F000:321C db 19h, 24h, 1Bh, 24h, 0, 0, 9, 27h, 11h, 27h, 18h, 27h | |
| F000:321C db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | |
| F000:321C db 0, 0, 0, 0, 0, 0, 0, 0, 20h, 21h, 0, 0, 0, 0, 1Fh, 24h | |
| F000:321C db 0, 0, 21h, 24h, 0, 0, 0, 0, 20h, 27h, 0, 0, 1Ah, 27h | |
| F000:321C db 1Ch, 27h, 20h, 1Bh, 0, 0 | |
| F000:32C8 diag_msg_for_kdb_j db 0, 0, 0Ah, 1Bh, 0Bh, 1Bh, 0Ch, 1Bh, 0Dh, 1Bh, 0Eh, 1Bh | |
| F000:32C8 ; DATA XREF: diag_kbd_init+86o | |
| F000:32C8 db 0Fh, 1Bh, 10h, 1Bh, 11h, 1Bh, 12h, 1Bh, 13h, 1Bh, 14h | |
| F000:32C8 db 1Bh, 15h, 1Bh, 16h, 1Bh, 18h, 1Bh, 0Ah, 1Dh, 0Bh, 1Dh | |
| F000:32C8 db 0Ch, 1Dh, 0Dh, 1Dh, 0Eh, 1Dh, 0Fh, 1Dh, 10h, 1Dh, 11h | |
| F000:32C8 db 1Dh, 12h, 1Dh, 13h, 1Dh, 14h, 1Dh, 15h, 1Dh, 16h, 1Dh | |
| F000:32C8 db 18h, 1Dh, 0Ah, 1Fh, 0Ch, 1Fh, 0Dh, 1Fh, 0Eh, 1Fh, 0Fh | |
| F000:32C8 db 1Fh, 10h, 1Fh, 11h, 1Fh, 12h, 1Fh, 13h, 1Fh, 14h, 1Fh | |
| F000:32C8 db 15h, 1Fh, 16h, 1Fh, 17h, 1Fh, 0Ah, 21h, 0Bh, 21h, 0Ch | |
| F000:32C8 db 21h, 0Dh, 21h, 0Eh, 21h, 0Fh, 21h, 10h, 21h, 11h, 21h | |
| F000:32C8 db 12h, 21h, 13h, 21h, 14h, 21h, 15h, 21h, 17h, 21h, 18h | |
| F000:32C8 db 21h, 0Bh, 23h, 11h, 23h, 17h, 23h, 7, 1Bh, 8, 1Bh, 7 | |
| F000:32C8 db 1Dh, 8, 1Dh, 7, 1Fh, 8, 1Fh, 7, 21h, 8, 21h, 7, 23h | |
| F000:32C8 db 8, 23h, 1Ah, 1Bh, 1Ch, 1Bh, 19h, 1Dh, 1Ah, 1Dh, 1Bh | |
| F000:32C8 db 1Dh, 1Ch, 1Dh, 19h, 1Fh, 1Ah, 1Fh, 1Bh, 1Fh, 1Ch, 1Fh | |
| F000:32C8 db 19h, 21h, 1Ah, 21h, 1Bh, 21h, 19h, 23h, 1Bh, 23h, 0 | |
| F000:32C8 db 0, 0, 0 | |
| F000:3374 db 0 | |
| F000:3375 db 0 | |
| F000:3376 db 0 | |
| F000:3377 db 0 | |
| F000:3378 db 0 | |
| F000:3379 db 0 | |
| F000:337A db 0 | |
| F000:337B db 0 | |
| F000:337C db 0 | |
| F000:337D db 0 | |
| F000:337E db 0 | |
| F000:337F db 0 | |
| F000:3380 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:3380 sub_F3380 proc near ; CODE XREF: diag_kdb_eval_scancode+52Bp | |
| F000:3380 cmp ax, 2311h | |
| F000:3383 jz short l0 | |
| F000:3385 cmp ax, 2711h | |
| F000:3388 jnz short l1 | |
| F000:338A l0: ; CODE XREF: sub_F3380+3j | |
| F000:338A call sub_F3411 | |
| F000:338D jmp short l7 | |
| F000:338F nop | |
| F000:3390 l1: ; CODE XREF: sub_F3380+8j | |
| F000:3390 mov bx, offset song_kdb_unk1 | |
| F000:3393 call diag_music_setup_int_1c | |
| F000:3396 push ax | |
| F000:3397 mov dh, 4 | |
| F000:3399 mov dl, al | |
| F000:339B call sub_F346D | |
| F000:339E l2: ; CODE XREF: sub_F3380+39j | |
| F000:339E add dh, 1 | |
| F000:33A1 call diag_copy_sprite_to_tmp_buffer? | |
| F000:33A4 mov bp, 386h | |
| F000:33A7 push ds | |
| F000:33A8 push es | |
| F000:33A9 push es | |
| F000:33AA pop ds | |
| F000:33AB call diag_sprite_or | |
| F000:33AE pop es | |
| F000:33AF pop ds | |
| F000:33B0 pop ax | |
| F000:33B1 cmp ah, dh | |
| F000:33B3 jz short l3 | |
| F000:33B5 push ax | |
| F000:33B6 call diag_sprite_replace | |
| F000:33B9 jmp short l2 | |
| F000:33BB l3: ; CODE XREF: sub_F3380+33j | |
| F000:33BB push ax | |
| F000:33BC call diag_sprite_replace | |
| F000:33BF call diag_init_seg4c_flag1 | |
| F000:33C2 call diag_copy_sprite_to_tmp_buffer? | |
| F000:33C5 pop ax | |
| F000:33C6 mov bx, 0Bh | |
| F000:33C9 call sub_F3498 | |
| F000:33CC mov bx, 161h | |
| F000:33CF call sub_F3498 | |
| F000:33D2 cmp byte ptr es:4DFh, 0 | |
| F000:33D8 jnz short l6 | |
| F000:33DA cmp ax, 1B1Ch | |
| F000:33DD jz short l4 | |
| F000:33DF cmp ax, 1E02h | |
| F000:33E2 jz short l4 | |
| F000:33E4 cmp ax, 2102h | |
| F000:33E7 jz short l4 | |
| F000:33E9 cmp ax, 2404h | |
| F000:33EC jz short l4 | |
| F000:33EE cmp ax, 241Bh | |
| F000:33F1 jnz short l5 | |
| F000:33F3 l4: ; CODE XREF: sub_F3380+5Dj | |
| F000:33F3 ; sub_F3380+62j | |
| F000:33F3 ; sub_F3380+67j | |
| F000:33F3 ; sub_F3380+6Cj | |
| F000:33F3 call sub_F38ED | |
| F000:33F6 jmp short l6 | |
| F000:33F8 nop | |
| F000:33F9 l5: ; CODE XREF: sub_F3380+71j | |
| F000:33F9 cmp ax, 1E1Dh | |
| F000:33FC jnz short l6 | |
| F000:33FE call sub_F38AE | |
| F000:3401 l6: ; CODE XREF: sub_F3380+58j | |
| F000:3401 ; sub_F3380+76j | |
| F000:3401 ; sub_F3380+7Cj | |
| F000:3401 call diag_sprite_replace | |
| F000:3404 mov bx, offset song_kdb_unk0 | |
| F000:3407 call diag_music_setup_int_1c | |
| F000:340A call sub_F3483 | |
| F000:340D l7: ; CODE XREF: sub_F3380+Dj | |
| F000:340D call diag_init_seg4c_flag1 | |
| F000:3410 retn | |
| F000:3410 sub_F3380 endp | |
| F000:3411 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:3411 sub_F3411 proc near ; CODE XREF: sub_F3380:l0p | |
| F000:3411 ; sub_F37C1+32p | |
| F000:3411 cmp byte ptr es:4DFh, 0 | |
| F000:3417 jz short loc_F341F | |
| F000:3419 mov dx, 2300h | |
| F000:341C jmp short loc_F3422 | |
| F000:341E nop | |
| F000:341F loc_F341F: ; CODE XREF: sub_F3411+6j | |
| F000:341F mov dx, 2700h | |
| F000:3422 loc_F3422: ; CODE XREF: sub_F3411+Bj | |
| F000:3422 ; sub_F3411+59j | |
| F000:3422 add dl, 1 | |
| F000:3425 call diag_copy_sprite_to_tmp_buffer? | |
| F000:3428 cmp byte ptr es:0, 0 | |
| F000:342E jz short loc_F3447 | |
| F000:3430 mov byte ptr es:0, 0 | |
| F000:3436 mov bp, 626h | |
| F000:3439 call diag_sprite_or | |
| F000:343C mov bx, 5 | |
| F000:343F mov cx, 80h ; '' | |
| F000:3442 call diag_play_beep | |
| F000:3445 jmp short loc_F345C | |
| F000:3447 loc_F3447: ; CODE XREF: sub_F3411+1Dj | |
| F000:3447 mov byte ptr es:0, 1 | |
| F000:344D mov bp, 766h | |
| F000:3450 call diag_sprite_or | |
| F000:3453 mov bx, 2 | |
| F000:3456 mov cx, 80h ; '' | |
| F000:3459 call diag_play_beep | |
| F000:345C loc_F345C: ; CODE XREF: sub_F3411+34j | |
| F000:345C mov cx, 1800h | |
| F000:345F loc_F345F: ; CODE XREF: sub_F3411:loc_F345Fj | |
| F000:345F loop loc_F345F | |
| F000:3461 call diag_sprite_replace | |
| F000:3464 call sub_F3526 | |
| F000:3467 cmp dl, 23h ; '#' | |
| F000:346A jnz short loc_F3422 | |
| F000:346C retn | |
| F000:346C sub_F3411 endp | |
| F000:346D ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:346D sub_F346D proc near ; CODE XREF: sub_F3380+1Bp | |
| F000:346D push ds | |
| F000:346E push es | |
| F000:346F pop ds | |
| F000:3470 mov di, 386h | |
| F000:3473 mov si, 4E6h | |
| F000:3476 mov cx, 140h | |
| F000:3479 rep movsb | |
| F000:347B pop ds | |
| F000:347C mov bx, 386h | |
| F000:347F call sub_F3498 | |
| F000:3482 retn | |
| F000:3482 sub_F346D endp | |
| F000:3483 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:3483 sub_F3483 proc near ; CODE XREF: diag_kdb_eval_scancode+4DAp | |
| F000:3483 ; sub_F3380+8Ap | |
| F000:3483 ; sub_F3483+12j | |
| F000:3483 ; sub_F37C1+2Fp | |
| F000:3483 sub dh, 1 | |
| F000:3486 call diag_copy_sprite_to_tmp_buffer? | |
| F000:3489 mov bp, 4E6h | |
| F000:348C call diag_sprite_or | |
| F000:348F call diag_sprite_replace | |
| F000:3492 cmp dh, 4 | |
| F000:3495 jnz short sub_F3483 | |
| F000:3497 retn | |
| F000:3497 sub_F3483 endp | |
| F000:3498 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:3498 sub_F3498 proc near ; CODE XREF: sub_F3380+49p | |
| F000:3498 ; sub_F3380+4Fp | |
| F000:3498 ; sub_F346D+12p sub_F38AE+6p | |
| F000:3498 ; sub_F38AE+Fp sub_F38AE+18p ... | |
| F000:3498 push dx | |
| F000:3499 add bx, 0B8h ; '¸' | |
| F000:349D mov cx, 5 | |
| F000:34A0 mov dx, 0FFFFh | |
| F000:34A3 cmp byte ptr es:4DFh, 0 | |
| F000:34A9 jz short loc_F3511 | |
| F000:34AB mov cx, 3 | |
| F000:34AE mov dx, 0FFh | |
| F000:34B1 cmp ah, 1Dh | |
| F000:34B4 jz short loc_F34BB | |
| F000:34B6 cmp ah, 21h ; '!' | |
| F000:34B9 jnz short loc_F34BE | |
| F000:34BB loc_F34BB: ; CODE XREF: sub_F3498+1Cj | |
| F000:34BB mov dx, 0FF00h | |
| F000:34BE loc_F34BE: ; CODE XREF: sub_F3498+21j | |
| F000:34BE cmp al, 9 | |
| F000:34C0 jge short loc_F34CF | |
| F000:34C2 cmp ah, 1Dh | |
| F000:34C5 jz short loc_F34CC | |
| F000:34C7 cmp ah, 21h ; '!' | |
| F000:34CA jnz short loc_F34CF | |
| F000:34CC loc_F34CC: ; CODE XREF: sub_F3498+2Dj | |
| F000:34CC mov dx, 0FFh | |
| F000:34CF loc_F34CF: ; CODE XREF: sub_F3498+28j | |
| F000:34CF ; sub_F3498+32j | |
| F000:34CF cmp ax, 1D18h | |
| F000:34D2 jz short loc_F34DD | |
| F000:34D4 cmp ah, 1Fh | |
| F000:34D7 jnz short loc_F34E0 | |
| F000:34D9 cmp al, 18h | |
| F000:34DB jl short loc_F34E0 | |
| F000:34DD loc_F34DD: ; CODE XREF: sub_F3498+3Aj | |
| F000:34DD mov dx, 0FF00h | |
| F000:34E0 loc_F34E0: ; CODE XREF: sub_F3498+3Fj | |
| F000:34E0 ; sub_F3498+43j | |
| F000:34E0 cmp ax, 1D18h | |
| F000:34E3 jz short loc_F34EA | |
| F000:34E5 cmp ax, 1F1Ch | |
| F000:34E8 jnz short loc_F34ED | |
| F000:34EA loc_F34EA: ; CODE XREF: sub_F3498+4Bj | |
| F000:34EA mov cx, 8 | |
| F000:34ED loc_F34ED: ; CODE XREF: sub_F3498+50j | |
| F000:34ED cmp al, 17h | |
| F000:34EF jl short loc_F3500 | |
| F000:34F1 cmp ah, 1Bh | |
| F000:34F4 jz short loc_F350E | |
| F000:34F6 cmp ah, 23h ; '#' | |
| F000:34F9 jz short loc_F350E | |
| F000:34FB cmp ax, 2117h | |
| F000:34FE jz short loc_F350E | |
| F000:3500 loc_F3500: ; CODE XREF: sub_F3498+57j | |
| F000:3500 cmp ax, 230Bh | |
| F000:3503 jz short loc_F350E | |
| F000:3505 cmp al, 0Ah | |
| F000:3507 jnz short loc_F3511 | |
| F000:3509 cmp ah, 1Dh | |
| F000:350C jl short loc_F3511 | |
| F000:350E loc_F350E: ; CODE XREF: sub_F3498+5Cj | |
| F000:350E ; sub_F3498+61j | |
| F000:350E ; sub_F3498+66j | |
| F000:350E ; sub_F3498+6Bj | |
| F000:350E mov dx, 0FFFFh | |
| F000:3511 loc_F3511: ; CODE XREF: sub_F3498+11j | |
| F000:3511 ; sub_F3498+6Fj | |
| F000:3511 ; sub_F3498+74j | |
| F000:3511 ; sub_F3498+8Aj | |
| F000:3511 push cx | |
| F000:3512 mov cx, 1 | |
| F000:3515 push bx | |
| F000:3516 loc_F3516: ; CODE XREF: sub_F3498+83j | |
| F000:3516 mov es:[bx], dx | |
| F000:3519 inc bx | |
| F000:351A inc bx | |
| F000:351B loop loc_F3516 | |
| F000:351D pop bx | |
| F000:351E add bx, 0Ah | |
| F000:3521 pop cx | |
| F000:3522 loop loc_F3511 | |
| F000:3524 pop dx | |
| F000:3525 retn | |
| F000:3525 sub_F3498 endp | |
| F000:3526 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:3526 sub_F3526 proc near ; CODE XREF: sub_F3411+53p | |
| F000:3526 push dx | |
| F000:3527 cmp dl, 2 | |
| F000:352A jge short loc_F352F | |
| F000:352C jmp loc_F3633 | |
| F000:352F loc_F352F: ; CODE XREF: sub_F3526+4j | |
| F000:352F cmp byte ptr es:4DFh, 0 | |
| F000:3535 jz short loc_F353F | |
| F000:3537 cmp dl, 9 | |
| F000:353A jg short loc_F3555 | |
| F000:353C jmp short loc_F3544 | |
| F000:353E nop | |
| F000:353F loc_F353F: ; CODE XREF: sub_F3526+Fj | |
| F000:353F cmp dl, 0Ch | |
| F000:3542 jg short loc_F3555 | |
| F000:3544 loc_F3544: ; CODE XREF: sub_F3526+16j | |
| F000:3544 ; sub_F3526+5Ej | |
| F000:3544 ; sub_F3526+10Aj | |
| F000:3544 dec dl | |
| F000:3546 mov bx, 0C00h | |
| F000:3549 call sub_F3635 | |
| F000:354C mov bx, 800h | |
| F000:354F call sub_F3635 | |
| F000:3552 jmp loc_F3633 | |
| F000:3555 loc_F3555: ; CODE XREF: sub_F3526+14j | |
| F000:3555 ; sub_F3526+1Cj | |
| F000:3555 cmp byte ptr es:4DFh, 0 | |
| F000:355B jz short loc_F3565 | |
| F000:355D cmp dl, 17h | |
| F000:3560 jle short loc_F3586 | |
| F000:3562 jmp short loc_F356A | |
| F000:3564 nop | |
| F000:3565 loc_F3565: ; CODE XREF: sub_F3526+35j | |
| F000:3565 cmp dl, 18h | |
| F000:3568 jle short loc_F3586 | |
| F000:356A loc_F356A: ; CODE XREF: sub_F3526+3Cj | |
| F000:356A cmp byte ptr es:4DFh, 0 | |
| F000:3570 jz short loc_F357A | |
| F000:3572 cmp dl, 18h | |
| F000:3575 jz short loc_F3582 | |
| F000:3577 jmp loc_F3633 | |
| F000:357A loc_F357A: ; CODE XREF: sub_F3526+4Aj | |
| F000:357A cmp dl, 19h | |
| F000:357D jz short loc_F3582 | |
| F000:357F jmp loc_F3633 | |
| F000:3582 loc_F3582: ; CODE XREF: sub_F3526+4Fj | |
| F000:3582 ; sub_F3526+57j | |
| F000:3582 dec dl | |
| F000:3584 jmp short loc_F3544 | |
| F000:3586 loc_F3586: ; CODE XREF: sub_F3526+3Aj | |
| F000:3586 ; sub_F3526+42j | |
| F000:3586 push dx | |
| F000:3587 cmp byte ptr es:4DFh, 0 | |
| F000:358D jz short loc_F3595 | |
| F000:358F sub dl, 0Ah | |
| F000:3592 jmp short loc_F3598 | |
| F000:3594 nop | |
| F000:3595 loc_F3595: ; CODE XREF: sub_F3526+67j | |
| F000:3595 sub dl, 0Dh | |
| F000:3598 loc_F3598: ; CODE XREF: sub_F3526+6Cj | |
| F000:3598 mov byte ptr es:9, 1 | |
| F000:359E mov bx, 0C00h | |
| F000:35A1 call sub_F3635 | |
| F000:35A4 mov bx, 800h | |
| F000:35A7 call sub_F3635 | |
| F000:35AA mov byte ptr es:9, 0 | |
| F000:35B0 cmp byte ptr es:4DFh, 0 | |
| F000:35B6 jz short loc_F35C0 | |
| F000:35B8 cmp dl, 8 | |
| F000:35BB jnz short loc_F35C8 | |
| F000:35BD jmp short loc_F35C5 | |
| F000:35BF nop | |
| F000:35C0 loc_F35C0: ; CODE XREF: sub_F3526+90j | |
| F000:35C0 cmp dl, 3 | |
| F000:35C3 jnz short loc_F35C8 | |
| F000:35C5 loc_F35C5: ; CODE XREF: sub_F3526+97j | |
| F000:35C5 call sub_F36C3 | |
| F000:35C8 loc_F35C8: ; CODE XREF: sub_F3526+95j | |
| F000:35C8 ; sub_F3526+9Dj | |
| F000:35C8 cmp byte ptr es:4DFh, 0 | |
| F000:35CE jz short loc_F3604 | |
| F000:35D0 cmp dl, 9 | |
| F000:35D3 jnz short loc_F35E6 | |
| F000:35D5 cmp word ptr es:33Dh, 0 | |
| F000:35DB jnz short loc_F362F | |
| F000:35DD mov byte ptr es:0Ah, 1 | |
| F000:35E3 jmp short loc_F3611 | |
| F000:35E5 nop | |
| F000:35E6 loc_F35E6: ; CODE XREF: sub_F3526+ADj | |
| F000:35E6 cmp dl, 0Ah | |
| F000:35E9 jnz short loc_F35FC | |
| F000:35EB cmp word ptr es:33Fh, 0 | |
| F000:35F1 jnz short loc_F362F | |
| F000:35F3 mov byte ptr es:0Ah, 1 | |
| F000:35F9 jmp short loc_F3611 | |
| F000:35FB nop | |
| F000:35FC loc_F35FC: ; CODE XREF: sub_F3526+C3j | |
| F000:35FC cmp dl, 0Dh | |
| F000:35FF jnz short loc_F362F | |
| F000:3601 jmp short loc_F3609 | |
| F000:3603 nop | |
| F000:3604 loc_F3604: ; CODE XREF: sub_F3526+A8j | |
| F000:3604 cmp dl, 0Bh | |
| F000:3607 jnz short loc_F362F | |
| F000:3609 loc_F3609: ; CODE XREF: sub_F3526+DBj | |
| F000:3609 cmp word ptr es:327h, 0 | |
| F000:360F jnz short loc_F362F | |
| F000:3611 loc_F3611: ; CODE XREF: sub_F3526+BDj | |
| F000:3611 ; sub_F3526+D3j | |
| F000:3611 mov byte ptr es:8, 1 | |
| F000:3617 mov bx, 0C00h | |
| F000:361A call sub_F3635 | |
| F000:361D mov bx, 800h | |
| F000:3620 call sub_F3635 | |
| F000:3623 mov byte ptr es:8, 0 | |
| F000:3629 mov byte ptr es:0Ah, 0 | |
| F000:362F loc_F362F: ; CODE XREF: sub_F3526+B5j | |
| F000:362F ; sub_F3526+CBj | |
| F000:362F ; sub_F3526+D9j | |
| F000:362F ; sub_F3526+E1j | |
| F000:362F ; sub_F3526+E9j | |
| F000:362F pop dx | |
| F000:3630 jmp loc_F3544 | |
| F000:3633 loc_F3633: ; CODE XREF: sub_F3526+6j | |
| F000:3633 ; sub_F3526+2Cj | |
| F000:3633 ; sub_F3526+51j | |
| F000:3633 ; sub_F3526+59j | |
| F000:3633 pop dx | |
| F000:3634 retn | |
| F000:3634 sub_F3526 endp | |
| F000:3635 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:3635 sub_F3635 proc near ; CODE XREF: sub_F3526+23p | |
| F000:3635 ; sub_F3526+29p | |
| F000:3635 ; sub_F3526+7Bp | |
| F000:3635 ; sub_F3526+81p | |
| F000:3635 ; sub_F3526+F4p | |
| F000:3635 ; sub_F3526+FAp ... | |
| F000:3635 push ds | |
| F000:3636 push dx | |
| F000:3637 push bx | |
| F000:3638 mov ax, 0 | |
| F000:363B mov al, dh | |
| F000:363D push dx | |
| F000:363E mul word ptr ds:2733h | |
| F000:3642 pop dx | |
| F000:3643 shl dl, 1 | |
| F000:3645 mov dh, 0 | |
| F000:3647 add ax, dx | |
| F000:3649 mov bx, ax | |
| F000:364B add bx, 2D0h | |
| F000:364F pop ds | |
| F000:3650 cmp byte ptr es:4DFh, 0 | |
| F000:3656 jz short loc_F365E | |
| F000:3658 mov cx, 3 | |
| F000:365B jmp short loc_F3661 | |
| F000:365D nop | |
| F000:365E loc_F365E: ; CODE XREF: sub_F3635+21j | |
| F000:365E mov cx, 5 | |
| F000:3661 loc_F3661: ; CODE XREF: sub_F3635+26j | |
| F000:3661 ; sub_F3635+89j | |
| F000:3661 push cx | |
| F000:3662 test cx, 1 | |
| F000:3666 jnz short loc_F366F | |
| F000:3668 mov ax, ds | |
| F000:366A add ax, 200h | |
| F000:366D mov ds, ax | |
| F000:366F loc_F366F: ; CODE XREF: sub_F3635+31j | |
| F000:366F cmp byte ptr es:8, 0 | |
| F000:3675 jz short loc_F367C | |
| F000:3677 mov cx, 1 | |
| F000:367A jmp short loc_F367F | |
| F000:367C loc_F367C: ; CODE XREF: sub_F3635+40j | |
| F000:367C mov cx, 2 | |
| F000:367F loc_F367F: ; CODE XREF: sub_F3635+45j | |
| F000:367F cmp byte ptr es:9, 0 | |
| F000:3685 jz short loc_F3693 | |
| F000:3687 push bx | |
| F000:3688 loc_F3688: ; CODE XREF: sub_F3635+59j | |
| F000:3688 mov word ptr [bx], 0 | |
| F000:368C inc bx | |
| F000:368D inc bx | |
| F000:368E loop loc_F3688 | |
| F000:3690 pop bx | |
| F000:3691 jmp short loc_F36AB | |
| F000:3693 loc_F3693: ; CODE XREF: sub_F3635+50j | |
| F000:3693 push bx | |
| F000:3694 loc_F3694: ; CODE XREF: sub_F3635+73j | |
| F000:3694 cmp byte ptr es:0Ah, 0 | |
| F000:369A jz short loc_F36A2 | |
| F000:369C mov word ptr [bx], 0FFh | |
| F000:36A0 jmp short loc_F36A6 | |
| F000:36A2 loc_F36A2: ; CODE XREF: sub_F3635+65j | |
| F000:36A2 mov word ptr [bx], 0FFFFh | |
| F000:36A6 loc_F36A6: ; CODE XREF: sub_F3635+6Bj | |
| F000:36A6 inc bx | |
| F000:36A7 inc bx | |
| F000:36A8 loop loc_F3694 | |
| F000:36AA pop bx | |
| F000:36AB loc_F36AB: ; CODE XREF: sub_F3635+5Cj | |
| F000:36AB pop cx | |
| F000:36AC push cx | |
| F000:36AD test cx, 1 | |
| F000:36B1 jnz short loc_F36BD | |
| F000:36B3 mov ax, ds | |
| F000:36B5 sub ax, 200h | |
| F000:36B8 mov ds, ax | |
| F000:36BA add bx, 50h ; 'P' | |
| F000:36BD loc_F36BD: ; CODE XREF: sub_F3635+7Cj | |
| F000:36BD pop cx | |
| F000:36BE loop loc_F3661 | |
| F000:36C0 pop dx | |
| F000:36C1 pop ds | |
| F000:36C2 retn | |
| F000:36C2 sub_F3635 endp | |
| F000:36C3 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:36C3 sub_F36C3 proc near ; CODE XREF: diag_kbd_init+B2p | |
| F000:36C3 ; sub_F3526:loc_F35C5p | |
| F000:36C3 push ds | |
| F000:36C4 mov ax, 800h | |
| F000:36C7 mov ds, ax ; ds = 0x800 | |
| F000:36C9 cmp byte ptr es:seg60_diag.opt_k_enabled, 0 | |
| F000:36CF jz short l0 | |
| F000:36D1 mov bx, 12CFh | |
| F000:36D4 jmp short l1 | |
| F000:36D6 l0: ; CODE XREF: sub_F36C3+Cj | |
| F000:36D6 mov bx, 1185h | |
| F000:36D9 l1: ; CODE XREF: sub_F36C3+11j | |
| F000:36D9 call sub_F378B | |
| F000:36DC cmp byte ptr es:seg60_diag.opt_k_enabled, 0 | |
| F000:36E2 jz short l2 | |
| F000:36E4 mov bx, 12FFh | |
| F000:36E7 jmp short l3 | |
| F000:36E9 l2: ; CODE XREF: sub_F36C3+1Fj | |
| F000:36E9 mov bx, 11CBh | |
| F000:36EC l3: ; CODE XREF: sub_F36C3+24j | |
| F000:36EC call sub_F378B | |
| F000:36EF mov ax, 0C00h | |
| F000:36F2 mov ds, ax | |
| F000:36F4 cmp byte ptr es:seg60_diag.opt_k_enabled, 0 | |
| F000:36FA jz short l4 | |
| F000:36FC mov bx, 12CFh | |
| F000:36FF jmp short l5 | |
| F000:3701 l4: ; CODE XREF: sub_F36C3+37j | |
| F000:3701 mov bx, 1185h | |
| F000:3704 l5: ; CODE XREF: sub_F36C3+3Cj | |
| F000:3704 call sub_F378B | |
| F000:3707 cmp byte ptr es:seg60_diag.opt_k_enabled, 0 | |
| F000:370D jz short l6 | |
| F000:370F mov bx, 12FFh | |
| F000:3712 jmp short l7 | |
| F000:3714 l6: ; CODE XREF: sub_F36C3+4Aj | |
| F000:3714 mov bx, 11CBh | |
| F000:3717 l7: ; CODE XREF: sub_F36C3+4Fj | |
| F000:3717 call sub_F378B | |
| F000:371A mov ax, 800h | |
| F000:371D mov ds, ax | |
| F000:371F cmp byte ptr es:seg60_diag.opt_k_enabled, 0 | |
| F000:3725 jz short l8 | |
| F000:3727 mov bx, 12D0h | |
| F000:372A jmp short l9 | |
| F000:372C l8: ; CODE XREF: sub_F36C3+62j | |
| F000:372C mov bx, 1186h | |
| F000:372F l9: ; CODE XREF: sub_F36C3+67j | |
| F000:372F call sub_F3772 | |
| F000:3732 cmp byte ptr es:seg60_diag.opt_k_enabled, 0 | |
| F000:3738 jz short l10 | |
| F000:373A mov bx, 19B0h | |
| F000:373D jmp short l11 | |
| F000:373F l10: ; CODE XREF: sub_F36C3+75j | |
| F000:373F mov bx, 1E06h | |
| F000:3742 l11: ; CODE XREF: sub_F36C3+7Aj | |
| F000:3742 call sub_F3772 | |
| F000:3745 mov ax, 0C00h | |
| F000:3748 mov ds, ax | |
| F000:374A cmp byte ptr es:seg60_diag.opt_k_enabled, 0 | |
| F000:3750 jz short l12 | |
| F000:3752 mov bx, 12D0h | |
| F000:3755 jmp short l13 | |
| F000:3757 l12: ; CODE XREF: sub_F36C3+8Dj | |
| F000:3757 mov bx, 1186h | |
| F000:375A l13: ; CODE XREF: sub_F36C3+92j | |
| F000:375A call sub_F3772 | |
| F000:375D cmp byte ptr es:seg60_diag.opt_k_enabled, 0 | |
| F000:3763 jz short l14 | |
| F000:3765 mov bx, 19B0h | |
| F000:3768 jmp short l15 | |
| F000:376A l14: ; CODE XREF: sub_F36C3+A0j | |
| F000:376A mov bx, 1E06h | |
| F000:376D l15: ; CODE XREF: sub_F36C3+A5j | |
| F000:376D call sub_F3772 | |
| F000:3770 pop ds | |
| F000:3771 retn | |
| F000:3771 sub_F36C3 endp | |
| F000:3772 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:3772 sub_F3772 proc near ; CODE XREF: sub_F36C3:l9p | |
| F000:3772 ; sub_F36C3:l11p | |
| F000:3772 ; sub_F36C3:l13p | |
| F000:3772 ; sub_F36C3:l15p | |
| F000:3772 cmp byte ptr es:4DFh, 0 | |
| F000:3778 jz short l0 | |
| F000:377A mov cx, 18h | |
| F000:377D jmp short l15 | |
| F000:377F l0: ; CODE XREF: sub_F3772+6j | |
| F000:377F mov cx, 23h ; '#' | |
| F000:3782 l15: ; CODE XREF: sub_F3772+Bj | |
| F000:3782 ; sub_F3772+16j | |
| F000:3782 mov word ptr [bx], 0AAAAh | |
| F000:3786 inc bx | |
| F000:3787 inc bx | |
| F000:3788 loop l15 | |
| F000:378A retn | |
| F000:378A sub_F3772 endp | |
| F000:378B ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:378B ; input: | |
| F000:378B ; bx = offset to table? | |
| F000:378B sub_F378B proc near ; CODE XREF: sub_F36C3:l1p | |
| F000:378B ; sub_F36C3:l3p | |
| F000:378B ; sub_F36C3:l5p | |
| F000:378B ; sub_F36C3:l7p | |
| F000:378B cmp byte ptr es:seg60_diag.opt_k_enabled, 0 | |
| F000:3791 jz short l0 | |
| F000:3793 mov cx, 45 | |
| F000:3796 jmp short l1 | |
| F000:3798 l0: ; CODE XREF: sub_F378B+6j | |
| F000:3798 mov cx, 81 | |
| F000:379B l1: ; CODE XREF: sub_F378B+Bj | |
| F000:379B ; sub_F378B:l3j | |
| F000:379B push cx | |
| F000:379C test cx, 1 | |
| F000:37A0 jnz short l2 | |
| F000:37A2 mov ax, ds | |
| F000:37A4 add ax, 200h | |
| F000:37A7 mov ds, ax ; ds = 0x200 | |
| F000:37A9 l2: ; CODE XREF: sub_F378B+15j | |
| F000:37A9 pop cx | |
| F000:37AA mov word ptr [bx], 0Ah | |
| F000:37AE test cx, 1 | |
| F000:37B2 jnz short l3 | |
| F000:37B4 mov ax, ds | |
| F000:37B6 sub ax, 200h | |
| F000:37B9 mov ds, ax ; ds = 0x200 | |
| F000:37BB add bx, 80 | |
| F000:37BE l3: ; CODE XREF: sub_F378B+27j | |
| F000:37BE loop l1 | |
| F000:37C0 retn | |
| F000:37C0 sub_F378B endp | |
| F000:37C1 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:37C1 sub_F37C1 proc near ; CODE XREF: diag_kdb_eval_scancode+225p | |
| F000:37C1 push dx | |
| F000:37C2 mov cx, 1 | |
| F000:37C5 l0: ; CODE XREF: sub_F37C1+E8j | |
| F000:37C5 mov al, cl | |
| F000:37C7 mov ah, 0 | |
| F000:37C9 mov bx, 2B7h | |
| F000:37CC shl ax, 1 | |
| F000:37CE add ax, bx | |
| F000:37D0 mov bx, ax | |
| F000:37D2 mov dx, es:[bx] | |
| F000:37D5 mov word ptr es:[bx], 0 | |
| F000:37DA cmp dh, 0 | |
| F000:37DD jnz short l1 | |
| F000:37DF jmp l7 | |
| F000:37E2 l1: ; CODE XREF: sub_F37C1+1Cj | |
| F000:37E2 push cx | |
| F000:37E3 cmp cx, 39h ; '9' | |
| F000:37E6 jnz short l2 | |
| F000:37E8 mov dx, es:6 | |
| F000:37ED call diag_sprite_replace | |
| F000:37F0 call sub_F3483 | |
| F000:37F3 call sub_F3411 | |
| F000:37F6 mov dx, 11h | |
| F000:37F9 mov cx, 0Eh | |
| F000:37FC call diag_sprite_move_down_n_rows | |
| F000:37FF mov es:6, dx | |
| F000:3804 jmp short l6 | |
| F000:3806 nop | |
| F000:3807 l2: ; CODE XREF: sub_F37C1+25j | |
| F000:3807 cmp byte ptr es:4DFh, 0 | |
| F000:380D jnz short l4 | |
| F000:380F cmp dx, 1B1Ch | |
| F000:3813 jz short l3 | |
| F000:3815 cmp dx, 1E02h | |
| F000:3819 jz short l3 | |
| F000:381B cmp dx, 2102h | |
| F000:381F jz short l3 | |
| F000:3821 cmp dx, 2404h | |
| F000:3825 jz short l3 | |
| F000:3827 cmp dx, 241Bh | |
| F000:382B jnz short l4 | |
| F000:382D l3: ; CODE XREF: sub_F37C1+52j | |
| F000:382D ; sub_F37C1+58j | |
| F000:382D ; sub_F37C1+5Ej | |
| F000:382D ; sub_F37C1+64j | |
| F000:382D mov byte ptr es:8, 0 | |
| F000:3833 jmp short l5 | |
| F000:3835 nop | |
| F000:3836 l4: ; CODE XREF: sub_F37C1+4Cj | |
| F000:3836 ; sub_F37C1+6Aj | |
| F000:3836 mov byte ptr es:8, 1 | |
| F000:383C l5: ; CODE XREF: sub_F37C1+72j | |
| F000:383C add dx, 2 | |
| F000:383F mov bx, 0C00h | |
| F000:3842 call sub_F3635 | |
| F000:3845 mov bx, 800h | |
| F000:3848 call sub_F3635 | |
| F000:384B mov byte ptr es:8, 0 | |
| F000:3851 l6: ; CODE XREF: sub_F37C1+43j | |
| F000:3851 pop cx | |
| F000:3852 cmp cx, 1Ch | |
| F000:3855 jnz short l7 | |
| F000:3857 cmp byte ptr es:4DFh, 0 | |
| F000:385D jnz short l7 | |
| F000:385F push cx | |
| F000:3860 mov byte ptr es:8, 1 | |
| F000:3866 mov dx, 1F1Dh | |
| F000:3869 add dx, 2 | |
| F000:386C mov bx, 0C00h | |
| F000:386F call sub_F3635 | |
| F000:3872 mov bx, 800h | |
| F000:3875 call sub_F3635 | |
| F000:3878 mov dx, 201Dh | |
| F000:387B add dx, 2 | |
| F000:387E mov bx, 0C00h | |
| F000:3881 call sub_F3635 | |
| F000:3884 mov bx, 800h | |
| F000:3887 call sub_F3635 | |
| F000:388A mov dx, 211Ch | |
| F000:388D mov byte ptr es:8, 0 | |
| F000:3893 add dx, 2 | |
| F000:3896 mov bx, 0C00h | |
| F000:3899 call sub_F3635 | |
| F000:389C mov bx, 800h | |
| F000:389F call sub_F3635 | |
| F000:38A2 pop dx | |
| F000:38A3 l7: ; CODE XREF: sub_F37C1+1Ej | |
| F000:38A3 ; sub_F37C1+94j | |
| F000:38A3 ; sub_F37C1+9Cj | |
| F000:38A3 cmp cx, 54h ; 'T' | |
| F000:38A6 jz short l8 | |
| F000:38A8 inc cx | |
| F000:38A9 jmp l0 | |
| F000:38AC l8: ; CODE XREF: sub_F37C1+E5j | |
| F000:38AC pop dx | |
| F000:38AD retn | |
| F000:38AD sub_F37C1 endp | |
| F000:38AE ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:38AE sub_F38AE proc near ; CODE XREF: sub_F3380+7Ep | |
| F000:38AE mov bx, 0Bh | |
| F000:38B1 add bx, 32h ; '2' | |
| F000:38B4 call sub_F3498 | |
| F000:38B7 mov bx, 161h | |
| F000:38BA add bx, 32h ; '2' | |
| F000:38BD call sub_F3498 | |
| F000:38C0 mov bx, 0Bh | |
| F000:38C3 add bx, 64h ; 'd' | |
| F000:38C6 call sub_F3498 | |
| F000:38C9 mov bx, 161h | |
| F000:38CC add bx, 64h ; 'd' | |
| F000:38CF call sub_F3498 | |
| F000:38D2 push dx | |
| F000:38D3 mov dx, 211Ch | |
| F000:38D6 mov byte ptr es:8, 0 | |
| F000:38DC add dx, 2 | |
| F000:38DF mov bx, 0C00h | |
| F000:38E2 call sub_F3635 | |
| F000:38E5 mov bx, 800h | |
| F000:38E8 call sub_F3635 | |
| F000:38EB pop dx | |
| F000:38EC retn | |
| F000:38EC sub_F38AE endp | |
| F000:38ED ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:38ED sub_F38ED proc near ; CODE XREF: sub_F3380:l4p | |
| F000:38ED mov bx, 0Bh | |
| F000:38F0 inc bx | |
| F000:38F1 inc bx | |
| F000:38F2 call sub_F3498 | |
| F000:38F5 mov bx, 161h | |
| F000:38F8 inc bx | |
| F000:38F9 inc bx | |
| F000:38FA call sub_F3498 | |
| F000:38FD retn | |
| F000:38FD sub_F38ED endp | |
| F000:38FE db 0 | |
| F000:38FF db 0 | |
| F000:3900 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:3900 ; ax = ??? | |
| F000:3900 ; bx = pointer to notes to play | |
| F000:3900 diag_music_setup_int_1c proc near ; CODE XREF: F000:2009p | |
| F000:3900 ; mini_welcome_init+10Cp | |
| F000:3900 ; mini_welcome_init+1EEp | |
| F000:3900 ; diag_kdb_eval_scancode:play_songp | |
| F000:3900 ; diag_kdb_eval_scancode+10Cp | |
| F000:3900 ; sub_F3380+13p ... | |
| F000:3900 push es | |
| F000:3901 push ax | |
| F000:3902 push bx | |
| F000:3903 push ds | |
| F000:3904 mov ax, cs | |
| F000:3906 mov ds, ax ; ds = cs | |
| F000:3908 mov ax, 4Ch ; 'L' | |
| F000:390B mov es, ax ; es = 0x4c | |
| F000:390D l0: ; CODE XREF: diag_music_setup_int_1c+13j | |
| F000:390D mov al, es:seg4c.flag1 | |
| F000:3911 test al, 2 | |
| F000:3913 jnz short l0 | |
| F000:3915 test al, 1 | |
| F000:3917 jnz short l2 ; exit if 1 | |
| F000:3919 mov byte ptr es:seg4c.flag1, 1 ; set it to 1 | |
| F000:391F mov al, 9Fh ; '' | |
| F000:3921 l1: ; CODE XREF: diag_music_setup_int_1c+25j | |
| F000:3921 out 0C0h, al | |
| F000:3923 add al, 20h ; ' ' | |
| F000:3925 jnb short l1 | |
| F000:3927 in al, 61h | |
| F000:3929 mov es:seg4c.flagc, al | |
| F000:392D or al, 70h | |
| F000:392F out 61h, al | |
| F000:3931 pop ax | |
| F000:3932 mov es:seg4c.notes_segment, ax | |
| F000:3936 mov es:seg4c.notes_offset, bx | |
| F000:393B sub bx, 2 | |
| F000:393E mov es:seg4c.something_ptr?, bx | |
| F000:3943 mov byte ptr es:seg4c, 1 | |
| F000:3949 mov bx, offset diag_music_int_1c | |
| F000:394C push ds | |
| F000:394D xor ax, ax | |
| F000:394F mov ds, ax ; ds = 0 | |
| F000:3951 mov ax, ds:70h ; int 0x1c offset (system timer tick) | |
| F000:3954 mov es:seg4c.old_int_1c_off, ax | |
| F000:3958 mov ax, ds:72h ; int 0x1c segment | |
| F000:395B mov es:seg4c.old_int_1c_seg, ax | |
| F000:395F cli | |
| F000:3960 mov ds:70h, bx ; new int 0x1c offset | |
| F000:3964 push cs | |
| F000:3965 pop ax | |
| F000:3966 mov ds:72h, ax ; new int 0x1c segment | |
| F000:3969 pop ds | |
| F000:396A sti | |
| F000:396B push ds | |
| F000:396C l2: ; CODE XREF: diag_music_setup_int_1c+17j | |
| F000:396C pop ds | |
| F000:396D pop bx | |
| F000:396E pop ax | |
| F000:396F pop es | |
| F000:3970 retn | |
| F000:3970 diag_music_setup_int_1c endp | |
| F000:3971 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:3971 diag_music_int_1c proc far ; DATA XREF: diag_music_setup_int_1c+49o | |
| F000:3971 push ax | |
| F000:3972 push bx | |
| F000:3973 push cx | |
| F000:3974 push dx | |
| F000:3975 push di | |
| F000:3976 push si | |
| F000:3977 push bp | |
| F000:3978 push ds | |
| F000:3979 push es | |
| F000:397A mov ax, cs | |
| F000:397C mov ds, ax | |
| F000:397E mov ax, 4Ch ; 'L' | |
| F000:3981 mov es, ax ; es = 0x4c | |
| F000:3983 mov al, es:1 | |
| F000:3987 test al, 1 | |
| F000:3989 jnz short l0 | |
| F000:398B jmp end_song | |
| F000:398E l0: ; CODE XREF: diag_music_int_1c+18j | |
| F000:398E dec byte ptr es:seg4c | |
| F000:3993 jz short l1 | |
| F000:3995 jmp l14 | |
| F000:3998 l1: ; CODE XREF: diag_music_int_1c+22j | |
| F000:3998 mov ax, es:seg4c.notes_segment | |
| F000:399C mov si, es:seg4c.notes_offset | |
| F000:39A1 mov di, es:seg4c.something_ptr? | |
| F000:39A6 mov ds, ax | |
| F000:39A8 cld | |
| F000:39A9 lodsb ; al = ds:si | |
| F000:39AA l2: ; CODE XREF: diag_music_int_1c+B9j | |
| F000:39AA xor dx, dx | |
| F000:39AC xor cx, cx | |
| F000:39AE mov bl, al | |
| F000:39B0 mov bh, bl | |
| F000:39B2 mov cl, bl | |
| F000:39B4 shr bx, 1 | |
| F000:39B6 and bh, 0E0h | |
| F000:39B9 or bx, 809Fh | |
| F000:39BD and cl, 3Fh | |
| F000:39C0 jnz short l3 | |
| F000:39C2 mov al, bl | |
| F000:39C4 out 0C0h, al | |
| F000:39C6 lodsb ; al = ds:si | |
| F000:39C7 mov dl, al | |
| F000:39C9 jmp short l8 | |
| F000:39CB l3: ; CODE XREF: diag_music_int_1c+4Fj | |
| F000:39CB dec cx | |
| F000:39CC push cx | |
| F000:39CD shr cl, 1 | |
| F000:39CF mov bp, offset diag_music_noise_values_? | |
| F000:39D2 push di | |
| F000:39D3 mov di, cx | |
| F000:39D5 mov ah, cs:[bp+di] | |
| F000:39D8 pop di | |
| F000:39D9 jnb short l4 | |
| F000:39DB and ah, 0Fh | |
| F000:39DE jmp short l5 | |
| F000:39E0 l4: ; CODE XREF: diag_music_int_1c+68j | |
| F000:39E0 mov cl, 4 | |
| F000:39E2 shr ah, cl | |
| F000:39E4 l5: ; CODE XREF: diag_music_int_1c+6Dj | |
| F000:39E4 pop cx | |
| F000:39E5 or ah, bh | |
| F000:39E7 mov al, bl | |
| F000:39E9 out 0C0h, al | |
| F000:39EB mov al, ah | |
| F000:39ED out 0C0h, al | |
| F000:39EF mov bp, offset diag_music_tbl_freq | |
| F000:39F2 push di | |
| F000:39F3 mov di, cx | |
| F000:39F5 mov al, cs:[bp+di] | |
| F000:39F8 pop di | |
| F000:39F9 out 0C0h, al | |
| F000:39FB or bh, 12h | |
| F000:39FE lodsb ; al = ds:si | |
| F000:39FF mov dl, al | |
| F000:3A01 shr al, 1 | |
| F000:3A03 or al, 81h | |
| F000:3A05 cmp al, bl | |
| F000:3A07 mov al, bh | |
| F000:3A09 jnz short l7 | |
| F000:3A0B and al, 0F0h | |
| F000:3A0D and dl, 3 | |
| F000:3A10 cmp dl, 2 | |
| F000:3A13 jl short l6 | |
| F000:3A15 inc dx | |
| F000:3A16 l6: ; CODE XREF: diag_music_int_1c+A2j | |
| F000:3A16 or al, dl | |
| F000:3A18 out 0C0h, al | |
| F000:3A1A lodsb | |
| F000:3A1B mov dl, al | |
| F000:3A1D jmp short l8 | |
| F000:3A1F l7: ; CODE XREF: diag_music_int_1c+98j | |
| F000:3A1F out 0C0h, al | |
| F000:3A21 l8: ; CODE XREF: diag_music_int_1c+58j | |
| F000:3A21 ; diag_music_int_1c+ACj | |
| F000:3A21 mov al, dl | |
| F000:3A23 cmp dx, 3Bh ; ';' | |
| F000:3A26 jl short l9 | |
| F000:3A28 jz short end_song | |
| F000:3A2A jmp l2 | |
| F000:3A2D l9: ; CODE XREF: diag_music_int_1c+B5j | |
| F000:3A2D cmp dl, 39h ; '9' | |
| F000:3A30 jg short l12 | |
| F000:3A32 jz short end_song | |
| F000:3A34 jmp short l13 | |
| F000:3A36 end_song: ; CODE XREF: diag_music_int_1c+1Aj | |
| F000:3A36 ; diag_music_int_1c+B7j | |
| F000:3A36 ; diag_music_int_1c+C1j | |
| F000:3A36 mov al, 9Fh ; '' | |
| F000:3A38 l11: ; CODE XREF: diag_music_int_1c+CBj | |
| F000:3A38 out 0C0h, al | |
| F000:3A3A add al, 20h ; ' ' | |
| F000:3A3C jnb short l11 | |
| F000:3A3E mov ax, 4Ch ; 'L' | |
| F000:3A41 mov es, ax ; es = 0x4c | |
| F000:3A43 push ds | |
| F000:3A44 xor ax, ax | |
| F000:3A46 mov ds, ax ; ds = 0 | |
| F000:3A48 mov al, es:seg4c.flagc | |
| F000:3A4C out 61h, al | |
| F000:3A4E cli | |
| F000:3A4F mov ax, es:seg4c.old_int_1c_off | |
| F000:3A53 mov ds:70h, ax ; restore old int 0x1c offset | |
| F000:3A56 mov ax, es:seg4c.old_int_1c_seg | |
| F000:3A5A mov ds:72h, ax ; restore old int 0x1c segment | |
| F000:3A5D sti | |
| F000:3A5E pop ds | |
| F000:3A5F mov byte ptr es:seg4c.flag1, 0 | |
| F000:3A65 jmp short l14 | |
| F000:3A67 l12: ; CODE XREF: diag_music_int_1c+BFj | |
| F000:3A67 lodsb ; al = ds:si | |
| F000:3A68 mov si, [di] | |
| F000:3A6A dec di | |
| F000:3A6B dec di | |
| F000:3A6C l13: ; CODE XREF: diag_music_int_1c+C3j | |
| F000:3A6C push ax | |
| F000:3A6D mov ax, 4Ch ; 'L' | |
| F000:3A70 mov es, ax ; es = 0x4c | |
| F000:3A72 pop ax | |
| F000:3A73 mov es:seg4c, al | |
| F000:3A77 mov es:seg4c.notes_offset, si | |
| F000:3A7C mov es:seg4c.something_ptr?, di | |
| F000:3A81 l14: ; CODE XREF: diag_music_int_1c+24j | |
| F000:3A81 ; diag_music_int_1c+F4j | |
| F000:3A81 pushf | |
| F000:3A82 call dword ptr es:seg4c.old_int_1c_off | |
| F000:3A87 pop es | |
| F000:3A88 pop ds | |
| F000:3A89 pop bp | |
| F000:3A8A pop si | |
| F000:3A8B pop di | |
| F000:3A8C pop dx | |
| F000:3A8D pop cx | |
| F000:3A8E pop bx | |
| F000:3A8F pop ax | |
| F000:3A90 iret | |
| F000:3A90 diag_music_int_1c endp | |
| F000:3A91 diag_music_noise_values_? db 0BFh ; DATA XREF: diag_music_int_1c+5Eo | |
| F000:3A92 db 97h | |
| F000:3A93 db 7Ah ; z | |
| F000:3A94 db 0F7h ; ÷ | |
| F000:3A95 db 0Ch | |
| F000:3A96 db 0BAh ; º | |
| F000:3A97 db 0C0h ; À | |
| F000:3A98 db 5Bh | |
| F000:3A99 db 3Dh | |
| F000:3A9A db 73h ; s | |
| F000:3A9B db 0Eh | |
| F000:3A9C db 0DDh ; Ý | |
| F000:3A9D db 0E0h ; à | |
| F000:3A9E db 26h ; & | |
| F000:3A9F db 0AEh ; ® | |
| F000:3AA0 db 4Ah ; J | |
| F000:3AA1 db 7 | |
| F000:3AA2 db 0F7h ; ÷ | |
| F000:3AA3 db 0F8h ; ø | |
| F000:3AA4 db 1Bh | |
| F000:3AA5 db 5Fh ; _ | |
| F000:3AA6 db 0A5h ; ¥ | |
| F000:3AA7 db 0Ch | |
| F000:3AA8 db 73h ; s | |
| F000:3AA9 db 0Ch | |
| F000:3AAA db 95h ; | |
| F000:3AAB db 20h | |
| F000:3AAC db 0DAh ; Ú | |
| F000:3AAD db 86h ; | |
| F000:3AAE db 42h ; B | |
| F000:3AAF db 0Eh | |
| F000:3AB0 db 0C0h ; À | |
| F000:3AB1 diag_music_tbl_freq db 3Fh ; ? ; DATA XREF: diag_music_int_1c+7Eo | |
| F000:3AB2 db 3Bh ; ; | |
| F000:3AB3 db 38h ; 8 | |
| F000:3AB4 db 35h ; 5 | |
| F000:3AB5 db 32h ; 2 | |
| F000:3AB6 db 2Fh ; / | |
| F000:3AB7 db 2Ch ; , | |
| F000:3AB8 db 2Ah ; * | |
| F000:3AB9 db 28h ; ( | |
| F000:3ABA db 25h ; % | |
| F000:3ABB db 23h ; # | |
| F000:3ABC db 21h ; ! | |
| F000:3ABD db 1Fh | |
| F000:3ABE db 1Eh | |
| F000:3ABF db 1Ch | |
| F000:3AC0 db 1Ah | |
| F000:3AC1 db 19h | |
| F000:3AC2 db 17h | |
| F000:3AC3 db 16h | |
| F000:3AC4 db 15h | |
| F000:3AC5 db 14h | |
| F000:3AC6 db 12h | |
| F000:3AC7 db 11h | |
| F000:3AC8 db 10h | |
| F000:3AC9 db 0Fh | |
| F000:3ACA db 0Fh | |
| F000:3ACB db 0Eh | |
| F000:3ACC db 0Dh | |
| F000:3ACD db 0Ch | |
| F000:3ACE db 0Bh | |
| F000:3ACF db 0Bh | |
| F000:3AD0 db 0Ah | |
| F000:3AD1 db 0Ah | |
| F000:3AD2 db 9 | |
| F000:3AD3 db 8 | |
| F000:3AD4 db 8 | |
| F000:3AD5 db 7 | |
| F000:3AD6 db 7 | |
| F000:3AD7 db 7 | |
| F000:3AD8 db 6 | |
| F000:3AD9 db 6 | |
| F000:3ADA db 5 | |
| F000:3ADB db 5 | |
| F000:3ADC db 5 | |
| F000:3ADD db 5 | |
| F000:3ADE db 4 | |
| F000:3ADF db 4 | |
| F000:3AE0 db 4 | |
| F000:3AE1 db 4 | |
| F000:3AE2 db 3 | |
| F000:3AE3 db 3 | |
| F000:3AE4 db 3 | |
| F000:3AE5 db 3 | |
| F000:3AE6 db 3 | |
| F000:3AE7 db 2 | |
| F000:3AE8 db 2 | |
| F000:3AE9 db 2 | |
| F000:3AEA db 2 | |
| F000:3AEB db 2 | |
| F000:3AEC db 2 | |
| F000:3AED db 2 | |
| F000:3AEE db 1 | |
| F000:3AEF db 1 | |
| F000:3AF0 db 0A5h ; ¥ | |
| F000:3AF1 db 3Bh ; ; | |
| F000:3AF2 db 0F8h ; ø | |
| F000:3AF3 db 3Ah ; : | |
| F000:3AF4 db 0F8h ; ø | |
| F000:3AF5 db 3Ah ; : | |
| F000:3AF6 db 0F8h ; ø | |
| F000:3AF7 db 3Ah ; : | |
| F000:3AF8 song_kbd_f1 db 17h, 52h, 8Bh, 4, 4Fh, 86h, 4, 19h, 4Dh, 86h, 2, 1Ch | |
| F000:3AF8 ; DATA XREF: mini_welcome_init+1EBo | |
| F000:3AF8 ; diag_kdb_eval_scancode:play_song_0o | |
| F000:3AF8 ; diag_kdb_eval_scancode+109o | |
| F000:3AF8 db 2, 1Bh, 50h, 8Ah, 2, 19h, 2, 1Eh, 4Fh, 8Bh, 4, 17h | |
| F000:3AF8 db 5Eh, 8Fh, 4, 1Eh, 4Fh, 8Bh, 2, 20h, 2, 1Bh, 52h, 8Bh | |
| F000:3AF8 db 2, 1Ch, 2, 19h, 56h, 86h, 4, 16h, 46h, 86h, 4, 19h | |
| F000:3AF8 db 50h, 8Ah, 2, 1Ch, 2, 1Bh, 4Ah, 90h, 2, 19h, 2, 17h | |
| F000:3AF8 db 4Fh, 8Bh, 2, 23h, 5Bh, 2, 22h, 59h, 8Bh, 2, 20h, 57h | |
| F000:3AF8 db 2, 1Eh, 56h, 86h, 2, 1Ch, 54h, 2, 1Bh, 52h, 86h, 2 | |
| F000:3AF8 db 19h, 50h, 2, 17h, 4Fh, 8Bh, 4, 86h, 4, 19h, 4Dh, 86h | |
| F000:3AF8 db 2, 1Ch, 2, 1Bh, 50h, 8Ah, 2, 19h, 2, 1Eh, 4Fh, 8Bh | |
| F000:3AF8 db 4, 17h, 5Eh, 8Fh, 4, 1Eh, 4Fh, 8Bh, 2, 20h, 2, 1Bh | |
| F000:3AF8 db 52h, 86h, 2, 1Ch, 2, 19h, 56h, 86h, 4, 16h, 46h, 86h | |
| F000:3AF8 db 4, 19h, 50h, 8Ah, 2, 1Ch, 2, 1Bh, 4Ah, 8Ah, 2, 19h | |
| F000:3AF8 db 2, 17h, 4Fh, 8Bh, 2, 1Eh, 5Bh, 2, 19h, 56h, 86h, 2 | |
| F000:3AF8 db 1Bh, 50h, 2, 17h, 4Fh, 8Bh, 4, 0Fh, 4Bh, 8Bh, 4, 0 | |
| F000:3AF8 db 40h, 80h, 0C0h, 3Ah, 1, 0, 3Bh, 0EFh, 3Bh | |
| F000:3BA9 song_kdb_unk0 db 9, 1, 0Dh, 1, 0Bh, 1, 0Fh, 1, 0Dh, 1, 10h, 1, 0Fh, 1 | |
| F000:3BA9 ; DATA XREF: sub_F3380+84o | |
| F000:3BA9 db 12h, 1, 10h, 1, 14h, 1, 12h, 1, 15h, 1, 14h, 1, 17h | |
| F000:3BA9 db 1, 15h, 1, 19h, 1, 17h, 1, 1Bh, 1, 19h, 1, 1Ch, 1, 1Bh | |
| F000:3BA9 db 1, 1Eh, 1, 1Ch, 1, 20h, 1, 1Eh, 1, 21h, 1, 20h, 1, 23h | |
| F000:3BA9 db 1, 21h, 1, 25h, 1, 23h, 1, 27h, 1, 0, 40h, 80h, 0C0h | |
| F000:3BA9 db 3Ah, 1, 0, 3Bh, 39h, 3Ch | |
| F000:3BF3 song_kdb_unk1 db 28h, 1, 23h, 1, 27h, 1, 21h, 1, 25h, 1, 20h, 1, 23h | |
| F000:3BF3 ; DATA XREF: mini_welcome_init+109o | |
| F000:3BF3 ; sub_F3380:l1o | |
| F000:3BF3 db 1, 1Eh, 1, 21h, 1, 1Ch, 1, 20h, 1, 1Bh, 1, 1Eh, 1, 19h | |
| F000:3BF3 db 1, 1Ch, 1, 17h, 1, 1Bh, 1, 15h, 1, 19h, 1, 14h, 1, 17h | |
| F000:3BF3 db 1, 12h, 1, 15h, 1, 10h, 1, 14h, 1, 0Fh, 1, 12h, 1, 0Dh | |
| F000:3BF3 db 1, 10h, 1, 0Bh, 1, 0Fh, 1, 9, 1, 0, 40h, 80h, 0C0h | |
| F000:3BF3 db 3Ah, 1, 0, 3Bh, 16h, 3Dh, 3Fh, 3Ch | |
| F000:3C3F song_kdb_f2 db 0, 40h, 80h, 4, 23h, 4Bh, 97h, 4, 17h, 63h, 8Bh, 4 | |
| F000:3C3F ; DATA XREF: diag_kdb_eval_scancode:play_song_1o | |
| F000:3C3F ; diag_kdb_eval_scancode:l21o | |
| F000:3C3F ; diag_kdb_eval_scancode:l29o | |
| F000:3C3F db 0Bh, 57h, 0A3h, 4, 1Fh, 53h, 87h, 10h, 0, 40h, 80h | |
| F000:3C3F db 4, 21h, 49h, 95h, 4, 15h, 61h, 89h, 4, 9, 55h, 0A1h | |
| F000:3C3F db 4, 1Eh, 52h, 86h, 10h, 1Eh, 52h, 86h, 10h, 0, 40h, 80h | |
| F000:3C3F db 4, 17h, 4, 0, 57h, 4, 17h, 40h, 4, 0, 50h, 93h, 4, 18h | |
| F000:3C3F db 4, 0, 58h, 4, 18h, 40h, 4, 0, 53h, 97h, 4, 1Fh, 4, 0 | |
| F000:3C3F db 5Fh, 4, 1Fh, 40h, 4, 17h, 5Ch, 80h, 10h, 0, 5Ch, 80h | |
| F000:3C3F db 4, 17h, 4, 0, 57h, 4, 17h, 40h, 4, 0, 4Bh, 92h, 4, 18h | |
| F000:3C3F db 4, 0, 58h, 4, 18h, 40h, 4, 0, 4Fh, 97h, 4, 21h, 4Fh | |
| F000:3C3F db 4, 0, 61h, 4, 21h, 40h, 4, 1Eh, 5Bh, 86h, 10h, 1Eh | |
| F000:3C3F db 5Bh, 86h, 4, 23h, 80h, 4, 0, 4, 21h, 4, 0, 5Fh, 80h | |
| F000:3C3F db 4, 13h, 4, 0, 93h, 4, 15h, 80h, 4, 1Eh, 57h, 80h, 4 | |
| F000:3C3F db 23h, 4, 0, 0A3h, 4, 21h, 80h, 4, 0, 57h, 9Fh, 4, 13h | |
| F000:3C3F db 40h, 4, 0, 53h, 4, 15h, 40h, 4, 1Eh, 57h, 80h, 4, 23h | |
| F000:3C3F db 4, 0, 63h, 4, 21h, 40h, 4, 1Fh, 57h, 90h, 8, 0, 40h | |
| F000:3C3F db 80h, 8, 1Ch, 56h, 8Ch, 8, 0, 40h, 80h, 8, 23h, 5Bh | |
| F000:3C3F db 8Bh, 8, 0, 40h, 80h, 8, 0, 40h, 80h, 0C0h, 3Ah, 1, 0 | |
| F000:3C3F db 3Bh | |
| F000:3D18 db 2E7h dup(0), 77h | |
| F000:4000 diag_table_ptr dw offset int_80_diag_init ; DATA XREF: F000:0231o | |
| F000:4002 dw offset int_iret | |
| F000:4004 dw offset int_iret | |
| F000:4006 dw offset int_83_key_pressed | |
| F000:4008 dw offset int_84 | |
| F000:400A dw offset int_iret | |
| F000:400C dw offset int_iret | |
| F000:400E dw offset int_87_diag_diskette | |
| F000:4010 dw offset int_88_diag_video | |
| F000:4012 dw offset int_iret | |
| F000:4014 dw offset int_8a_diag_sound | |
| F000:4016 dw offset int_8b_diag_keyboard | |
| F000:4018 dw offset int_8c_diag_modem | |
| F000:401A dw offset int_8d_diag_parallel_printer | |
| F000:401C dw offset int_8e_diag_serial_printer? | |
| F000:401E dw offset int_8f_diag_rs232 | |
| F000:4020 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4020 ; ints 0x81, 0x82, 0x85, 0x86, 0x89 use this handler by default. | |
| F000:4020 ; int 0x81 / 0x82 / 0x89 use a new one later on | |
| F000:4020 int_iret proc far ; DATA XREF: F000:4002o | |
| F000:4020 ; F000:4004o F000:400Ao | |
| F000:4020 ; F000:400Co F000:4012o | |
| F000:4020 iret | |
| F000:4020 int_iret endp | |
| F000:4021 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4021 ; system diagnostics main entry point (int 0x80) | |
| F000:4021 int_80_diag_init proc near ; DATA XREF: F000:diag_table_ptro | |
| F000:4021 call ds_40 | |
| F000:4024 sub ah, ah | |
| F000:4026 mov al, ds:seg40.crt_mode | |
| F000:4029 int 10h ; set existing video mode | |
| F000:402B mov word ptr ds:seg40.reset_flag, 0 ; reset the "reset flag" | |
| F000:4031 mov ax, 50h ; 'P' | |
| F000:4034 mov ss, ax ; stack at 0x50 segment | |
| F000:4036 mov ax, 100h | |
| F000:4039 mov sp, ax ; stack uses 50:ff to 50:00 | |
| F000:403B cli | |
| F000:403C mov ax, ds:seg40.true_mem | |
| F000:403F push ds | |
| F000:4040 call ds_50 ; ds = 0x50 | |
| F000:4043 mov ds:seg50.mem_tot, ax | |
| F000:4046 sub ax, ax | |
| F000:4048 mov ds:seg50.mem_done_s, ax ; 0 | |
| F000:404B mov ds:seg50.mem_done_o, ax ; 0 | |
| F000:404E mov es, ax ; es = 0 | |
| F000:4050 mov di, 70h ; 'p' ; 0x70/4 = 0x1c | |
| F000:4053 mov ax, es:[di] | |
| F000:4056 mov ds:seg50.int1co, ax ; save old int 0x1c | |
| F000:4059 mov ax, offset diag_int_1c ; use diag's int 0x1c | |
| F000:405C mov es:[di], ax ; new offset for 0x1c | |
| F000:405F inc di | |
| F000:4060 inc di | |
| F000:4061 mov ax, es:[di] ; get segment for 0x1c | |
| F000:4064 mov ds:seg50.int1cs, ax ; save old segment | |
| F000:4067 mov ax, cs | |
| F000:4069 mov es:[di], ax ; new segment for 0x1c | |
| F000:406C sti ; enable interrupts | |
| F000:406D pop ds | |
| F000:406E call diag_run_action | |
| F000:4071 mov ax, 507h ; page 7 | |
| F000:4074 int 10h ; - VIDEO - SELECT DISPLAY PAGE | |
| F000:4074 ; AL = display page, 0-7 for modes 0 & 1, 0-3 for modes 2 & 3 | |
| F000:4076 mov dx, 900h ; row 9, col 0 | |
| F000:4079 mov ah, 2 | |
| F000:407B mov bh, 7 | |
| F000:407D int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:407D ; DH,DL = row, column (0,0 = upper left) | |
| F000:407D ; BH = page number | |
| F000:407F int 83h ; reserved for BASIC | |
| F000:407F int_80_diag_init endp | |
| F000:4081 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4081 wait_and_process_key proc near ; CODE XREF: diag_run_action_mfg+C2j | |
| F000:4081 push bx | |
| F000:4082 push cx | |
| F000:4083 mov bl, 3 | |
| F000:4085 l0: ; CODE XREF: wait_and_process_key+Aj | |
| F000:4085 sub cx, cx | |
| F000:4087 l1: ; CODE XREF: wait_and_process_key:l1j | |
| F000:4087 loop l1 ; delay | |
| F000:4089 dec bl | |
| F000:408B jnz short l0 ; more delay | |
| F000:408D mov bx, ds:seg40.buffer_tail | |
| F000:4091 mov ds:seg40.buffer_head, bx ; tail = head. if there was a key in buffer, ignore it | |
| F000:4095 pop cx | |
| F000:4096 pop bx | |
| F000:4097 main_loop: ; CODE XREF: wait_and_process_key+28j | |
| F000:4097 push ax | |
| F000:4098 mov ah, 0 | |
| F000:409A int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY | |
| F000:409A ; Return: AH = scan code, AL = character | |
| F000:409C cmp ah, 1Ch ; pressed enter? | |
| F000:409F pop ax | |
| F000:40A0 mov ah, al | |
| F000:40A2 jnz short l3 ; no, another key | |
| F000:40A4 jmp short diag_run_action_mfg | |
| F000:40A6 db 90h ; | |
| F000:40A7 l3: ; CODE XREF: wait_and_process_key+21j | |
| F000:40A7 int 83h ; reserved for BASIC | |
| F000:40A9 jmp short main_loop | |
| F000:40A9 wait_and_process_key endp | |
| F000:40AB ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:40AB int_83_key_pressed proc far ; DATA XREF: F000:4006o | |
| F000:40AB sti | |
| F000:40AC push ds | |
| F000:40AD call ds_50 | |
| F000:40B0 mov ah, 1 | |
| F000:40B2 mov ch, 20h ; ' ' | |
| F000:40B4 int 10h ; - VIDEO - SET CURSOR CHARACTERISTICS | |
| F000:40B4 ; CH bits 0-4 = start line for cursor in character cell | |
| F000:40B4 ; bits 5-6 = blink attribute | |
| F000:40B4 ; CL bits 0-4 = end line for cursor in character cell | |
| F000:40B6 mov ah, 3 | |
| F000:40B8 int 10h ; - VIDEO - READ CURSOR POSITION | |
| F000:40B8 ; BH = page number | |
| F000:40B8 ; Return: DH,DL = row,column, CH = cursor start line, CL = cursor end line | |
| F000:40BA l0: ; CODE XREF: int_83_key_pressed+22j | |
| F000:40BA ; int_83_key_pressed+26j | |
| F000:40BA inc dx | |
| F000:40BB cmp dl, 27h ; ''' | |
| F000:40BE jnz short l1 | |
| F000:40C0 mov dx, 1500h | |
| F000:40C3 l1: ; CODE XREF: int_83_key_pressed+13j | |
| F000:40C3 ; int_83_key_pressed+4Ej | |
| F000:40C3 mov ah, 2 | |
| F000:40C5 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:40C5 ; DH,DL = row, column (0,0 = upper left) | |
| F000:40C5 ; BH = page number | |
| F000:40C7 mov ah, 8 | |
| F000:40C9 int 10h ; - VIDEO - READ ATTRIBUTES/CHARACTER AT CURSOR POSITION | |
| F000:40C9 ; BH = display page | |
| F000:40C9 ; Return: AL = character | |
| F000:40C9 ; AH = attribute of character (alpha modes) | |
| F000:40CB cmp al, 20h ; ' ' | |
| F000:40CD jz short l0 | |
| F000:40CF cmp al, 2Ch ; ',' | |
| F000:40D1 jz short l0 | |
| F000:40D3 cmp al, 2Ah ; '*' | |
| F000:40D5 jz short l2 | |
| F000:40D7 cmp al, 0EAh ; 'ê' | |
| F000:40D9 jz short l4 | |
| F000:40DB mov ds:1, bh | |
| F000:40DF mov ds:2, dx | |
| F000:40E3 push ax | |
| F000:40E4 mov ah, 1 | |
| F000:40E6 mov cx, 7 | |
| F000:40E9 int 10h ; - VIDEO - SET CURSOR CHARACTERISTICS | |
| F000:40E9 ; CH bits 0-4 = start line for cursor in character cell | |
| F000:40E9 ; bits 5-6 = blink attribute | |
| F000:40E9 ; CL bits 0-4 = end line for cursor in character cell | |
| F000:40EB pop ax | |
| F000:40EC pop ds | |
| F000:40ED iret | |
| F000:40EE l2: ; CODE XREF: int_83_key_pressed+2Aj | |
| F000:40EE dec bh | |
| F000:40F0 l3: ; CODE XREF: int_83_key_pressed+52j | |
| F000:40F0 mov ah, 5 | |
| F000:40F2 mov al, bh | |
| F000:40F4 int 10h ; - VIDEO - SELECT DISPLAY PAGE | |
| F000:40F4 ; AL = display page, 0-7 for modes 0 & 1, 0-3 for modes 2 & 3 | |
| F000:40F6 mov dx, 900h | |
| F000:40F9 jmp short l1 | |
| F000:40FB l4: ; CODE XREF: int_83_key_pressed+2Ej | |
| F000:40FB mov bh, 7 | |
| F000:40FD jmp short l3 | |
| F000:40FD int_83_key_pressed endp | |
| F000:40FF ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:40FF ; input | |
| F000:40FF ; ah = test to run | |
| F000:40FF diag_run_action_mfg proc near ; CODE XREF: wait_and_process_key+23j | |
| F000:40FF ; diag_run_action+28j | |
| F000:40FF call ds_50 ; ds = 0x50 | |
| F000:4102 mov byte ptr ds:seg50.menu_up, 0 | |
| F000:4107 push ax | |
| F000:4108 mov ah, 1 | |
| F000:410A mov ch, 20h ; ' ' | |
| F000:410C int 10h ; - VIDEO - SET CURSOR CHARACTERISTICS | |
| F000:410C ; CH bits 0-4 = start line for cursor in character cell | |
| F000:410C ; bits 5-6 = blink attribute | |
| F000:410C ; CL bits 0-4 = end line for cursor in character cell | |
| F000:410E call ds_40 ; ds = 0x40 | |
| F000:4111 and byte ptr ds:seg40.bios_break, 7Fh | |
| F000:4116 call clear_screen | |
| F000:4119 mov ax, 500h ; page 0 | |
| F000:411C int 10h ; - VIDEO - SELECT DISPLAY PAGE | |
| F000:411C ; AL = display page, 0-7 for modes 0 & 1, 0-3 for modes 2 & 3 | |
| F000:411E pop ax | |
| F000:411F mov cx, 64 ; go through 64 interrupt handlers | |
| F000:4122 mov di, 214h ; int 0x85 - 0xc4 (0x214 / 4 = 0x85) | |
| F000:4125 l0: ; CODE XREF: diag_run_action_mfg+3Ej | |
| F000:4125 ; diag_run_action_mfg+58j | |
| F000:4125 push cx | |
| F000:4126 push di | |
| F000:4127 push es | |
| F000:4128 push ax | |
| F000:4129 push ds | |
| F000:412A mov al, cl | |
| F000:412C out 10h, al ; mfg flag = 64 -> 1 | |
| F000:412E clc | |
| F000:412F pushf ; needed for "iret" from the int. handlers | |
| F000:4130 call dword ptr es:[di] ; call the interrupts 0x85 to 0xc4 | |
| F000:4133 pop ds | |
| F000:4134 pop ax | |
| F000:4135 pop es | |
| F000:4136 pop di | |
| F000:4137 pop cx | |
| F000:4138 jb short l1 | |
| F000:413A add di, 4 ; next interrupt handler | |
| F000:413D loop l0 | |
| F000:413F mov ax, 0FFFFh | |
| F000:4142 mov es, ax ; es = 0xffff | |
| F000:4144 mov di, 1 ; wtf is ffff:0001... shouldn't it be ffff:0? | |
| F000:4147 jmp dword ptr es:[di] ; jump to: ffff:0001 (reset?) | |
| F000:414A l1: ; CODE XREF: diag_run_action_mfg+39j | |
| F000:414A cmp ah, 0FFh ; ah = 0xff ? | |
| F000:414D jnz short l4 ; if not, try to reset (?) | |
| F000:414F or dh, dh ; dh == 0 or dh == 41h -> do next test | |
| F000:4151 jnz short l3 | |
| F000:4153 l2: ; CODE XREF: diag_run_action_mfg+5Dj | |
| F000:4153 dec cx ; one less time | |
| F000:4154 add di, 4 ; next interrupt handler | |
| F000:4157 jmp short l0 ; do the next test | |
| F000:4159 l3: ; CODE XREF: diag_run_action_mfg+52j | |
| F000:4159 cmp dh, 41h ; 'A' | |
| F000:415C jz short l2 | |
| F000:415E call ds_50 | |
| F000:4161 mov ds:seg50.mfg_tst, cl | |
| F000:4165 jmp dword ptr ds:seg50.mfg_rtn | |
| F000:4169 l4: ; CODE XREF: diag_run_action_mfg+4Ej | |
| F000:4169 push bx | |
| F000:416A push dx | |
| F000:416B call diag_run_action | |
| F000:416E call ds_50 ; ds = 0x50 | |
| F000:4171 mov al, ds:seg50.dcp_menu_page | |
| F000:4174 mov bh, al | |
| F000:4176 mov ah, 5 | |
| F000:4178 int 10h ; - VIDEO - SELECT DISPLAY PAGE | |
| F000:4178 ; AL = display page, 0-7 for modes 0 & 1, 0-3 for modes 2 & 3 | |
| F000:417A mov ah, 2 | |
| F000:417C mov dx, ds:seg50.dcp_row_col | |
| F000:4180 inc dh | |
| F000:4182 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:4182 ; DH,DL = row, column (0,0 = upper left) | |
| F000:4182 ; BH = page number | |
| F000:4184 mov dx, 201h | |
| F000:4187 in al, dx ; hi nibble 0000 = manufacturing (burn-in) mode | |
| F000:4187 ; 0001 = manufacturing (system test) mode | |
| F000:4187 ; 0010 = service mode (loop post) | |
| F000:4187 ; 0100 = service mode (system test) | |
| F000:4188 pop dx | |
| F000:4189 pop bx | |
| F000:418A or dh, dh | |
| F000:418C jnz short l5 | |
| F000:418E mov al, 2Ah ; '*' | |
| F000:4190 jmp short l6 | |
| F000:4192 l5: ; CODE XREF: diag_run_action_mfg+8Dj | |
| F000:4192 and al, 0F0h | |
| F000:4194 cmp al, 1000000b | |
| F000:4196 jz short l7 | |
| F000:4198 mov al, dh | |
| F000:419A call tty_write_char | |
| F000:419D mov al, dl | |
| F000:419F l6: ; CODE XREF: diag_run_action_mfg+91j | |
| F000:419F call tty_write_char | |
| F000:41A2 jmp short l8 | |
| F000:41A4 l7: ; CODE XREF: diag_run_action_mfg+97j | |
| F000:41A4 mov al, bh | |
| F000:41A6 call bcd_add_4_times | |
| F000:41A9 mov al, bl | |
| F000:41AB call bcd_add_4_times | |
| F000:41AE l8: ; CODE XREF: diag_run_action_mfg+A3j | |
| F000:41AE mov bh, ds:seg50.dcp_menu_page | |
| F000:41B2 mov dx, ds:seg50.dcp_row_col | |
| F000:41B6 mov ah, 2 | |
| F000:41B8 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:41B8 ; DH,DL = row, column (0,0 = upper left) | |
| F000:41B8 ; BH = page number | |
| F000:41BA mov ah, 8 | |
| F000:41BC int 10h ; - VIDEO - READ ATTRIBUTES/CHARACTER AT CURSOR POSITION | |
| F000:41BC ; BH = display page | |
| F000:41BC ; Return: AL = character | |
| F000:41BC ; AH = attribute of character (alpha modes) | |
| F000:41BE call ds_40 | |
| F000:41C1 jmp wait_and_process_key | |
| F000:41C1 diag_run_action_mfg endp | |
| F000:41C4 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:41C4 ds_50 proc near ; CODE XREF: int_80_diag_init+1Fp | |
| F000:41C4 ; int_83_key_pressed+2p | |
| F000:41C4 ; diag_run_action_mfgp | |
| F000:41C4 ; diag_run_action_mfg+5Fp | |
| F000:41C4 ; diag_run_action_mfg+6Fp | |
| F000:41C4 ; diag_run_action+5Ep ... | |
| F000:41C4 push ax | |
| F000:41C5 mov ax, 50h ; 'P' | |
| F000:41C8 mov ds, ax | |
| F000:41CA pop ax | |
| F000:41CB retn | |
| F000:41CB ds_50 endp | |
| F000:41CC ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:41CC diag_run_action proc near ; CODE XREF: int_80_diag_init+4Dp | |
| F000:41CC ; diag_run_action_mfg+6Cp | |
| F000:41CC xor ax, ax | |
| F000:41CE mov es, ax ; es = 0 | |
| F000:41D0 int 10h ; set video mode 40x25 b&w | |
| F000:41D2 mov ax, 507h | |
| F000:41D5 int 10h ; set display page: 7 | |
| F000:41D7 mov ah, 2 | |
| F000:41D9 mov dx, 102h | |
| F000:41DC mov bh, 7 | |
| F000:41DE int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:41DE ; DH,DL = row, column (0,0 = upper left) | |
| F000:41DE ; BH = page number | |
| F000:41E0 call ds_40 ; ds = 0x40 | |
| F000:41E3 mov dx, 201h | |
| F000:41E6 in al, dx ; hi nibble 0000 = manufacturing (burn-in) mode | |
| F000:41E6 ; 0001 = manufacturing (system test) mode | |
| F000:41E6 ; 0010 = service mode (loop post) | |
| F000:41E6 ; 0100 = service mode (system test) | |
| F000:41E7 and al, 0F0h | |
| F000:41E9 mov ah, 0 | |
| F000:41EB cmp al, 10000b ; mfg sys test mode? | |
| F000:41ED jnz short l0 ; no, jump | |
| F000:41EF dec ah ; ah = 0xff: mfg system test | |
| F000:41F1 add sp, 2 ; stack +2 (simulate pop) | |
| F000:41F4 jmp diag_run_action_mfg | |
| F000:41F7 l0: ; CODE XREF: diag_run_action+21j | |
| F000:41F7 cmp al, 1000000b ; service mode (system test) ? | |
| F000:41F9 jnz short l1 ; no, jump | |
| F000:41FB inc ah ; ah = 1 (service mode - system test) | |
| F000:41FD l1: ; CODE XREF: diag_run_action+2Dj | |
| F000:41FD mov cx, 64 ; go through 64 interrupts | |
| F000:4200 mov di, 214h ; from int int 0x85 to 0xc4 (0x214 / 4 = 0x85) | |
| F000:4203 l2: ; CODE XREF: diag_run_action+48j | |
| F000:4203 push cx | |
| F000:4204 push di | |
| F000:4205 push es | |
| F000:4206 push ax | |
| F000:4207 push ds | |
| F000:4208 pushf ; pushf so that "iret" works as expected | |
| F000:4209 call dword ptr es:[di] ; call all interrupt handlers | |
| F000:420C pop ds | |
| F000:420D pop ax | |
| F000:420E pop es | |
| F000:420F pop di | |
| F000:4210 pop cx | |
| F000:4211 add di, 4 ; next interrupt handler | |
| F000:4214 loop l2 | |
| F000:4216 mov ah, 0Fh | |
| F000:4218 int 10h ; - VIDEO - GET CURRENT VIDEO MODE | |
| F000:4218 ; Return: AH = number of columns on screen | |
| F000:4218 ; AL = current video mode | |
| F000:4218 ; BH = current active display page | |
| F000:421A mov dx, 1525h | |
| F000:421D mov ah, 2 | |
| F000:421F int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:421F ; DH,DL = row, column (0,0 = upper left) | |
| F000:421F ; BH = page number | |
| F000:4221 mov ax, 0AEAh | |
| F000:4224 mov cx, 1 | |
| F000:4227 int 10h ; - VIDEO - WRITE CHARACTERS ONLY AT CURSOR POSITION | |
| F000:4227 ; AL = character, BH = display page - alpha mode | |
| F000:4227 ; BL = color of character (graphics mode, PCjr only) | |
| F000:4227 ; CX = number of times to write character | |
| F000:4229 push ds | |
| F000:422A call ds_50 | |
| F000:422D mov byte ptr ds:seg50.menu_up, 0FFh | |
| F000:4232 pop ds | |
| F000:4233 push ax | |
| F000:4234 push cx | |
| F000:4235 mov ah, 1 | |
| F000:4237 mov cx, 7 | |
| F000:423A int 10h ; - VIDEO - SET CURSOR CHARACTERISTICS | |
| F000:423A ; CH bits 0-4 = start line for cursor in character cell | |
| F000:423A ; bits 5-6 = blink attribute | |
| F000:423A ; CL bits 0-4 = end line for cursor in character cell | |
| F000:423C pop cx | |
| F000:423D pop ax | |
| F000:423E retn | |
| F000:423E diag_run_action endp ; sp = -2 | |
| F000:423F ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:423F bcd_add_4_times proc near ; CODE XREF: diag_run_action_mfg+A7p | |
| F000:423F ; diag_run_action_mfg+ACp | |
| F000:423F push ax | |
| F000:4240 mov cl, 4 | |
| F000:4242 shr al, cl | |
| F000:4244 call bcd_add_130 | |
| F000:4247 pop ax | |
| F000:4248 and al, 0Fh | |
| F000:4248 bcd_add_4_times endp | |
| F000:424A ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:424A bcd_add_130 proc near ; CODE XREF: bcd_add_4_times+5p | |
| F000:424A add al, 90h ; '' | |
| F000:424C daa | |
| F000:424D adc al, 40h ; '@' | |
| F000:424F daa | |
| F000:424F bcd_add_130 endp | |
| F000:4250 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4250 ; al = char to write | |
| F000:4250 tty_write_char proc near ; CODE XREF: diag_run_action_mfg+9Bp | |
| F000:4250 ; diag_run_action_mfg:l6p | |
| F000:4250 push bx | |
| F000:4251 mov ah, 0Eh | |
| F000:4253 mov bh, 0 | |
| F000:4255 int 10h ; - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE) | |
| F000:4255 ; AL = character, BH = display page (alpha modes) | |
| F000:4255 ; BL = foreground color (graphics modes) | |
| F000:4257 pop bx | |
| F000:4258 retn | |
| F000:4258 tty_write_char endp | |
| F000:4259 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4259 clear_screen proc near ; CODE XREF: diag_run_action_mfg+17p | |
| F000:4259 push es | |
| F000:425A push ax | |
| F000:425B push di | |
| F000:425C push cx | |
| F000:425D cld ; forward direction | |
| F000:425E sub di, di ; di = 0 | |
| F000:4260 mov ax, 0F20h ; attribute + char: white + space | |
| F000:4263 mov cx, 0B800h | |
| F000:4266 mov es, cx ; es = 0xb800 (video segment) | |
| F000:4268 mov cx, 1024 ; 2k (1k words) | |
| F000:426B rep stosw ; fill screen | |
| F000:426D pop cx | |
| F000:426E pop di | |
| F000:426F pop ax | |
| F000:4270 pop es | |
| F000:4271 retn | |
| F000:4271 clear_screen endp | |
| F000:4272 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4272 ds_60 proc near ; CODE XREF: int_87_diag_diskettep | |
| F000:4272 push ax | |
| F000:4273 mov ax, 60h ; '`' | |
| F000:4276 mov ds, ax | |
| F000:4278 pop ax | |
| F000:4279 retn | |
| F000:4279 ds_60 endp | |
| F000:427A aKb_0 db ' KB *' ; DATA XREF: diag_print_mem_tested+2Eo | |
| F000:427F ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:427F diag_int_1c proc far ; DATA XREF: int_80_diag_init+38o | |
| F000:427F ; FUNCTION CHUNK AT F000:4386 SIZE 0000003F BYTES | |
| F000:427F push ds | |
| F000:4280 call ds_50 | |
| F000:4283 cmp byte ptr ds:seg50.menu_up, 0FFh | |
| F000:4288 jz short l1 | |
| F000:428A exit: ; CODE XREF: diag_int_1c+BCj | |
| F000:428A pushf | |
| F000:428B call dword ptr ds:seg50.int1co ; call old 0x1c | |
| F000:428F pop ds | |
| F000:4290 iret | |
| F000:4291 l1: ; CODE XREF: diag_int_1c+9j | |
| F000:4291 cli | |
| F000:4292 push ax | |
| F000:4293 push bx | |
| F000:4294 push cx | |
| F000:4295 push dx | |
| F000:4296 push es | |
| F000:4297 mov ax, ds:seg50.mem_done_s | |
| F000:429A mov bx, ds:seg50.mem_done_o | |
| F000:429E push ds | |
| F000:429F mov ds, ax | |
| F000:42A1 mov cx, 80h ; '' | |
| F000:42A4 ;---------------------------------------------------- | |
| F000:42A4 ; checks memory using 0x55aa pattern | |
| F000:42A4 ;---------------------------------------------------- | |
| F000:42A4 l2: ; CODE XREF: diag_int_1c+73j | |
| F000:42A4 mov ah, [bx] | |
| F000:42A6 mov dx, 55AAh | |
| F000:42A9 mov al, 0 ; disable nmi | |
| F000:42AB out 0A0h, al | |
| F000:42AD mov [bx], dl | |
| F000:42AF xor dl, [bx] | |
| F000:42B1 jnz short diag_mem_error | |
| F000:42B3 mov [bx], ah | |
| F000:42B5 mov al, 10000000b ; enable nmi | |
| F000:42B7 out 0A0h, al | |
| F000:42B9 xchg dl, dh | |
| F000:42BB mov al, 0 ; disable nmi | |
| F000:42BD out 0A0h, al | |
| F000:42BF mov [bx], dl | |
| F000:42C1 xor dl, [bx] | |
| F000:42C3 jnz short diag_mem_error | |
| F000:42C5 mov [bx], ah | |
| F000:42C7 mov al, 10000000b ; enable nmi | |
| F000:42C9 out 0A0h, al | |
| F000:42CB mov dx, 0FFh | |
| F000:42CE nop | |
| F000:42CF mov al, 0 ; disable nmi | |
| F000:42D1 out 0A0h, al | |
| F000:42D3 mov [bx], dl | |
| F000:42D5 xor dl, [bx] | |
| F000:42D7 jnz short diag_mem_error | |
| F000:42D9 mov [bx], ah | |
| F000:42DB mov al, 10000000b ; enable nmi | |
| F000:42DD out 0A0h, al | |
| F000:42DF xchg dl, dh | |
| F000:42E1 mov al, 0 ; disable nmi | |
| F000:42E3 out 0A0h, al | |
| F000:42E5 mov [bx], dl | |
| F000:42E7 xor dl, [bx] | |
| F000:42E9 jnz short diag_mem_error | |
| F000:42EB mov [bx], ah | |
| F000:42ED mov al, 10000000b ; enable nmi | |
| F000:42EF out 0A0h, al | |
| F000:42F1 inc bx | |
| F000:42F2 loop l2 | |
| F000:42F4 jmp short l4 | |
| F000:42F6 diag_mem_error: ; CODE XREF: diag_int_1c+32j | |
| F000:42F6 ; diag_int_1c+44j | |
| F000:42F6 ; diag_int_1c+58j | |
| F000:42F6 ; diag_int_1c+6Aj | |
| F000:42F6 pop ds | |
| F000:42F7 jmp diag_print_mem_err_and_halt | |
| F000:42FA l4: ; CODE XREF: diag_int_1c+75j | |
| F000:42FA mov ax, ds | |
| F000:42FC pop ds | |
| F000:42FD or bx, bx | |
| F000:42FF jnz short l5 | |
| F000:4301 add ah, 10h | |
| F000:4304 l5: ; CODE XREF: diag_int_1c+80j | |
| F000:4304 mov ds:seg50.mem_done_s, ax | |
| F000:4307 mov ds:seg50.mem_done_o, bx | |
| F000:430B inc byte ptr ds:seg50.done_128 | |
| F000:430F cmp byte ptr ds:seg50.done_128, 8 | |
| F000:4314 jnz short l6 | |
| F000:4316 mov byte ptr ds:seg50.done_128, 0 | |
| F000:431B inc word ptr ds:seg50.kbdone | |
| F000:431F call diag_print_mem_tested | |
| F000:4322 mov ax, ds:seg50.mem_tot | |
| F000:4325 cmp ax, ds:seg50.kbdone | |
| F000:4329 jnz short l6 | |
| F000:432B sub ax, ax | |
| F000:432D mov ds:seg50.kbdone, ax | |
| F000:4330 mov ds:seg50.mem_done_s, ax | |
| F000:4333 mov ds:seg50.mem_done_o, ax | |
| F000:4336 l6: ; CODE XREF: diag_int_1c+95j | |
| F000:4336 ; diag_int_1c+AAj | |
| F000:4336 pop es | |
| F000:4337 pop dx | |
| F000:4338 pop cx | |
| F000:4339 pop bx | |
| F000:433A pop ax | |
| F000:433B jmp exit | |
| F000:433B diag_int_1c endp | |
| F000:433E ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:433E diag_print_mem_tested proc near ; CODE XREF: diag_int_1c+A0p | |
| F000:433E push bx | |
| F000:433F push cx | |
| F000:4340 push dx | |
| F000:4341 push ax | |
| F000:4342 push di | |
| F000:4343 push es | |
| F000:4344 mov ax, 0BB80h ; page 7 buffer | |
| F000:4347 mov es, ax | |
| F000:4349 mov di, 79Ch ; dst -> bb80:079c (bottom right corer in page 8) | |
| F000:434C mov ax, ds:seg40.kdb_error | |
| F000:434F mov bx, 0Ah | |
| F000:4352 mov cx, 3 | |
| F000:4355 l0: ; CODE XREF: diag_print_mem_tested+1Fj | |
| F000:4355 xor dx, dx | |
| F000:4357 div bx | |
| F000:4359 or dl, 30h | |
| F000:435C push dx | |
| F000:435D loop l0 | |
| F000:435F mov cx, 3 | |
| F000:4362 l1: ; CODE XREF: diag_print_mem_tested+28j | |
| F000:4362 pop ax | |
| F000:4363 call diag_place_al_in_buffer | |
| F000:4366 loop l1 | |
| F000:4368 mov cx, 5 | |
| F000:436B push si | |
| F000:436C mov si, offset aKb_0 ; " KB *" | |
| F000:436F l2: ; CODE XREF: diag_print_mem_tested+38j | |
| F000:436F mov al, cs:[si] | |
| F000:4372 inc si | |
| F000:4373 call diag_place_al_in_buffer | |
| F000:4376 loop l2 | |
| F000:4378 pop si | |
| F000:4379 pop di | |
| F000:437A pop es | |
| F000:437B pop ax | |
| F000:437C pop dx | |
| F000:437D pop cx | |
| F000:437E pop bx | |
| F000:437F retn | |
| F000:437F diag_print_mem_tested endp | |
| F000:4380 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4380 ; input: | |
| F000:4380 ; es:di -> dst buffer | |
| F000:4380 ; al -> char to write to buffer | |
| F000:4380 ; output: | |
| F000:4380 ; di += 2 | |
| F000:4380 diag_place_al_in_buffer proc near ; CODE XREF: diag_print_mem_tested+25p | |
| F000:4380 ; diag_print_mem_tested+35p | |
| F000:4380 ; diag_int_1c+124p | |
| F000:4380 ; sub_F43D0+6p | |
| F000:4380 mov es:[di], al | |
| F000:4383 inc di | |
| F000:4384 inc di | |
| F000:4385 retn | |
| F000:4385 diag_place_al_in_buffer endp | |
| F000:4386 ; START OF FUNCTION CHUNK FOR diag_int_1c | |
| F000:4386 diag_print_mem_err_and_halt: ; CODE XREF: diag_int_1c+78j | |
| F000:4386 push ax | |
| F000:4387 mov ax, 507h ; page 7 | |
| F000:438A int 10h ; - VIDEO - SELECT DISPLAY PAGE | |
| F000:438A ; AL = display page, 0-7 for modes 0 & 1, 0-3 for modes 2 & 3 | |
| F000:438C pop ax | |
| F000:438D mov cx, es | |
| F000:438F mov dx, 0BB80h ; page 7 buffer | |
| F000:4392 mov es, dx | |
| F000:4394 mov di, 7AAh ; dst -> es:di (page 7) | |
| F000:4397 mov dx, 201h | |
| F000:439A in al, dx ; hi nibble 0000 = manufacturing (burn-in) mode | |
| F000:439A ; 0001 = manufacturing (system test) mode | |
| F000:439A ; 0010 = service mode (loop post) | |
| F000:439A ; 0100 = service mode (system test) | |
| F000:439B and al, 0F0h | |
| F000:439D cmp al, 1000000b | |
| F000:439F jz short l7 | |
| F000:43A1 mov al, 58h ; 'X' | |
| F000:43A3 call diag_place_al_in_buffer | |
| F000:43A6 jmp short l9 | |
| F000:43A8 l7: ; CODE XREF: diag_int_1c+120j | |
| F000:43A8 mov al, ch | |
| F000:43AA call sub_F43C5 | |
| F000:43AD mov al, 0 | |
| F000:43AF rcr bl, 1 | |
| F000:43B1 jnb short l8 | |
| F000:43B3 inc al | |
| F000:43B5 l8: ; CODE XREF: diag_int_1c+132j | |
| F000:43B5 call sub_F43C5 | |
| F000:43B8 inc di | |
| F000:43B9 inc di | |
| F000:43BA mov al, dl | |
| F000:43BC call sub_F43C5 | |
| F000:43BF l9: ; CODE XREF: diag_int_1c+127j | |
| F000:43BF cli ; disable interrupts | |
| F000:43C0 sub al, al ; disable nmi | |
| F000:43C2 out 0A0h, al | |
| F000:43C4 hlt | |
| F000:43C4 ; END OF FUNCTION CHUNK FOR diag_int_1c | |
| F000:43C5 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:43C5 sub_F43C5 proc near ; CODE XREF: diag_int_1c+12Bp | |
| F000:43C5 ; diag_int_1c:l8p | |
| F000:43C5 ; diag_int_1c+13Dp | |
| F000:43C5 push ax | |
| F000:43C6 mov cl, 4 | |
| F000:43C8 shr al, cl | |
| F000:43CA call sub_F43D0 | |
| F000:43CD pop ax | |
| F000:43CE and al, 0Fh | |
| F000:43CE sub_F43C5 endp | |
| F000:43D0 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:43D0 sub_F43D0 proc near ; CODE XREF: sub_F43C5+5p | |
| F000:43D0 add al, 90h ; '' | |
| F000:43D2 daa | |
| F000:43D3 adc al, 40h ; '@' | |
| F000:43D5 daa | |
| F000:43D6 call diag_place_al_in_buffer | |
| F000:43D9 retn | |
| F000:43D9 sub_F43D0 endp | |
| F000:43DA word_F43DA dw 2Ah ; DATA XREF: sub_F4B22:l0r | |
| F000:43DC word_F43DC dw 226h ; DATA XREF: sub_F4B22+Br | |
| F000:43DE word_F43DE dw 113h ; DATA XREF: sub_F4B22+3Er | |
| F000:43E0 word_F43E0 dw 2710h ; DATA XREF: sub_F4B22+31r | |
| F000:43E2 word_F43E2 dw 2 ; DATA XREF: sub_F4B22+4Dr | |
| F000:43E4 disk_err_codes db 44h ; DATA XREF: diag_disk_set_err_code+34r | |
| F000:43E5 db 42h ; B | |
| F000:43E6 db 42h ; B | |
| F000:43E7 db 42h ; B | |
| F000:43E8 db 42h ; B | |
| F000:43E9 db 42h ; B | |
| F000:43EA db 43h ; C | |
| F000:43EB db 42h ; B | |
| F000:43EC db 42h ; B | |
| F000:43ED db 43h ; C | |
| F000:43EE db 42h ; B | |
| F000:43EF s_diskette_anim db 28h ; ( ; DATA XREF: int_87_diag_diskette+5Co | |
| F000:43F0 db 0Ah | |
| F000:43F1 db 0Bh | |
| F000:43F2 db 3 | |
| F000:43F3 db 0DAh ; Ú | |
| F000:43F4 db 0C4h ; Ä | |
| F000:43F5 db 0C4h ; Ä | |
| F000:43F6 db 0C4h ; Ä | |
| F000:43F7 db 0BFh ; ¿ | |
| F000:43F8 db 0Bh | |
| F000:43F9 db 0FBh ; û | |
| F000:43FA db 0B3h ; ³ | |
| F000:43FB db 20h | |
| F000:43FC db 20h | |
| F000:43FD db 20h | |
| F000:43FE db 0B3h ; ³ | |
| F000:43FF db 0Bh | |
| F000:4400 db 0FBh ; û | |
| F000:4401 db 0B3h ; ³ | |
| F000:4402 db 20h | |
| F000:4403 db 4Fh ; O | |
| F000:4404 db 20h | |
| F000:4405 db 0B3h ; ³ | |
| F000:4406 db 0Bh | |
| F000:4407 db 0FBh ; û | |
| F000:4408 db 0B3h ; ³ | |
| F000:4409 db 20h | |
| F000:440A db 0B3h ; ³ | |
| F000:440B db 20h | |
| F000:440C db 0B3h ; ³ | |
| F000:440D db 0Bh | |
| F000:440E db 0FBh ; û | |
| F000:440F db 0C0h ; À | |
| F000:4410 db 0C4h ; Ä | |
| F000:4411 db 0C4h ; Ä | |
| F000:4412 db 0C4h ; Ä | |
| F000:4413 db 0D9h ; Ù | |
| F000:4414 db 0Bh | |
| F000:4415 db 0FBh ; û | |
| F000:4416 db 0Ch | |
| F000:4417 db 0FFh | |
| F000:4418 db 0 | |
| F000:4419 db 0FCh ; ü | |
| F000:441A unk_F441A db 3 ; DATA XREF: int_87_diag_diskette+68o | |
| F000:441B db 7 | |
| F000:441C db 31h ; 1 | |
| F000:441D db 7Bh ; { | |
| F000:441E db 0A2h ; ¢ | |
| F000:441F db 0FDh ; ý | |
| F000:4420 db 1Fh | |
| F000:4421 db 80h ; | |
| F000:4422 db 0FCh ; ü | |
| F000:4423 unk_F4423 db 3 ; DATA XREF: int_87_diag_diskette:l3o | |
| F000:4424 db 87h ; | |
| F000:4425 db 31h ; 1 | |
| F000:4426 db 7Bh ; { | |
| F000:4427 db 0A2h ; ¢ | |
| F000:4428 db 0FDh ; ý | |
| F000:4429 db 1Fh | |
| F000:442A db 80h ; | |
| F000:442B db 0FCh ; ü | |
| F000:442C unk_F442C db 7 ; DATA XREF: int_87_diag_diskette:l4o | |
| F000:442D db 87h ; | |
| F000:442E db 31h ; 1 | |
| F000:442F db 7 | |
| F000:4430 db 2Ch ; , | |
| F000:4431 db 87h ; | |
| F000:4432 db 32h ; 2 | |
| F000:4433 db 7Ah ; z | |
| F000:4434 db 0A2h ; ¢ | |
| F000:4435 db 0A2h ; ¢ | |
| F000:4436 db 0A2h ; ¢ | |
| F000:4437 db 0FDh ; ý | |
| F000:4438 db 1Fh | |
| F000:4439 db 7Fh ; | |
| F000:443A db 0FCh ; ü | |
| F000:443B unk_F443B db 0Bh ; DATA XREF: int_87_diag_diskette+7Do | |
| F000:443C db 87h ; | |
| F000:443D db 31h ; 1 | |
| F000:443E db 7 | |
| F000:443F db 2Ch ; , | |
| F000:4440 db 87h ; | |
| F000:4441 db 32h ; 2 | |
| F000:4442 db 7 | |
| F000:4443 db 2Ch ; , | |
| F000:4444 db 87h ; | |
| F000:4445 db 33h ; 3 | |
| F000:4446 db 79h ; y | |
| F000:4447 db 0A2h ; ¢ | |
| F000:4448 db 0A2h ; ¢ | |
| F000:4449 db 0A2h ; ¢ | |
| F000:444A db 0A2h ; ¢ | |
| F000:444B db 0A2h ; ¢ | |
| F000:444C db 0FDh ; ý | |
| F000:444D db 1Fh | |
| F000:444E db 7Eh ; ~ | |
| F000:444F db 0FCh ; ü | |
| F000:4450 unk_F4450 db 25h ; % ; DATA XREF: sub_F477Co | |
| F000:4451 db 0DAh ; Ú | |
| F000:4452 db 0C4h ; Ä | |
| F000:4453 db 0BFh ; ¿ | |
| F000:4454 db 0B3h ; ³ | |
| F000:4455 db 20h | |
| F000:4456 db 0DAh ; Ú | |
| F000:4457 db 0C4h ; Ä | |
| F000:4458 db 7 | |
| F000:4459 db 0C4h ; Ä | |
| F000:445A db 0BFh ; ¿ | |
| F000:445B db 20h | |
| F000:445C db 0B3h ; ³ | |
| F000:445D db 0B3h ; ³ | |
| F000:445E db 20h | |
| F000:445F db 0B3h ; ³ | |
| F000:4460 db 0CDh ; Í | |
| F000:4461 db 0D8h ; Ø | |
| F000:4462 db 0CDh ; Í | |
| F000:4463 db 0D8h ; Ø | |
| F000:4464 db 0CDh ; Í | |
| F000:4465 db 0B3h ; ³ | |
| F000:4466 db 20h | |
| F000:4467 db 0B3h ; ³ | |
| F000:4468 db 0B3h ; ³ | |
| F000:4469 db 20h | |
| F000:446A db 0C0h ; À | |
| F000:446B db 0C4h ; Ä | |
| F000:446C db 0D9h ; Ù | |
| F000:446D db 20h | |
| F000:446E db 0B3h ; ³ | |
| F000:446F db 0B3h ; ³ | |
| F000:4470 db 20h | |
| F000:4471 db 0B3h ; ³ | |
| F000:4472 db 0C0h ; À | |
| F000:4473 db 0C4h ; Ä | |
| F000:4474 db 0D9h ; Ù | |
| F000:4475 db 1 | |
| F000:4476 db 15h | |
| F000:4477 db 1 | |
| F000:4478 db 62h ; b | |
| F000:4479 db 1 | |
| F000:447A db 0Bh | |
| F000:447B db 1 | |
| F000:447C db 5 | |
| F000:447D db 1 | |
| F000:447E db 1 | |
| F000:447F db 1 | |
| F000:4480 db 1 | |
| F000:4481 db 1 | |
| F000:4482 db 62h ; b | |
| F000:4483 db 1 | |
| F000:4484 db 0Bh | |
| F000:4485 db 1 | |
| F000:4486 db 2 | |
| F000:4487 db 1 | |
| F000:4488 db 1 | |
| F000:4489 db 1 | |
| F000:448A db 2 | |
| F000:448B db 1 | |
| F000:448C db 1 | |
| F000:448D db 1 | |
| F000:448E db 62h ; b | |
| F000:448F db 1 | |
| F000:4490 db 0Bh | |
| F000:4491 db 1 | |
| F000:4492 db 7 | |
| F000:4493 db 1 | |
| F000:4494 db 1 | |
| F000:4495 db 1 | |
| F000:4496 db 62h ; b | |
| F000:4497 db 1 | |
| F000:4498 db 15h | |
| F000:4499 db 1 | |
| F000:449A db 62h ; b | |
| F000:449B db 1 | |
| F000:449C db 15h | |
| F000:449D db 1 | |
| F000:449E db 0FCh ; ü | |
| F000:449F unk_F449F db 2 ; DATA XREF: diag_anim_disk_and_wait_for_mpnp+CBo | |
| F000:44A0 db 7 | |
| F000:44A1 db 0FFh | |
| F000:44A2 unk_F44A2 db 17h ; DATA XREF: diag_anim_disk_and_wait_for_mpnp+6o | |
| F000:44A2 ; diag_anim_disk_and_wait_for_mpnp+40o | |
| F000:44A2 ; diag_anim_disk_and_wait_for_mpnp+6Fo | |
| F000:44A3 db 0DAh ; Ú | |
| F000:44A4 db 0C4h ; Ä | |
| F000:44A5 db 0BFh ; ¿ | |
| F000:44A6 db 0B3h ; ³ | |
| F000:44A7 db 20h | |
| F000:44A8 db 0B3h ; ³ | |
| F000:44A9 db 20h | |
| F000:44AA db 0B3h ; ³ | |
| F000:44AB db 0B3h ; ³ | |
| F000:44AC db 20h | |
| F000:44AD db 0B3h ; ³ | |
| F000:44AE db 0B3h ; ³ | |
| F000:44AF db 20h | |
| F000:44B0 db 4Fh ; O | |
| F000:44B1 db 20h | |
| F000:44B2 db 0B3h ; ³ | |
| F000:44B3 db 0B3h ; ³ | |
| F000:44B4 db 20h | |
| F000:44B5 db 0B3h ; ³ | |
| F000:44B6 db 0C0h ; À | |
| F000:44B7 db 0C4h ; Ä | |
| F000:44B8 db 0D9h ; Ù | |
| F000:44B9 db 1 | |
| F000:44BA db 5 | |
| F000:44BB db 1 | |
| F000:44BC db 72h ; r | |
| F000:44BD db 1 | |
| F000:44BE db 2 | |
| F000:44BF db 1 | |
| F000:44C0 db 2 | |
| F000:44C1 db 1 | |
| F000:44C2 db 72h ; r | |
| F000:44C3 db 1 | |
| F000:44C4 db 5 | |
| F000:44C5 db 1 | |
| F000:44C6 db 72h ; r | |
| F000:44C7 db 1 | |
| F000:44C8 db 2 | |
| F000:44C9 db 1 | |
| F000:44CA db 2 | |
| F000:44CB db 1 | |
| F000:44CC db 72h ; r | |
| F000:44CD db 1 | |
| F000:44CE db 5 | |
| F000:44CF db 1 | |
| F000:44D0 db 72h ; r | |
| F000:44D1 db 1 | |
| F000:44D2 db 5 | |
| F000:44D3 db 1 | |
| F000:44D4 db 0FCh ; ü | |
| F000:44D5 unk_F44D5 db 35h ; 5 ; DATA XREF: diag_anim_disk_and_wait_for_mpnp+8Fo | |
| F000:44D6 db 0DAh ; Ú | |
| F000:44D7 db 0C4h ; Ä | |
| F000:44D8 db 0C4h ; Ä | |
| F000:44D9 db 0C4h ; Ä | |
| F000:44DA db 0C4h ; Ä | |
| F000:44DB db 0C4h ; Ä | |
| F000:44DC db 0BFh ; ¿ | |
| F000:44DD db 0Bh | |
| F000:44DE db 0F9h ; ù | |
| F000:44DF db 0C6h ; Æ | |
| F000:44E0 db 0BBh ; » | |
| F000:44E1 db 20h | |
| F000:44E2 db 0B3h ; ³ | |
| F000:44E3 db 20h | |
| F000:44E4 db 20h | |
| F000:44E5 db 0B3h ; ³ | |
| F000:44E6 db 0Bh | |
| F000:44E7 db 0F9h ; ù | |
| F000:44E8 db 0B3h ; ³ | |
| F000:44E9 db 0BAh ; º | |
| F000:44EA db 20h | |
| F000:44EB db 20h | |
| F000:44EC db 20h | |
| F000:44ED db 20h | |
| F000:44EE db 0B3h ; ³ | |
| F000:44EF db 0Bh | |
| F000:44F0 db 0F9h ; ù | |
| F000:44F1 db 0B3h ; ³ | |
| F000:44F2 db 0C8h ; È | |
| F000:44F3 db 0BBh ; » | |
| F000:44F4 db 4Fh ; O | |
| F000:44F5 db 20h | |
| F000:44F6 db 20h | |
| F000:44F7 db 0B3h ; ³ | |
| F000:44F8 db 0Bh | |
| F000:44F9 db 0F9h ; ù | |
| F000:44FA db 0B3h ; ³ | |
| F000:44FB db 20h | |
| F000:44FC db 0C8h ; È | |
| F000:44FD db 0BBh ; » | |
| F000:44FE db 20h | |
| F000:44FF db 20h | |
| F000:4500 db 0B3h ; ³ | |
| F000:4501 db 0Bh | |
| F000:4502 db 0F9h ; ù | |
| F000:4503 db 0C0h ; À | |
| F000:4504 db 0C4h ; Ä | |
| F000:4505 db 0C4h ; Ä | |
| F000:4506 db 0BDh ; ½ | |
| F000:4507 db 0C4h ; Ä | |
| F000:4508 db 0C4h ; Ä | |
| F000:4509 db 0D9h ; Ù | |
| F000:450A db 0FFh | |
| F000:450B unk_F450B db 3Fh ; ? ; DATA XREF: diag_anim_disk_and_wait_for_mpnp+9Do | |
| F000:450C db 0DAh ; Ú | |
| F000:450D db 0C4h ; Ä | |
| F000:450E db 0C4h ; Ä | |
| F000:450F db 0C4h ; Ä | |
| F000:4510 db 0C4h ; Ä | |
| F000:4511 db 0C4h ; Ä | |
| F000:4512 db 0BFh ; ¿ | |
| F000:4513 db 0Bh | |
| F000:4514 db 0F7h ; ÷ | |
| F000:4515 db 0DAh ; Ú | |
| F000:4516 db 0BFh ; ¿ | |
| F000:4517 db 0C0h ; À | |
| F000:4518 db 0BFh ; ¿ | |
| F000:4519 db 20h | |
| F000:451A db 0B3h ; ³ | |
| F000:451B db 20h | |
| F000:451C db 20h | |
| F000:451D db 0B3h ; ³ | |
| F000:451E db 0Bh | |
| F000:451F db 0F7h ; ÷ | |
| F000:4520 db 0B3h ; ³ | |
| F000:4521 db 0B3h ; ³ | |
| F000:4522 db 20h | |
| F000:4523 db 0B3h ; ³ | |
| F000:4524 db 20h | |
| F000:4525 db 20h | |
| F000:4526 db 20h | |
| F000:4527 db 20h | |
| F000:4528 db 0B3h ; ³ | |
| F000:4529 db 0Bh | |
| F000:452A db 0F7h ; ÷ | |
| F000:452B db 0B3h ; ³ | |
| F000:452C db 0C0h ; À | |
| F000:452D db 0BFh ; ¿ | |
| F000:452E db 0C0h ; À | |
| F000:452F db 0BFh ; ¿ | |
| F000:4530 db 4Fh ; O | |
| F000:4531 db 20h | |
| F000:4532 db 20h | |
| F000:4533 db 0B3h ; ³ | |
| F000:4534 db 0Bh | |
| F000:4535 db 0F7h ; ÷ | |
| F000:4536 db 0B3h ; ³ | |
| F000:4537 db 20h | |
| F000:4538 db 0C0h ; À | |
| F000:4539 db 0BFh ; ¿ | |
| F000:453A db 0C0h ; À | |
| F000:453B db 0BFh ; ¿ | |
| F000:453C db 20h | |
| F000:453D db 20h | |
| F000:453E db 0B3h ; ³ | |
| F000:453F db 0Bh | |
| F000:4540 db 0F7h ; ÷ | |
| F000:4541 db 0C0h ; À | |
| F000:4542 db 0C4h ; Ä | |
| F000:4543 db 0C4h ; Ä | |
| F000:4544 db 0D9h ; Ù | |
| F000:4545 db 20h | |
| F000:4546 db 0C0h ; À | |
| F000:4547 db 0C4h ; Ä | |
| F000:4548 db 0C4h ; Ä | |
| F000:4549 db 0D9h ; Ù | |
| F000:454A db 0FFh | |
| F000:454B unk_F454B db 4 ; DATA XREF: diag_anim_disk_and_wait_for_mpnp+32o | |
| F000:454C db 18h | |
| F000:454D db 18h | |
| F000:454E db 18h | |
| F000:454F db 1 | |
| F000:4550 db 78h ; x | |
| F000:4551 db 0FDh ; ý | |
| F000:4552 db 26h ; & | |
| F000:4553 db 1 | |
| F000:4554 db 78h ; x | |
| F000:4555 db 0FDh ; ý | |
| F000:4556 db 26h ; & | |
| F000:4557 db 1 | |
| F000:4558 db 0FCh ; ü | |
| F000:4559 unk_F4559 db 2 ; DATA XREF: diag_anim_disk_and_wait_for_mpnp+18o | |
| F000:455A db 18h | |
| F000:455B db 0FFh | |
| F000:455C unk_F455C db 35h ; 5 ; DATA XREF: diag_anim_disk_and_wait_for_mpnp+4Fo | |
| F000:455C ; diag_anim_disk_and_wait_for_mpnp+7Eo | |
| F000:455C ; diag_anim_disk_and_wait_for_mpnp+BBo | |
| F000:455D db 20h | |
| F000:455E db 20h | |
| F000:455F db 20h | |
| F000:4560 db 20h | |
| F000:4561 db 20h | |
| F000:4562 db 20h | |
| F000:4563 db 20h | |
| F000:4564 db 0Bh | |
| F000:4565 db 0F9h ; ù | |
| F000:4566 db 20h | |
| F000:4567 db 20h | |
| F000:4568 db 20h | |
| F000:4569 db 20h | |
| F000:456A db 20h | |
| F000:456B db 20h | |
| F000:456C db 20h | |
| F000:456D db 0Bh | |
| F000:456E db 0F9h ; ù | |
| F000:456F db 20h | |
| F000:4570 db 20h | |
| F000:4571 db 20h | |
| F000:4572 db 20h | |
| F000:4573 db 20h | |
| F000:4574 db 20h | |
| F000:4575 db 20h | |
| F000:4576 db 0Bh | |
| F000:4577 db 0F9h ; ù | |
| F000:4578 db 20h | |
| F000:4579 db 20h | |
| F000:457A db 20h | |
| F000:457B db 20h | |
| F000:457C db 20h | |
| F000:457D db 20h | |
| F000:457E db 20h | |
| F000:457F db 0Bh | |
| F000:4580 db 0F9h ; ù | |
| F000:4581 db 20h | |
| F000:4582 db 20h | |
| F000:4583 db 20h | |
| F000:4584 db 20h | |
| F000:4585 db 20h | |
| F000:4586 db 20h | |
| F000:4587 db 20h | |
| F000:4588 db 0Bh | |
| F000:4589 db 0F9h ; ù | |
| F000:458A db 20h | |
| F000:458B db 20h | |
| F000:458C db 20h | |
| F000:458D db 20h | |
| F000:458E db 20h | |
| F000:458F db 20h | |
| F000:4590 db 20h | |
| F000:4591 db 0FFh | |
| F000:4592 unk_F4592 db 13h ; DATA XREF: diag_anim_disk_and_wait_for_mpnp+C3o | |
| F000:4593 db 20h | |
| F000:4594 db 20h | |
| F000:4595 db 0Bh | |
| F000:4596 db 0FEh ; þ | |
| F000:4597 db 20h | |
| F000:4598 db 20h | |
| F000:4599 db 0Bh | |
| F000:459A db 0FEh ; þ | |
| F000:459B db 20h | |
| F000:459C db 20h | |
| F000:459D db 0Bh | |
| F000:459E db 0FEh ; þ | |
| F000:459F db 20h | |
| F000:45A0 db 20h | |
| F000:45A1 db 0Bh | |
| F000:45A2 db 0FEh ; þ | |
| F000:45A3 db 20h | |
| F000:45A4 db 20h | |
| F000:45A5 db 0FFh | |
| F000:45A6 unk_F45A6 db 2 ; DATA XREF: diag_anim_disk_and_wait_for_mpnp+B3o | |
| F000:45A7 db 20h | |
| F000:45A8 db 0FFh | |
| F000:45A9 unk_F45A9 db 0Ah ; DATA XREF: diag_wait_for_mpnpo | |
| F000:45AA db 2Dh ; - | |
| F000:45AB db 2Dh ; - | |
| F000:45AC db 2Dh ; - | |
| F000:45AD db 2Dh ; - | |
| F000:45AE db 20h | |
| F000:45AF db 3Fh ; ? | |
| F000:45B0 db 0Bh | |
| F000:45B1 db 0FAh ; ú | |
| F000:45B2 db 0Ch | |
| F000:45B3 db 0FFh | |
| F000:45B4 db 0 | |
| F000:45B5 db 0FDh ; ý | |
| F000:45B6 db 27h ; ' | |
| F000:45B7 db 0FCh ; ü | |
| F000:45B8 s_mpnp db 'MPNP',0Dh ; DATA XREF: diag_wait_for_mpnp+Fo | |
| F000:45BD ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:45BD ; int 0x87 | |
| F000:45BD ; test diskette | |
| F000:45BD ; intput: | |
| F000:45BD ; ah = '1', '2', '3' run test | |
| F000:45BD ; 0xff: mfg system test (msg ah=0001) | |
| F000:45BD ; 0,1: show error msg? | |
| F000:45BD ; output: | |
| F000:45BD ; dl/dh: error message | |
| F000:45BD int_87_diag_diskette proc far ; DATA XREF: F000:400Eo | |
| F000:45BD call ds_60 ; ds = segment 0x60 (disk) | |
| F000:45C0 push ds | |
| F000:45C1 pop es ; es = 0x60 (disk) | |
| F000:45C2 mov ds:seg60.request_in, ah | |
| F000:45C6 mov byte ptr ds:seg60.dk_existed, 0 | |
| F000:45CB int 11h ; EQUIPMENT DETERMINATION | |
| F000:45CB ; Return: AX = equipment flag bits | |
| F000:45CD and ax, 1 | |
| F000:45D0 cmp ax, 1 | |
| F000:45D3 jnz short l0 | |
| F000:45D5 mov byte ptr ds:seg60.dk_existed, 1 | |
| F000:45DA int 11h ; EQUIPMENT DETERMINATION | |
| F000:45DA ; Return: AX = equipment flag bits | |
| F000:45DC mov cl, 6 | |
| F000:45DE shr ax, cl | |
| F000:45E0 and ax, 3 | |
| F000:45E3 inc ax | |
| F000:45E4 mov ds:seg60, al | |
| F000:45E7 l0: ; CODE XREF: int_87_diag_diskette+16j | |
| F000:45E7 call diag_dsk_update_nr_drives | |
| F000:45EA cmp byte ptr ds:seg60.request_in, 0 | |
| F000:45EF jz short error_and_exit | |
| F000:45F1 cmp byte ptr ds:seg60.request_in, 1 | |
| F000:45F6 jz short error_and_exit | |
| F000:45F8 cmp byte ptr ds:seg60.request_in, 0FFh | |
| F000:45FD jz short run_test | |
| F000:45FF cmp byte ptr ds:seg60.request_in, 31h ; '1' | |
| F000:4604 jz short run_test | |
| F000:4606 cmp byte ptr ds:seg60.request_in, 32h ; '2' | |
| F000:460B jz short run_test | |
| F000:460D cmp byte ptr ds:seg60.request_in, 33h ; '3' | |
| F000:4612 jz short run_test | |
| F000:4614 iret | |
| F000:4615 error_and_exit: ; CODE XREF: int_87_diag_diskette+32j | |
| F000:4615 ; int_87_diag_diskette+39j | |
| F000:4615 mov al, 5 | |
| F000:4617 int 81h ; reserved for BASIC | |
| F000:4619 mov bp, offset s_diskette_anim | |
| F000:461C int 82h ; reserved for BASIC | |
| F000:461E cmp byte ptr ds:seg60.dk_existed, 1 | |
| F000:4623 jz short l2 | |
| F000:4625 mov bp, offset unk_F441A | |
| F000:4628 int 82h ; reserved for BASIC | |
| F000:462A jmp short l6 | |
| F000:462C l2: ; CODE XREF: int_87_diag_diskette+66j | |
| F000:462C mov ah, ds:seg60 ; num drive | |
| F000:4630 cmp ah, 1 | |
| F000:4633 jz short l3 | |
| F000:4635 cmp ah, 2 | |
| F000:4638 jz short l4 | |
| F000:463A mov bp, offset unk_F443B | |
| F000:463D jmp short l5 | |
| F000:463F l3: ; CODE XREF: int_87_diag_diskette+76j | |
| F000:463F mov bp, offset unk_F4423 | |
| F000:4642 jmp short l5 | |
| F000:4644 l4: ; CODE XREF: int_87_diag_diskette+7Bj | |
| F000:4644 mov bp, offset unk_F442C | |
| F000:4647 l5: ; CODE XREF: int_87_diag_diskette+80j | |
| F000:4647 ; int_87_diag_diskette+85j | |
| F000:4647 int 82h ; reserved for BASIC | |
| F000:4649 l6: ; CODE XREF: int_87_diag_diskette+6Dj | |
| F000:4649 mov byte ptr ds:seg60.dk_err_occured, 0 | |
| F000:464E jmp check_err_and_exit | |
| F000:4651 run_test: ; CODE XREF: int_87_diag_diskette+40j | |
| F000:4651 ; int_87_diag_diskette+47j | |
| F000:4651 ; int_87_diag_diskette+4Ej | |
| F000:4651 ; int_87_diag_diskette+55j | |
| F000:4651 cmp byte ptr ds:seg60.dk_existed, 0 | |
| F000:4656 jnz short l8 | |
| F000:4658 mov byte ptr ds:seg60.dk_er_l1, 41h ; 'A' ; no diskette drive installed | |
| F000:465D mov byte ptr ds:seg60.dk_er_l2, 97h ; '' | |
| F000:4662 mov byte ptr ds:seg60.dk_err_occured, 1 | |
| F000:4667 jmp check_err_and_exit | |
| F000:466A l8: ; CODE XREF: int_87_diag_diskette+99j | |
| F000:466A cmp byte ptr ds:seg60.request_in, 0FFh | |
| F000:466F jz short l10 | |
| F000:4671 call diag_anim_disk_and_wait_for_mpnp | |
| F000:4674 call diag_check_kbd_break | |
| F000:4677 jb short l9 | |
| F000:4679 jmp short l10 | |
| F000:467B l9: ; CODE XREF: int_87_diag_diskette+BAj | |
| F000:467B ; int_87_diag_diskette+DAj | |
| F000:467B ; int_87_diag_diskette+F5j | |
| F000:467B ; int_87_diag_diskette+FFj | |
| F000:467B ; int_87_diag_diskette+109j | |
| F000:467B ; int_87_diag_diskette+113j ... | |
| F000:467B jmp exit | |
| F000:467E l10: ; CODE XREF: int_87_diag_diskette+B2j | |
| F000:467E ; int_87_diag_diskette+BCj | |
| F000:467E ; int_87_diag_diskette+178j | |
| F000:467E call diag_disk_init_buffer | |
| F000:4681 mov byte ptr ds:seg60.track, 27h ; ''' | |
| F000:4686 call diag_disk_read | |
| F000:4689 call diag_disk_init_buffer | |
| F000:468C call diag_disk_reset_system | |
| F000:468F jb short l12 | |
| F000:4691 call diag_disk_format | |
| F000:4694 call diag_check_kbd_break | |
| F000:4697 jb short l9 | |
| F000:4699 cmp byte ptr ds:seg60.dk_err_occured, 1 | |
| F000:469E jz short l12 | |
| F000:46A0 mov byte ptr ds:seg60.dk_flag, 1 | |
| F000:46A5 mov byte ptr ds:seg60.head, 0 | |
| F000:46AA mov byte ptr ds:seg60.track, 0 | |
| F000:46AF l11: ; CODE XREF: int_87_diag_diskette+125j | |
| F000:46AF ; int_87_diag_diskette+14Dj | |
| F000:46AF call diag_check_kbd_break | |
| F000:46B2 jb short l9 | |
| F000:46B4 call diag_disk_read | |
| F000:46B7 jb short l12 | |
| F000:46B9 call diag_check_kbd_break | |
| F000:46BC jb short l9 | |
| F000:46BE call diag_disk_write | |
| F000:46C1 jb short l12 | |
| F000:46C3 call diag_check_kbd_break | |
| F000:46C6 jb short l9 | |
| F000:46C8 call diag_disk_verify | |
| F000:46CB jb short l12 | |
| F000:46CD call diag_check_kbd_break | |
| F000:46D0 jb short l9 | |
| F000:46D2 cmp byte ptr ds:seg60.dk_flag, 2 | |
| F000:46D7 jz short l13 | |
| F000:46D9 inc byte ptr ds:seg60.dk_flag | |
| F000:46DD mov byte ptr ds:seg60.track, 27h ; ''' | |
| F000:46E2 jmp short l11 | |
| F000:46E4 l12: ; CODE XREF: int_87_diag_diskette+D2j | |
| F000:46E4 ; int_87_diag_diskette+E1j | |
| F000:46E4 ; int_87_diag_diskette+FAj | |
| F000:46E4 ; int_87_diag_diskette+104j | |
| F000:46E4 ; int_87_diag_diskette+10Ej | |
| F000:46E4 ; int_87_diag_diskette+12Cj ... | |
| F000:46E4 jmp short check_err_and_exit | |
| F000:46E6 l13: ; CODE XREF: int_87_diag_diskette+11Aj | |
| F000:46E6 call diag_disk_compare_write_read | |
| F000:46E9 jb short l12 | |
| F000:46EB cmp byte ptr ds:seg60.dual, 0 | |
| F000:46F0 jnz short l14 | |
| F000:46F2 inc byte ptr ds:seg60.dual | |
| F000:46F6 mov byte ptr ds:seg60.dk_flag, 1 | |
| F000:46FB mov byte ptr ds:seg60.head, 1 | |
| F000:4700 mov byte ptr ds:seg60.track, 0 | |
| F000:4705 mov byte ptr ds:seg60.sector, 1 | |
| F000:470A jmp short l11 | |
| F000:470C l14: ; CODE XREF: int_87_diag_diskette+133j | |
| F000:470C call sub_F4A44 | |
| F000:470F jb short l12 | |
| F000:4711 call diag_check_kbd_break | |
| F000:4714 jnb short l15 | |
| F000:4716 jmp l9 | |
| F000:4719 l15: ; CODE XREF: int_87_diag_diskette+157j | |
| F000:4719 mov byte ptr ds:seg60.dk_err_occured, 0 | |
| F000:471E cmp byte ptr ds:seg60.request_in, 0FFh | |
| F000:4723 jnz short l12 | |
| F000:4725 mov ch, ds:seg60 | |
| F000:4729 inc byte ptr ds:seg60.drive | |
| F000:472D mov cl, ds:seg60.drive | |
| F000:4731 sub ch, cl | |
| F000:4733 jz short l12 | |
| F000:4735 jmp l10 | |
| F000:4738 check_err_and_exit: ; CODE XREF: int_87_diag_diskette+91j | |
| F000:4738 ; int_87_diag_diskette+AAj | |
| F000:4738 ; int_87_diag_diskette:l12j | |
| F000:4738 xor dx, dx | |
| F000:473A sub bx, bx | |
| F000:473C cmp byte ptr ds:seg60.dk_err_occured, 0 | |
| F000:4741 jz short exit | |
| F000:4743 mov dh, ds:seg60.dk_er_l1 | |
| F000:4747 mov bl, ds:seg60.dk_er_l2 | |
| F000:474B mov bh, ds:seg60.head | |
| F000:474F mov cl, 4 | |
| F000:4751 shl bh, cl | |
| F000:4753 or bh, ds:seg60.operation | |
| F000:4757 exit: ; CODE XREF: int_87_diag_diskette:l9j | |
| F000:4757 ; int_87_diag_diskette+184j | |
| F000:4757 stc | |
| F000:4758 retf 2 | |
| F000:4758 int_87_diag_diskette endp | |
| F000:475B ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:475B diag_clear_window proc near ; CODE XREF: diag_anim_disk_and_wait_for_mpnpp | |
| F000:475B mov ax, 600h | |
| F000:475E mov bh, 7 | |
| F000:4760 mov cx, 0 | |
| F000:4763 mov dx, 2479h ; is this BCD? bug? | |
| F000:4766 int 10h ; - VIDEO - SCROLL PAGE UP | |
| F000:4766 ; AL = number of lines to scroll window (0 = blank whole window) | |
| F000:4766 ; BH = attributes to be used on blanked lines | |
| F000:4766 ; CH,CL = row,column of upper left corner of window to scroll | |
| F000:4766 ; DH,DL = row,column of lower right corner of window | |
| F000:4768 call sub_F477C | |
| F000:476B retn | |
| F000:476B diag_clear_window endp | |
| F000:476C ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:476C diag_set_cursor_height_default proc near | |
| F000:476C ; CODE XREF: diag_anim_disk_and_wait_for_mpnp+A5p | |
| F000:476C mov ah, 1 | |
| F000:476E mov cx, 607h | |
| F000:4771 int 10h ; - VIDEO - SET CURSOR CHARACTERISTICS | |
| F000:4771 ; CH bits 0-4 = start line for cursor in character cell | |
| F000:4771 ; bits 5-6 = blink attribute | |
| F000:4771 ; CL bits 0-4 = end line for cursor in character cell | |
| F000:4773 retn | |
| F000:4773 diag_set_cursor_height_default endp | |
| F000:4774 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4774 diag_set_cursor_height_something proc near | |
| F000:4774 ; CODE XREF: diag_anim_disk_and_wait_for_mpnp+3p | |
| F000:4774 ; diag_anim_disk_and_wait_for_mpnp+B0p | |
| F000:4774 mov ah, 1 | |
| F000:4776 mov cx, 2000h | |
| F000:4779 int 10h ; - VIDEO - SET CURSOR CHARACTERISTICS | |
| F000:4779 ; CH bits 0-4 = start line for cursor in character cell | |
| F000:4779 ; bits 5-6 = blink attribute | |
| F000:4779 ; CL bits 0-4 = end line for cursor in character cell | |
| F000:477B retn | |
| F000:477B diag_set_cursor_height_something endp | |
| F000:477C ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:477C sub_F477C proc near ; CODE XREF: diag_clear_window+Dp | |
| F000:477C ; diag_anim_disk_and_wait_for_mpnp+27p | |
| F000:477C ; diag_anim_disk_and_wait_for_mpnp+5Dp | |
| F000:477C ; diag_anim_disk_and_wait_for_mpnp+6Cp | |
| F000:477C ; diag_anim_disk_and_wait_for_mpnp+8Cp | |
| F000:477C mov bp, offset unk_F4450 | |
| F000:477F mov dx, 808h | |
| F000:4782 int 82h ; reserved for BASIC | |
| F000:4784 retn | |
| F000:4784 sub_F477C endp | |
| F000:4785 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4785 diag_wait_for_mpnp proc near ; CODE XREF: diag_wait_for_mpnp+24j | |
| F000:4785 ; diag_anim_disk_and_wait_for_mpnp+A8p | |
| F000:4785 mov bp, offset unk_F45A9 | |
| F000:4788 mov dx, 2304h | |
| F000:478B int 82h ; reserved for BASIC | |
| F000:478D xor di, di | |
| F000:478F l0: ; CODE XREF: diag_wait_for_mpnp+35j | |
| F000:478F call diag_check_kbd_break | |
| F000:4792 jb short lret3 | |
| F000:4794 mov bx, offset s_mpnp ; "MPNP\r" | |
| F000:4797 xor ax, ax | |
| F000:4799 int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY | |
| F000:4799 ; Return: AH = scan code, AL = character | |
| F000:479B cmp di, 4 | |
| F000:479E jz short l1 | |
| F000:47A0 and al, 0DFh | |
| F000:47A2 l1: ; CODE XREF: diag_wait_for_mpnp+19j | |
| F000:47A2 mov ah, cs:[bx+di] | |
| F000:47A5 cmp ah, al | |
| F000:47A7 jz short l2 | |
| F000:47A9 jmp short diag_wait_for_mpnp | |
| F000:47AB l2: ; CODE XREF: diag_wait_for_mpnp+22j | |
| F000:47AB cmp di, 4 | |
| F000:47AE jz short lret3 | |
| F000:47B0 mov ah, 0Eh | |
| F000:47B2 xor bh, bh ; page 0 | |
| F000:47B4 mov cx, 1 ; write just one char | |
| F000:47B7 int 10h ; - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE) | |
| F000:47B7 ; AL = character, BH = display page (alpha modes) | |
| F000:47B7 ; BL = foreground color (graphics modes) | |
| F000:47B9 inc di | |
| F000:47BA jmp short l0 | |
| F000:47BC lret3: ; CODE XREF: diag_wait_for_mpnp+Dj | |
| F000:47BC ; diag_wait_for_mpnp+29j | |
| F000:47BC retn | |
| F000:47BC diag_wait_for_mpnp endp | |
| F000:47BD ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:47BD diag_anim_disk_and_wait_for_mpnp proc near ; CODE XREF: int_87_diag_diskette+B4p | |
| F000:47BD call diag_clear_window | |
| F000:47C0 call diag_set_cursor_height_something | |
| F000:47C3 mov bp, offset unk_F44A2 | |
| F000:47C6 mov dx, 0E15h | |
| F000:47C9 int 82h ; reserved for BASIC | |
| F000:47CB mov cx, 3 | |
| F000:47CE l0: ; CODE XREF: diag_anim_disk_and_wait_for_mpnp+30j | |
| F000:47CE push cx | |
| F000:47CF mov bh, 0Dh | |
| F000:47D1 mov cx, 4 | |
| F000:47D4 l1: ; CODE XREF: diag_anim_disk_and_wait_for_mpnp+2Dj | |
| F000:47D4 push cx | |
| F000:47D5 mov bp, offset unk_F4559 | |
| F000:47D8 mov dh, bh | |
| F000:47DA mov dl, 18h | |
| F000:47DC int 82h ; reserved for BASIC | |
| F000:47DE mov cx, 8 | |
| F000:47E1 call diag_delay | |
| F000:47E4 call sub_F477C | |
| F000:47E7 dec bh | |
| F000:47E9 pop cx | |
| F000:47EA loop l1 | |
| F000:47EC pop cx | |
| F000:47ED loop l0 | |
| F000:47EF mov bp, offset unk_F454B | |
| F000:47F2 mov dx, 0D18h | |
| F000:47F5 int 82h ; reserved for BASIC | |
| F000:47F7 mov bh, 0Eh | |
| F000:47F9 mov cx, 5 | |
| F000:47FC l2: ; CODE XREF: diag_anim_disk_and_wait_for_mpnp+5Bj | |
| F000:47FC push cx | |
| F000:47FD mov bp, offset unk_F44A2 | |
| F000:4800 mov dh, bh | |
| F000:4802 mov dl, 15h | |
| F000:4804 int 82h ; reserved for BASIC | |
| F000:4806 mov cx, 8 ; delay len | |
| F000:4809 call diag_delay | |
| F000:480C mov bp, offset unk_F455C | |
| F000:480F mov dh, bh | |
| F000:4811 mov dl, 15h | |
| F000:4813 int 82h ; reserved for BASIC | |
| F000:4815 dec bh | |
| F000:4817 pop cx | |
| F000:4818 loop l2 | |
| F000:481A call sub_F477C | |
| F000:481D mov cx, 8 | |
| F000:4820 call diag_delay | |
| F000:4823 mov bh, 0Ah | |
| F000:4825 mov cx, 4 | |
| F000:4828 l3: ; CODE XREF: diag_anim_disk_and_wait_for_mpnp+8Aj | |
| F000:4828 push cx | |
| F000:4829 call sub_F477C | |
| F000:482C mov bp, offset unk_F44A2 | |
| F000:482F mov dh, bh | |
| F000:4831 mov dl, 15h | |
| F000:4833 int 82h ; reserved for BASIC | |
| F000:4835 mov cx, 8 ; delay len | |
| F000:4838 call diag_delay | |
| F000:483B mov bp, offset unk_F455C | |
| F000:483E mov dh, bh | |
| F000:4840 mov dl, 15h | |
| F000:4842 int 82h ; reserved for BASIC | |
| F000:4844 inc bh | |
| F000:4846 pop cx | |
| F000:4847 loop l3 | |
| F000:4849 call sub_F477C | |
| F000:484C mov bp, offset unk_F44D5 | |
| F000:484F mov dx, 0E15h | |
| F000:4852 int 82h ; reserved for BASIC | |
| F000:4854 mov cx, 8 ; delay len | |
| F000:4857 call diag_delay | |
| F000:485A mov bp, offset unk_F450B | |
| F000:485D mov dx, 0E15h | |
| F000:4860 int 82h ; reserved for BASIC | |
| F000:4862 call diag_set_cursor_height_default | |
| F000:4865 call diag_wait_for_mpnp | |
| F000:4868 call diag_check_kbd_break | |
| F000:486B jb short lret4 | |
| F000:486D call diag_set_cursor_height_something | |
| F000:4870 mov bp, offset unk_F45A6 | |
| F000:4873 mov dx, 309h | |
| F000:4876 int 82h ; reserved for BASIC | |
| F000:4878 mov bp, offset unk_F455C | |
| F000:487B mov dx, 0E15h | |
| F000:487E int 82h ; reserved for BASIC | |
| F000:4880 mov bp, offset unk_F4592 | |
| F000:4883 mov dx, 0F13h | |
| F000:4886 int 82h ; reserved for BASIC | |
| F000:4888 mov bp, offset unk_F449F | |
| F000:488B mov dx, 891Ah | |
| F000:488E mov bl, 87h ; '' | |
| F000:4890 int 82h ; reserved for BASIC | |
| F000:4892 lret4: ; CODE XREF: diag_anim_disk_and_wait_for_mpnp+AEj | |
| F000:4892 retn | |
| F000:4892 diag_anim_disk_and_wait_for_mpnp endp | |
| F000:4893 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4893 diag_disk_init_buffer proc near ; CODE XREF: int_87_diag_diskette:l10p | |
| F000:4893 ; int_87_diag_diskette+CCp | |
| F000:4893 mov di, seg60.write_buf | |
| F000:4896 mov cx, 100h | |
| F000:4899 mov ax, 6DB0h | |
| F000:489C l0: ; CODE XREF: diag_disk_init_buffer+Dj | |
| F000:489C mov [di], ax ; clean write buffer | |
| F000:489E inc di | |
| F000:489F inc di | |
| F000:48A0 loop l0 | |
| F000:48A2 mov byte ptr ds:seg60.dual, 0 | |
| F000:48A7 mov byte ptr ds:seg60.track, 0 | |
| F000:48AC mov byte ptr ds:seg60.head, 0 | |
| F000:48B1 mov byte ptr ds:seg60.sector, 1 | |
| F000:48B6 mov byte ptr ds:seg60.num_sector, 1 | |
| F000:48BB mov byte ptr ds:seg60.operation, 0 | |
| F000:48C0 mov word ptr ds:seg60.ran_num, 0 | |
| F000:48C6 mov word ptr ds:seg60.seed, 0 | |
| F000:48CC mov byte ptr ds:seg60.dk_err_occured, 0 | |
| F000:48D1 mov byte ptr ds:seg60.dk_er_l1, 0 | |
| F000:48D6 mov byte ptr ds:seg60.dk_er_l2, 0 | |
| F000:48DB mov byte ptr ds:seg60.er_status_byte, 0 | |
| F000:48E0 retn | |
| F000:48E0 diag_disk_init_buffer endp | |
| F000:48E1 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:48E1 diag_dsk_update_nr_drives proc near ; CODE XREF: int_87_diag_diskette:l0p | |
| F000:48E1 cmp byte ptr ds:seg60.dk_existed, 0 ; diskette? | |
| F000:48E6 jz short lret ; no, exit | |
| F000:48E8 mov ah, ds:seg60.request_in | |
| F000:48EC cmp ah, 0FFh ; 0xff? | |
| F000:48EF jz short l0 | |
| F000:48F1 or ah, ah ; 0? | |
| F000:48F3 jz short lret | |
| F000:48F5 cmp ah, 1 ; 1? | |
| F000:48F8 jz short lret | |
| F000:48FA cmp ah, 31h ; '1' ; 0x31? | |
| F000:48FD jz short l0 | |
| F000:48FF cmp ah, 32h ; '2' ; 0x32? | |
| F000:4902 jz short l1 | |
| F000:4904 mov byte ptr ds:seg60.drive, 2 | |
| F000:4909 jmp short lret | |
| F000:490B nop | |
| F000:490C l0: ; CODE XREF: diag_dsk_update_nr_drives+Ej | |
| F000:490C ; diag_dsk_update_nr_drives+1Cj | |
| F000:490C mov byte ptr ds:seg60.drive, 0 | |
| F000:4911 jmp short lret | |
| F000:4913 nop | |
| F000:4914 l1: ; CODE XREF: diag_dsk_update_nr_drives+21j | |
| F000:4914 mov byte ptr ds:seg60.drive, 1 | |
| F000:4919 lret: ; CODE XREF: diag_dsk_update_nr_drives+5j | |
| F000:4919 ; diag_dsk_update_nr_drives+12j | |
| F000:4919 ; diag_dsk_update_nr_drives+17j | |
| F000:4919 ; diag_dsk_update_nr_drives+28j | |
| F000:4919 ; diag_dsk_update_nr_drives+30j | |
| F000:4919 retn | |
| F000:4919 diag_dsk_update_nr_drives endp | |
| F000:491A ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:491A diag_perform_disk_operation proc near ; CODE XREF: diag_disk_format+1Fp | |
| F000:491A ; diag_disk_read+8p | |
| F000:491A ; diag_disk_write+17p | |
| F000:491A ; diag_disk_verify+8p | |
| F000:491A ; diag_disk_reset_system+5p | |
| F000:491A mov ah, ds:seg60.operation | |
| F000:491E mov dl, ds:seg60.drive | |
| F000:4922 mov dh, ds:seg60.head | |
| F000:4926 mov ch, ds:seg60.track | |
| F000:492A mov cl, ds:seg60.sector | |
| F000:492E mov al, ds:seg60.num_sector | |
| F000:4931 int 13h ; DISK - | |
| F000:4933 or ah, ah | |
| F000:4935 jz short lret0 | |
| F000:4937 mov ds:seg60.er_status_byte, ah | |
| F000:493B call diag_disk_set_err_code | |
| F000:493E lret0: ; CODE XREF: diag_perform_disk_operation+1Bj | |
| F000:493E retn | |
| F000:493E diag_perform_disk_operation endp | |
| F000:493F ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:493F sub_F493F proc near ; CODE XREF: diag_disk_format+14p | |
| F000:493F mov byte ptr ds:seg60.sec, 1 | |
| F000:4944 mov cx, 8 | |
| F000:4947 mov di, 9 | |
| F000:494A l0: ; CODE XREF: sub_F493F+1Ej | |
| F000:494A mov al, ds:seg60.track | |
| F000:494D stosb | |
| F000:494E mov al, ds:seg60.head | |
| F000:4951 stosb | |
| F000:4952 mov al, ds:seg60.sec | |
| F000:4955 stosb | |
| F000:4956 inc byte ptr ds:seg60.sec | |
| F000:495A mov al, 2 | |
| F000:495C stosb | |
| F000:495D loop l0 | |
| F000:495F retn | |
| F000:495F sub_F493F endp | |
| F000:4960 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4960 diag_disk_format proc near ; CODE XREF: int_87_diag_diskette+D4p | |
| F000:4960 mov byte ptr ds:seg60.dk_flag, 0 | |
| F000:4965 mov byte ptr ds:seg60.head, 0 | |
| F000:496A l0: ; CODE XREF: diag_disk_format+38j | |
| F000:496A mov byte ptr ds:seg60.track, 0 | |
| F000:496F l1: ; CODE XREF: diag_disk_format+2Dj | |
| F000:496F call diag_check_kbd_break | |
| F000:4972 jb short l3 | |
| F000:4974 call sub_F493F | |
| F000:4977 mov byte ptr ds:seg60.operation, 5 ; format disk track | |
| F000:497C mov bx, 9 | |
| F000:497F call diag_perform_disk_operation | |
| F000:4982 jb short lret2 | |
| F000:4984 inc byte ptr ds:seg60.track | |
| F000:4988 cmp byte ptr ds:seg60.track, 28h ; '(' | |
| F000:498D jnz short l1 | |
| F000:498F inc byte ptr ds:seg60.head | |
| F000:4993 cmp byte ptr ds:seg60.head, 2 | |
| F000:4998 jnz short l0 | |
| F000:499A lret2: ; CODE XREF: diag_disk_format+22j | |
| F000:499A retn | |
| F000:499B l3: ; CODE XREF: diag_disk_format+12j | |
| F000:499B inc byte ptr ds:seg60.dk_flag | |
| F000:499F retn | |
| F000:499F diag_disk_format endp | |
| F000:49A0 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:49A0 diag_disk_read proc near ; CODE XREF: int_87_diag_diskette+C9p | |
| F000:49A0 ; int_87_diag_diskette+F7p | |
| F000:49A0 ; diag_disk_compare_write_read+Ep | |
| F000:49A0 mov byte ptr ds:seg60.operation, 2 ; read disk sectors | |
| F000:49A5 mov bx, 29h ; ')' | |
| F000:49A8 call diag_perform_disk_operation | |
| F000:49AB retn | |
| F000:49AB diag_disk_read endp | |
| F000:49AC ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:49AC diag_disk_write proc near ; CODE XREF: int_87_diag_diskette+101p | |
| F000:49AC ; diag_disk_compare_write_read+9p | |
| F000:49AC mov di, 229h | |
| F000:49AF mov cx, 100h | |
| F000:49B2 l0: ; CODE XREF: diag_disk_write+Dj | |
| F000:49B2 mov ax, [di] | |
| F000:49B4 inc ax | |
| F000:49B5 mov [di], ax | |
| F000:49B7 inc di | |
| F000:49B8 inc di | |
| F000:49B9 loop l0 | |
| F000:49BB mov byte ptr ds:seg60.operation, 3 ; write disk sectors | |
| F000:49C0 mov bx, 229h | |
| F000:49C3 call diag_perform_disk_operation | |
| F000:49C6 retn | |
| F000:49C6 diag_disk_write endp | |
| F000:49C7 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:49C7 diag_disk_verify proc near ; CODE XREF: int_87_diag_diskette+10Bp | |
| F000:49C7 mov byte ptr ds:seg60.operation, 4 ; verify disk sectors | |
| F000:49CC mov bx, 29h ; ')' | |
| F000:49CF call diag_perform_disk_operation | |
| F000:49D2 retn | |
| F000:49D2 diag_disk_verify endp | |
| F000:49D3 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:49D3 diag_disk_reset_system proc near ; CODE XREF: int_87_diag_diskette+CFp | |
| F000:49D3 mov byte ptr ds:seg60.operation, 0 ; reset disk system | |
| F000:49D8 call diag_perform_disk_operation | |
| F000:49DB retn | |
| F000:49DB diag_disk_reset_system endp | |
| F000:49DC ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:49DC diag_disk_compare_write_read proc near ; CODE XREF: int_87_diag_diskette:l13p | |
| F000:49DC mov word ptr ds:seg60.ran_num, 7 | |
| F000:49E2 l0: ; CODE XREF: diag_disk_compare_write_read+25j | |
| F000:49E2 call diag_disk_set_rand_tr_sect | |
| F000:49E5 call diag_disk_write | |
| F000:49E8 jb short l2 | |
| F000:49EA call diag_disk_read | |
| F000:49ED jb short l2 | |
| F000:49EF mov di, 29h ; ')' | |
| F000:49F2 mov si, 229h | |
| F000:49F5 mov cx, 200h | |
| F000:49F8 l1: ; CODE XREF: diag_disk_compare_write_read+1Dj | |
| F000:49F8 cmpsb | |
| F000:49F9 loope l1 | |
| F000:49FB jnz short l3 | |
| F000:49FD dec word ptr ds:seg60.ran_num | |
| F000:4A01 jnz short l0 | |
| F000:4A03 clc | |
| F000:4A04 retn | |
| F000:4A05 l2: ; CODE XREF: diag_disk_compare_write_read+Cj | |
| F000:4A05 ; diag_disk_compare_write_read+11j | |
| F000:4A05 stc | |
| F000:4A06 retn | |
| F000:4A07 l3: ; CODE XREF: diag_disk_compare_write_read+1Fj | |
| F000:4A07 mov byte ptr ds:seg60.dk_err_occured, 1 | |
| F000:4A0C mov byte ptr ds:seg60.dk_er_l1, 42h ; 'B' ; service required. read != write | |
| F000:4A11 mov byte ptr ds:seg60.dk_er_l2, 99h ; '' | |
| F000:4A16 stc | |
| F000:4A17 retn | |
| F000:4A17 diag_disk_compare_write_read endp | |
| F000:4A18 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4A18 diag_disk_set_rand_tr_sect proc near ; CODE XREF: diag_disk_compare_write_read:l0p | |
| F000:4A18 xor bx, bx | |
| F000:4A1A mov bl, 27h ; ''' | |
| F000:4A1C call diag_disk_next_seed | |
| F000:4A1F mov ds:seg60.track, dl | |
| F000:4A23 xor bx, bx | |
| F000:4A25 mov bl, 8 | |
| F000:4A27 call diag_disk_next_seed | |
| F000:4A2A inc dl | |
| F000:4A2C mov ds:seg60.sector, dl | |
| F000:4A30 retn | |
| F000:4A30 diag_disk_set_rand_tr_sect endp | |
| F000:4A31 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4A31 diag_disk_next_seed proc near ; CODE XREF: diag_disk_set_rand_tr_sect+4p | |
| F000:4A31 ; diag_disk_set_rand_tr_sect+Fp | |
| F000:4A31 mov ax, ds:seg60.seed | |
| F000:4A34 mov cx, 805h | |
| F000:4A37 mul cx | |
| F000:4A39 add ax, 3619h | |
| F000:4A3C mov ds:seg60.seed, ax | |
| F000:4A3F xor dx, dx | |
| F000:4A41 div bx | |
| F000:4A43 retn | |
| F000:4A43 diag_disk_next_seed endp | |
| F000:4A44 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4A44 sub_F4A44 proc near ; CODE XREF: int_87_diag_diskette:l14p | |
| F000:4A44 mov byte ptr ds:seg60.dk_flag, 1 | |
| F000:4A49 l0: ; CODE XREF: sub_F4A44+93j | |
| F000:4A49 mov ax, 201h | |
| F000:4A4C mov dl, ds:seg60.drive | |
| F000:4A50 mov dh, 0 | |
| F000:4A52 mov cx, 9 | |
| F000:4A55 mov bx, 29h ; ')' | |
| F000:4A58 int 13h ; DISK - READ SECTORS INTO MEMORY | |
| F000:4A58 ; AL = number of sectors to read, CH = track, CL = sector | |
| F000:4A58 ; DH = head, DL = drive, ES:BX -> buffer to fill | |
| F000:4A58 ; Return: CF set on error, AH = status, AL = number of sectors read | |
| F000:4A5A cmp ah, 4 | |
| F000:4A5D jnz short l5 | |
| F000:4A5F call diag_get_timer_0_plus | |
| F000:4A62 mov ds:seg60.tim_1, ax | |
| F000:4A65 mov ds:seg60.tim_l_1, cx | |
| F000:4A69 call sub_F4B09 | |
| F000:4A6C call diag_get_timer_0_plus | |
| F000:4A6F cmp ds:seg60.tim_l_1, cx | |
| F000:4A73 jz short l1 | |
| F000:4A75 jmp short l2 | |
| F000:4A77 db 90h ; | |
| F000:4A78 l1: ; CODE XREF: sub_F4A44+2Fj | |
| F000:4A78 add word ptr ds:seg60.half_cycle, 1 | |
| F000:4A7D l2: ; CODE XREF: sub_F4A44+31j | |
| F000:4A7D add word ptr ds:seg60.tim_l_1, 1 | |
| F000:4A82 mov ax, 201h | |
| F000:4A85 mov dl, ds:3 | |
| F000:4A89 mov dh, 0 | |
| F000:4A8B mov cx, 9 | |
| F000:4A8E mov bx, 29h ; ')' | |
| F000:4A91 int 13h ; DISK - READ SECTORS INTO MEMORY | |
| F000:4A91 ; AL = number of sectors to read, CH = track, CL = sector | |
| F000:4A91 ; DH = head, DL = drive, ES:BX -> buffer to fill | |
| F000:4A91 ; Return: CF set on error, AH = status, AL = number of sectors read | |
| F000:4A93 cmp ah, 4 | |
| F000:4A96 jnz short l5 | |
| F000:4A98 call diag_get_timer_0_plus | |
| F000:4A9B mov ds:seg60.tim_2, ax | |
| F000:4A9E not word ptr ds:seg60.tim_2 | |
| F000:4AA2 mov ds:seg60.tim_l_2, cx | |
| F000:4AA6 call sub_F4B09 | |
| F000:4AA9 call diag_get_timer_0_plus | |
| F000:4AAC cmp ds:seg60.tim_l_2, cx | |
| F000:4AB0 jz short l3 | |
| F000:4AB2 add word ptr ds:seg60.half_cycle, 1 | |
| F000:4AB7 l3: ; CODE XREF: sub_F4A44+6Cj | |
| F000:4AB7 call sub_F4B22 | |
| F000:4ABA cmp ax, 8B7h | |
| F000:4ABD jl short l4 | |
| F000:4ABF cmp ax, 913h | |
| F000:4AC2 jg short l4 | |
| F000:4AC4 clc | |
| F000:4AC5 retn | |
| F000:4AC6 l4: ; CODE XREF: sub_F4A44+79j | |
| F000:4AC6 ; sub_F4A44+7Ej | |
| F000:4AC6 inc byte ptr ds:seg60.dk_flag | |
| F000:4ACA cmp byte ptr ds:seg60.dk_flag, 4 | |
| F000:4ACF jz short l5 | |
| F000:4AD1 mov word ptr ds:seg60.half_cycle, 0 | |
| F000:4AD7 jmp l0 | |
| F000:4ADA l5: ; CODE XREF: sub_F4A44+19j | |
| F000:4ADA ; sub_F4A44+52j | |
| F000:4ADA ; sub_F4A44+8Bj | |
| F000:4ADA mov byte ptr ds:seg60.dk_err_occured, 1 | |
| F000:4ADF mov byte ptr ds:seg60.dk_er_l1, 42h ; 'B' ; service required. read != write ? | |
| F000:4AE4 mov byte ptr ds:seg60.dk_er_l2, 98h ; '' | |
| F000:4AE9 stc | |
| F000:4AEA retn | |
| F000:4AEA sub_F4A44 endp | |
| F000:4AEB ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4AEB ; return | |
| F000:4AEB ; cx = timer low (40:6c) | |
| F000:4AEB ; ax = timer 0 value | |
| F000:4AEB diag_get_timer_0_plus proc near ; CODE XREF: sub_F4A44+1Bp | |
| F000:4AEB ; sub_F4A44+28p | |
| F000:4AEB ; sub_F4A44+54p | |
| F000:4AEB ; sub_F4A44+65p sub_F4B09+5p | |
| F000:4AEB ; sub_F4B09:l0p | |
| F000:4AEB mov al, 0 ; tim 0, latching, interrupt on terminal count, binary | |
| F000:4AED cli ; no interrupts | |
| F000:4AEE out 43h, al | |
| F000:4AF0 nop | |
| F000:4AF1 nop | |
| F000:4AF2 in al, 40h ; read tim 0 lsb | |
| F000:4AF4 mov ah, al | |
| F000:4AF6 in al, 40h ; read tim 0 msb | |
| F000:4AF8 xchg ah, al ; ax = tim 0 | |
| F000:4AFA push ds | |
| F000:4AFB push si | |
| F000:4AFC sub si, si | |
| F000:4AFE mov ds, si | |
| F000:4B00 mov si, 46Ch ; 40:6c = timer low | |
| F000:4B03 mov cx, [si] | |
| F000:4B05 pop si | |
| F000:4B06 pop ds | |
| F000:4B07 sti ; enable interrupts | |
| F000:4B08 retn | |
| F000:4B08 diag_get_timer_0_plus endp | |
| F000:4B09 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4B09 sub_F4B09 proc near ; CODE XREF: sub_F4A44+25p | |
| F000:4B09 ; sub_F4A44+62p | |
| F000:4B09 push bx | |
| F000:4B0A push cx | |
| F000:4B0B push dx | |
| F000:4B0C mov dx, ax | |
| F000:4B0E call diag_get_timer_0_plus | |
| F000:4B11 mov bx, ax | |
| F000:4B13 l0: ; CODE XREF: sub_F4B09+13j | |
| F000:4B13 call diag_get_timer_0_plus | |
| F000:4B16 mov cx, bx | |
| F000:4B18 sub cx, ax | |
| F000:4B1A cmp cx, dx | |
| F000:4B1C jb short l0 | |
| F000:4B1E pop dx | |
| F000:4B1F pop cx | |
| F000:4B20 pop bx | |
| F000:4B21 retn | |
| F000:4B21 sub_F4B09 endp | |
| F000:4B22 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4B22 sub_F4B22 proc near ; CODE XREF: sub_F4A44:l3p | |
| F000:4B22 push cx | |
| F000:4B23 mov dx, 0 | |
| F000:4B26 mov ax, ds:seg60.tim_l_2 | |
| F000:4B29 sub ax, ds:seg60.tim_l_1 | |
| F000:4B2D mov cx, cs:word_F43DC | |
| F000:4B32 mul cx | |
| F000:4B34 mov ds:seg60.whole_cycle, ax | |
| F000:4B37 mov ax, ds:seg60.tim_1 | |
| F000:4B3A add ax, ds:seg60.tim_2 | |
| F000:4B3E jnb short l0 | |
| F000:4B40 add word ptr ds:seg60.half_cycle, 1 | |
| F000:4B45 l0: ; CODE XREF: sub_F4B22+1Cj | |
| F000:4B45 mov cx, cs:word_F43DA | |
| F000:4B4A mul cx | |
| F000:4B4C mov ds:seg60.fract_l, ax | |
| F000:4B4F mov ds:seg60.fract_h, dx | |
| F000:4B53 mov cx, cs:word_F43E0 | |
| F000:4B58 div cx | |
| F000:4B5A mov ds:seg60.part_cycle, ax | |
| F000:4B5D mov ax, ds:seg60.half_cycle | |
| F000:4B60 mov cx, cs:word_F43DE | |
| F000:4B65 mul cx | |
| F000:4B67 add ax, ds:seg60.whole_cycle | |
| F000:4B6B add ax, ds:seg60.part_cycle | |
| F000:4B6F mov cx, cs:word_F43E2 | |
| F000:4B74 div cx | |
| F000:4B76 pop cx | |
| F000:4B77 retn | |
| F000:4B77 sub_F4B22 endp | |
| F000:4B78 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4B78 diag_disk_set_err_code proc near ; CODE XREF: diag_perform_disk_operation+21p | |
| F000:4B78 mov ah, ds:seg60.er_status_byte | |
| F000:4B7C mov cx, 8 | |
| F000:4B7F cmp ah, 9 | |
| F000:4B82 jz short l1 | |
| F000:4B84 cmp ah, 60h ; '`' | |
| F000:4B87 jz short l2 | |
| F000:4B89 cmp ah, 3 | |
| F000:4B8C jz short l3 | |
| F000:4B8E l0: ; CODE XREF: diag_disk_set_err_code+1Dj | |
| F000:4B8E test ah, 1 | |
| F000:4B91 jnz short l4 | |
| F000:4B93 shr ah, 1 | |
| F000:4B95 loop l0 | |
| F000:4B97 mov cx, 8 | |
| F000:4B9A jmp short l4 | |
| F000:4B9C l1: ; CODE XREF: diag_disk_set_err_code+Aj | |
| F000:4B9C mov cx, 0Bh | |
| F000:4B9F jmp short l4 | |
| F000:4BA1 l2: ; CODE XREF: diag_disk_set_err_code+Fj | |
| F000:4BA1 mov cx, 9 | |
| F000:4BA4 jmp short l4 | |
| F000:4BA6 l3: ; CODE XREF: diag_disk_set_err_code+14j | |
| F000:4BA6 mov cx, 0Ah | |
| F000:4BA9 l4: ; CODE XREF: diag_disk_set_err_code+19j | |
| F000:4BA9 ; diag_disk_set_err_code+22j | |
| F000:4BA9 ; diag_disk_set_err_code+27j | |
| F000:4BA9 ; diag_disk_set_err_code+2Cj | |
| F000:4BA9 dec cx | |
| F000:4BAA mov di, cx | |
| F000:4BAC mov ah, cs:disk_err_codes[di] | |
| F000:4BB1 mov ds:seg60.dk_er_l1, ah | |
| F000:4BB5 mov ah, ds:seg60.er_status_byte | |
| F000:4BB9 mov ds:seg60.dk_er_l2, ah | |
| F000:4BBD mov byte ptr ds:seg60.dk_err_occured, 1 | |
| F000:4BC2 stc | |
| F000:4BC3 retn | |
| F000:4BC3 diag_disk_set_err_code endp | |
| F000:4BC4 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4BC4 ; int 0x88 | |
| F000:4BC4 ; video tests | |
| F000:4BC4 ; input: | |
| F000:4BC4 ; ah = '4': 64k ram test | |
| F000:4BC4 ; '8': 128k ram test | |
| F000:4BC4 ; '5': light pen test | |
| F000:4BC4 ; 0xff: ascii test? (mfg system test: msg ah=0001) | |
| F000:4BC4 ; output: | |
| F000:4BC4 ; dl/dh = error message | |
| F000:4BC4 int_88_diag_video proc far ; DATA XREF: F000:4010o | |
| F000:4BC4 xor bx, bx | |
| F000:4BC6 push bx | |
| F000:4BC7 or ah, ah | |
| F000:4BC9 jz short l3 | |
| F000:4BCB cmp ah, 1 | |
| F000:4BCE jz short l3 | |
| F000:4BD0 cmp ah, 34h ; '4' | |
| F000:4BD3 jnz short l0 | |
| F000:4BD5 jmp mode_4 | |
| F000:4BD8 l0: ; CODE XREF: int_88_diag_video+Fj | |
| F000:4BD8 cmp ah, 38h ; '8' | |
| F000:4BDB jnz short l2 | |
| F000:4BDD ;----- mode '8' (128k mem mode) | |
| F000:4BDD in al, 62h ; get config byte | |
| F000:4BDF test al, 8 ; see if 128k ram available | |
| F000:4BE1 pop bx | |
| F000:4BE2 jz short l1 ; yes, 128k at least, jump | |
| F000:4BE4 mov dx, 4100h ; no, exit | |
| F000:4BE7 mov bx, dx | |
| F000:4BE9 stc | |
| F000:4BEA retf 2 | |
| F000:4BED l1: ; CODE XREF: int_88_diag_video+1Ej | |
| F000:4BED mov bl, 5Ah ; 'Z' | |
| F000:4BEF push bx | |
| F000:4BF0 jmp short mode_4 | |
| F000:4BF2 l2: ; CODE XREF: int_88_diag_video+17j | |
| F000:4BF2 cmp ah, 35h ; '5' | |
| F000:4BF5 jz short mode_5 | |
| F000:4BF7 cmp ah, 0FFh | |
| F000:4BFA jz short mode_ff | |
| F000:4BFC pop bx | |
| F000:4BFD iret | |
| F000:4BFE l3: ; CODE XREF: int_88_diag_video+5j | |
| F000:4BFE ; int_88_diag_video+Aj | |
| F000:4BFE pop bx | |
| F000:4BFF mov al, 5 | |
| F000:4C01 mov bp, offset unk_F4FE5 | |
| F000:4C04 int 81h ; reserved for BASIC | |
| F000:4C06 int 82h ; reserved for BASIC | |
| F000:4C08 in al, 62h ; get config byte | |
| F000:4C0A test al, 8 ; see if 64k ram extension installed (at least 128k ram) | |
| F000:4C0C jz short lret4 ; yes, jump | |
| F000:4C0E mov bp, offset unk_F5027 | |
| F000:4C11 int 82h ; reserved for BASIC | |
| F000:4C13 lret4: ; CODE XREF: int_88_diag_video+48j | |
| F000:4C13 iret | |
| F000:4C14 ;----- mode ff (unknown mode?) | |
| F000:4C14 mode_ff: ; CODE XREF: int_88_diag_video+36j | |
| F000:4C14 call diag_print_ascii_table | |
| F000:4C17 mov cx, 6 | |
| F000:4C1A delay1: ; CODE XREF: int_88_diag_video+5Cj | |
| F000:4C1A push cx | |
| F000:4C1B xor cx, cx | |
| F000:4C1D delay0: ; CODE XREF: int_88_diag_video:delay0j | |
| F000:4C1D loop delay0 | |
| F000:4C1F pop cx | |
| F000:4C20 loop delay1 | |
| F000:4C22 jmp l35 | |
| F000:4C25 ;----- mode 5 (light pen mode) | |
| F000:4C25 mode_5: ; CODE XREF: int_88_diag_video+31j | |
| F000:4C25 ; int_88_diag_video+90j | |
| F000:4C25 mov al, 1 ; set 40x25 color | |
| F000:4C27 call diag_set_video_mode | |
| F000:4C2A mov bp, offset unk_F5121 | |
| F000:4C2D call diag_fill_screen? | |
| F000:4C30 mov bp, offset unk_F5126 | |
| F000:4C33 xor dx, dx | |
| F000:4C35 mov cx, 3 | |
| F000:4C38 l9: ; CODE XREF: int_88_diag_video+76j | |
| F000:4C38 int 82h ; reserved for BASIC | |
| F000:4C3A loop l9 | |
| F000:4C3C l10: ; CODE XREF: int_88_diag_video+86j | |
| F000:4C3C ; int_88_diag_video+A7j | |
| F000:4C3C call diag_check_kbd_break | |
| F000:4C3F jnb short l11 | |
| F000:4C41 jmp near ptr diag_ret_with_error_0? | |
| F000:4C44 l11: ; CODE XREF: int_88_diag_video+7Bj | |
| F000:4C44 mov ah, 4 | |
| F000:4C46 int 10h ; - VIDEO - READ LIGHT PEN POSITION (all but PS) | |
| F000:4C46 ; Return: AH = 00h light pen switch not activated | |
| F000:4C46 ; AH = 01h light pen values in registers | |
| F000:4C46 ; DH,DL = row,columnCH = raster line (0-199) (EGA) old graphics modes | |
| F000:4C46 ; CX = (EGA) raster line | |
| F000:4C46 ; BX = pixel column | |
| F000:4C48 or ah, ah | |
| F000:4C4A jz short l10 | |
| F000:4C4C cmp dh, 2 | |
| F000:4C4F jg short l12 | |
| F000:4C51 cmp dl, 2 | |
| F000:4C54 jle short mode_5 | |
| F000:4C56 l12: ; CODE XREF: int_88_diag_video+8Bj | |
| F000:4C56 mov ah, 2 | |
| F000:4C58 mov bh, 0 | |
| F000:4C5A int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:4C5A ; DH,DL = row, column (0,0 = upper left) | |
| F000:4C5A ; BH = page number | |
| F000:4C5C mov al, 20h ; ' ' | |
| F000:4C5E and bl, 70h | |
| F000:4C61 cmp bl, 70h ; 'p' | |
| F000:4C64 jnz short l13 | |
| F000:4C66 mov bl, 0 | |
| F000:4C68 l13: ; CODE XREF: int_88_diag_video+A0j | |
| F000:4C68 call print_char_and_advance_one | |
| F000:4C6B jmp short l10 | |
| F000:4C6D ;----- mode 4 (64k mem mode) | |
| F000:4C6D mode_4: ; CODE XREF: int_88_diag_video+11j | |
| F000:4C6D ; int_88_diag_video+2Cj | |
| F000:4C6D mov al, 1 ; set 40x25 color | |
| F000:4C6F call diag_set_video_mode | |
| F000:4C72 call diag_set_border_color_lgray | |
| F000:4C75 mov bp, offset unk_F512C | |
| F000:4C78 call diag_fill_screen? | |
| F000:4C7B push cs | |
| F000:4C7C pop ds | |
| F000:4C7D mov si, 5031h | |
| F000:4C80 mov dx, 204h | |
| F000:4C83 mov cx, 5 | |
| F000:4C86 mov bp, offset unk_F4FE5 | |
| F000:4C89 l15: ; CODE XREF: int_88_diag_video+D0j | |
| F000:4C89 int 82h ; reserved for BASIC | |
| F000:4C8B lodsb | |
| F000:4C8C mov bl, al | |
| F000:4C8E or dh, 80h | |
| F000:4C91 sub dl, 2 | |
| F000:4C94 loop l15 | |
| F000:4C96 mov bp, offset s_12345 | |
| F000:4C99 mov dx, 0A00h | |
| F000:4C9C int 82h ; reserved for BASIC | |
| F000:4C9E mov bl, 0 | |
| F000:4CA0 mov bp, offset unk_F5050 | |
| F000:4CA3 mov cx, 10h | |
| F000:4CA6 l16: ; CODE XREF: int_88_diag_video+F1j | |
| F000:4CA6 or dh, 80h | |
| F000:4CA9 mov al, 41h ; 'A' | |
| F000:4CAB add al, bl | |
| F000:4CAD mov ah, 0Eh | |
| F000:4CAF int 10h ; - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE) | |
| F000:4CAF ; AL = character, BH = display page (alpha modes) | |
| F000:4CAF ; BL = foreground color (graphics modes) | |
| F000:4CB1 int 82h ; reserved for BASIC | |
| F000:4CB3 inc bl | |
| F000:4CB5 loop l16 | |
| F000:4CB7 call diag_wait_key | |
| F000:4CBA jb short l17 | |
| F000:4CBC xor ax, ax | |
| F000:4CBE call diag_set_video_mode | |
| F000:4CC1 call diag_print_ascii_table | |
| F000:4CC4 call diag_wait_key | |
| F000:4CC7 l17: ; CODE XREF: int_88_diag_video+F6j | |
| F000:4CC7 jb short l18 | |
| F000:4CC9 mov bh, 0 | |
| F000:4CCB call diag_set_border_color | |
| F000:4CCE mov al, 46h ; 'F' | |
| F000:4CD0 mov bp, offset s_40x25 | |
| F000:4CD3 mov dx, 8103h | |
| F000:4CD6 mov cx, 27h ; ''' | |
| F000:4CD9 call sub_F4F80 | |
| F000:4CDC call diag_wait_key | |
| F000:4CDF l18: ; CODE XREF: int_88_diag_video:l17j | |
| F000:4CDF jb short l19 | |
| F000:4CE1 mov al, 8 ; set 160 x 200 x 16 col | |
| F000:4CE3 call diag_set_video_mode | |
| F000:4CE6 mov ax, offset unk_F5103 | |
| F000:4CE9 mov bx, 800h | |
| F000:4CEC mov cx, 8 | |
| F000:4CEF mov dx, 201h | |
| F000:4CF2 mov di, 0FE01h | |
| F000:4CF5 mov si, 0F101h | |
| F000:4CF8 mov bp, offset s_160x200x16 | |
| F000:4CFB call diag_print_video_mode_and_blocks | |
| F000:4CFE call diag_wait_key | |
| F000:4D01 l19: ; CODE XREF: int_88_diag_video:l18j | |
| F000:4D01 jb short l21 | |
| F000:4D03 mov al, 5 | |
| F000:4D05 mov bh, 7 | |
| F000:4D07 mov bp, offset s_320x200x4 | |
| F000:4D0A mov cx, 2 | |
| F000:4D0D l20: ; CODE XREF: int_88_diag_video+170j | |
| F000:4D0D push cx | |
| F000:4D0E call diag_set_video_mode | |
| F000:4D11 call diag_set_border_color | |
| F000:4D14 mov ax, offset unk_F5082 | |
| F000:4D17 mov bx, 0B08h | |
| F000:4D1A mov cx, 2 | |
| F000:4D1D mov dx, 303h | |
| F000:4D20 mov di, 0F907h | |
| F000:4D23 mov si, 0EF07h | |
| F000:4D26 call diag_print_video_mode_and_blocks | |
| F000:4D29 call diag_wait_key | |
| F000:4D2C mov al, 4 | |
| F000:4D2E mov bh, 3 | |
| F000:4D30 mov bp, 5087h | |
| F000:4D33 pop cx | |
| F000:4D34 loop l20 | |
| F000:4D36 l21: ; CODE XREF: int_88_diag_video:l19j | |
| F000:4D36 jb short l23 | |
| F000:4D38 pop bx | |
| F000:4D39 push bx | |
| F000:4D3A cmp bl, 5Ah ; 'Z' | |
| F000:4D3D jz short l22 | |
| F000:4D3F jmp l30 | |
| F000:4D42 l22: ; CODE XREF: int_88_diag_video+179j | |
| F000:4D42 mov al, 9 ; 320x200 16 colors | |
| F000:4D44 call diag_set_video_mode | |
| F000:4D47 mov bh, 9 ; light blue | |
| F000:4D49 call diag_set_border_color | |
| F000:4D4C mov ax, offset unk_F50B3 | |
| F000:4D4F mov bx, 800h | |
| F000:4D52 mov cx, 8 | |
| F000:4D55 mov dx, 306h | |
| F000:4D58 mov di, 0FE02h | |
| F000:4D5B mov si, 0F102h | |
| F000:4D5E mov bp, offset s_320x200x16 | |
| F000:4D61 call diag_print_video_mode_and_blocks | |
| F000:4D64 call diag_wait_key | |
| F000:4D67 l23: ; CODE XREF: int_88_diag_video:l21j | |
| F000:4D67 jb short l25 | |
| F000:4D69 mov cx, 4Fh ; 'O' | |
| F000:4D6C mov al, 2 ; 80x25 bw | |
| F000:4D6E l24: ; CODE XREF: int_88_diag_video+1C4j | |
| F000:4D6E call diag_set_video_mode | |
| F000:4D71 mov al, 6Eh ; 'n' | |
| F000:4D73 mov bp, 506Ch | |
| F000:4D76 mov dx, 8106h | |
| F000:4D79 call sub_F4F80 | |
| F000:4D7C call diag_wait_key | |
| F000:4D7F l25: ; CODE XREF: int_88_diag_video:l23j | |
| F000:4D7F jb short l28 | |
| F000:4D81 or ch, ch | |
| F000:4D83 mov cx, 14Fh | |
| F000:4D86 mov al, 3 ; 80x25 color | |
| F000:4D88 jz short l24 | |
| F000:4D8A mov al, 6 | |
| F000:4D8C call diag_set_video_mode | |
| F000:4D8F call diag_set_border_color_lgray | |
| F000:4D92 mov dx, 302h | |
| F000:4D95 mov bp, offset s_640x200x2 | |
| F000:4D98 int 82h ; reserved for BASIC | |
| F000:4D9A mov cx, 2 | |
| F000:4D9D mov dx, 0B08h | |
| F000:4DA0 mov bp, offset unk_F50E0 | |
| F000:4DA3 l26: ; CODE XREF: int_88_diag_video+1EDj | |
| F000:4DA3 push cx | |
| F000:4DA4 mov cl, 9 | |
| F000:4DA6 l27: ; CODE XREF: int_88_diag_video+1E4j | |
| F000:4DA6 int 82h ; reserved for BASIC | |
| F000:4DA8 loop l27 | |
| F000:4DAA mov bp, offset unk_F50E5 | |
| F000:4DAD mov dx, 622h | |
| F000:4DB0 pop cx | |
| F000:4DB1 loop l26 | |
| F000:4DB3 call diag_wait_key | |
| F000:4DB6 l28: ; CODE XREF: int_88_diag_video:l25j | |
| F000:4DB6 jb short l29 | |
| F000:4DB8 mov al, 0Ah | |
| F000:4DBA call diag_set_video_mode | |
| F000:4DBD mov bh, 5 | |
| F000:4DBF call diag_set_border_color | |
| F000:4DC2 mov bp, offset s_640x200x4 | |
| F000:4DC5 mov ax, offset unk_F50EA | |
| F000:4DC8 mov bx, 0B00h | |
| F000:4DCB mov cx, 2 | |
| F000:4DCE mov dx, 303h | |
| F000:4DD1 mov di, 0F910h | |
| F000:4DD4 mov si, 0EF10h | |
| F000:4DD7 call diag_print_video_mode_and_blocks | |
| F000:4DDA call diag_wait_key | |
| F000:4DDD l29: ; CODE XREF: int_88_diag_video:l28j | |
| F000:4DDD jb short l33 | |
| F000:4DDF l30: ; CODE XREF: int_88_diag_video+17Bj | |
| F000:4DDF xor ax, ax ; 40x25 bw | |
| F000:4DE1 call diag_set_video_mode | |
| F000:4DE4 mov ax, 0B800h | |
| F000:4DE7 mov bl, 30h ; '0' ; fill screen with 0 | |
| F000:4DE9 mov cx, 8 ; 8 pages | |
| F000:4DEC l31_fill_page: ; CODE XREF: int_88_diag_video+23Dj | |
| F000:4DEC push cx | |
| F000:4DED mov es, ax | |
| F000:4DEF xor di, di | |
| F000:4DF1 mov al, bl | |
| F000:4DF3 mov ah, 7 | |
| F000:4DF5 mov cx, 1000 ; 40x25 = 1000 | |
| F000:4DF8 rep stosw | |
| F000:4DFA mov ax, es | |
| F000:4DFC add ax, 80h ; '' ; fill next page address | |
| F000:4DFF inc bx ; 0 -> 1 -> 2... -> 7 | |
| F000:4E00 pop cx | |
| F000:4E01 loop l31_fill_page | |
| F000:4E03 mov ax, 500h ; display page 0 | |
| F000:4E06 mov cx, 8 | |
| F000:4E09 l32: ; CODE XREF: int_88_diag_video+252j | |
| F000:4E09 push ax | |
| F000:4E0A int 10h ; - VIDEO - SELECT DISPLAY PAGE | |
| F000:4E0A ; AL = display page, 0-7 for modes 0 & 1, 0-3 for modes 2 & 3 | |
| F000:4E0C pop ax | |
| F000:4E0D call diag_wait_key | |
| F000:4E10 l33: ; CODE XREF: int_88_diag_video:l29j | |
| F000:4E10 jnb short l34 | |
| F000:4E12 jmp near ptr diag_ret_with_error_3f00? | |
| F000:4E15 l34: ; CODE XREF: int_88_diag_video:l33j | |
| F000:4E15 inc ax | |
| F000:4E16 loop l32 | |
| F000:4E18 l35: ; CODE XREF: int_88_diag_video+5Ej | |
| F000:4E18 xor ax, ax | |
| F000:4E1A call diag_set_video_mode | |
| F000:4E1D mov ax, 507h ; page 7 | |
| F000:4E20 int 10h ; - VIDEO - SELECT DISPLAY PAGE | |
| F000:4E20 ; AL = display page, 0-7 for modes 0 & 1, 0-3 for modes 2 & 3 | |
| F000:4E22 mov ax, 580h ; page 0x80 ? | |
| F000:4E25 int 10h ; - VIDEO - SELECT DISPLAY PAGE | |
| F000:4E25 ; AL = display page, 0-7 for modes 0 & 1, 0-3 for modes 2 & 3 | |
| F000:4E27 push bx | |
| F000:4E28 mov cx, 0B800h | |
| F000:4E2B mov es, cx | |
| F000:4E2D sub cx, cx | |
| F000:4E2F cld | |
| F000:4E30 mov ds, cx | |
| F000:4E32 mov di, cx | |
| F000:4E34 mov si, 3800h | |
| F000:4E37 mov dx, si | |
| F000:4E39 inc bl | |
| F000:4E3B l36: ; CODE XREF: int_88_diag_video+281j | |
| F000:4E3B ; int_88_diag_video+28Bj | |
| F000:4E3B mov ch, 4 | |
| F000:4E3D rep movsw | |
| F000:4E3F dec bl | |
| F000:4E41 add si, dx | |
| F000:4E43 cmp si, dx | |
| F000:4E45 jnz short l36 | |
| F000:4E47 or bl, bl | |
| F000:4E49 jz short l37 | |
| F000:4E4B mov ch, 10h | |
| F000:4E4D mov ds, cx | |
| F000:4E4F jmp short l36 | |
| F000:4E51 l37: ; CODE XREF: int_88_diag_video+285j | |
| F000:4E51 mov cl, bh | |
| F000:4E53 inc cl | |
| F000:4E55 l38: ; CODE XREF: int_88_diag_video+2A5j | |
| F000:4E55 push cx | |
| F000:4E56 mov di, dx | |
| F000:4E58 mov ax, 581h | |
| F000:4E5B int 10h ; - VIDEO - SELECT DISPLAY PAGE | |
| F000:4E5B ; AL = display page, 0-7 for modes 0 & 1, 0-3 for modes 2 & 3 | |
| F000:4E5D mov ah, bl | |
| F000:4E5F mov al, 0DBh ; 'Û' | |
| F000:4E61 inc bl | |
| F000:4E63 mov cx, 400h | |
| F000:4E66 rep stosw | |
| F000:4E68 pop cx | |
| F000:4E69 loop l38 | |
| F000:4E6B xor bh, bh | |
| F000:4E6D mov cl, bl | |
| F000:4E6F l39: ; CODE XREF: int_88_diag_video+2C2j | |
| F000:4E6F push cx | |
| F000:4E70 mov ax, 582h | |
| F000:4E73 int 10h ; - VIDEO - SELECT DISPLAY PAGE | |
| F000:4E73 ; AL = display page, 0-7 for modes 0 & 1, 0-3 for modes 2 & 3 | |
| F000:4E75 call diag_check_palette_and_video_dots | |
| F000:4E78 cmp ah, bh | |
| F000:4E7A pop cx | |
| F000:4E7B jz short l40 | |
| F000:4E7D mov bp, 0FFFFh | |
| F000:4E80 mov dh, bh | |
| F000:4E82 jmp short l41 | |
| F000:4E84 l40: ; CODE XREF: int_88_diag_video+2B7j | |
| F000:4E84 inc bh | |
| F000:4E86 loop l39 | |
| F000:4E88 mov bp, 0 | |
| F000:4E8B l41: ; CODE XREF: int_88_diag_video+2BEj | |
| F000:4E8B mov ch, 0B8h ; '¸' | |
| F000:4E8D mov ds, cx | |
| F000:4E8F sub cx, cx | |
| F000:4E91 cld | |
| F000:4E92 mov es, cx | |
| F000:4E94 mov si, cx | |
| F000:4E96 mov di, 3800h | |
| F000:4E99 pop bx | |
| F000:4E9A push bx | |
| F000:4E9B mov cl, bh | |
| F000:4E9D l42: ; CODE XREF: int_88_diag_video+2EAj | |
| F000:4E9D push cx | |
| F000:4E9E mov cx, 400h | |
| F000:4EA1 rep movsw | |
| F000:4EA3 add di, dx | |
| F000:4EA5 cmp di, dx | |
| F000:4EA7 jnz short l43 | |
| F000:4EA9 mov ch, 10h | |
| F000:4EAB mov es, cx | |
| F000:4EAD l43: ; CODE XREF: int_88_diag_video+2E3j | |
| F000:4EAD pop cx | |
| F000:4EAE loop l42 | |
| F000:4EB0 pop bx | |
| F000:4EB1 mov ax, 583h | |
| F000:4EB4 int 10h ; - VIDEO - SELECT DISPLAY PAGE | |
| F000:4EB4 ; AL = display page, 0-7 for modes 0 & 1, 0-3 for modes 2 & 3 | |
| F000:4EB6 or bp, bp | |
| F000:4EB8 jnz short l44 | |
| F000:4EBA jmp short near ptr diag_ret_with_error_0? | |
| F000:4EBC db 90h ; | |
| F000:4EBD l44: ; CODE XREF: int_88_diag_video+2F4j | |
| F000:4EBD mov bl, dh | |
| F000:4EBF mov dx, 4200h | |
| F000:4EC2 mov bh, dh | |
| F000:4EC4 pop ax | |
| F000:4EC5 stc | |
| F000:4EC6 retf 2 | |
| F000:4EC6 int_88_diag_video endp | |
| F000:4EC9 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4EC9 diag_check_palette_and_video_dots proc near ; CODE XREF: int_88_diag_video+2B1p | |
| F000:4EC9 push dx | |
| F000:4ECA mov dx, 3DAh | |
| F000:4ECD xor ax, ax | |
| F000:4ECF mov cx, 2 ; border color | |
| F000:4ED2 l0: ; CODE XREF: diag_check_palette_and_video_dots+1Cj | |
| F000:4ED2 push cx | |
| F000:4ED3 mov al, cl | |
| F000:4ED5 sub cx, cx | |
| F000:4ED7 out dx, al | |
| F000:4ED8 l1: ; CODE XREF: diag_check_palette_and_video_dots+14j | |
| F000:4ED8 in al, dx | |
| F000:4ED9 and al, 10h ; video dots... testing that video works ok. | |
| F000:4EDB jnz short l3 | |
| F000:4EDD loop l1 | |
| F000:4EDF l2: ; CODE XREF: diag_check_palette_and_video_dots+2Aj | |
| F000:4EDF pop cx | |
| F000:4EE0 dec cl | |
| F000:4EE2 cmp cl, 0FFh | |
| F000:4EE5 jnz short l0 | |
| F000:4EE7 pop dx | |
| F000:4EE8 retn | |
| F000:4EE9 l3: ; CODE XREF: diag_check_palette_and_video_dots+12j | |
| F000:4EE9 pop cx | |
| F000:4EEA push cx | |
| F000:4EEB inc cx | |
| F000:4EEC xor al, al | |
| F000:4EEE stc | |
| F000:4EEF rcl al, cl | |
| F000:4EF1 or ah, al | |
| F000:4EF3 jmp short l2 | |
| F000:4EF3 diag_check_palette_and_video_dots endp | |
| F000:4EF5 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4EF5 diag_ret_with_error_0? proc far ; CODE XREF: int_88_diag_video+7Dj | |
| F000:4EF5 ; int_88_diag_video+2F6j | |
| F000:4EF5 xor dx, dx | |
| F000:4EF7 stc | |
| F000:4EF8 pop bx | |
| F000:4EF9 retf 2 | |
| F000:4EF9 diag_ret_with_error_0? endp ; sp = 2 | |
| F000:4EFC ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4EFC diag_ret_with_error_3f00? proc far ; CODE XREF: int_88_diag_video+24Ej | |
| F000:4EFC stc | |
| F000:4EFD mov dx, 3F00h | |
| F000:4F00 pop bx | |
| F000:4F01 mov bx, 0FFFFh | |
| F000:4F04 retf 2 | |
| F000:4F04 diag_ret_with_error_3f00? endp ; sp = 2 | |
| F000:4F07 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4F07 diag_print_ascii_table proc near ; CODE XREF: int_88_diag_video:mode_ffp | |
| F000:4F07 ; int_88_diag_video+FDp | |
| F000:4F07 xor ax, ax ; set 40x25 bw | |
| F000:4F09 call diag_set_video_mode | |
| F000:4F0C call diag_set_border_color_lgray | |
| F000:4F0F mov dx, 303h | |
| F000:4F12 mov bp, offset s_ascii | |
| F000:4F15 int 82h ; reserved for BASIC | |
| F000:4F17 mov al, 0FFh | |
| F000:4F19 mov bx, 0Fh ; bh=display page(0), bl=attribute(white) | |
| F000:4F1C l0: ; CODE XREF: diag_print_ascii_table+26j | |
| F000:4F1C ; diag_print_ascii_table+37j | |
| F000:4F1C inc al ; next ascii to print | |
| F000:4F1E push ax | |
| F000:4F1F call print_char_and_advance_one | |
| F000:4F22 mov al, 20h ; ' ' ; print space | |
| F000:4F24 call print_char_and_advance_one | |
| F000:4F27 cmp dl, 23h ; '#' | |
| F000:4F2A jg short l1 | |
| F000:4F2C pop ax | |
| F000:4F2D jmp short l0 | |
| F000:4F2F l1: ; CODE XREF: diag_print_ascii_table+23j | |
| F000:4F2F cmp dh, 13h | |
| F000:4F32 jz short l2 | |
| F000:4F34 sub dl, 21h ; '!' | |
| F000:4F37 inc dh | |
| F000:4F39 mov ah, 2 | |
| F000:4F3B int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:4F3B ; DH,DL = row, column (0,0 = upper left) | |
| F000:4F3B ; BH = page number | |
| F000:4F3D pop ax | |
| F000:4F3E jmp short l0 | |
| F000:4F40 l2: ; CODE XREF: diag_print_ascii_table+2Bj | |
| F000:4F40 pop ax | |
| F000:4F41 retn | |
| F000:4F41 diag_print_ascii_table endp | |
| F000:4F42 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4F42 diag_fill_screen? proc near ; CODE XREF: int_88_diag_video+69p | |
| F000:4F42 ; int_88_diag_video+B4p | |
| F000:4F42 xor dx, dx | |
| F000:4F44 mov cx, 25 ; repeat 25 times (25 rows) | |
| F000:4F47 l0: ; CODE XREF: diag_fill_screen?+7j | |
| F000:4F47 int 82h ; reserved for BASIC | |
| F000:4F49 loop l0 | |
| F000:4F4B retn | |
| F000:4F4B diag_fill_screen? endp | |
| F000:4F4C ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4F4C diag_wait_key proc near ; CODE XREF: int_88_diag_video+F3p | |
| F000:4F4C ; int_88_diag_video+100p | |
| F000:4F4C ; int_88_diag_video+118p | |
| F000:4F4C ; int_88_diag_video+13Ap | |
| F000:4F4C ; int_88_diag_video+165p | |
| F000:4F4C ; int_88_diag_video+1A0p ... | |
| F000:4F4C push ax | |
| F000:4F4D push dx | |
| F000:4F4E push bp | |
| F000:4F4F push ds | |
| F000:4F50 mov dx, 80h ; '' | |
| F000:4F53 mov bp, offset s_wait_key | |
| F000:4F56 int 82h ; reserved for BASIC | |
| F000:4F58 mov ax, 40h ; '@' | |
| F000:4F5B mov ds, ax | |
| F000:4F5D mov al, ds:seg40.bios_break | |
| F000:4F60 pop ds | |
| F000:4F61 test al, 80h | |
| F000:4F63 clc | |
| F000:4F64 jz short l0 | |
| F000:4F66 stc | |
| F000:4F67 l0: ; CODE XREF: diag_wait_key+18j | |
| F000:4F67 pop bp | |
| F000:4F68 pop dx | |
| F000:4F69 pop ax | |
| F000:4F6A retn | |
| F000:4F6A diag_wait_key endp | |
| F000:4F6B ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4F6B print_char_and_advance_one proc near ; CODE XREF: int_88_diag_video:l13p | |
| F000:4F6B ; diag_print_ascii_table+18p | |
| F000:4F6B ; diag_print_ascii_table+1Dp | |
| F000:4F6B ; sub_F4F80:l3p | |
| F000:4F6B push ax | |
| F000:4F6C push cx | |
| F000:4F6D mov cx, 1 | |
| F000:4F70 mov ah, 9 | |
| F000:4F72 int 10h ; - VIDEO - WRITE ATTRIBUTES/CHARACTERS AT CURSOR POSITION | |
| F000:4F72 ; AL = character, BH = display page | |
| F000:4F72 ; BL = attributes of character (alpha modes) or color (graphics modes) | |
| F000:4F72 ; CX = number of times to write character | |
| F000:4F74 mov ah, 3 | |
| F000:4F76 int 10h ; - VIDEO - READ CURSOR POSITION | |
| F000:4F76 ; BH = page number | |
| F000:4F76 ; Return: DH,DL = row,column, CH = cursor start line, CL = cursor end line | |
| F000:4F78 inc dx | |
| F000:4F79 mov ah, 2 | |
| F000:4F7B int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:4F7B ; DH,DL = row, column (0,0 = upper left) | |
| F000:4F7B ; BH = page number | |
| F000:4F7D pop cx | |
| F000:4F7E pop ax | |
| F000:4F7F retn | |
| F000:4F7F print_char_and_advance_one endp | |
| F000:4F80 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4F80 sub_F4F80 proc near ; CODE XREF: int_88_diag_video+115p | |
| F000:4F80 ; int_88_diag_video+1B5p | |
| F000:4F80 mov bl, 70h ; 'p' | |
| F000:4F82 int 82h ; reserved for BASIC | |
| F000:4F84 mov bh, 0 | |
| F000:4F86 l0: ; CODE XREF: sub_F4F80+2Dj | |
| F000:4F86 or ch, ch | |
| F000:4F88 jz short l1 | |
| F000:4F8A mov ch, 1 | |
| F000:4F8C l1: ; CODE XREF: sub_F4F80+8j | |
| F000:4F8C sub al, cl | |
| F000:4F8E inc ah | |
| F000:4F90 push ax | |
| F000:4F91 inc dh | |
| F000:4F93 mov dl, 0 | |
| F000:4F95 mov ah, 2 | |
| F000:4F97 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:4F97 ; DH,DL = row, column (0,0 = upper left) | |
| F000:4F97 ; BH = page number | |
| F000:4F99 pop ax | |
| F000:4F9A l2: ; CODE XREF: sub_F4F80+28j | |
| F000:4F9A inc ax | |
| F000:4F9B or ch, ch | |
| F000:4F9D jz short l3 | |
| F000:4F9F inc ch | |
| F000:4FA1 mov bl, ch | |
| F000:4FA3 l3: ; CODE XREF: sub_F4F80+1Dj | |
| F000:4FA3 call print_char_and_advance_one | |
| F000:4FA6 cmp dl, cl | |
| F000:4FA8 jle short l2 | |
| F000:4FAA cmp dh, 18h | |
| F000:4FAD jl short l0 | |
| F000:4FAF retn | |
| F000:4FAF sub_F4F80 endp | |
| F000:4FB0 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4FB0 diag_print_video_mode_and_blocks proc near ; CODE XREF: int_88_diag_video+137p | |
| F000:4FB0 ; int_88_diag_video+162p | |
| F000:4FB0 ; int_88_diag_video+19Dp | |
| F000:4FB0 ; int_88_diag_video+213p | |
| F000:4FB0 int 82h ; reserved for BASIC | |
| F000:4FB2 mov bp, ax | |
| F000:4FB4 l0: ; CODE XREF: diag_print_video_mode_and_blocks+1Dj | |
| F000:4FB4 push cx | |
| F000:4FB5 mov cx, 2 | |
| F000:4FB8 l1: ; CODE XREF: diag_print_video_mode_and_blocks+1Aj | |
| F000:4FB8 push cx | |
| F000:4FB9 xor cx, cx | |
| F000:4FBB mov cl, bh | |
| F000:4FBD l2: ; CODE XREF: diag_print_video_mode_and_blocks+12j | |
| F000:4FBD or dh, 80h | |
| F000:4FC0 int 82h ; reserved for BASIC | |
| F000:4FC2 loop l2 | |
| F000:4FC4 add dx, di | |
| F000:4FC6 xchg di, si | |
| F000:4FC8 pop cx | |
| F000:4FC9 inc bx | |
| F000:4FCA loop l1 | |
| F000:4FCC pop cx | |
| F000:4FCD loop l0 | |
| F000:4FCF retn | |
| F000:4FCF diag_print_video_mode_and_blocks endp | |
| F000:4FD0 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4FD0 diag_set_border_color_lgray proc near ; CODE XREF: int_88_diag_video+AEp | |
| F000:4FD0 ; int_88_diag_video+1CBp | |
| F000:4FD0 ; diag_print_ascii_table+5p | |
| F000:4FD0 mov bh, 7 | |
| F000:4FD2 diag_set_border_color: ; CODE XREF: int_88_diag_video+107p | |
| F000:4FD2 ; int_88_diag_video+14Dp | |
| F000:4FD2 ; int_88_diag_video+185p | |
| F000:4FD2 ; int_88_diag_video+1FBp | |
| F000:4FD2 mov ax, 1001h | |
| F000:4FD5 int 10h ; - VIDEO - SET BORDER COLOR REGISTER (Jr, PS, TANDY 1000, EGA, VGA) | |
| F000:4FD5 ; BH = color value to store | |
| F000:4FD7 retn | |
| F000:4FD7 diag_set_border_color_lgray endp | |
| F000:4FD8 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:4FD8 ; al = video mode | |
| F000:4FD8 diag_set_video_mode proc near ; CODE XREF: int_88_diag_video+63p | |
| F000:4FD8 ; int_88_diag_video+ABp | |
| F000:4FD8 ; int_88_diag_video+FAp | |
| F000:4FD8 ; int_88_diag_video+11Fp | |
| F000:4FD8 ; int_88_diag_video+14Ap | |
| F000:4FD8 ; int_88_diag_video+180p ... | |
| F000:4FD8 push cx | |
| F000:4FD9 mov ah, 0 | |
| F000:4FDB int 10h ; - VIDEO - SET VIDEO MODE | |
| F000:4FDB ; AL = mode | |
| F000:4FDD mov ah, 1 | |
| F000:4FDF mov ch, 20h ; ' ' | |
| F000:4FE1 int 10h ; - VIDEO - SET CURSOR CHARACTERISTICS | |
| F000:4FE1 ; CH bits 0-4 = start line for cursor in character cell | |
| F000:4FE1 ; bits 5-6 = blink attribute | |
| F000:4FE1 ; CL bits 0-4 = end line for cursor in character cell | |
| F000:4FE3 pop cx | |
| F000:4FE4 retn | |
| F000:4FE4 diag_set_video_mode endp | |
| F000:4FE5 unk_F4FE5 db 2Ch ; , ; DATA XREF: int_88_diag_video+3Do | |
| F000:4FE5 ; int_88_diag_video+C2o | |
| F000:4FE6 db 0Ah | |
| F000:4FE7 db 20h | |
| F000:4FE8 db 5Ch ; \ | |
| F000:4FE9 db 20h | |
| F000:4FEA db 20h | |
| F000:4FEB db 2Fh ; / | |
| F000:4FEC db 0Bh | |
| F000:4FED db 0FBh ; û | |
| F000:4FEE db 20h | |
| F000:4FEF db 20h | |
| F000:4FF0 db 5Ch ; \ | |
| F000:4FF1 db 2Fh ; / | |
| F000:4FF2 db 20h | |
| F000:4FF3 db 0Bh | |
| F000:4FF4 db 0FBh ; û | |
| F000:4FF5 db 0C9h ; É | |
| F000:4FF6 db 0CDh ; Í | |
| F000:4FF7 db 0CDh ; Í | |
| F000:4FF8 db 0CDh ; Í | |
| F000:4FF9 db 0BBh ; » | |
| F000:4FFA db 0Bh | |
| F000:4FFB db 0FBh ; û | |
| F000:4FFC db 0BAh ; º | |
| F000:4FFD db 0DBh ; Û | |
| F000:4FFE db 0DBh ; Û | |
| F000:4FFF db 0DBh ; Û | |
| F000:5000 db 0C7h ; Ç | |
| F000:5001 db 0Bh | |
| F000:5002 db 0FBh ; û | |
| F000:5003 db 0BAh ; º | |
| F000:5004 db 0DBh ; Û | |
| F000:5005 db 0DBh ; Û | |
| F000:5006 db 0DBh ; Û | |
| F000:5007 db 0C7h ; Ç | |
| F000:5008 db 0Bh | |
| F000:5009 db 0FBh ; û | |
| F000:500A db 0C8h ; È | |
| F000:500B db 0CDh ; Í | |
| F000:500C db 0CDh ; Í | |
| F000:500D db 0CDh ; Í | |
| F000:500E db 0BCh ; ¼ | |
| F000:500F db 0Ah | |
| F000:5010 db 0Ch | |
| F000:5011 db 0FFh | |
| F000:5012 db 0Bh | |
| F000:5013 db 87h ; | |
| F000:5014 db 34h ; 4 | |
| F000:5015 db 7 | |
| F000:5016 db 2Ch ; , | |
| F000:5017 db 87h ; | |
| F000:5018 db 38h ; 8 | |
| F000:5019 db 7 | |
| F000:501A db 2Ch ; , | |
| F000:501B db 87h ; | |
| F000:501C db 35h ; 5 | |
| F000:501D db 74h ; t | |
| F000:501E db 0A2h ; ¢ | |
| F000:501F db 0A2h ; ¢ | |
| F000:5020 db 0A2h ; ¢ | |
| F000:5021 db 0A2h ; ¢ | |
| F000:5022 db 0A2h ; ¢ | |
| F000:5023 db 0FDh ; ý | |
| F000:5024 db 1Fh | |
| F000:5025 db 7Dh ; } | |
| F000:5026 db 0FCh ; ü | |
| F000:5027 unk_F5027 db 2 ; DATA XREF: int_88_diag_video+4Ao | |
| F000:5028 db 38h ; 8 | |
| F000:5029 db 72h ; r | |
| F000:502A db 0FDh ; ý | |
| F000:502B db 2Fh ; / | |
| F000:502C db 1 | |
| F000:502D db 0FDh ; ý | |
| F000:502E db 1Fh | |
| F000:502F db 7Fh ; | |
| F000:5030 db 0FCh ; ü | |
| F000:5031 db 0Fh | |
| F000:5032 db 87h ; | |
| F000:5033 db 0 | |
| F000:5034 db 70h ; p | |
| F000:5035 s_12345 db 12 ; DATA XREF: int_88_diag_video+D2o | |
| F000:5036 db ' 1 2 3 4 5 ' | |
| F000:5041 db 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 5, 0FDh, 2Fh, 55h, 0FCh | |
| F000:5050 unk_F5050 db 2 ; DATA XREF: int_88_diag_video+DCo | |
| F000:5051 db 0DBh ; Û | |
| F000:5052 db 79h, 2, 77h, 2, 0FDh, 23h, 77h, 2, 77h, 2, 78h, 1, 0FCh | |
| F000:505F s_ascii db 0Ah ; DATA XREF: diag_print_ascii_table+Bo | |
| F000:5060 db 'ASCII ',0Bh,0Ah,0Ah | |
| F000:5069 db 0FFh | |
| F000:506A s_wait_key db 1 ; DATA XREF: diag_wait_key+7o | |
| F000:506B db 0FCh ; ü | |
| F000:506C db 0Ah | |
| F000:506D db 20h | |
| F000:506E db 38h ; 8 | |
| F000:506F db 30h ; 0 | |
| F000:5070 db 20h | |
| F000:5071 db 58h ; X | |
| F000:5072 db 20h | |
| F000:5073 db 32h ; 2 | |
| F000:5074 db 35h ; 5 | |
| F000:5075 db 20h | |
| F000:5076 db 0FFh | |
| F000:5077 s_40x25 db 0Ah ; DATA XREF: int_88_diag_video+10Co | |
| F000:5078 db ' 40 X 25 ' | |
| F000:5081 db 0FFh | |
| F000:5082 unk_F5082 db 2 ; DATA XREF: int_88_diag_video+150o | |
| F000:5083 db 0DBh ; Û | |
| F000:5084 db 0Bh | |
| F000:5085 db 6Eh ; n | |
| F000:5086 db 0FCh ; ü | |
| F000:5087 db 15h | |
| F000:5088 db 33h ; 3 | |
| F000:5089 db 32h ; 2 | |
| F000:508A db 30h ; 0 | |
| F000:508B db 20h | |
| F000:508C db 58h ; X | |
| F000:508D db 20h | |
| F000:508E db 32h ; 2 | |
| F000:508F db 30h ; 0 | |
| F000:5090 db 30h ; 0 | |
| F000:5091 db 20h | |
| F000:5092 db 58h ; X | |
| F000:5093 db 20h | |
| F000:5094 db 34h ; 4 | |
| F000:5095 db 20h | |
| F000:5096 db 43h ; C | |
| F000:5097 db 0Bh | |
| F000:5098 db 0EEh ; î | |
| F000:5099 db 0Ah | |
| F000:509A db 0Ah | |
| F000:509B db 0Ah | |
| F000:509C db 0FFh | |
| F000:509D s_320x200x4 db 15h ; DATA XREF: int_88_diag_video+143o | |
| F000:509E db '320 X 200 X 4 B',0Bh,'î',0Ah | |
| F000:509E db 0Ah,0Ah | |
| F000:50B2 db 0FFh | |
| F000:50B3 unk_F50B3 db 2 ; DATA XREF: int_88_diag_video+188o | |
| F000:50B4 db 0DBh ; Û ; full block | |
| F000:50B5 db 5, 74h, 0FCh | |
| F000:50B8 s_320x200x16 db 16h ; DATA XREF: int_88_diag_video+19Ao | |
| F000:50B9 db '320 X 200 X 16',0Bh,'ï',0Ah | |
| F000:50B9 db 0Ah | |
| F000:50B9 db 0Ah | |
| F000:50B9 db 0Ah,0Ah | |
| F000:50CE db 0FFh | |
| F000:50CF s_640x200x2 db 10h ; DATA XREF: int_88_diag_video+1D1o | |
| F000:50D0 db ' 640 X 200 X 2 ' | |
| F000:50DF db 0FFh | |
| F000:50E0 unk_F50E0 db 2 ; DATA XREF: int_88_diag_video+1DCo | |
| F000:50E1 db 0B0h ; ° | |
| F000:50E2 db 24h, 55h, 0FCh | |
| F000:50E5 unk_F50E5 db 2 ; DATA XREF: int_88_diag_video+1E6o | |
| F000:50E6 db 0DBh ; Û | |
| F000:50E7 db 24h, 55h, 0FCh | |
| F000:50EA unk_F50EA db 2 ; DATA XREF: int_88_diag_video+201o | |
| F000:50EB db 0DBh ; Û | |
| F000:50EC db 14h, 65h, 0FCh | |
| F000:50EF s_640x200x4 db 13h ; DATA XREF: int_88_diag_video+1FEo | |
| F000:50F0 db '640 X 200 X 4',0Bh | |
| F000:50FE db 0F0h ; ð | |
| F000:50FF db 0Ah | |
| F000:5100 db 0Ah | |
| F000:5101 db 0Ah | |
| F000:5102 db 0FFh | |
| F000:5103 unk_F5103 db 2 ; DATA XREF: int_88_diag_video+122o | |
| F000:5104 db 0DBh ; Û | |
| F000:5105 db 3, 76h, 0FCh | |
| F000:5108 s_160x200x16 db 18h ; DATA XREF: int_88_diag_video+134o | |
| F000:5109 db '160 X 200 X 16',0Bh | |
| F000:5118 db 0F2h ; ò | |
| F000:5119 db 0Ah | |
| F000:511A db 0Ah | |
| F000:511B db 0Ah | |
| F000:511C db 0Ah | |
| F000:511D db 0Ah | |
| F000:511E db 0Ah | |
| F000:511F db 0Ah | |
| F000:5120 db 0FFh | |
| F000:5121 unk_F5121 db 2 ; DATA XREF: int_88_diag_video+66o | |
| F000:5122 db 0DBh ; Û | |
| F000:5123 db 28h, 51h, 0FCh | |
| F000:5126 unk_F5126 db 3 ; DATA XREF: int_88_diag_video+6Co | |
| F000:5127 db 0Eh | |
| F000:5128 db 0DBh ; Û | |
| F000:5129 db 0A4h, 76h, 0FCh | |
| F000:512C unk_F512C db 2 ; DATA XREF: int_88_diag_video+B1o | |
| F000:512D db 0C4h ; Ä | |
| F000:512E db 28h, 51h, 0FCh | |
| F000:5131 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5131 ; int 0x8a | |
| F000:5131 ; sound/music test | |
| F000:5131 ; intput: | |
| F000:5131 ; ah = '9' activate test | |
| F000:5131 ; 0,1: show error message? | |
| F000:5131 ; output: | |
| F000:5131 ; dh/dl = error message? | |
| F000:5131 int_8a_diag_sound proc far ; DATA XREF: F000:4014o | |
| F000:5131 cmp ah, 0 ; 0 ? | |
| F000:5134 jz short error_and_exit ; yes, jump | |
| F000:5136 cmp ah, 1 ; 1 ? | |
| F000:5139 jz short error_and_exit ; yes, jump | |
| F000:513B cmp ah, 39h ; '9' ; option '9' ? | |
| F000:513E jz short run_test ; yes, do the test | |
| F000:5140 jmp lret5 | |
| F000:5143 error_and_exit: ; CODE XREF: int_8a_diag_sound+3j | |
| F000:5143 ; int_8a_diag_sound+8j | |
| F000:5143 mov al, 0Ah ; print error and exit | |
| F000:5145 mov bp, offset unk_F525E | |
| F000:5148 int 81h ; reserved for BASIC | |
| F000:514A int 82h ; reserved for BASIC | |
| F000:514C clc | |
| F000:514D jmp lret5 | |
| F000:5150 run_test: ; CODE XREF: int_8a_diag_sound+Dj | |
| F000:5150 mov ah, 1 ; long beep | |
| F000:5152 call diag_beeper_test | |
| F000:5155 mov cx, 0Fh | |
| F000:5158 call diag_delay | |
| F000:515B in al, 61h | |
| F000:515D push ax | |
| F000:515E or al, 1110000b | |
| F000:5160 out 61h, al | |
| F000:5162 mov al, 9Fh ; '' | |
| F000:5164 l2: ; CODE XREF: int_8a_diag_sound+37j | |
| F000:5164 out 0C0h, al ; DMA controller, 8237A-5. | |
| F000:5164 ; channel 0 base address | |
| F000:5164 ; (also sets current address) | |
| F000:5166 add al, 20h ; ' ' | |
| F000:5168 jnb short l2 | |
| F000:516A mov bx, 84E0h | |
| F000:516D mov dx, 308h | |
| F000:5170 mov bp, offset unk_F525E | |
| F000:5173 l3: ; CODE XREF: int_8a_diag_sound+6Cj | |
| F000:5173 or dl, 80h | |
| F000:5176 int 82h ; reserved for BASIC | |
| F000:5178 call diag_check_kbd_break | |
| F000:517B jb short l4 | |
| F000:517D mov cx, 1FFh | |
| F000:5180 call sub_F51F2 | |
| F000:5183 mov cx, 4 | |
| F000:5186 call diag_delay | |
| F000:5189 mov cx, 0CFFFh | |
| F000:518C xor bx, 94EFh | |
| F000:5190 call sub_F51F2 | |
| F000:5193 xor bx, 94EFh | |
| F000:5197 add bh, 20h ; ' ' | |
| F000:519A cmp bh, 0E4h ; 'ä' | |
| F000:519D jnz short l3 | |
| F000:519F mov dx, 0C8Ch | |
| F000:51A2 int 82h ; reserved for BASIC | |
| F000:51A4 call diag_check_kbd_break | |
| F000:51A7 jb short l4 | |
| F000:51A9 mov cx, 1FFh | |
| F000:51AC mov bx, 0C0E0h | |
| F000:51AF mov al, 0E3h ; 'ã' | |
| F000:51B1 out 0C0h, al | |
| F000:51B3 mov al, 0F0h ; 'ð' | |
| F000:51B5 out 0C0h, al | |
| F000:51B7 call sub_F51F2 | |
| F000:51BA mov cx, 4 | |
| F000:51BD call diag_delay | |
| F000:51C0 mov bx, 700Fh | |
| F000:51C3 call sub_F51F2 | |
| F000:51C6 or dl, 80h | |
| F000:51C9 int 82h ; reserved for BASIC | |
| F000:51CB call diag_check_kbd_break | |
| F000:51CE jb short l4 | |
| F000:51D0 mov al, 0E5h ; 'å' | |
| F000:51D2 out 0C0h, al | |
| F000:51D4 mov al, 0F0h ; 'ð' | |
| F000:51D6 out 0C0h, al | |
| F000:51D8 mov cx, 14h | |
| F000:51DB call diag_delay | |
| F000:51DE mov al, 0FFh | |
| F000:51E0 out 0C0h, al | |
| F000:51E2 mov cx, 6 | |
| F000:51E5 call diag_delay | |
| F000:51E8 mov dh, 0 | |
| F000:51EA l4: ; CODE XREF: int_8a_diag_sound+4Aj | |
| F000:51EA ; int_8a_diag_sound+76j | |
| F000:51EA ; int_8a_diag_sound+9Dj | |
| F000:51EA pop ax | |
| F000:51EB out 61h, al | |
| F000:51ED stc | |
| F000:51EE retf 2 | |
| F000:51F1 lret5: ; CODE XREF: int_8a_diag_sound+Fj | |
| F000:51F1 ; int_8a_diag_sound+1Cj | |
| F000:51F1 iret | |
| F000:51F1 int_8a_diag_sound endp | |
| F000:51F2 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:51F2 sub_F51F2 proc near ; CODE XREF: int_8a_diag_sound+4Fp | |
| F000:51F2 ; int_8a_diag_sound+5Fp | |
| F000:51F2 ; int_8a_diag_sound+86p | |
| F000:51F2 ; int_8a_diag_sound+92p | |
| F000:51F2 push dx | |
| F000:51F3 push bx | |
| F000:51F4 push cx | |
| F000:51F5 mov cl, 4 | |
| F000:51F7 ror bx, cl | |
| F000:51F9 ror bh, cl | |
| F000:51FB mov al, bh | |
| F000:51FD jb short loc_F520A | |
| F000:51FF and al, 0F0h | |
| F000:5201 mov dl, 1 | |
| F000:5203 or al, 80h | |
| F000:5205 mov ah, 0 | |
| F000:5207 jmp short loc_F5210 | |
| F000:5209 db 90h ; | |
| F000:520A loc_F520A: ; CODE XREF: sub_F51F2+Bj | |
| F000:520A or al, 0Fh | |
| F000:520C mov dl, 0FFh | |
| F000:520E mov ah, 3Fh ; '?' | |
| F000:5210 loc_F5210: ; CODE XREF: sub_F51F2+15j | |
| F000:5210 out 0C0h, al ; DMA controller, 8237A-5. | |
| F000:5210 ; channel 0 base address | |
| F000:5210 ; (also sets current address) | |
| F000:5212 mov dh, al | |
| F000:5214 or bh, 80h | |
| F000:5217 test al, 10h | |
| F000:5219 jnz short loc_F522C | |
| F000:521B mov al, ah | |
| F000:521D out 0C0h, al ; DMA controller, 8237A-5. | |
| F000:521D ; channel 0 base address | |
| F000:521D ; (also sets current address) | |
| F000:521F test bl, 40h | |
| F000:5222 jz short loc_F522F | |
| F000:5224 mov al, bh | |
| F000:5226 and al, 0F0h | |
| F000:5228 add al, 10h | |
| F000:522A out 0C0h, al ; DMA controller, 8237A-5. | |
| F000:522A ; channel 0 base address | |
| F000:522A ; (also sets current address) | |
| F000:522C loc_F522C: ; CODE XREF: sub_F51F2+27j | |
| F000:522C and bl, 0BFh | |
| F000:522F loc_F522F: ; CODE XREF: sub_F51F2+30j | |
| F000:522F ; sub_F51F2+66j | |
| F000:522F mov al, dh | |
| F000:5231 loc_F5231: ; CODE XREF: sub_F51F2+59j | |
| F000:5231 out 0C0h, al ; DMA controller, 8237A-5. | |
| F000:5231 ; channel 0 base address | |
| F000:5231 ; (also sets current address) | |
| F000:5233 cmp al, bh | |
| F000:5235 jnz short loc_F523B | |
| F000:5237 cmp ah, bl | |
| F000:5239 jz short loc_F525A | |
| F000:523B loc_F523B: ; CODE XREF: sub_F51F2+43j | |
| F000:523B pop cx | |
| F000:523C push cx | |
| F000:523D loc_F523D: ; CODE XREF: sub_F51F2:loc_F523Dj | |
| F000:523D loop loc_F523D | |
| F000:523F add al, dl | |
| F000:5241 mov cl, al | |
| F000:5243 mov ch, dh | |
| F000:5245 and cx, 0F0F0h | |
| F000:5249 cmp ch, cl | |
| F000:524B jz short loc_F5231 | |
| F000:524D test bh, 10h | |
| F000:5250 jnz short loc_F525A | |
| F000:5252 add ah, dl | |
| F000:5254 mov al, ah | |
| F000:5256 out 0C0h, al ; DMA controller, 8237A-5. | |
| F000:5256 ; channel 0 base address | |
| F000:5256 ; (also sets current address) | |
| F000:5258 jmp short loc_F522F | |
| F000:525A loc_F525A: ; CODE XREF: sub_F51F2+47j | |
| F000:525A ; sub_F51F2+5Ej | |
| F000:525A pop cx | |
| F000:525B pop bx | |
| F000:525C pop dx | |
| F000:525D retn | |
| F000:525D sub_F51F2 endp | |
| F000:525E unk_F525E db 1Eh ; DATA XREF: int_8a_diag_sound+14o | |
| F000:525E ; int_8a_diag_sound+3Fo | |
| F000:525F db 0Ah | |
| F000:5260 db 0Ah | |
| F000:5261 db 0Bh | |
| F000:5262 db 3 | |
| F000:5263 db 2Fh ; / | |
| F000:5264 db 0B3h ; ³ | |
| F000:5265 db 20h | |
| F000:5266 db 0Eh | |
| F000:5267 db 0Bh | |
| F000:5268 db 0FAh ; ú | |
| F000:5269 db 0C9h ; É | |
| F000:526A db 0CDh ; Í | |
| F000:526B db 20h | |
| F000:526C db 0B3h ; ³ | |
| F000:526D db 0Bh | |
| F000:526E db 0FCh ; ü | |
| F000:526F db 0C8h ; È | |
| F000:5270 db 0CDh ; Í | |
| F000:5271 db 20h | |
| F000:5272 db 0B3h ; ³ | |
| F000:5273 db 0Eh | |
| F000:5274 db 0Bh | |
| F000:5275 db 0FDh ; ý | |
| F000:5276 db 5Ch ; \ | |
| F000:5277 db 0B3h ; ³ | |
| F000:5278 db 0Ah | |
| F000:5279 db 0Bh | |
| F000:527A db 0FEh ; þ | |
| F000:527B db 0Ch | |
| F000:527C db 0FFh | |
| F000:527D db 3 | |
| F000:527E db 87h ; | |
| F000:527F db 39h ; 9 | |
| F000:5280 db 0A2h ; ¢ | |
| F000:5281 db 0FDh ; ý | |
| F000:5282 db 1Fh | |
| F000:5283 db 7Eh ; ~ | |
| F000:5284 db 0FCh ; ü | |
| F000:5285 s_testingModem db 0Eh ; DATA XREF: int_8c_diag_modem:l4o | |
| F000:5286 db 'TESTING MODEM' | |
| F000:5293 db 0FFh | |
| F000:5294 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5294 ; int 0x8c | |
| F000:5294 ; internal modem test | |
| F000:5294 ; input: | |
| F000:5294 ; ah = 'G', 0xff: activates test | |
| F000:5294 ; 0,1: error msg | |
| F000:5294 ; output: | |
| F000:5294 ; dh/dl = error codes | |
| F000:5294 int_8c_diag_modem proc far ; DATA XREF: F000:4018o | |
| F000:5294 call ds_50 ; ds = 0x50 | |
| F000:5297 or ah, ah | |
| F000:5299 jz short error_and_exit | |
| F000:529B cmp ah, 1 | |
| F000:529E jz short error_and_exit | |
| F000:52A0 cmp ah, 47h ; 'G' | |
| F000:52A3 jz short run_test | |
| F000:52A5 cmp ah, 0FFh | |
| F000:52A8 jz short run_test | |
| F000:52AA jmp short l2 | |
| F000:52AC err_msg1?: ; DATA XREF: int_8c_diag_modem+46o | |
| F000:52AC db 22h, 0Ah, 0DAh, 0C4h, 0BFh, 0Bh, 0FDh, 0B3h, 0DAh, 0D9h | |
| F000:52AC db 2Dh, 2Dh, 3Eh, 0Bh, 0FAh, 0B3h, 0B3h, 0Bh, 0FEh, 0B3h | |
| F000:52AC db 0C0h, 0BFh, 0Bh, 0FDh, 0C0h, 0C4h, 0D9h, 3Ch, 2Dh, 2Dh | |
| F000:52AC db 0Ah, 0Ah, 0Bh, 0FDh, 0FFh | |
| F000:52CF err_msg2?: ; DATA XREF: int_8c_diag_modem:l1o | |
| F000:52CF db 2, 47h, 1, 7Dh, 0FDh, 1Fh, 0FCh | |
| F000:52D6 error_and_exit: ; CODE XREF: int_8c_diag_modem+5j | |
| F000:52D6 ; int_8c_diag_modem+Aj | |
| F000:52D6 mov al, 6 | |
| F000:52D8 int 81h | |
| F000:52DA mov bp, offset err_msg1? | |
| F000:52DD int 82h | |
| F000:52DF in al, 62h ; get config byte | |
| F000:52E1 and al, 10b ; internal modem card installed? | |
| F000:52E3 jnz short l1 ; no, jump | |
| F000:52E5 or dh, 80h | |
| F000:52E8 mov bl, 87h ; '' | |
| F000:52EA l1: ; CODE XREF: int_8c_diag_modem+4Fj | |
| F000:52EA mov bp, offset err_msg2? | |
| F000:52ED int 82h ; reserved for BASIC | |
| F000:52EF l2: ; CODE XREF: int_8c_diag_modem+16j | |
| F000:52EF clc | |
| F000:52F0 retf 2 | |
| F000:52F3 db 0Eh | |
| F000:52F4 db 49h ; I | |
| F000:52F5 db 0Dh | |
| F000:52F6 db 0Eh | |
| F000:52F7 db 4Ch ; L | |
| F000:52F8 db 20h | |
| F000:52F9 db 31h ; 1 | |
| F000:52FA db 0Dh | |
| F000:52FB db 0Eh | |
| F000:52FC db 51h ; Q | |
| F000:52FD db 0Dh | |
| F000:52FE db 0Eh | |
| F000:52FF db 54h ; T | |
| F000:5300 db 20h | |
| F000:5301 db 30h ; 0 | |
| F000:5302 db 0Dh | |
| F000:5303 db 0Eh | |
| F000:5304 db 5Ah ; Z | |
| F000:5305 db 20h | |
| F000:5306 db 31h ; 1 | |
| F000:5307 db 0Dh | |
| F000:5308 db 0Eh | |
| F000:5309 db 44h ; D | |
| F000:530A db 20h | |
| F000:530B db 35h ; 5 | |
| F000:530C db 35h ; 5 | |
| F000:530D db 35h ; 5 | |
| F000:530E db 0Dh | |
| F000:530F some_array: ; DATA XREF: int_8c_diag_modem+139o | |
| F000:530F db 0Dh, 48h, 30h, 53h, 30h, 20h, 54h, 30h, 34h | |
| F000:5318 run_test: ; CODE XREF: int_8c_diag_modem+Fj | |
| F000:5318 ; int_8c_diag_modem+14j | |
| F000:5318 in al, 62h ; get config byte | |
| F000:531A and al, 10b ; modem card installed? | |
| F000:531C jz short l4 ; yes, jump | |
| F000:531E mov bx, 110h ; error code? | |
| F000:5321 jmp l43 ; exit | |
| F000:5324 l4: ; CODE XREF: int_8c_diag_modem+88j | |
| F000:5324 mov bp, offset s_testingModem | |
| F000:5327 mov bl, 87h ; '' | |
| F000:5329 mov dx, 8A0Dh | |
| F000:532C int 82h | |
| F000:532E mov dx, 3F9h | |
| F000:5331 call diag_out_something | |
| F000:5334 add dx, 3 | |
| F000:5337 call sub_F5923 | |
| F000:533A jnb short l5 | |
| F000:533C mov bx, 415h | |
| F000:533F jmp l43 | |
| F000:5342 l5: ; CODE XREF: int_8c_diag_modem+A6j | |
| F000:5342 mov cx, 175h | |
| F000:5345 call diag_send_serial_cmds | |
| F000:5348 mov al, 1Ah | |
| F000:534A out dx, al | |
| F000:534B jmp short $+2 | |
| F000:534D inc dx | |
| F000:534E mov al, 1 | |
| F000:5350 out dx, al | |
| F000:5351 jmp short $+2 | |
| F000:5353 inc dx | |
| F000:5354 mov al, 20h ; ' ' | |
| F000:5356 out dx, al | |
| F000:5357 jmp short $+2 | |
| F000:5359 sub dx, 3 | |
| F000:535C in al, dx | |
| F000:535D jmp short $+2 | |
| F000:535F call sub_F59B3 | |
| F000:5362 dec dx | |
| F000:5363 dec dx | |
| F000:5364 cmp al, 1 | |
| F000:5366 jz short l6 | |
| F000:5368 add dx, 5 | |
| F000:536B call diag_out_something2 | |
| F000:536E l6: ; CODE XREF: int_8c_diag_modem+D2j | |
| F000:536E call diag_check_kbd_break | |
| F000:5371 jb short l16 | |
| F000:5373 mov si, 52F3h | |
| F000:5376 call sub_F5552 | |
| F000:5379 jnb short l7 | |
| F000:537B add bl, 20h ; ' ' | |
| F000:537E jmp l42 | |
| F000:5381 l7: ; CODE XREF: int_8c_diag_modem+E5j | |
| F000:5381 call sub_F5605 | |
| F000:5384 call diag_check_kbd_break | |
| F000:5387 jb short l16 | |
| F000:5389 call sub_F5552 | |
| F000:538C jnb short l8 | |
| F000:538E add bl, 30h ; '0' | |
| F000:5391 jmp l42 | |
| F000:5394 l8: ; CODE XREF: int_8c_diag_modem+F8j | |
| F000:5394 mov cx, 1 | |
| F000:5397 call sub_F5592 | |
| F000:539A jnb short l9 | |
| F000:539C add bl, 38h ; '8' | |
| F000:539F jmp l42 | |
| F000:53A2 l9: ; CODE XREF: int_8c_diag_modem+106j | |
| F000:53A2 cmp byte ptr [di], 34h ; '4' | |
| F000:53A5 jz short l10 | |
| F000:53A7 mov bl, 3Fh ; '?' | |
| F000:53A9 jmp l42 | |
| F000:53AC l10: ; CODE XREF: int_8c_diag_modem+111j | |
| F000:53AC call diag_check_kbd_break | |
| F000:53AF jb short l16 | |
| F000:53B1 call sub_F5552 | |
| F000:53B4 jnb short l11 | |
| F000:53B6 add bl, 40h ; '@' | |
| F000:53B9 jmp l42 | |
| F000:53BC l11: ; CODE XREF: int_8c_diag_modem+120j | |
| F000:53BC mov cx, 9 | |
| F000:53BF call sub_F5592 | |
| F000:53C2 jnb short l12 | |
| F000:53C4 add bl, 48h ; 'H' | |
| F000:53C7 jmp l42 | |
| F000:53CA l12: ; CODE XREF: int_8c_diag_modem+12Ej | |
| F000:53CA mov cx, 9 | |
| F000:53CD mov bp, offset some_array | |
| F000:53D0 l13: ; CODE XREF: int_8c_diag_modem+146j | |
| F000:53D0 mov al, cs:[bp+0] | |
| F000:53D4 cmp [di], al | |
| F000:53D6 jnz short l14 | |
| F000:53D8 inc di | |
| F000:53D9 inc bp | |
| F000:53DA loop l13 | |
| F000:53DC jmp short l15 | |
| F000:53DE l14: ; CODE XREF: int_8c_diag_modem+142j | |
| F000:53DE mov bl, 4Fh ; 'O' | |
| F000:53E0 jmp l42 | |
| F000:53E3 l15: ; CODE XREF: int_8c_diag_modem+148j | |
| F000:53E3 call diag_check_kbd_break | |
| F000:53E6 jnb short l17 | |
| F000:53E8 l16: ; CODE XREF: int_8c_diag_modem+DDj | |
| F000:53E8 ; int_8c_diag_modem+F3j | |
| F000:53E8 ; int_8c_diag_modem+11Bj | |
| F000:53E8 ; int_8c_diag_modem+192j | |
| F000:53E8 jmp l44 | |
| F000:53EB l17: ; CODE XREF: int_8c_diag_modem+152j | |
| F000:53EB add dx, 4 | |
| F000:53EE xor al, al | |
| F000:53F0 out dx, al | |
| F000:53F1 sub dx, 4 | |
| F000:53F4 sub si, 3 | |
| F000:53F7 call sub_F5552 | |
| F000:53FA jnb short l18 | |
| F000:53FC add bl, 50h ; 'P' | |
| F000:53FF jmp l42 | |
| F000:5402 l18: ; CODE XREF: int_8c_diag_modem+166j | |
| F000:5402 mov cx, 1 | |
| F000:5405 call sub_F5592 | |
| F000:5408 jb short l19 | |
| F000:540A mov bl, 5Fh ; '_' | |
| F000:540C jmp l42 | |
| F000:540F l19: ; CODE XREF: int_8c_diag_modem+174j | |
| F000:540F cmp bl, 1 | |
| F000:5412 jz short l20 | |
| F000:5414 add bl, 58h ; 'X' | |
| F000:5417 jmp l42 | |
| F000:541A l20: ; CODE XREF: int_8c_diag_modem+17Ej | |
| F000:541A add dx, 4 | |
| F000:541D mov al, 1 | |
| F000:541F out dx, al | |
| F000:5420 sub dx, 4 | |
| F000:5423 call diag_check_kbd_break | |
| F000:5426 jb short l16 | |
| F000:5428 call sub_F5552 | |
| F000:542B jnb short l21 | |
| F000:542D add bl, 60h ; '`' | |
| F000:5430 jmp l42 | |
| F000:5433 l21: ; CODE XREF: int_8c_diag_modem+197j | |
| F000:5433 mov cx, 1 | |
| F000:5436 call sub_F5592 | |
| F000:5439 jnb short l22 | |
| F000:543B add bl, 68h ; 'h' | |
| F000:543E jmp l42 | |
| F000:5441 l22: ; CODE XREF: int_8c_diag_modem+1A5j | |
| F000:5441 cmp byte ptr [di], 34h ; '4' | |
| F000:5444 jz short l23 | |
| F000:5446 mov bl, 6Fh ; 'o' | |
| F000:5448 jmp l42 | |
| F000:544B l23: ; CODE XREF: int_8c_diag_modem+1B0j | |
| F000:544B sub si, 8 | |
| F000:544E call sub_F5552 | |
| F000:5451 jnb short l24 | |
| F000:5453 add bl, 70h ; 'p' | |
| F000:5456 jmp l42 | |
| F000:5459 l24: ; CODE XREF: int_8c_diag_modem+1BDj | |
| F000:5459 mov cx, 1 | |
| F000:545C call sub_F5592 | |
| F000:545F jb short l25 | |
| F000:5461 mov bl, 7Fh ; '' | |
| F000:5463 jmp l42 | |
| F000:5466 l25: ; CODE XREF: int_8c_diag_modem+1CBj | |
| F000:5466 cmp bl, 1 | |
| F000:5469 jz short l26 | |
| F000:546B add bl, 78h ; 'x' | |
| F000:546E jmp l42 | |
| F000:5471 l26: ; CODE XREF: int_8c_diag_modem+1D5j | |
| F000:5471 add dx, 4 | |
| F000:5474 mov al, 5 | |
| F000:5476 out dx, al | |
| F000:5477 sub dx, 4 | |
| F000:547A mov cx, 0Ch | |
| F000:547D delay0: ; CODE XREF: int_8c_diag_modem+1EFj | |
| F000:547D push cx | |
| F000:547E xor cx, cx | |
| F000:5480 delay1: ; CODE XREF: int_8c_diag_modem:delay1j | |
| F000:5480 loop delay1 | |
| F000:5482 pop cx | |
| F000:5483 loop delay0 | |
| F000:5485 sub si, 3 | |
| F000:5488 call sub_F5552 | |
| F000:548B jnb short l27 | |
| F000:548D add bl, 80h ; '' | |
| F000:5490 jmp l42 | |
| F000:5493 l27: ; CODE XREF: int_8c_diag_modem+1F7j | |
| F000:5493 mov cx, 9 | |
| F000:5496 call sub_F5592 | |
| F000:5499 jnb short l28 | |
| F000:549B add bl, 88h ; '' | |
| F000:549E jmp l42 | |
| F000:54A1 l28: ; CODE XREF: int_8c_diag_modem+205j | |
| F000:54A1 add dx, 4 | |
| F000:54A4 mov al, 1 | |
| F000:54A6 out dx, al | |
| F000:54A7 sub dx, 4 | |
| F000:54AA call diag_check_kbd_break | |
| F000:54AD jb short l36 | |
| F000:54AF add si, 5 | |
| F000:54B2 call sub_F5552 | |
| F000:54B5 jb short l32 | |
| F000:54B7 mov cx, 1 | |
| F000:54BA call sub_F5592 | |
| F000:54BD jb short l33 | |
| F000:54BF cmp byte ptr [di], 34h ; '4' | |
| F000:54C2 jnz short l34 | |
| F000:54C4 sub cx, cx | |
| F000:54C6 l29: ; CODE XREF: int_8c_diag_modem:l29j | |
| F000:54C6 loop l29 | |
| F000:54C8 mov ah, 0 | |
| F000:54CA l30: ; CODE XREF: int_8c_diag_modem+25Dj | |
| F000:54CA call diag_check_kbd_break | |
| F000:54CD jb short l36 | |
| F000:54CF call sub_F5567 | |
| F000:54D2 jb short l32 | |
| F000:54D4 mov cx, 1 | |
| F000:54D7 call sub_F5592 | |
| F000:54DA jb short l33 | |
| F000:54DC cmp [di], ah | |
| F000:54DE jnz short l34 | |
| F000:54E0 l31: ; CODE XREF: int_8c_diag_modem+256j | |
| F000:54E0 ; int_8c_diag_modem+25Bj | |
| F000:54E0 inc ah | |
| F000:54E2 cmp ah, 80h ; '' | |
| F000:54E5 jz short l35 | |
| F000:54E7 cmp ah, 0Eh | |
| F000:54EA jz short l31 | |
| F000:54EC cmp ah, 0Dh | |
| F000:54EF jz short l31 | |
| F000:54F1 jmp short l30 | |
| F000:54F3 l32: ; CODE XREF: int_8c_diag_modem+221j | |
| F000:54F3 ; int_8c_diag_modem+23Ej | |
| F000:54F3 add bl, 90h ; '' | |
| F000:54F6 jmp short l42 | |
| F000:54F8 l33: ; CODE XREF: int_8c_diag_modem+229j | |
| F000:54F8 ; int_8c_diag_modem+246j | |
| F000:54F8 add bl, 98h ; '' | |
| F000:54FB jmp short l42 | |
| F000:54FD l34: ; CODE XREF: int_8c_diag_modem+22Ej | |
| F000:54FD ; int_8c_diag_modem+24Aj | |
| F000:54FD mov bl, 9Fh ; '' | |
| F000:54FF jmp short l42 | |
| F000:5501 l35: ; CODE XREF: int_8c_diag_modem+251j | |
| F000:5501 call diag_check_kbd_break | |
| F000:5504 l36: ; CODE XREF: int_8c_diag_modem+219j | |
| F000:5504 ; int_8c_diag_modem+239j | |
| F000:5504 jb short l44 | |
| F000:5506 call sub_F5552 | |
| F000:5509 jnb short l37 | |
| F000:550B add bl, 0A0h ; ' ' | |
| F000:550E jmp short l40 | |
| F000:5510 l37: ; CODE XREF: int_8c_diag_modem+275j | |
| F000:5510 mov cx, 2 | |
| F000:5513 call sub_F5592 | |
| F000:5516 jnb short l38 | |
| F000:5518 add bl, 0A8h ; '¨' | |
| F000:551B jmp short l40 | |
| F000:551D l38: ; CODE XREF: int_8c_diag_modem+282j | |
| F000:551D cmp byte ptr [di], 33h ; '3' | |
| F000:5520 jnz short l39 | |
| F000:5522 inc di | |
| F000:5523 cmp byte ptr [di], 34h ; '4' | |
| F000:5526 jz short l41 | |
| F000:5528 l39: ; CODE XREF: int_8c_diag_modem+28Cj | |
| F000:5528 mov bl, 0AFh ; '¯' | |
| F000:552A l40: ; CODE XREF: int_8c_diag_modem+27Aj | |
| F000:552A ; int_8c_diag_modem+287j | |
| F000:552A mov bh, 3 | |
| F000:552C jmp short l43 | |
| F000:552E l41: ; CODE XREF: int_8c_diag_modem+292j | |
| F000:552E sub si, 1Ch | |
| F000:5531 call sub_F5552 | |
| F000:5534 call sub_F5605 | |
| F000:5537 xor dx, dx | |
| F000:5539 xor bx, bx | |
| F000:553B jmp short l44 | |
| F000:553D l42: ; CODE XREF: int_8c_diag_modem+EAj | |
| F000:553D ; int_8c_diag_modem+FDj | |
| F000:553D ; int_8c_diag_modem+10Bj | |
| F000:553D ; int_8c_diag_modem+115j | |
| F000:553D ; int_8c_diag_modem+125j | |
| F000:553D ; int_8c_diag_modem+133j ... | |
| F000:553D mov bh, 2 | |
| F000:553F l43: ; CODE XREF: int_8c_diag_modem+8Dj | |
| F000:553F ; int_8c_diag_modem+ABj | |
| F000:553F ; int_8c_diag_modem+298j | |
| F000:553F mov dh, bh | |
| F000:5541 add dh, 40h ; '@' | |
| F000:5544 mov dl, 20h ; ' ' | |
| F000:5546 l44: ; CODE XREF: int_8c_diag_modem:l16j | |
| F000:5546 ; int_8c_diag_modem:l36j | |
| F000:5546 ; int_8c_diag_modem+2A7j | |
| F000:5546 push dx | |
| F000:5547 mov dx, 3FCh | |
| F000:554A xor ax, ax | |
| F000:554C out dx, al ; COM: modem control reg bits: | |
| F000:554C ; 0: 1=activate -DTR (-data termnl ready), 0=deactivate | |
| F000:554C ; 1: 1=activate -RTS (-request to send), 0=deactivate | |
| F000:554C ; 2: 1=activate -OUT1 (spare, user-designated output) | |
| F000:554C ; 3: 1=activate -OUT2 | |
| F000:554C ; 4: 1=activate loopback for diagnostic testing | |
| F000:554D pop dx | |
| F000:554E stc | |
| F000:554F retf 2 | |
| F000:554F int_8c_diag_modem endp | |
| F000:5552 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5552 sub_F5552 proc near ; CODE XREF: int_8c_diag_modem+E2p | |
| F000:5552 ; int_8c_diag_modem+F5p | |
| F000:5552 ; int_8c_diag_modem+11Dp | |
| F000:5552 ; int_8c_diag_modem+163p | |
| F000:5552 ; int_8c_diag_modem+194p | |
| F000:5552 ; int_8c_diag_modem+1BAp ... | |
| F000:5552 push dx | |
| F000:5553 loc_F5553: ; CODE XREF: sub_F5552+Dj | |
| F000:5553 mov ah, cs:[si] | |
| F000:5556 call sub_F5567 | |
| F000:5559 jb short loc_F5564 | |
| F000:555B inc si | |
| F000:555C cmp ah, 0Dh | |
| F000:555F jnz short loc_F5553 | |
| F000:5561 clc | |
| F000:5562 jmp short loc_F5565 | |
| F000:5564 loc_F5564: ; CODE XREF: sub_F5552+7j | |
| F000:5564 stc | |
| F000:5565 loc_F5565: ; CODE XREF: sub_F5552+10j | |
| F000:5565 pop dx | |
| F000:5566 retn | |
| F000:5566 sub_F5552 endp | |
| F000:5567 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5567 sub_F5567 proc near ; CODE XREF: int_8c_diag_modem+23Bp | |
| F000:5567 ; sub_F5552+4p | |
| F000:5567 push dx | |
| F000:5568 add dx, 6 | |
| F000:556B mov bl, 7 | |
| F000:556D in al, dx | |
| F000:556E and al, 30h | |
| F000:5570 cmp al, 30h ; '0' | |
| F000:5572 jnz short loc_F558F | |
| F000:5574 sub dx, 4 | |
| F000:5577 in al, dx | |
| F000:5578 jmp short $+2 | |
| F000:557A dec dx | |
| F000:557B dec dx | |
| F000:557C mov al, ah | |
| F000:557E out dx, al | |
| F000:557F inc dx | |
| F000:5580 inc dx | |
| F000:5581 call sub_F59B3 | |
| F000:5584 cmp al, 2 | |
| F000:5586 jz short loc_F558C | |
| F000:5588 mov bl, al | |
| F000:558A jmp short loc_F558F | |
| F000:558C loc_F558C: ; CODE XREF: sub_F5567+1Fj | |
| F000:558C clc | |
| F000:558D jmp short loc_F5590 | |
| F000:558F loc_F558F: ; CODE XREF: sub_F5567+Bj | |
| F000:558F ; sub_F5567+23j | |
| F000:558F stc | |
| F000:5590 loc_F5590: ; CODE XREF: sub_F5567+26j | |
| F000:5590 pop dx | |
| F000:5591 retn | |
| F000:5591 sub_F5567 endp | |
| F000:5592 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5592 sub_F5592 proc near ; CODE XREF: int_8c_diag_modem+103p | |
| F000:5592 ; int_8c_diag_modem+12Bp | |
| F000:5592 ; int_8c_diag_modem+171p | |
| F000:5592 ; int_8c_diag_modem+1A2p | |
| F000:5592 ; int_8c_diag_modem+1C8p | |
| F000:5592 ; int_8c_diag_modem+202p ... | |
| F000:5592 push dx | |
| F000:5593 push si | |
| F000:5594 mov di, 19h | |
| F000:5597 push di | |
| F000:5598 mov si, cx | |
| F000:559A inc dx | |
| F000:559B inc dx | |
| F000:559C mov bl, 1 | |
| F000:559E mov cx, 14h | |
| F000:55A1 loc_F55A1: ; CODE XREF: sub_F5592+1Ej | |
| F000:55A1 push cx | |
| F000:55A2 xor cx, cx | |
| F000:55A4 loc_F55A4: ; CODE XREF: sub_F5592+1Bj | |
| F000:55A4 in al, dx | |
| F000:55A5 cmp al, 4 | |
| F000:55A7 jz short loc_F55B9 | |
| F000:55A9 cmp al, 6 | |
| F000:55AB jz short loc_F55B4 | |
| F000:55AD loop loc_F55A4 | |
| F000:55AF pop cx | |
| F000:55B0 loop loc_F55A1 | |
| F000:55B2 jmp short loc_F5600 | |
| F000:55B4 loc_F55B4: ; CODE XREF: sub_F5592+19j | |
| F000:55B4 pop cx | |
| F000:55B5 inc bl | |
| F000:55B7 jmp short loc_F5600 | |
| F000:55B9 loc_F55B9: ; CODE XREF: sub_F5592+15j | |
| F000:55B9 pop cx | |
| F000:55BA mov bx, 64h ; 'd' | |
| F000:55BD loc_F55BD: ; CODE XREF: sub_F5592+48j | |
| F000:55BD dec dx | |
| F000:55BE dec dx | |
| F000:55BF in al, dx | |
| F000:55C0 or si, si | |
| F000:55C2 jz short loc_F55C8 | |
| F000:55C4 dec si | |
| F000:55C5 mov [di], al | |
| F000:55C7 inc di | |
| F000:55C8 loc_F55C8: ; CODE XREF: sub_F5592+30j | |
| F000:55C8 or bl, bl | |
| F000:55CA jnz short loc_F55D0 | |
| F000:55CC mov bl, 3 | |
| F000:55CE jmp short loc_F5600 | |
| F000:55D0 loc_F55D0: ; CODE XREF: sub_F5592+38j | |
| F000:55D0 dec bx | |
| F000:55D1 inc dx | |
| F000:55D2 inc dx | |
| F000:55D3 xor cx, cx | |
| F000:55D5 loc_F55D5: ; CODE XREF: sub_F5592+5Dj | |
| F000:55D5 call sub_F59B3 | |
| F000:55D8 cmp al, 4 | |
| F000:55DA jz short loc_F55BD | |
| F000:55DC cmp al, 6 | |
| F000:55DE jnz short loc_F55E4 | |
| F000:55E0 mov bl, 4 | |
| F000:55E2 jmp short loc_F5600 | |
| F000:55E4 loc_F55E4: ; CODE XREF: sub_F5592+4Cj | |
| F000:55E4 cmp al, 1 | |
| F000:55E6 jz short loc_F55F5 | |
| F000:55E8 add dx, 4 | |
| F000:55EB in al, dx | |
| F000:55EC sub dx, 4 | |
| F000:55EF loop loc_F55D5 | |
| F000:55F1 mov bl, 5 | |
| F000:55F3 jmp short loc_F5600 | |
| F000:55F5 loc_F55F5: ; CODE XREF: sub_F5592+54j | |
| F000:55F5 add dx, 3 | |
| F000:55F8 in al, dx | |
| F000:55F9 test al, 1 | |
| F000:55FB clc | |
| F000:55FC jz short loc_F5601 | |
| F000:55FE mov bl, 6 | |
| F000:5600 loc_F5600: ; CODE XREF: sub_F5592+20j | |
| F000:5600 ; sub_F5592+25j | |
| F000:5600 ; sub_F5592+3Cj | |
| F000:5600 ; sub_F5592+50j | |
| F000:5600 ; sub_F5592+61j | |
| F000:5600 stc | |
| F000:5601 loc_F5601: ; CODE XREF: sub_F5592+6Aj | |
| F000:5601 pop di | |
| F000:5602 pop si | |
| F000:5603 pop dx | |
| F000:5604 retn | |
| F000:5604 sub_F5592 endp | |
| F000:5605 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5605 sub_F5605 proc near ; CODE XREF: int_8c_diag_modem:l7p | |
| F000:5605 ; int_8c_diag_modem+2A0p | |
| F000:5605 mov al, 0Bh | |
| F000:5607 loc_F5607: ; CODE XREF: sub_F5605+Aj | |
| F000:5607 sub cx, cx | |
| F000:5609 loc_F5609: ; CODE XREF: sub_F5605+6j | |
| F000:5609 push ax | |
| F000:560A pop ax | |
| F000:560B loop loc_F5609 | |
| F000:560D dec al | |
| F000:560F jnz short loc_F5607 | |
| F000:5611 retn | |
| F000:5611 sub_F5605 endp | |
| F000:5612 byte_F5612 db 28h, 2 dup(0Ah), 0Bh, 3, 0DAh, 3 dup(2Dh), 0BFh, 0Bh | |
| F000:5612 ; DATA XREF: int_8e_diag_serial_printer?+23o | |
| F000:5612 db 0FAh, 0DAh, 0C1h, 3 dup(0C4h), 0C1h, 0BFh, 0Bh, 0F8h | |
| F000:5612 db 0C6h, 0B5h, 5 dup(20h), 0C6h, 0B5h, 0Bh, 0F8h, 0C0h | |
| F000:5612 db 5 dup(0C4h), 0D9h, 0Ah, 0FFh | |
| F000:563B byte_F563B db 5, 0Bh, 0FCh, 48h, 0Ch, 0FFh, 0, 0FDh, 1Fh, 80h, 0FCh | |
| F000:563B ; DATA XREF: int_8e_diag_serial_printer?+28o | |
| F000:5646 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5646 ; int 0x8e | |
| F000:5646 ; serial printer? test | |
| F000:5646 ; input: | |
| F000:5646 ; ah = 'H' activates it | |
| F000:5646 ; 0,1: error message | |
| F000:5646 ; output: | |
| F000:5646 ; dl/dh = error msg | |
| F000:5646 int_8e_diag_serial_printer? proc far ; DATA XREF: F000:401Co | |
| F000:5646 call es_50 ; es = 0x50 | |
| F000:5649 call ds_40 ; ds = 0x40 | |
| F000:564C cmp ah, 0 | |
| F000:564F jz short error_and_exit | |
| F000:5651 cmp ah, 1 | |
| F000:5654 jz short error_and_exit | |
| F000:5656 cmp ah, 48h ; 'H' | |
| F000:5659 jz short run_test | |
| F000:565B jmp short exit | |
| F000:565D error_and_exit: ; CODE XREF: int_8e_diag_serial_printer?+9j | |
| F000:565D ; int_8e_diag_serial_printer?+Ej | |
| F000:565D test word ptr ds:seg40.equip_flag, 2000h ; interal modem installed? | |
| F000:5663 jz short exit | |
| F000:5665 mov al, 7 | |
| F000:5667 int 81h ; reserved for BASIC | |
| F000:5669 mov bp, offset byte_F5612 | |
| F000:566C int 82h ; reserved for BASIC | |
| F000:566E mov bp, offset byte_F563B | |
| F000:5671 or dh, 80h | |
| F000:5674 mov bl, 87h ; '' | |
| F000:5676 int 82h ; reserved for BASIC | |
| F000:5678 exit: ; CODE XREF: int_8e_diag_serial_printer?+15j | |
| F000:5678 ; int_8e_diag_serial_printer?+1Dj | |
| F000:5678 clc | |
| F000:5679 retf 2 | |
| F000:567C run_test: ; CODE XREF: int_8e_diag_serial_printer?+13j | |
| F000:567C test word ptr ds:seg40.equip_flag, 2000h | |
| F000:5682 jnz short l3 | |
| F000:5684 mov bx, 1 | |
| F000:5687 jmp exit_with_error | |
| F000:568A l3: ; CODE XREF: int_8e_diag_serial_printer?+3Cj | |
| F000:568A xor di, di | |
| F000:568C l4: ; CODE XREF: int_8e_diag_serial_printer?+54j | |
| F000:568C mov ax, [di+seg40.rs232_base] | |
| F000:5690 cmp ax, 2F8h | |
| F000:5693 jz short l5 | |
| F000:5695 inc di | |
| F000:5696 inc di | |
| F000:5697 cmp di, 4 | |
| F000:569A jnz short l4 | |
| F000:569C mov bx, 3 | |
| F000:569F jmp exit_with_error | |
| F000:56A2 l5: ; CODE XREF: int_8e_diag_serial_printer?+4Dj | |
| F000:56A2 mov dx, 2FCh | |
| F000:56A5 in al, dx ; COM: modem control reg bits: | |
| F000:56A5 ; 0: 1=activate -DTR (-data termnl ready), 0=deactivate | |
| F000:56A5 ; 1: 1=activate -RTS (-request to send), 0=deactivate | |
| F000:56A5 ; 2: 1=activate -OUT1 (spare, user-designated output) | |
| F000:56A5 ; 3: 1=activate -OUT2 | |
| F000:56A5 ; 4: 1=activate loopback for diagnostic testing | |
| F000:56A6 jmp short $+2 | |
| F000:56A8 push ax | |
| F000:56A9 and al, 0EFh | |
| F000:56AB out dx, al ; COM: modem control reg bits: | |
| F000:56AB ; 0: 1=activate -DTR (-data termnl ready), 0=deactivate | |
| F000:56AB ; 1: 1=activate -RTS (-request to send), 0=deactivate | |
| F000:56AB ; 2: 1=activate -OUT1 (spare, user-designated output) | |
| F000:56AB ; 3: 1=activate -OUT2 | |
| F000:56AB ; 4: 1=activate loopback for diagnostic testing | |
| F000:56AC jmp short $+2 | |
| F000:56AE mov dx, 2FEh | |
| F000:56B1 in al, dx ; COM: modem status register | |
| F000:56B1 ; 0: 1=Delta CTS changed | |
| F000:56B1 ; 1: 1=Delta DSR changed | |
| F000:56B1 ; 2: 1=Trailing Edge Ring Indicator (TERI) is active | |
| F000:56B1 ; 3: 1=Delta DCD has changed | |
| F000:56B1 ; 4: 1=CTS is active | |
| F000:56B1 ; 5: 1=DSR is active | |
| F000:56B1 ; 6: 1=Ring Indicator (RI) is active | |
| F000:56B1 ; 7: 1=DCD is active | |
| F000:56B2 jmp short $+2 | |
| F000:56B4 mov bl, al | |
| F000:56B6 pop ax | |
| F000:56B7 mov dx, 2FCh | |
| F000:56BA out dx, al ; COM: modem control reg bits: | |
| F000:56BA ; 0: 1=activate -DTR (-data termnl ready), 0=deactivate | |
| F000:56BA ; 1: 1=activate -RTS (-request to send), 0=deactivate | |
| F000:56BA ; 2: 1=activate -OUT1 (spare, user-designated output) | |
| F000:56BA ; 3: 1=activate -OUT2 | |
| F000:56BA ; 4: 1=activate loopback for diagnostic testing | |
| F000:56BB and bl, 10h | |
| F000:56BE jnz short l6 | |
| F000:56C0 mov bx, 4 | |
| F000:56C3 jmp exit_with_error | |
| F000:56C6 l6: ; CODE XREF: int_8e_diag_serial_printer?+78j | |
| F000:56C6 xor di, di | |
| F000:56C8 cmp [di+seg40.rs232_base], 2F8h | |
| F000:56CE jz short l7 | |
| F000:56D0 inc di | |
| F000:56D1 l7: ; CODE XREF: int_8e_diag_serial_printer?+88j | |
| F000:56D1 mov [di+seg40.rs232_tim_out], 20h ; ' ' | |
| F000:56D6 mov dx, di | |
| F000:56D8 xor ah, ah | |
| F000:56DA mov al, 87h ; '' | |
| F000:56DC int 14h ; SERIAL I/O - INITIALIZE USART | |
| F000:56DC ; AL = initializing parameters, DX = port number (0-3) | |
| F000:56DC ; Return: AH = RS-232 status code bits, AL = modem status bits | |
| F000:56DE shl ah, 1 | |
| F000:56E0 jnb short l8 | |
| F000:56E2 jmp short l19 | |
| F000:56E4 db 90h ; | |
| F000:56E5 l8: ; CODE XREF: int_8e_diag_serial_printer?+9Aj | |
| F000:56E5 mov word ptr es:seg50.sp_flag, 0 | |
| F000:56EC mov ax, 3 | |
| F000:56EF l9: ; CODE XREF: int_8e_diag_serial_printer?+109j | |
| F000:56EF mov si, ax | |
| F000:56F1 xor di, di | |
| F000:56F3 xor bh, bh | |
| F000:56F5 mov bl, 21h ; '!' | |
| F000:56F7 mov al, 0Ch | |
| F000:56F9 call sub_F5775 | |
| F000:56FC jb short l19 | |
| F000:56FE mov byte ptr es:seg50.sp_char, 2Ah ; '*' | |
| F000:5704 call sub_F57D5 | |
| F000:5707 call sub_F57B9 | |
| F000:570A jb short l19 | |
| F000:570C l10: ; CODE XREF: int_8e_diag_serial_printer?+FFj | |
| F000:570C mov cx, 9 | |
| F000:570F l11: ; CODE XREF: int_8e_diag_serial_printer?+F6j | |
| F000:570F call diag_check_kbd_break | |
| F000:5712 jnb short l12 | |
| F000:5714 call sub_F57B9 | |
| F000:5717 jmp short l22 | |
| F000:5719 l12: ; CODE XREF: int_8e_diag_serial_printer?+CCj | |
| F000:5719 push cx | |
| F000:571A inc word ptr es:seg50.sp_flag | |
| F000:571F call sub_F577C | |
| F000:5722 cmp bh, 0 | |
| F000:5725 jz short l13 | |
| F000:5727 dec bl | |
| F000:5729 jmp short l14 | |
| F000:572B l13: ; CODE XREF: int_8e_diag_serial_printer?+DFj | |
| F000:572B inc bx | |
| F000:572C l14: ; CODE XREF: int_8e_diag_serial_printer?+E3j | |
| F000:572C mov al, bl | |
| F000:572E mov cx, 50h ; 'P' | |
| F000:5731 l15: ; CODE XREF: int_8e_diag_serial_printer?+F3j | |
| F000:5731 push ax | |
| F000:5732 call sub_F5775 | |
| F000:5735 pop ax | |
| F000:5736 jb short l18 | |
| F000:5738 inc ax | |
| F000:5739 loop l15 | |
| F000:573B pop cx | |
| F000:573C loop l11 | |
| F000:573E inc di | |
| F000:573F cmp di, si | |
| F000:5741 jz short l16 | |
| F000:5743 not bh | |
| F000:5745 jmp short l10 | |
| F000:5747 l16: ; CODE XREF: int_8e_diag_serial_printer?+FBj | |
| F000:5747 cmp si, 2 | |
| F000:574A jz short l17 | |
| F000:574C mov ax, 2 | |
| F000:574F jmp short l9 | |
| F000:5751 l17: ; CODE XREF: int_8e_diag_serial_printer?+104j | |
| F000:5751 call sub_F57B9 | |
| F000:5754 mov byte ptr es:seg50.sp_char, 20h ; ' ' | |
| F000:575A call sub_F57D5 | |
| F000:575D jmp short l21 | |
| F000:575F db 90h ; | |
| F000:5760 l18: ; CODE XREF: int_8e_diag_serial_printer?+F0j | |
| F000:5760 pop cx | |
| F000:5761 l19: ; CODE XREF: int_8e_diag_serial_printer?+9Cj | |
| F000:5761 ; int_8e_diag_serial_printer?+B6j | |
| F000:5761 ; int_8e_diag_serial_printer?+C4j | |
| F000:5761 mov bx, 2 | |
| F000:5764 exit_with_error: ; CODE XREF: int_8e_diag_serial_printer?+41j | |
| F000:5764 ; int_8e_diag_serial_printer?+59j | |
| F000:5764 ; int_8e_diag_serial_printer?+7Dj | |
| F000:5764 mov dh, bl | |
| F000:5766 add dh, 40h ; '@' | |
| F000:5769 mov dl, 20h ; ' ' | |
| F000:576B jmp short l22 | |
| F000:576D l21: ; CODE XREF: int_8e_diag_serial_printer?+117j | |
| F000:576D xor dx, dx | |
| F000:576F xor bx, bx | |
| F000:5771 l22: ; CODE XREF: int_8e_diag_serial_printer?+D1j | |
| F000:5771 ; int_8e_diag_serial_printer?+125j | |
| F000:5771 stc | |
| F000:5772 retf 2 | |
| F000:5772 int_8e_diag_serial_printer? endp | |
| F000:5775 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5775 sub_F5775 proc near ; CODE XREF: int_8e_diag_serial_printer?+B3p | |
| F000:5775 ; int_8e_diag_serial_printer?+ECp | |
| F000:5775 ; sub_F57B9+2p sub_F57B9+9p | |
| F000:5775 mov ah, 1 | |
| F000:5777 int 14h ; SERIAL I/O - TRANSMIT CHARACTER | |
| F000:5777 ; AL = character, DX = port number (0-3) | |
| F000:5777 ; Return: AH = RS-232 status code bits, AL = modem status bits | |
| F000:5779 shl ah, 1 | |
| F000:577B retn | |
| F000:577B sub_F5775 endp | |
| F000:577C ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:577C sub_F577C proc near ; CODE XREF: int_8e_diag_serial_printer?+D9p | |
| F000:577C push ax | |
| F000:577D push bx | |
| F000:577E push cx | |
| F000:577F push dx | |
| F000:5780 push di | |
| F000:5781 mov dx, 0B11h | |
| F000:5784 call diag_set_cursor_pos | |
| F000:5787 mov ax, es:26h | |
| F000:578B mov bx, 0Ah | |
| F000:578E mov cx, 3 | |
| F000:5791 l0: ; CODE XREF: sub_F577C+1Dj | |
| F000:5791 xor dx, dx | |
| F000:5793 div bx | |
| F000:5795 or dl, 30h | |
| F000:5798 push dx | |
| F000:5799 loop l0 | |
| F000:579B xor di, di | |
| F000:579D l1: ; CODE XREF: sub_F577C+2Fj | |
| F000:579D pop ax | |
| F000:579E mov ah, 0Eh | |
| F000:57A0 xor bh, bh | |
| F000:57A2 mov cx, 1 | |
| F000:57A5 int 10h ; - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE) | |
| F000:57A5 ; AL = character, BH = display page (alpha modes) | |
| F000:57A5 ; BL = foreground color (graphics modes) | |
| F000:57A7 inc di | |
| F000:57A8 cmp di, 3 | |
| F000:57AB jnz short l1 | |
| F000:57AD mov cx, 0Ah | |
| F000:57B0 call diag_delay | |
| F000:57B3 pop di | |
| F000:57B4 pop dx | |
| F000:57B5 pop cx | |
| F000:57B6 pop bx | |
| F000:57B7 pop ax | |
| F000:57B8 retn | |
| F000:57B8 sub_F577C endp | |
| F000:57B9 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:57B9 sub_F57B9 proc near ; CODE XREF: int_8e_diag_serial_printer?+C1p | |
| F000:57B9 ; int_8e_diag_serial_printer?+CEp | |
| F000:57B9 ; int_8e_diag_serial_printer?:l17p | |
| F000:57B9 mov al, 0Dh | |
| F000:57BB call sub_F5775 | |
| F000:57BE jb short lret | |
| F000:57C0 mov al, 0Ah | |
| F000:57C2 call sub_F5775 | |
| F000:57C5 lret: ; CODE XREF: sub_F57B9+5j | |
| F000:57C5 retn | |
| F000:57C5 sub_F57B9 endp | |
| F000:57C6 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:57C6 es_50 proc near ; CODE XREF: int_8e_diag_serial_printer?p | |
| F000:57C6 push ax | |
| F000:57C7 mov ax, 50h ; 'P' | |
| F000:57CA mov es, ax ; es = 0x50 | |
| F000:57CC pop ax | |
| F000:57CD retn | |
| F000:57CD es_50 endp | |
| F000:57CE ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:57CE ; input | |
| F000:57CE ; dh = row | |
| F000:57CE ; dl = col | |
| F000:57CE diag_set_cursor_pos proc near ; CODE XREF: sub_F577C+8p | |
| F000:57CE ; sub_F57D5+7p | |
| F000:57CE mov ah, 2 | |
| F000:57D0 xor bh, bh ; page 0 | |
| F000:57D2 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:57D2 ; DH,DL = row, column (0,0 = upper left) | |
| F000:57D2 ; BH = page number | |
| F000:57D4 retn | |
| F000:57D4 diag_set_cursor_pos endp | |
| F000:57D5 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:57D5 sub_F57D5 proc near ; CODE XREF: int_8e_diag_serial_printer?+BEp | |
| F000:57D5 ; int_8e_diag_serial_printer?+114p | |
| F000:57D5 push ax | |
| F000:57D6 push bx | |
| F000:57D7 push cx | |
| F000:57D8 push dx | |
| F000:57D9 mov dx, 0B0Ch ; row = 11, col=12 | |
| F000:57DC call diag_set_cursor_pos | |
| F000:57DF mov cx, 0Dh | |
| F000:57E2 l0: ; CODE XREF: sub_F57D5+1Fj | |
| F000:57E2 push cx | |
| F000:57E3 mov ah, 0Eh | |
| F000:57E5 xor bh, bh | |
| F000:57E7 mov al, es:seg50.sp_char | |
| F000:57EB int 10h ; - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE) | |
| F000:57EB ; AL = character, BH = display page (alpha modes) | |
| F000:57EB ; BL = foreground color (graphics modes) | |
| F000:57ED mov cx, 0Fh | |
| F000:57F0 call diag_delay | |
| F000:57F3 pop cx | |
| F000:57F4 loop l0 | |
| F000:57F6 pop dx | |
| F000:57F7 pop cx | |
| F000:57F8 pop bx | |
| F000:57F9 pop ax | |
| F000:57FA retn | |
| F000:57FA sub_F57D5 endp | |
| F000:57FB s_rs232_err_msg db 0Bh, 0Ah, 0Ah, 0Ah, 0Ah, 52h, 53h, 32h, 33h, 32h, 0Ch | |
| F000:57FB ; DATA XREF: int_8f_diag_rs232+Co | |
| F000:57FB db 0FFh, 0, 0FDh, 2Bh, 76h, 0FCh | |
| F000:580C byte_F580C db 3, 87h, 49h, 0A2h, 7Dh, 0FDh, 1Fh, 0FCh | |
| F000:580C ; DATA XREF: int_8f_diag_rs232+11o | |
| F000:5814 s_rs232_300_2400_4800 db 20h, 52h, 20h, 53h, 20h, 32h, 20h, 33h, 20h, 32h, 0Ah | |
| F000:5814 ; DATA XREF: int_8f_diag_rs232:run_testo | |
| F000:5814 db 0Ah, 0Bh, 0F9h, 33h, 30h, 30h, 0Ah, 0Bh, 0FCh, 32h | |
| F000:5814 db 34h, 30h, 30h, 0Ah, 0Bh, 0FCh, 34h, 38h, 30h, 30h, 0Ch | |
| F000:5814 db 0FFh, 0, 7Ah, 0FDh, 21h, 0FCh | |
| F000:583A byte_F583A db 6 ; DATA XREF: int_8f_diag_rs232+3Eo | |
| F000:583B db 20h | |
| F000:583C db 0Ah | |
| F000:583D db 0Bh | |
| F000:583E db 0FFh | |
| F000:583F db 2Ah ; * | |
| F000:5840 db 0FFh | |
| F000:5841 unk_F5841 db 15h ; DATA XREF: int_8f_diag_rs232:l4o | |
| F000:5842 db 89h ; | |
| F000:5843 db 15h | |
| F000:5844 db 8Bh ; | |
| F000:5845 db 15h | |
| F000:5846 db 8Dh ; | |
| F000:5847 unk_F5847 db 75h ; u ; DATA XREF: int_8f_diag_rs232+4Do | |
| F000:5848 db 1 | |
| F000:5849 db 2Fh ; / | |
| F000:584A db 0 | |
| F000:584B db 17h | |
| F000:584C db 0 | |
| F000:584D ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:584D ; int 0x8f | |
| F000:584D ; input: | |
| F000:584D ; ah = 'I' or 0xff activates it | |
| F000:584D ; 1: error message | |
| F000:584D ; output: | |
| F000:584D ; dx = ? | |
| F000:584D int_8f_diag_rs232 proc far ; DATA XREF: F000:401Eo | |
| F000:584D call ds_40 ; ds = 0x40 | |
| F000:5850 cmp ah, 1 | |
| F000:5853 jnz short l0 | |
| F000:5855 mov al, 5 | |
| F000:5857 int 81h ; reserved for BASIC | |
| F000:5859 mov bp, offset s_rs232_err_msg | |
| F000:585C int 82h ; reserved for BASIC | |
| F000:585E mov bp, offset byte_F580C | |
| F000:5861 int 82h ; reserved for BASIC | |
| F000:5863 jmp short exit | |
| F000:5865 l0: ; CODE XREF: int_8f_diag_rs232+6j | |
| F000:5865 cmp ah, 49h ; 'I' | |
| F000:5868 jz short run_test | |
| F000:586A cmp ah, 0FFh | |
| F000:586D jz short run_test | |
| F000:586F exit: ; CODE XREF: int_8f_diag_rs232+16j | |
| F000:586F clc | |
| F000:5870 retf 2 | |
| F000:5873 run_test: ; CODE XREF: int_8f_diag_rs232+1Bj | |
| F000:5873 ; int_8f_diag_rs232+20j | |
| F000:5873 mov bp, offset s_rs232_300_2400_4800 | |
| F000:5876 mov dx, 80Fh | |
| F000:5879 int 82h ; reserved for BASIC | |
| F000:587B mov dx, 2FBh | |
| F000:587E call sub_F5923 | |
| F000:5881 jnb short l3 | |
| F000:5883 mov bl, 6 | |
| F000:5885 jmp short l5 | |
| F000:5887 l3: ; CODE XREF: int_8f_diag_rs232+34j | |
| F000:5887 xor si, si | |
| F000:5889 mov al, 3 | |
| F000:588B mov bp, offset byte_F583A | |
| F000:588E l4: ; CODE XREF: int_8f_diag_rs232+6Dj | |
| F000:588E mov di, offset unk_F5841 | |
| F000:5891 add di, si | |
| F000:5893 mov dx, cs:[di] | |
| F000:5896 mov bl, 87h ; '' | |
| F000:5898 int 82h ; reserved for BASIC | |
| F000:589A mov di, offset unk_F5847 | |
| F000:589D add di, si | |
| F000:589F mov cx, cs:[di] | |
| F000:58A2 push si | |
| F000:58A3 push ax | |
| F000:58A4 mov dx, 2FBh | |
| F000:58A7 call diag_send_serial_cmds | |
| F000:58AA call sub_F58D2 | |
| F000:58AD pop ax | |
| F000:58AE pop si | |
| F000:58AF jb short l5 | |
| F000:58B1 cmp dh, 3Fh ; '?' | |
| F000:58B4 jz short l6 | |
| F000:58B6 inc si | |
| F000:58B7 inc si | |
| F000:58B8 dec al | |
| F000:58BA jnz short l4 | |
| F000:58BC mov dh, 0 | |
| F000:58BE jmp short l6 | |
| F000:58C0 l5: ; CODE XREF: int_8f_diag_rs232+38j | |
| F000:58C0 ; int_8f_diag_rs232+62j | |
| F000:58C0 mov dh, 1 | |
| F000:58C2 mov bh, 0 | |
| F000:58C4 l6: ; CODE XREF: int_8f_diag_rs232+67j | |
| F000:58C4 ; int_8f_diag_rs232+71j | |
| F000:58C4 stc | |
| F000:58C5 retf 2 | |
| F000:58C5 int_8f_diag_rs232 endp | |
| F000:58C8 data_for_some_ports db 0, 18h, 8, 38h, 28h, 4, 1Ch, 0Ch, 3Ch, 2Ch | |
| F000:58C8 ; DATA XREF: sub_F58D2:l1o | |
| F000:58D2 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:58D2 ; input: | |
| F000:58D2 ; dx = port | |
| F000:58D2 sub_F58D2 proc near ; CODE XREF: int_8f_diag_rs232+5Dp | |
| F000:58D2 mov cl, 0 | |
| F000:58D4 l0: ; CODE XREF: sub_F58D2+2Dj | |
| F000:58D4 xor si, si | |
| F000:58D6 l1: ; CODE XREF: sub_F58D2+26j | |
| F000:58D6 mov di, offset data_for_some_ports | |
| F000:58D9 add di, si | |
| F000:58DB mov al, cs:[di] | |
| F000:58DE add al, cl | |
| F000:58E0 out dx, al | |
| F000:58E1 push dx | |
| F000:58E2 push cx | |
| F000:58E3 push si | |
| F000:58E4 dec dx | |
| F000:58E5 dec dx | |
| F000:58E6 inc al | |
| F000:58E8 int 84h ; reserved for BASIC | |
| F000:58EA pop si | |
| F000:58EB pop cx | |
| F000:58EC pop dx | |
| F000:58ED jb short lret | |
| F000:58EF call diag_check_kbd_break | |
| F000:58F2 jb short l2 | |
| F000:58F4 inc si | |
| F000:58F5 cmp si, 0Ah | |
| F000:58F8 jnz short l1 | |
| F000:58FA inc cl | |
| F000:58FC cmp cl, 4 | |
| F000:58FF jnz short l0 | |
| F000:5901 l2: ; CODE XREF: sub_F58D2+20j | |
| F000:5901 clc | |
| F000:5902 lret: ; CODE XREF: sub_F58D2+1Bj | |
| F000:5902 retn | |
| F000:5902 sub_F58D2 endp | |
| F000:5903 diag_serial_cmds db 0BAh ; º ; DATA XREF: sub_F5923+4o | |
| F000:5904 db 0 | |
| F000:5905 db 5Dh ; ] | |
| F000:5906 db 0 | |
| F000:5907 db 2Fh ; / | |
| F000:5908 db 0 | |
| F000:5909 db 17h | |
| F000:590A db 0 | |
| F000:590B db 0 | |
| F000:590C db 1Bh | |
| F000:590D db 0 | |
| F000:590E db 1Eh | |
| F000:590F db 0 | |
| F000:5910 db 0Ah | |
| F000:5911 db 0 | |
| F000:5912 db 7 | |
| F000:5913 db 74h ; t | |
| F000:5914 db 0B3h ; ³ | |
| F000:5915 db 0BAh ; º | |
| F000:5916 db 59h ; Y | |
| F000:5917 db 0D0h ; Ð | |
| F000:5918 db 28h ; ( | |
| F000:5919 db 80h ; | |
| F000:591A db 16h | |
| F000:591B db 5Ah ; Z | |
| F000:591C db 9Bh ; | |
| F000:591D db 0A8h ; ¨ | |
| F000:591E db 4Dh ; M | |
| F000:591F db 0F2h ; ò | |
| F000:5920 db 22h ; " | |
| F000:5921 db 6Ah ; j | |
| F000:5922 db 13h | |
| F000:5923 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5923 ; input: | |
| F000:5923 ; dx = serial port | |
| F000:5923 sub_F5923 proc near ; CODE XREF: int_8c_diag_modem+A3p | |
| F000:5923 ; int_8f_diag_rs232+31p | |
| F000:5923 mov al, 0 ; disable nmi | |
| F000:5925 out 0A0h, al | |
| F000:5927 mov di, offset diag_serial_cmds | |
| F000:592A mov cx, 4 | |
| F000:592D l0: ; CODE XREF: sub_F5923+26j | |
| F000:592D push cx | |
| F000:592E mov cx, cs:[di] | |
| F000:5931 call diag_send_serial_cmds | |
| F000:5934 pop cx | |
| F000:5935 mov al, cs:[di+9] | |
| F000:5939 out dx, al | |
| F000:593A mov ax, cs:[di+10h] | |
| F000:593E mov bx, cs:[di+18h] | |
| F000:5942 call sub_F5951 | |
| F000:5945 jb short l1 | |
| F000:5947 inc di | |
| F000:5948 inc di | |
| F000:5949 loop l0 | |
| F000:594B clc | |
| F000:594C l1: ; CODE XREF: sub_F5923+22j | |
| F000:594C mov al, 10000000b ; enable nmi | |
| F000:594E out 0A0h, al | |
| F000:5950 retn | |
| F000:5950 sub_F5923 endp | |
| F000:5951 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5951 sub_F5951 proc near ; CODE XREF: sub_F5923+1Fp | |
| F000:5951 push cx | |
| F000:5952 push dx | |
| F000:5953 cli | |
| F000:5954 push bx | |
| F000:5955 push ax | |
| F000:5956 mov al, 55h ; 'U' | |
| F000:5958 sub dx, 3 | |
| F000:595B out dx, al | |
| F000:595C jmp short $+2 | |
| F000:595E mov cx, 0 | |
| F000:5961 add dx, 5 | |
| F000:5964 loc_F5964: ; CODE XREF: sub_F5951+18j | |
| F000:5964 in al, dx | |
| F000:5965 test al, 40h | |
| F000:5967 jz short loc_F596D | |
| F000:5969 loop loc_F5964 | |
| F000:596B jmp short loc_F5985 | |
| F000:596D loc_F596D: ; CODE XREF: sub_F5951+16j | |
| F000:596D ; sub_F5951+21j | |
| F000:596D in al, dx | |
| F000:596E test al, 20h | |
| F000:5970 jnz short loc_F5976 | |
| F000:5972 loop loc_F596D | |
| F000:5974 jmp short loc_F5985 | |
| F000:5976 loc_F5976: ; CODE XREF: sub_F5951+1Fj | |
| F000:5976 call diag_get_timer_0 | |
| F000:5979 mov bx, ax | |
| F000:597B mov cx, 0 | |
| F000:597E loc_F597E: ; CODE XREF: sub_F5951+32j | |
| F000:597E in al, dx | |
| F000:597F test al, 40h | |
| F000:5981 jnz short loc_F5989 | |
| F000:5983 loop loc_F597E | |
| F000:5985 loc_F5985: ; CODE XREF: sub_F5951+1Aj | |
| F000:5985 ; sub_F5951+23j | |
| F000:5985 sti | |
| F000:5986 pop ax | |
| F000:5987 jmp short loc_F599C | |
| F000:5989 loc_F5989: ; CODE XREF: sub_F5951+30j | |
| F000:5989 call diag_get_timer_0 | |
| F000:598C sti | |
| F000:598D sub bx, ax | |
| F000:598F pop ax | |
| F000:5990 cmp bx, ax | |
| F000:5992 jg short loc_F599C | |
| F000:5994 pop ax | |
| F000:5995 cmp ax, bx | |
| F000:5997 jg short loc_F599D | |
| F000:5999 clc | |
| F000:599A jmp short loc_F599E | |
| F000:599C loc_F599C: ; CODE XREF: sub_F5951+36j | |
| F000:599C ; sub_F5951+41j | |
| F000:599C pop bx | |
| F000:599D loc_F599D: ; CODE XREF: sub_F5951+46j | |
| F000:599D stc | |
| F000:599E loc_F599E: ; CODE XREF: sub_F5951+49j | |
| F000:599E pop dx | |
| F000:599F pop cx | |
| F000:59A0 retn | |
| F000:59A0 sub_F5951 endp | |
| F000:59A1 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:59A1 ; return | |
| F000:59A1 ; ax = timer 0 value | |
| F000:59A1 diag_get_timer_0 proc near ; CODE XREF: sub_F5951:loc_F5976p | |
| F000:59A1 ; sub_F5951:loc_F5989p | |
| F000:59A1 mov al, 0 ; tim 0, latching, interrupt on terminal count, binary | |
| F000:59A3 out 43h, al | |
| F000:59A5 nop | |
| F000:59A6 jmp short $+2 | |
| F000:59A8 in al, 40h ; read timer 0 lsb | |
| F000:59AA jmp short $+2 | |
| F000:59AC mov ah, al | |
| F000:59AE in al, 40h ; read timer 0 msb | |
| F000:59B0 xchg ah, al ; ax = timer value | |
| F000:59B2 retn | |
| F000:59B2 diag_get_timer_0 endp | |
| F000:59B3 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:59B3 sub_F59B3 proc near ; CODE XREF: int_8c_diag_modem+CBp | |
| F000:59B3 ; sub_F5567+1Ap | |
| F000:59B3 ; sub_F5592:loc_F55D5p | |
| F000:59B3 ; int_84+41p | |
| F000:59B3 sub cx, cx | |
| F000:59B5 loc_F59B5: ; CODE XREF: sub_F59B3+7j | |
| F000:59B5 in al, dx | |
| F000:59B6 test al, 1 | |
| F000:59B8 jz short locret_F59BC | |
| F000:59BA loop loc_F59B5 | |
| F000:59BC locret_F59BC: ; CODE XREF: sub_F59B3+5j | |
| F000:59BC retn | |
| F000:59BC sub_F59B3 endp | |
| F000:59BD ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:59BD ; input: | |
| F000:59BD ; dx = serial port | |
| F000:59BD diag_send_serial_cmds proc near ; CODE XREF: int_8c_diag_modem+B1p | |
| F000:59BD ; int_8f_diag_rs232+5Ap | |
| F000:59BD ; sub_F5923+Ep | |
| F000:59BD push dx | |
| F000:59BE in al, dx | |
| F000:59BF jmp short $+2 | |
| F000:59C1 or al, 80h | |
| F000:59C3 out dx, al | |
| F000:59C4 jmp short $+2 | |
| F000:59C6 sub dx, 3 | |
| F000:59C9 mov al, cl | |
| F000:59CB out dx, al | |
| F000:59CC jmp short $+2 | |
| F000:59CE inc dx | |
| F000:59CF mov al, ch | |
| F000:59D1 out dx, al | |
| F000:59D2 jmp short $+2 | |
| F000:59D4 inc dx | |
| F000:59D5 inc dx | |
| F000:59D6 in al, dx | |
| F000:59D7 jmp short $+2 | |
| F000:59D9 and al, 7Fh | |
| F000:59DB out dx, al | |
| F000:59DC jmp short $+2 | |
| F000:59DE sub dx, 3 | |
| F000:59E1 in al, dx | |
| F000:59E2 pop dx | |
| F000:59E3 retn | |
| F000:59E3 diag_send_serial_cmds endp | |
| F000:59E4 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:59E4 diag_out_something proc near ; CODE XREF: int_8c_diag_modem+9Dp | |
| F000:59E4 ; int_84+8p | |
| F000:59E4 mov al, 0Fh | |
| F000:59E6 out dx, al | |
| F000:59E7 jmp short $+2 | |
| F000:59E9 add dx, 4 | |
| F000:59EC diag_out_something2: ; CODE XREF: int_8c_diag_modem+D7p | |
| F000:59EC in al, dx | |
| F000:59ED jmp short $+2 | |
| F000:59EF sub dx, 5 | |
| F000:59F2 in al, dx | |
| F000:59F3 jmp short $+2 | |
| F000:59F5 inc dx | |
| F000:59F6 inc dx | |
| F000:59F7 in al, dx | |
| F000:59F8 jmp short $+2 | |
| F000:59FA add dx, 4 | |
| F000:59FD in al, dx | |
| F000:59FE jmp short $+2 | |
| F000:5A00 sub dx, 6 | |
| F000:5A03 in al, dx | |
| F000:5A04 sub cx, cx | |
| F000:5A06 l0: ; CODE XREF: diag_out_something:l0j | |
| F000:5A06 loop l0 | |
| F000:5A08 retn | |
| F000:5A08 diag_out_something endp | |
| F000:5A09 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5A09 diag_check_kbd_break proc near ; CODE XREF: int_87_diag_diskette+B7p | |
| F000:5A09 ; int_87_diag_diskette+D7p | |
| F000:5A09 ; int_87_diag_diskette:l11p | |
| F000:5A09 ; int_87_diag_diskette+FCp | |
| F000:5A09 ; int_87_diag_diskette+106p | |
| F000:5A09 ; int_87_diag_diskette+110p ... | |
| F000:5A09 push ds | |
| F000:5A0A push ax | |
| F000:5A0B mov ax, 40h ; '@' | |
| F000:5A0E mov ds, ax | |
| F000:5A10 mov al, ds:seg40.bios_break | |
| F000:5A13 shl al, 1 | |
| F000:5A15 jnb short l1 | |
| F000:5A17 mov dx, 3F20h | |
| F000:5A1A mov bx, 0FFFFh | |
| F000:5A1D l1: ; CODE XREF: diag_check_kbd_break+Cj | |
| F000:5A1D pop ax | |
| F000:5A1E pop ds | |
| F000:5A1F retn | |
| F000:5A1F diag_check_kbd_break endp | |
| F000:5A20 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5A20 ds_40 proc near ; CODE XREF: int_80_diag_initp | |
| F000:5A20 ; diag_run_action_mfg+Fp | |
| F000:5A20 ; diag_run_action_mfg+BFp | |
| F000:5A20 ; diag_run_action+14p | |
| F000:5A20 ; int_8e_diag_serial_printer?+3p | |
| F000:5A20 ; int_8f_diag_rs232p | |
| F000:5A20 push ax | |
| F000:5A21 mov ax, 40h ; '@' | |
| F000:5A24 mov ds, ax | |
| F000:5A26 pop ax | |
| F000:5A27 retn | |
| F000:5A27 ds_40 endp | |
| F000:5A28 byte_F5A28 db 1Fh, 3Fh, 7Fh, 0FFh ; DATA XREF: int_84+11o | |
| F000:5A2C ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5A2C ; int 0x84 | |
| F000:5A2C ; intput: | |
| F000:5A2C ; dx = port? | |
| F000:5A2C int_84 proc far ; DATA XREF: F000:4008o | |
| F000:5A2C sti | |
| F000:5A2D push ds | |
| F000:5A2E call ds_50 ; ds = 0x50 | |
| F000:5A31 mov ds:seg50.wrap_flag, al | |
| F000:5A34 call diag_out_something | |
| F000:5A37 add dx, 3 | |
| F000:5A3A in al, dx | |
| F000:5A3B and al, 3 | |
| F000:5A3D mov si, offset byte_F5A28 | |
| F000:5A40 mov ah, 0 | |
| F000:5A42 add si, ax | |
| F000:5A44 mov bh, cs:[si] | |
| F000:5A47 inc dx | |
| F000:5A48 inc dx | |
| F000:5A49 in al, dx | |
| F000:5A4A jmp short $+2 | |
| F000:5A4C and al, 0FEh | |
| F000:5A4E out dx, al | |
| F000:5A4F jmp short $+2 | |
| F000:5A51 l0: ; CODE XREF: int_84+83j | |
| F000:5A51 mov bl, 1 | |
| F000:5A53 xor cx, cx | |
| F000:5A55 l1: ; CODE XREF: int_84+2Ej | |
| F000:5A55 in al, dx | |
| F000:5A56 test al, 20h | |
| F000:5A58 jnz short l2 | |
| F000:5A5A loop l1 | |
| F000:5A5C jmp short l12 | |
| F000:5A5E db 90h ; | |
| F000:5A5F l2: ; CODE XREF: int_84+2Cj | |
| F000:5A5F inc bl | |
| F000:5A61 sub dx, 5 | |
| F000:5A64 mov al, bh | |
| F000:5A66 out dx, al | |
| F000:5A67 inc dx | |
| F000:5A68 inc dx | |
| F000:5A69 mov cx, 3 | |
| F000:5A6C l3: ; CODE XREF: int_84:l6j | |
| F000:5A6C push cx | |
| F000:5A6D call sub_F59B3 | |
| F000:5A70 pop cx | |
| F000:5A71 cmp al, 4 | |
| F000:5A73 jz short l7 | |
| F000:5A75 cmp al, 6 | |
| F000:5A77 jz short l4 | |
| F000:5A79 cmp al, 0 | |
| F000:5A7B jnz short l6 | |
| F000:5A7D l4: ; CODE XREF: int_84+4Bj | |
| F000:5A7D mov ah, ds:4 | |
| F000:5A81 or ah, ah | |
| F000:5A83 jnz short l12 | |
| F000:5A85 add dx, 3 | |
| F000:5A88 in al, dx | |
| F000:5A89 jmp short $+2 | |
| F000:5A8B inc dx | |
| F000:5A8C in al, dx | |
| F000:5A8D push cx | |
| F000:5A8E xor cx, cx | |
| F000:5A90 l5: ; CODE XREF: int_84:l5j | |
| F000:5A90 loop l5 | |
| F000:5A92 pop cx | |
| F000:5A93 sub dx, 4 | |
| F000:5A96 l6: ; CODE XREF: int_84+4Fj | |
| F000:5A96 loop l3 | |
| F000:5A98 jmp short l12 | |
| F000:5A9A l7: ; CODE XREF: int_84+47j | |
| F000:5A9A inc bl | |
| F000:5A9C dec dx | |
| F000:5A9D dec dx | |
| F000:5A9E mov cx, 1000h | |
| F000:5AA1 l8: ; CODE XREF: int_84+7Aj | |
| F000:5AA1 in al, dx | |
| F000:5AA2 cmp bh, al | |
| F000:5AA4 jz short l9 | |
| F000:5AA6 loop l8 | |
| F000:5AA8 jmp short l12 | |
| F000:5AAA l9: ; CODE XREF: int_84+78j | |
| F000:5AAA add dx, 5 | |
| F000:5AAD dec bh | |
| F000:5AAF jnz short l0 | |
| F000:5AB1 mov ah, ds:seg50.wrap_flag | |
| F000:5AB5 or ah, ah | |
| F000:5AB7 jnz short l10 | |
| F000:5AB9 mov bh, 10h | |
| F000:5ABB l10: ; CODE XREF: int_84+8Bj | |
| F000:5ABB dec dx | |
| F000:5ABC inc bl | |
| F000:5ABE push bx | |
| F000:5ABF call sub_F5AD9 | |
| F000:5AC2 pop bx | |
| F000:5AC3 jb short l14 | |
| F000:5AC5 dec dx | |
| F000:5AC6 inc bl | |
| F000:5AC8 xor cx, cx | |
| F000:5ACA l11: ; CODE XREF: int_84+A3j | |
| F000:5ACA in al, dx | |
| F000:5ACB test al, 40h | |
| F000:5ACD jnz short l13 | |
| F000:5ACF loop l11 | |
| F000:5AD1 l12: ; CODE XREF: int_84+30j | |
| F000:5AD1 ; int_84+57j int_84+6Cj | |
| F000:5AD1 ; int_84+7Cj | |
| F000:5AD1 stc | |
| F000:5AD2 jmp short l14 | |
| F000:5AD4 l13: ; CODE XREF: int_84+A1j | |
| F000:5AD4 clc | |
| F000:5AD5 l14: ; CODE XREF: int_84+97j | |
| F000:5AD5 ; int_84+A6j | |
| F000:5AD5 pop ds | |
| F000:5AD6 retf 2 | |
| F000:5AD6 int_84 endp | |
| F000:5AD9 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5AD9 sub_F5AD9 proc near ; CODE XREF: int_84+93p | |
| F000:5AD9 mov al, bh | |
| F000:5ADB call loc_F5B78 | |
| F000:5ADE mov al, 1 | |
| F000:5AE0 call sub_F5B74 | |
| F000:5AE3 xor al, 22h | |
| F000:5AE5 jnz short l0 | |
| F000:5AE7 call loc_F5B7D | |
| F000:5AEA xor al, 20h | |
| F000:5AEC jnz short l0 | |
| F000:5AEE mov al, 0 | |
| F000:5AF0 call sub_F5B74 | |
| F000:5AF3 xor al, 2 | |
| F000:5AF5 jnz short l_ret_error | |
| F000:5AF7 call loc_F5B7D | |
| F000:5AFA xor al, 0 | |
| F000:5AFC l0: ; CODE XREF: sub_F5AD9+Cj | |
| F000:5AFC ; sub_F5AD9+13j | |
| F000:5AFC jnz short l_ret_error | |
| F000:5AFE mov al, 2 | |
| F000:5B00 call sub_F5B74 | |
| F000:5B03 mov bl, 11h | |
| F000:5B05 or bh, bh | |
| F000:5B07 jnz short l1 | |
| F000:5B09 or bl, 88h | |
| F000:5B0C l1: ; CODE XREF: sub_F5AD9+2Ej | |
| F000:5B0C xor al, bl | |
| F000:5B0E jnz short l_ret_error | |
| F000:5B10 call loc_F5B7D | |
| F000:5B13 mov bl, 10h | |
| F000:5B15 or bh, bh | |
| F000:5B17 jnz short l2 | |
| F000:5B19 or bl, 80h | |
| F000:5B1C l2: ; CODE XREF: sub_F5AD9+3Ej | |
| F000:5B1C xor al, bl | |
| F000:5B1E jnz short l_ret_error | |
| F000:5B20 mov al, 0 | |
| F000:5B22 call sub_F5B74 | |
| F000:5B25 mov bl, 1 | |
| F000:5B27 or bh, bh | |
| F000:5B29 jnz short l3 | |
| F000:5B2B or bl, 8 | |
| F000:5B2E l3: ; CODE XREF: sub_F5AD9+50j | |
| F000:5B2E xor al, bl | |
| F000:5B30 jnz short l_ret_error | |
| F000:5B32 call loc_F5B7D | |
| F000:5B35 xor al, 0 | |
| F000:5B37 jnz short l_ret_error | |
| F000:5B39 or bh, bh | |
| F000:5B3B jz short l_ret_ok | |
| F000:5B3D mov al, 4 | |
| F000:5B3F call sub_F5B74 | |
| F000:5B42 xor al, 40h | |
| F000:5B44 jnz short l_ret_error | |
| F000:5B46 mov al, 0 | |
| F000:5B48 call sub_F5B74 | |
| F000:5B4B xor al, 4 | |
| F000:5B4D jnz short l_ret_error | |
| F000:5B4F in al, dx | |
| F000:5B50 xor al, 0 | |
| F000:5B52 jnz short l_ret_error | |
| F000:5B54 mov al, 8 | |
| F000:5B56 call sub_F5B74 | |
| F000:5B59 xor al, 88h | |
| F000:5B5B jnz short l_ret_error | |
| F000:5B5D in al, dx | |
| F000:5B5E xor al, 80h | |
| F000:5B60 jnz short l_ret_error | |
| F000:5B62 mov al, 0 | |
| F000:5B64 call sub_F5B74 | |
| F000:5B67 xor al, 8 | |
| F000:5B69 jnz short l_ret_error | |
| F000:5B6B in al, dx | |
| F000:5B6C xor al, 0 | |
| F000:5B6E jnz short l_ret_error | |
| F000:5B70 l_ret_ok: ; CODE XREF: sub_F5AD9+62j | |
| F000:5B70 clc | |
| F000:5B71 retn | |
| F000:5B72 l_ret_error: ; CODE XREF: sub_F5AD9+1Cj | |
| F000:5B72 ; sub_F5AD9:l0j | |
| F000:5B72 ; sub_F5AD9+35j | |
| F000:5B72 ; sub_F5AD9+45j | |
| F000:5B72 ; sub_F5AD9+57j | |
| F000:5B72 ; sub_F5AD9+5Ej ... | |
| F000:5B72 stc | |
| F000:5B73 retn | |
| F000:5B73 sub_F5AD9 endp | |
| F000:5B74 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5B74 sub_F5B74 proc near ; CODE XREF: sub_F5AD9+7p | |
| F000:5B74 ; sub_F5AD9+17p | |
| F000:5B74 ; sub_F5AD9+27p | |
| F000:5B74 ; sub_F5AD9+49p | |
| F000:5B74 ; sub_F5AD9+66p | |
| F000:5B74 ; sub_F5AD9+6Fp ... | |
| F000:5B74 dec dx | |
| F000:5B75 dec dx | |
| F000:5B76 or al, bh | |
| F000:5B78 loc_F5B78: ; CODE XREF: sub_F5AD9+2p | |
| F000:5B78 out dx, al | |
| F000:5B79 jmp short $+2 | |
| F000:5B7B inc dx | |
| F000:5B7C inc dx | |
| F000:5B7D loc_F5B7D: ; CODE XREF: sub_F5AD9+Ep | |
| F000:5B7D ; sub_F5AD9+1Ep | |
| F000:5B7D ; sub_F5AD9+37p | |
| F000:5B7D ; sub_F5AD9+59p | |
| F000:5B7D in al, dx | |
| F000:5B7E or bh, bh | |
| F000:5B80 jnz short locret | |
| F000:5B82 and al, 0BBh | |
| F000:5B84 locret: ; CODE XREF: sub_F5B74+Cj | |
| F000:5B84 retn | |
| F000:5B84 sub_F5B74 endp | |
| F000:5B85 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5B85 ; cx = delay len | |
| F000:5B85 diag_delay proc near ; CODE XREF: diag_anim_disk_and_wait_for_mpnp+24p | |
| F000:5B85 ; diag_anim_disk_and_wait_for_mpnp+4Cp | |
| F000:5B85 ; diag_anim_disk_and_wait_for_mpnp+63p | |
| F000:5B85 ; diag_anim_disk_and_wait_for_mpnp+7Bp | |
| F000:5B85 ; diag_anim_disk_and_wait_for_mpnp+9Ap | |
| F000:5B85 ; int_8a_diag_sound+27p ... | |
| F000:5B85 push cx | |
| F000:5B86 mov cx, 3340h | |
| F000:5B89 l0: ; CODE XREF: diag_delay:l0j | |
| F000:5B89 loop l0 | |
| F000:5B8B pop cx | |
| F000:5B8C loop diag_delay | |
| F000:5B8E retn | |
| F000:5B8E diag_delay endp | |
| F000:5B8F ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5B8F ; input: | |
| F000:5B8F ; ah = 0 -> short beep | |
| F000:5B8F ; ah = 1 -> long beep | |
| F000:5B8F diag_beeper_test proc near ; CODE XREF: int_8a_diag_sound+21p | |
| F000:5B8F push ax | |
| F000:5B90 push cx | |
| F000:5B91 or ah, ah | |
| F000:5B93 mov cx, 1 ; beeper sound duration | |
| F000:5B96 jz short l0 | |
| F000:5B98 dec ah | |
| F000:5B9A mov cx, 0Ah ; beeper sound duration | |
| F000:5B9D jz short l0 | |
| F000:5B9F pop cx | |
| F000:5BA0 pop ax | |
| F000:5BA1 retn | |
| F000:5BA2 l0: ; CODE XREF: diag_beeper_test+7j | |
| F000:5BA2 ; diag_beeper_test+Ej | |
| F000:5BA2 mov al, 10110110b ; tim 2, lsb/msb, square wave, binary | |
| F000:5BA4 out 43h, al | |
| F000:5BA6 mov ax, 215h | |
| F000:5BA9 out 42h, al ; write lsb | |
| F000:5BAB mov al, ah | |
| F000:5BAD out 42h, al ; write msb | |
| F000:5BAF in al, 61h | |
| F000:5BB1 or al, 3 ; enable speaker | |
| F000:5BB3 out 61h, al | |
| F000:5BB5 call diag_delay ; do delay based on cx | |
| F000:5BB8 in al, 61h | |
| F000:5BBA and al, 0FCh ; disable speaker | |
| F000:5BBC out 61h, al | |
| F000:5BBE mov cx, 1 | |
| F000:5BC1 call diag_delay ; short delay | |
| F000:5BC4 pop cx | |
| F000:5BC5 pop ax | |
| F000:5BC6 retn | |
| F000:5BC6 diag_beeper_test endp | |
| F000:5BC7 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5BC7 ; int 0x8d | |
| F000:5BC7 ; test parallel printer (graphics printer) | |
| F000:5BC7 ; intput: | |
| F000:5BC7 ; ah = 'A','B','C','D' or 0xff | |
| F000:5BC7 ; 'A','B': same tests | |
| F000:5BC7 ; 'C','D',0xff: same tests | |
| F000:5BC7 ; output: | |
| F000:5BC7 ; dl/dh: error message | |
| F000:5BC7 int_8d_diag_parallel_printer proc far ; DATA XREF: F000:401Ao | |
| F000:5BC7 ; FUNCTION CHUNK AT F000:5CA5 SIZE 00000006 BYTES | |
| F000:5BC7 ; FUNCTION CHUNK AT F000:5CC4 SIZE 000000DF BYTES | |
| F000:5BC7 xor bx, bx | |
| F000:5BC9 xor di, di | |
| F000:5BCB mov dx, ds:seg40.printer_base | |
| F000:5BCF or ah, ah | |
| F000:5BD1 jz short l2 | |
| F000:5BD3 cmp ah, 1 | |
| F000:5BD6 jnz short l0 | |
| F000:5BD8 mov bl, 5Ah ; 'Z' | |
| F000:5BDA jmp short l2 | |
| F000:5BDC l0: ; CODE XREF: int_8d_diag_parallel_printer+Fj | |
| F000:5BDC mov ch, 1 | |
| F000:5BDE cmp ah, 41h ; 'A' | |
| F000:5BE1 jz short run_test_ab | |
| F000:5BE3 cmp ah, 43h ; 'C' | |
| F000:5BE6 jz short run_test_cd | |
| F000:5BE8 cmp ah, 0FFh | |
| F000:5BEB jz short run_test_cd | |
| F000:5BED mov dx, ds:seg40.printer_base+2 | |
| F000:5BF1 inc di | |
| F000:5BF2 mov ch, 2 | |
| F000:5BF4 cmp ah, 42h ; 'B' | |
| F000:5BF7 jz short run_test_ab | |
| F000:5BF9 cmp ah, 44h ; 'D' | |
| F000:5BFC jz short run_test_cd | |
| F000:5BFE iret | |
| F000:5BFF run_test_ab: ; CODE XREF: int_8d_diag_parallel_printer+1Aj | |
| F000:5BFF ; int_8d_diag_parallel_printer+30j | |
| F000:5BFF jmp test_ab | |
| F000:5C02 l2: ; CODE XREF: int_8d_diag_parallel_printer+Aj | |
| F000:5C02 ; int_8d_diag_parallel_printer+13j | |
| F000:5C02 push dx | |
| F000:5C03 mov bp, offset unk_F5E5C | |
| F000:5C06 mov al, 0Bh | |
| F000:5C08 int 81h ; reserved for BASIC | |
| F000:5C0A int 82h ; reserved for BASIC | |
| F000:5C0C pop ax | |
| F000:5C0D cmp ax, 2F8h | |
| F000:5C10 mov al, 0 | |
| F000:5C12 jz short l3 | |
| F000:5C14 int 11h ; EQUIPMENT DETERMINATION | |
| F000:5C14 ; Return: AX = equipment flag bits | |
| F000:5C16 mov cl, 0Eh | |
| F000:5C18 shr ax, cl | |
| F000:5C1A l3: ; CODE XREF: int_8d_diag_parallel_printer+4Bj | |
| F000:5C1A cmp al, 1 | |
| F000:5C1C pushf | |
| F000:5C1D cmp bl, 5Ah ; 'Z' | |
| F000:5C20 jz short l5 | |
| F000:5C22 mov bp, offset byte_F5E95 | |
| F000:5C25 popf | |
| F000:5C26 jl short l4 | |
| F000:5C28 jz short print_and_exit | |
| F000:5C2A mov bp, offset byte_F5E9E | |
| F000:5C2D jmp short print_and_exit | |
| F000:5C2F l4: ; CODE XREF: int_8d_diag_parallel_printer+5Fj | |
| F000:5C2F mov bp, offset unk_F5E8D | |
| F000:5C32 jmp short print_and_exit | |
| F000:5C34 l5: ; CODE XREF: int_8d_diag_parallel_printer+59j | |
| F000:5C34 mov bp, offset byte_F5EBA | |
| F000:5C37 popf | |
| F000:5C38 jl short l6 | |
| F000:5C3A jz short print_and_exit | |
| F000:5C3C mov bp, offset byte_F5EC9 | |
| F000:5C3F jmp short print_and_exit | |
| F000:5C41 l6: ; CODE XREF: int_8d_diag_parallel_printer+71j | |
| F000:5C41 mov bp, offset byte_F5EAD | |
| F000:5C44 print_and_exit: ; CODE XREF: int_8d_diag_parallel_printer+61j | |
| F000:5C44 ; int_8d_diag_parallel_printer+66j | |
| F000:5C44 ; int_8d_diag_parallel_printer+6Bj | |
| F000:5C44 ; int_8d_diag_parallel_printer+73j | |
| F000:5C44 ; int_8d_diag_parallel_printer+78j | |
| F000:5C44 int 82h ; reserved for BASIC | |
| F000:5C46 iret | |
| F000:5C47 run_test_cd: ; CODE XREF: int_8d_diag_parallel_printer+1Fj | |
| F000:5C47 ; int_8d_diag_parallel_printer+24j | |
| F000:5C47 ; int_8d_diag_parallel_printer+35j | |
| F000:5C47 call near ptr sub_F5E19 | |
| F000:5C4A mov bl, 5Ah ; 'Z' | |
| F000:5C4C call sub_F5DA9 | |
| F000:5C4F push ax | |
| F000:5C50 l9: ; CODE XREF: int_8d_diag_parallel_printer+193j | |
| F000:5C50 xor ax, ax | |
| F000:5C52 mov cx, 100h | |
| F000:5C55 l10: ; CODE XREF: int_8d_diag_parallel_printer+97j | |
| F000:5C55 out dx, al | |
| F000:5C56 in al, dx | |
| F000:5C57 cmp al, ah | |
| F000:5C59 jnz short l13 | |
| F000:5C5B add ax, 101h | |
| F000:5C5E loop l10 | |
| F000:5C60 out dx, al | |
| F000:5C61 mov al, 0EFh ; 'ï' | |
| F000:5C63 call sub_F5DAF | |
| F000:5C66 call sub_F5DA9 | |
| F000:5C69 and al, 0Fh | |
| F000:5C6B cmp al, 0Fh | |
| F000:5C6D jnz short l14 | |
| F000:5C6F mov cx, 3 | |
| F000:5C72 mov ax, 101h | |
| F000:5C75 l11: ; CODE XREF: int_8d_diag_parallel_printer+C3j | |
| F000:5C75 ; int_8d_diag_parallel_printer+CCj | |
| F000:5C75 call sub_F5DAF | |
| F000:5C78 push cx | |
| F000:5C79 mov cx, 1000h | |
| F000:5C7C l12: ; CODE XREF: int_8d_diag_parallel_printer:l12j | |
| F000:5C7C loop l12 | |
| F000:5C7E pop cx | |
| F000:5C7F call sub_F5DA9 | |
| F000:5C82 and al, 17h | |
| F000:5C84 cmp al, ah | |
| F000:5C86 jnz short l14 | |
| F000:5C88 rol ax, 1 | |
| F000:5C8A loop l11 | |
| F000:5C8C cmp al, 0 | |
| F000:5C8E mov ax, 0 | |
| F000:5C91 mov cl, 1 | |
| F000:5C93 jnz short l11 | |
| F000:5C95 cmp bl, 5Ah ; 'Z' | |
| F000:5C98 jz short loc_F5CC4 | |
| F000:5C9A jmp loc_F5D66 | |
| F000:5C9D l13: ; CODE XREF: int_8d_diag_parallel_printer+92j | |
| F000:5C9D mov bh, 45h ; 'E' | |
| F000:5C9F jmp short loc_F5CAB | |
| F000:5CA1 l14: ; CODE XREF: int_8d_diag_parallel_printer+A6j | |
| F000:5CA1 ; int_8d_diag_parallel_printer+BFj | |
| F000:5CA1 mov bh, 46h ; 'F' | |
| F000:5CA3 jmp short loc_F5CAB | |
| F000:5CA3 int_8d_diag_parallel_printer endp | |
| F000:5CA5 ; START OF FUNCTION CHUNK FOR int_8d_diag_parallel_printer | |
| F000:5CA5 loc_F5CA5: ; CODE XREF: int_8d_diag_parallel_printer+102j | |
| F000:5CA5 ; int_8d_diag_parallel_printer+10Cj | |
| F000:5CA5 ; int_8d_diag_parallel_printer+11Bj | |
| F000:5CA5 ; int_8d_diag_parallel_printer+127j | |
| F000:5CA5 ; int_8d_diag_parallel_printer+13Cj | |
| F000:5CA5 ; int_8d_diag_parallel_printer+14Fj | |
| F000:5CA5 mov bh, 47h ; 'G' | |
| F000:5CA7 jmp short loc_F5CAB | |
| F000:5CA9 loc_F5CA9: ; CODE XREF: int_8d_diag_parallel_printer:loc_F5D32j | |
| F000:5CA9 mov bh, 48h ; 'H' | |
| F000:5CA9 ; END OF FUNCTION CHUNK FOR int_8d_diag_parallel_printer | |
| F000:5CAB ; START OF FUNCTION CHUNK FOR diag_printer_something | |
| F000:5CAB loc_F5CAB: ; CODE XREF: int_8d_diag_parallel_printer+D8j | |
| F000:5CAB ; int_8d_diag_parallel_printer+DCj | |
| F000:5CAB ; int_8d_diag_parallel_printer+E0j | |
| F000:5CAB ; int_8d_diag_parallel_printer:loc_F5D35j | |
| F000:5CAB ; int_8d_diag_parallel_printer:loc_F5D63j | |
| F000:5CAB ; diag_printer_something+16j | |
| F000:5CAB pop ax | |
| F000:5CAC call sub_F5DAF | |
| F000:5CAF loc_F5CAF: ; CODE XREF: int_8d_diag_parallel_printer+1D9j | |
| F000:5CAF ; sub_F5E19+19j | |
| F000:5CAF mov bl, 0 | |
| F000:5CB1 xor dx, dx | |
| F000:5CB3 or bh, bh | |
| F000:5CB5 jz short loc_F5CC0 | |
| F000:5CB7 mov dh, bh | |
| F000:5CB9 cmp dh, 45h ; 'E' | |
| F000:5CBC jle short loc_F5CC0 | |
| F000:5CBE mov dh, 45h ; 'E' | |
| F000:5CC0 loc_F5CC0: ; CODE XREF: diag_printer_something-14Bj | |
| F000:5CC0 ; diag_printer_something-144j | |
| F000:5CC0 stc | |
| F000:5CC1 retf 2 | |
| F000:5CC1 ; END OF FUNCTION CHUNK FOR diag_printer_something | |
| F000:5CC4 ; START OF FUNCTION CHUNK FOR int_8d_diag_parallel_printer | |
| F000:5CC4 loc_F5CC4: ; CODE XREF: int_8d_diag_parallel_printer+D1j | |
| F000:5CC4 call sub_F5DA3 | |
| F000:5CC7 cmp al, 30h ; '0' | |
| F000:5CC9 jnz short loc_F5CA5 | |
| F000:5CCB mov al, 1 | |
| F000:5CCD out dx, al | |
| F000:5CCE call sub_F5DA3 | |
| F000:5CD1 cmp al, 38h ; '8' | |
| F000:5CD3 jnz short loc_F5CA5 | |
| F000:5CD5 mov al, 0 | |
| F000:5CD7 out dx, al | |
| F000:5CD8 mov al, 1 | |
| F000:5CDA call sub_F5DAF | |
| F000:5CDD call sub_F5DA3 | |
| F000:5CE0 cmp al, 20h ; ' ' | |
| F000:5CE2 jnz short loc_F5CA5 | |
| F000:5CE4 mov al, 2 | |
| F000:5CE6 call sub_F5DAF | |
| F000:5CE9 call sub_F5DA3 | |
| F000:5CEC cmp al, 10h | |
| F000:5CEE jnz short loc_F5CA5 | |
| F000:5CF0 mov cx, 2 | |
| F000:5CF3 mov ax, 4004h | |
| F000:5CF6 loc_F5CF6: ; CODE XREF: int_8d_diag_parallel_printer+140j | |
| F000:5CF6 call sub_F5DAF | |
| F000:5CF9 push ax | |
| F000:5CFA call sub_F5DA3 | |
| F000:5CFD or ah, 30h | |
| F000:5D00 cmp al, ah | |
| F000:5D02 pop ax | |
| F000:5D03 jnz short loc_F5CA5 | |
| F000:5D05 rol ax, 1 | |
| F000:5D07 loop loc_F5CF6 | |
| F000:5D09 mov al, 0Ch | |
| F000:5D0B call sub_F5DAF | |
| F000:5D0E mov al, 1 | |
| F000:5D10 out dx, al | |
| F000:5D11 call sub_F5DA3 | |
| F000:5D14 cmp al, 0F8h ; 'ø' | |
| F000:5D16 jnz short loc_F5CA5 | |
| F000:5D18 mov al, 0 | |
| F000:5D1A call sub_F5DAF | |
| F000:5D1D call sub_F5DB5 | |
| F000:5D20 cmp al, 0 | |
| F000:5D22 jz short loc_F5D26 | |
| F000:5D24 jmp short loc_F5D32 | |
| F000:5D26 loc_F5D26: ; CODE XREF: int_8d_diag_parallel_printer+15Bj | |
| F000:5D26 mov al, 10h | |
| F000:5D28 call sub_F5DAF | |
| F000:5D2B call sub_F5DB5 | |
| F000:5D2E cmp al, 1 | |
| F000:5D30 jz short loc_F5D35 | |
| F000:5D32 loc_F5D32: ; CODE XREF: int_8d_diag_parallel_printer+15Dj | |
| F000:5D32 jmp loc_F5CA9 | |
| F000:5D35 loc_F5D35: ; CODE XREF: int_8d_diag_parallel_printer+169j | |
| F000:5D35 jmp loc_F5CAB | |
| F000:5D38 test_ab: ; CODE XREF: int_8d_diag_parallel_printer:run_test_abj | |
| F000:5D38 call near ptr sub_F5E19 | |
| F000:5D3B mov al, 0 | |
| F000:5D3D call sub_F5DAF | |
| F000:5D40 mov cx, 100h | |
| F000:5D43 loc_F5D43: ; CODE XREF: int_8d_diag_parallel_printer:loc_F5D43j | |
| F000:5D43 loop loc_F5D43 | |
| F000:5D45 mov al, 0Ch | |
| F000:5D47 call sub_F5DAF | |
| F000:5D4A push ax | |
| F000:5D4B loc_F5D4B: ; CODE XREF: int_8d_diag_parallel_printer:loc_F5D4Bj | |
| F000:5D4B loop loc_F5D4B | |
| F000:5D4D loc_F5D4D: ; CODE XREF: int_8d_diag_parallel_printer:loc_F5D4Dj | |
| F000:5D4D loop loc_F5D4D | |
| F000:5D4F loc_F5D4F: ; CODE XREF: int_8d_diag_parallel_printer:loc_F5D4Fj | |
| F000:5D4F loop loc_F5D4F | |
| F000:5D51 call sub_F5DA3 | |
| F000:5D54 mov bh, 42h ; 'B' | |
| F000:5D56 cmp al, 0D8h ; 'Ø' | |
| F000:5D58 jnz short loc_F5D5D | |
| F000:5D5A jmp l9 | |
| F000:5D5D loc_F5D5D: ; CODE XREF: int_8d_diag_parallel_printer+191j | |
| F000:5D5D cmp al, 60h ; '`' | |
| F000:5D5F jz short loc_F5D63 | |
| F000:5D61 inc bh | |
| F000:5D63 loc_F5D63: ; CODE XREF: int_8d_diag_parallel_printer+198j | |
| F000:5D63 jmp loc_F5CAB | |
| F000:5D66 loc_F5D66: ; CODE XREF: int_8d_diag_parallel_printer+D3j | |
| F000:5D66 pop ax | |
| F000:5D67 call sub_F5DAF | |
| F000:5D6A push cs | |
| F000:5D6B pop ds | |
| F000:5D6C mov si, 5EE4h | |
| F000:5D6F xor ax, ax | |
| F000:5D71 xor cx, cx | |
| F000:5D73 loc_F5D73: ; CODE XREF: int_8d_diag_parallel_printer+1C2j | |
| F000:5D73 lodsb | |
| F000:5D74 cmp al, 0FFh | |
| F000:5D76 jz short loc_F5D8B | |
| F000:5D78 mov cl, al | |
| F000:5D7A loc_F5D7A: ; CODE XREF: int_8d_diag_parallel_printer+1B7j | |
| F000:5D7A lodsb | |
| F000:5D7B call diag_printer_something_pre | |
| F000:5D7E loop loc_F5D7A | |
| F000:5D80 lodsb | |
| F000:5D81 mov cl, al | |
| F000:5D83 loc_F5D83: ; CODE XREF: int_8d_diag_parallel_printer+1C0j | |
| F000:5D83 lodsb | |
| F000:5D84 call diag_printer_something_prepre | |
| F000:5D87 loop loc_F5D83 | |
| F000:5D89 jmp short loc_F5D73 | |
| F000:5D8B loc_F5D8B: ; CODE XREF: int_8d_diag_parallel_printer+1AFj | |
| F000:5D8B ; int_8d_diag_parallel_printer+1D0j | |
| F000:5D8B ; int_8d_diag_parallel_printer+1D5j | |
| F000:5D8B lodsb | |
| F000:5D8C cmp al, 0FFh | |
| F000:5D8E jz short loc_F5D99 | |
| F000:5D90 cmp al, 0FEh ; 'þ' | |
| F000:5D92 jz short loc_F5D9E | |
| F000:5D94 call diag_printer_something_pre | |
| F000:5D97 jmp short loc_F5D8B | |
| F000:5D99 loc_F5D99: ; CODE XREF: int_8d_diag_parallel_printer+1C7j | |
| F000:5D99 call sub_F5E36 | |
| F000:5D9C jmp short loc_F5D8B | |
| F000:5D9E loc_F5D9E: ; CODE XREF: int_8d_diag_parallel_printer+1CBj | |
| F000:5D9E mov bh, 0 | |
| F000:5DA0 jmp loc_F5CAF | |
| F000:5DA0 ; END OF FUNCTION CHUNK FOR int_8d_diag_parallel_printer | |
| F000:5DA3 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5DA3 sub_F5DA3 proc near ; CODE XREF: int_8d_diag_parallel_printer:loc_F5CC4p | |
| F000:5DA3 ; int_8d_diag_parallel_printer+107p | |
| F000:5DA3 ; int_8d_diag_parallel_printer+116p | |
| F000:5DA3 ; int_8d_diag_parallel_printer+122p | |
| F000:5DA3 ; int_8d_diag_parallel_printer+133p | |
| F000:5DA3 ; int_8d_diag_parallel_printer+14Ap ... | |
| F000:5DA3 inc dx | |
| F000:5DA4 in al, dx | |
| F000:5DA5 dec dx | |
| F000:5DA6 and al, 0F8h | |
| F000:5DA8 retn | |
| F000:5DA8 sub_F5DA3 endp | |
| F000:5DA9 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5DA9 sub_F5DA9 proc near ; CODE XREF: int_8d_diag_parallel_printer+85p | |
| F000:5DA9 ; int_8d_diag_parallel_printer+9Fp | |
| F000:5DA9 ; int_8d_diag_parallel_printer+B8p | |
| F000:5DA9 ; sub_F5DB5+11p | |
| F000:5DA9 inc dx | |
| F000:5DAA inc dx | |
| F000:5DAB in al, dx | |
| F000:5DAC dec dx | |
| F000:5DAD dec dx | |
| F000:5DAE retn | |
| F000:5DAE sub_F5DA9 endp | |
| F000:5DAF ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5DAF sub_F5DAF proc near ; CODE XREF: int_8d_diag_parallel_printer+9Cp | |
| F000:5DAF ; int_8d_diag_parallel_printer:l11p | |
| F000:5DAF ; diag_printer_something-154p | |
| F000:5DAF ; int_8d_diag_parallel_printer+113p | |
| F000:5DAF ; int_8d_diag_parallel_printer+11Fp | |
| F000:5DAF ; int_8d_diag_parallel_printer:loc_F5CF6p ... | |
| F000:5DAF inc dx | |
| F000:5DB0 inc dx | |
| F000:5DB1 out dx, al | |
| F000:5DB2 dec dx | |
| F000:5DB3 dec dx | |
| F000:5DB4 retn | |
| F000:5DB4 sub_F5DAF endp | |
| F000:5DB5 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5DB5 sub_F5DB5 proc near ; CODE XREF: int_8d_diag_parallel_printer+156p | |
| F000:5DB5 ; int_8d_diag_parallel_printer+164p | |
| F000:5DB5 in al, 21h ; Interrupt controller, 8259A. | |
| F000:5DB7 push ax | |
| F000:5DB8 and al, 1111111b ; enable interrupt lvl 7 (i/o channel, parallel printer) | |
| F000:5DBA out 21h, al | |
| F000:5DBC sti | |
| F000:5DBD xor cx, cx | |
| F000:5DBF delay0: ; CODE XREF: sub_F5DB5:delay0j | |
| F000:5DBF loop delay0 | |
| F000:5DC1 mov byte ptr ds:loc_F0083+1, 0 | |
| F000:5DC6 call sub_F5DA9 | |
| F000:5DC9 xor al, 4 | |
| F000:5DCB call sub_F5DAF | |
| F000:5DCE xor al, 4 | |
| F000:5DD0 call sub_F5DAF | |
| F000:5DD3 delay1: ; CODE XREF: sub_F5DB5:delay1j | |
| F000:5DD3 loop delay1 | |
| F000:5DD5 pop ax | |
| F000:5DD6 out 21h, al ; restore original interrupts | |
| F000:5DD8 mov al, 0 | |
| F000:5DDA cmp byte ptr ds:loc_F0083+1, 80h ; '' | |
| F000:5DDF jnz short locret | |
| F000:5DE1 mov al, 1 | |
| F000:5DE3 locret: ; CODE XREF: sub_F5DB5+2Aj | |
| F000:5DE3 retn | |
| F000:5DE3 sub_F5DB5 endp | |
| F000:5DE4 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5DE4 diag_printer_something_prepre proc near ; CODE XREF: int_8d_diag_parallel_printer+1BDp | |
| F000:5DE4 push cx | |
| F000:5DE5 mov cl, 10h | |
| F000:5DE7 call near ptr diag_printer_something | |
| F000:5DEA inc cx | |
| F000:5DEB mov al, 0Dh | |
| F000:5DED call near ptr diag_printer_something | |
| F000:5DF0 inc cx | |
| F000:5DF1 mov al, 0Ah | |
| F000:5DF3 call near ptr diag_printer_something | |
| F000:5DF6 pop cx | |
| F000:5DF7 retn | |
| F000:5DF7 diag_printer_something_prepre endp ; sp = 6 | |
| F000:5DF8 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5DF8 diag_printer_something_pre proc near ; CODE XREF: int_8d_diag_parallel_printer+1B4p | |
| F000:5DF8 ; int_8d_diag_parallel_printer+1CDp | |
| F000:5DF8 ; sub_F5E51:l0p | |
| F000:5DF8 push cx | |
| F000:5DF9 mov cl, 1 | |
| F000:5DFB call near ptr diag_printer_something | |
| F000:5DFE pop cx | |
| F000:5DFF retn | |
| F000:5DFF diag_printer_something_pre endp ; sp = 2 | |
| F000:5E00 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5E00 diag_printer_something proc far ; CODE XREF: diag_printer_something_prepre+3p | |
| F000:5E00 ; diag_printer_something_prepre+9p | |
| F000:5E00 ; diag_printer_something_prepre+Fp | |
| F000:5E00 ; diag_printer_something_pre+3p | |
| F000:5E00 ; diag_printer_something+Ej | |
| F000:5E00 ; FUNCTION CHUNK AT F000:5CAB SIZE 00000019 BYTES | |
| F000:5E00 xchg dx, di | |
| F000:5E02 int 17h | |
| F000:5E04 xchg dx, di | |
| F000:5E06 test ah, 28h | |
| F000:5E09 jnz short l0 | |
| F000:5E0B mov ah, 0 | |
| F000:5E0D inc ax | |
| F000:5E0E loop near ptr diag_printer_something | |
| F000:5E10 retn | |
| F000:5E11 l0: ; CODE XREF: diag_printer_something+9j | |
| F000:5E11 add sp, 4 | |
| F000:5E14 mov bh, 44h ; 'D' | |
| F000:5E16 jmp loc_F5CAB | |
| F000:5E16 diag_printer_something endp | |
| F000:5E19 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5E19 sub_F5E19 proc far ; CODE XREF: int_8d_diag_parallel_printer:run_test_cdp | |
| F000:5E19 ; int_8d_diag_parallel_printer:test_abp | |
| F000:5E19 cmp dx, 2F8h | |
| F000:5E1D jnz short l0 | |
| F000:5E1F mov al, 0 | |
| F000:5E21 jmp short l1 | |
| F000:5E23 l0: ; CODE XREF: sub_F5E19+4j | |
| F000:5E23 int 11h ; EQUIPMENT DETERMINATION | |
| F000:5E23 ; Return: AX = equipment flag bits | |
| F000:5E25 mov cl, 0Eh | |
| F000:5E27 shr ax, cl | |
| F000:5E29 l1: ; CODE XREF: sub_F5E19+8j | |
| F000:5E29 cmp al, ch | |
| F000:5E2B jge short lret | |
| F000:5E2D mov bh, 41h ; 'A' | |
| F000:5E2F add sp, 2 | |
| F000:5E32 jmp loc_F5CAF | |
| F000:5E35 lret: ; CODE XREF: sub_F5E19+12j | |
| F000:5E35 retn | |
| F000:5E35 sub_F5E19 endp | |
| F000:5E36 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5E36 sub_F5E36 proc near ; CODE XREF: int_8d_diag_parallel_printer:loc_F5D99p | |
| F000:5E36 mov cl, 2 | |
| F000:5E38 call sub_F5E51 | |
| F000:5E3B mov al, 81h ; '' | |
| F000:5E3D mov cl, 10h | |
| F000:5E3F call sub_F5E51 | |
| F000:5E42 mov al, 0FFh | |
| F000:5E44 mov cl, 2 | |
| F000:5E46 call sub_F5E51 | |
| F000:5E49 mov al, 0 | |
| F000:5E4B mov cl, 0Ah | |
| F000:5E4D call sub_F5E51 | |
| F000:5E50 retn | |
| F000:5E50 sub_F5E36 endp | |
| F000:5E51 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5E51 sub_F5E51 proc near ; CODE XREF: sub_F5E36+2p | |
| F000:5E51 ; sub_F5E36+9p sub_F5E36+10p | |
| F000:5E51 ; sub_F5E36+17p | |
| F000:5E51 pop bp | |
| F000:5E52 pop es | |
| F000:5E53 l0: ; CODE XREF: sub_F5E51+6j | |
| F000:5E53 call diag_printer_something_pre | |
| F000:5E56 dec ax | |
| F000:5E57 loop l0 | |
| F000:5E59 push es | |
| F000:5E5A push bp | |
| F000:5E5B retn | |
| F000:5E5B sub_F5E51 endp | |
| F000:5E5C unk_F5E5C db 30h ; 0 ; DATA XREF: int_8d_diag_parallel_printer+3Co | |
| F000:5E5D db 0Ah | |
| F000:5E5E db 0Ah | |
| F000:5E5F db 0Bh | |
| F000:5E60 db 3 | |
| F000:5E61 db 0DAh ; Ú | |
| F000:5E62 db 2Dh ; - | |
| F000:5E63 db 2Dh ; - | |
| F000:5E64 db 2Dh ; - | |
| F000:5E65 db 2Dh ; - | |
| F000:5E66 db 2Dh ; - | |
| F000:5E67 db 0BFh ; ¿ | |
| F000:5E68 db 0Bh | |
| F000:5E69 db 0F8h ; ø | |
| F000:5E6A db 0DAh ; Ú | |
| F000:5E6B db 0C1h ; Á | |
| F000:5E6C db 0C4h ; Ä | |
| F000:5E6D db 0C4h ; Ä | |
| F000:5E6E db 0C4h ; Ä | |
| F000:5E6F db 0C4h ; Ä | |
| F000:5E70 db 0C4h ; Ä | |
| F000:5E71 db 0C1h ; Á | |
| F000:5E72 db 0BFh ; ¿ | |
| F000:5E73 db 0Bh | |
| F000:5E74 db 0F6h ; ö | |
| F000:5E75 db 0C6h ; Æ | |
| F000:5E76 db 0B5h ; µ | |
| F000:5E77 db 20h | |
| F000:5E78 db 20h | |
| F000:5E79 db 20h | |
| F000:5E7A db 20h | |
| F000:5E7B db 20h | |
| F000:5E7C db 20h | |
| F000:5E7D db 20h | |
| F000:5E7E db 0C6h ; Æ | |
| F000:5E7F db 0B5h ; µ | |
| F000:5E80 db 0Bh | |
| F000:5E81 db 0F6h ; ö | |
| F000:5E82 db 0C0h ; À | |
| F000:5E83 db 0C4h ; Ä | |
| F000:5E84 db 0C4h ; Ä | |
| F000:5E85 db 0C4h ; Ä | |
| F000:5E86 db 0C4h ; Ä | |
| F000:5E87 db 0C4h ; Ä | |
| F000:5E88 db 0C4h ; Ä | |
| F000:5E89 db 0C4h ; Ä | |
| F000:5E8A db 0D9h ; Ù | |
| F000:5E8B db 0Ah | |
| F000:5E8C db 0FFh | |
| F000:5E8D unk_F5E8D db 2 ; DATA XREF: int_8d_diag_parallel_printer:l4o | |
| F000:5E8E db 41h ; A | |
| F000:5E8F db 74h ; t | |
| F000:5E90 db 1 | |
| F000:5E91 db 0FDh ; ý | |
| F000:5E92 db 1Fh | |
| F000:5E93 db 81h ; | |
| F000:5E94 db 0FCh ; ü | |
| F000:5E95 byte_F5E95 db 3 ; DATA XREF: int_8d_diag_parallel_printer+5Bo | |
| F000:5E96 db 87h ; | |
| F000:5E97 db 41h ; A | |
| F000:5E98 db 74h ; t | |
| F000:5E99 db 0A2h ; ¢ | |
| F000:5E9A db 0FDh ; ý | |
| F000:5E9B db 1Fh | |
| F000:5E9C db 81h ; | |
| F000:5E9D db 0FCh ; ü | |
| F000:5E9E byte_F5E9E db 7 ; DATA XREF: int_8d_diag_parallel_printer+63o | |
| F000:5E9F db 87h ; | |
| F000:5EA0 db 41h ; A | |
| F000:5EA1 db 7 | |
| F000:5EA2 db 2Ch ; , | |
| F000:5EA3 db 87h ; | |
| F000:5EA4 db 42h ; B | |
| F000:5EA5 db 73h ; s | |
| F000:5EA6 db 0A2h ; ¢ | |
| F000:5EA7 db 0A2h ; ¢ | |
| F000:5EA8 db 0A2h ; ¢ | |
| F000:5EA9 db 0FDh ; ý | |
| F000:5EAA db 1Fh | |
| F000:5EAB db 80h ; | |
| F000:5EAC db 0FCh ; ü | |
| F000:5EAD byte_F5EAD db 7 ; DATA XREF: int_8d_diag_parallel_printer:l6o | |
| F000:5EAE db 0Bh | |
| F000:5EAF db 0FAh ; ú | |
| F000:5EB0 db 41h ; A | |
| F000:5EB1 db 2Ch ; , | |
| F000:5EB2 db 43h ; C | |
| F000:5EB3 db 0Ch | |
| F000:5EB4 db 0FFh | |
| F000:5EB5 db 0 | |
| F000:5EB6 db 0FDh ; ý | |
| F000:5EB7 db 1Fh | |
| F000:5EB8 db 80h ; | |
| F000:5EB9 db 0FCh ; ü | |
| F000:5EBA byte_F5EBA db 7 ; DATA XREF: int_8d_diag_parallel_printer:l5o | |
| F000:5EBB db 87h ; | |
| F000:5EBC db 41h ; A | |
| F000:5EBD db 7 | |
| F000:5EBE db 2Ch ; , | |
| F000:5EBF db 87h ; | |
| F000:5EC0 db 43h ; C | |
| F000:5EC1 db 73h ; s | |
| F000:5EC2 db 0A2h ; ¢ | |
| F000:5EC3 db 0A2h ; ¢ | |
| F000:5EC4 db 0A2h ; ¢ | |
| F000:5EC5 db 0FDh ; ý | |
| F000:5EC6 db 1Fh | |
| F000:5EC7 db 80h ; | |
| F000:5EC8 db 0FCh ; ü | |
| F000:5EC9 byte_F5EC9 db 0Fh ; DATA XREF: int_8d_diag_parallel_printer+75o | |
| F000:5ECA db 87h ; | |
| F000:5ECB db 41h ; A | |
| F000:5ECC db 7 | |
| F000:5ECD db 2Ch ; , | |
| F000:5ECE db 87h ; | |
| F000:5ECF db 42h ; B | |
| F000:5ED0 db 7 | |
| F000:5ED1 db 2Ch ; , | |
| F000:5ED2 db 87h ; | |
| F000:5ED3 db 43h ; C | |
| F000:5ED4 db 7 | |
| F000:5ED5 db 2Ch ; , | |
| F000:5ED6 db 87h ; | |
| F000:5ED7 db 44h ; D | |
| F000:5ED8 db 71h ; q | |
| F000:5ED9 db 0A2h ; ¢ | |
| F000:5EDA db 0A2h ; ¢ | |
| F000:5EDB db 0A2h ; ¢ | |
| F000:5EDC db 0A2h ; ¢ | |
| F000:5EDD db 0A2h ; ¢ | |
| F000:5EDE db 0A2h ; ¢ | |
| F000:5EDF db 0A2h ; ¢ | |
| F000:5EE0 db 0FDh ; ý | |
| F000:5EE1 db 1Fh | |
| F000:5EE2 db 7Eh ; ~ | |
| F000:5EE3 db 0FCh ; ü | |
| F000:5EE4 db 6 | |
| F000:5EE5 db 1Bh | |
| F000:5EE6 db 46h ; F | |
| F000:5EE7 db 1Bh | |
| F000:5EE8 db 48h ; H | |
| F000:5EE9 db 92h ; | |
| F000:5EEA db 94h ; | |
| F000:5EEB db 1 | |
| F000:5EEC db 20h | |
| F000:5EED db 1 | |
| F000:5EEE db 0Eh | |
| F000:5EEF db 1 | |
| F000:5EF0 db 30h ; 0 | |
| F000:5EF1 db 2 | |
| F000:5EF2 db 0Fh | |
| F000:5EF3 db 0Eh | |
| F000:5EF4 db 2 | |
| F000:5EF5 db 40h ; @ | |
| F000:5EF6 db 50h ; P | |
| F000:5EF7 db 3 | |
| F000:5EF8 db 1Bh | |
| F000:5EF9 db 47h ; G | |
| F000:5EFA db 92h ; | |
| F000:5EFB db 1 | |
| F000:5EFC db 60h ; ` | |
| F000:5EFD db 1 | |
| F000:5EFE db 0Eh | |
| F000:5EFF db 1 | |
| F000:5F00 db 70h ; p | |
| F000:5F01 db 2 | |
| F000:5F02 db 0Fh | |
| F000:5F03 db 0Eh | |
| F000:5F04 db 2 | |
| F000:5F05 db 20h | |
| F000:5F06 db 30h ; 0 | |
| F000:5F07 db 3 | |
| F000:5F08 db 92h ; | |
| F000:5F09 db 1Bh | |
| F000:5F0A db 45h ; E | |
| F000:5F0B db 1 | |
| F000:5F0C db 40h ; @ | |
| F000:5F0D db 1 | |
| F000:5F0E db 0Eh | |
| F000:5F0F db 1 | |
| F000:5F10 db 50h ; P | |
| F000:5F11 db 2 | |
| F000:5F12 db 1Bh | |
| F000:5F13 db 48h ; H | |
| F000:5F14 db 1 | |
| F000:5F15 db 60h ; ` | |
| F000:5F16 db 1 | |
| F000:5F17 db 0Eh | |
| F000:5F18 db 1 | |
| F000:5F19 db 70h ; p | |
| F000:5F1A db 6 | |
| F000:5F1B db 9Bh ; | |
| F000:5F1C db 46h ; F | |
| F000:5F1D db 9Bh ; | |
| F000:5F1E db 48h ; H | |
| F000:5F1F db 12h | |
| F000:5F20 db 14h | |
| F000:5F21 db 2 | |
| F000:5F22 db 20h | |
| F000:5F23 db 0A0h ; | |
| F000:5F24 db 0FFh | |
| F000:5F25 db 0E4h ; ä | |
| F000:5F26 db 1Bh | |
| F000:5F27 db 53h ; S | |
| F000:5F28 db 0 | |
| F000:5F29 db 0E4h ; ä | |
| F000:5F2A db 0E1h ; á | |
| F000:5F2B db 0E2h ; â | |
| F000:5F2C db 0E5h ; å | |
| F000:5F2D db 1Bh | |
| F000:5F2E db 54h ; T | |
| F000:5F2F db 0E4h ; ä | |
| F000:5F30 db 0E1h ; á | |
| F000:5F31 db 0E2h ; â | |
| F000:5F32 db 0E5h ; å | |
| F000:5F33 db 1Bh | |
| F000:5F34 db 53h ; S | |
| F000:5F35 db 1 | |
| F000:5F36 db 0E4h ; ä | |
| F000:5F37 db 0E1h ; á | |
| F000:5F38 db 0E2h ; â | |
| F000:5F39 db 0E5h ; å | |
| F000:5F3A db 1Bh | |
| F000:5F3B db 54h ; T | |
| F000:5F3C db 1Bh | |
| F000:5F3D db 2Dh ; - | |
| F000:5F3E db 1 | |
| F000:5F3F db 0EDh ; í | |
| F000:5F40 db 0EAh ; ê | |
| F000:5F41 db 1Bh | |
| F000:5F42 db 2Dh ; - | |
| F000:5F43 db 0 | |
| F000:5F44 db 0Dh | |
| F000:5F45 db 0Ah | |
| F000:5F46 db 1Bh | |
| F000:5F47 db 4Bh ; K | |
| F000:5F48 db 1Dh | |
| F000:5F49 db 0 | |
| F000:5F4A db 0FFh | |
| F000:5F4B db 1Bh | |
| F000:5F4C db 59h ; Y | |
| F000:5F4D db 1Dh | |
| F000:5F4E db 0 | |
| F000:5F4F db 0FFh | |
| F000:5F50 db 1Bh | |
| F000:5F51 db 4Ch ; L | |
| F000:5F52 db 1Dh | |
| F000:5F53 db 0 | |
| F000:5F54 db 0FFh | |
| F000:5F55 db 1Bh | |
| F000:5F56 db 5Ah ; Z | |
| F000:5F57 db 1Dh | |
| F000:5F58 db 0 | |
| F000:5F59 db 0FFh | |
| F000:5F5A db 0Dh | |
| F000:5F5B db 0Ah | |
| F000:5F5C db 0FEh ; þ | |
| F000:5F5D ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:5F5D ; int 8b | |
| F000:5F5D ; keyboard test | |
| F000:5F5D ; intput: | |
| F000:5F5D ; ah = 'J': 62-key keyboard test | |
| F000:5F5D ; 'K': 83-key keyboard test | |
| F000:5F5D ; 0,1: show error and exit | |
| F000:5F5D ; output: | |
| F000:5F5D ; bh = kbd error code | |
| F000:5F5D ; dh/dl = error message ? | |
| F000:5F5D int_8b_diag_keyboard proc far ; DATA XREF: F000:4016o | |
| F000:5F5D or ah, ah | |
| F000:5F5F jz short error_and_exit | |
| F000:5F61 cmp ah, 1 | |
| F000:5F64 jz short error_and_exit | |
| F000:5F66 cmp ah, 4Ah ; 'J' | |
| F000:5F69 jz short run_test | |
| F000:5F6B cmp ah, 4Bh ; 'K' | |
| F000:5F6E jz short run_test | |
| F000:5F70 iret | |
| F000:5F71 off_F5F71 dw offset diag_kbd_opt_j ; DATA XREF: int_8b_diag_keyboard+2Dr | |
| F000:5F73 off_F5F73 dw offset diag_kbd_opt_k | |
| F000:5F73 ; DATA XREF: int_8b_diag_keyboard:do_k_testsr | |
| F000:5F75 error_and_exit: ; CODE XREF: int_8b_diag_keyboard+2j | |
| F000:5F75 ; int_8b_diag_keyboard+7j | |
| F000:5F75 mov al, 0Ch | |
| F000:5F77 mov bp, offset byte_F5FAD | |
| F000:5F7A int 81h ; reserved for BASIC | |
| F000:5F7C int 82h ; reserved for BASIC | |
| F000:5F7E iret | |
| F000:5F7F run_test: ; CODE XREF: int_8b_diag_keyboard+Cj | |
| F000:5F7F ; int_8b_diag_keyboard+11j | |
| F000:5F7F mov byte ptr ds:a1504036Copr_Ibm19811+12h, 0 | |
| F000:5F84 push ds | |
| F000:5F85 cmp ah, 4Bh ; 'K' | |
| F000:5F88 jz short do_k_tests | |
| F000:5F8A call cs:off_F5F71 ; do j tests | |
| F000:5F8F jmp short l3 | |
| F000:5F91 do_k_tests: ; CODE XREF: int_8b_diag_keyboard+2Bj | |
| F000:5F91 call cs:off_F5F73 | |
| F000:5F96 l3: ; CODE XREF: int_8b_diag_keyboard+32j | |
| F000:5F96 pop ds | |
| F000:5F97 mov dh, 0 | |
| F000:5F99 mov bl, dh | |
| F000:5F9B cmp byte ptr ds:seg40.kdb_error, 0 | |
| F000:5FA0 jz short l4 | |
| F000:5FA2 mov bh, ds:seg40.kdb_error | |
| F000:5FA6 mov dx, 4220h | |
| F000:5FA9 l4: ; CODE XREF: int_8b_diag_keyboard+43j | |
| F000:5FA9 stc | |
| F000:5FAA retf 2 | |
| F000:5FAA int_8b_diag_keyboard endp ; sp = 4 | |
| F000:5FAD byte_F5FAD db 7 ; DATA XREF: int_8b_diag_keyboard+1Ao | |
| F000:5FAE db 0DAh ; Ú | |
| F000:5FAF db 0C4h ; Ä | |
| F000:5FB0 db 0BFh ; ¿ | |
| F000:5FB1 db 0C0h ; À | |
| F000:5FB2 db 0C4h ; Ä | |
| F000:5FB3 db 0D9h ; Ù | |
| F000:5FB4 db 79h ; y | |
| F000:5FB5 db 7Ah ; z | |
| F000:5FB6 db 1 | |
| F000:5FB7 db 0Ah | |
| F000:5FB8 db 1 | |
| F000:5FB9 db 0FDh ; ý | |
| F000:5FBA db 2Bh ; + | |
| F000:5FBB db 6Dh ; m | |
| F000:5FBC db 1 | |
| F000:5FBD db 0Ah | |
| F000:5FBE db 1 | |
| F000:5FBF db 0FAh ; ú | |
| F000:5FC0 db 3 | |
| F000:5FC1 db 0B3h ; ³ | |
| F000:5FC2 db 0FEh ; þ | |
| F000:5FC3 db 0FDh ; ý | |
| F000:5FC4 db 24h ; $ | |
| F000:5FC5 db 6Dh ; m | |
| F000:5FC6 db 1 | |
| F000:5FC7 db 0Ah | |
| F000:5FC8 db 1 | |
| F000:5FC9 db 0 | |
| F000:5FCA db 6Dh ; m | |
| F000:5FCB db 1 | |
| F000:5FCC db 0Ah | |
| F000:5FCD db 1 | |
| F000:5FCE db 0 | |
| F000:5FCF db 6Dh ; m | |
| F000:5FD0 db 1 | |
| F000:5FD1 db 0Ah | |
| F000:5FD2 db 1 | |
| F000:5FD3 db 0 | |
| F000:5FD4 db 71h ; q | |
| F000:5FD5 db 79h ; y | |
| F000:5FD6 db 79h ; y | |
| F000:5FD7 db 0FAh ; ú | |
| F000:5FD8 db 7 | |
| F000:5FD9 db 87h ; | |
| F000:5FDA db 4Ah ; J | |
| F000:5FDB db 7 | |
| F000:5FDC db 2Ch ; , | |
| F000:5FDD db 87h ; | |
| F000:5FDE db 4Bh ; K | |
| F000:5FDF db 0A2h ; ¢ | |
| F000:5FE0 db 0A2h ; ¢ | |
| F000:5FE1 db 0A2h ; ¢ | |
| F000:5FE2 db 0FDh ; ý | |
| F000:5FE3 db 1Fh | |
| F000:5FE4 db 80h ; | |
| F000:5FE5 db 0FCh ; ü | |
| F000:5FE6 db 0 | |
| F000:5FE7 db 0 | |
| F000:5FE8 db 0 | |
| F000:5FE9 db 0 | |
| F000:5FEA db 0 | |
| F000:5FEB db 0 | |
| F000:5FEC db 0 | |
| F000:5FED db 0 | |
| F000:5FEE db 0 | |
| F000:5FEF db 0 | |
| F000:5FF0 db 0 | |
| F000:5FF1 db 0 | |
| F000:5FF2 db 0 | |
| F000:5FF3 db 0 | |
| F000:5FF4 db 0 | |
| F000:5FF5 db 0 | |
| F000:5FF6 db 0 | |
| F000:5FF7 db 0 | |
| F000:5FF8 db 0 | |
| F000:5FF9 db 0 | |
| F000:5FFA db 0 | |
| F000:5FFB db 0 | |
| F000:5FFC db 0 | |
| F000:5FFD db 0 | |
| F000:5FFE db 0 | |
| F000:5FFF db 7Bh ; { | |
| F000:6000 basic_rom db 0E9h, 8Fh, 7Eh, 0E8h, 0A7h, 6Bh, 0CBh, 0E8h, 2, 65h | |
| F000:6000 db 0CBh, 0B2h, 0E8h, 0C7h, 2Fh, 74h, 0Dh, 8Bh, 36h, 0E9h | |
| F000:6000 db 4, 8Ah, 44h, 2Eh, 3Ch, 0FEh, 74h, 2, 3Ch, 0FDh, 0C3h | |
| F000:6000 db 6 dup(0), 33h, 2Eh, 94h, 0Dh, 68h, 73h, 5Bh, 11h, 59h | |
| F000:6000 db 15h, 66h, 37h, 3Eh, 16h, 8Fh, 11h, 0EDh, 10h, 0B6h | |
| F000:6000 db 10h, 0F8h, 12h, 0Ch, 2Eh, 0CEh, 10h, 35h, 11h, 5Fh | |
| F000:6000 db 11h, 2Dh, 2Eh, 48h, 13h, 50h, 2Fh, 35h, 1Fh, 1Bh, 2Dh | |
| F000:6000 db 0FEh, 11h, 58h, 1Eh, 0F0h, 1Bh, 91h, 22h, 85h, 2Eh | |
| F000:6000 db 0BEh, 7, 0BEh, 7, 53h, 1Eh, 43h, 13h, 2Eh, 1Fh, 2 dup(0) | |
| F000:6000 db 8Ah, 1Eh, 5Fh, 11h, 9Ch, 2Eh, 9Dh, 2Eh, 0A3h, 2Eh, 0F3h | |
| F000:6000 db 2Eh, 0DFh, 36h, 0A9h, 12h, 58h, 12h, 39h, 22h, 0B8h | |
| F000:6000 db 12h, 0D8h, 22h, 0FBh, 0Fh, 0FEh, 0Fh, 1, 10h, 4, 10h | |
| F000:6000 db 0D9h, 14h, 4, 3Dh, 30h, 3Dh, 0A0h, 5Dh, 6 dup(0), 0A9h | |
| F000:6000 db 3Dh, 3Fh, 24h, 9Eh, 24h, 4, 40h, 52h, 43h, 6Ch, 41h | |
| F000:6000 db 6Dh, 41h, 0CEh, 41h, 2Fh, 53h, 0E7h, 52h, 26h, 5Dh | |
| F000:6000 db 13h, 46h, 33h, 46h, 29h, 58h, 0Dh, 58h, 0D1h, 47h, 0CDh | |
| F000:6000 db 47h, 93h, 51h, 2Ah, 50h, 17h, 54h, 68h, 29h, 0A5h, 29h | |
| F000:6000 db 0B1h, 29h, 1Ch, 65h, 80h, 7Eh, 96h, 7Dh, 0F1h, 70h | |
| F000:6000 db 87h, 78h, 0Eh, 7Ah, 0Ch, 73h, 84h, 62h, 0F4h, 79h, 0ADh | |
| F000:6000 db 7Ah, 0CDh, 7Ah, 8Ch, 2Bh, 3Dh, 1Eh, 7Ah, 1Bh, 0E8h | |
| F000:6000 db 28h, 17h, 26h, 0E9h, 29h, 0F8h, 28h, 0Bh, 29h, 80h | |
| F000:6000 db 22h, 47h, 29h, 0Dh, 26h, 12h, 26h, 75h, 1Bh, 0ADh, 6Bh | |
| F000:6000 db 51h, 6Bh, 82h, 6Bh, 9Ch, 65h, 0FAh, 55h, 98h, 56h, 12h | |
| F000:6000 db 57h, 0C0h, 44h, 98h, 44h, 0ACh, 44h, 37h, 1, 48h, 1 | |
| F000:6000 db 57h, 1, 8Bh, 1, 0B4h, 1, 0D9h, 1, 0E5h, 1, 0F4h, 1 | |
| F000:6000 db 0F9h, 1, 15h, 2, 16h, 2, 1Ah, 2, 50h, 2, 62h, 2, 6Dh | |
| F000:6000 db 2, 86h, 2, 0A9h, 2, 0AAh, 2, 0DFh, 2, 23h, 3, 3Ah, 3 | |
| F000:6000 db 43h, 3, 4Dh, 3, 65h, 3, 69h, 3, 6Ah, 3, 55h, 54h, 0CFh | |
| F000:6000 db 0AAh, 4Eh, 0C4h, 0EEh, 42h, 0D3h, 6, 54h, 0CEh, 0Eh | |
| F000:6000 db 53h, 0C3h, 15h, 0, 53h, 41h, 56h, 0C5h, 0C2h, 4Ch, 4Fh | |
| F000:6000 db 41h, 0C4h, 0C3h, 2 dup(45h), 0D0h, 0C5h, 0, 4Fh, 4Ch | |
| F000:6000 db 4Fh, 0D2h, 0BFh, 4Ch, 4Fh, 53h, 0C5h, 0BBh, 4Fh, 4Eh | |
| F000:6000 db 0D4h, 99h, 4Ch, 45h, 41h, 0D2h, 92h, 53h, 52h, 4Ch | |
| F000:6000 db 49h, 0CEh, 0DBh, 49h, 4Eh, 0D4h, 1Ch, 53h, 4Eh, 0C7h | |
| F000:6000 db 1Dh, 44h, 42h, 0CCh, 1Eh, 4Fh, 0D3h, 0Ch, 48h, 52h | |
| F000:6000 db 0A4h, 16h, 41h, 4Ch, 0CCh, 0B3h, 4Ch, 0D3h, 0C0h, 0 | |
| F000:6000 db 45h, 4Ch, 45h, 54h, 0C5h, 0A9h, 41h, 54h, 0C1h, 84h | |
| F000:6000 db 49h, 0CDh, 86h, 45h, 46h, 53h, 54h, 0D2h, 0ACh, 45h | |
| F000:6000 db 46h, 49h, 4Eh, 0D4h, 0ADh, 45h, 46h, 53h, 4Eh, 0C7h | |
| F000:6000 db 0AEh, 45h, 46h, 44h, 42h, 0CCh, 0AFh, 45h, 0C6h, 97h | |
| F000:6000 db 0, 4Ch, 53h, 0C5h, 0A1h, 4Eh, 0C4h, 81h, 52h, 41h, 53h | |
| F000:6000 db 0C5h, 0A5h, 44h, 49h, 0D4h, 0A6h, 2 dup(52h), 4Fh, 0D2h | |
| F000:6000 db 0A7h, 52h, 0CCh, 0D4h, 52h, 0D2h, 0D5h, 58h, 0D0h, 0Bh | |
| F000:6000 db 4Fh, 0C6h, 23h, 51h, 0D6h, 0F1h, 0, 4Fh, 0D2h, 82h | |
| F000:6000 db 0CEh, 0D1h, 52h, 0C5h, 0Fh, 49h, 0D8h, 1Fh, 0, 4Fh | |
| F000:6000 db 54h, 0CFh, 89h, 4Fh, 20h, 54h, 0CFh, 89h, 4Fh, 53h | |
| F000:6000 db 55h, 0C2h, 8Dh, 0, 45h, 58h, 0A4h, 1Ah, 0, 4Eh, 50h | |
| F000:6000 db 55h, 0D4h, 85h, 0C6h, 8Bh, 4Eh, 53h, 54h, 0D2h, 0D8h | |
| F000:6000 db 4Eh, 0D4h, 5, 4Eh, 0D0h, 10h, 4Dh, 0D0h, 0F2h, 4Eh | |
| F000:6000 db 4Bh, 45h, 59h, 0A4h, 0DEh, 2 dup(0), 45h, 0D9h, 0C9h | |
| F000:6000 db 0, 4Fh, 43h, 41h, 54h, 0C5h, 0CAh, 50h, 52h, 49h, 4Eh | |
| F000:6000 db 0D4h, 9Dh, 4Ch, 49h, 53h, 0D4h, 9Eh, 50h, 4Fh, 0D3h | |
| F000:6000 db 1Bh, 45h, 0D4h, 88h, 49h, 4Eh, 0C5h, 0B0h, 4Fh, 41h | |
| F000:6000 db 0C4h, 0BCh, 49h, 53h, 0D4h, 93h, 4Fh, 0C7h, 0Ah, 4Fh | |
| F000:6000 db 0C3h, 24h, 45h, 0CEh, 12h, 45h, 46h, 54h, 0A4h, 1, 4Fh | |
| F000:6000 db 0C6h, 25h, 0, 4Fh, 54h, 4Fh, 0D2h, 0C1h, 45h, 52h, 47h | |
| F000:6000 db 0C5h, 0BDh, 4Fh, 0C4h, 0F3h, 49h, 44h, 0A4h, 3, 0, 45h | |
| F000:6000 db 58h, 0D4h, 83h, 45h, 0D7h, 94h, 4Fh, 0D4h, 0D3h, 0 | |
| F000:6000 db 50h, 45h, 0CEh, 0BAh, 55h, 0D4h, 9Ch, 0CEh, 95h, 0D2h | |
| F000:6000 db 0EFh, 43h, 54h, 0A4h, 19h, 50h, 54h, 49h, 4Fh, 0CEh | |
| F000:6000 db 0B8h, 46h, 0C6h, 0DDh, 0, 52h, 49h, 4Eh, 0D4h, 91h | |
| F000:6000 db 4Fh, 4Bh, 0C5h, 98h, 4Fh, 0D3h, 11h, 2 dup(45h), 0CBh | |
| F000:6000 db 17h, 53h, 45h, 0D4h, 0C6h, 52h, 45h, 53h, 45h, 0D4h | |
| F000:6000 db 0C7h, 4Fh, 49h, 4Eh, 0D4h, 0DCh, 45h, 0CEh, 20h, 2 dup(0) | |
| F000:6000 db 55h, 0CEh, 8Ah, 45h, 54h, 55h, 52h, 0CEh, 8Eh, 45h | |
| F000:6000 db 41h, 0C4h, 87h, 45h, 53h, 54h, 4Fh, 52h, 0C5h, 8Ch | |
| F000:6000 db 45h, 0CDh, 8Fh, 45h, 53h, 55h, 4Dh, 0C5h, 0A8h, 49h | |
| F000:6000 db 47h, 48h, 54h, 0A4h, 2, 4Eh, 0C4h, 8, 45h, 4Eh, 55h | |
| F000:6000 db 0CDh, 0ABh, 41h, 4Eh, 44h, 4Fh, 4Dh, 49h, 5Ah, 0C5h | |
| F000:6000 db 0B9h, 0, 43h, 52h, 2 dup(45h), 0CEh, 0C8h, 54h, 4Fh | |
| F000:6000 db 0D0h, 90h, 57h, 41h, 0D0h, 0A4h, 41h, 56h, 0C5h, 0BEh | |
| F000:6000 db 50h, 43h, 0A8h, 0D2h, 54h, 45h, 0D0h, 0CFh, 47h, 0CEh | |
| F000:6000 db 4, 51h, 0D2h, 7, 49h, 0CEh, 9, 54h, 52h, 0A4h, 13h | |
| F000:6000 db 54h, 52h, 49h, 4Eh, 47h, 0A4h, 0D6h, 50h, 41h, 43h | |
| F000:6000 db 45h, 0A4h, 18h, 4Fh, 55h, 4Eh, 2 dup(0C4h), 54h, 49h | |
| F000:6000 db 43h, 0CBh, 21h, 54h, 52h, 49h, 0C7h, 22h, 0, 48h, 45h | |
| F000:6000 db 0CEh, 0CDh, 52h, 4Fh, 0CEh, 0A2h, 52h, 4Fh, 46h, 0C6h | |
| F000:6000 db 0A3h, 41h, 42h, 0A8h, 0CEh, 0CFh, 0CCh, 41h, 0CEh, 0Dh | |
| F000:6000 db 0, 53h, 49h, 4Eh, 0C7h, 0D7h, 53h, 0D2h, 0D0h, 0, 41h | |
| F000:6000 db 0CCh, 14h, 41h, 52h, 50h, 54h, 0D2h, 0DAh, 0, 49h, 44h | |
| F000:6000 db 54h, 0C8h, 0A0h, 41h, 49h, 0D4h, 96h, 48h, 49h, 4Ch | |
| F000:6000 db 0C5h, 0B1h, 45h, 4Eh, 0C4h, 0B2h, 52h, 49h, 54h, 0C5h | |
| F000:6000 db 0B7h, 0, 4Fh, 0D2h, 0F0h, 3 dup(0), 0ABh, 0E9h, 0ADh | |
| F000:6000 db 0EAh, 0AAh, 0EBh, 0AFh, 0ECh, 0DEh, 0EDh, 0DCh, 0F4h | |
| F000:6000 db 0A7h, 0D9h, 0BEh, 0E6h, 0BDh, 0E7h, 0BCh, 0E8h, 0, 2 dup(79h) | |
| F000:6000 db 2 dup(7Ch), 7Fh, 50h, 46h, 3Ch, 32h, 28h, 7Ah, 7Bh | |
| F000:6000 db 82h, 6Bh, 2 dup(0), 0ADh, 6Bh, 3Bh, 64h, 51h, 6Bh, 0A8h | |
| F000:6000 db 66h, 3, 63h, 53h, 6Ch, 20h, 63h, 74h, 65h, 12h, 63h | |
| F000:6000 db 19h, 63h, 41h, 63h, 28h, 63h, 31h, 64h, 6Ah, 63h, 4Fh | |
| F000:6000 db 63h, 89h, 63h, 0D7h, 18h, 0B4h, 65h, 0, 4Eh, 45h, 58h | |
| F000:6000 db 54h, 20h, 77h, 69h, 74h, 68h, 6Fh, 75h, 74h, 20h, 46h | |
| F000:6000 db 4Fh, 52h, 0, 53h, 79h, 6Eh, 74h, 61h, 78h, 20h, 65h | |
| F000:6000 db 2 dup(72h), 6Fh, 72h, 0, 52h, 45h, 54h, 55h, 52h, 4Eh | |
| F000:6000 db 20h, 77h, 69h, 74h, 68h, 6Fh, 75h, 74h, 20h, 47h, 4Fh | |
| F000:6000 db 53h, 55h, 42h, 0, 4Fh, 75h, 74h, 20h, 6Fh, 66h, 20h | |
| F000:6000 db 44h, 41h, 54h, 41h, 0, 49h, 2 dup(6Ch), 65h, 67h, 61h | |
| F000:6000 db 6Ch, 20h, 66h, 75h, 6Eh, 63h, 74h, 69h, 6Fh, 6Eh, 20h | |
| F000:6000 db 63h, 61h, 2 dup(6Ch), 0, 4Fh, 76h, 65h, 72h, 66h, 6Ch | |
| F000:6000 db 6Fh, 77h, 0, 4Fh, 75h, 74h, 20h, 6Fh, 66h, 20h, 6Dh | |
| F000:6000 db 65h, 6Dh, 6Fh, 72h, 79h, 0, 55h, 6Eh, 64h, 65h, 66h | |
| F000:6000 db 69h, 6Eh, 65h, 64h, 20h, 6Ch, 69h, 6Eh, 65h, 20h, 6Eh | |
| F000:6000 db 75h, 6Dh, 62h, 65h, 72h, 0, 53h, 75h, 62h, 73h, 63h | |
| F000:6000 db 72h, 69h, 70h, 74h, 20h, 6Fh, 75h, 74h, 20h, 6Fh, 66h | |
| F000:6000 db 20h, 72h, 61h, 6Eh, 67h, 65h, 0, 44h, 75h, 70h, 6Ch | |
| F000:6000 db 69h, 63h, 61h, 74h, 65h, 20h, 44h, 65h, 66h, 69h, 6Eh | |
| F000:6000 db 69h, 74h, 69h, 6Fh, 6Eh, 0, 44h, 69h, 76h, 69h, 73h | |
| F000:6000 db 69h, 6Fh, 6Eh, 20h, 62h, 79h, 20h, 7Ah, 65h, 72h, 6Fh | |
| F000:6000 db 0, 49h, 2 dup(6Ch), 65h, 67h, 61h, 6Ch, 20h, 64h, 69h | |
| F000:6000 db 72h, 65h, 63h, 74h, 0, 54h, 79h, 70h, 65h, 20h, 6Dh | |
| F000:6000 db 69h, 73h, 6Dh, 61h, 74h, 63h, 68h, 0, 4Fh, 75h, 74h | |
| F000:6000 db 20h, 6Fh, 66h, 20h, 73h, 74h, 72h, 69h, 6Eh, 67h, 20h | |
| F000:6000 db 73h, 70h, 61h, 63h, 65h, 0, 53h, 74h, 72h, 69h, 6Eh | |
| F000:6000 db 67h, 20h, 74h, 2 dup(6Fh), 20h, 6Ch, 6Fh, 6Eh, 67h | |
| F000:6000 db 0, 53h, 74h, 72h, 69h, 6Eh, 67h, 20h, 66h, 6Fh, 72h | |
| F000:6000 db 6Dh, 75h, 6Ch, 61h, 20h, 74h, 2 dup(6Fh), 20h, 63h | |
| F000:6000 db 6Fh, 6Dh, 70h, 6Ch, 65h, 78h, 0, 43h, 61h, 6Eh, 27h | |
| F000:6000 db 74h, 20h, 63h, 6Fh, 6Eh, 74h, 69h, 6Eh, 75h, 65h, 0 | |
| F000:6000 db 55h, 6Eh, 64h, 65h, 66h, 69h, 6Eh, 65h, 64h, 20h, 75h | |
| F000:6000 db 73h, 65h, 72h, 20h, 66h, 75h, 6Eh, 63h, 74h, 69h, 6Fh | |
| F000:6000 db 6Eh, 0, 4Eh, 6Fh, 20h, 52h, 45h, 53h, 55h, 4Dh, 45h | |
| F000:6000 db 0, 52h, 45h, 53h, 55h, 4Dh, 45h, 20h, 77h, 69h, 74h | |
| F000:6000 db 68h, 6Fh, 75h, 74h, 20h, 65h, 2 dup(72h), 6Fh, 72h | |
| F000:6000 db 0, 55h, 6Eh, 70h, 72h, 69h, 6Eh, 74h, 61h, 62h, 6Ch | |
| F000:6000 db 65h, 20h, 65h, 2 dup(72h), 6Fh, 72h, 0, 4Dh, 69h, 2 dup(73h) | |
| F000:6000 db 69h, 6Eh, 67h, 20h, 6Fh, 70h, 65h, 72h, 61h, 6Eh, 64h | |
| F000:6000 db 0, 4Ch, 69h, 6Eh, 65h, 20h, 62h, 75h, 2 dup(66h), 65h | |
| F000:6000 db 72h, 20h, 6Fh, 76h, 65h, 72h, 66h, 6Ch, 6Fh, 77h, 0 | |
| F000:6000 db 44h, 65h, 76h, 69h, 63h, 65h, 20h, 54h, 69h, 6Dh, 65h | |
| F000:6000 db 6Fh, 75h, 74h, 0, 44h, 65h, 76h, 69h, 63h, 65h, 20h | |
| F000:6000 db 46h, 61h, 75h, 6Ch, 74h, 0, 46h, 4Fh, 52h, 20h, 57h | |
| F000:6000 db 69h, 74h, 68h, 6Fh, 75h, 74h, 20h, 4Eh, 45h, 58h, 54h | |
| F000:6000 db 0, 4Fh, 75h, 74h, 20h, 6Fh, 66h, 20h, 50h, 61h, 70h | |
| F000:6000 db 65h, 72h, 0, 3Fh, 0, 57h, 48h, 49h, 4Ch, 45h, 20h, 77h | |
| F000:6000 db 69h, 74h, 68h, 6Fh, 75h, 74h, 20h, 57h, 45h, 4Eh, 44h | |
| F000:6000 db 0, 57h, 45h, 4Eh, 44h, 20h, 77h, 69h, 74h, 68h, 6Fh | |
| F000:6000 db 75h, 74h, 20h, 57h, 48h, 49h, 4Ch, 45h, 0, 46h, 49h | |
| F000:6000 db 45h, 4Ch, 44h, 20h, 6Fh, 76h, 65h, 72h, 66h, 6Ch, 6Fh | |
| F000:6000 db 77h, 0, 49h, 6Eh, 74h, 65h, 72h, 6Eh, 61h, 6Ch, 20h | |
| F000:6000 db 65h, 2 dup(72h), 6Fh, 72h, 0, 42h, 61h, 64h, 20h, 66h | |
| F000:6000 db 69h, 6Ch, 65h, 20h, 6Eh, 75h, 6Dh, 62h, 65h, 72h, 0 | |
| F000:6000 db 46h, 69h, 6Ch, 65h, 20h, 6Eh, 6Fh, 74h, 20h, 66h, 6Fh | |
| F000:6000 db 75h, 6Eh, 64h, 0, 42h, 61h, 64h, 20h, 66h, 69h, 6Ch | |
| F000:6000 db 65h, 20h, 6Dh, 6Fh, 64h, 65h, 0, 46h, 69h, 6Ch, 65h | |
| F000:6000 db 20h, 61h, 6Ch, 72h, 65h, 61h, 64h, 79h, 20h, 6Fh, 70h | |
| F000:6000 db 65h, 6Eh, 0, 3Fh, 0, 44h, 65h, 76h, 69h, 63h, 65h, 20h | |
| F000:6000 db 49h, 2Fh, 4Fh, 20h, 45h, 2 dup(72h), 6Fh, 72h, 0, 46h | |
| F000:6000 db 69h, 6Ch, 65h, 20h, 61h, 6Ch, 72h, 65h, 61h, 64h, 79h | |
| F000:6000 db 20h, 65h, 78h, 69h, 73h, 74h, 73h, 0, 3Fh, 0, 3Fh, 0 | |
| F000:6000 db 44h, 69h, 73h, 6Bh, 20h, 66h, 75h, 2 dup(6Ch), 0, 49h | |
| F000:6000 db 6Eh, 70h, 75h, 74h, 20h, 70h, 61h, 73h, 74h, 20h, 65h | |
| F000:6000 db 6Eh, 64h, 0, 42h, 61h, 64h, 20h, 72h, 65h, 63h, 6Fh | |
| F000:6000 db 72h, 64h, 20h, 6Eh, 75h, 6Dh, 62h, 65h, 72h, 0, 42h | |
| F000:6000 db 61h, 64h, 20h, 66h, 69h, 6Ch, 65h, 20h, 6Eh, 61h, 6Dh | |
| F000:6000 db 65h, 0, 3Fh, 0, 44h, 69h, 72h, 65h, 63h, 74h, 20h, 73h | |
| F000:6000 db 74h, 61h, 74h, 65h, 6Dh, 65h, 6Eh, 74h, 20h, 69h, 6Eh | |
| F000:6000 db 20h, 66h, 69h, 6Ch, 65h, 0, 54h, 2 dup(6Fh), 20h, 6Dh | |
| F000:6000 db 61h, 6Eh, 79h, 20h, 66h, 69h, 6Ch, 65h, 73h, 4 dup(0) | |
| F000:6000 db 0C3h, 1Eh, 10h, 0, 52h, 0C7h, 4Fh, 80h, 52h, 0C7h, 4Fh | |
| F000:6000 db 80h, 0E4h, 0, 0CBh, 14h dup(0FFh), 1, 2 dup(0), 50h | |
| F000:6000 db 38h, 0, 72h, 7, 0FEh, 0FFh, 0Fh, 7, 0Ah, 4, 17h dup(0) | |
| F000:6000 db 7, 2 dup(0), 2 dup(7), 20h, 0Ah dup(0), 1, 2 dup(18h) | |
| F000:6000 db 4 dup(0), 50h, 0, 1, 3 dup(0), 2 dup(7), 7 dup(0), 1 | |
| F000:6000 db 2 dup(0), 1Ah dup(1), 20h, 69h, 6Eh, 20h, 0, 4Fh, 6Bh | |
| F000:6000 db 0FFh, 0Dh, 0, 42h, 72h, 65h, 61h, 6Bh, 0, 0BBh, 4, 0 | |
| F000:6000 db 3, 0DCh, 43h, 8Ah, 7, 43h, 3Ch, 0B1h, 75h, 7, 0B9h | |
| F000:6000 db 6, 0, 3, 0D9h, 0EBh, 0F1h, 3Ch, 82h, 74h, 1, 0C3h, 8Ah | |
| F000:6000 db 0Fh, 43h, 8Ah, 2Fh, 43h, 53h, 8Bh, 0D9h, 0Bh, 0D2h | |
| F000:6000 db 87h, 0DAh, 74h, 4, 87h, 0DAh, 3Bh, 0DAh, 0B9h, 10h | |
| F000:6000 db 0, 5Bh, 74h, 0E6h, 3, 0D9h, 0EBh, 0CFh, 0B9h, 0B5h | |
| F000:6000 db 8, 0E9h, 91h, 0, 0CDh, 86h, 8Bh, 1Eh, 2Eh, 0, 8Ah, 0C7h | |
| F000:6000 db 22h, 0C3h, 0FEh, 0C0h, 74h, 9, 0A0h, 4Fh, 3, 0Ah, 0C0h | |
| F000:6000 db 0B2h, 13h, 75h, 4Dh, 0E9h, 0BDh, 26h, 0B2h, 3Dh, 0B9h | |
| F000:6000 db 0B2h, 39h, 0B9h, 0B2h, 36h, 0B9h, 0B2h, 35h, 0B9h, 0B2h | |
| F000:6000 db 34h, 0B9h, 0B2h, 33h, 0B9h, 0B2h, 3Eh, 0B9h, 0B2h, 37h | |
| F000:6000 db 0B9h, 0B2h, 40h, 0B9h, 0B2h, 3Fh, 0B9h, 0B2h, 32h, 0B9h | |
| F000:6000 db 0B2h, 43h, 0B9h, 0B2h, 3Ah, 0EBh, 22h, 8Bh, 1Eh, 37h | |
| F000:6000 db 3, 89h, 1Eh, 2Eh, 0, 0B2h, 2, 0B9h, 0B2h, 0Bh, 0B9h | |
| F000:6000 db 0B2h, 1, 0B9h, 0B2h, 0Ah, 0B9h, 0B2h, 12h, 0B9h, 0B2h | |
| F000:6000 db 14h, 0B9h, 0B2h, 6, 0B9h, 0B2h, 16h, 0B9h, 0B2h, 0Dh | |
| F000:6000 db 32h, 0C0h, 0A2h, 36h, 5, 0A2h, 5Fh, 0, 0A2h, 62h, 4 | |
| F000:6000 db 0A2h, 60h, 0, 8Bh, 1Eh, 2Eh, 0, 89h, 1Eh, 47h, 3, 32h | |
| F000:6000 db 0C0h, 0A2h, 65h, 4, 0A2h, 6Bh, 4, 8Ah, 0C7h, 22h, 0C3h | |
| F000:6000 db 0FEh, 0C0h, 74h, 4, 89h, 1Eh, 49h, 3, 0B9h, 0Ch, 8 | |
| F000:6000 db 8Bh, 1Eh, 45h, 3, 0E9h, 0B1h, 25h, 59h, 8Ah, 0C2h, 8Ah | |
| F000:6000 db 0CAh, 0A2h, 28h, 0, 8Bh, 1Eh, 43h, 3, 89h, 1Eh, 4Bh | |
| F000:6000 db 3, 87h, 0DAh, 8Bh, 1Eh, 47h, 3, 8Ah, 0C7h, 22h, 0C3h | |
| F000:6000 db 0FEh, 0C0h, 74h, 0Ah, 89h, 1Eh, 54h, 3, 87h, 0DAh, 89h | |
| F000:6000 db 1Eh, 56h, 3, 8Bh, 1Eh, 4Dh, 3, 0Bh, 0DBh, 87h, 0DAh | |
| F000:6000 db 0BBh, 4Fh, 3, 74h, 0Bh, 22h, 7, 75h, 7, 0FEh, 0Fh, 87h | |
| F000:6000 db 0DAh, 0E9h, 73h, 6, 32h, 0C0h, 88h, 7, 8Ah, 0D1h, 0E8h | |
| F000:6000 db 8, 24h, 0BBh, 0B4h, 3, 0CDh, 87h, 8Ah, 0C2h, 3Ch, 44h | |
| F000:6000 db 73h, 8, 3Ch, 32h, 73h, 6, 3Ch, 1Fh, 72h, 6, 0B0h, 28h | |
| F000:6000 db 2Ch, 13h, 8Ah, 0D0h, 2Eh, 8Ah, 7, 43h, 0Ah, 0C0h, 75h | |
| F000:6000 db 0F8h, 4Bh, 43h, 0FEh, 0CAh, 75h, 0F2h, 53h, 8Bh, 1Eh | |
| F000:6000 db 47h, 3, 5Eh, 87h, 0DEh, 56h, 0CDh, 88h, 2Eh, 8Ah, 7 | |
| F000:6000 db 3Ch, 3Fh, 75h, 6, 5Bh, 0BBh, 0B4h, 3, 0EBh, 0D4h, 0E8h | |
| F000:6000 db 0BEh, 72h, 5Bh, 0BAh, 0FEh, 0FFh, 3Bh, 0DAh, 0CDh, 89h | |
| F000:6000 db 75h, 3, 0E9h, 0EEh, 75h, 8Ah, 0C7h, 22h, 0C3h, 0FEh | |
| F000:6000 db 0C0h, 74h, 3, 0E8h, 99h, 5Ch, 0B0h, 0FFh, 0E8h, 0F1h | |
| F000:6000 db 22h, 0B0h, 59h, 0CDh, 8Ah, 32h, 0C0h, 0A2h, 6Fh, 0 | |
| F000:6000 db 0E8h, 3Bh, 3Ch, 0E8h, 9Ah, 23h, 0BBh, 2Dh, 7, 0E8h | |
| F000:6000 db 8Ch, 72h, 0A0h, 28h, 0, 2Ch, 2, 75h, 3, 0E8h, 0EEh | |
| F000:6000 db 2Dh, 0CDh, 8Bh, 0BBh, 2 dup(0FFh), 89h, 1Eh, 2Eh, 0 | |
| F000:6000 db 0A0h, 3Eh, 3, 0Ah, 0C0h, 74h, 49h, 8Bh, 1Eh, 3Fh, 3 | |
| F000:6000 db 53h, 0E8h, 65h, 5Ch, 5Ah, 52h, 0E8h, 77h, 1, 0B0h, 2Ah | |
| F000:6000 db 72h, 2, 0B0h, 20h, 0E8h, 0ACh, 22h, 0E8h, 84h, 28h | |
| F000:6000 db 5Ah, 73h, 0Eh, 32h, 0C0h, 0A2h, 3Eh, 3, 0EBh, 0B0h | |
| F000:6000 db 32h, 0C0h, 0A2h, 3Eh, 3, 0EBh, 15h, 8Bh, 1Eh, 41h, 2 dup(3) | |
| F000:6000 db 0DAh, 72h, 0F1h, 52h, 0BAh, 0F9h, 0FFh, 3Bh, 0DAh, 5Ah | |
| F000:6000 db 73h, 0E8h, 89h, 1Eh, 3Fh, 3, 0A0h, 0F7h, 1, 0Ah, 0C0h | |
| F000:6000 db 74h, 0AAh, 0E9h, 0A8h, 2Dh, 0E8h, 51h, 28h, 72h, 0A2h | |
| F000:6000 db 0E8h, 0E9h, 5, 0FEh, 0C0h, 0FEh, 0C8h, 74h, 99h, 9Ch | |
| F000:6000 db 0E8h, 2Dh, 7, 73h, 8, 0E8h, 93h, 26h, 75h, 3, 0E9h | |
| F000:6000 db 76h, 0FEh, 0E8h, 38h, 4, 8Ah, 7, 3Ch, 20h, 75h, 3, 0E8h | |
| F000:6000 db 0F0h, 5Bh, 52h, 0E8h, 31h, 1, 5Ah, 9Dh, 89h, 1Eh, 43h | |
| F000:6000 db 3, 0CDh, 8Ch, 72h, 3, 0E9h, 6Fh, 3Bh, 52h, 51h, 0E8h | |
| F000:6000 db 0EEh, 3Dh, 0E8h, 0B0h, 5, 0Ah, 0C0h, 9Ch, 89h, 16h | |
| F000:6000 db 49h, 3, 0E8h, 0F0h, 0, 72h, 9, 9Dh, 9Ch, 75h, 3, 0E9h | |
| F000:6000 db 0B0h, 7, 0Ah, 0C0h, 51h, 9Ch, 53h, 0E8h, 0ADh, 1Ah | |
| F000:6000 db 5Bh, 9Dh, 59h, 51h, 73h, 3, 0E8h, 0D6h, 18h, 5Ah, 9Dh | |
| F000:6000 db 52h, 74h, 47h, 5Ah, 0A0h, 6Bh, 4, 0Ah, 0C0h, 75h, 8 | |
| F000:6000 db 8Bh, 1Eh, 0Ah, 3, 89h, 1Eh, 2Fh, 3, 8Bh, 1Eh, 58h, 3 | |
| F000:6000 db 5Eh, 87h, 0DEh, 56h, 59h, 53h, 3, 0D9h, 53h, 0E8h, 15h | |
| F000:6000 db 2 dup(5Bh), 89h, 1Eh, 58h, 3, 87h, 0DAh, 88h, 3Fh, 59h | |
| F000:6000 db 5Ah, 53h, 2 dup(43h), 89h, 17h, 2 dup(43h), 0BAh, 0B8h | |
| F000:6000 db 0, 4 dup(49h), 8Bh, 0F2h, 0ACh, 88h, 7, 43h, 42h, 49h | |
| F000:6000 db 8Ah, 0C1h, 0Ah, 0C5h, 75h, 0F2h, 0CDh, 8Dh, 5Ah, 0E8h | |
| F000:6000 db 1Eh, 0, 8Bh, 1Eh, 0E9h, 4, 89h, 1Eh, 52h, 3, 0E8h, 49h | |
| F000:6000 db 23h, 0CDh, 8Eh, 8Bh, 1Eh, 52h, 3, 89h, 1Eh, 0E9h, 4 | |
| F000:6000 db 0E9h, 0D8h, 0FEh, 8Bh, 1Eh, 30h, 0, 87h, 0DAh, 8Ah | |
| F000:6000 db 0FEh, 8Ah, 0DAh, 8Ah, 7, 43h, 0Ah, 7, 75h, 1, 0C3h | |
| F000:6000 db 3 dup(43h), 8Ah, 7, 0Ah, 0C0h, 74h, 10h, 3Ch, 20h, 73h | |
| F000:6000 db 0F5h, 3Ch, 0Bh, 72h, 0F1h, 0E8h, 0FDh, 4, 0E8h, 0F9h | |
| F000:6000 db 4, 0EBh, 0ECh, 43h, 87h, 0DAh, 89h, 17h, 0EBh, 0D4h | |
| F000:6000 db 0BAh, 2 dup(0), 52h, 74h, 17h, 3Ch, 2Ch, 74h, 13h, 5Ah | |
| F000:6000 db 0E8h, 23h, 6, 52h, 74h, 1Dh, 3Ch, 2Ch, 74h, 19h, 0E8h | |
| F000:6000 db 0AFh, 23h, 0EAh, 74h, 2, 3Ch, 2Ch, 0BAh, 0FAh, 0FFh | |
| F000:6000 db 74h, 3, 0E8h, 0Ch, 6, 74h, 7, 3Ch, 2Ch, 74h, 3, 0E9h | |
| F000:6000 db 63h, 0FDh, 89h, 1Eh, 3Bh, 3, 87h, 0DAh, 5Ah, 5Eh, 87h | |
| F000:6000 db 0DEh, 56h, 53h, 8Bh, 1Eh, 30h, 0, 8Bh, 0CBh, 8Ah, 7 | |
| F000:6000 db 43h, 0Ah, 7, 9Fh, 4Bh, 9Eh, 74h, 95h, 2 dup(43h), 8Bh | |
| F000:6000 db 1Fh, 3Bh, 0DAh, 8Bh, 0D9h, 8Bh, 1Fh, 0F5h, 74h, 88h | |
| F000:6000 db 0F5h, 73h, 85h, 0EBh, 0E2h, 32h, 0C0h, 0A2h, 0FDh, 2 | |
| F000:6000 db 0A2h, 0FCh, 2, 0CDh, 8Fh, 0B9h, 3Bh, 1, 0BAh, 0B8h | |
| F000:6000 db 0, 8Ah, 7, 0Ah, 0C0h, 75h, 20h, 0BBh, 40h, 1, 8Ah, 0C3h | |
| F000:6000 db 2Ah, 0C1h, 8Ah, 0C8h, 8Ah, 0C7h, 1Ah, 0C5h, 8Ah, 0E8h | |
| F000:6000 db 0BBh, 0B7h, 0, 32h, 0C0h, 8Bh, 0FAh, 0AAh, 42h, 8Bh | |
| F000:6000 db 0FAh, 0AAh, 42h, 8Bh, 0FAh, 0AAh, 0C3h, 3Ch, 22h, 75h | |
| F000:6000 db 3, 0E9h, 33h, 0, 3Ch, 20h, 74h, 9, 0A0h, 0FCh, 2, 0Ah | |
| F000:6000 db 0C0h, 8Ah, 7, 74h, 2Fh, 43h, 50h, 0E8h, 54h, 2, 58h | |
| F000:6000 db 2Ch, 3Ah, 74h, 6, 3Ch, 4Ah, 75h, 8, 0B0h, 1, 0A2h, 0FCh | |
| F000:6000 db 2, 0A2h, 0FDh, 2, 2Ch, 55h, 75h, 0ACh, 50h, 8Ah, 7 | |
| F000:6000 db 0Ah, 0C0h, 58h, 74h, 0AAh, 3Ah, 7, 74h, 0DAh, 50h, 8Ah | |
| F000:6000 db 7, 43h, 0E8h, 2Ch, 2, 0EBh, 0ECh, 43h, 0Ah, 0C0h, 78h | |
| F000:6000 db 92h, 4Bh, 3Ch, 3Fh, 0B0h, 91h, 52h, 51h, 75h, 3, 0E9h | |
| F000:6000 db 0E2h, 0, 0BAh, 6Bh, 3, 0E8h, 0D2h, 0Eh, 0E8h, 29h, 24h | |
| F000:6000 db 73h, 3, 0E9h, 2Eh, 1, 53h, 0BAh, 5Eh, 0Bh, 0E8h, 20h | |
| F000:6000 db 0, 75h, 3Eh, 0E8h, 0F0h, 3, 0BAh, 62h, 0Bh, 0E8h, 15h | |
| F000:6000 db 0, 0B0h, 89h, 75h, 3, 0EBh, 0Bh, 90h, 0BAh, 65h, 0Bh | |
| F000:6000 db 0E8h, 8, 0, 75h, 26h, 0B0h, 8Dh, 59h, 0E9h, 0ADh, 0 | |
| F000:6000 db 8Bh, 0F2h, 2Eh, 0ACh, 0Ah, 0C0h, 75h, 1, 0C3h, 8Ah | |
| F000:6000 db 0C8h, 0E8h, 95h, 0Eh, 3Ah, 0C1h, 75h, 0F6h, 43h, 42h | |
| F000:6000 db 0EBh, 0EAh, 47h, 4Fh, 20h, 0, 54h, 4Fh, 0, 55h, 42h | |
| F000:6000 db 0, 5Bh, 0E8h, 7Fh, 0Eh, 53h, 0CDh, 90h, 0BBh, 3, 1 | |
| F000:6000 db 2Ch, 41h, 2, 0C0h, 8Ah, 0C8h, 0B5h, 0, 3, 0D9h, 2Eh | |
| F000:6000 db 8Bh, 17h, 5Bh, 43h, 53h, 0E8h, 66h, 0Eh, 8Ah, 0C8h | |
| F000:6000 db 8Bh, 0F2h, 2Eh, 0ACh, 24h, 7Fh, 75h, 3, 0E9h, 0ABh | |
| F000:6000 db 1, 43h, 3Ah, 0C1h, 75h, 50h, 8Bh, 0F2h, 2Eh, 0ACh, 42h | |
| F000:6000 db 0Ah, 0C0h, 79h, 0E2h, 8Ah, 0C1h, 3Ch, 28h, 74h, 1Dh | |
| F000:6000 db 8Bh, 0F2h, 2Eh, 0ACh, 3Ch, 0D1h, 74h, 15h, 3Ch, 0D0h | |
| F000:6000 db 74h, 11h, 0E8h, 36h, 0Eh, 3Ch, 2Eh, 74h, 3, 0E8h, 0C7h | |
| F000:6000 db 15h, 0B0h, 0, 72h, 3, 0E9h, 7Ah, 1, 58h, 8Bh, 0F2h | |
| F000:6000 db 2Eh, 0ACh, 0CDh, 91h, 0Ah, 0C0h, 79h, 3, 0E9h, 23h | |
| F000:6000 db 0, 59h, 5Ah, 0Ch, 80h, 50h, 0B0h, 0FFh, 0E8h, 51h, 1 | |
| F000:6000 db 32h, 0C0h, 0A2h, 0FDh, 2, 58h, 0E8h, 48h, 1, 0E9h, 0B2h | |
| F000:6000 db 0FEh, 5Bh, 8Bh, 0F2h, 2Eh, 0ACh, 42h, 0Ah, 0C0h, 79h | |
| F000:6000 db 0F7h, 42h, 0EBh, 8Dh, 4Bh, 50h, 0CDh, 92h, 0BAh, 2 dup(0Ch) | |
| F000:6000 db 8Ah, 0C8h, 8Bh, 0F2h, 2Eh, 0ACh, 0Ah, 0C0h, 74h, 17h | |
| F000:6000 db 42h, 3Ah, 0C1h, 75h, 0F3h, 0EBh, 14h, 8Ch, 0AAh, 0ABh | |
| F000:6000 db 0A9h, 0A6h, 0A8h, 0D4h, 0A1h, 8Ah, 93h, 9Eh, 89h, 8Eh | |
| F000:6000 db 0CDh, 8Dh, 0, 32h, 0C0h, 0EBh, 2, 0B0h, 1, 0A2h, 0FDh | |
| F000:6000 db 2, 58h, 59h, 5Ah, 3Ch, 0A1h, 50h, 75h, 3, 0E8h, 0FAh | |
| F000:6000 db 0, 58h, 3Ch, 0B1h, 75h, 5, 0E8h, 0F4h, 0, 0B0h, 0E9h | |
| F000:6000 db 3Ch, 0D9h, 74h, 3, 0E9h, 0C6h, 0, 50h, 0E8h, 0E5h, 0 | |
| F000:6000 db 0B0h, 8Fh, 0E8h, 0E2h, 0, 58h, 50h, 0E9h, 0ADh, 0FEh | |
| F000:6000 db 8Ah, 7, 3Ch, 2Eh, 74h, 0Eh, 3Ch, 3Ah, 72h, 3, 0E9h | |
| F000:6000 db 90h, 0, 3Ch, 30h, 73h, 3, 0E9h, 89h, 0, 0A0h, 0FDh | |
| F000:6000 db 2, 0Ah, 0C0h, 8Ah, 7, 59h, 5Ah, 79h, 3, 0E9h, 62h, 0FEh | |
| F000:6000 db 74h, 27h, 3Ch, 2Eh, 75h, 3, 0E9h, 59h, 0FEh, 0B0h, 0Eh | |
| F000:6000 db 0E8h, 0ADh, 0, 52h, 2 dup(0E8h), 3, 0E8h, 0FDh, 0, 5Eh | |
| F000:6000 db 87h, 0DEh, 56h, 87h, 0DAh, 8Ah, 0C3h, 0E8h, 9Bh, 0 | |
| F000:6000 db 8Ah, 0C7h, 5Bh, 0E8h, 95h, 0, 0E9h, 0FFh, 0FDh, 52h | |
| F000:6000 db 51h, 8Ah, 7, 0E8h, 1Fh, 5Dh, 0E8h, 0DFh, 0, 59h, 5Ah | |
| F000:6000 db 53h, 0A0h, 0FBh, 2, 3Ch, 2, 75h, 1Ah, 8Bh, 1Eh, 0A3h | |
| F000:6000 db 4, 8Ah, 0C7h, 0Ah, 0C0h, 0B0h, 2, 75h, 0Eh, 8Ah, 0C3h | |
| F000:6000 db 8Ah, 0FBh, 0B3h, 0Fh, 3Ch, 0Ah, 73h, 0C8h, 4, 11h, 0EBh | |
| F000:6000 db 0CBh, 50h, 0D0h, 0C8h, 4, 1Bh, 0E8h, 5Ch, 0, 0BBh, 0A3h | |
| F000:6000 db 4, 0E8h, 4Fh, 0Eh, 72h, 3, 0BBh, 9Fh, 4, 58h, 50h, 8Ah | |
| F000:6000 db 7, 0E8h, 4Ah, 0, 58h, 43h, 0FEh, 0C8h, 75h, 0F4h, 5Bh | |
| F000:6000 db 0E9h, 0ADh, 0FDh, 0BAh, 6Ah, 3, 42h, 8Bh, 0F2h, 2Eh | |
| F000:6000 db 0ACh, 24h, 7Fh, 75h, 3, 0E9h, 6Bh, 0, 42h, 3Ah, 7, 8Bh | |
| F000:6000 db 0F2h, 2Eh, 0ACh, 75h, 0EBh, 0E9h, 6Fh, 0, 3Ch, 26h | |
| F000:6000 db 74h, 3, 0E9h, 0C5h, 0FDh, 53h, 0E8h, 0Bh, 2, 5Bh, 0E8h | |
| F000:6000 db 0D7h, 0Ch, 3Ch, 48h, 0B0h, 0Bh, 75h, 2, 0B0h, 0Ch, 0E8h | |
| F000:6000 db 0Bh, 0, 52h, 51h, 0E8h, 0D9h, 0Ch, 59h, 0E9h, 5Ch, 0FFh | |
| F000:6000 db 0B0h, 3Ah, 8Bh, 0FAh, 0AAh, 42h, 49h, 8Ah, 0C1h, 0Ah | |
| F000:6000 db 0C5h, 74h, 1, 0C3h, 0B2h, 17h, 0E9h, 9Bh, 0FAh, 0CDh | |
| F000:6000 db 93h, 5Bh, 4Bh, 0FEh, 0C8h, 0A2h, 0FDh, 2, 59h, 5Ah | |
| F000:6000 db 0E8h, 0A0h, 0Ch, 0E8h, 0DEh, 0FFh, 43h, 0E8h, 99h, 0Ch | |
| F000:6000 db 0E8h, 0F0h, 21h, 73h, 0F4h, 3Ch, 3Ah, 73h, 8, 3Ch, 30h | |
| F000:6000 db 73h, 0ECh, 3Ch, 2Eh, 74h, 0E8h, 0E9h, 33h, 0FDh, 8Ah | |
| F000:6000 db 7, 3Ch, 20h, 73h, 0Ah, 3Ch, 9, 74h, 6, 3Ch, 0Ah, 74h | |
| F000:6000 db 2, 0B0h, 20h, 50h, 0A0h, 0FDh, 2, 0FEh, 0C0h, 74h, 2 | |
| F000:6000 db 0FEh, 0C8h, 0E9h, 9Fh, 0FEh, 4Bh, 8Ah, 7, 3Ch, 20h | |
| F000:6000 db 74h, 0F9h, 3Ch, 9, 74h, 0F5h, 3Ch, 0Ah, 74h, 0F1h, 43h | |
| F000:6000 db 0C3h, 0B0h, 64h, 0A2h, 39h, 3, 0E8h, 0D2h, 29h, 0E8h | |
| F000:6000 db 55h, 20h, 0E7h, 52h, 89h, 16h, 3Bh, 3, 0A0h, 0FBh, 2 | |
| F000:6000 db 50h, 0E8h, 7Bh, 9, 58h, 53h, 0E8h, 29h, 10h, 0BBh, 56h | |
| F000:6000 db 4, 0E8h, 45h, 56h, 5Bh, 5Ah, 59h, 53h, 0E8h, 9Dh, 3 | |
| F000:6000 db 89h, 1Eh, 35h, 3, 0BBh, 2, 0, 3, 0DCh, 0E8h, 73h, 0F9h | |
| F000:6000 db 75h, 1Eh, 3, 0D9h, 52h, 4Bh, 8Ah, 37h, 4Bh, 8Ah, 17h | |
| F000:6000 db 2 dup(43h), 53h, 8Bh, 1Eh, 35h, 3, 3Bh, 0DAh, 5Bh, 5Ah | |
| F000:6000 db 75h, 0E5h, 5Ah, 8Bh, 0E3h, 89h, 1Eh, 45h, 3, 0B1h, 5Ah | |
| F000:6000 db 87h, 0DAh, 0B1h, 8, 0E8h, 0E3h, 1Eh, 53h, 8Bh, 1Eh | |
| F000:6000 db 35h, 3, 5Eh, 87h, 0DEh, 56h, 53h, 8Bh, 1Eh, 2Eh, 0 | |
| F000:6000 db 5Eh, 87h, 0DEh, 56h, 0E8h, 0EDh, 1Fh, 0CCh, 0E8h, 1Ah | |
| F000:6000 db 0Dh, 75h, 3, 0E9h, 0C6h, 0F9h, 72h, 3, 0E9h, 0C1h, 0F9h | |
| F000:6000 db 9Ch, 0E8h, 0Eh, 9, 9Dh, 53h, 78h, 3, 0E9h, 1Ch, 0, 0E8h | |
| F000:6000 db 8Ah, 5Dh, 5Eh, 87h, 0DEh, 56h, 0BAh, 1, 0, 8Ah, 7, 3Ch | |
| F000:6000 db 0CFh, 75h, 3, 0E8h, 0D4h, 10h, 52h, 53h, 87h, 0DAh | |
| F000:6000 db 0E8h, 0C6h, 56h, 0EBh, 27h, 0E8h, 12h, 5Dh, 0E8h, 0B1h | |
| F000:6000 db 55h, 5Bh, 51h, 52h, 0B9h, 0, 81h, 8Ah, 0F1h, 8Ah, 0D6h | |
| F000:6000 db 0CDh, 94h, 8Ah, 7, 3Ch, 0CFh, 0B0h, 1, 75h, 0Eh, 0E8h | |
| F000:6000 db 0CFh, 8, 53h, 0E8h, 0F4h, 5Ch, 0E8h, 93h, 55h, 0E8h | |
| F000:6000 db 12h, 6Dh, 5Bh, 51h, 52h, 8Ah, 0C8h, 0E8h, 0BAh, 0Ch | |
| F000:6000 db 8Ah, 0E8h, 51h, 4Bh, 0E8h, 0ABh, 0, 74h, 3, 0E9h, 47h | |
| F000:6000 db 0F9h, 0E8h, 81h, 16h, 0E8h, 0A0h, 0, 2 dup(53h), 8Bh | |
| F000:6000 db 1Eh, 5Ah, 4, 89h, 1Eh, 2Eh, 0, 8Bh, 1Eh, 3Bh, 3, 5Eh | |
| F000:6000 db 87h, 0DEh, 56h, 0B5h, 82h, 51h, 9Fh, 86h, 0C4h, 50h | |
| F000:6000 db 86h, 0C4h, 9Fh, 86h, 0C4h, 50h, 86h, 0C4h, 0E9h, 0CFh | |
| F000:6000 db 64h, 0B5h, 82h, 51h, 0EBh, 42h, 0E9h, 0CBh, 0F8h, 0E9h | |
| F000:6000 db 12h, 0F9h, 0C3h, 0E8h, 75h, 0, 0EBh, 50h, 0CDh, 95h | |
| F000:6000 db 0E9h, 63h, 0Fh, 0E9h, 0D5h, 2, 0Ah, 0C0h, 75h, 0EBh | |
| F000:6000 db 43h, 8Ah, 7, 43h, 0Ah, 7, 74h, 0E0h, 43h, 8Bh, 17h | |
| F000:6000 db 43h, 89h, 16h, 2Eh, 0, 0F6h, 6, 76h, 4, 0FFh, 74h, 26h | |
| F000:6000 db 53h, 0B0h, 5Bh, 0E8h, 0CAh, 1Ch, 87h, 0DAh, 0E8h, 70h | |
| F000:6000 db 56h, 0B0h, 5Dh, 0E8h, 0C0h, 1Ch, 5Bh, 0EBh, 13h, 0CDh | |
| F000:6000 db 96h, 0E8h, 9Bh, 1Dh, 89h, 26h, 45h, 3, 89h, 1Eh, 43h | |
| F000:6000 db 3, 8Ah, 7, 3Ch, 3Ah, 75h, 0BFh, 43h, 8Ah, 7, 3Ch, 3Ah | |
| F000:6000 db 72h, 0ABh, 0BAh, 0E8h, 0Eh, 52h, 74h, 0A4h, 2Ch, 81h | |
| F000:6000 db 72h, 0ABh, 3Ch, 4Ah, 73h, 0A2h, 32h, 0E4h, 2, 0C0h | |
| F000:6000 db 8Bh, 0F0h, 0CDh, 97h, 2Eh, 0FFh, 0B4h, 25h, 0, 43h | |
| F000:6000 db 8Ah, 7, 3Ch, 3Ah, 72h, 1, 0C3h, 3Ch, 20h, 74h, 0F4h | |
| F000:6000 db 72h, 8, 3Ch, 30h, 0F5h, 0FEh, 0C0h, 0FEh, 0C8h, 0C3h | |
| F000:6000 db 0Ah, 0C0h, 74h, 0FBh, 3Ch, 0Bh, 2 dup(72h), 3Ch, 1Eh | |
| F000:6000 db 75h, 6, 0A0h, 0, 3, 0Ah, 0C0h, 0C3h, 3Ch, 10h, 74h | |
| F000:6000 db 3Ch, 50h, 43h, 0A2h, 0, 3, 2Ch, 1Ch, 73h, 39h, 2Ch | |
| F000:6000 db 0F5h, 73h, 7, 3Ch, 0FEh, 75h, 1Bh, 8Ah, 7, 43h, 89h | |
| F000:6000 db 1Eh, 0FEh, 2, 0B7h, 0, 8Ah, 0D8h, 89h, 1Eh, 2, 3, 0B0h | |
| F000:6000 db 2, 0A2h, 1, 3, 0BBh, 4, 0, 58h, 0Ah, 0C0h, 0C3h, 8Ah | |
| F000:6000 db 7, 2 dup(43h), 89h, 1Eh, 0FEh, 2, 4Bh, 8Ah, 3Fh, 0EBh | |
| F000:6000 db 0E1h, 0E8h, 37h, 0, 8Bh, 1Eh, 0FEh, 2, 0EBh, 93h, 0FEh | |
| F000:6000 db 0C0h, 0D0h, 0C0h, 0A2h, 1, 3, 52h, 51h, 0BAh, 2, 3 | |
| F000:6000 db 87h, 0DAh, 8Ah, 2 dup(0E8h), 13h, 55h, 87h, 0DAh, 59h | |
| F000:6000 db 5Ah, 89h, 1Eh, 0FEh, 2, 58h, 0BBh, 4, 0, 0Ah, 0C0h | |
| F000:6000 db 0C3h, 3Ch, 9, 72h, 3, 0E9h, 69h, 0FFh, 3Ch, 30h, 0F5h | |
| F000:6000 db 0FEh, 0C0h, 0FEh, 0C8h, 0C3h, 0A0h, 0, 3, 3Ch, 0Fh | |
| F000:6000 db 73h, 17h, 3Ch, 0Dh, 72h, 13h, 8Bh, 1Eh, 2, 3, 75h, 0Ah | |
| F000:6000 db 3 dup(43h), 8Ah, 17h, 43h, 8Ah, 37h, 87h, 0DAh, 0E9h | |
| F000:6000 db 6Ah, 54h, 0A0h, 1, 3, 0A2h, 0FBh, 2, 3Ch, 8, 74h, 11h | |
| F000:6000 db 8Bh, 1Eh, 2, 3, 89h, 1Eh, 0A3h, 4, 8Bh, 1Eh, 4, 3, 89h | |
| F000:6000 db 1Eh, 0A5h, 4, 0C3h, 0BBh, 2, 3, 0E9h, 9Dh, 54h, 0B2h | |
| F000:6000 db 3, 0B9h, 0B2h, 2, 0B9h, 0B2h, 4, 0B9h, 0B2h, 8, 0E8h | |
| F000:6000 db 3Ah, 1Fh, 0B9h, 0BEh, 7, 51h, 72h, 0E5h, 2Ch, 41h, 8Ah | |
| F000:6000 db 0C8h, 8Ah, 2 dup(0E8h), 5, 0FFh, 3Ch, 0EAh, 75h, 0Fh | |
| F000:6000 db 0E8h, 2 dup(0FEh), 0E8h, 21h, 1Fh, 72h, 0D0h, 2Ch, 41h | |
| F000:6000 db 8Ah, 2 dup(0E8h), 0F2h, 0FEh, 8Ah, 0C5h, 2Ah, 0C1h | |
| F000:6000 db 72h, 0C3h, 0FEh, 0C0h, 5Eh, 87h, 0DEh, 56h, 0BBh, 60h | |
| F000:6000 db 3, 0B5h, 0, 3, 0D9h, 88h, 17h, 43h, 0FEh, 0C8h, 75h | |
| F000:6000 db 0F9h, 5Bh, 8Ah, 7, 3Ch, 2Ch, 75h, 0A8h, 0E8h, 0CEh | |
| F000:6000 db 0FEh, 0EBh, 0B5h, 0E8h, 0C9h, 0FEh, 0E8h, 0B3h, 0Eh | |
| F000:6000 db 79h, 9Bh, 0B2h, 5, 0E9h, 7Ah, 0F7h, 8Ah, 7, 3Ch, 2Eh | |
| F000:6000 db 8Bh, 16h, 49h, 3, 75h, 3, 0E9h, 0B2h, 0FEh, 4Bh, 0E8h | |
| F000:6000 db 0AEh, 0FEh, 3Ch, 0Eh, 74h, 2, 3Ch, 0Dh, 8Bh, 16h, 2 | |
| F000:6000 db 3, 75h, 3, 0E9h, 9Fh, 0FEh, 32h, 0C0h, 0A2h, 0, 3, 4Bh | |
| F000:6000 db 0BAh, 2 dup(0), 0E8h, 93h, 0FEh, 72h, 1, 0C3h, 53h | |
| F000:6000 db 9Fh, 50h, 0BBh, 98h, 19h, 3Bh, 0DAh, 72h, 1Bh, 8Ah | |
| F000:6000 db 0FEh, 8Ah, 0DAh, 3, 0DAh, 3, 0DBh, 3, 0DAh, 3, 0DBh | |
| F000:6000 db 58h, 9Eh, 2Ch, 30h, 8Ah, 0D0h, 0B6h, 0, 3, 0DAh, 87h | |
| F000:6000 db 0DAh, 5Bh, 0EBh, 0D5h, 58h, 9Eh, 5Bh, 0C3h, 75h, 3 | |
| F000:6000 db 0E9h, 7Ch, 1Ch, 3Ch, 0Eh, 74h, 7, 3Ch, 0Dh, 74h, 3 | |
| F000:6000 db 0E9h, 0A3h, 30h, 0E8h, 75h, 1Ch, 0B9h, 0E8h, 0Eh, 0EBh | |
| F000:6000 db 1Eh, 0B1h, 3, 0E8h, 2, 1Ch, 0E8h, 95h, 0FFh, 59h, 2 dup(53h) | |
| F000:6000 db 8Bh, 1Eh, 2Eh, 0, 5Eh, 87h, 0DEh, 56h, 0B0h, 8Dh, 9Fh | |
| F000:6000 db 86h, 0C4h, 50h, 86h, 0C4h, 51h, 0EBh, 4, 51h, 0E8h | |
| F000:6000 db 7Bh, 0FFh, 0A0h, 0, 3, 3Ch, 0Dh, 87h, 0DAh, 74h, 0BCh | |
| F000:6000 db 3Ch, 0Eh, 74h, 3, 0E9h, 0BEh, 0F6h, 87h, 0DAh, 53h | |
| F000:6000 db 8Bh, 1Eh, 0FEh, 2, 5Eh, 87h, 0DEh, 56h, 0E8h, 51h, 0 | |
| F000:6000 db 43h, 53h, 8Bh, 1Eh, 2Eh, 0, 3Bh, 0DAh, 5Bh, 73h, 3 | |
| F000:6000 db 0E8h, 4Fh, 0F9h, 72h, 3, 0E8h, 46h, 0F9h, 73h, 0Dh | |
| F000:6000 db 49h, 0B0h, 0Dh, 0A2h, 3Dh, 3, 5Bh, 0E8h, 0FCh, 12h | |
| F000:6000 db 8Bh, 0D9h, 0C3h, 0B2h, 8, 0E9h, 0A3h, 0F6h, 0CDh, 98h | |
| F000:6000 db 75h, 0F6h, 0B6h, 0FFh, 0E8h, 0FAh, 0F5h, 8Bh, 0E3h | |
| F000:6000 db 89h, 1Eh, 45h, 3, 3Ch, 8Dh, 0B2h, 3, 74h, 3, 0E9h, 8Bh | |
| F000:6000 db 0F6h, 5Bh, 89h, 1Eh, 2Eh, 0, 0BBh, 0E8h, 0Eh, 5Eh, 87h | |
| F000:6000 db 0DEh, 56h, 0B0h, 5Bh, 0B1h, 3Ah, 0EBh, 2, 0B1h, 0, 0B5h | |
| F000:6000 db 0, 8Ah, 0C1h, 8Ah, 0CDh, 8Ah, 0E8h, 4Bh, 0E8h, 0B0h | |
| F000:6000 db 0FDh, 0Ah, 0C0h, 74h, 0BEh, 3Ah, 0C5h, 74h, 0BAh, 43h | |
| F000:6000 db 3Ch, 22h, 74h, 0E9h, 0FEh, 0C0h, 74h, 0ECh, 2Ch, 8Ch | |
| F000:6000 db 75h, 0E7h, 3Ah, 0C5h, 12h, 0C6h, 8Ah, 0F0h, 0EBh, 0DFh | |
| F000:6000 db 58h, 4, 3, 0EBh, 14h, 0E8h, 0DCh, 25h, 0E8h, 5Fh, 1Ch | |
| F000:6000 db 0E7h, 89h, 16h, 3Bh, 3, 52h, 0A0h, 0FBh, 2, 50h, 0E8h | |
| F000:6000 db 85h, 5, 58h, 5Eh, 87h, 0DEh, 56h, 8Ah, 0E8h, 0A0h, 0FBh | |
| F000:6000 db 2, 3Ah, 0C5h, 8Ah, 0C5h, 74h, 6, 0E8h, 25h, 0Ch, 0A0h | |
| F000:6000 db 0FBh, 2, 0BAh, 0A3h, 4, 3Ch, 5, 72h, 3, 0BAh, 9Fh, 4 | |
| F000:6000 db 53h, 3Ch, 3, 75h, 31h, 8Bh, 1Eh, 0A3h, 4, 53h, 43h | |
| F000:6000 db 8Bh, 17h, 8Bh, 1Eh, 30h, 0, 3Bh, 0DAh, 73h, 11h, 8Bh | |
| F000:6000 db 1Eh, 5Ch, 3, 3Bh, 0DAh, 5Ah, 73h, 11h, 0BBh, 2Ch, 3 | |
| F000:6000 db 3Bh, 0DAh, 73h, 0Ah, 0B0h, 5Ah, 0E8h, 0E6h, 16h, 87h | |
| F000:6000 db 0DAh, 0E8h, 33h, 14h, 0E8h, 0DEh, 16h, 5Eh, 87h, 0DEh | |
| F000:6000 db 56h, 0E8h, 0BEh, 52h, 5Ah, 5Bh, 0C3h, 3Ch, 0A7h, 75h | |
| F000:6000 db 32h, 0E8h, 18h, 0FDh, 0E8h, 0ECh, 1Bh, 89h, 0E8h, 5Fh | |
| F000:6000 db 0FEh, 0Bh, 0D2h, 74h, 0Dh, 0E8h, 4Fh, 0F8h, 8Ah, 0F5h | |
| F000:6000 db 8Ah, 0D1h, 5Bh, 72h, 3, 0E9h, 13h, 0FFh, 89h, 16h, 4Dh | |
| F000:6000 db 3, 72h, 0DAh, 0A0h, 4Fh, 3, 0Ah, 0C0h, 8Ah, 0C2h, 74h | |
| F000:6000 db 0D1h, 0A0h, 28h, 0, 8Ah, 0D0h, 0E9h, 0CEh, 0F5h, 0E8h | |
| F000:6000 db 0E5h, 0Ch, 8Ah, 7, 8Ah, 0E8h, 3Ch, 8Dh, 74h, 5, 0E8h | |
| F000:6000 db 0B2h, 1Bh, 89h, 4Bh, 8Ah, 0CAh, 0FEh, 0C9h, 8Ah, 0C5h | |
| F000:6000 db 75h, 3, 0E9h, 0B9h, 0FCh, 0E8h, 1Ah, 0FEh, 3Ch, 2Ch | |
| F000:6000 db 75h, 0A7h, 0EBh, 0EEh, 0A0h, 4Fh, 3, 0Ah, 0C0h, 75h | |
| F000:6000 db 8, 33h, 0C0h, 0A3h, 4Dh, 3, 0E9h, 66h, 0F5h, 0FEh, 0C0h | |
| F000:6000 db 0A2h, 28h, 0, 80h, 3Fh, 83h, 74h, 12h, 0E8h, 0F7h, 0FDh | |
| F000:6000 db 75h, 0Ch, 0Bh, 0D2h, 74h, 10h, 0E8h, 73h, 0FEh, 32h | |
| F000:6000 db 0C0h, 0A2h, 4Fh, 3, 0C3h, 0E8h, 97h, 0FCh, 75h, 0FAh | |
| F000:6000 db 0EBh, 7, 32h, 0C0h, 0A2h, 4Fh, 3, 0FEh, 0C0h, 0A1h | |
| F000:6000 db 47h, 3, 0A3h, 2Eh, 0, 8Bh, 1Eh, 4Bh, 3, 75h, 0E5h, 80h | |
| F000:6000 db 3Fh, 0, 75h, 3, 83h, 0C3h, 4, 43h, 0E9h, 17h, 19h, 0E8h | |
| F000:6000 db 70h, 0Ch, 75h, 0DAh, 0Ah, 0C0h, 75h, 3, 0E9h, 0A4h | |
| F000:6000 db 0FDh, 0E9h, 20h, 0F5h, 0BAh, 0Ah, 0, 52h, 74h, 1Fh | |
| F000:6000 db 0E8h, 9Dh, 0FDh, 87h, 0DAh, 5Eh, 87h, 0DEh, 56h, 74h | |
| F000:6000 db 16h, 87h, 0DAh, 0E8h, 26h, 1Bh, 2Ch, 8Bh, 16h, 41h | |
| F000:6000 db 3, 74h, 8, 0E8h, 93h, 0FDh, 74h, 3, 0E9h, 0E1h, 0F4h | |
| F000:6000 db 87h, 0DAh, 8Ah, 0C7h, 0Ah, 0C3h, 75h, 3, 0E9h, 71h | |
| F000:6000 db 0FDh, 89h, 1Eh, 41h, 3, 0A2h, 3Eh, 3, 5Bh, 89h, 1Eh | |
| F000:6000 db 3Fh, 3, 59h, 0E9h, 0DBh, 0F5h, 0E8h, 2Ch, 4, 8Ah, 7 | |
| F000:6000 db 3Ch, 2Ch, 75h, 3, 0E8h, 19h, 0FCh, 3Ch, 89h, 74h, 5 | |
| F000:6000 db 0E8h, 0E9h, 1Ah, 0CDh, 4Bh, 53h, 0E8h, 0D2h, 51h, 5Bh | |
| F000:6000 db 74h, 19h, 0E8h, 6, 0FCh, 75h, 1, 0C3h, 3Ch, 0Eh, 75h | |
| F000:6000 db 3, 0E9h, 0CCh, 0FDh, 3Ch, 0Dh, 74h, 3, 0E9h, 0E0h, 0FBh | |
| F000:6000 db 8Bh, 1Eh, 2, 3, 0C3h, 0B6h, 1, 0E8h, 29h, 0FEh, 0Ah | |
| F000:6000 db 0C0h, 74h, 0F6h, 0E8h, 0E4h, 0FBh, 3Ch, 0A1h, 75h, 0F2h | |
| F000:6000 db 0FEh, 0CEh, 75h, 0EEh, 0EBh, 0D1h, 0E8h, 6Ah, 1, 0EBh | |
| F000:6000 db 3, 0E8h, 9Bh, 31h, 4Bh, 0E8h, 0CEh, 0FBh, 75h, 3, 0E8h | |
| F000:6000 db 1Dh, 19h, 75h, 3, 0E9h, 3Fh, 1, 3Ch, 0D7h, 75h, 3, 0E9h | |
| F000:6000 db 6Bh, 27h, 3Ch, 0CEh, 75h, 3, 0E9h, 0ABh, 0, 3Ch, 0D2h | |
| F000:6000 db 75h, 3, 0E9h, 0A4h, 0, 53h, 3Ch, 2Ch, 74h, 6Dh, 3Ch | |
| F000:6000 db 3Bh, 75h, 3, 0E9h, 17h, 1, 59h, 0E8h, 0A9h, 3, 53h | |
| F000:6000 db 0E8h, 0A3h, 7, 74h, 0Fh, 0E8h, 41h, 5Dh, 0E8h, 0C2h | |
| F000:6000 db 12h, 0C6h, 7, 20h, 8Bh, 1Eh, 0A3h, 4, 0FEh, 7, 0CDh | |
| F000:6000 db 99h, 8Bh, 1Eh, 0A3h, 4, 53h, 0E8h, 39h, 1Ch, 74h, 0Dh | |
| F000:6000 db 0E8h, 31h, 1, 78h, 3, 0E9h, 31h, 0, 0E8h, 81h, 45h | |
| F000:6000 db 0EBh, 3, 0A0h, 29h, 0, 8Ah, 0E8h, 0FEh, 0C0h, 74h, 23h | |
| F000:6000 db 0E8h, 1Eh, 1Ch, 74h, 7, 0E8h, 66h, 45h, 8Ah, 7, 0EBh | |
| F000:6000 db 3, 0E8h, 68h, 3Bh, 5Bh, 53h, 0Ah, 0C0h, 74h, 0Eh, 2 | |
| F000:6000 db 7, 0F5h, 73h, 4, 0FEh, 0C8h, 3Ah, 0C5h, 72h, 3, 0E8h | |
| F000:6000 db 99h, 18h, 5Bh, 0E8h, 0DEh, 12h, 5Bh, 0E9h, 6Bh, 0FFh | |
| F000:6000 db 0CDh, 9Ah, 0B9h, 32h, 0, 8Bh, 1Eh, 0E9h, 4, 3, 0D9h | |
| F000:6000 db 2 dup(0E8h), 1Bh, 8Ah, 7, 75h, 18h, 0A0h, 2Ah, 0, 8Ah | |
| F000:6000 db 2 dup(0E8h), 32h, 3Bh, 3Ch, 0FFh, 74h, 0Ch, 3Ah, 0C5h | |
| F000:6000 db 72h, 3, 0E8h, 6Ch, 18h, 72h, 3, 0E9h, 87h, 0, 2Ch, 0Eh | |
| F000:6000 db 73h, 0FCh, 0F6h, 0D0h, 0EBh, 72h, 50h, 0E8h, 7, 0FBh | |
| F000:6000 db 0E8h, 0F1h, 0Ah, 58h, 50h, 3Ch, 0D2h, 74h, 1, 4Ah, 8Ah | |
| F000:6000 db 0C6h, 0Ah, 0C0h, 78h, 3, 0E9h, 3, 0, 0BAh, 2 dup(0) | |
| F000:6000 db 53h, 0E8h, 0A6h, 1Bh, 74h, 0Dh, 0E8h, 9Eh, 0, 78h, 3 | |
| F000:6000 db 0E9h, 15h, 0, 0E8h, 0EEh, 44h, 0EBh, 3, 0A0h, 29h, 0 | |
| F000:6000 db 8Ah, 0D8h, 0FEh, 0C0h, 74h, 7, 0B7h, 0, 0E8h, 7Ch, 51h | |
| F000:6000 db 87h, 0DAh, 5Bh, 0E8h, 0A1h, 19h, 29h, 4Bh, 58h, 2Ch | |
| F000:6000 db 0D2h, 53h, 74h, 13h, 0B9h, 32h, 0, 8Bh, 1Eh, 0E9h, 4 | |
| F000:6000 db 3, 0D9h, 0E8h, 6Fh, 1Bh, 8Ah, 7, 75h, 3, 0E8h, 0BEh | |
| F000:6000 db 3Ah, 0F6h, 0D0h, 2, 0C2h, 72h, 10h, 0FEh, 0C0h, 74h | |
| F000:6000 db 19h, 0E8h, 0F6h, 17h, 8Ah, 0C2h, 0FEh, 0C8h, 79h, 3 | |
| F000:6000 db 0E9h, 0Dh, 0, 0FEh, 0C0h, 8Ah, 0E8h, 0B0h, 20h, 0E8h | |
| F000:6000 db 18h, 17h, 0FEh, 0CDh, 75h, 0F9h, 5Bh, 0E8h, 88h, 0FAh | |
| F000:6000 db 0E9h, 0BCh, 0FEh, 0CDh, 9Bh, 32h, 0C0h, 53h, 52h, 51h | |
| F000:6000 db 0E8h, 86h, 2Ch, 59h, 5Ah, 32h, 0C0h, 8Ah, 0F8h, 8Ah | |
| F000:6000 db 0D8h, 89h, 1Eh, 0E9h, 4, 5Bh, 0C3h, 53h, 32h, 0C0h | |
| F000:6000 db 9Fh, 86h, 0C4h, 50h, 86h, 0C4h, 0E8h, 0E9h, 2Ah, 74h | |
| F000:6000 db 3, 0E9h, 0E2h, 0F2h, 53h, 0B9h, 2Eh, 0, 0B2h, 2, 0B6h | |
| F000:6000 db 0FDh, 3, 0D9h, 88h, 37h, 0B0h, 0, 5Bh, 0E9h, 0E6h, 29h | |
| F000:6000 db 0E8h, 33h, 2Eh, 0Ah, 0C0h, 0C3h, 3Ch, 85h, 74h, 3, 0E9h | |
| F000:6000 db 0A2h, 33h, 0E8h, 11h, 19h, 85h, 3Ch, 23h, 75h, 3, 0E9h | |
| F000:6000 db 28h, 30h, 0E8h, 30h, 1Dh, 0E8h, 73h, 0, 0E8h, 7Ah, 22h | |
| F000:6000 db 0E8h, 44h, 4Fh, 52h, 53h, 0E8h, 0A7h, 1Ch, 5Ah, 59h | |
| F000:6000 db 73h, 3, 0E9h, 45h, 19h, 51h, 52h, 0B5h, 0, 0E8h, 45h | |
| F000:6000 db 11h, 5Bh, 0B0h, 3, 0E9h, 93h, 0FCh, 3Fh, 52h, 65h, 64h | |
| F000:6000 db 6Fh, 20h, 66h, 72h, 6Fh, 6Dh, 20h, 73h, 74h, 61h, 72h | |
| F000:6000 db 74h, 0Dh, 0, 43h, 8Ah, 7, 0Ah, 0C0h, 75h, 3, 0E9h, 92h | |
| F000:6000 db 0F2h, 3Ch, 22h, 75h, 0F2h, 0E9h, 9Bh, 0, 2 dup(5Bh) | |
| F000:6000 db 0EBh, 0Ch, 0CDh, 9Ch, 0A0h, 3Ah, 3, 0Ah, 0C0h, 74h | |
| F000:6000 db 3, 0E9h, 73h, 0F2h, 59h, 0BBh, 10h, 15h, 0E8h, 0Bh | |
| F000:6000 db 66h, 8Bh, 1Eh, 43h, 3, 0C3h, 0E8h, 94h, 2Fh, 53h, 0BBh | |
| F000:6000 db 0F6h, 1, 0E9h, 0E0h, 0, 3Ch, 23h, 74h, 0F2h, 0E8h, 0BEh | |
| F000:6000 db 1Ch, 0B9h, 8Ch, 15h, 51h, 3Ch, 22h, 0B0h, 0, 0B0h, 0FFh | |
| F000:6000 db 0A2h, 5Fh, 4, 75h, 0DFh, 0E8h, 0DBh, 10h, 8Ah, 7, 3Ch | |
| F000:6000 db 2Ch, 75h, 0Ah, 32h, 0C0h, 0A2h, 5Fh, 4, 0E8h, 9Dh, 0F9h | |
| F000:6000 db 0EBh, 4, 0E8h, 6Fh, 18h, 3Bh, 53h, 0E8h, 30h, 11h, 5Bh | |
| F000:6000 db 0C3h, 53h, 0A0h, 5Fh, 4, 0Ah, 0C0h, 74h, 0Ah, 0B0h | |
| F000:6000 db 3Fh, 0E8h, 0Ch, 16h, 0B0h, 20h, 0E8h, 7, 16h, 0E8h | |
| F000:6000 db 2, 1Ch, 59h, 73h, 3, 0E9h, 0A1h, 18h, 51h, 32h, 0C0h | |
| F000:6000 db 0A2h, 3Ah, 3, 0C6h, 7, 2Ch, 87h, 0DAh, 5Bh, 53h, 2 dup(52h) | |
| F000:6000 db 4Bh, 0B0h, 80h, 0A2h, 39h, 3, 0E8h, 5Eh, 0F9h, 0E8h | |
| F000:6000 db 0A5h, 22h, 8Ah, 7, 4Bh, 3Ch, 28h, 75h, 20h, 43h, 0B5h | |
| F000:6000 db 0, 0FEh, 0C5h, 0E8h, 4Ch, 0F9h, 75h, 3, 0E9h, 0E8h | |
| F000:6000 db 0F1h, 3Ch, 22h, 75h, 3, 0E9h, 45h, 0FFh, 3Ch, 28h, 74h | |
| F000:6000 db 0EBh, 3Ch, 29h, 75h, 0E9h, 0FEh, 0CDh, 75h, 0E5h, 0E8h | |
| F000:6000 db 31h, 0F9h, 74h, 7, 3Ch, 2Ch, 74h, 3, 0E9h, 0C9h, 0F1h | |
| F000:6000 db 5Eh, 87h, 0DEh, 56h, 8Ah, 7, 3Ch, 2Ch, 74h, 3, 0E9h | |
| F000:6000 db 31h, 0FFh, 0B0h, 1, 0A2h, 0A9h, 4, 0E8h, 62h, 0, 0A0h | |
| F000:6000 db 0A9h, 4, 0FEh, 0C8h, 74h, 3, 0E9h, 1Fh, 0FFh, 53h, 0E8h | |
| F000:6000 db 0Dh, 5, 75h, 3, 0E8h, 8Ch, 12h, 5Bh, 4Bh, 0E8h, 0FBh | |
| F000:6000 db 0F8h, 5Eh, 87h, 0DEh, 56h, 8Ah, 7, 3Ch, 2Ch, 74h, 8Bh | |
| F000:6000 db 5Bh, 4Bh, 0E8h, 0ECh, 0F8h, 0Ah, 0C0h, 5Bh, 74h, 3 | |
| F000:6000 db 0E9h, 0Ah, 0FFh, 0C6h, 7, 2Ch, 0EBh, 6, 53h, 8Bh, 1Eh | |
| F000:6000 db 5Eh, 3, 0Dh, 32h, 0C0h, 0A2h, 3Ah, 3, 5Eh, 87h, 0DEh | |
| F000:6000 db 56h, 0EBh, 4, 0E8h, 0A2h, 17h, 2Ch, 0E8h, 18h, 21h | |
| F000:6000 db 5Eh, 87h, 0DEh, 56h, 52h, 8Ah, 7, 3Ch, 2Ch, 74h, 0Ah | |
| F000:6000 db 0A0h, 3Ah, 3, 0Ah, 0C0h, 74h, 3, 0E9h, 8Bh, 0, 0Dh | |
| F000:6000 db 32h, 0C0h, 0A2h, 52h, 4, 0E8h, 62h, 19h, 74h, 3, 0E9h | |
| F000:6000 db 8Bh, 2Eh, 0E8h, 0A9h, 4, 50h, 75h, 38h, 0E8h, 9Bh, 0F8h | |
| F000:6000 db 8Ah, 0F0h, 8Ah, 0E8h, 3Ch, 22h, 74h, 0Eh, 0A0h, 3Ah | |
| F000:6000 db 3, 0Ah, 0C0h, 8Ah, 0F0h, 74h, 2, 0B6h, 3Ah, 0B5h, 2Ch | |
| F000:6000 db 4Bh, 0E8h, 0B6h, 0Fh, 58h, 4, 3, 8Ah, 0C8h, 0A0h, 52h | |
| F000:6000 db 4, 0Ah, 0C0h, 75h, 1, 0C3h, 8Ah, 0C1h, 87h, 0DAh, 0BBh | |
| F000:6000 db 0CAh, 16h, 5Eh, 87h, 0DEh, 56h, 52h, 0E9h, 0F0h, 0FAh | |
| F000:6000 db 0E8h, 63h, 0F8h, 58h, 50h, 3Ch, 5, 0B9h, 9Bh, 16h, 51h | |
| F000:6000 db 73h, 3, 0E9h, 0F9h, 52h, 0E9h, 0FDh, 52h, 4Bh, 0E8h | |
| F000:6000 db 4Fh, 0F8h, 74h, 7, 3Ch, 2Ch, 74h, 3, 0E9h, 60h, 0FEh | |
| F000:6000 db 5Eh, 87h, 0DEh, 56h, 4Bh, 0E8h, 3Eh, 0F8h, 74h, 3, 0E9h | |
| F000:6000 db 6Bh, 0FFh, 5Ah, 0A0h, 3Ah, 3, 0Ah, 0C0h, 87h, 0DAh | |
| F000:6000 db 74h, 3, 0E9h, 35h, 17h, 52h, 5Bh, 0E9h, 0A2h, 0FDh | |
| F000:6000 db 0E8h, 62h, 0FAh, 0Ah, 0C0h, 75h, 15h, 43h, 8Ah, 7, 43h | |
| F000:6000 db 0Ah, 7, 0B2h, 4, 75h, 3, 0E9h, 0CEh, 0F0h, 43h, 8Bh | |
| F000:6000 db 17h, 43h, 89h, 16h, 37h, 3, 0E8h, 8, 0F8h, 3Ch, 84h | |
| F000:6000 db 75h, 0DDh, 0E9h, 4Fh, 0FFh, 0E8h, 0D5h, 16h, 0E7h, 0E9h | |
| F000:6000 db 4, 0, 0E8h, 0CEh, 16h, 28h, 4Bh, 0B6h, 0, 52h, 0B1h | |
| F000:6000 db 1, 0E8h, 0A5h, 15h, 0CDh, 9Dh, 0E8h, 0B2h, 1, 32h, 0C0h | |
| F000:6000 db 0A2h, 0A8h, 4, 89h, 1Eh, 52h, 3, 8Bh, 1Eh, 52h, 3, 59h | |
| F000:6000 db 8Ah, 7, 89h, 1Eh, 31h, 3, 3Ch, 0E6h, 73h, 1, 0C3h, 3Ch | |
| F000:6000 db 0E9h, 72h, 75h, 2Ch, 0E9h, 8Ah, 0D0h, 75h, 0Ch, 0A0h | |
| F000:6000 db 0FBh, 2, 3Ch, 3, 8Ah, 0C2h, 75h, 3, 0E9h, 0D6h, 10h | |
| F000:6000 db 3Ch, 0Ch, 73h, 0E5h, 0BBh, 80h, 3, 0B6h, 0, 3, 0DAh | |
| F000:6000 db 8Ah, 0C5h, 2Eh, 8Ah, 37h, 3Ah, 0C6h, 73h, 0D5h, 51h | |
| F000:6000 db 0B9h, 3Eh, 17h, 51h, 8Ah, 0C6h, 0CDh, 9Eh, 3Ch, 7Fh | |
| F000:6000 db 74h, 64h, 3Ch, 51h, 72h, 6Dh, 24h, 0FEh, 3Ch, 7Ah, 74h | |
| F000:6000 db 67h, 0A0h, 0FBh, 2, 2Ch, 3, 75h, 3, 0E9h, 3Dh, 0F0h | |
| F000:6000 db 0Ah, 0C0h, 0FFh, 36h, 0A3h, 4, 79h, 3, 0E9h, 11h, 0 | |
| F000:6000 db 0FFh, 36h, 0A5h, 4, 7Ah, 3, 0E9h, 8, 0, 0FFh, 36h, 9Fh | |
| F000:6000 db 4, 0FFh, 36h, 0A1h, 2 dup(4), 3, 8Ah, 0CAh, 8Ah, 0E8h | |
| F000:6000 db 51h, 0B9h, 23h, 18h, 51h, 8Bh, 1Eh, 31h, 3, 0E9h, 63h | |
| F000:6000 db 0FFh, 0B6h, 0, 2Ch, 0E6h, 72h, 34h, 3Ch, 3, 73h, 30h | |
| F000:6000 db 3Ch, 1, 2 dup(0D0h), 32h, 0C6h, 3Ah, 0C6h, 8Ah, 0F0h | |
| F000:6000 db 73h, 3, 0E9h, 0DEh, 0EFh, 89h, 1Eh, 31h, 3, 0E8h, 36h | |
| F000:6000 db 0F7h, 0EBh, 0E0h, 0E8h, 65h, 53h, 0E8h, 37h, 4Ch, 0B9h | |
| F000:6000 db 29h, 65h, 0B6h, 7Fh, 0EBh, 0C9h, 52h, 0E8h, 0B3h, 53h | |
| F000:6000 db 5Ah, 53h, 0B9h, 31h, 1Bh, 0EBh, 0BEh, 8Ah, 0C5h, 3Ch | |
| F000:6000 db 64h, 72h, 1, 0C3h, 51h, 52h, 0BAh, 4, 64h, 0BBh, 3 | |
| F000:6000 db 1Bh, 53h, 0E8h, 11h, 3, 74h, 3, 0E9h, 76h, 0FFh, 8Bh | |
| F000:6000 db 1Eh, 0A3h, 4, 53h, 0B9h, 0C8h, 25h, 0EBh, 9Ch, 59h | |
| F000:6000 db 8Ah, 0C1h, 0A2h, 0FCh, 2, 0A0h, 0FBh, 2, 3Ah, 0C5h | |
| F000:6000 db 75h, 0Dh, 3Ch, 2, 74h, 28h, 3Ch, 4, 75h, 3, 0E9h, 7Fh | |
| F000:6000 db 0, 73h, 39h, 8Ah, 0F0h, 8Ah, 0C5h, 3Ch, 8, 74h, 2Eh | |
| F000:6000 db 8Ah, 0C6h, 3Ch, 8, 74h, 57h, 8Ah, 0C5h, 3Ch, 4, 74h | |
| F000:6000 db 66h, 8Ah, 0C6h, 3Ch, 3, 75h, 3, 0E9h, 7Ch, 0EFh, 73h | |
| F000:6000 db 65h, 0BBh, 0AAh, 3, 0B5h, 0, 3, 0D9h, 3, 0D9h, 2Eh | |
| F000:6000 db 8Ah, 0Fh, 43h, 2Eh, 8Ah, 2Fh, 5Ah, 8Bh, 1Eh, 0A3h, 4 | |
| F000:6000 db 51h, 0C3h, 0E8h, 0Ch, 53h, 0E8h, 25h, 4Ch, 5Bh, 89h | |
| F000:6000 db 1Eh, 0A1h, 4, 5Bh, 89h, 1Eh, 9Fh, 4, 59h, 5Ah, 0E8h | |
| F000:6000 db 5Ah, 4Bh, 0E8h, 0F7h, 52h, 0BBh, 96h, 3, 0A0h, 0FCh | |
| F000:6000 db 2, 0D0h, 0C0h, 2, 0C3h, 8Ah, 0D8h, 12h, 0C7h, 2Ah, 0C3h | |
| F000:6000 db 8Ah, 0F8h, 2Eh, 8Bh, 1Fh, 0FFh, 0E3h, 8Ah, 0C5h, 50h | |
| F000:6000 db 0E8h, 0F6h, 4Bh, 58h, 0A2h, 0FBh, 2, 3Ch, 4, 74h, 0D3h | |
| F000:6000 db 5Bh, 89h, 1Eh, 0A3h, 4, 0EBh, 0D1h, 0E8h, 97h, 52h | |
| F000:6000 db 59h, 5Ah, 0BBh, 0A0h, 3, 0EBh, 0CDh, 5Bh, 0E8h, 61h | |
| F000:6000 db 4Bh, 0E8h, 65h, 4Ah, 0E8h, 28h, 4Bh, 5Bh, 89h, 1Eh | |
| F000:6000 db 0A5h, 4, 5Bh, 89h, 1Eh, 0A3h, 4, 0EBh, 0E5h, 53h, 87h | |
| F000:6000 db 0DAh, 0E8h, 50h, 4Ah, 5Bh, 0E8h, 45h, 4Bh, 0E8h, 49h | |
| F000:6000 db 4Ah, 0E9h, 3Bh, 4Ch, 0E8h, 33h, 0F6h, 75h, 3, 0E9h | |
| F000:6000 db 0E4h, 0EEh, 73h, 3, 0E9h, 0CCh, 50h, 0E8h, 4Eh, 16h | |
| F000:6000 db 72h, 3, 0E9h, 0DBh, 0, 3Ch, 20h, 73h, 3, 0E9h, 7Fh | |
| F000:6000 db 0F6h, 0CDh, 9Fh, 0FEh, 0C0h, 75h, 3, 0E9h, 6Ah, 1, 0FEh | |
| F000:6000 db 0C8h, 3Ch, 0E9h, 74h, 0D5h, 3Ch, 0EAh, 75h, 3, 0E9h | |
| F000:6000 db 0AFh, 0, 3Ch, 22h, 75h, 3, 0E9h, 2Dh, 0Dh, 3Ch, 0D3h | |
| F000:6000 db 75h, 3, 0E9h, 0ECh, 1, 3Ch, 26h, 75h, 3, 0E9h, 0D1h | |
| F000:6000 db 0, 3Ch, 0D5h, 75h, 0Ch, 2 dup(0E8h), 0F5h, 0A0h, 28h | |
| F000:6000 db 0, 53h, 0E8h, 43h, 2, 5Bh, 0C3h, 3Ch, 0D4h, 75h, 0Dh | |
| F000:6000 db 0E8h, 0D8h, 0F5h, 53h, 8Bh, 1Eh, 47h, 3, 0E8h, 0F7h | |
| F000:6000 db 4Ah, 5Bh, 0C3h, 3Ch, 0DAh, 75h, 2Eh, 0E8h, 0C7h, 0F5h | |
| F000:6000 db 0E8h, 9Bh, 14h, 28h, 3Ch, 23h, 75h, 0Dh, 0E8h, 0B8h | |
| F000:6000 db 5, 53h, 0E8h, 40h, 26h, 87h, 0DAh, 5Bh, 0E9h, 3, 0 | |
| F000:6000 db 0E8h, 0F9h, 1Eh, 0E8h, 83h, 14h, 29h, 53h, 87h, 0DAh | |
| F000:6000 db 0Bh, 0DBh, 75h, 3, 0E9h, 0DDh, 0F6h, 0E8h, 8Dh, 4Bh | |
| F000:6000 db 5Bh, 0C3h, 3Ch, 0D0h, 75h, 3, 0E9h, 0, 2, 3Ch, 0D8h | |
| F000:6000 db 75h, 3, 0E9h, 8Bh, 10h, 3Ch, 0C8h, 75h, 3, 0E9h, 0D0h | |
| F000:6000 db 3Bh, 3Ch, 0DCh, 75h, 3, 0E9h, 4Ch, 2Eh, 3Ch, 0DEh, 75h | |
| F000:6000 db 3, 0E9h, 0F9h, 12h, 3Ch, 0D6h, 75h, 3, 0E9h, 70h, 0Fh | |
| F000:6000 db 3Ch, 85h, 75h, 3, 0E9h, 38h, 2Ah, 3Ch, 0DBh, 75h, 3 | |
| F000:6000 db 0E9h, 0A4h, 3Bh, 3Ch, 0D1h, 75h, 3, 0E9h, 7Eh, 2, 0E8h | |
| F000:6000 db 60h, 0FDh, 0E8h, 2Eh, 14h, 29h, 0C3h, 0B6h, 7Dh, 0E8h | |
| F000:6000 db 5Dh, 0FDh, 8Bh, 1Eh, 52h, 3, 53h, 0E8h, 0D6h, 63h, 5Bh | |
| F000:6000 db 0C3h, 0E8h, 94h, 1Dh, 53h, 87h, 0DAh, 89h, 1Eh, 0A3h | |
| F000:6000 db 4, 0E8h, 41h, 1, 74h, 3, 0E8h, 0AFh, 4Ah, 5Bh, 0C3h | |
| F000:6000 db 8Ah, 7, 3Ch, 61h, 72h, 0F9h, 3Ch, 7Bh, 73h, 0F5h, 24h | |
| F000:6000 db 5Fh, 0C3h, 3Ch, 26h, 74h, 3, 0E9h, 6Ch, 0F6h, 0BAh | |
| F000:6000 db 2 dup(0), 0E8h, 18h, 0F5h, 0E8h, 0E5h, 0FFh, 3Ch, 4Fh | |
| F000:6000 db 74h, 39h, 3Ch, 48h, 75h, 34h, 0B5h, 5, 43h, 8Ah, 7 | |
| F000:6000 db 0E8h, 0D5h, 0FFh, 0E8h, 2Ah, 15h, 87h, 0DAh, 73h, 0Ah | |
| F000:6000 db 3Ch, 3Ah, 73h, 4Dh, 2Ch, 30h, 72h, 49h, 0EBh, 6, 3Ch | |
| F000:6000 db 47h, 73h, 43h, 2Ch, 37h, 3, 0DBh, 3, 0DBh, 3, 0DBh | |
| F000:6000 db 3, 0DBh, 0Ah, 0C3h, 8Ah, 0D8h, 87h, 0DAh, 0FEh, 0CDh | |
| F000:6000 db 75h, 0D1h, 0E9h, 8Ch, 0EDh, 4Bh, 0E8h, 0D5h, 0F4h, 87h | |
| F000:6000 db 0DAh, 73h, 24h, 3Ch, 38h, 72h, 3, 0E9h, 6Bh, 0EDh, 0B9h | |
| F000:6000 db 0D0h, 7, 51h, 3, 0DBh, 72h, 9Ch, 3, 0DBh, 72h, 98h | |
| F000:6000 db 3, 0DBh, 72h, 94h, 59h, 0B5h, 0, 2Ch, 30h, 8Ah, 0C8h | |
| F000:6000 db 3, 0D9h, 87h, 0DAh, 0EBh, 0D5h, 0E8h, 99h, 4Ah, 87h | |
| F000:6000 db 0DAh, 0C3h, 43h, 8Ah, 7, 2Ch, 81h, 3Ch, 7, 75h, 0Eh | |
| F000:6000 db 53h, 0E8h, 9Ah, 0F4h, 3Ch, 28h, 5Bh, 74h, 3, 0E9h, 0E0h | |
| F000:6000 db 49h, 0B0h, 7, 0B5h, 0, 0D0h, 0C0h, 8Ah, 0C8h, 51h, 0E8h | |
| F000:6000 db 86h, 0F4h, 8Ah, 0C1h, 3Ch, 5, 73h, 22h, 0E8h, 83h, 0FCh | |
| F000:6000 db 0E8h, 51h, 13h, 2Ch, 0E8h, 94h, 49h, 87h, 0DAh, 8Bh | |
| F000:6000 db 1Eh, 0A3h, 4, 5Eh, 87h, 0DEh, 56h, 53h, 87h, 0DAh, 0E8h | |
| F000:6000 db 65h, 4, 87h, 0DAh, 5Eh, 87h, 0DEh, 56h, 0EBh, 21h, 0E8h | |
| F000:6000 db 2 dup(0FEh), 5Eh, 87h, 0DEh, 56h, 8Ah, 0C3h, 3Ch, 0Ch | |
| F000:6000 db 72h, 0Bh, 3Ch, 1Bh, 0CDh, 0A1h, 53h, 73h, 3, 0E8h, 7Bh | |
| F000:6000 db 50h, 5Bh, 0BAh, 0D5h, 19h, 52h, 0B0h, 1, 0A2h, 0A8h | |
| F000:6000 db 4, 2 dup(0B9h), 0, 0CDh, 0A0h, 3, 0D9h, 2Eh, 0FFh, 27h | |
| F000:6000 db 0FEh, 0CEh, 3Ch, 0EAh, 74h, 85h, 3Ch, 2Dh, 74h, 81h | |
| F000:6000 db 0FEh, 0C6h, 3Ch, 2Bh, 75h, 1, 0C3h, 3Ch, 0E9h, 74h | |
| F000:6000 db 0FBh, 9Fh, 4Bh, 9Eh, 0C3h, 0FEh, 0C0h, 12h, 0C0h, 59h | |
| F000:6000 db 22h, 0C5h, 4, 0FFh, 1Ah, 0C0h, 0E8h, 0F8h, 49h, 0EBh | |
| F000:6000 db 0Fh, 0B6h, 5Ah, 0E8h, 12h, 0FCh, 0E8h, 92h, 50h, 0F7h | |
| F000:6000 db 0D3h, 89h, 1Eh, 0A3h, 4, 59h, 0E9h, 19h, 0FCh, 0A0h | |
| F000:6000 db 0FBh, 2, 3Ch, 8, 0FEh, 0C8h, 0FEh, 0C8h, 0FEh, 0C8h | |
| F000:6000 db 0C3h, 8Ah, 0C5h, 50h, 0E8h, 76h, 50h, 58h, 5Ah, 3Ch | |
| F000:6000 db 7Ah, 75h, 3, 0E9h, 89h, 4Ah, 3Ch, 7Bh, 75h, 3, 0E9h | |
| F000:6000 db 66h, 48h, 0B9h, 0Ch, 65h, 51h, 3Ch, 46h, 75h, 3, 0Bh | |
| F000:6000 db 0DAh, 0C3h, 3Ch, 50h, 75h, 3, 23h, 0DAh, 0C3h, 2 dup(3Ch) | |
| F000:6000 db 75h, 3, 33h, 0DAh, 0C3h, 3Ch, 32h, 75h, 5, 33h, 0DAh | |
| F000:6000 db 0F7h, 0D3h, 0C3h, 0F7h, 0D3h, 23h, 0DAh, 0F7h, 0D3h | |
| F000:6000 db 0C3h, 2Bh, 0DAh, 0E9h, 0CFh, 48h, 0A0h, 63h, 0, 0EBh | |
| F000:6000 db 3, 0E8h, 0AFh, 33h, 0FEh, 0C0h, 8Ah, 0D8h, 32h, 0C0h | |
| F000:6000 db 8Ah, 0F8h, 0E9h, 84h, 49h, 0E8h, 2Eh, 0, 52h, 0E8h | |
| F000:6000 db 31h, 0FEh, 5Eh, 87h, 0DEh, 56h, 8Bh, 17h, 81h, 0FAh | |
| F000:6000 db 2 dup(0FFh), 3, 0E9h, 0BCh, 0F4h, 0Eh, 0BBh, 7, 65h | |
| F000:6000 db 53h, 0FFh, 36h, 50h, 3, 52h, 0A0h, 0FBh, 2, 50h, 3Ch | |
| F000:6000 db 3, 75h, 3, 0E8h, 0F7h, 0Ch, 58h, 87h, 0DAh, 0BBh, 0A3h | |
| F000:6000 db 4, 0CBh, 0E8h, 61h, 0F3h, 0B9h, 2 dup(0), 3Ch, 1Bh | |
| F000:6000 db 73h, 10h, 3Ch, 11h, 72h, 0Ch, 0E8h, 53h, 0F3h, 0A0h | |
| F000:6000 db 2, 3, 0Ah, 0C0h, 2 dup(0D0h), 8Ah, 0C8h, 87h, 0DAh | |
| F000:6000 db 0BBh, 12h, 0, 3, 0D9h, 87h, 0DAh, 0C3h, 0E8h, 0D9h | |
| F000:6000 db 0FFh, 52h, 0E8h, 10h, 12h, 0E7h, 0E8h, 0C2h, 6, 5Eh | |
| F000:6000 db 87h, 0DEh, 56h, 89h, 17h, 5Bh, 0C3h, 3Ch, 0D0h, 74h | |
| F000:6000 db 0E9h, 3Ch, 0D1h, 74h, 1Ch, 0E8h, 0F9h, 11h, 53h, 0E8h | |
| F000:6000 db 0F5h, 11h, 45h, 0E8h, 0F1h, 11h, 47h, 8Ch, 0DAh, 74h | |
| F000:6000 db 7, 0E8h, 0E9h, 11h, 0E7h, 0E8h, 9Bh, 6, 89h, 16h, 50h | |
| F000:6000 db 3, 0C3h, 0E8h, 0F3h, 1, 0E8h, 0E0h, 1, 87h, 0DAh, 89h | |
| F000:6000 db 17h, 87h, 0DAh, 8Ah, 7, 3Ch, 28h, 74h, 3, 0E9h, 32h | |
| F000:6000 db 0F5h, 0E8h, 0F1h, 0F2h, 0E8h, 3Fh, 1Bh, 8Ah, 7, 3Ch | |
| F000:6000 db 29h, 75h, 3, 0E9h, 23h, 0F5h, 0E8h, 0B9h, 11h, 2Ch | |
| F000:6000 db 0EBh, 0EEh, 0E8h, 0C9h, 1, 0A0h, 0FBh, 2, 0Ah, 0C0h | |
| F000:6000 db 50h, 89h, 1Eh, 52h, 3, 87h, 0DAh, 8Bh, 1Fh, 0Bh, 0DBh | |
| F000:6000 db 75h, 3, 0E9h, 74h, 0EBh, 8Ah, 7, 3Ch, 28h, 74h, 3, 0E9h | |
| F000:6000 db 0CEh, 0, 0E8h, 0BBh, 0F2h, 89h, 1Eh, 31h, 3, 87h, 0DAh | |
| F000:6000 db 8Bh, 1Eh, 52h, 3, 0E8h, 85h, 11h, 28h, 32h, 0C0h, 50h | |
| F000:6000 db 53h, 87h, 0DAh, 0B0h, 80h, 0A2h, 39h, 3, 0E8h, 0F0h | |
| F000:6000 db 1Ah, 87h, 0DAh, 5Eh, 87h, 0DEh, 56h, 0A0h, 0FBh, 2 | |
| F000:6000 db 50h, 52h, 0E8h, 9Bh, 0FAh, 89h, 1Eh, 52h, 3, 5Bh, 89h | |
| F000:6000 db 1Eh, 31h, 3, 58h, 0E8h, 41h, 1, 0B1h, 4, 0E8h, 37h | |
| F000:6000 db 10h, 0BBh, 0F8h, 0FFh, 3, 0DCh, 8Bh, 0E3h, 0E8h, 0F9h | |
| F000:6000 db 47h, 0A0h, 0FBh, 2, 50h, 8Bh, 1Eh, 52h, 3, 8Ah, 7, 3Ch | |
| F000:6000 db 29h, 74h, 13h, 0E8h, 3Bh, 11h, 2Ch, 53h, 8Bh, 1Eh, 31h | |
| F000:6000 db 3, 0E8h, 32h, 11h, 2Ch, 0EBh, 0B1h, 58h, 0A2h, 0E4h | |
| F000:6000 db 3, 58h, 0Ah, 0C0h, 74h, 4Eh, 0A2h, 0FBh, 2, 0BBh, 2 dup(0) | |
| F000:6000 db 3, 0DCh, 0E8h, 0BFh, 47h, 0BBh, 8, 0, 3, 0DCh, 8Bh | |
| F000:6000 db 0E3h, 5Ah, 0B3h, 3, 0FEh, 0C3h, 4Ah, 8Bh, 0F2h, 0ACh | |
| F000:6000 db 0Ah, 0C0h, 78h, 0F6h, 3 dup(4Ah), 0A0h, 0FBh, 2 dup(2) | |
| F000:6000 db 0C3h, 8Ah, 0E8h, 0A0h, 0E4h, 3, 8Ah, 0C8h, 2, 0C5h | |
| F000:6000 db 3Ch, 64h, 72h, 3, 0E9h, 54h, 0F3h, 50h, 8Ah, 0C3h, 0B5h | |
| F000:6000 db 0, 0BBh, 0E6h, 2 dup(3), 0D9h, 8Ah, 0C8h, 0E8h, 0DFh | |
| F000:6000 db 0, 0B9h, 0C5h, 1Ch, 2 dup(51h), 0E9h, 99h, 0F4h, 8Bh | |
| F000:6000 db 1Eh, 52h, 3, 0E8h, 0FAh, 0F1h, 53h, 8Bh, 1Eh, 31h, 3 | |
| F000:6000 db 0E8h, 0C9h, 10h, 29h, 0B0h, 52h, 89h, 1Eh, 31h, 3, 0A0h | |
| F000:6000 db 7Ch, 3, 2 dup(4), 50h, 0D0h, 0E8h, 8Ah, 0C8h, 0E8h | |
| F000:6000 db 96h, 0Fh, 58h, 8Ah, 0C8h, 0F6h, 0D0h, 0FEh, 0C0h, 8Ah | |
| F000:6000 db 0D8h, 0B7h, 0FFh, 3, 0DCh, 8Bh, 0E3h, 53h, 0BAh, 7Ah | |
| F000:6000 db 3, 0E8h, 9Eh, 0, 5Bh, 89h, 1Eh, 7Ah, 3, 8Bh, 1Eh, 0E4h | |
| F000:6000 db 3, 89h, 1Eh, 7Ch, 3, 8Bh, 0CBh, 0BBh, 7Eh, 3, 0BAh | |
| F000:6000 db 0E6h, 3, 0E8h, 86h, 0, 8Ah, 0F8h, 8Ah, 0D8h, 89h, 1Eh | |
| F000:6000 db 0E4h, 3, 8Bh, 1Eh, 50h, 4, 43h, 89h, 1Eh, 50h, 4, 8Ah | |
| F000:6000 db 0C7h, 0Ah, 0C3h, 0A2h, 4Dh, 4, 8Bh, 1Eh, 31h, 3, 0E8h | |
| F000:6000 db 90h, 0F9h, 4Bh, 0E8h, 8Dh, 0F1h, 74h, 3, 0E9h, 29h | |
| F000:6000 db 0EAh, 0E8h, 8Dh, 0FDh, 75h, 11h, 0BAh, 2Ch, 3, 8Bh | |
| F000:6000 db 1Eh, 0A3h, 4, 3Bh, 0DAh, 72h, 6, 0E8h, 7Ch, 8, 0E8h | |
| F000:6000 db 0E6h, 8, 8Bh, 1Eh, 7Ah, 3, 8Ah, 0F7h, 8Ah, 0D3h, 2 dup(43h) | |
| F000:6000 db 8Ah, 0Fh, 43h, 8Ah, 2Fh, 4 dup(41h), 0BBh, 7Ah, 3, 0E8h | |
| F000:6000 db 2Fh, 0, 87h, 0DAh, 8Bh, 0E3h, 8Bh, 1Eh, 50h, 4, 4Bh | |
| F000:6000 db 89h, 1Eh, 50h, 4, 8Ah, 0C7h, 0Ah, 0C3h, 0A2h, 4Dh, 4 | |
| F000:6000 db 5Bh, 58h, 53h, 24h, 7, 0BBh, 8Ch, 3, 8Ah, 0C8h, 0B5h | |
| F000:6000 db 0, 3, 0D9h, 0E8h, 2 dup(0FCh), 5Bh, 0C3h, 8Bh, 0F2h | |
| F000:6000 db 0ACh, 88h, 7, 43h, 42h, 49h, 8Ah, 0C5h, 0Ah, 0C1h, 75h | |
| F000:6000 db 0F2h, 0C3h, 53h, 8Bh, 1Eh, 2Eh, 0, 43h, 0Bh, 0DBh, 5Bh | |
| F000:6000 db 75h, 0F4h, 0B2h, 0Ch, 0E9h, 0CEh, 0E9h, 0E8h, 0E7h | |
| F000:6000 db 0Fh, 0D1h, 0B0h, 80h, 0A2h, 39h, 3, 0Ah, 7, 8Ah, 0C8h | |
| F000:6000 db 0E9h, 5Bh, 19h, 3Ch, 7Eh, 74h, 3, 0E9h, 9Dh, 0E9h, 43h | |
| F000:6000 db 8Ah, 7, 43h, 3Ch, 83h, 75h, 3, 0E9h, 0A4h, 0Ch, 3Ch | |
| F000:6000 db 0A0h, 75h, 3, 0E9h, 0AFh, 37h, 3Ch, 0A2h, 75h, 3, 0E9h | |
| F000:6000 db 0C0h, 38h, 0E9h, 81h, 0E9h, 0E8h, 75h, 4, 87h, 0DAh | |
| F000:6000 db 0ECh, 0E9h, 39h, 0FDh, 0E8h, 61h, 4, 52h, 0E8h, 0A7h | |
| F000:6000 db 0Fh, 2Ch, 0E8h, 0CBh, 0, 5Ah, 0C3h, 0E8h, 0F0h, 0FFh | |
| F000:6000 db 0EEh, 0C3h, 0E8h, 0EBh, 0FFh, 52h, 50h, 0B2h, 0, 4Bh | |
| F000:6000 db 0E8h, 0BAh, 0F0h, 74h, 7, 0E8h, 8Ch, 0Fh, 2Ch, 0E8h | |
| F000:6000 db 0B0h, 0, 58h, 8Ah, 0F0h, 5Eh, 87h, 0DEh, 56h, 0A0h | |
| F000:6000 db 5Eh, 0, 0Ah, 0C0h, 75h, 0Bh, 87h, 0DAh, 0ECh, 87h, 0DAh | |
| F000:6000 db 32h, 0C2h, 22h, 0C6h, 74h, 0EEh, 5Bh, 0C3h, 0E9h, 34h | |
| F000:6000 db 0E9h, 3Ch, 23h, 74h, 3Ch, 0E8h, 96h, 0F8h, 0E8h, 91h | |
| F000:6000 db 0FCh, 75h, 58h, 0E8h, 7Dh, 20h, 8Ah, 0C6h, 0B6h, 0 | |
| F000:6000 db 0F6h, 0D0h, 0Ah, 0C0h, 79h, 3, 0E9h, 0B3h, 0F1h, 8Ah | |
| F000:6000 db 0D0h, 52h, 0E8h, 48h, 0Fh, 2Ch, 0E8h, 6Ch, 0, 5Ah, 9Fh | |
| F000:6000 db 86h, 0C4h, 50h, 86h, 0C4h, 53h, 52h, 8Ah, 0C2h, 2, 0C0h | |
| F000:6000 db 8Ah, 0D0h, 0B0h, 14h, 9Fh, 86h, 0C4h, 50h, 86h, 0C4h | |
| F000:6000 db 0E9h, 8, 20h, 0E8h, 50h, 0F0h, 0E8h, 4Ch, 0, 50h, 0E8h | |
| F000:6000 db 20h, 0Fh, 2Ch, 0E8h, 44h, 0, 58h, 53h, 52h, 0E8h, 0C7h | |
| F000:6000 db 20h, 0E8h, 32h, 3Ah, 0Ah, 0C0h, 79h, 3, 0E9h, 71h, 0F1h | |
| F000:6000 db 43h, 5Ah, 88h, 17h, 5Bh, 0C3h, 0E8h, 2Eh, 0, 0E8h, 0B8h | |
| F000:6000 db 33h, 0A2h, 29h, 0, 2Ch, 0Eh, 73h, 0FCh, 4, 1Ch, 0F6h | |
| F000:6000 db 0D0h, 0FEh, 0C0h, 2, 0C2h, 0A2h, 2Ah, 0, 0C3h, 0E8h | |
| F000:6000 db 13h, 0F0h, 0E8h, 1Ah, 0F8h, 53h, 0E8h, 9Ch, 4Ch, 87h | |
| F000:6000 db 0DAh, 5Bh, 8Ah, 0C6h, 0Ah, 0C0h, 0C3h, 0E8h, 1, 0F0h | |
| F000:6000 db 0E8h, 8, 0F8h, 0E8h, 0EBh, 0FFh, 74h, 3, 0E9h, 32h | |
| F000:6000 db 0F1h, 4Bh, 0E8h, 0F2h, 0EFh, 8Ah, 0C2h, 0C3h, 0E8h | |
| F000:6000 db 7Fh, 0F5h, 4Bh, 2 dup(0E8h), 0EFh, 0CDh, 0A2h, 59h | |
| F000:6000 db 0E8h, 0F2h, 0EAh, 51h, 0E8h, 19h, 28h, 8Bh, 1Eh, 3Bh | |
| F000:6000 db 3, 4Bh, 0E8h, 0D6h, 0EFh, 74h, 0Eh, 0E8h, 0A8h, 0Eh | |
| F000:6000 db 2Ch, 0E8h, 0C3h, 1Fh, 0B2h, 2, 32h, 0C0h, 0E8h, 96h | |
| F000:6000 db 21h, 0BBh, 2 dup(0FFh), 89h, 1Eh, 2Eh, 0, 0E8h, 75h | |
| F000:6000 db 10h, 75h, 5, 0B0h, 1, 0A2h, 6Fh, 0, 5Bh, 5Ah, 8Ah, 0Fh | |
| F000:6000 db 43h, 8Ah, 2Fh, 43h, 8Ah, 0C5h, 0Ah, 0C1h, 75h, 3, 0E9h | |
| F000:6000 db 3Dh, 0E9h, 0E8h, 90h, 0E0h, 75h, 3, 0E8h, 7, 0Dh, 51h | |
| F000:6000 db 8Ah, 0Fh, 43h, 8Ah, 2Fh, 43h, 51h, 5Eh, 87h, 0DEh, 56h | |
| F000:6000 db 87h, 0DAh, 3Bh, 0DAh, 59h, 73h, 3, 0E9h, 1Eh, 0E9h | |
| F000:6000 db 5Eh, 87h, 0DEh, 56h, 53h, 51h, 87h, 0DAh, 89h, 1Eh | |
| F000:6000 db 49h, 3, 0E8h, 0AAh, 45h, 5Bh, 8Ah, 7, 3Ch, 9, 74h, 5 | |
| F000:6000 db 0B0h, 20h, 0E8h, 0F3h, 0Bh, 0E8h, 18h, 0, 0BBh, 0F7h | |
| F000:6000 db 1, 0E8h, 5, 0, 0E8h, 0B3h, 0Ch, 0EBh, 97h, 8Ah, 7, 0Ah | |
| F000:6000 db 0C0h, 75h, 1, 0C3h, 0E8h, 69h, 17h, 43h, 0EBh, 0F3h | |
| F000:6000 db 0B9h, 0F7h, 1, 0B6h, 0FFh, 32h, 0C0h, 0A2h, 0FCh, 2 | |
| F000:6000 db 32h, 0C0h, 0A2h, 5Eh, 4, 0E8h, 79h, 27h, 0EBh, 6, 41h | |
| F000:6000 db 43h, 0FEh, 0CEh, 74h, 0DFh, 8Ah, 7, 0Ah, 0C0h, 8Bh | |
| F000:6000 db 0F9h, 0AAh, 74h, 0D6h, 3Ch, 0Bh, 72h, 28h, 3Ch, 20h | |
| F000:6000 db 8Ah, 0D0h, 72h, 38h, 3Ch, 22h, 75h, 0Ah, 0A0h, 0FCh | |
| F000:6000 db 2, 34h, 1, 0A2h, 0FCh, 2, 0B0h, 22h, 3Ch, 3Ah, 75h | |
| F000:6000 db 10h, 0A0h, 0FCh, 2, 0D0h, 0D8h, 72h, 7, 2 dup(0D0h) | |
| F000:6000 db 24h, 0FDh, 0A2h, 0FCh, 2, 0B0h, 3Ah, 0Ah, 0C0h, 79h | |
| F000:6000 db 3, 0E9h, 3Ch, 0, 8Ah, 0D0h, 3Ch, 2Eh, 74h, 9, 0E8h | |
| F000:6000 db 57h, 1, 73h, 4, 32h, 0C0h, 0EBh, 18h, 0A0h, 5Eh, 4 | |
| F000:6000 db 0Ah, 0C0h, 74h, 0Fh, 0FEh, 0C0h, 75h, 0Bh, 0B0h, 20h | |
| F000:6000 db 8Bh, 0F9h, 0AAh, 41h, 0FEh, 0CEh, 75h, 1, 0C3h, 0B0h | |
| F000:6000 db 1, 0A2h, 5Eh, 4, 8Ah, 0C2h, 3Ch, 0Bh, 72h, 7, 3Ch, 20h | |
| F000:6000 db 73h, 3, 0E9h, 37h, 1, 8Bh, 0F9h, 0AAh, 0EBh, 82h, 0A0h | |
| F000:6000 db 0FCh, 2, 0D0h, 0D8h, 72h, 43h, 0D0h, 0D8h, 0D0h, 0D8h | |
| F000:6000 db 73h, 52h, 8Ah, 7, 3Ch, 0D9h, 53h, 51h, 0BBh, 0A5h, 20h | |
| F000:6000 db 53h, 75h, 0CFh, 49h, 8Bh, 0F1h, 0ACh, 3Ch, 4Dh, 75h | |
| F000:6000 db 0C7h, 49h, 8Bh, 0F1h, 0ACh, 3Ch, 45h, 75h, 0BFh, 49h | |
| F000:6000 db 8Bh, 0F1h, 0ACh, 3Ch, 52h, 75h, 0B7h, 49h, 8Bh, 0F1h | |
| F000:6000 db 0ACh, 3Ch, 3Ah, 75h, 0AFh, 2 dup(58h), 5Bh, 0FEh, 0C6h | |
| F000:6000 db 0FEh, 0C6h, 0FEh, 0C6h, 0FEh, 0C6h, 0EBh, 2Dh, 59h | |
| F000:6000 db 5Bh, 8Ah, 7, 0E9h, 35h, 0FFh, 0A0h, 0FCh, 2, 0Ch, 2 | |
| F000:6000 db 0A2h, 0FCh, 2, 32h, 0C0h, 0C3h, 0A0h, 0FCh, 2, 0Ch | |
| F000:6000 db 4, 0EBh, 0F3h, 2 dup(0D0h), 72h, 0E7h, 8Ah, 7, 3Ch | |
| F000:6000 db 84h, 75h, 3, 0E8h, 0E1h, 0FFh, 3Ch, 8Fh, 75h, 3, 0E8h | |
| F000:6000 db 0E5h, 0FFh, 8Ah, 7, 0FEh, 0C0h, 8Ah, 7, 75h, 5, 43h | |
| F000:6000 db 8Ah, 7, 24h, 7Fh, 43h, 3Ch, 0A1h, 75h, 3, 0E8h, 0F8h | |
| F000:6000 db 43h, 3Ch, 0B1h, 75h, 0Ah, 8Ah, 7, 43h, 3Ch, 0E9h, 0B0h | |
| F000:6000 db 0B1h, 74h, 1, 4Bh, 53h, 51h, 52h, 0CDh, 0A3h, 0BBh | |
| F000:6000 db 36h, 1, 8Ah, 0E8h, 0B1h, 40h, 0FEh, 0C1h, 43h, 8Ah | |
| F000:6000 db 0F7h, 8Ah, 0D3h, 2Eh, 8Ah, 7, 0Ah, 0C0h, 74h, 0F2h | |
| F000:6000 db 9Fh, 43h, 9Eh, 79h, 0F4h, 2Eh, 8Ah, 7, 3Ah, 0C5h, 75h | |
| F000:6000 db 0E8h, 87h, 0DAh, 3Ch, 0D0h, 74h, 2, 3Ch, 0D1h, 8Ah | |
| F000:6000 db 0C1h, 5Ah, 59h, 8Ah, 0D0h, 75h, 0Ch, 0A0h, 5Eh, 4, 0Ah | |
| F000:6000 db 0C0h, 0B0h, 0, 0A2h, 5Eh, 4, 0EBh, 15h, 3Ch, 5Bh, 75h | |
| F000:6000 db 7, 32h, 0C0h, 0A2h, 5Eh, 4, 0EBh, 1Dh, 0A0h, 5Eh, 4 | |
| F000:6000 db 0Ah, 0C0h, 0B0h, 0FFh, 0A2h, 5Eh, 4, 74h, 0Dh, 0B0h | |
| F000:6000 db 20h, 8Bh, 0F9h, 0AAh, 41h, 0FEh, 0CEh, 75h, 3, 0E9h | |
| F000:6000 db 0A4h, 5, 8Ah, 0C2h, 0EBh, 6, 2Eh, 8Ah, 7, 43h, 8Ah | |
| F000:6000 db 0D0h, 24h, 7Fh, 8Bh, 0F9h, 0AAh, 41h, 0FEh, 0CEh, 75h | |
| F000:6000 db 3, 0E9h, 8Dh, 5, 0Ah, 0C2h, 79h, 0E9h, 3Ch, 0A8h, 75h | |
| F000:6000 db 5, 32h, 0C0h, 0A2h, 5Eh, 4, 5Bh, 0E9h, 64h, 0FEh, 0E8h | |
| F000:6000 db 0BFh, 0Dh, 72h, 1, 0C3h, 3Ch, 30h, 72h, 0FBh, 3Ch, 3Ah | |
| F000:6000 db 0F5h, 0C3h, 4Bh, 0E8h, 88h, 0EDh, 52h, 51h, 50h, 0E8h | |
| F000:6000 db 21h, 0EEh, 58h, 0B9h, 0B5h, 21h, 51h, 3Ch, 0Bh, 75h | |
| F000:6000 db 3, 0E9h, 60h, 42h, 3Ch, 0Ch, 75h, 3, 0E9h, 63h, 42h | |
| F000:6000 db 8Bh, 1Eh, 2, 3, 0E9h, 13h, 4Fh, 59h, 5Ah, 0A0h, 0, 3 | |
| F000:6000 db 0B2h, 4Fh, 3Ch, 0Bh, 74h, 6, 3Ch, 0Ch, 0B2h, 48h, 75h | |
| F000:6000 db 14h, 0B0h, 26h, 8Bh, 0F9h, 0AAh, 41h, 0FEh, 0CEh, 74h | |
| F000:6000 db 0C0h, 8Ah, 0C2h, 8Bh, 0F9h, 0AAh, 41h, 0FEh, 0CEh, 74h | |
| F000:6000 db 0B6h, 0A0h, 1, 3, 3Ch, 4, 0B2h, 0, 72h, 6, 0B2h, 21h | |
| F000:6000 db 74h, 2, 0B2h, 23h, 8Ah, 7, 3Ch, 20h, 75h, 3, 0E8h, 52h | |
| F000:6000 db 43h, 8Ah, 7, 43h, 0Ah, 0C0h, 74h, 2Ah, 8Bh, 0F9h, 0AAh | |
| F000:6000 db 41h, 0FEh, 0CEh, 74h, 8Fh, 0A0h, 1, 3, 3Ch, 4, 72h | |
| F000:6000 db 0EAh, 9Fh, 49h, 9Eh, 8Bh, 0F1h, 0ACh, 9Fh, 41h, 9Eh | |
| F000:6000 db 75h, 4, 3Ch, 2Eh, 74h, 8, 3Ch, 44h, 74h, 4, 3Ch, 45h | |
| F000:6000 db 75h, 0D3h, 0B2h, 0, 0EBh, 0CFh, 8Ah, 0C2h, 0Ah, 0C0h | |
| F000:6000 db 74h, 9, 8Bh, 0F9h, 0AAh, 41h, 0FEh, 0CEh, 75h, 1, 0C3h | |
| F000:6000 db 8Bh, 1Eh, 0FEh, 2, 0E9h, 0AEh, 0FDh, 0E8h, 0F1h, 0E7h | |
| F000:6000 db 51h, 0E8h, 0F5h, 1, 59h, 5Ah, 2 dup(51h), 0E8h, 20h | |
| F000:6000 db 0E8h, 73h, 0Bh, 8Ah, 0F7h, 8Ah, 0D3h, 5Eh, 87h, 0DEh | |
| F000:6000 db 56h, 53h, 3Bh, 0DAh, 72h, 3, 0E9h, 0, 0EEh, 0BBh, 2Dh | |
| F000:6000 db 7, 0E8h, 0F6h, 58h, 59h, 0BBh, 0DDh, 9, 5Eh, 87h, 0DEh | |
| F000:6000 db 56h, 87h, 0DAh, 8Bh, 1Eh, 58h, 3, 8Bh, 0F2h, 0ACh, 8Bh | |
| F000:6000 db 0F9h, 0AAh, 41h, 42h, 3Bh, 0DAh, 75h, 0F4h, 8Bh, 0D9h | |
| F000:6000 db 89h, 1Eh, 58h, 3, 0C3h, 0E8h, 32h, 0, 0E8h, 0C3h, 24h | |
| F000:6000 db 1Eh, 8Eh, 1Eh, 50h, 3, 8Ah, 7, 1Fh, 0E9h, 0EEh, 0F8h | |
| F000:6000 db 0E8h, 16h, 0, 52h, 0E8h, 0B1h, 24h, 0E8h, 59h, 0Bh | |
| F000:6000 db 2Ch, 0E8h, 7Dh, 0FCh, 5Ah, 6, 8Eh, 6, 50h, 3, 8Bh, 0FAh | |
| F000:6000 db 0AAh, 7, 0C3h, 0E8h, 7Ah, 0F4h, 53h, 0E8h, 4, 0, 87h | |
| F000:6000 db 0DAh, 5Bh, 0C3h, 0B9h, 0ADh, 6Bh, 51h, 0E8h, 69h, 0F8h | |
| F000:6000 db 78h, 0F6h, 0CDh, 0A4h, 0A0h, 0A6h, 4, 3Ch, 90h, 75h | |
| F000:6000 db 0EDh, 0E8h, 0ABh, 58h, 78h, 2 dup(0E8h), 82h, 48h, 0B9h | |
| F000:6000 db 80h, 91h, 0BAh, 2 dup(0), 0E9h, 3Ah, 40h, 0B9h, 0Ah | |
| F000:6000 db 0, 51h, 8Ah, 0F5h, 8Ah, 0D5h, 74h, 35h, 3Ch, 2Ch, 74h | |
| F000:6000 db 0Bh, 52h, 0E8h, 74h, 0EDh, 8Ah, 0EEh, 8Ah, 0CAh, 5Ah | |
| F000:6000 db 74h, 26h, 0E8h, 0, 0Bh, 2Ch, 0E8h, 66h, 0EDh, 74h, 1Dh | |
| F000:6000 db 58h, 0E8h, 0F6h, 0Ah, 2Ch, 52h, 0E8h, 68h, 0EDh, 74h | |
| F000:6000 db 3, 0E9h, 0B6h, 0E4h, 0Bh, 0D2h, 75h, 3, 0E9h, 4Ah, 0EDh | |
| F000:6000 db 87h, 0DAh, 5Eh, 87h, 0DEh, 56h, 87h, 0DAh, 51h, 0E8h | |
| F000:6000 db 4Ch, 0E7h, 5Ah, 52h, 51h, 0E8h, 46h, 0E7h, 8Bh, 0D9h | |
| F000:6000 db 5Ah, 3Bh, 0DAh, 87h, 0DAh, 73h, 3, 0E9h, 2Ch, 0EDh | |
| F000:6000 db 5Ah, 59h, 58h, 53h, 52h, 0EBh, 15h, 3, 0D9h, 73h, 3 | |
| F000:6000 db 0E9h, 1Eh, 0EDh, 87h, 0DAh, 53h, 0BBh, 0F9h, 0FFh, 3Bh | |
| F000:6000 db 0DAh, 5Bh, 73h, 3, 0E9h, 10h, 0EDh, 52h, 8Bh, 17h, 0Bh | |
| F000:6000 db 0D2h, 87h, 0DAh, 5Ah, 74h, 0Ch, 8Ah, 7, 43h, 0Ah, 7 | |
| F000:6000 db 9Fh, 4Bh, 9Eh, 87h, 0DAh, 75h, 0D5h, 51h, 0E8h, 24h | |
| F000:6000 db 0, 59h, 5Ah, 5Bh, 52h, 8Bh, 17h, 43h, 0Bh, 0D2h, 74h | |
| F000:6000 db 14h, 87h, 0DAh, 5Eh, 87h, 0DEh, 56h, 87h, 0DAh, 43h | |
| F000:6000 db 89h, 17h, 87h, 0DAh, 3, 0D9h, 87h, 0DAh, 5Bh, 0EBh | |
| F000:6000 db 0E4h, 0B9h, 0B5h, 8, 51h, 3Ch, 0Dh, 32h, 0C0h, 0A2h | |
| F000:6000 db 3Dh, 3, 8Bh, 1Eh, 30h, 0, 4Bh, 43h, 8Ah, 7, 43h, 0Ah | |
| F000:6000 db 7, 75h, 1, 0C3h, 43h, 8Bh, 17h, 43h, 0E8h, 7Bh, 0EBh | |
| F000:6000 db 0Ah, 0C0h, 74h, 0ECh, 8Ah, 0C8h, 0A0h, 3Dh, 3, 0Ah | |
| F000:6000 db 0C0h, 8Ah, 0C1h, 74h, 5Bh, 0CDh, 0A5h, 3Ch, 0A7h, 75h | |
| F000:6000 db 18h, 0E8h, 63h, 0EBh, 3Ch, 89h, 75h, 0E4h, 0E8h, 5Ch | |
| F000:6000 db 0EBh, 3Ch, 0Eh, 75h, 0DDh, 52h, 0E8h, 0ACh, 0ECh, 0Bh | |
| F000:6000 db 0D2h, 75h, 0Ah, 0EBh, 29h, 3Ch, 0Eh, 75h, 0CCh, 52h | |
| F000:6000 db 0E8h, 9Eh, 0ECh, 53h, 0E8h, 8Ch, 0E6h, 9Fh, 49h, 9Eh | |
| F000:6000 db 0B0h, 0Dh, 72h, 3Fh, 0E8h, 78h, 8, 0BBh, 0FCh, 23h | |
| F000:6000 db 52h, 0E8h, 69h, 57h, 5Bh, 0E8h, 60h, 41h, 59h, 5Bh | |
| F000:6000 db 53h, 51h, 0E8h, 51h, 41h, 5Bh, 5Ah, 4Bh, 0EBh, 0A3h | |
| F000:6000 db 55h, 6Eh, 64h, 65h, 66h, 69h, 6Eh, 65h, 64h, 20h, 6Ch | |
| F000:6000 db 69h, 6Eh, 65h, 20h, 0, 3Ch, 0Dh, 75h, 0EAh, 52h, 0E8h | |
| F000:6000 db 61h, 0ECh, 53h, 87h, 0DAh, 3 dup(43h), 8Ah, 0Fh, 43h | |
| F000:6000 db 8Ah, 2Fh, 0B0h, 0Eh, 0BBh, 0F7h, 23h, 53h, 8Bh, 1Eh | |
| F000:6000 db 0FEh, 2, 53h, 4Bh, 88h, 2Fh, 4Bh, 88h, 0Fh, 4Bh, 88h | |
| F000:6000 db 7, 5Bh, 0C3h, 0A0h, 3Dh, 3, 0Ah, 0C0h, 74h, 0F8h, 0E9h | |
| F000:6000 db 49h, 0FFh, 0E8h, 0B2h, 9, 42h, 0E8h, 0AEh, 9, 41h, 0E8h | |
| F000:6000 db 0AAh, 9, 53h, 0E8h, 0A6h, 9, 45h, 0A0h, 5Dh, 4, 0Ah | |
| F000:6000 db 0C0h, 74h, 3, 0E9h, 6Eh, 0E3h, 53h, 8Bh, 1Eh, 5Ah, 3 | |
| F000:6000 db 87h, 0DAh, 8Bh, 1Eh, 5Ch, 3, 3Bh, 0DAh, 74h, 3, 0E9h | |
| F000:6000 db 5Ch, 0E3h, 5Bh, 8Ah, 7, 2Ch, 30h, 73h, 3, 0E9h, 49h | |
| F000:6000 db 0E3h, 3Ch, 2, 72h, 3, 0E9h, 42h, 0E3h, 0A2h, 5Ch, 4 | |
| F000:6000 db 0FEh, 0C0h, 0A2h, 5Dh, 4, 0E8h, 96h, 0EAh, 0C3h, 2Eh | |
| F000:6000 db 8Ah, 7, 0Ah, 0C0h, 74h, 0F8h, 0E8h, 3, 0, 43h, 0EBh | |
| F000:6000 db 0F3h, 9Fh, 86h, 0C4h, 50h, 86h, 0C4h, 0E9h, 19h, 7 | |
| F000:6000 db 74h, 9, 0E8h, 84h, 0F2h, 53h, 0E8h, 6, 47h, 0EBh, 20h | |
| F000:6000 db 53h, 0BBh, 0D2h, 24h, 0E8h, 0A5h, 56h, 0E8h, 0E1h, 0Ch | |
| F000:6000 db 5Ah, 73h, 3, 0E9h, 8Fh, 9, 52h, 43h, 8Ah, 7, 0E8h, 0 | |
| F000:6000 db 45h, 8Ah, 7, 0Ah, 0C0h, 75h, 0E4h, 0E8h, 0E4h, 46h | |
| F000:6000 db 89h, 1Eh, 0Ch, 0, 0E8h, 9Eh, 3Fh, 5Bh, 0C3h, 52h, 61h | |
| F000:6000 db 6Eh, 64h, 6Fh, 6Dh, 20h, 6Eh, 75h, 6Dh, 62h, 65h, 72h | |
| F000:6000 db 20h, 73h, 2 dup(65h), 64h, 20h, 28h, 2Dh, 33h, 32h | |
| F000:6000 db 37h, 36h, 38h, 20h, 74h, 6Fh, 20h, 33h, 32h, 37h, 36h | |
| F000:6000 db 37h, 29h, 0, 0B1h, 1Dh, 0EBh, 2, 0B1h, 1Ah, 0B5h, 0 | |
| F000:6000 db 87h, 0DAh, 8Bh, 1Eh, 2Eh, 0, 89h, 1Eh, 5Ah, 4, 87h | |
| F000:6000 db 0DAh, 0FEh, 0C5h, 4Bh, 0E8h, 0Ch, 0EAh, 74h, 17h, 3Ch | |
| F000:6000 db 22h, 75h, 0Bh, 0E8h, 3, 0EAh, 0Ah, 0C0h, 74h, 0Ch, 3Ch | |
| F000:6000 db 22h, 75h, 0F5h, 3Ch, 0A1h, 74h, 1Dh, 3Ch, 0CDh, 75h | |
| F000:6000 db 0E4h, 0Ah, 0C0h, 75h, 15h, 43h, 8Ah, 7, 43h, 0Ah, 7 | |
| F000:6000 db 8Ah, 0D1h, 75h, 3, 0E9h, 9Dh, 0E2h, 43h, 8Bh, 17h, 43h | |
| F000:6000 db 89h, 16h, 5Ah, 4, 0E8h, 0D7h, 0E9h, 3Ch, 8Fh, 75h, 7 | |
| F000:6000 db 51h, 0E8h, 11h, 0ECh, 59h, 0EBh, 0D9h, 3Ch, 84h, 75h | |
| F000:6000 db 7, 51h, 0E8h, 2, 0ECh, 59h, 0EBh, 0CEh, 8Ah, 0C1h, 3Ch | |
| F000:6000 db 1Ah, 8Ah, 7, 74h, 0Dh, 3Ch, 0B1h, 74h, 0A3h, 3Ch, 0B2h | |
| F000:6000 db 75h, 0A1h, 0FEh, 0CDh, 75h, 9Dh, 0C3h, 3Ch, 82h, 74h | |
| F000:6000 db 96h, 3Ch, 83h, 75h, 94h, 0FEh, 0CDh, 74h, 0F3h, 0E8h | |
| F000:6000 db 9Dh, 0E9h, 74h, 0A8h, 87h, 0DAh, 8Bh, 1Eh, 2Eh, 0, 53h | |
| F000:6000 db 8Bh, 1Eh, 5Ah, 4, 89h, 1Eh, 2Eh, 0, 87h, 0DAh, 51h | |
| F000:6000 db 0E8h, 0D7h, 11h, 59h, 4Bh, 0E8h, 81h, 0E9h, 0BAh, 2Ah | |
| F000:6000 db 25h, 74h, 8, 0E8h, 50h, 8, 2Ch, 4Bh, 0BAh, 79h, 25h | |
| F000:6000 db 5Eh, 87h, 0DEh, 56h, 89h, 1Eh, 2Eh, 0, 5Bh, 52h, 0C3h | |
| F000:6000 db 9Fh, 50h, 0A0h, 0A8h, 4, 0A2h, 0A9h, 4, 58h, 9Eh, 9Fh | |
| F000:6000 db 50h, 32h, 0C0h, 0A2h, 0A8h, 4, 58h, 9Eh, 0C3h, 0E8h | |
| F000:6000 db 0DBh, 2, 8Ah, 7, 43h, 8Ah, 0Fh, 43h, 8Ah, 2Fh, 5Ah | |
| F000:6000 db 51h, 50h, 0E8h, 0D6h, 2, 58h, 8Ah, 0F0h, 8Ah, 17h, 43h | |
| F000:6000 db 8Ah, 0Fh, 43h, 8Ah, 2Fh, 5Bh, 8Ah, 0C2h, 0Ah, 0C6h | |
| F000:6000 db 75h, 1, 0C3h, 8Ah, 0C6h, 2Ch, 1, 72h, 0F9h, 32h, 0C0h | |
| F000:6000 db 3Ah, 0C2h, 0FEh, 0C0h, 73h, 0F1h, 0FEh, 0CEh, 0FEh | |
| F000:6000 db 0CAh, 8Bh, 0F1h, 0ACh, 41h, 3Ah, 7, 9Fh, 43h, 9Eh, 74h | |
| F000:6000 db 0DCh, 0F5h, 0E9h, 72h, 3Fh, 0E8h, 0F7h, 3Dh, 0EBh, 8 | |
| F000:6000 db 0E8h, 0FCh, 3Dh, 0EBh, 3, 0E8h, 0AEh, 4Ah, 0E8h, 2Fh | |
| F000:6000 db 0, 0E8h, 89h, 2, 0B9h, 17h, 29h, 51h, 8Ah, 7, 43h, 53h | |
| F000:6000 db 0E8h, 0ABh, 0, 5Bh, 8Ah, 0Fh, 43h, 8Ah, 2Fh, 0E8h, 0Dh | |
| F000:6000 db 0, 53h, 8Ah, 0D8h, 0E8h, 5Bh, 2, 5Ah, 0C3h, 0B0h, 1 | |
| F000:6000 db 0E8h, 95h, 0, 0BBh, 2Ch, 3, 53h, 88h, 7, 43h, 89h, 17h | |
| F000:6000 db 5Bh, 0C3h, 4Bh, 0B5h, 22h, 8Ah, 0F5h, 53h, 0B1h, 0FFh | |
| F000:6000 db 43h, 8Ah, 7, 0FEh, 0C1h, 0Ah, 0C0h, 74h, 8, 3Ah, 0C6h | |
| F000:6000 db 74h, 4, 3Ah, 0C5h, 75h, 0EFh, 3Ch, 22h, 75h, 3, 0E8h | |
| F000:6000 db 0B1h, 0E8h, 53h, 8Ah, 0C5h, 3Ch, 2Ch, 75h, 0Dh, 0FEh | |
| F000:6000 db 0C1h, 0FEh, 0C9h, 74h, 7, 4Bh, 8Ah, 7, 3Ch, 20h, 74h | |
| F000:6000 db 0F5h, 5Bh, 5Eh, 87h, 0DEh, 56h, 43h, 87h, 0DAh, 8Ah | |
| F000:6000 db 0C1h, 0E8h, 0B4h, 0FFh, 0BAh, 2Ch, 3, 0B0h, 52h, 8Bh | |
| F000:6000 db 1Eh, 0Ch, 3, 89h, 1Eh, 0A3h, 4, 0B0h, 3, 0A2h, 0FBh | |
| F000:6000 db 2, 0E8h, 17h, 3Eh, 0BAh, 2Fh, 3, 3Bh, 0DAh, 89h, 1Eh | |
| F000:6000 db 0Ch, 3, 5Bh, 8Ah, 7, 75h, 9Bh, 0BAh, 10h, 0, 0E9h, 22h | |
| F000:6000 db 0E1h, 43h, 0E8h, 92h, 0FFh, 0E8h, 0ECh, 1, 0E8h, 7Ch | |
| F000:6000 db 3Eh, 0FEh, 0C6h, 0FEh, 0CEh, 74h, 85h, 8Bh, 0F1h, 0ACh | |
| F000:6000 db 0E8h, 0D9h, 4, 3Ch, 0Dh, 75h, 3, 0E8h, 0A5h, 5, 41h | |
| F000:6000 db 0EBh, 0ECh, 0Ah, 0C0h, 0EBh, 2, 58h, 9Eh, 9Fh, 50h | |
| F000:6000 db 8Bh, 1Eh, 5Ch, 3, 87h, 0DAh, 8Bh, 1Eh, 2Fh, 3, 0F6h | |
| F000:6000 db 0D0h, 8Ah, 0C8h, 0B5h, 0FFh, 3, 0D9h, 43h, 3Bh, 0DAh | |
| F000:6000 db 72h, 0Fh, 89h, 1Eh, 2Fh, 3, 43h, 87h, 0DAh, 58h, 9Eh | |
| F000:6000 db 0C3h, 58h, 86h, 0C4h, 9Eh, 0C3h, 58h, 9Eh, 0BAh, 0Eh | |
| F000:6000 db 0, 75h, 3, 0E9h, 0CAh, 0E0h, 3Ah, 0C0h, 9Fh, 50h, 0B9h | |
| F000:6000 db 0DAh, 26h, 51h, 8Bh, 1Eh, 0Ah, 3, 89h, 1Eh, 2Fh, 3 | |
| F000:6000 db 0BBh, 2 dup(0), 53h, 8Bh, 1Eh, 5Ch, 3, 53h, 0BBh, 0Eh | |
| F000:6000 db 3, 8Bh, 16h, 0Ch, 3, 3Bh, 0DAh, 0B9h, 2Ah, 27h, 74h | |
| F000:6000 db 3, 0E9h, 9Ch, 0, 0BBh, 0E2h, 3, 89h, 1Eh, 4Eh, 4, 8Bh | |
| F000:6000 db 1Eh, 5Ah, 3, 89h, 1Eh, 4Bh, 4, 8Bh, 1Eh, 58h, 3, 8Bh | |
| F000:6000 db 16h, 4Bh, 4, 3Bh, 0DAh, 74h, 1Bh, 8Ah, 7, 3 dup(43h) | |
| F000:6000 db 50h, 0E8h, 45h, 13h, 58h, 3Ch, 3, 75h, 5, 0E8h, 71h | |
| F000:6000 db 0, 32h, 0C0h, 8Ah, 0D0h, 0B6h, 0, 3, 0DAh, 0EBh, 0DDh | |
| F000:6000 db 8Bh, 1Eh, 4Eh, 4, 8Bh, 17h, 0Bh, 0D2h, 8Bh, 1Eh, 5Ah | |
| F000:6000 db 3, 74h, 19h, 87h, 0DAh, 89h, 1Eh, 4Eh, 4, 2 dup(43h) | |
| F000:6000 db 8Bh, 17h, 2 dup(43h), 87h, 0DAh, 3, 0DAh, 89h, 1Eh | |
| F000:6000 db 4Bh, 4, 87h, 0DAh, 0EBh, 0B7h, 59h, 8Bh, 16h, 5Ch, 3 | |
| F000:6000 db 3Bh, 0DAh, 75h, 3, 0E9h, 6Ch, 0, 8Ah, 7, 43h, 50h, 2 dup(43h) | |
| F000:6000 db 0E8h, 0F8h, 12h, 8Ah, 0Fh, 43h, 8Ah, 2Fh, 43h, 58h | |
| F000:6000 db 53h, 3, 0D9h, 3Ch, 3, 75h, 0DDh, 89h, 1Eh, 33h, 3, 5Bh | |
| F000:6000 db 8Ah, 0Fh, 0B5h, 0, 3, 0D9h, 3, 0D9h, 43h, 87h, 0DAh | |
| F000:6000 db 8Bh, 1Eh, 33h, 3, 87h, 0DAh, 3Bh, 0DAh, 74h, 0C4h, 0B9h | |
| F000:6000 db 0C5h, 27h, 51h, 32h, 0C0h, 0Ah, 7, 9Fh, 43h, 9Eh, 8Ah | |
| F000:6000 db 17h, 9Fh, 43h, 9Eh, 8Ah, 37h, 9Fh, 43h, 9Eh, 75h, 1 | |
| F000:6000 db 0C3h, 8Bh, 0CBh, 8Bh, 1Eh, 2Fh, 3, 3Bh, 0DAh, 8Bh, 0D9h | |
| F000:6000 db 72h, 0F3h, 5Bh, 5Eh, 87h, 0DEh, 56h, 3Bh, 0DAh, 5Eh | |
| F000:6000 db 87h, 0DEh, 56h, 53h, 8Bh, 0D9h, 73h, 0E3h, 59h, 2 dup(58h) | |
| F000:6000 db 53h, 52h, 51h, 0C3h, 5Ah, 5Bh, 0Bh, 0DBh, 74h, 0F9h | |
| F000:6000 db 4Bh, 8Ah, 2Fh, 4Bh, 8Ah, 0Fh, 53h, 4Bh, 8Ah, 1Fh, 0B7h | |
| F000:6000 db 0, 3, 0D9h, 8Ah, 0F5h, 8Ah, 0D1h, 4Bh, 8Bh, 0CBh, 8Bh | |
| F000:6000 db 1Eh, 2Fh, 3, 0E8h, 0A0h, 3Ch, 5Bh, 88h, 0Fh, 43h, 88h | |
| F000:6000 db 2Fh, 8Bh, 0D9h, 4Bh, 0E9h, 0E0h, 0FEh, 51h, 53h, 8Bh | |
| F000:6000 db 1Eh, 0A3h, 4, 5Eh, 87h, 0DEh, 56h, 0E8h, 0A0h, 0F0h | |
| F000:6000 db 5Eh, 87h, 0DEh, 56h, 0E8h, 0EDh, 3Bh, 8Ah, 7, 53h, 8Bh | |
| F000:6000 db 1Eh, 0A3h, 4, 53h, 2, 7, 0BAh, 0Fh, 0, 73h, 3, 0E9h | |
| F000:6000 db 78h, 0DFh, 0E8h, 0DBh, 0FDh, 5Ah, 0E8h, 48h, 0, 5Eh | |
| F000:6000 db 87h, 0DEh, 56h, 0E8h, 3Fh, 0, 53h, 8Bh, 1Eh, 2Dh, 3 | |
| F000:6000 db 87h, 0DAh, 0E8h, 0Eh, 0, 0E8h, 0Bh, 0, 0BBh, 3Ah, 17h | |
| F000:6000 db 5Eh, 87h, 0DEh, 56h, 53h, 0E9h, 7, 0FEh, 5Bh, 5Eh, 87h | |
| F000:6000 db 0DEh, 56h, 8Ah, 7, 43h, 8Ah, 0Fh, 43h, 8Ah, 2Fh, 8Ah | |
| F000:6000 db 0D8h, 0FEh, 0C3h, 0FEh, 0CBh, 75h, 1, 0C3h, 8Bh, 0F1h | |
| F000:6000 db 0ACh, 8Bh, 0FAh, 0AAh, 41h, 42h, 0EBh, 0F1h, 0E8h, 92h | |
| F000:6000 db 3Bh, 8Bh, 1Eh, 0A3h, 4, 87h, 0DAh, 0E8h, 20h, 0, 87h | |
| F000:6000 db 0DAh, 75h, 0E5h, 52h, 8Ah, 0F5h, 8Ah, 0D1h, 4Ah, 8Ah | |
| F000:6000 db 0Fh, 8Bh, 1Eh, 2Fh, 3, 3Bh, 0DAh, 75h, 0Ah, 32h, 0C0h | |
| F000:6000 db 8Ah, 0E8h, 3, 0D9h, 89h, 1Eh, 2Fh, 3, 5Bh, 0C3h, 0CDh | |
| F000:6000 db 0EEh, 8Bh, 1Eh, 0Ch, 3, 4Bh, 8Ah, 2Fh, 4Bh, 8Ah, 0Fh | |
| F000:6000 db 4Bh, 3Bh, 0DAh, 75h, 0EEh, 89h, 1Eh, 0Ch, 3, 0C3h, 0B9h | |
| F000:6000 db 7Fh, 1Bh, 51h, 0E8h, 0B7h, 0FFh, 32h, 0C0h, 8Ah, 0F0h | |
| F000:6000 db 8Ah, 7, 0Ah, 0C0h, 0C3h, 0B9h, 7Fh, 1Bh, 51h, 0E8h | |
| F000:6000 db 0EDh, 0FFh, 75h, 3, 0E9h, 55h, 0E7h, 43h, 8Bh, 17h | |
| F000:6000 db 8Bh, 0F2h, 0ACh, 0C3h, 0E8h, 2Eh, 0FDh, 0E8h, 0Eh, 0F6h | |
| F000:6000 db 8Bh, 1Eh, 2Dh, 3, 88h, 17h, 59h, 0E9h, 72h, 0FDh, 0E8h | |
| F000:6000 db 0FFh, 0E5h, 0E8h, 0D3h, 4, 28h, 0E8h, 0F7h, 0F5h, 52h | |
| F000:6000 db 0E8h, 0CBh, 4, 2Ch, 0E8h, 0FAh, 0EDh, 0E8h, 0C4h, 4 | |
| F000:6000 db 29h, 5Eh, 87h, 0DEh, 56h, 53h, 0E8h, 0ECh, 0F1h, 74h | |
| F000:6000 db 5, 0E8h, 0E1h, 0F5h, 0EBh, 3, 0E8h, 0B9h, 0FFh, 5Ah | |
| F000:6000 db 0E8h, 5, 0, 0E8h, 0D5h, 0F5h, 0B0h, 20h, 50h, 8Ah, 0C2h | |
| F000:6000 db 0E8h, 0ECh, 0FCh, 8Ah, 0E8h, 58h, 0FEh, 0C5h, 0FEh | |
| F000:6000 db 0CDh, 74h, 0BCh, 8Bh, 1Eh, 2Dh, 3, 88h, 7, 43h, 0FEh | |
| F000:6000 db 0CDh, 75h, 0F9h, 0EBh, 0AFh, 0E8h, 0A3h, 0, 32h, 0C0h | |
| F000:6000 db 5Eh, 87h, 0DEh, 56h, 8Ah, 0C8h, 0B0h, 2 dup(53h), 8Ah | |
| F000:6000 db 7, 3Ah, 0C5h, 72h, 3, 8Ah, 0C5h, 0BAh, 0B1h, 0, 51h | |
| F000:6000 db 0E8h, 51h, 0FDh, 59h, 5Bh, 53h, 43h, 8Ah, 2Fh, 43h | |
| F000:6000 db 8Ah, 3Fh, 8Ah, 0DDh, 0B5h, 0, 3, 0D9h, 8Bh, 0CBh, 0E8h | |
| F000:6000 db 0A8h, 0FCh, 8Ah, 0D8h, 0E8h, 0F7h, 0FEh, 5Ah, 0E8h | |
| F000:6000 db 0Dh, 0FFh, 0E9h, 0E8h, 0FCh, 0E8h, 66h, 0, 5Ah, 52h | |
| F000:6000 db 8Bh, 0F2h, 0ACh, 2Ah, 0C5h, 0EBh, 0BCh, 87h, 0DAh, 8Ah | |
| F000:6000 db 7, 0E8h, 5Ch, 0, 0FEh, 0C5h, 0FEh, 0CDh, 75h, 3, 0E9h | |
| F000:6000 db 98h, 0E6h, 51h, 0E8h, 0B5h, 1, 58h, 86h, 0C4h, 9Eh | |
| F000:6000 db 5Eh, 87h, 0DEh, 56h, 0B9h, 75h, 29h, 51h, 0FEh, 0C8h | |
| F000:6000 db 3Ah, 7, 0B5h, 0, 72h, 1, 0C3h, 8Ah, 0C8h, 8Ah, 7, 2Ah | |
| F000:6000 db 0C1h, 3Ah, 0C2h, 8Ah, 0E8h, 72h, 0F3h, 8Ah, 0EAh, 0C3h | |
| F000:6000 db 0E8h, 0, 0FFh, 75h, 3, 0E9h, 8Eh, 0F1h, 8Ah, 0D0h, 43h | |
| F000:6000 db 8Bh, 1Fh, 53h, 3, 0DAh, 8Ah, 2Fh, 88h, 37h, 5Eh, 87h | |
| F000:6000 db 0DEh, 56h, 51h, 4Bh, 0E8h, 17h, 0E5h, 0E8h, 0BEh, 3Fh | |
| F000:6000 db 59h, 5Bh, 88h, 2Fh, 0C3h, 87h, 0DAh, 0E8h, 0E1h, 3 | |
| F000:6000 db 29h, 59h, 5Ah, 51h, 8Ah, 0EAh, 0C3h, 0E8h, 0, 0E5h | |
| F000:6000 db 0E8h, 3, 0EDh, 0E8h, 2, 0F1h, 0B0h, 1, 50h, 74h, 16h | |
| F000:6000 db 58h, 0E8h, 0F3h, 0F4h, 0Ah, 0C0h, 75h, 3, 0E9h, 26h | |
| F000:6000 db 0E6h, 50h, 0E8h, 0BDh, 3, 2Ch, 0E8h, 2 dup(0ECh), 0E8h | |
| F000:6000 db 0FDh, 39h, 0E8h, 0B3h, 3, 2Ch, 53h, 8Bh, 1Eh, 0A3h | |
| F000:6000 db 4, 5Eh, 87h, 0DEh, 56h, 0E8h, 0D9h, 0ECh, 0E8h, 0A3h | |
| F000:6000 db 3, 29h, 53h, 0E8h, 50h, 0FEh, 87h, 0DAh, 59h, 5Bh, 58h | |
| F000:6000 db 51h, 0B9h, 7, 65h, 51h, 0B9h, 7Fh, 1Bh, 51h, 50h, 52h | |
| F000:6000 db 0E8h, 44h, 0FEh, 5Ah, 58h, 8Ah, 0E8h, 0FEh, 0C8h, 8Ah | |
| F000:6000 db 0C8h, 3Ah, 7, 0B0h, 0, 73h, 0A2h, 8Bh, 0F2h, 0ACh, 0Ah | |
| F000:6000 db 0C0h, 8Ah, 0C5h, 74h, 99h, 8Ah, 7, 43h, 8Ah, 2Fh, 43h | |
| F000:6000 db 8Ah, 3Fh, 8Ah, 0DDh, 0B5h, 0, 3, 0D9h, 2Ah, 0C1h, 8Ah | |
| F000:6000 db 0E8h, 51h, 52h, 5Eh, 87h, 0DEh, 56h, 8Ah, 0Fh, 43h | |
| F000:6000 db 8Bh, 17h, 5Bh, 53h, 52h, 51h, 8Bh, 0F2h, 0ACh, 3Ah | |
| F000:6000 db 7, 75h, 1Eh, 42h, 0FEh, 0C9h, 74h, 0Ch, 43h, 0FEh, 0CDh | |
| F000:6000 db 75h, 0EFh, 2 dup(5Ah), 59h, 5Ah, 32h, 0C0h, 0C3h, 5Bh | |
| F000:6000 db 2 dup(5Ah), 59h, 8Ah, 0C5h, 2Ah, 0C7h, 2, 0C1h, 0FEh | |
| F000:6000 db 0C0h, 0C3h, 59h, 5Ah, 5Bh, 43h, 0FEh, 0CDh, 75h, 0D0h | |
| F000:6000 db 0EBh, 0E5h, 0E8h, 21h, 3, 28h, 0E8h, 97h, 0Ch, 0E8h | |
| F000:6000 db 61h, 39h, 53h, 52h, 87h, 0DAh, 43h, 8Bh, 17h, 8Bh, 1Eh | |
| F000:6000 db 5Ch, 3, 3Bh, 0DAh, 72h, 12h, 8Bh, 1Eh, 30h, 0, 3Bh | |
| F000:6000 db 0DAh, 73h, 0Ah, 5Bh, 53h, 0E8h, 2Eh, 0FBh, 5Bh, 53h | |
| F000:6000 db 0E8h, 0BEh, 39h, 5Bh, 5Eh, 87h, 0DEh, 56h, 0E8h, 0F1h | |
| F000:6000 db 2, 2Ch, 0E8h, 15h, 0F4h, 0Ah, 0C0h, 75h, 3, 0E9h, 4Bh | |
| F000:6000 db 0E5h, 50h, 8Ah, 7, 0E8h, 66h, 0, 52h, 0E8h, 4, 0ECh | |
| F000:6000 db 53h, 0E8h, 8Ah, 0FDh, 87h, 0DAh, 5Bh, 59h, 58h, 8Ah | |
| F000:6000 db 0E8h, 5Eh, 87h, 0DEh, 56h, 53h, 0BBh, 7, 65h, 5Eh, 87h | |
| F000:6000 db 0DEh, 56h, 8Ah, 0C1h, 0Ah, 0C0h, 74h, 90h, 8Ah, 7, 2Ah | |
| F000:6000 db 0C5h, 73h, 3, 0E9h, 1Bh, 0E5h, 0FEh, 0C0h, 3Ah, 0C1h | |
| F000:6000 db 72h, 2, 8Ah, 0C1h, 8Ah, 0CDh, 0FEh, 0C9h, 0B5h, 0, 52h | |
| F000:6000 db 43h, 8Ah, 17h, 43h, 8Ah, 3Fh, 8Ah, 0DAh, 3, 0D9h, 8Ah | |
| F000:6000 db 0E8h, 5Ah, 87h, 0DAh, 8Ah, 0Fh, 43h, 8Bh, 1Fh, 87h | |
| F000:6000 db 0DAh, 8Ah, 0C1h, 0Ah, 0C0h, 75h, 1, 0C3h, 8Bh, 0F2h | |
| F000:6000 db 0ACh, 88h, 7, 42h, 43h, 0FEh, 0C9h, 74h, 0F4h, 0FEh | |
| F000:6000 db 0CDh, 75h, 0F1h, 0C3h, 0B2h, 0FFh, 3Ch, 29h, 74h, 7 | |
| F000:6000 db 0E8h, 71h, 2, 2Ch, 0E8h, 95h, 0F3h, 0E8h, 6Ah, 2, 29h | |
| F000:6000 db 0C3h, 0E8h, 96h, 0EFh, 74h, 3, 0E9h, 6, 0, 0E8h, 12h | |
| F000:6000 db 0FDh, 0E8h, 7Ch, 0FBh, 8Bh, 16h, 5Ch, 3, 8Bh, 1Eh, 2Fh | |
| F000:6000 db 3, 0E9h, 0CBh, 0EFh, 0CDh, 0B4h, 9Fh, 86h, 0C4h, 50h | |
| F000:6000 db 86h, 0C4h, 53h, 0E8h, 25h, 4, 74h, 3, 0E9h, 0DDh, 17h | |
| F000:6000 db 5Bh, 58h, 86h, 0C4h, 9Eh, 51h, 9Fh, 50h, 0EBh, 12h | |
| F000:6000 db 32h, 0C0h, 0A2h, 4Fh, 3, 0E9h, 93h, 0E5h, 19h, 0FEh | |
| F000:6000 db 0C8h, 0E8h, 63h, 23h, 0B0h, 8, 0EBh, 38h, 3Ch, 9, 75h | |
| F000:6000 db 10h, 0B0h, 20h, 0E8h, 0CAh, 0FFh, 0E8h, 4Eh, 23h, 24h | |
| F000:6000 db 7, 75h, 0F4h, 58h, 9Eh, 59h, 0C3h, 3Ch, 20h, 72h, 20h | |
| F000:6000 db 0A0h, 29h, 0, 8Ah, 2 dup(0E8h), 3Ah, 23h, 0FEh, 0C5h | |
| F000:6000 db 74h, 0Bh, 0FEh, 0CDh, 3Ah, 0C5h, 75h, 3, 0E8h, 72h | |
| F000:6000 db 0, 74h, 9, 3Ch, 0FFh, 74h, 5, 0FEh, 0C0h, 0E8h, 27h | |
| F000:6000 db 23h, 58h, 9Eh, 59h, 9Fh, 50h, 58h, 9Eh, 0E8h, 7Ch, 22h | |
| F000:6000 db 0C3h, 0CDh, 0B5h, 0E8h, 0BCh, 3, 74h, 3Dh, 0E8h, 0B6h | |
| F000:6000 db 17h, 73h, 0F3h, 51h, 52h, 53h, 0A0h, 36h, 5, 24h, 0C8h | |
| F000:6000 db 0A2h, 36h, 5, 0E8h, 0CCh, 18h, 5Bh, 5Ah, 59h, 0A0h | |
| F000:6000 db 6Bh, 4, 0Ah, 0C0h, 74h, 3, 0E9h, 0Ah, 31h, 0A0h, 0EFh | |
| F000:6000 db 4, 0Ah, 0C0h, 74h, 7, 0BBh, 0E8h, 0Eh, 53h, 0E9h, 0EDh | |
| F000:6000 db 0, 53h, 51h, 52h, 0BBh, 2Dh, 7, 0E8h, 2, 4Fh, 5Ah, 59h | |
| F000:6000 db 0B0h, 0Dh, 5Bh, 0C3h, 0E8h, 12h, 21h, 0C3h, 0E8h, 0CCh | |
| F000:6000 db 22h, 0Ah, 0C0h, 74h, 0F8h, 0EBh, 0Bh, 0C6h, 7, 0, 0E8h | |
| F000:6000 db 6Ah, 3, 0BBh, 0F6h, 1, 75h, 7, 0CDh, 0B6h, 0B0h, 0Dh | |
| F000:6000 db 0E8h, 2Dh, 0FFh, 0E8h, 5Bh, 3, 74h, 3, 32h, 0C0h, 0C3h | |
| F000:6000 db 32h, 0C0h, 0E8h, 0ACh, 22h, 32h, 0C0h, 0C3h, 0CDh, 0B7h | |
| F000:6000 db 0A0h, 5Eh, 0, 0Ah, 0C0h, 75h, 1, 0C3h, 0E8h, 0C4h, 0FFh | |
| F000:6000 db 75h, 3, 0E8h, 0DCh, 1, 0E9h, 90h, 1, 0E8h, 0EFh, 32h | |
| F000:6000 db 53h, 0E8h, 0AFh, 20h, 74h, 21h, 0E8h, 0B0h, 0FFh, 0Ah | |
| F000:6000 db 0C0h, 75h, 10h, 50h, 0B0h, 2, 0E8h, 8Bh, 0F9h, 8Bh | |
| F000:6000 db 1Eh, 2Dh, 3, 5Ah, 89h, 17h, 0E9h, 0D0h, 0F9h, 50h, 0E8h | |
| F000:6000 db 7Bh, 0F9h, 58h, 8Ah, 0D0h, 0E8h, 4Ah, 0FCh, 0BBh, 6 | |
| F000:6000 db 0, 89h, 1Eh, 0A3h, 4, 0B0h, 3, 0A2h, 0FBh, 2, 5Bh, 0C3h | |
| F000:6000 db 53h, 8Bh, 1Eh, 0Ah, 3, 0B5h, 0, 3, 0D9h, 3, 0D9h, 0B0h | |
| F000:6000 db 26h, 2Ah, 0C3h, 8Ah, 0D8h, 0B0h, 0FFh, 1Ah, 0C7h, 8Ah | |
| F000:6000 db 0F8h, 72h, 6, 3, 0DCh, 5Bh, 73h, 1, 0C3h, 8Bh, 1Eh | |
| F000:6000 db 2Ch, 0, 2 dup(4Bh), 89h, 1Eh, 45h, 3, 0BAh, 7, 0, 0E9h | |
| F000:6000 db 0D4h, 0DAh, 39h, 1Eh, 2Fh, 3, 73h, 0E9h, 51h, 52h, 53h | |
| F000:6000 db 0E8h, 6, 0FAh, 5Bh, 5Ah, 59h, 39h, 1Eh, 2Fh, 3, 73h | |
| F000:6000 db 0DAh, 0EBh, 0E3h, 75h, 0D6h, 8Bh, 1Eh, 30h, 0, 0E8h | |
| F000:6000 db 79h, 1, 0A2h, 64h, 4, 0A2h, 3Eh, 3, 0A2h, 3Dh, 3, 88h | |
| F000:6000 db 7, 43h, 88h, 7, 43h, 89h, 1Eh, 58h, 3, 0CDh, 0AEh, 8Bh | |
| F000:6000 db 1Eh, 30h, 0, 4Bh, 0CDh, 0AFh, 89h, 1Eh, 3Bh, 3, 0A0h | |
| F000:6000 db 65h, 4, 0Ah, 0C0h, 75h, 17h, 32h, 0C0h, 0A2h, 5Dh, 4 | |
| F000:6000 db 0A2h, 5Ch, 4, 0B5h, 1Ah, 0BBh, 60h, 3, 0CDh, 0B0h, 0C6h | |
| F000:6000 db 7, 4, 43h, 0FEh, 0CDh, 75h, 0F8h, 0BAh, 7, 0, 0BBh | |
| F000:6000 db 0Bh, 0, 0E8h, 0C6h, 37h, 32h, 0C0h, 0A2h, 4Fh, 3, 8Ah | |
| F000:6000 db 0D8h, 8Ah, 0F8h, 89h, 1Eh, 4Dh, 3, 89h, 1Eh, 56h, 3 | |
| F000:6000 db 8Bh, 1Eh, 0Ah, 3, 0A0h, 6Bh, 4, 0Ah, 0C0h, 75h, 4, 89h | |
| F000:6000 db 1Eh, 2Fh, 3, 32h, 0C0h, 0E8h, 7Ch, 0, 8Bh, 1Eh, 58h | |
| F000:6000 db 3, 89h, 1Eh, 5Ah, 3, 89h, 1Eh, 5Ch, 3, 0A0h, 65h, 4 | |
| F000:6000 db 0Ah, 0C0h, 75h, 3, 0E8h, 0B4h, 15h, 0A0h, 36h, 5, 24h | |
| F000:6000 db 1, 75h, 3, 0A2h, 36h, 5, 59h, 8Bh, 1Eh, 2Ch, 0, 2 dup(4Bh) | |
| F000:6000 db 89h, 1Eh, 45h, 3, 2 dup(43h), 0CDh, 0B1h, 8Bh, 0E3h | |
| F000:6000 db 0BBh, 0Eh, 3, 89h, 1Eh, 0Ch, 3, 0E8h, 0F3h, 0F7h, 0E8h | |
| F000:6000 db 0CAh, 0E6h, 32h, 0C0h, 8Ah, 0F8h, 8Ah, 0D8h, 89h, 1Eh | |
| F000:6000 db 7Ch, 3, 0A2h, 4Dh, 4, 89h, 1Eh, 0E4h, 3, 89h, 1Eh, 50h | |
| F000:6000 db 4, 89h, 1Eh, 7Ah, 3, 0A2h, 39h, 3, 53h, 51h, 8Bh, 1Eh | |
| F000:6000 db 3Bh, 3, 0C3h, 3Bh, 0DAh, 0C3h, 5Eh, 8Bh, 0FBh, 0FCh | |
| F000:6000 db 2Eh, 0A6h, 56h, 8Bh, 0DFh, 75h, 0Ah, 8Ah, 7, 3Ch, 3Ah | |
| F000:6000 db 72h, 1, 0C3h, 0E9h, 1Ch, 0E1h, 0E9h, 0B2h, 0D9h, 87h | |
| F000:6000 db 0DAh, 8Bh, 1Eh, 30h, 0, 74h, 11h, 87h, 0DAh, 0E8h, 52h | |
| F000:6000 db 0E2h, 53h, 0E8h, 4Ah, 0DCh, 8Bh, 0D9h, 5Ah, 72h, 3 | |
| F000:6000 db 0E9h, 0Bh, 0E3h, 4Bh, 89h, 1Eh, 5Eh, 3, 87h, 0DAh, 0C3h | |
| F000:6000 db 75h, 0FDh, 0FEh, 0C0h, 0EBh, 9, 75h, 0F7h, 9Ch, 75h | |
| F000:6000 db 3, 0E8h, 9Fh, 0Ah, 9Dh, 89h, 1Eh, 43h, 3, 0BBh, 0Eh | |
| F000:6000 db 3, 89h, 1Eh, 0Ch, 3, 0BBh, 0Ch, 0FFh, 59h, 8Bh, 1Eh | |
| F000:6000 db 2Eh, 0, 53h, 9Ch, 8Ah, 0C3h, 22h, 0C7h, 0FEh, 0C0h | |
| F000:6000 db 74h, 0Ch, 89h, 1Eh, 54h, 3, 8Bh, 1Eh, 43h, 3, 89h, 1Eh | |
| F000:6000 db 56h, 3, 0E8h, 0F5h, 0FDh, 9Dh, 0BBh, 32h, 7, 74h, 3 | |
| F000:6000 db 0E9h, 14h, 0DAh, 0E9h, 41h, 0DAh, 0B0h, 0Fh, 50h, 0B0h | |
| F000:6000 db 5Eh, 0E8h, 29h, 0FDh, 58h, 4, 40h, 0E8h, 23h, 0FDh | |
| F000:6000 db 0E9h, 0ECh, 0FDh, 8Bh, 1Eh, 56h, 3, 0Bh, 0DBh, 0BAh | |
| F000:6000 db 11h, 0, 75h, 3, 0E9h, 45h, 0D9h, 8Bh, 16h, 54h, 3, 89h | |
| F000:6000 db 16h, 2Eh, 0, 0C3h, 0B8h, 32h, 0C0h, 0A2h, 76h, 4, 0C3h | |
| F000:6000 db 0E8h, 0C8h, 8, 52h, 53h, 0BBh, 6Eh, 4, 0E8h, 0Bh, 36h | |
| F000:6000 db 8Bh, 1Eh, 5Ah, 3, 5Eh, 87h, 0DEh, 56h, 0E8h, 6Ch, 0ECh | |
| F000:6000 db 50h, 0E8h, 37h, 0FFh, 2Ch, 0E8h, 0ADh, 8, 58h, 8Ah | |
| F000:6000 db 2 dup(0E8h), 5Eh, 0ECh, 3Ah, 0C5h, 74h, 3, 0E9h, 8 | |
| F000:6000 db 0D9h, 5Eh, 87h, 0DEh, 56h, 87h, 0DAh, 53h, 8Bh, 1Eh | |
| F000:6000 db 5Ah, 3, 3Bh, 0DAh, 75h, 13h, 5Ah, 5Bh, 5Eh, 87h, 0DEh | |
| F000:6000 db 56h, 52h, 0E8h, 0D2h, 35h, 5Bh, 0BAh, 6Eh, 4, 0E8h | |
| F000:6000 db 0CBh, 35h, 5Bh, 0C3h, 0E9h, 66h, 0E1h, 0B0h, 1, 0A2h | |
| F000:6000 db 39h, 3, 0E8h, 73h, 8, 75h, 0F3h, 53h, 0A2h, 39h, 3 | |
| F000:6000 db 8Ah, 0FDh, 8Ah, 0D9h, 3 dup(49h), 8Bh, 0F1h, 0ACh, 49h | |
| F000:6000 db 0Ah, 0C0h, 78h, 0F8h, 2 dup(49h), 3, 0DAh, 87h, 0DAh | |
| F000:6000 db 8Bh, 1Eh, 5Ch, 3, 3Bh, 0DAh, 8Bh, 0F2h, 0ACh, 8Bh, 0F9h | |
| F000:6000 db 0AAh, 9Fh, 42h, 9Eh, 9Fh, 41h, 9Eh, 75h, 0F0h, 49h | |
| F000:6000 db 8Bh, 0D9h, 89h, 1Eh, 5Ch, 3, 5Bh, 8Ah, 7, 3Ch, 2Ch | |
| F000:6000 db 75h, 0B7h, 0E8h, 0E2h, 0DFh, 0EBh, 0B6h, 58h, 86h, 0C4h | |
| F000:6000 db 9Eh, 5Bh, 0C3h, 8Ah, 7, 3Ch, 41h, 72h, 0F9h, 3Ch, 5Bh | |
| F000:6000 db 0F5h, 0C3h, 0E9h, 0EEh, 0FDh, 74h, 0FBh, 3Ch, 2Ch, 74h | |
| F000:6000 db 9, 0E8h, 0FBh, 0E0h, 4Bh, 0E8h, 0C0h, 0DFh, 74h, 0EEh | |
| F000:6000 db 0E8h, 92h, 0FEh, 2Ch, 74h, 0E8h, 8Bh, 16h, 2Ch, 0, 3Ch | |
| F000:6000 db 2Ch, 74h, 3, 0E8h, 47h, 0, 4Bh, 0E8h, 0A9h, 0DFh, 52h | |
| F000:6000 db 74h, 4Eh, 0E8h, 7Ah, 0FEh, 2Ch, 74h, 48h, 0E8h, 37h | |
| F000:6000 db 0, 4Bh, 0E8h, 99h, 0DFh, 74h, 3, 0E9h, 35h, 0D8h, 5Eh | |
| F000:6000 db 87h, 0DEh, 56h, 53h, 0BBh, 0EEh, 0, 3Bh, 0DAh, 73h | |
| F000:6000 db 2Dh, 5Bh, 0E8h, 36h, 0, 72h, 27h, 53h, 8Bh, 1Eh, 58h | |
| F000:6000 db 3, 0B9h, 14h, 0, 3, 0D9h, 3Bh, 0DAh, 73h, 19h, 87h | |
| F000:6000 db 0DAh, 89h, 1Eh, 0Ah, 3, 5Bh, 89h, 1Eh, 2Ch, 0, 5Bh | |
| F000:6000 db 0EBh, 96h, 0E8h, 0F0h, 0F2h, 0Bh, 0D2h, 75h, 3, 0E9h | |
| F000:6000 db 98h, 0E0h, 0C3h, 0E9h, 2Fh, 0FDh, 8Bh, 16h, 2Ch, 0 | |
| F000:6000 db 2Bh, 16h, 0Ah, 3, 0EBh, 0BAh, 8Bh, 0C3h, 2Bh, 0C2h | |
| F000:6000 db 8Bh, 0D0h, 0C3h, 0CDh, 0B2h, 53h, 8Bh, 1Eh, 0E9h, 4 | |
| F000:6000 db 0Bh, 0DBh, 5Bh, 0C3h, 1, 30h, 4Eh, 30h, 0E1h, 30h, 0FDh | |
| F000:6000 db 2Fh, 0F1h, 2Fh, 5Bh, 3 dup(30h), 1Bh, 30h, 8Bh, 1Eh | |
| F000:6000 db 56h, 0, 0E8h, 4Ah, 0, 74h, 1, 0C3h, 0EBh, 4, 0B0h, 1 | |
| F000:6000 db 0EBh, 2, 0B0h, 0FFh, 0A2h, 70h, 0, 0FEh, 0C0h, 0E8h | |
| F000:6000 db 65h, 1, 0B7h, 1, 0E8h, 0Bh, 0, 75h, 2 dup(0E8h), 0Bh | |
| F000:6000 db 1Fh, 0E8h, 5Eh, 0, 32h, 0C0h, 0C3h, 0A0h, 5Ch, 0, 3Ah | |
| F000:6000 db 0C3h, 74h, 0F8h, 73h, 7, 8Ah, 0D8h, 32h, 0C0h, 0E9h | |
| F000:6000 db 0F5h, 1Eh, 0FEh, 0C3h, 0E9h, 0F0h, 1Eh, 0A0h, 5Bh, 0 | |
| F000:6000 db 3Ah, 0C3h, 74h, 0E3h, 0B0h, 1, 3Ah, 0C3h, 74h, 0DDh | |
| F000:6000 db 0FEh, 0CBh, 0E9h, 0DEh, 1Eh, 0A0h, 29h, 0, 3Ah, 0C7h | |
| F000:6000 db 74h, 0D1h, 0FEh, 0C7h, 0E9h, 0D2h, 1Eh, 8Bh, 1Eh, 5Bh | |
| F000:6000 db 0, 0B7h, 1, 89h, 1Eh, 58h, 0, 0E9h, 0C5h, 1Eh, 8Bh | |
| F000:6000 db 1Eh, 56h, 0, 0E8h, 9, 0, 75h, 0B6h, 0A0h, 29h, 0, 8Ah | |
| F000:6000 db 0F8h, 0EBh, 0C5h, 0B0h, 1, 3Ah, 0C7h, 74h, 0A9h, 0FEh | |
| F000:6000 db 0CFh, 0E9h, 0AAh, 1Eh, 0A0h, 5Bh, 0, 8Ah, 0F8h, 0A0h | |
| F000:6000 db 5Ch, 0, 8Ah, 0D8h, 2Ah, 0C7h, 72h, 96h, 0FEh, 0C0h | |
| F000:6000 db 50h, 0E8h, 99h, 0, 0A0h, 58h, 0, 0FEh, 0C3h, 3Ah, 0C3h | |
| F000:6000 db 0FEh, 0CBh, 73h, 0Dh, 3Ah, 0C7h, 72h, 9, 75h, 2, 0B0h | |
| F000:6000 db 1, 0FEh, 0C8h, 0A2h, 58h, 0, 58h, 0FEh, 0C8h, 75h, 3 | |
| F000:6000 db 0E9h, 3, 0, 0E8h, 0DEh, 1Eh, 0C3h, 0A0h, 5Bh, 0, 8Ah | |
| F000:6000 db 0D8h, 0A0h, 5Ch, 0, 8Ah, 0F8h, 2Ah, 0C3h, 72h, 0F1h | |
| F000:6000 db 0FEh, 0C0h, 50h, 0E8h, 7Fh, 0, 0A0h, 58h, 0, 3Ah, 0C3h | |
| F000:6000 db 72h, 10h, 3Ah, 0C7h, 78h, 3, 0E9h, 9, 0, 75h, 2, 0B0h | |
| F000:6000 db 0FFh, 0FEh, 0C0h, 0A2h, 58h, 0, 58h, 0FEh, 0C8h, 74h | |
| F000:6000 db 0CFh, 0E9h, 0BBh, 1Eh, 8Bh, 1Eh, 5Bh, 0, 0A0h, 5Dh | |
| F000:6000 db 0, 8Ah, 0E8h, 8Ah, 0C5h, 3Ah, 0C3h, 73h, 2, 8Ah, 0D8h | |
| F000:6000 db 3Ah, 0C7h, 73h, 2, 8Ah, 0F8h, 8Ah, 0C7h, 0B7h, 0, 2Ah | |
| F000:6000 db 0C3h, 0FEh, 0C0h, 0BAh, 72h, 0, 50h, 87h, 0DAh, 3, 0DAh | |
| F000:6000 db 88h, 7, 43h, 88h, 7, 43h, 0FEh, 0C8h, 75h, 0F9h, 87h | |
| F000:6000 db 0DAh, 58h, 32h, 0C0h, 0A2h, 58h, 0, 0A2h, 59h, 0, 0A2h | |
| F000:6000 db 5Ah, 0, 0E9h, 2Bh, 0FFh, 50h, 0E8h, 37h, 0, 0B5h, 1 | |
| F000:6000 db 8Ah, 0C8h, 8Ah, 0C5h, 8Bh, 0FAh, 0AAh, 4Ah, 8Bh, 0F2h | |
| F000:6000 db 0ACh, 8Ah, 0E9h, 8Ah, 0C8h, 58h, 0FEh, 0C8h, 75h, 1 | |
| F000:6000 db 0C3h, 50h, 0EBh, 0EAh, 50h, 0B5h, 1, 0E8h, 17h, 0, 8Ah | |
| F000:6000 db 0C8h, 8Ah, 0C5h, 8Bh, 0FAh, 0AAh, 42h, 8Bh, 0F2h, 0ACh | |
| F000:6000 db 8Ah, 0E9h, 8Ah, 0C8h, 58h, 0FEh, 0C8h, 74h, 0E2h, 50h | |
| F000:6000 db 2 dup(0EBh), 53h, 0BAh, 74h, 0, 0B7h, 0, 0FEh, 0CBh | |
| F000:6000 db 3, 0DAh, 8Ah, 7, 87h, 0DAh, 5Bh, 22h, 0C0h, 0C3h, 53h | |
| F000:6000 db 0BAh, 74h, 0, 0B7h, 0, 0FEh, 0CBh, 3, 0DAh, 88h, 7 | |
| F000:6000 db 87h, 0DAh, 5Bh, 0C3h, 0CDh, 0A6h, 0E8h, 41h, 1, 8Bh | |
| F000:6000 db 1Eh, 56h, 0, 89h, 1Eh, 58h, 0, 0A0h, 29h, 0, 0FEh, 0C0h | |
| F000:6000 db 0EBh, 1Eh, 0B0h, 3Fh, 0E8h, 0Ch, 0FAh, 0B0h, 20h, 0E8h | |
| F000:6000 db 7, 0FAh, 32h, 0C0h, 0A2h, 27h, 0, 0CDh, 0A7h, 0E8h | |
| F000:6000 db 1Eh, 1, 8Bh, 1Eh, 56h, 0, 89h, 1Eh, 58h, 0, 8Ah, 0C7h | |
| F000:6000 db 0A2h, 5Ah, 0, 0E8h, 0E1h, 4, 0FEh, 0CBh, 74h, 5, 0B0h | |
| F000:6000 db 1, 0E8h, 0AFh, 0FFh, 0E8h, 0Ch, 23h, 0E8h, 41h, 23h | |
| F000:6000 db 0E8h, 0A4h, 1Bh, 0E8h, 8, 23h, 0E8h, 38h, 23h, 0Ah | |
| F000:6000 db 0C0h, 75h, 3, 0E8h, 77h, 1Ch, 50h, 8Bh, 1Eh, 56h, 0 | |
| F000:6000 db 8Ah, 26h, 29h, 0, 0FEh, 0C4h, 3Ah, 1Eh, 58h, 0, 75h | |
| F000:6000 db 12h, 3Ah, 3Eh, 59h, 0, 73h, 4, 88h, 3Eh, 59h, 0, 3Ah | |
| F000:6000 db 3Eh, 5Ah, 0, 76h, 6, 8Ah, 0E7h, 88h, 26h, 5Ah, 0, 58h | |
| F000:6000 db 0E8h, 2Fh, 0, 72h, 10h, 74h, 0BBh, 0E8h, 3, 2, 0E8h | |
| F000:6000 db 99h, 0F9h, 0EBh, 0B3h, 1, 0E8h, 93h, 0F9h, 0EBh, 0ADh | |
| F000:6000 db 3Ch, 3, 0F9h, 74h, 1, 0F5h, 0BBh, 0F6h, 1, 0C3h, 3Ch | |
| F000:6000 db 3Bh, 75h, 0FBh, 0E9h, 0F8h, 0DCh, 4Bh, 43h, 0FEh, 0C9h | |
| F000:6000 db 78h, 0F2h, 2Eh, 3Ah, 7, 75h, 0F6h, 0C3h, 0BBh, 94h | |
| F000:6000 db 32h, 0B1h, 0Eh, 0E8h, 0ECh, 0FFh, 79h, 3, 0E9h, 7, 0 | |
| F000:6000 db 50h, 32h, 0C0h, 0A2h, 72h, 0, 58h, 0BBh, 0A2h, 32h | |
| F000:6000 db 0B1h, 0Ch, 0E8h, 0D8h, 0FFh, 79h, 3, 0E9h, 20h, 0, 50h | |
| F000:6000 db 8Ah, 0C1h, 0Ah, 0C0h, 0D0h, 0C0h, 8Ah, 0C8h, 32h, 0C0h | |
| F000:6000 db 8Ah, 0E8h, 0BBh, 0AEh, 32h, 3, 0D9h, 2Eh, 8Ah, 17h | |
| F000:6000 db 43h, 2Eh, 8Ah, 37h, 58h, 52h, 8Bh, 1Eh, 56h, 0, 0C3h | |
| F000:6000 db 0Ah, 0C0h, 0C3h, 3, 22h, 0C0h, 0C3h, 8Bh, 1Eh, 56h | |
| F000:6000 db 0, 80h, 0FFh, 1, 75h, 0Bh, 0FEh, 0CBh, 0E8h, 0D7h, 0FEh | |
| F000:6000 db 75h, 7, 8Ah, 3Eh, 29h, 0, 0E8h, 90h, 1Ch, 0E9h, 0DEh | |
| F000:6000 db 0F9h, 0C3h, 0Dh, 2, 6, 5, 3, 0Bh, 0Ch, 1Ch, 1Dh, 1Eh | |
| F000:6000 db 1Fh, 0Eh, 7Fh, 1Bh, 9, 0Ah, 8, 12h, 2, 6, 5, 3, 0Dh | |
| F000:6000 db 0Eh, 7Fh, 1Bh, 0FFh, 34h, 56h, 34h, 0CAh, 34h, 39h | |
| F000:6000 db 33h, 0AFh, 33h, 7, 35h, 25h, 35h, 4Dh, 35h, 1, 34h | |
| F000:6000 db 77h, 34h, 0F3h, 32h, 0C1h, 33h, 0E8h, 0Dh, 0FDh, 74h | |
| F000:6000 db 0C8h, 58h, 0B5h, 0FEh, 0BBh, 0F7h, 1, 0E8h, 41h, 0F9h | |
| F000:6000 db 88h, 7, 3Ch, 0Dh, 74h, 11h, 3Ch, 0Ah, 75h, 6, 8Ah, 0C5h | |
| F000:6000 db 3Ch, 0FEh, 74h, 0EDh, 43h, 0FEh, 0CDh, 75h, 0E8h, 0FEh | |
| F000:6000 db 0CDh, 32h, 0C0h, 88h, 7, 0BBh, 0F6h, 1, 0C3h, 0A0h | |
| F000:6000 db 72h, 0, 0Ah, 0C0h, 74h, 3Ah, 0E8h, 61h, 0FEh, 50h, 87h | |
| F000:6000 db 0DAh, 0C6h, 7, 0, 87h, 0DAh, 0FEh, 0C3h, 0E8h, 29h | |
| F000:6000 db 3, 0A0h, 29h, 0, 2Ah, 0C7h, 74h, 0Bh, 0FEh, 0C0h, 50h | |
| F000:6000 db 0E8h, 0F5h, 0, 58h, 0FEh, 0C8h, 75h, 0F7h, 8Bh, 1Eh | |
| F000:6000 db 56h, 0, 0E8h, 3Bh, 0FEh, 58h, 8Ah, 0C8h, 32h, 0C0h | |
| F000:6000 db 8Bh, 0FAh, 0AAh, 42h, 8Ah, 0C1h, 8Bh, 0FAh, 0AAh, 32h | |
| F000:6000 db 0C0h, 0C3h, 0B0h, 2 dup(0Ah), 0C0h, 0C3h, 0E8h, 5Ah | |
| F000:6000 db 2, 0BAh, 0F7h, 1, 0B5h, 0FEh, 0A0h, 58h, 0, 3Ah, 0C3h | |
| F000:6000 db 0B7h, 1, 0A0h, 29h, 0, 75h, 13h, 8Bh, 1Eh, 58h, 0, 52h | |
| F000:6000 db 0E8h, 9, 0FEh, 5Ah, 0A0h, 29h, 0, 74h, 5, 0A0h, 5Ah | |
| F000:6000 db 0, 0FEh, 0C8h, 0A2h, 5Ah, 0, 0E8h, 3Ch, 2, 8Ah, 0C5h | |
| F000:6000 db 22h, 0C0h, 74h, 10h, 52h, 0E8h, 0EEh, 0FDh, 5Ah, 75h | |
| F000:6000 db 9, 0B7h, 1, 0FEh, 0C3h, 0A0h, 29h, 0, 0EBh, 0E4h, 87h | |
| F000:6000 db 0DAh, 0B0h, 0FEh, 2Ah, 0C6h, 8Ah, 0F0h, 4Bh, 8Ah, 7 | |
| F000:6000 db 3Ch, 20h, 74h, 8, 0Ah, 0C0h, 75h, 7, 0FEh, 0CEh, 74h | |
| F000:6000 db 3, 4Bh, 0EBh, 0EFh, 43h, 0C6h, 7, 0, 87h, 0DAh, 0B0h | |
| F000:6000 db 0Dh, 50h, 0B7h, 1, 0E8h, 7Ch, 1Bh, 0B0h, 0Dh, 0E8h | |
| F000:6000 db 0FCh, 0F7h, 0BBh, 0F6h, 1, 58h, 0F9h, 0C3h, 32h, 0C0h | |
| F000:6000 db 0A2h, 0F7h, 1, 0E8h, 0A7h, 0FDh, 75h, 4, 0FEh, 0C3h | |
| F000:6000 db 0EBh, 0F7h, 0B0h, 3, 0EBh, 0DDh, 8Ah, 0C7h, 0FEh, 0C8h | |
| F000:6000 db 24h, 0F8h, 4, 8, 0FEh, 0C0h, 8Ah, 0E8h, 0A0h, 29h, 0 | |
| F000:6000 db 3Ah, 0C5h, 73h, 2, 8Ah, 0E8h, 8Ah, 0C5h, 0A0h, 72h | |
| F000:6000 db 0, 0Ah, 0C0h, 8Ah, 0C5h, 75h, 0Ch, 3Ah, 0C7h, 74h, 5 | |
| F000:6000 db 8Ah, 0F8h, 0E8h, 36h, 1Bh, 32h, 0C0h, 0C3h, 2Ah, 0C7h | |
| F000:6000 db 74h, 0FBh, 50h, 0A0h, 50h, 0, 0E8h, 14h, 0, 0E8h, 0AAh | |
| F000:6000 db 0F7h, 58h, 0FEh, 0C8h, 75h, 0F1h, 0C3h, 0A0h, 72h, 0 | |
| F000:6000 db 0F6h, 0D0h, 0A2h, 72h, 0, 32h, 0C0h, 0C3h, 53h, 8Bh | |
| F000:6000 db 1Eh, 56h, 0, 50h, 0A0h, 72h, 0, 0Ah, 0C0h, 74h, 3, 0E8h | |
| F000:6000 db 3, 0, 58h, 5Bh, 0C3h, 0A0h, 58h, 0, 3Ah, 0C3h, 75h | |
| F000:6000 db 10h, 53h, 0BBh, 5Ah, 0, 0FEh, 7, 0A0h, 29h, 0, 3Ah | |
| F000:6000 db 7, 73h, 2, 88h, 7, 5Bh, 0A0h, 50h, 0, 8Ah, 0C8h, 0E8h | |
| F000:6000 db 8Fh, 1, 72h, 10h, 74h, 0DCh, 50h, 32h, 0C0h, 0E8h, 28h | |
| F000:6000 db 0FDh, 0FEh, 0C3h, 0E8h, 0E6h, 1, 58h, 0FEh, 0CBh, 0FEh | |
| F000:6000 db 0C3h, 0B7h, 1, 0EBh, 0E3h, 53h, 0A0h, 29h, 0, 3Ah, 0C7h | |
| F000:6000 db 75h, 0Bh, 0B7h, 0, 0A0h, 5Dh, 0, 3Ah, 0C3h, 75h, 0 | |
| F000:6000 db 0FEh, 0C3h, 0FEh, 0C7h, 0E8h, 9, 0, 5Bh, 53h, 0E8h | |
| F000:6000 db 0ADh, 1Ah, 32h, 0C0h, 5Bh, 0C3h, 0B0h, 1, 3Ah, 0C7h | |
| F000:6000 db 74h, 4, 0FEh, 0CFh, 0EBh, 14h, 53h, 0FEh, 0CBh, 74h | |
| F000:6000 db 0Eh, 0A0h, 29h, 0, 8Ah, 0F8h, 0E8h, 0D0h, 0FCh, 75h | |
| F000:6000 db 4, 5Eh, 87h, 0DEh, 56h, 5Bh, 0E8h, 88h, 1Ah, 0A0h, 58h | |
| F000:6000 db 0, 3Ah, 0C3h, 75h, 0Ah, 0A0h, 5Ah, 0, 0FEh, 0C8h, 74h | |
| F000:6000 db 3, 0A2h, 5Ah, 0, 0E8h, 42h, 1, 53h, 0E8h, 0AEh, 0FCh | |
| F000:6000 db 75h, 11h, 0FEh, 0C3h, 0B7h, 1, 0E8h, 5, 2, 5Eh, 87h | |
| F000:6000 db 0DEh, 56h, 0E8h, 0FBh, 1, 5Bh, 0EBh, 0E6h, 5Bh, 0E8h | |
| F000:6000 db 55h, 1Ah, 32h, 0C0h, 0C3h, 0E8h, 91h, 0FCh, 75h, 0Bh | |
| F000:6000 db 0A0h, 5Bh, 0, 3Ah, 0C3h, 74h, 4, 0FEh, 0C3h, 0EBh, 0F0h | |
| F000:6000 db 0A0h, 29h, 0, 8Ah, 0F8h, 0A0h, 50h, 0, 8Ah, 0C8h, 51h | |
| F000:6000 db 0E8h, 22h, 1Ah, 59h, 0Ah, 0C0h, 74h, 0Ch, 3Ah, 0C1h | |
| F000:6000 db 74h, 8, 0FEh, 0C7h, 0E8h, 2Ah, 1Ah, 32h, 0C0h, 0C3h | |
| F000:6000 db 0FEh, 0CFh, 74h, 0F4h, 0EBh, 0E5h, 0E8h, 94h, 0, 0B7h | |
| F000:6000 db 1, 0E8h, 19h, 1Ah, 53h, 0A0h, 50h, 0, 0E8h, 0ADh, 1 | |
| F000:6000 db 5Bh, 0FEh, 0C7h, 0A0h, 29h, 0, 0FEh, 0C0h, 3Ah, 0C7h | |
| F000:6000 db 75h, 0EDh, 0E8h, 41h, 0FCh, 75h, 0A5h, 0B7h, 1, 0FEh | |
| F000:6000 db 0C3h, 0EBh, 0E2h, 0C6h, 6, 70h, 2 dup(0), 0EBh, 8, 0E8h | |
| F000:6000 db 0E5h, 19h, 0E8h, 4Ah, 1, 72h, 0Fh, 0E8h, 40h, 0, 74h | |
| F000:6000 db 13h, 0EBh, 0F1h, 0E8h, 0D6h, 19h, 0E8h, 3Bh, 1, 73h | |
| F000:6000 db 7, 0E8h, 31h, 0, 74h, 4, 0EBh, 0F1h, 32h, 0C0h, 0C3h | |
| F000:6000 db 32h, 0C0h, 0A2h, 70h, 0, 0EBh, 8, 0E8h, 0BDh, 19h, 0E8h | |
| F000:6000 db 22h, 1, 73h, 0Fh, 0E8h, 26h, 0, 74h, 2 dup(0EBh), 0F1h | |
| F000:6000 db 0E8h, 0AEh, 19h, 0E8h, 13h, 1, 72h, 7, 0E8h, 17h, 0 | |
| F000:6000 db 74h, 0DCh, 0EBh, 0F1h, 0E8h, 2, 0, 0EBh, 0D3h, 8Bh | |
| F000:6000 db 1Eh, 56h, 0, 0E8h, 0C4h, 0FAh, 75h, 0CCh, 0B7h, 1, 0E9h | |
| F000:6000 db 96h, 0FAh, 8Bh, 1Eh, 56h, 0, 0E8h, 0DFh, 0FAh, 75h | |
| F000:6000 db 0BEh, 0A0h, 29h, 0, 8Ah, 0F8h, 0E9h, 9Ah, 0FAh, 0FEh | |
| F000:6000 db 0CBh, 74h, 5, 0E8h, 0C1h, 0FBh, 74h, 0F7h, 0FEh, 2 dup(0C3h) | |
| F000:6000 db 51h, 0A0h, 5Ah, 0, 3Ah, 0C7h, 72h, 1Ah, 0E8h, 67h, 19h | |
| F000:6000 db 0E8h, 16h, 0, 8Bh, 0FAh, 0AAh, 42h, 5Eh, 87h, 0DEh | |
| F000:6000 db 56h, 0FEh, 0CFh, 5Eh, 87h, 0DEh, 56h, 74h, 4, 0FEh | |
| F000:6000 db 0C7h, 0EBh, 0DFh, 59h, 0C3h, 0Ah, 0C0h, 75h, 2, 0B0h | |
| F000:6000 db 20h, 0C3h, 0E8h, 45h, 0, 50h, 0E8h, 8Ah, 0FBh, 74h | |
| F000:6000 db 15h, 58h, 22h, 0C0h, 74h, 0F1h, 3Ch, 20h, 74h, 0EDh | |
| F000:6000 db 0A0h, 50h, 0, 3Ah, 0C1h, 74h, 0E6h, 8Ah, 0C1h, 22h | |
| F000:6000 db 0C0h, 0C3h, 58h, 0F9h, 0C3h, 0A0h, 29h, 0, 3Ah, 0C7h | |
| F000:6000 db 74h, 19h, 0FEh, 0C7h, 0E8h, 0C4h, 0, 53h, 0FEh, 0CFh | |
| F000:6000 db 0E8h, 0BBh, 0, 5Bh, 0FEh, 0C7h, 0A0h, 29h, 0, 0FEh | |
| F000:6000 db 0C0h, 3Ah, 0C7h, 75h, 0EBh, 0FEh, 0CFh, 0A0h, 50h, 0 | |
| F000:6000 db 0E8h, 0A7h, 0, 0C3h, 53h, 51h, 0E8h, 0A4h, 0, 59h, 50h | |
| F000:6000 db 8Ah, 0C1h, 0E8h, 9Ah, 0, 58h, 8Ah, 0C8h, 0A0h, 29h | |
| F000:6000 db 0, 0FEh, 0C0h, 0FEh, 0C7h, 3Ah, 0C7h, 75h, 0E7h, 8Ah | |
| F000:6000 db 0C1h, 5Bh, 0C3h, 53h, 0A0h, 5Ch, 0, 2Ah, 0C3h, 72h | |
| F000:6000 db 2Fh, 74h, 22h, 8Bh, 1Eh, 5Bh, 0, 5Eh, 87h, 0DEh, 56h | |
| F000:6000 db 53h, 8Ah, 0C3h, 0A2h, 5Bh, 0, 0A0h, 5Dh, 0, 0A2h, 5Ch | |
| F000:6000 db 0, 0E8h, 5Ah, 0FAh, 5Bh, 5Eh, 87h, 0DEh, 56h, 89h, 1Eh | |
| F000:6000 db 5Bh, 0, 5Bh, 53h, 0B7h, 1, 0E8h, 0F9h, 18h, 5Bh, 0B0h | |
| F000:6000 db 1, 0E9h, 6, 0FBh, 8Bh, 1Eh, 56h, 0, 0FEh, 0CBh, 74h | |
| F000:6000 db 3, 0E8h, 0ABh, 18h, 0E8h, 0FEh, 0F9h, 5Bh, 0FEh, 0CBh | |
| F000:6000 db 0C3h, 3Ch, 30h, 72h, 0FBh, 3Ch, 3Ah, 72h, 12h, 3Ch | |
| F000:6000 db 41h, 72h, 0F3h, 3Ch, 5Bh, 72h, 0Ah, 3Ch, 61h, 72h, 0EBh | |
| F000:6000 db 3Ch, 7Bh, 72h, 2, 0F9h, 0C3h, 22h, 0C0h, 0C3h, 53h | |
| F000:6000 db 0B7h, 1, 0A0h, 29h, 0, 8Ah, 0E8h, 51h, 0E8h, 65h, 18h | |
| F000:6000 db 59h, 3Ch, 0FFh, 74h, 8, 0FEh, 0C7h, 0FEh, 0CDh, 75h | |
| F000:6000 db 0F1h, 5Bh, 0C3h, 5Bh, 53h, 0B7h, 1, 0E8h, 0A4h, 18h | |
| F000:6000 db 5Bh, 0C3h, 0E9h, 43h, 18h, 0E9h, 49h, 18h, 0A2h, 28h | |
| F000:6000 db 0, 8Bh, 1Eh, 47h, 3, 0Ah, 0C7h, 22h, 0C3h, 0FEh, 0C0h | |
| F000:6000 db 87h, 0DAh, 74h, 0E8h, 0EBh, 13h, 0BBh, 0F6h, 1, 74h | |
| F000:6000 db 0E1h, 0F9h, 9Ch, 43h, 0E9h, 75h, 0D2h, 0E8h, 7Ch, 0D9h | |
| F000:6000 db 74h, 3, 0E9h, 72h, 0D9h, 5Bh, 89h, 16h, 49h, 3, 0E8h | |
| F000:6000 db 78h, 0D3h, 72h, 3, 0E9h, 3Ch, 0DAh, 8Bh, 0D9h, 2 dup(43h) | |
| F000:6000 db 8Bh, 17h, 2 dup(43h), 53h, 87h, 0DAh, 0E8h, 4Eh, 2Eh | |
| F000:6000 db 5Bh, 8Ah, 7, 3Ch, 9, 74h, 5, 0B0h, 20h, 0E8h, 97h, 0F4h | |
| F000:6000 db 0E8h, 0BCh, 0E8h, 0BBh, 0F7h, 1, 0E8h, 0A9h, 2 dup(0E8h) | |
| F000:6000 db 5Fh, 0FBh, 8Bh, 1Eh, 56h, 0, 0FEh, 0CBh, 74h, 9, 0FEh | |
| F000:6000 db 0CBh, 74h, 5, 0E8h, 35h, 0FAh, 74h, 0F7h, 0FEh, 0C3h | |
| F000:6000 db 0E8h, 0F0h, 17h, 0E9h, 0A0h, 0D1h, 3Ch, 0Ah, 74h, 3 | |
| F000:6000 db 0E9h, 6Bh, 0F4h, 53h, 8Bh, 1Eh, 0E9h, 4, 8Ah, 0C7h | |
| F000:6000 db 0Ah, 0C3h, 5Bh, 0B0h, 0Ah, 75h, 8, 50h, 0B0h, 0Dh, 0E8h | |
| F000:6000 db 57h, 0F4h, 58h, 0C3h, 0E8h, 52h, 0F4h, 0B0h, 0Dh, 0E8h | |
| F000:6000 db 4Dh, 0F4h, 0B0h, 0Ah, 0C3h, 4Bh, 0E8h, 0BEh, 0D7h, 75h | |
| F000:6000 db 1, 0C3h, 0E8h, 8Fh, 0F6h, 2Ch, 0B9h, 5Bh, 37h, 51h | |
| F000:6000 db 0B0h, 0C8h, 0EBh, 2, 32h, 0C0h, 0A2h, 0FAh, 2, 8Ah | |
| F000:6000 db 0Fh, 0CDh, 0B3h, 0E8h, 0C9h, 0F7h, 73h, 3, 0E9h, 3Fh | |
| F000:6000 db 0D0h, 32h, 0C0h, 8Ah, 0E8h, 0A2h, 8Eh, 0, 43h, 8Ah | |
| F000:6000 db 7, 3Ch, 2Eh, 72h, 42h, 74h, 0Dh, 3Ch, 3Ah, 73h, 4, 3Ch | |
| F000:6000 db 30h, 73h, 5, 0E8h, 0ABh, 0F7h, 72h, 33h, 8Ah, 0E8h | |
| F000:6000 db 51h, 0B5h, 0FFh, 0BAh, 8Eh, 0, 0Ch, 80h, 0FEh, 0C5h | |
| F000:6000 db 8Bh, 0FAh, 0AAh, 42h, 43h, 8Ah, 7, 3Ch, 3Ah, 73h, 4 | |
| F000:6000 db 3Ch, 30h, 73h, 0EDh, 0E8h, 8Bh, 0F7h, 73h, 0E8h, 3Ch | |
| F000:6000 db 2Eh, 74h, 0E4h, 8Ah, 0C5h, 3Ch, 27h, 72h, 3, 0E9h, 0F5h | |
| F000:6000 db 0CFh, 59h, 0A2h, 8Eh, 0, 8Ah, 7, 3Ch, 26h, 73h, 1Eh | |
| F000:6000 db 0BAh, 3, 38h, 52h, 0B6h, 2, 3Ch, 25h, 74h, 84h, 0FEh | |
| F000:6000 db 0C6h, 3Ch, 24h, 75h, 1, 0C3h, 0FEh, 0C6h, 3Ch, 21h | |
| F000:6000 db 74h, 0F9h, 0B6h, 8, 3Ch, 23h, 74h, 0F3h, 58h, 8Ah, 0C1h | |
| F000:6000 db 24h, 7Fh, 8Ah, 0D0h, 0B6h, 0, 53h, 0BBh, 1Fh, 2 dup(3) | |
| F000:6000 db 0DAh, 8Ah, 37h, 5Bh, 4Bh, 8Ah, 0C6h, 0A2h, 0FBh, 2 | |
| F000:6000 db 0E8h, 12h, 0D7h, 0A0h, 39h, 3, 0FEh, 0C8h, 75h, 3, 0E9h | |
| F000:6000 db 7Ah, 1, 78h, 3, 0E9h, 10h, 0, 8Ah, 7, 2Ch, 28h, 75h | |
| F000:6000 db 3, 0E9h, 0CDh, 0, 2Ch, 33h, 75h, 3, 0E9h, 0C6h, 0, 32h | |
| F000:6000 db 0C0h, 0A2h, 39h, 3, 53h, 0A0h, 4Dh, 4, 0Ah, 0C0h, 0A2h | |
| F000:6000 db 4Ah, 4, 74h, 1Eh, 8Bh, 1Eh, 7Ch, 3, 0BAh, 7Eh, 2 dup(3) | |
| F000:6000 db 0DAh, 89h, 1Eh, 4Bh, 4, 87h, 0DAh, 0E9h, 0F7h, 2Dh | |
| F000:6000 db 0A0h, 4Ah, 4, 0Ah, 0C0h, 74h, 24h, 32h, 0C0h, 0A2h | |
| F000:6000 db 4Ah, 4, 8Bh, 1Eh, 5Ah, 3, 89h, 1Eh, 4Bh, 4, 8Bh, 1Eh | |
| F000:6000 db 58h, 3, 0E9h, 0DCh, 2Dh, 0E8h, 4, 0FFh, 0C3h, 32h, 0C0h | |
| F000:6000 db 8Ah, 0F0h, 8Ah, 0D0h, 59h, 5Eh, 87h, 0DEh, 56h, 0C3h | |
| F000:6000 db 5Bh, 5Eh, 87h, 0DEh, 56h, 52h, 0BAh, 6Ah, 38h, 3Bh | |
| F000:6000 db 0DAh, 74h, 0E7h, 0BAh, 0DAh, 19h, 3Bh, 0DAh, 5Ah, 74h | |
| F000:6000 db 49h, 5Eh, 87h, 0DEh, 56h, 53h, 51h, 0A0h, 0FBh, 2, 8Ah | |
| F000:6000 db 0E8h, 0A0h, 8Eh, 0, 2, 0C5h, 0FEh, 0C0h, 8Ah, 0C8h | |
| F000:6000 db 51h, 0B5h, 0, 3 dup(41h), 8Bh, 1Eh, 5Ch, 3, 53h, 3 | |
| F000:6000 db 0D9h, 59h, 53h, 0E8h, 19h, 2Ch, 5Bh, 89h, 1Eh, 5Ch | |
| F000:6000 db 3, 8Bh, 0D9h, 89h, 1Eh, 5Ah, 3, 4Bh, 0C6h, 7, 0, 3Bh | |
| F000:6000 db 0DAh, 75h, 0F8h, 5Ah, 88h, 37h, 43h, 5Ah, 89h, 17h | |
| F000:6000 db 43h, 0E8h, 0DDh, 1, 87h, 0DAh, 42h, 5Bh, 0C3h, 0E8h | |
| F000:6000 db 86h, 42h, 0EBh, 8, 0C6h, 6, 4Fh, 3, 0, 0E9h, 78h, 0Ah | |
| F000:6000 db 0E8h, 40h, 0E2h, 75h, 7, 0BBh, 6, 0, 89h, 1Eh, 0A3h | |
| F000:6000 db 4, 5Bh, 0C3h, 53h, 8Bh, 1Eh, 0FAh, 2, 5Eh, 87h, 0DEh | |
| F000:6000 db 56h, 8Ah, 0F0h, 52h, 51h, 0BAh, 8Eh, 0, 8Bh, 0F2h, 0ACh | |
| F000:6000 db 0Ah, 0C0h, 74h, 3Dh, 87h, 0DAh, 4, 2, 0D0h, 0D8h, 8Ah | |
| F000:6000 db 0C8h, 0E8h, 0C3h, 0F3h, 8Ah, 0C1h, 8Ah, 0Fh, 43h, 8Ah | |
| F000:6000 db 2Fh, 43h, 51h, 0FEh, 0C8h, 75h, 0F5h, 53h, 0A0h, 8Eh | |
| F000:6000 db 0, 50h, 87h, 0DAh, 0E8h, 28h, 0D7h, 58h, 89h, 1Eh, 0B5h | |
| F000:6000 db 0, 5Bh, 4, 2, 0D0h, 0D8h, 59h, 4Bh, 88h, 2Fh, 4Bh, 88h | |
| F000:6000 db 0Fh, 0FEh, 0C8h, 75h, 0F5h, 8Bh, 1Eh, 0B5h, 0, 0EBh | |
| F000:6000 db 8, 0E8h, 0Ah, 0D7h, 32h, 0C0h, 0A2h, 8Eh, 0, 0A0h, 5Ch | |
| F000:6000 db 4, 0Ah, 0C0h, 74h, 8, 0Bh, 0D2h, 75h, 3, 0E9h, 5Fh | |
| F000:6000 db 0, 4Ah, 59h, 58h, 86h, 0C4h, 9Eh, 87h, 0DAh, 5Eh, 87h | |
| F000:6000 db 0DEh, 56h, 53h, 87h, 0DAh, 0FEh, 0C0h, 8Ah, 0F0h, 8Ah | |
| F000:6000 db 7, 3Ch, 2Ch, 74h, 88h, 3Ch, 29h, 74h, 7, 3Ch, 5Dh, 74h | |
| F000:6000 db 3, 0E9h, 40h, 0CEh, 0E8h, 9Ch, 0D5h, 89h, 1Eh, 52h | |
| F000:6000 db 3, 5Bh, 89h, 1Eh, 0FAh, 2, 0B2h, 0, 52h, 0EBh, 7, 53h | |
| F000:6000 db 9Fh, 86h, 0C4h, 50h, 86h, 0C4h, 8Bh, 1Eh, 5Ah, 3, 0E9h | |
| F000:6000 db 0AFh, 2Ch, 0A0h, 0FAh, 2, 0Ah, 0C0h, 74h, 3, 0E9h, 20h | |
| F000:6000 db 0CEh, 58h, 86h, 0C4h, 9Eh, 8Bh, 0CBh, 75h, 3, 0E9h | |
| F000:6000 db 55h, 2Bh, 2Ah, 7, 75h, 3, 0E9h, 98h, 0, 0BAh, 9, 0 | |
| F000:6000 db 0E9h, 19h, 0CEh, 0A0h, 0FBh, 2, 88h, 7, 43h, 8Ah, 0D0h | |
| F000:6000 db 0B6h, 0, 58h, 86h, 0C4h, 9Eh, 75h, 3, 0E9h, 0CAh, 0 | |
| F000:6000 db 88h, 0Fh, 43h, 88h, 2Fh, 0E8h, 0D3h, 0, 43h, 8Ah, 0C8h | |
| F000:6000 db 0E8h, 0F5h, 0F2h, 2 dup(43h), 89h, 1Eh, 31h, 3, 88h | |
| F000:6000 db 0Fh, 43h, 0A0h, 0FAh, 2, 2 dup(0D0h), 8Ah, 0C1h, 72h | |
| F000:6000 db 0Fh, 9Fh, 50h, 0A0h, 5Ch, 4, 34h, 0Bh, 8Ah, 0C8h, 0B5h | |
| F000:6000 db 0, 58h, 9Eh, 73h, 4, 59h, 9Fh, 41h, 9Eh, 88h, 0Fh, 9Fh | |
| F000:6000 db 50h, 43h, 88h, 2Fh, 43h, 0E8h, 7Ah, 2Ah, 58h, 9Eh, 0FEh | |
| F000:6000 db 0C8h, 75h, 0DAh, 9Fh, 50h, 8Ah, 0EEh, 8Ah, 0CAh, 87h | |
| F000:6000 db 0DAh, 3, 0DAh, 73h, 3, 0E9h, 0CFh, 0F2h, 0E8h, 0DCh | |
| F000:6000 db 0F2h, 89h, 1Eh, 5Ch, 3, 4Bh, 0C6h, 7, 0, 3Bh, 0DAh | |
| F000:6000 db 75h, 0F8h, 32h, 0C0h, 41h, 8Ah, 0F0h, 8Bh, 1Eh, 31h | |
| F000:6000 db 3, 8Ah, 17h, 87h, 0DAh, 3, 0DBh, 3, 0D9h, 87h, 0DAh | |
| F000:6000 db 2 dup(4Bh), 89h, 17h, 2 dup(43h), 58h, 9Eh, 72h, 46h | |
| F000:6000 db 8Ah, 0E8h, 8Ah, 0C8h, 8Ah, 7, 43h, 0B6h, 5Bh, 8Bh, 17h | |
| F000:6000 db 2 dup(43h), 5Eh, 87h, 0DEh, 56h, 50h, 3Bh, 0DAh, 72h | |
| F000:6000 db 3, 0E9h, 4Fh, 0FFh, 0E8h, 1Dh, 2Ah, 3, 0DAh, 58h, 0FEh | |
| F000:6000 db 0C8h, 8Bh, 0CBh, 75h, 0E3h, 0A0h, 0FBh, 2, 8Bh, 0CBh | |
| F000:6000 db 3, 0DBh, 2Ch, 4, 72h, 8, 3, 0DBh, 0Ah, 0C0h, 74h, 0Bh | |
| F000:6000 db 3, 0DBh, 0Ah, 0C0h, 7Ah, 3, 0E9h, 2, 0, 3, 0D9h, 59h | |
| F000:6000 db 3, 0D9h, 87h, 0DAh, 8Bh, 1Eh, 52h, 3, 0C3h, 0F9h, 1Ah | |
| F000:6000 db 0C0h, 5Bh, 0C3h, 8Ah, 7, 43h, 51h, 0B5h, 0, 8Ah, 0C8h | |
| F000:6000 db 3, 0D9h, 59h, 0C3h, 51h, 52h, 9Fh, 50h, 0BAh, 8Eh, 0 | |
| F000:6000 db 8Bh, 0F2h, 0ACh, 8Ah, 0E8h, 0FEh, 0C5h, 8Bh, 0F2h, 0ACh | |
| F000:6000 db 42h, 43h, 88h, 7, 0FEh, 0CDh, 75h, 0F5h, 58h, 9Eh, 5Ah | |
| F000:6000 db 59h, 0C3h, 0E8h, 5Ah, 0DCh, 0E8h, 6Ah, 29h, 0E8h, 20h | |
| F000:6000 db 0F3h, 3Bh, 87h, 0DAh, 8Bh, 1Eh, 0A3h, 4, 0EBh, 0Ah | |
| F000:6000 db 0A0h, 3Ah, 3, 0Ah, 0C0h, 74h, 11h, 5Ah, 87h, 0DAh, 53h | |
| F000:6000 db 32h, 0C0h, 0A2h, 3Ah, 3, 0FEh, 0C0h, 9Ch, 52h, 8Ah | |
| F000:6000 db 2Fh, 0Ah, 0EDh, 75h, 3, 0E9h, 5Fh, 0D5h, 43h, 8Bh, 1Fh | |
| F000:6000 db 0EBh, 24h, 8Ah, 0D5h, 53h, 0B1h, 2, 8Ah, 7, 43h, 3Ch | |
| F000:6000 db 5Ch, 75h, 3, 0E9h, 9Dh, 1, 3Ch, 20h, 75h, 6, 0FEh, 0C1h | |
| F000:6000 db 0FEh, 0CDh, 75h, 0ECh, 5Bh, 8Ah, 0EAh, 0B0h, 5Ch, 0E8h | |
| F000:6000 db 0D6h, 1, 0E8h, 82h, 0F0h, 32h, 0C0h, 8Ah, 0D0h, 8Ah | |
| F000:6000 db 0F0h, 0E8h, 0CAh, 1, 8Ah, 0F0h, 8Ah, 7, 43h, 3Ch, 21h | |
| F000:6000 db 75h, 3, 0E9h, 6Fh, 1, 3Ch, 23h, 74h, 52h, 3Ch, 26h | |
| F000:6000 db 75h, 3, 0E9h, 60h, 1, 0FEh, 0CDh, 75h, 3, 0E9h, 2Eh | |
| F000:6000 db 1, 3Ch, 2Bh, 0B0h, 8, 74h, 0D9h, 4Bh, 8Ah, 7, 43h, 3Ch | |
| F000:6000 db 2Eh, 74h, 55h, 3Ch, 5Fh, 75h, 3, 0E9h, 37h, 1, 3Ch | |
| F000:6000 db 5Ch, 74h, 9Ch, 3Ah, 7, 75h, 0B6h, 3Ch, 24h, 74h, 18h | |
| F000:6000 db 3Ch, 2Ah, 75h, 0AEh, 8Ah, 0C5h, 43h, 3Ch, 2, 72h, 4 | |
| F000:6000 db 8Ah, 7, 3Ch, 24h, 0B0h, 20h, 75h, 0Ah, 0FEh, 0CDh, 0FEh | |
| F000:6000 db 0C2h, 0BEh, 32h, 0C0h, 4, 10h, 43h, 0FEh, 0C2h, 2, 0C6h | |
| F000:6000 db 8Ah, 0F0h, 0FEh, 0C2h, 0B1h, 0, 0FEh, 0CDh, 74h, 61h | |
| F000:6000 db 8Ah, 7, 43h, 3Ch, 2Eh, 74h, 1Eh, 3Ch, 23h, 74h, 0EDh | |
| F000:6000 db 3Ch, 2Ch, 75h, 23h, 8Ah, 0C6h, 0Ch, 40h, 8Ah, 0F0h | |
| F000:6000 db 0EBh, 0E1h, 8Ah, 7, 3Ch, 23h, 0B0h, 2Eh, 74h, 3, 0E9h | |
| F000:6000 db 65h, 0FFh, 0B1h, 1, 43h, 0FEh, 0C1h, 0FEh, 0CDh, 74h | |
| F000:6000 db 36h, 8Ah, 7, 43h, 3Ch, 23h, 74h, 0F3h, 52h, 0BAh, 0F4h | |
| F000:6000 db 3Bh, 52h, 8Ah, 0F7h, 8Ah, 0D3h, 3Ch, 5Eh, 74h, 1, 0C3h | |
| F000:6000 db 3Ah, 7, 75h, 0FBh, 43h, 3Ah, 7, 75h, 0F6h, 43h, 3Ah | |
| F000:6000 db 7, 75h, 0F1h, 43h, 8Ah, 0C5h, 2Ch, 4, 72h, 0EAh, 2 dup(5Ah) | |
| F000:6000 db 8Ah, 0E8h, 0FEh, 0C6h, 43h, 0EBh, 3, 87h, 0DAh, 5Ah | |
| F000:6000 db 8Ah, 0C6h, 4Bh, 0FEh, 0C2h, 24h, 8, 75h, 1Ch, 0FEh | |
| F000:6000 db 0CAh, 8Ah, 0C5h, 0Ah, 0C0h, 74h, 14h, 8Ah, 7, 2Ch, 2Dh | |
| F000:6000 db 74h, 6, 3Ch, 0FEh, 75h, 0Ah, 0B0h, 8, 2 dup(4), 2, 0C6h | |
| F000:6000 db 8Ah, 0F0h, 0FEh, 0CDh, 5Bh, 9Dh, 74h, 65h, 51h, 52h | |
| F000:6000 db 0E8h, 2, 0DBh, 5Ah, 59h, 51h, 53h, 8Ah, 0EAh, 8Ah, 0C5h | |
| F000:6000 db 2, 0C1h, 3Ch, 19h, 72h, 3, 0E9h, 23h, 0D4h, 8Ah, 0C6h | |
| F000:6000 db 0Ch, 80h, 0E8h, 5Ch, 3Bh, 0E8h, 77h, 0EAh, 5Bh, 4Bh | |
| F000:6000 db 0E8h, 0D8h, 0D2h, 0F9h, 74h, 11h, 0A2h, 3Ah, 3, 3Ch | |
| F000:6000 db 3Bh, 74h, 7, 3Ch, 2Ch, 74h, 3, 0E9h, 68h, 0CBh, 0E8h | |
| F000:6000 db 0C4h, 0D2h, 59h, 87h, 0DAh, 5Bh, 53h, 9Ch, 52h, 8Ah | |
| F000:6000 db 7, 2Ah, 0C5h, 43h, 0B6h, 0, 8Ah, 0D0h, 8Bh, 1Fh, 3 | |
| F000:6000 db 0DAh, 8Ah, 0C5h, 0Ah, 0C0h, 74h, 3, 0E9h, 0ADh, 0FEh | |
| F000:6000 db 0EBh, 6, 0E8h, 7Bh, 0, 0E8h, 27h, 0EFh, 5Bh, 9Dh, 74h | |
| F000:6000 db 3, 0E9h, 58h, 0FEh, 73h, 3, 0E8h, 0E7h, 0EFh, 5Eh, 87h | |
| F000:6000 db 0DEh, 56h, 0E8h, 1Ch, 0ECh, 5Bh, 0E9h, 3, 0D8h, 0C3h | |
| F000:6000 db 0E8h, 5Dh, 0, 0FEh, 0CDh, 8Ah, 7, 43h, 0E8h, 4, 0EFh | |
| F000:6000 db 0EBh, 0CAh, 0B1h, 0, 0EBh, 5, 0B1h, 1, 0EBh, 1, 58h | |
| F000:6000 db 0FEh, 0CDh, 0E8h, 45h, 0, 5Bh, 9Dh, 74h, 0D0h, 51h | |
| F000:6000 db 0E8h, 6Eh, 0DAh, 0E8h, 7Fh, 27h, 59h, 51h, 53h, 8Bh | |
| F000:6000 db 1Eh, 0A3h, 4, 8Ah, 0E9h, 0B1h, 0, 8Ah, 0C5h, 50h, 8Ah | |
| F000:6000 db 0C5h, 0Ah, 0C0h, 74h, 3, 0E8h, 0A1h, 0ECh, 0E8h, 0E4h | |
| F000:6000 db 0E9h, 8Bh, 1Eh, 0A3h, 4, 58h, 0Ah, 0C0h, 75h, 3, 0E9h | |
| F000:6000 db 5Eh, 0FFh, 2Ah, 7, 8Ah, 0E8h, 0B0h, 20h, 0FEh, 0C5h | |
| F000:6000 db 0FEh, 0CDh, 75h, 3, 0E9h, 4Fh, 0FFh, 0E8h, 0B1h, 0EEh | |
| F000:6000 db 0EBh, 0F4h, 50h, 8Ah, 0C6h, 0Ah, 0C0h, 0B0h, 2Bh, 74h | |
| F000:6000 db 3, 0E8h, 0A3h, 0EEh, 58h, 0C3h, 89h, 1Eh, 35h, 3, 0E8h | |
| F000:6000 db 0ECh, 0E7h, 0E8h, 0Fh, 0D2h, 87h, 0DAh, 0E8h, 66h, 0 | |
| F000:6000 db 9Fh, 44h, 9Eh, 9Fh, 44h, 9Eh, 75h, 8, 3, 0D9h, 8Bh | |
| F000:6000 db 0E3h, 89h, 1Eh, 45h, 3, 8Bh, 1Eh, 2Eh, 0, 53h, 8Bh | |
| F000:6000 db 1Eh, 35h, 3, 53h, 52h, 0EBh, 28h, 74h, 3, 0E9h, 89h | |
| F000:6000 db 0CAh, 87h, 0DAh, 0E8h, 3Fh, 0, 75h, 67h, 8Bh, 0E3h | |
| F000:6000 db 89h, 1Eh, 45h, 3, 8Bh, 16h, 2Eh, 0, 89h, 16h, 5Ah, 4 | |
| F000:6000 db 2 dup(43h), 8Bh, 17h, 2 dup(43h), 8Bh, 1Fh, 89h, 1Eh | |
| F000:6000 db 2Eh, 0, 87h, 0DAh, 0E8h, 0CCh, 0D9h, 53h, 0E8h, 84h | |
| F000:6000 db 27h, 5Bh, 74h, 9, 0B9h, 0B1h, 0, 8Ah, 0E9h, 51h, 0E9h | |
| F000:6000 db 7Dh, 0D1h, 8Bh, 1Eh, 5Ah, 4, 89h, 1Eh, 2Eh, 0, 5Bh | |
| F000:6000 db 2 dup(59h), 0E9h, 6Fh, 0D1h, 0BBh, 4, 0, 3, 0DCh, 43h | |
| F000:6000 db 8Ah, 7, 43h, 0B9h, 82h, 0, 3Ah, 0C1h, 75h, 7, 0B9h | |
| F000:6000 db 12h, 0, 3, 0D9h, 0EBh, 0EEh, 0B9h, 0B1h, 0, 3Ah, 0C1h | |
| F000:6000 db 74h, 1, 0C3h, 39h, 17h, 0B9h, 6, 0, 74h, 0F8h, 3, 0D9h | |
| F000:6000 db 0EBh, 0DBh, 0BAh, 1Eh, 0, 0E9h, 2Fh, 0CAh, 0E8h, 3Ah | |
| F000:6000 db 7, 4Bh, 0E8h, 6Dh, 0D1h, 74h, 55h, 0E8h, 72h, 0D9h | |
| F000:6000 db 53h, 0E8h, 6Ch, 0DDh, 74h, 3Dh, 0E8h, 0Ah, 33h, 0E8h | |
| F000:6000 db 8Bh, 0E8h, 8Bh, 1Eh, 0A3h, 4, 43h, 8Ah, 17h, 43h, 8Ah | |
| F000:6000 db 37h, 8Bh, 0F2h, 0ACh, 3Ch, 20h, 75h, 9, 42h, 88h, 37h | |
| F000:6000 db 4Bh, 88h, 17h, 4Bh, 0FEh, 0Fh, 0E8h, 0DCh, 0E8h, 5Bh | |
| F000:6000 db 4Bh, 0E8h, 3Ah, 0D1h, 74h, 22h, 3Ch, 3Bh, 74h, 5, 0E8h | |
| F000:6000 db 8, 0F0h, 2Ch, 4Bh, 0E8h, 2Ch, 0D1h, 0B0h, 2Ch, 0E8h | |
| F000:6000 db 0AFh, 0EDh, 0EBh, 0BAh, 0B0h, 22h, 0E8h, 0A8h, 0EDh | |
| F000:6000 db 0E8h, 0BAh, 0E8h, 0B0h, 22h, 0E8h, 0A0h, 0EDh, 0EBh | |
| F000:6000 db 0D7h, 0E8h, 67h, 0EEh, 0E9h, 8Bh, 0D6h, 0CDh, 0A8h | |
| F000:6000 db 53h, 8Ah, 0F2h, 0E8h, 87h, 1, 74h, 9, 3Ch, 3Ah, 74h | |
| F000:6000 db 0Fh, 0E8h, 7Eh, 1, 79h, 0F7h, 8Ah, 0D6h, 5Bh, 32h, 0C0h | |
| F000:6000 db 0B0h, 0FCh, 0CDh, 0ABh, 0C3h, 8Ah, 0C6h, 2Ah, 0C2h | |
| F000:6000 db 0FEh, 0C8h, 3Ch, 2, 73h, 5, 0CDh, 0ACh, 0E9h, 61h, 0C9h | |
| F000:6000 db 3Ch, 5, 72h, 3, 0E9h, 5Ah, 0C9h, 59h, 52h, 51h, 8Ah | |
| F000:6000 db 0C8h, 8Ah, 0E8h, 0BAh, 9Ch, 3Eh, 5Eh, 87h, 0DEh, 56h | |
| F000:6000 db 53h, 8Ah, 7, 3Ch, 61h, 72h, 6, 3Ch, 7Bh, 73h, 2, 2Ch | |
| F000:6000 db 20h, 51h, 8Ah, 0E8h, 8Bh, 0F2h, 2Eh, 0ACh, 43h, 42h | |
| F000:6000 db 3Ah, 0C5h, 59h, 75h, 15h, 0FEh, 0C9h, 75h, 0E2h, 8Bh | |
| F000:6000 db 0F2h, 2Eh, 0ACh, 0Ah, 0C0h, 78h, 3, 0E9h, 6, 0, 2 dup(5Bh) | |
| F000:6000 db 5Ah, 0Ah, 0C0h, 0C3h, 0Ah, 0C0h, 78h, 0EBh, 8Bh, 0F2h | |
| F000:6000 db 2Eh, 0ACh, 0Ah, 0C0h, 9Fh, 42h, 9Eh, 79h, 0F5h, 8Ah | |
| F000:6000 db 0CDh, 5Bh, 53h, 8Bh, 0F2h, 2Eh, 0ACh, 0Ah, 0C0h, 75h | |
| F000:6000 db 0B6h, 0E9h, 0FEh, 0C8h, 4Bh, 59h, 42h, 44h, 0FFh, 53h | |
| F000:6000 db 43h, 52h, 4Eh, 0FEh, 4Ch, 50h, 54h, 31h, 0FDh, 43h | |
| F000:6000 db 41h, 53h, 31h, 0FCh, 0, 7Bh, 58h, 91h, 58h, 0A7h, 58h | |
| F000:6000 db 0BDh, 58h, 0CDh, 0A9h, 53h, 52h, 9Fh, 86h, 0C4h, 50h | |
| F000:6000 db 86h, 0C4h, 0BAh, 2Eh, 0, 3, 0DAh, 0B0h, 0FFh, 2Ah, 7 | |
| F000:6000 db 2, 0C0h, 8Ah, 0D0h, 0CDh, 0AAh, 0B6h, 0, 0BBh, 0B1h | |
| F000:6000 db 3Eh, 3, 0DAh, 2Eh, 8Ah, 17h, 43h, 2Eh, 8Ah, 37h, 58h | |
| F000:6000 db 86h, 0C4h, 9Eh, 8Ah, 0D8h, 0B7h, 0, 3, 0DAh, 2Eh, 8Ah | |
| F000:6000 db 17h, 43h, 2Eh, 8Ah, 37h, 87h, 0DAh, 5Ah, 5Eh, 87h, 0DEh | |
| F000:6000 db 56h, 0C3h, 47h, 19h dup(0), 0E8h, 11h, 0D8h, 53h, 0E8h | |
| F000:6000 db 8Ch, 0E9h, 8Ah, 7, 0Ah, 0C0h, 74h, 4Fh, 43h, 8Ah, 17h | |
| F000:6000 db 43h, 8Ah, 3Fh, 8Ah, 0DAh, 8Ah, 0D0h, 32h, 0C0h, 0A2h | |
| F000:6000 db 0FFh, 6, 0E8h, 0DBh, 0FEh, 9Fh, 86h, 0C4h, 50h, 86h | |
| F000:6000 db 0C4h, 0B9h, 0F0h, 4, 0B6h, 0Bh, 0FEh, 0C2h, 0FEh, 0CAh | |
| F000:6000 db 74h, 4Dh, 8Ah, 7, 3Ch, 20h, 72h, 26h, 3Ch, 2Eh, 74h | |
| F000:6000 db 28h, 8Bh, 0F9h, 0AAh, 41h, 43h, 0FEh, 0CEh, 75h, 0E9h | |
| F000:6000 db 58h, 86h, 0C4h, 9Eh, 9Fh, 86h, 0C4h, 50h, 86h, 0C4h | |
| F000:6000 db 8Ah, 0F0h, 0A0h, 0F0h, 4, 0FEh, 0C0h, 74h, 6, 58h, 86h | |
| F000:6000 db 0C4h, 9Eh, 5Bh, 0C3h, 0E9h, 28h, 0C8h, 43h, 0EBh, 0CAh | |
| F000:6000 db 0B0h, 1, 0A2h, 0FFh, 6, 8Ah, 0C6h, 3Ch, 0Bh, 74h, 0EFh | |
| F000:6000 db 3Ch, 3, 72h, 0EBh, 74h, 0ECh, 0B0h, 20h, 8Bh, 0F9h | |
| F000:6000 db 0AAh, 41h, 0FEh, 0CEh, 0EBh, 0EAh, 0B0h, 20h, 8Bh, 0F9h | |
| F000:6000 db 0AAh, 41h, 0FEh, 0CEh, 75h, 0F6h, 0EBh, 0BAh, 8Ah, 7 | |
| F000:6000 db 43h, 0FEh, 0CAh, 0C3h, 0E8h, 7Ah, 0DFh, 8Ah, 0D8h, 0A0h | |
| F000:6000 db 0DFh, 4, 3Ah, 0C3h, 73h, 3, 2 dup(0E9h), 0C7h, 0B7h | |
| F000:6000 db 0, 3, 0DBh, 87h, 0DAh, 8Bh, 1Eh, 0E0h, 4, 3, 0DAh, 8Bh | |
| F000:6000 db 1Fh, 0A0h, 36h, 5, 0FEh, 0C0h, 74h, 0DBh, 8Ah, 7, 0Ah | |
| F000:6000 db 0C0h, 74h, 0D5h, 53h, 0BAh, 2Eh, 0, 3, 0DAh, 8Ah, 7 | |
| F000:6000 db 3Ch, 9, 73h, 5, 0CDh, 0DCh, 0E9h, 0C0h, 0C7h, 5Bh, 8Ah | |
| F000:6000 db 7, 0Ah, 0C0h, 0F9h, 0C3h, 4Bh, 0E8h, 35h, 0CFh, 3Ch | |
| F000:6000 db 23h, 75h, 3, 0E8h, 2Eh, 0CFh, 0E8h, 2Ah, 0DFh, 5Eh | |
| F000:6000 db 87h, 0DEh, 56h, 53h, 0E8h, 0ABh, 0FFh, 75h, 3, 0E9h | |
| F000:6000 db 9Bh, 0C7h, 89h, 1Eh, 0E9h, 4, 0C3h, 0B9h, 98h, 14h | |
| F000:6000 db 51h, 0E8h, 1Ch, 0D7h, 8Ah, 7, 3Ch, 2Ch, 75h, 59h, 53h | |
| F000:6000 db 0E8h, 91h, 0E8h, 8Ah, 7, 0Ah, 0C0h, 75h, 3, 0E9h, 7Ch | |
| F000:6000 db 0C7h, 43h, 8Bh, 1Fh, 8Ah, 7, 24h, 0DFh, 0B2h, 1, 3Ch | |
| F000:6000 db 49h, 74h, 15h, 0B2h, 2, 3Ch, 4Fh, 74h, 0Fh, 0B2h, 4 | |
| F000:6000 db 3Ch, 52h, 74h, 9, 0B2h, 8, 3Ch, 41h, 74h, 3, 0E9h, 54h | |
| F000:6000 db 0C7h, 5Bh, 52h, 0E8h, 0AFh, 0EDh, 2Ch, 3Ch, 23h, 75h | |
| F000:6000 db 3, 0E8h, 0D0h, 0CEh, 0E8h, 0CCh, 0DEh, 0E8h, 0A1h, 0EDh | |
| F000:6000 db 2Ch, 8Ah, 0C2h, 0Ah, 0C0h, 75h, 3, 0E9h, 3Dh, 0C7h | |
| F000:6000 db 50h, 0E8h, 0B2h, 0FEh, 58h, 59h, 8Ah, 0D1h, 0CDh, 0DDh | |
| F000:6000 db 0E9h, 83h, 0, 0E8h, 0A9h, 0FEh, 8Ah, 7, 3Ch, 82h, 0B2h | |
| F000:6000 db 4, 75h, 59h, 0E8h, 0A5h, 0CEh, 3Ch, 85h, 0B2h, 1, 74h | |
| F000:6000 db 4Dh, 3Ch, 4Fh, 74h, 20h, 3Ch, 49h, 74h, 37h, 0E8h, 6Bh | |
| F000:6000 db 0EDh, 41h, 0E8h, 67h, 0EDh, 50h, 0E8h, 63h, 0EDh, 50h | |
| F000:6000 db 0E8h, 5Fh, 0EDh, 45h, 0E8h, 5Bh, 0EDh, 4Eh, 0E8h, 57h | |
| F000:6000 db 0EDh, 44h, 0B2h, 8, 0EBh, 2Ch, 0E8h, 78h, 0CEh, 0E8h | |
| F000:6000 db 4Ch, 0EDh, 55h, 0E8h, 48h, 0EDh, 54h, 0E8h, 44h, 0EDh | |
| F000:6000 db 50h, 0E8h, 40h, 0EDh, 55h, 0E8h, 3Ch, 0EDh, 54h, 0B2h | |
| F000:6000 db 2, 0EBh, 11h, 0E8h, 5Dh, 0CEh, 0E8h, 31h, 0EDh, 42h | |
| F000:6000 db 0E8h, 2Dh, 0EDh, 4Dh, 0B2h, 20h, 4Bh, 0E8h, 4Fh, 0CEh | |
| F000:6000 db 0E8h, 23h, 0EDh, 41h, 0E8h, 1Fh, 0EDh, 53h, 52h, 8Ah | |
| F000:6000 db 7, 3Ch, 23h, 75h, 3, 0E8h, 3Dh, 0CEh, 0E8h, 39h, 0DEh | |
| F000:6000 db 0Ah, 0C0h, 75h, 3, 0E9h, 0B0h, 0C6h, 0CDh, 0DEh, 0B4h | |
| F000:6000 db 52h, 4Bh, 8Ah, 0D0h, 0E8h, 29h, 0CEh, 74h, 3, 0E9h | |
| F000:6000 db 0C5h, 0C6h, 5Eh, 87h, 0DEh, 56h, 8Ah, 0C2h, 9Fh, 86h | |
| F000:6000 db 0C4h, 50h, 86h, 0C4h, 53h, 0E8h, 9Ch, 0FEh, 74h, 3 | |
| F000:6000 db 0E9h, 95h, 0C6h, 5Ah, 8Ah, 0C6h, 3Ch, 9, 0CDh, 0DFh | |
| F000:6000 db 73h, 3, 0E9h, 83h, 0C6h, 53h, 0B9h, 2Eh, 0, 3, 0D9h | |
| F000:6000 db 88h, 37h, 0B0h, 0, 5Bh, 0E9h, 91h, 0FDh, 53h, 0Ah, 0C0h | |
| F000:6000 db 75h, 0Ah, 0A0h, 36h, 5, 24h, 1, 74h, 3, 0E9h, 46h, 3 | |
| F000:6000 db 0E8h, 6Bh, 0FEh, 74h, 15h, 89h, 1Eh, 0E9h, 4, 53h, 0B0h | |
| F000:6000 db 2, 73h, 3, 0E9h, 71h, 0FDh, 0CDh, 0E0h, 0E9h, 50h, 0C6h | |
| F000:6000 db 0E8h, 24h, 3, 5Bh, 53h, 0BAh, 31h, 0, 3, 0DAh, 88h | |
| F000:6000 db 7, 8Ah, 0F8h, 8Ah, 0D8h, 89h, 1Eh, 0E9h, 4, 5Bh, 2 | |
| F000:6000 db 7, 0C6h, 7, 0, 5Bh, 0C3h, 0F9h, 0EBh, 3, 0Dh, 32h, 0C0h | |
| F000:6000 db 9Fh, 50h, 0E8h, 9Fh, 0FDh, 0CDh, 0E9h, 58h, 9Eh, 9Fh | |
| F000:6000 db 50h, 74h, 14h, 8Ah, 7, 2 dup(2Ch), 0Ah, 0C0h, 75h, 0Ch | |
| F000:6000 db 0E8h, 96h, 0CDh, 0E8h, 6Ah, 0ECh, 52h, 58h, 9Eh, 0F9h | |
| F000:6000 db 9Fh, 50h, 9Fh, 50h, 32h, 0C0h, 0B2h, 1, 0E8h, 54h, 0FFh | |
| F000:6000 db 8Bh, 1Eh, 0E9h, 4, 0B9h, 31h, 0, 3, 0D9h, 58h, 9Eh | |
| F000:6000 db 1Ah, 0C0h, 24h, 80h, 0Ch, 1, 0A2h, 36h, 5, 58h, 9Eh | |
| F000:6000 db 9Fh, 50h, 1Ah, 0C0h, 0A2h, 0EFh, 4, 8Ah, 7, 0Ah, 0C0h | |
| F000:6000 db 79h, 3, 0E9h, 0D8h, 0, 58h, 9Eh, 74h, 3, 0E8h, 57h | |
| F000:6000 db 0EBh, 32h, 0C0h, 0E8h, 2Ch, 0FEh, 0E9h, 5, 0C7h, 0E8h | |
| F000:6000 db 42h, 0FDh, 0CDh, 0EAh, 4Bh, 0E8h, 46h, 0CDh, 0B2h, 80h | |
| F000:6000 db 0F9h, 75h, 3, 0E8h, 79h, 5, 74h, 18h, 0E8h, 10h, 0ECh | |
| F000:6000 db 2Ch, 3Ch, 50h, 0B2h, 92h, 75h, 6, 0E8h, 2Fh, 0CDh, 0F9h | |
| F000:6000 db 0EBh, 8, 0E8h, 0, 0ECh, 41h, 0Ah, 0C0h, 0B2h, 2, 9Fh | |
| F000:6000 db 50h, 8Ah, 0C2h, 24h, 10h, 0A2h, 62h, 4, 58h, 9Eh, 9Fh | |
| F000:6000 db 50h, 0FEh, 0C0h, 0A2h, 5Fh, 0, 32h, 0C0h, 0E8h, 0DDh | |
| F000:6000 db 0FEh, 58h, 9Eh, 53h, 8Bh, 1Eh, 0E9h, 4, 8Ah, 7, 5Bh | |
| F000:6000 db 24h, 80h, 75h, 3, 0E9h, 14h, 0DDh, 53h, 0E8h, 63h, 0E1h | |
| F000:6000 db 0A0h, 62h, 4, 0Ah, 0C0h, 74h, 3, 0E8h, 79h, 4, 8Bh | |
| F000:6000 db 1Eh, 58h, 3, 89h, 1Eh, 4, 7, 8Bh, 1Eh, 30h, 0, 53h | |
| F000:6000 db 8Bh, 1Eh, 0E9h, 4, 0E8h, 0C6h, 0, 0Ah, 0C0h, 79h, 3 | |
| F000:6000 db 0E9h, 16h, 0, 0E9h, 4Dh, 0C5h, 0A0h, 62h, 4, 0Ah, 0C0h | |
| F000:6000 db 74h, 3, 0E8h, 0A2h, 4, 5Bh, 32h, 0C0h, 0A2h, 62h, 4 | |
| F000:6000 db 0E9h, 0C8h, 0FEh, 5Bh, 0E8h, 2, 0, 0EBh, 0E7h, 0E8h | |
| F000:6000 db 0A0h, 0, 3Ch, 0FCh, 75h, 3, 0E9h, 0Dh, 1Ah, 0CDh, 0EBh | |
| F000:6000 db 0E9h, 1Fh, 0C5h, 8Bh, 1Eh, 30h, 0, 0Ah, 0C0h, 0E8h | |
| F000:6000 db 3, 0, 0E9h, 46h, 0, 9Fh, 50h, 0E8h, 83h, 0, 3Ch, 0FCh | |
| F000:6000 db 75h, 3, 0E9h, 36h, 1Ah, 58h, 9Eh, 0CDh, 0ECh, 0E9h | |
| F000:6000 db 0, 0C5h, 58h, 9Eh, 0C3h, 24h, 20h, 0A2h, 63h, 4, 58h | |
| F000:6000 db 9Eh, 75h, 3, 0E9h, 0F1h, 0C4h, 0E8h, 77h, 0EAh, 0A0h | |
| F000:6000 db 63h, 4, 0A2h, 64h, 4, 0E8h, 0ABh, 0, 32h, 0C0h, 0E8h | |
| F000:6000 db 0F1h, 0FCh, 0C6h, 7, 80h, 89h, 1Eh, 0E9h, 4, 0E8h, 4Bh | |
| F000:6000 db 0, 0Ah, 0C0h, 78h, 0B3h, 0CDh, 0EDh, 0E9h, 0D3h, 0C4h | |
| F000:6000 db 0A0h, 64h, 4, 0Ah, 0C0h, 74h, 3, 0E8h, 28h, 4, 0E8h | |
| F000:6000 db 27h, 0C7h, 2 dup(43h), 89h, 1Eh, 58h, 3, 0E8h, 5Ah | |
| F000:6000 db 0EAh, 32h, 0C0h, 0A2h, 36h, 5, 0E8h, 43h, 0FEh, 0A0h | |
| F000:6000 db 0EFh, 4, 0Ah, 0C0h, 74h, 3, 0E9h, 0F9h, 0CBh, 0E9h | |
| F000:6000 db 0C4h, 0C5h, 87h, 0DAh, 8Bh, 1Eh, 2Fh, 3, 87h, 0DAh | |
| F000:6000 db 3Bh, 0DAh, 72h, 98h, 0E8h, 1Ch, 0EAh, 32h, 0C0h, 0A2h | |
| F000:6000 db 36h, 5, 0E9h, 0EBh, 0E9h, 53h, 52h, 8Bh, 1Eh, 0E9h | |
| F000:6000 db 4, 0BAh, 2Eh, 0, 3, 0DAh, 8Ah, 7, 5Ah, 5Bh, 0C3h, 75h | |
| F000:6000 db 1Eh, 53h, 51h, 50h, 0BAh, 26h, 43h, 52h, 51h, 0Ah, 0C0h | |
| F000:6000 db 0C3h, 58h, 59h, 0FEh, 0C8h, 79h, 0F0h, 5Bh, 0C3h, 59h | |
| F000:6000 db 5Bh, 8Ah, 7, 3Ch, 2Ch, 75h, 0F7h, 0E8h, 0E4h, 0CBh | |
| F000:6000 db 51h, 8Ah, 7, 3Ch, 23h, 75h, 3, 0E8h, 0DAh, 0CBh, 0E8h | |
| F000:6000 db 0D6h, 0DBh, 5Eh, 87h, 0DEh, 56h, 53h, 0BAh, 2Eh, 43h | |
| F000:6000 db 52h, 0F9h, 0FFh, 0E3h, 0B9h, 28h, 41h, 0A0h, 0DFh, 4 | |
| F000:6000 db 0EBh, 0BFh, 0A0h, 36h, 5, 0Ah, 0C0h, 78h, 0CCh, 0B9h | |
| F000:6000 db 28h, 41h, 32h, 0C0h, 0A0h, 0DFh, 4, 0EBh, 0AEh, 32h | |
| F000:6000 db 0C0h, 8Ah, 0E8h, 8Ah, 0C5h, 0E8h, 31h, 0FCh, 0C6h, 7 | |
| F000:6000 db 0, 0A0h, 0DFh, 4, 0FEh, 0C5h, 2Ah, 0C5h, 73h, 0EFh | |
| F000:6000 db 32h, 0C0h, 0A2h, 36h, 5, 0E8h, 95h, 0E9h, 8Bh, 1Eh | |
| F000:6000 db 30h, 0, 4Bh, 0C6h, 7, 0, 0E9h, 0DBh, 0C3h, 5Bh, 58h | |
| F000:6000 db 86h, 0C4h, 9Eh, 53h, 52h, 51h, 9Fh, 86h, 0C4h, 50h | |
| F000:6000 db 86h, 0C4h, 8Bh, 1Eh, 0E9h, 4, 0B0h, 6, 0E8h, 5, 0, 0CDh | |
| F000:6000 db 0E3h, 0E9h, 0EBh, 0C3h, 9Fh, 86h, 0C4h, 50h, 86h, 0C4h | |
| F000:6000 db 52h, 87h, 0DAh, 0BBh, 2Eh, 0, 3, 0DAh, 8Ah, 7, 87h | |
| F000:6000 db 0DAh, 5Ah, 3Ch, 9, 73h, 3, 0E9h, 0CAh, 0, 58h, 86h | |
| F000:6000 db 0C4h, 9Eh, 5Eh, 87h, 0DEh, 56h, 5Bh, 0E9h, 0E4h, 0FAh | |
| F000:6000 db 51h, 53h, 52h, 8Bh, 1Eh, 0E9h, 4, 0B0h, 8, 0E8h, 0CEh | |
| F000:6000 db 0FFh, 0CDh, 0E4h, 0E9h, 0B4h, 0C3h, 5Ah, 5Bh, 59h, 0C3h | |
| F000:6000 db 0E8h, 30h, 0CBh, 0E8h, 4, 0EAh, 24h, 0E8h, 0, 0EAh | |
| F000:6000 db 28h, 53h, 8Bh, 1Eh, 0E9h, 4, 53h, 0BBh, 2 dup(0), 89h | |
| F000:6000 db 1Eh, 0E9h, 4, 5Bh, 5Eh, 87h, 0DEh, 56h, 0E8h, 12h, 0DBh | |
| F000:6000 db 52h, 8Ah, 7, 3Ch, 2Ch, 75h, 0Bh, 0E8h, 9, 0CBh, 0E8h | |
| F000:6000 db 0CDh, 0FBh, 5Bh, 32h, 0C0h, 8Ah, 7, 9Fh, 50h, 0E8h | |
| F000:6000 db 0D3h, 0E9h, 29h, 58h, 9Eh, 5Eh, 87h, 0DEh, 56h, 9Fh | |
| F000:6000 db 50h, 8Ah, 0C3h, 0Ah, 0C0h, 75h, 3, 0E9h, 26h, 0CCh | |
| F000:6000 db 53h, 0E8h, 7, 0E2h, 87h, 0DAh, 59h, 58h, 9Eh, 9Fh, 50h | |
| F000:6000 db 74h, 28h, 0E8h, 16h, 0E8h, 3Ch, 3, 74h, 13h, 88h, 7 | |
| F000:6000 db 43h, 0FEh, 0C9h, 75h, 0ECh, 58h, 9Eh, 59h, 5Bh, 89h | |
| F000:6000 db 1Eh, 0E9h, 4, 51h, 0E9h, 33h, 0E2h, 58h, 9Eh, 8Bh, 1Eh | |
| F000:6000 db 2Eh, 0, 89h, 1Eh, 47h, 3, 5Bh, 0E9h, 6, 0C3h, 0E8h | |
| F000:6000 db 6Ah, 0FFh, 73h, 3, 0E9h, 30h, 0C3h, 0EBh, 0D5h, 0CDh | |
| F000:6000 db 0E5h, 0E8h, 12h, 0, 53h, 0B5h, 1, 0E8h, 2, 0, 5Bh, 0C3h | |
| F000:6000 db 32h, 0C0h, 88h, 7, 43h, 0FEh, 0CDh, 75h, 0F9h, 0C3h | |
| F000:6000 db 8Bh, 1Eh, 0E9h, 4, 0BAh, 33h, 0, 3, 0DAh, 0C3h, 58h | |
| F000:6000 db 86h, 0C4h, 9Eh, 0C3h, 0E8h, 7, 0FBh, 75h, 3, 0E9h, 0FAh | |
| F000:6000 db 0C2h, 0B0h, 0Ah, 73h, 3, 0E9h, 12h, 0FAh, 0CDh, 0E6h | |
| F000:6000 db 0E9h, 0EEh, 0C2h, 0E8h, 0F3h, 0FAh, 75h, 3, 0E9h, 0E6h | |
| F000:6000 db 0C2h, 0B0h, 0Ch, 73h, 3, 0E9h, 0FEh, 0F9h, 0CDh, 0E7h | |
| F000:6000 db 0E9h, 0DAh, 0C2h, 0E8h, 0DFh, 0FAh, 75h, 3, 0E9h, 0D2h | |
| F000:6000 db 0C2h, 0B0h, 0Eh, 73h, 3, 0E9h, 0EAh, 0F9h, 0CDh, 0E8h | |
| F000:6000 db 0E9h, 0C6h, 0C2h, 0E8h, 0FFh, 0EAh, 75h, 3, 0E9h, 1Fh | |
| F000:6000 db 0CAh, 32h, 0C0h, 0E8h, 47h, 0FCh, 0B2h, 42h, 0E9h, 0F2h | |
| F000:6000 db 0C2h, 3Ch, 23h, 75h, 0ADh, 0E8h, 2Ch, 0DAh, 0E8h, 4 | |
| F000:6000 db 0E9h, 2Ch, 8Ah, 0C2h, 53h, 0E8h, 0, 0FBh, 5Bh, 8Ah | |
| F000:6000 db 7, 0C3h, 0B9h, 0ECh, 2Dh, 51h, 32h, 0C0h, 0E9h, 24h | |
| F000:6000 db 0FCh, 0E8h, 1Eh, 0D6h, 0B9h, 9Bh, 16h, 0BAh, 20h, 2Ch | |
| F000:6000 db 75h, 1Bh, 8Ah, 0D6h, 0EBh, 17h, 0B9h, 98h, 14h, 51h | |
| F000:6000 db 0E8h, 0CCh, 0FFh, 0E8h, 51h, 0F2h, 0E8h, 1Bh, 1Fh, 52h | |
| F000:6000 db 0B9h, 8Ah, 11h, 32h, 0C0h, 8Ah, 0F0h, 8Ah, 0D0h, 50h | |
| F000:6000 db 51h, 53h, 0E8h, 0A5h, 0FEh, 73h, 3, 0E9h, 6Bh, 0C2h | |
| F000:6000 db 3Ch, 20h, 75h, 6, 0FEh, 0C6h, 0FEh, 0CEh, 75h, 0EEh | |
| F000:6000 db 3Ch, 22h, 75h, 13h, 8Ah, 0E8h, 8Ah, 0C2h, 3Ch, 2Ch | |
| F000:6000 db 8Ah, 0C5h, 75h, 9, 8Ah, 0F5h, 8Ah, 0D5h, 0E8h, 81h | |
| F000:6000 db 0FEh, 72h, 53h, 0BBh, 0F7h, 1, 0B5h, 0FFh, 8Ah, 0C8h | |
| F000:6000 db 8Ah, 0C6h, 3Ch, 22h, 8Ah, 0C1h, 74h, 2Eh, 3Ch, 0Dh | |
| F000:6000 db 53h, 74h, 59h, 5Bh, 3Ch, 0Ah, 75h, 24h, 8Ah, 0C8h, 8Ah | |
| F000:6000 db 0C2h, 3Ch, 2Ch, 8Ah, 0C1h, 74h, 3, 0E8h, 89h, 0, 53h | |
| F000:6000 db 0E8h, 55h, 0FEh, 5Bh, 72h, 26h, 3Ch, 0Dh, 75h, 0Ch | |
| F000:6000 db 8Ah, 0C2h, 3Ch, 20h, 74h, 15h, 3Ch, 2Ch, 0B0h, 0Dh | |
| F000:6000 db 74h, 0Fh, 0Ah, 0C0h, 74h, 0Bh, 3Ah, 0C6h, 74h, 0Eh | |
| F000:6000 db 3Ah, 0C2h, 74h, 0Ah, 0E8h, 63h, 0, 53h, 0E8h, 2Fh, 0FEh | |
| F000:6000 db 5Bh, 73h, 0B2h, 53h, 3Ch, 22h, 74h, 4, 3Ch, 20h, 75h | |
| F000:6000 db 25h, 0E8h, 20h, 0FEh, 72h, 20h, 3Ch, 20h, 74h, 0F7h | |
| F000:6000 db 3Ch, 2Ch, 74h, 18h, 3Ch, 0Dh, 75h, 4, 0CDh, 0E1h, 74h | |
| F000:6000 db 10h, 8Bh, 1Eh, 0E9h, 4, 8Ah, 0C8h, 0B0h, 12h, 0E8h | |
| F000:6000 db 0DDh, 0FDh, 0CDh, 0E2h, 0E9h, 0C3h, 0C1h, 5Bh, 0C6h | |
| F000:6000 db 7, 0, 0BBh, 0F6h, 1, 8Ah, 0C2h, 2Ch, 20h, 74h, 7, 0B5h | |
| F000:6000 db 0, 0E8h, 66h, 0E0h, 5Bh, 0C3h, 0E8h, 37h, 0D5h, 9Fh | |
| F000:6000 db 50h, 0E8h, 2Ah, 0C9h, 58h, 9Eh, 9Fh, 50h, 73h, 3, 0E8h | |
| F000:6000 db 0C4h, 23h, 58h, 9Eh, 72h, 3, 0E8h, 0C4h, 23h, 5Bh, 0C3h | |
| F000:6000 db 0Ah, 0C0h, 74h, 0FBh, 88h, 7, 43h, 0FEh, 0CDh, 75h | |
| F000:6000 db 0F4h, 59h, 0EBh, 0C5h, 0E8h, 46h, 0, 0A2h, 60h, 0, 0FEh | |
| F000:6000 db 0C0h, 74h, 3, 0E9h, 9Eh, 0C1h, 53h, 51h, 0B2h, 2, 0E8h | |
| F000:6000 db 0C6h, 0FAh, 5Bh, 0E8h, 3Bh, 0FCh, 32h, 0C0h, 0A2h, 60h | |
| F000:6000 db 0, 0E9h, 1Ah, 0FCh, 0E8h, 26h, 0, 0Ah, 0C0h, 74h, 7 | |
| F000:6000 db 0FEh, 0C0h, 75h, 3, 0E9h, 7Dh, 0C1h, 0FEh, 0C8h, 0A2h | |
| F000:6000 db 60h, 0, 53h, 51h, 32h, 0C0h, 0B2h, 1, 0E8h, 9Eh, 0FAh | |
| F000:6000 db 5Bh, 0E8h, 2Eh, 0FCh, 32h, 0C0h, 0A2h, 60h, 0, 5Bh | |
| F000:6000 db 0E9h, 0CCh, 0FAh, 0E8h, 0B4h, 0F8h, 52h, 4Bh, 0E8h | |
| F000:6000 db 0B9h, 0C8h, 5Ah, 75h, 3, 0B0h, 1, 0C3h, 52h, 0E8h, 86h | |
| F000:6000 db 0E7h, 2Ch, 0E8h, 2Bh, 0, 52h, 4Bh, 0E8h, 0A6h, 0C8h | |
| F000:6000 db 75h, 5, 59h, 5Ah, 32h, 0C0h, 0C3h, 0E8h, 73h, 0E7h | |
| F000:6000 db 2Ch, 0E8h, 18h, 0, 59h, 87h, 0DAh, 3, 0D9h, 89h, 1Eh | |
| F000:6000 db 4, 7, 87h, 0DAh, 4Bh, 0E8h, 89h, 0C8h, 74h, 3, 0E9h | |
| F000:6000 db 25h, 0C1h, 5Ah, 0B0h, 0FFh, 0C3h, 0E8h, 87h, 0D0h, 53h | |
| F000:6000 db 0E8h, 11h, 0DCh, 5Ah, 87h, 0DAh, 0C3h, 0B9h, 0Bh, 0Dh | |
| F000:6000 db 8Bh, 1Eh, 30h, 0, 87h, 0DAh, 8Bh, 1Eh, 58h, 3, 3Bh | |
| F000:6000 db 0DAh, 75h, 1, 0C3h, 0BBh, 17h, 62h, 8Ah, 0C3h, 2, 0C1h | |
| F000:6000 db 8Ah, 0D8h, 8Ah, 0C7h, 14h, 0, 8Ah, 0F8h, 8Bh, 0F2h | |
| F000:6000 db 0ACh, 2Ah, 0C5h, 2Eh, 32h, 7, 50h, 0BBh, 76h, 61h, 8Ah | |
| F000:6000 db 0C3h, 2, 0C5h, 8Ah, 0D8h, 8Ah, 0C7h, 14h, 0, 8Ah, 0F8h | |
| F000:6000 db 58h, 2Eh, 32h, 7, 2, 0C1h, 8Bh, 0FAh, 0AAh, 42h, 0FEh | |
| F000:6000 db 0C9h, 75h, 2, 0B1h, 0Bh, 0FEh, 0CDh, 75h, 0BCh, 0B5h | |
| F000:6000 db 0Dh, 0EBh, 0B8h, 0B9h, 0Bh, 0Dh, 8Bh, 1Eh, 30h, 0, 87h | |
| F000:6000 db 0DAh, 8Bh, 1Eh, 58h, 3, 3Bh, 0DAh, 74h, 0AFh, 0BBh | |
| F000:6000 db 76h, 61h, 8Ah, 0C3h, 2, 0C5h, 8Ah, 0D8h, 8Ah, 0C7h | |
| F000:6000 db 14h, 0, 8Ah, 0F8h, 8Bh, 0F2h, 0ACh, 2Ah, 0C1h, 2Eh | |
| F000:6000 db 32h, 7, 50h, 0BBh, 17h, 62h, 8Ah, 0C3h, 2, 0C1h, 8Ah | |
| F000:6000 db 0D8h, 8Ah, 0C7h, 14h, 0, 8Ah, 0F8h, 58h, 2Eh, 32h, 7 | |
| F000:6000 db 2, 0C5h, 8Bh, 0FAh, 0AAh, 42h, 0FEh, 0C9h, 75h, 2, 0B1h | |
| F000:6000 db 0Bh, 0FEh, 0CDh, 75h, 0BDh, 0B5h, 0Dh, 0EBh, 0B9h, 53h | |
| F000:6000 db 8Bh, 1Eh, 2Eh, 0, 8Ah, 0C7h, 22h, 0C3h, 5Bh, 0FEh, 0C0h | |
| F000:6000 db 74h, 1, 0C3h, 9Fh, 50h, 0A0h, 64h, 4, 0Ah, 0C0h, 74h | |
| F000:6000 db 3, 0E9h, 0F5h, 0C8h, 58h, 9Eh, 0C3h, 8Ah, 7, 3Ch, 40h | |
| F000:6000 db 75h, 3, 0E8h, 0ADh, 0C7h, 0B9h, 2 dup(0), 8Ah, 0F5h | |
| F000:6000 db 8Ah, 0D1h, 3Ch, 0EAh, 74h, 1Fh, 8Ah, 7, 3Ch, 0CFh, 9Ch | |
| F000:6000 db 75h, 3, 0E8h, 98h, 0C7h, 0E8h, 6Ch, 0E6h, 28h, 0E8h | |
| F000:6000 db 7Eh, 0D7h, 52h, 0E8h, 64h, 0E6h, 2Ch, 0E8h, 76h, 0D7h | |
| F000:6000 db 0E8h, 5Dh, 0E6h, 29h, 59h, 9Dh, 53h, 8Bh, 1Eh, 3Dh | |
| F000:6000 db 5, 74h, 3, 0BBh, 2 dup(0), 9Fh, 3, 0D9h, 0D1h, 0DEh | |
| F000:6000 db 9Eh, 0D1h, 0D6h, 89h, 1Eh, 3Dh, 5, 89h, 1Eh, 37h, 5 | |
| F000:6000 db 8Bh, 0CBh, 8Bh, 1Eh, 3Bh, 5, 74h, 3, 0BBh, 2 dup(0) | |
| F000:6000 db 3, 0DAh, 89h, 1Eh, 3Bh, 5, 89h, 1Eh, 39h, 5, 87h, 0DAh | |
| F000:6000 db 5Bh, 0C3h, 32h, 0C0h, 0EBh, 2, 0B0h, 3, 50h, 0E8h, 0A4h | |
| F000:6000 db 0FFh, 58h, 0E8h, 2Eh, 0, 53h, 0E8h, 28h, 3, 73h, 6 | |
| F000:6000 db 0E8h, 7Fh, 2, 0E8h, 55h, 2, 5Bh, 0C3h, 0E8h, 31h, 0C7h | |
| F000:6000 db 0E8h, 8Ch, 0FFh, 53h, 0E8h, 14h, 3, 0BBh, 2 dup(0FFh) | |
| F000:6000 db 73h, 0Ah, 0E8h, 68h, 2, 0E8h, 1Bh, 2, 8Ah, 0D8h, 0B7h | |
| F000:6000 db 0, 0E8h, 7, 1Dh, 5Bh, 0C3h, 0B0h, 3, 51h, 52h, 8Ah | |
| F000:6000 db 0D0h, 4Bh, 0E8h, 0Ch, 0C7h, 74h, 0Bh, 0E8h, 0DEh, 0E5h | |
| F000:6000 db 2Ch, 3Ch, 2Ch, 74h, 3, 0E8h, 0FEh, 0D6h, 8Ah, 0C2h | |
| F000:6000 db 53h, 0E8h, 0C1h, 2, 73h, 3, 0E9h, 30h, 0C8h, 5Bh, 5Ah | |
| F000:6000 db 59h, 0E9h, 0EFh, 0C6h, 8Bh, 1Eh, 37h, 5, 8Ah, 0C3h | |
| F000:6000 db 2Ah, 0C1h, 8Ah, 0D8h, 8Ah, 0C7h, 1Ah, 0C5h, 8Ah, 0F8h | |
| F000:6000 db 73h, 0C5h, 32h, 0C0h, 2Ah, 0C3h, 8Ah, 0D8h, 1Ah, 0C7h | |
| F000:6000 db 2Ah, 0C3h, 8Ah, 0F8h, 0F9h, 0C3h, 8Bh, 1Eh, 39h, 5 | |
| F000:6000 db 8Ah, 0C3h, 2Ah, 0C2h, 8Ah, 0D8h, 8Ah, 0C7h, 1Ah, 0C6h | |
| F000:6000 db 8Ah, 0F8h, 0EBh, 0DEh, 53h, 8Bh, 1Eh, 39h, 5, 87h, 0DAh | |
| F000:6000 db 89h, 1Eh, 39h, 5, 5Bh, 0C3h, 0E8h, 0F0h, 0FFh, 53h | |
| F000:6000 db 51h, 8Bh, 1Eh, 37h, 5, 5Eh, 87h, 0DEh, 56h, 89h, 1Eh | |
| F000:6000 db 37h, 5, 59h, 5Bh, 0C3h, 0E8h, 0E2h, 0FEh, 51h, 52h | |
| F000:6000 db 0E8h, 6Ah, 0E5h, 0EAh, 0E8h, 0EDh, 0FEh, 0E8h, 76h | |
| F000:6000 db 0FFh, 5Ah, 59h, 74h, 53h, 0E8h, 5Ch, 0E5h, 2Ch, 0E8h | |
| F000:6000 db 58h, 0E5h, 42h, 75h, 3, 0E9h, 60h, 0, 0E8h, 4Fh, 0E5h | |
| F000:6000 db 46h, 53h, 0E8h, 5Dh, 2, 0E8h, 0C1h, 0FFh, 0E8h, 57h | |
| F000:6000 db 2, 0E8h, 9Ch, 0FFh, 73h, 3, 0E8h, 0A9h, 0FFh, 43h, 53h | |
| F000:6000 db 0E8h, 72h, 0FFh, 73h, 3, 0E8h, 0AFh, 0FFh, 43h, 53h | |
| F000:6000 db 0E8h, 9Ch, 1, 5Ah, 59h, 52h, 51h, 0E8h, 0DBh, 0, 50h | |
| F000:6000 db 53h, 87h, 0DAh, 0E8h, 69h, 2, 5Bh, 58h, 0E8h, 0D7h | |
| F000:6000 db 0, 0E8h, 0F8h, 0, 59h, 5Ah, 49h, 8Ah, 0C5h, 0Ah, 0C1h | |
| F000:6000 db 75h, 0E3h, 5Bh, 0C3h, 51h, 52h, 53h, 0E8h, 45h, 0, 8Bh | |
| F000:6000 db 1Eh, 3Dh, 5, 89h, 1Eh, 37h, 5, 8Bh, 1Eh, 3Bh, 5, 89h | |
| F000:6000 db 1Eh, 39h, 5, 5Bh, 5Ah, 59h, 0C3h, 53h, 8Bh, 1Eh, 39h | |
| F000:6000 db 5, 53h, 52h, 87h, 0DAh, 0E8h, 0DAh, 0FFh, 5Bh, 89h | |
| F000:6000 db 1Eh, 39h, 5, 87h, 0DAh, 0E8h, 0D0h, 0FFh, 5Bh, 89h | |
| F000:6000 db 1Eh, 39h, 5, 8Bh, 1Eh, 37h, 5, 51h, 8Bh, 0CBh, 0E8h | |
| F000:6000 db 0C1h, 0FFh, 5Bh, 89h, 1Eh, 37h, 5, 8Bh, 0CBh, 0E8h | |
| F000:6000 db 0B7h, 0FFh, 5Bh, 0C3h, 0CDh, 0B8h, 0E8h, 0CFh, 1, 0E8h | |
| F000:6000 db 33h, 0FFh, 0E8h, 0C9h, 1, 0E8h, 0Eh, 0FFh, 73h, 3, 0E8h | |
| F000:6000 db 28h, 0FFh, 52h, 53h, 0E8h, 0E4h, 0FEh, 87h, 0DAh, 0BBh | |
| F000:6000 db 0F1h, 49h, 73h, 3, 0BBh, 5, 4Ah, 5Eh, 87h, 0DEh, 56h | |
| F000:6000 db 3Bh, 0DAh, 73h, 14h, 89h, 1Eh, 0FDh, 6, 5Bh, 89h, 1Eh | |
| F000:6000 db 0F7h, 6, 0BBh, 0D5h, 49h, 89h, 1Eh, 0F9h, 6, 87h, 0DAh | |
| F000:6000 db 0EBh, 16h, 5Eh, 87h, 0DEh, 56h, 89h, 1Eh, 0F9h, 6, 0BBh | |
| F000:6000 db 0D5h, 49h, 89h, 1Eh, 0F7h, 6, 87h, 0DAh, 89h, 1Eh, 0FDh | |
| F000:6000 db 6, 5Bh, 5Ah, 53h, 89h, 1Eh, 0FBh, 6, 0E8h, 0D3h, 0 | |
| F000:6000 db 5Ah, 52h, 0E8h, 5, 0, 59h, 41h, 0E9h, 20h, 2, 8Ah, 0C6h | |
| F000:6000 db 0Ah, 0C0h, 0D0h, 0D8h, 8Ah, 0F0h, 8Ah, 0C2h, 0D0h, 0D8h | |
| F000:6000 db 8Ah, 0D0h, 0C3h, 8Bh, 1Eh, 0F3h, 6, 0A0h, 0F5h, 6, 0C3h | |
| F000:6000 db 89h, 1Eh, 0F3h, 6, 0A2h, 0F5h, 6, 0C3h, 8Bh, 1Eh, 0F3h | |
| F000:6000 db 6, 81h, 0FBh, 0, 20h, 72h, 9, 81h, 0EBh, 0, 20h, 89h | |
| F000:6000 db 1Eh, 0F3h, 6, 0C3h, 81h, 0C3h, 50h, 20h, 89h, 1Eh, 0F3h | |
| F000:6000 db 6, 0C3h, 8Bh, 1Eh, 0F3h, 6, 81h, 0FBh, 0, 20h, 72h | |
| F000:6000 db 9, 81h, 0EBh, 0B0h, 1Fh, 89h, 1Eh, 0F3h, 6, 0C3h, 81h | |
| F000:6000 db 0C3h, 0, 20h, 89h, 1Eh, 0F3h, 6, 0C3h, 8Ah, 0C1h, 8Ah | |
| F000:6000 db 0Eh, 55h, 0, 0D2h, 0Eh, 0F5h, 6, 8Ah, 0C8h, 72h, 1 | |
| F000:6000 db 0C3h, 0FFh, 6, 0F3h, 6, 0C3h, 8Ah, 0C1h, 8Ah, 0Eh, 55h | |
| F000:6000 db 0, 0D2h, 6, 0F5h, 6, 8Ah, 0C8h, 72h, 1, 0C3h, 0FFh | |
| F000:6000 db 0Eh, 0F3h, 6, 0C3h, 8Ch, 0C6h, 0BFh, 0, 0B8h, 8Eh, 0C7h | |
| F000:6000 db 8Bh, 1Eh, 0F3h, 6, 26h, 8Ah, 7, 8Ah, 16h, 0F5h, 6, 22h | |
| F000:6000 db 0C2h, 8Ah, 0Eh, 55h, 0, 0D2h, 0EAh, 72h, 4, 0D2h, 0E8h | |
| F000:6000 db 0EBh, 0F8h, 8Eh, 0C6h, 0C3h, 8Ch, 0C6h, 0BFh, 0, 0B8h | |
| F000:6000 db 8Eh, 0C7h, 8Bh, 1Eh, 0F3h, 6, 8Bh, 0E9h, 0A0h, 0F5h | |
| F000:6000 db 6, 0F6h, 0D0h, 26h, 22h, 7, 8Ah, 0Eh, 0F6h, 6, 22h | |
| F000:6000 db 0Eh, 0F5h, 6, 0Ah, 0C1h, 26h, 88h, 7, 8Bh, 0CDh, 8Eh | |
| F000:6000 db 0C6h, 0C3h, 8Bh, 0E9h, 0D1h, 0EAh, 9Fh, 8Bh, 0DAh, 0B1h | |
| F000:6000 db 2, 0D3h, 0E2h, 3, 0D3h, 0B1h, 4, 0D3h, 0E2h, 9Eh, 73h | |
| F000:6000 db 4, 81h, 0C2h, 0, 20h, 89h, 16h, 0F3h, 6, 8Bh, 0D5h | |
| F000:6000 db 8Ah, 0CAh, 0F6h, 6, 55h, 0, 1, 74h, 14h, 0B0h, 7, 22h | |
| F000:6000 db 0C8h, 0B0h, 80h, 0D2h, 0E8h, 0A2h, 0F5h, 6, 0B1h, 3 | |
| F000:6000 db 0D3h, 0EAh, 1, 16h, 0F3h, 6, 0C3h, 0B0h, 3, 22h, 0C8h | |
| F000:6000 db 2, 0C9h, 0B0h, 0C0h, 0D2h, 0E8h, 0A2h, 0F5h, 6, 0B1h | |
| F000:6000 db 2, 0D3h, 0EAh, 1, 16h, 0F3h, 6, 0C3h, 0A0h, 48h, 0 | |
| F000:6000 db 3Ch, 8, 73h, 23h, 0C7h, 6, 3Bh, 5, 64h, 0, 0C7h, 6 | |
| F000:6000 db 3Dh, 5, 40h, 1, 0C6h, 6, 55h, 0, 1, 3Ch, 6, 74h, 0Eh | |
| F000:6000 db 73h, 0Dh, 3Ch, 4, 72h, 9, 0D0h, 26h, 55h, 0, 0D1h, 2Eh | |
| F000:6000 db 3Dh, 5, 0C3h, 0D0h, 2Eh, 55h, 0, 2 dup(0C3h), 3Ch, 4 | |
| F000:6000 db 73h, 0Fh, 0F6h, 6, 55h, 0, 1, 74h, 0Ch, 24h, 1, 0F6h | |
| F000:6000 db 0D8h, 0A2h, 0F6h, 6, 0F8h, 0C3h, 0E9h, 5Dh, 0C5h, 24h | |
| F000:6000 db 3, 0B1h, 55h, 0F6h, 0E1h, 0A2h, 0F6h, 6, 0F8h, 0C3h | |
| F000:6000 db 0A0h, 55h, 0, 0Ah, 0C0h, 74h, 0EBh, 0Ah, 0EDh, 78h | |
| F000:6000 db 27h, 0BBh, 80h, 2, 84h, 6, 1, 0, 74h, 3, 0BBh, 40h | |
| F000:6000 db 1, 3Bh, 0CBh, 9Fh, 72h, 3, 4Bh, 8Bh, 0CBh, 0Ah, 0F6h | |
| F000:6000 db 78h, 0Ch, 81h, 0FAh, 0C8h, 0, 72h, 4, 0BAh, 0C7h, 0 | |
| F000:6000 db 0C3h, 9Eh, 0C3h, 33h, 0D2h, 0C3h, 33h, 0C9h, 9Fh, 0EBh | |
| F000:6000 db 0E8h, 8Ch, 0C6h, 0BFh, 0, 0B8h, 8Eh, 0C7h, 8Bh, 0D3h | |
| F000:6000 db 0Bh, 0D2h, 74h, 6Ch, 8Bh, 1Eh, 0F3h, 6, 26h, 8Ah, 2Fh | |
| F000:6000 db 0A0h, 0F5h, 6, 8Ah, 0E0h, 0F6h, 0D0h, 8Ah, 0Eh, 55h | |
| F000:6000 db 0, 8Ah, 1Eh, 0F6h, 6, 22h, 0E8h, 8Ah, 0FCh, 22h, 0FBh | |
| F000:6000 db 0Ah, 0EFh, 4Ah, 74h, 40h, 0D2h, 0C8h, 0D2h, 0CCh, 73h | |
| F000:6000 db 0EFh, 8Bh, 1Eh, 0F3h, 6, 26h, 88h, 2Fh, 0FFh, 6, 0F3h | |
| F000:6000 db 6, 88h, 26h, 0F5h, 6, 8Bh, 0CAh, 0D1h, 0E9h, 0D1h, 0E9h | |
| F000:6000 db 0F6h, 6, 55h, 0, 1, 75h, 6, 81h, 0E2h, 3, 0, 0EBh, 6 | |
| F000:6000 db 81h, 0E2h, 7, 0, 0D1h, 0E9h, 0E3h, 0ABh, 0FCh, 0A0h | |
| F000:6000 db 0F6h, 6, 8Bh, 3Eh, 0F3h, 6, 0F3h, 0AAh, 89h, 3Eh, 0F3h | |
| F000:6000 db 6, 0EBh, 9Bh, 8Bh, 1Eh, 0F3h, 6, 26h, 88h, 2Fh, 88h | |
| F000:6000 db 26h, 0F5h, 6, 8Eh, 0C6h, 0C3h, 0E8h, 7Fh, 0FEh, 3, 16h | |
| F000:6000 db 0FDh, 6, 3Bh, 16h, 0FBh, 6, 72h, 9, 2Bh, 16h, 0FBh | |
| F000:6000 db 6, 3Eh, 0FFh, 16h, 0F9h, 6, 3Eh, 0FFh, 16h, 0F7h, 6 | |
| F000:6000 db 0E2h, 0E3h, 0C3h, 53h, 0E8h, 0A3h, 0CFh, 5Bh, 0C3h | |
| F000:6000 db 53h, 0E8h, 27h, 19h, 5Bh, 0C3h, 46h, 80h, 3Eh, 71h | |
| F000:6000 db 2 dup(0), 74h, 3, 0E9h, 0F9h, 4, 0C3h, 0A0h, 29h, 0 | |
| F000:6000 db 8Ah, 0D0h, 0E8h, 0FFh, 0D2h, 0E9h, 0EDh, 4, 3 dup(0) | |
| F000:6000 db 0B4h, 0Fh, 0CDh, 10h, 0A2h, 48h, 0, 0B3h, 28h, 3Ch | |
| F000:6000 db 2, 72h, 0Ch, 0D1h, 0E3h, 3Ch, 7, 75h, 6, 0B8h, 0Ch | |
| F000:6000 db 0Bh, 0A3h, 68h, 0, 88h, 1Eh, 29h, 0, 0E8h, 5Eh, 0, 8Ch | |
| F000:6000 db 0D8h, 0A3h, 50h, 3, 1Eh, 8Eh, 0D9h, 0A3h, 10h, 5, 0BFh | |
| F000:6000 db 18h, 2, 0B1h, 7Ah, 8Ch, 0C8h, 0FCh, 0C7h, 5, 94h, 4Ch | |
| F000:6000 db 2 dup(47h), 89h, 5, 2 dup(47h), 0E2h, 0F4h, 0A3h, 6Eh | |
| F000:6000 db 0, 0A3h, 72h, 0, 0B8h, 34h, 4Dh, 0A3h, 6Ch, 0, 0B8h | |
| F000:6000 db 44h, 57h, 0A3h, 70h, 0, 1Fh, 0E8h, 5Dh, 0E1h, 0FBh | |
| F000:6000 db 0B4h, 1, 0CDh, 17h, 0E8h, 8Ch, 6, 0BBh, 9Bh, 4Ch, 0E8h | |
| F000:6000 db 0F4h, 2Eh, 0E9h, 78h, 32h, 43h, 61h, 72h, 74h, 72h | |
| F000:6000 db 69h, 64h, 67h, 65h, 20h, 52h, 65h, 71h, 75h, 69h, 72h | |
| F000:6000 db 65h, 64h, 0, 63h, 32h, 0E8h, 4Dh, 13h, 0BEh, 0EDh, 4Ch | |
| F000:6000 db 0BFh, 53h, 6, 0B9h, 0Ah, 0, 57h, 2Eh, 0ACh, 0AAh, 0Ah | |
| F000:6000 db 0C0h, 75h, 0F9h, 5Fh, 83h, 0C7h, 10h, 0E0h, 0F2h, 0C3h | |
| F000:6000 db 0CFh, 3Eh, 0FFh, 2Eh, 0, 7, 0CBh, 54h, 68h, 65h, 20h | |
| F000:6000 db 49h, 42h, 4Dh, 20h, 50h, 65h, 72h, 73h, 6Fh, 6Eh, 61h | |
| F000:6000 db 6Ch, 20h, 43h, 6Fh, 6Dh, 70h, 75h, 74h, 65h, 72h, 20h | |
| F000:6000 db 42h, 61h, 73h, 69h, 63h, 0FFh, 0Dh, 56h, 65h, 72h, 73h | |
| F000:6000 db 69h, 6Fh, 6Eh, 20h, 43h, 31h, 2Eh, 32h, 30h, 20h, 43h | |
| F000:6000 db 6Fh, 70h, 79h, 72h, 69h, 67h, 68h, 74h, 20h, 49h, 42h | |
| F000:6000 db 4Dh, 20h, 43h, 6Fh, 72h, 70h, 20h, 31h, 39h, 38h, 31h | |
| F000:6000 db 0FFh, 0Dh, 0, 6Dh, 65h, 63h, 30h, 33h, 32h, 31h, 38h | |
| F000:6000 db 33h, 4Ch, 49h, 53h, 54h, 20h, 0, 52h, 55h, 4Eh, 0Dh | |
| F000:6000 db 0, 4Ch, 4Fh, 41h, 44h, 22h, 0, 53h, 41h, 56h, 45h, 22h | |
| F000:6000 db 0, 43h, 4Fh, 4Eh, 54h, 0Dh, 0, 2Ch, 22h, 4Ch, 50h, 54h | |
| F000:6000 db 31h, 3Ah, 22h, 0Dh, 0, 54h, 52h, 4Fh, 4Eh, 0Dh, 0, 54h | |
| F000:6000 db 52h, 4Fh, 2 dup(46h), 0Dh, 0, 4Bh, 45h, 59h, 20h, 0 | |
| F000:6000 db 53h, 43h, 52h, 2 dup(45h), 4Eh, 20h, 30h, 2Ch, 30h | |
| F000:6000 db 2Ch, 30h, 0Dh, 0, 9Ch, 50h, 1Eh, 52h, 0BAh, 2 dup(0) | |
| F000:6000 db 8Eh, 0DAh, 8Eh, 1Eh, 10h, 5, 0E8h, 3Ah, 0Ah, 88h, 16h | |
| F000:6000 db 6Ah, 0, 0FEh, 0CAh, 88h, 16h, 5Eh, 0, 5Ah, 1Fh, 58h | |
| F000:6000 db 9Dh, 0CFh, 56h, 0A0h, 5Eh, 0, 0Ah, 0C0h, 75h, 11h, 0A0h | |
| F000:6000 db 6Ah, 0, 0Ah, 0C0h, 75h, 0Ah, 0B4h, 1, 0CDh, 16h, 0B0h | |
| F000:6000 db 0, 74h, 2, 0FEh, 0C8h, 5Eh, 0C3h, 0A0h, 5Eh, 0, 0Ah | |
| F000:6000 db 0C0h, 74h, 8, 32h, 0C0h, 0A2h, 5Eh, 0, 0B0h, 3, 0C3h | |
| F000:6000 db 56h, 57h, 0A0h, 6Ah, 0, 0Ah, 0C0h, 75h, 74h, 0B4h, 0 | |
| F000:6000 db 0CDh, 16h, 0Ah, 0C0h, 74h, 3, 5Fh, 5Eh, 0C3h, 53h, 80h | |
| F000:6000 db 0FCh, 3Bh, 72h, 5, 80h, 0FCh, 45h, 72h, 3Ch, 8Bh, 1Eh | |
| F000:6000 db 2Eh, 0, 43h, 0Bh, 0DBh, 75h, 13h, 0BBh, 34h, 4Eh, 0B1h | |
| F000:6000 db 1Ah, 2Eh, 3Ah, 27h, 74h, 0Ch, 43h, 0FEh, 0C0h, 0FEh | |
| F000:6000 db 0C9h, 75h, 0F4h, 32h, 0C0h, 5Bh, 0EBh, 0D3h, 32h, 0E4h | |
| F000:6000 db 0D0h, 0E0h, 8Bh, 0D8h, 2Eh, 8Bh, 9Fh, 3, 1, 89h, 1Eh | |
| F000:6000 db 6Bh, 0, 0FEh, 0Eh, 6Ah, 0, 0D0h, 0E8h, 4, 41h, 8Ch | |
| F000:6000 db 0Eh, 6Dh, 0, 0EBh, 0E0h, 50h, 86h, 0C4h, 2Ch, 3Bh, 0B3h | |
| F000:6000 db 10h, 0F6h, 0E3h, 0BBh, 53h, 6, 3, 0D8h, 0F6h, 7, 0FFh | |
| F000:6000 db 58h, 74h, 0CCh, 89h, 1Eh, 6Bh, 0, 8Ch, 1Eh, 6Dh, 0 | |
| F000:6000 db 0FEh, 0Eh, 6Ah, 0, 0EBh, 0Ch, 53h, 0FEh, 0C8h, 75h | |
| F000:6000 db 7, 0A2h, 6Ah, 0, 0B0h, 20h, 0EBh, 0B2h, 1Eh, 0C5h, 1Eh | |
| F000:6000 db 6Bh, 0, 8Ah, 7, 1Fh, 0FFh, 6, 6Bh, 0, 0Ah, 0C0h, 74h | |
| F000:6000 db 2, 79h, 0A0h, 32h, 0E4h, 8Ch, 0CBh, 8Ah, 1Eh, 6Eh, 0 | |
| F000:6000 db 3Ah, 0DFh, 72h, 4, 0FEh, 0C4h, 24h, 7Fh, 88h, 26h, 6Ah | |
| F000:6000 db 0, 0Ah, 0C0h, 75h, 88h, 5Bh, 0E9h, 77h, 11h, 1Eh, 30h | |
| F000:6000 db 2Eh, 20h, 12h, 21h, 22h, 23h, 17h, 24h, 25h, 26h, 32h | |
| F000:6000 db 31h, 18h, 19h, 10h, 13h, 1Fh, 14h, 16h, 2Fh, 11h, 2Dh | |
| F000:6000 db 15h, 2Ch, 53h, 51h, 56h, 0BEh, 6Ch, 4Eh, 0B1h, 0Eh | |
| F000:6000 db 0FCh, 2Eh, 0ACh, 3Ah, 0E0h, 74h, 9, 46h, 0FEh, 0C9h | |
| F000:6000 db 75h, 0F4h, 32h, 0C0h, 0EBh, 2, 2Eh, 0ACh, 5Eh, 59h | |
| F000:6000 db 5Bh, 0C3h, 47h, 0Bh, 48h, 1Eh, 4Bh, 1Dh, 4Dh, 1Ch, 50h | |
| F000:6000 db 1Fh, 1Ch, 0Ah, 74h, 6, 73h, 2, 76h, 1, 52h, 12h, 53h | |
| F000:6000 db 7Fh, 4Fh, 0Eh, 75h, 5, 77h, 0Ch, 1Fh, 1Eh, 1Dh, 1Ch | |
| F000:6000 db 0Dh, 0Ch, 0Bh, 0Ah, 9Ch, 53h, 51h, 52h, 50h, 3Ch, 7 | |
| F000:6000 db 74h, 4Dh, 3Ch, 0Dh, 75h, 0Ah, 0F6h, 6, 6Fh, 0, 0FFh | |
| F000:6000 db 74h, 3, 0E8h, 8Bh, 0, 0E8h, 2Ch, 2, 74h, 4, 3Ch, 0FFh | |
| F000:6000 db 74h, 39h, 3Ch, 0Ch, 74h, 22h, 0BBh, 87h, 4Eh, 0B9h | |
| F000:6000 db 8, 0, 43h, 0FEh, 0C9h, 78h, 1Ch, 2Eh, 3Ah, 7, 75h, 0F6h | |
| F000:6000 db 0D0h, 0E1h, 8Bh, 0D9h, 0B9h, 0E9h, 4Eh, 51h, 2Eh, 0FFh | |
| F000:6000 db 0B7h, 0E1h, 2Fh, 8Bh, 1Eh, 56h, 0, 0C3h, 0E8h, 0Eh | |
| F000:6000 db 4, 0EBh, 0Eh, 0E8h, 3Eh, 0, 0E8h, 0Eh, 0, 0E8h, 0Dh | |
| F000:6000 db 0E1h, 0EBh, 3, 0E8h, 24h, 9, 58h, 5Ah, 59h, 5Bh, 9Dh | |
| F000:6000 db 0C3h, 50h, 8Ah, 3Eh, 49h, 0, 8Ah, 1Eh, 4Eh, 0, 0B9h | |
| F000:6000 db 1, 0, 0B4h, 9, 0CDh, 10h, 58h, 0C3h, 53h, 0E8h, 71h | |
| F000:6000 db 0, 0E8h, 0E7h, 0FFh, 5Bh, 0C3h, 53h, 0E8h, 68h, 0, 0B4h | |
| F000:6000 db 8, 0CDh, 10h, 5Bh, 0C3h, 0E8h, 0F3h, 0FFh, 8Ah, 0E8h | |
| F000:6000 db 8Ah, 0CCh, 0C3h, 8Bh, 1Eh, 56h, 0, 89h, 1Eh, 56h, 0 | |
| F000:6000 db 9Ch, 53h, 0E8h, 4Dh, 0, 5Bh, 9Dh, 0C3h, 0A0h, 57h, 0 | |
| F000:6000 db 0FEh, 0C8h, 0C3h, 50h, 8Ah, 0Eh, 29h, 0, 2Ah, 0Eh, 57h | |
| F000:6000 db 0, 0FEh, 0C1h, 0B5h, 0, 8Ah, 3Eh, 49h, 0, 8Ah, 1Eh | |
| F000:6000 db 4Fh, 0, 0B0h, 20h, 0B4h, 9, 0CDh, 10h, 8Bh, 16h, 56h | |
| F000:6000 db 0, 86h, 0F2h, 0FEh, 0CEh, 0FEh, 0CAh, 0B4h, 2, 0CDh | |
| F000:6000 db 10h, 58h, 0C3h, 53h, 0E8h, 15h, 0, 8Ah, 3Eh, 49h, 0 | |
| F000:6000 db 8Ah, 1Eh, 4Fh, 0, 8Ah, 0Eh, 29h, 0, 0B5h, 0, 0B0h, 20h | |
| F000:6000 db 0B4h, 9, 0CDh, 10h, 5Bh, 50h, 52h, 8Bh, 0D3h, 86h, 0F2h | |
| F000:6000 db 0FEh, 0CEh, 0FEh, 0CAh, 8Ah, 3Eh, 49h, 0, 0B4h, 2, 0CDh | |
| F000:6000 db 10h, 5Ah, 58h, 0C3h, 53h, 52h, 0B1h, 0, 8Ah, 0EFh, 8Ah | |
| F000:6000 db 0F3h, 0E8h, 1Bh, 0, 0B4h, 6, 0CDh, 10h, 0EBh, 0Fh, 53h | |
| F000:6000 db 52h, 0B1h, 0, 8Ah, 0EBh, 8Ah, 0F7h, 0E8h, 0Ah, 0, 0B4h | |
| F000:6000 db 7, 0CDh, 10h, 0E8h, 1Ch, 0, 5Ah, 5Bh, 0C3h, 0E8h, 11h | |
| F000:6000 db 0, 8Ah, 16h, 29h, 0, 0FEh, 0CAh, 0FEh, 0CEh, 0FEh, 0CDh | |
| F000:6000 db 0B0h, 1, 8Ah, 3Eh, 4Fh, 0, 0C3h, 0A0h, 49h, 0, 0EBh | |
| F000:6000 db 3, 0A0h, 4Ah, 0, 0E8h, 6, 1, 75h, 20h, 8Ah, 26h, 48h | |
| F000:6000 db 0, 80h, 0FCh, 7, 74h, 17h, 52h, 0BAh, 0, 8, 80h, 0FCh | |
| F000:6000 db 2, 72h, 2, 0D0h, 0E6h, 32h, 0E4h, 0F7h, 0E2h, 1Eh, 8Eh | |
| F000:6000 db 0DAh, 0A3h, 4Eh, 4, 1Fh, 5Ah, 0C3h, 9Ch, 53h, 52h, 50h | |
| F000:6000 db 0BAh, 2 dup(0), 0B4h, 0, 0CDh, 17h, 8Ah, 0C4h, 80h | |
| F000:6000 db 0E4h, 28h, 80h, 0FCh, 28h, 74h, 0Dh, 0F6h, 0C4h, 8 | |
| F000:6000 db 75h, 0Ch, 0A8h, 1, 74h, 0Dh, 0B2h, 18h, 0EBh, 6, 0B2h | |
| F000:6000 db 1Bh, 0EBh, 2, 0B2h, 19h, 0E9h, 0BAh, 0B7h, 58h, 50h | |
| F000:6000 db 3Ch, 0Dh, 0E9h, 5Dh, 0Fh, 58h, 5Ah, 5Bh, 9Dh, 0C3h | |
| F000:6000 db 3Ch, 93h, 74h, 60h, 3Ch, 95h, 74h, 46h, 3Ch, 0DDh, 74h | |
| F000:6000 db 46h, 0E8h, 0E3h, 0CEh, 0Ah, 0C0h, 74h, 38h, 0FEh, 0C8h | |
| F000:6000 db 3Ch, 0Ah, 73h, 32h, 0BAh, 10h, 0, 0F6h, 0E2h, 8Ah, 0D0h | |
| F000:6000 db 81h, 0C2h, 53h, 6, 52h, 0E8h, 0A2h, 0DDh, 2Ch, 0E8h | |
| F000:6000 db 0D1h, 0C6h, 53h, 0E8h, 4Ch, 0D8h, 8Ah, 0Fh, 80h, 0F9h | |
| F000:6000 db 0Fh, 72h, 2, 0B1h, 0Fh, 43h, 8Bh, 37h, 5Bh, 5Fh, 53h | |
| F000:6000 db 0B5h, 0, 0FCh, 0F3h, 0A4h, 88h, 2Dh, 0E8h, 72h, 0FBh | |
| F000:6000 db 5Bh, 0C3h, 0E9h, 0E1h, 0BFh, 0B0h, 0FFh, 0EBh, 2, 0B0h | |
| F000:6000 db 0, 3Ah, 6, 71h, 0, 0A2h, 71h, 0, 74h, 3, 0E8h, 5Eh | |
| F000:6000 db 0, 0E8h, 90h, 0BEh, 0C3h, 53h, 0BEh, 53h, 6, 0B9h, 0Ah | |
| F000:6000 db 0, 0FEh, 0C5h, 56h, 0B0h, 46h, 0E8h, 8, 0DBh, 51h, 8Ah | |
| F000:6000 db 0DDh, 0B7h, 0, 0E8h, 0ABh, 14h, 0B0h, 20h, 0E8h, 0FBh | |
| F000:6000 db 0DAh, 59h, 5Eh, 56h, 51h, 0FCh, 0ACh, 0Ah, 0C0h, 74h | |
| F000:6000 db 5, 0E8h, 13h, 0, 0EBh, 0F5h, 0B0h, 0Dh, 0E8h, 0E7h | |
| F000:6000 db 0DAh, 59h, 5Eh, 83h, 0C6h, 10h, 0FEh, 0C9h, 75h, 0CEh | |
| F000:6000 db 5Bh, 0EBh, 0C0h, 56h, 3Ch, 0Dh, 75h, 2, 0B0h, 1Bh, 0E8h | |
| F000:6000 db 0D1h, 0DAh, 5Eh, 0C3h, 50h, 0A0h, 48h, 0, 3Ch, 7, 74h | |
| F000:6000 db 4, 3Ch, 4, 73h, 2, 32h, 0C0h, 0Ah, 0C0h, 58h, 0C3h | |
| F000:6000 db 53h, 0CDh, 0ADh, 0B6h, 18h, 0B2h, 0, 8Ah, 3Eh, 49h | |
| F000:6000 db 0, 0B4h, 2, 0CDh, 10h, 0A0h, 71h, 0, 0Ah, 0C0h, 75h | |
| F000:6000 db 13h, 8Ah, 1Eh, 4Fh, 0, 8Ah, 0Eh, 29h, 0, 0B5h, 0, 0B4h | |
| F000:6000 db 9, 0CDh, 10h, 0E8h, 0Dh, 0FEh, 5Bh, 0C3h, 0B3h, 7, 0E8h | |
| F000:6000 db 0C0h, 0FFh, 75h, 9, 0A0h, 4Ch, 0, 0Ah, 0C0h, 75h, 2 | |
| F000:6000 db 0B3h, 70h, 0BEh, 53h, 6, 0B5h, 5, 0A0h, 29h, 0, 3Ch | |
| F000:6000 db 28h, 0B0h, 31h, 74h, 2, 0B5h, 0Ah, 50h, 53h, 8Ah, 1Eh | |
| F000:6000 db 4Eh, 0, 0E8h, 37h, 0, 5Bh, 56h, 0B1h, 6, 51h, 0FCh | |
| F000:6000 db 0ACh, 0Ah, 0C0h, 9Ch, 56h, 75h, 2, 32h, 0C0h, 0E8h | |
| F000:6000 db 25h, 0, 5Eh, 9Dh, 75h, 1, 4Eh, 59h, 0FEh, 0C9h, 75h | |
| F000:6000 db 2 dup(0E8h), 16h, 0, 5Eh, 83h, 0C6h, 10h, 58h, 0FEh | |
| F000:6000 db 0C0h, 3Ch, 3Ah, 72h, 2, 0B0h, 30h, 0FEh, 0CDh, 75h | |
| F000:6000 db 0C7h, 0E8h, 0AFh, 0FDh, 5Bh, 0C3h, 32h, 0C0h, 53h, 0Ah | |
| F000:6000 db 0C0h, 75h, 6, 0B0h, 20h, 8Ah, 1Eh, 4Fh, 0, 3Ch, 0Dh | |
| F000:6000 db 75h, 2, 0B0h, 1Bh, 51h, 0B9h, 1, 0, 0B4h, 9, 0CDh, 10h | |
| F000:6000 db 0FEh, 0C2h, 0B4h, 2, 0CDh, 10h, 59h, 5Bh, 0C3h, 8Ah | |
| F000:6000 db 0Eh, 49h, 0, 0B5h, 0, 8Ah, 26h, 48h, 0, 0F6h, 0C4h | |
| F000:6000 db 1, 74h, 3, 80h, 0CDh, 2 dup(80h), 0FCh, 4, 72h, 9, 0FEh | |
| F000:6000 db 0C5h, 80h, 0FCh, 6, 72h, 2, 0FEh, 0C5h, 51h, 3Ch, 2Ch | |
| F000:6000 db 74h, 0Ch, 0E8h, 61h, 0CDh, 59h, 8Ah, 0E8h, 51h, 0E8h | |
| F000:6000 db 5Ch, 0BDh, 74h, 40h, 0E8h, 2Dh, 0DCh, 2Ch, 3Ch, 2Ch | |
| F000:6000 db 74h, 15h, 0E8h, 4Dh, 0CDh, 0Ah, 0C0h, 74h, 2, 0B0h | |
| F000:6000 db 80h, 59h, 80h, 0E5h, 3, 0Ah, 0E8h, 51h, 0E8h, 3Fh, 0BDh | |
| F000:6000 db 74h, 23h, 0E8h, 10h, 0DCh, 2Ch, 3Ch, 2Ch, 74h, 0Ch | |
| F000:6000 db 0E8h, 30h, 0CDh, 59h, 8Ah, 0C8h, 51h, 0E8h, 2Bh, 0BDh | |
| F000:6000 db 74h, 0Fh, 0E8h, 0FCh, 0DBh, 2Ch, 0E8h, 20h, 0CDh, 8Ah | |
| F000:6000 db 0F0h, 59h, 0EBh, 6, 0E9h, 55h, 0BEh, 59h, 8Ah, 0F1h | |
| F000:6000 db 8Ah, 26h, 29h, 0, 8Ah, 0C5h, 24h, 7Fh, 0Ah, 0C0h, 74h | |
| F000:6000 db 0Ah, 32h, 0D2h, 0Ah, 0D6h, 0Ah, 0D1h, 75h, 0E6h, 0EBh | |
| F000:6000 db 1Bh, 80h, 0FCh, 28h, 74h, 0Ch, 80h, 0FEh, 4, 73h, 0DAh | |
| F000:6000 db 80h, 0F9h, 4, 72h, 0Ch, 0EBh, 0D3h, 80h, 0FEh, 8, 73h | |
| F000:6000 db 0CEh, 80h, 0F9h, 8, 73h, 0C9h, 8Ah, 0D1h, 0Ah, 0C0h | |
| F000:6000 db 74h, 20h, 80h, 3Eh, 48h, 0, 7, 74h, 5Ch, 0B1h, 6, 3Ch | |
| F000:6000 db 2, 0B4h, 50h, 74h, 2Ah, 0B4h, 28h, 0FEh, 0C9h, 0FEh | |
| F000:6000 db 0C8h, 75h, 0ACh, 0F6h, 0C5h, 80h, 75h, 1Dh, 0FEh, 0C9h | |
| F000:6000 db 0EBh, 19h, 0B1h, 2, 80h, 0FCh, 28h, 74h, 9, 0F6h, 0C5h | |
| F000:6000 db 80h, 74h, 0Dh, 0FEh, 0C1h, 0EBh, 9, 0FEh, 0C9h, 0F6h | |
| F000:6000 db 0C5h, 80h, 75h, 2, 0FEh, 0C9h, 88h, 26h, 29h, 0, 0A1h | |
| F000:6000 db 48h, 0, 88h, 0Eh, 48h, 0, 89h, 16h, 49h, 0, 3Ah, 0C1h | |
| F000:6000 db 74h, 1Ah, 0B8h, 7, 0, 0A3h, 4Bh, 0, 86h, 0C4h, 0A3h | |
| F000:6000 db 4Dh, 0, 88h, 26h, 4Fh, 0, 0E8h, 3Ah, 0FEh, 74h, 3, 0A2h | |
| F000:6000 db 4Fh, 0, 0E8h, 6Eh, 0, 0A0h, 4Ah, 0, 0B4h, 5, 0CDh, 10h | |
| F000:6000 db 0C3h, 3Ah, 6, 29h, 0, 74h, 34h, 8Ah, 26h, 48h, 0, 3Ch | |
| F000:6000 db 50h, 74h, 7, 3Ch, 28h, 74h, 3, 0E9h, 98h, 0BDh, 80h | |
| F000:6000 db 0FCh, 7, 75h, 4, 0B0h, 50h, 0EBh, 1Ch, 80h, 0F4h, 2 | |
| F000:6000 db 80h, 0FCh, 7, 75h, 2, 0FEh, 0CCh, 50h, 0A2h, 29h, 0 | |
| F000:6000 db 88h, 26h, 48h, 0, 0C7h, 6, 49h, 3 dup(0), 0E8h, 2Dh | |
| F000:6000 db 0, 58h, 0C3h, 53h, 0E8h, 0DAh, 0FCh, 8Ah, 16h, 29h | |
| F000:6000 db 0, 0FEh, 0CAh, 5 dup(90h), 0B6h, 18h, 8Ah, 3Eh, 4Fh | |
| F000:6000 db 0, 0B9h, 2 dup(0), 8Ah, 0C1h, 0B4h, 6, 0CDh, 10h, 0BAh | |
| F000:6000 db 2 dup(0), 8Ah, 3Eh, 49h, 0, 0B4h, 2, 0CDh, 10h, 0EBh | |
| F000:6000 db 0Fh, 53h, 0B9h, 2 dup(0), 89h, 0Eh, 49h, 0, 0A0h, 48h | |
| F000:6000 db 0, 0B4h, 0, 0CDh, 10h, 0E8h, 0BDh, 0DDh, 0E8h, 0C9h | |
| F000:6000 db 0F8h, 0E8h, 8Ah, 0F7h, 0E8h, 9Dh, 0FCh, 5Bh, 0C3h, 0E8h | |
| F000:6000 db 0A4h, 0FDh, 74h, 5Bh, 0B1h, 0, 0BEh, 51h, 0, 80h, 3Eh | |
| F000:6000 db 48h, 0, 6, 75h, 3, 0E9h, 16h, 0BDh, 8Ah, 2Ch, 56h, 51h | |
| F000:6000 db 0E8h, 0D4h, 0BBh, 74h, 40h, 3Ch, 2Ch, 74h, 7, 0E8h | |
| F000:6000 db 0C9h, 0CBh, 59h, 8Ah, 0E8h, 51h, 59h, 51h, 53h, 8Ah | |
| F000:6000 db 0F9h, 8Ah, 0DDh, 80h, 0FFh, 0, 75h, 8, 80h, 0FBh, 8 | |
| F000:6000 db 72h, 3, 80h, 0CBh, 10h, 0B4h, 0Bh, 0CDh, 10h, 5Bh, 0E8h | |
| F000:6000 db 0ABh, 0BBh, 74h, 3, 0E8h, 0A5h, 0BBh, 59h, 5Eh, 88h | |
| F000:6000 db 2Ch, 74h, 8, 46h, 0FEh, 0C1h, 80h, 0F9h, 4, 72h, 0BDh | |
| F000:6000 db 0C6h, 6, 4Fh, 2 dup(0), 0C3h, 59h, 5Eh, 0C3h, 0FFh | |
| F000:6000 db 36h, 4Dh, 0, 0FFh, 36h, 4Bh, 0, 3Ch, 2Ch, 74h, 10h | |
| F000:6000 db 0E8h, 7Eh, 0CBh, 3Ch, 20h, 73h, 18h, 59h, 8Ah, 0C8h | |
| F000:6000 db 51h, 0E8h, 75h, 0BBh, 74h, 2Ch, 0E8h, 46h, 0DAh, 2Ch | |
| F000:6000 db 3Ch, 2Ch, 74h, 13h, 0E8h, 66h, 0CBh, 3Ch, 10h, 72h | |
| F000:6000 db 3, 0E9h, 9Ch, 0BCh, 59h, 8Ah, 0E8h, 51h, 0E8h, 5Ah | |
| F000:6000 db 0BBh, 74h, 11h, 0E8h, 2Bh, 0DAh, 2Ch, 0E8h, 4Fh, 0CBh | |
| F000:6000 db 3Ch, 10h, 73h, 0E9h, 59h, 5Ah, 8Ah, 0D0h, 52h, 51h | |
| F000:6000 db 59h, 5Ah, 8Ah, 0F1h, 80h, 0E6h, 0Fh, 89h, 0Eh, 4Bh | |
| F000:6000 db 0, 8Ah, 0C5h, 0D0h, 0E0h, 24h, 10h, 0Ah, 0C2h, 80h | |
| F000:6000 db 0E5h, 7, 0D0h, 0E5h, 0D0h, 0E5h, 0D0h, 0E5h, 0D0h, 0E5h | |
| F000:6000 db 0F6h, 0C1h, 10h, 74h, 3, 80h, 0CDh, 80h, 0Ah, 0EEh | |
| F000:6000 db 53h, 8Ah, 0D8h, 0B7h, 0, 24h, 0Fh, 0A2h, 4Dh, 0, 88h | |
| F000:6000 db 2Eh, 4Eh, 0, 88h, 2Eh, 4Fh, 0, 0B4h, 0Bh, 0CDh, 10h | |
| F000:6000 db 5Bh, 0C3h, 0FFh, 36h, 56h, 0, 3Ch, 2Ch, 74h, 20h, 0E8h | |
| F000:6000 db 0FAh, 0CAh, 0Ah, 0C0h, 74h, 5Bh, 3Ch, 1Ah, 73h, 57h | |
| F000:6000 db 8Ah, 26h, 71h, 0, 0Ah, 0E4h, 74h, 4, 3Ch, 19h, 73h | |
| F000:6000 db 4Bh, 5Ah, 8Ah, 0D0h, 52h, 0E8h, 0E1h, 0BAh, 74h, 7Bh | |
| F000:6000 db 0E8h, 0B2h, 0D9h, 2Ch, 3Ch, 2Ch, 74h, 18h, 0E8h, 0D2h | |
| F000:6000 db 0CAh, 0Ah, 0C0h, 74h, 33h, 8Ah, 26h, 29h, 0, 3Ah, 0E0h | |
| F000:6000 db 72h, 2Bh, 5Ah, 8Ah, 0F0h, 52h, 0E8h, 0C1h, 0BAh, 74h | |
| F000:6000 db 5Bh, 0FFh, 36h, 68h, 0, 0E8h, 8Eh, 0D9h, 2Ch, 3Ch, 2Ch | |
| F000:6000 db 74h, 19h, 0E8h, 0AEh, 0CAh, 0Ah, 0C0h, 0B0h, 0, 75h | |
| F000:6000 db 2, 0B0h, 20h, 59h, 0Ah, 0E8h, 51h, 0E8h, 0A1h, 0BAh | |
| F000:6000 db 74h, 2Dh, 0EBh, 3, 0E9h, 0D5h, 0BBh, 0E8h, 6Dh, 0D9h | |
| F000:6000 db 2Ch, 0E8h, 91h, 0CAh, 3Ch, 20h, 73h, 0F2h, 59h, 80h | |
| F000:6000 db 0E5h, 20h, 0Ah, 0E8h, 8Ah, 0C8h, 51h, 0E8h, 83h, 0BAh | |
| F000:6000 db 74h, 0Fh, 0E8h, 54h, 0D9h, 2Ch, 0E8h, 78h, 0CAh, 3Ch | |
| F000:6000 db 20h, 73h, 0D9h, 59h, 8Ah, 0C8h, 51h, 59h, 51h, 80h | |
| F000:6000 db 0E5h, 0Fh, 89h, 0Eh, 68h, 0, 59h, 0B4h, 1, 0CDh, 10h | |
| F000:6000 db 5Ah, 89h, 16h, 56h, 0, 86h, 0F2h, 0FEh, 0CEh, 0FEh | |
| F000:6000 db 0CAh, 53h, 8Ah, 3Eh, 49h, 0, 0B4h, 2, 0CDh, 10h, 5Bh | |
| F000:6000 db 0C3h, 50h, 0B0h, 0, 0EBh, 3, 50h, 0B0h, 20h, 9Ch, 51h | |
| F000:6000 db 53h, 50h, 0E8h, 3Dh, 0FAh, 58h, 5Bh, 8Bh, 0Eh, 68h | |
| F000:6000 db 0, 0F6h, 6, 72h, 0, 0FFh, 74h, 2, 0B5h, 4, 0Ah, 0E8h | |
| F000:6000 db 0B4h, 1, 0CDh, 10h, 59h, 9Dh, 58h, 0C3h, 4 dup(0), 0Ch dup(0FFh) | |
| F000:6000 db 50h, 9Ch, 0E8h, 0C9h, 0FBh, 74h, 4Bh, 53h, 51h, 52h | |
| F000:6000 db 8Ch, 0C6h, 0BFh, 2 dup(0), 8Eh, 0C7h, 26h, 0FFh, 36h | |
| F000:6000 db 7Ch, 0, 26h, 0FFh, 36h, 7Eh, 0, 26h, 0C7h, 6, 7Ch, 0 | |
| F000:6000 db 0F8h, 54h, 26h, 8Ch, 0Eh, 7Eh, 0, 8Eh, 0C6h, 0B0h, 81h | |
| F000:6000 db 2, 6, 72h, 0, 0B3h, 83h, 8Ah, 3Eh, 49h, 0, 0B9h, 1 | |
| F000:6000 db 0, 0B4h, 9, 0CDh, 10h, 8Ch, 0C6h, 0BFh, 2 dup(0), 8Eh | |
| F000:6000 db 0C7h, 26h, 8Fh, 6, 7Eh, 0, 26h, 8Fh, 6, 7Ch, 0, 8Eh | |
| F000:6000 db 0C6h, 5Ah, 59h, 5Bh, 9Dh, 58h, 0C3h, 0E8h, 0BDh, 0B9h | |
| F000:6000 db 0A0h, 56h, 0, 0E9h, 72h, 0F6h, 0E8h, 0B4h, 0B9h, 0E8h | |
| F000:6000 db 65h, 0, 0Ah, 0EEh, 75h, 56h, 0Ah, 0EAh, 0Ah, 0E9h, 74h | |
| F000:6000 db 50h, 8Ah, 26h, 29h, 0, 3Ah, 0E2h, 72h, 48h, 80h, 0F9h | |
| F000:6000 db 1Ah, 73h, 43h, 0A0h, 71h, 0, 0Ah, 0C0h, 74h, 5, 80h | |
| F000:6000 db 0F9h, 19h, 73h, 37h, 53h, 8Ah, 0F1h, 0FEh, 0CEh, 0FEh | |
| F000:6000 db 0CAh, 8Ah, 3Eh, 49h, 0, 0B4h, 2, 0CDh, 10h, 0B4h, 8 | |
| F000:6000 db 0CDh, 10h, 5Bh, 50h, 0E8h, 77h, 0B9h, 3Ch, 2Ch, 74h | |
| F000:6000 db 4, 0B0h, 0, 0EBh, 7, 0E8h, 42h, 0D8h, 2Ch, 0E8h, 66h | |
| F000:6000 db 0C9h, 50h, 0E8h, 3Ah, 0D8h, 29h, 58h, 0Ah, 0C0h, 58h | |
| F000:6000 db 74h, 2, 8Ah, 0C4h, 0E9h, 12h, 0F6h, 0E9h, 90h, 0BAh | |
| F000:6000 db 0E8h, 5, 0, 0E8h, 25h, 0D8h, 29h, 0C3h, 0E8h, 20h, 0D8h | |
| F000:6000 db 28h, 0E8h, 32h, 0C9h, 52h, 0E8h, 18h, 0D8h, 2Ch, 0E8h | |
| F000:6000 db 2Ah, 0C9h, 59h, 0C3h, 0E8h, 38h, 0B9h, 3Ch, 95h, 74h | |
| F000:6000 db 8, 0E8h, 8, 0D8h, 0DDh, 32h, 0C0h, 0EBh, 5, 0E8h, 29h | |
| F000:6000 db 0B9h, 0B0h, 0FFh, 0A2h, 34h, 0, 0C3h, 0A0h, 34h, 0 | |
| F000:6000 db 0Ah, 0C0h, 74h, 30h, 0E8h, 1Bh, 0C9h, 3Ch, 0Ah, 73h | |
| F000:6000 db 29h, 53h, 56h, 0BAh, 1Ah, 56h, 52h, 32h, 0E4h, 0D1h | |
| F000:6000 db 0E0h, 8Bh, 0F0h, 2Eh, 0FFh, 0B4h, 1Dh, 56h, 0C3h, 5Eh | |
| F000:6000 db 5Bh, 0C3h, 34h, 56h, 3Fh, 56h, 46h, 56h, 4Ch, 56h, 6Bh | |
| F000:6000 db 56h, 72h, 56h, 78h, 56h, 80h, 56h, 88h, 56h, 90h, 56h | |
| F000:6000 db 0E9h, 25h, 0BAh, 0BBh, 35h, 0, 8Ah, 7, 0C6h, 7, 0, 0E9h | |
| F000:6000 db 9Fh, 0F5h, 8Bh, 1Eh, 37h, 0, 0E9h, 0C6h, 0Eh, 0A0h | |
| F000:6000 db 39h, 0, 0E9h, 8Ch, 0F5h, 0B4h, 4, 0CDh, 10h, 50h, 0Ah | |
| F000:6000 db 0E4h, 74h, 0Ch, 89h, 1Eh, 3Ah, 0, 88h, 2Eh, 3Ch, 0 | |
| F000:6000 db 89h, 16h, 3Fh, 0, 58h, 8Ah, 0C4h, 0FEh, 0C8h, 0F6h | |
| F000:6000 db 0D0h, 0E9h, 73h, 0F5h, 8Bh, 1Eh, 3Ah, 0, 0E9h, 9Ah | |
| F000:6000 db 0Eh, 0A0h, 3Ch, 0, 0E9h, 60h, 0F5h, 0A0h, 3Eh, 0, 0FEh | |
| F000:6000 db 0C0h, 0E9h, 58h, 0F5h, 0A0h, 3Dh, 0, 0FEh, 0C0h, 0E9h | |
| F000:6000 db 50h, 0F5h, 0A0h, 40h, 0, 0FEh, 0C0h, 0E9h, 48h, 0F5h | |
| F000:6000 db 0A0h, 3Fh, 0, 0FEh, 0C0h, 0E9h, 40h, 0F5h, 0E8h, 84h | |
| F000:6000 db 0C8h, 0Ah, 0C0h, 74h, 12h, 3Ch, 4, 73h, 54h, 0B4h, 0 | |
| F000:6000 db 53h, 0BBh, 41h, 0, 3, 0D8h, 8Ah, 7, 5Bh, 0E9h, 27h | |
| F000:6000 db 0F5h, 53h, 0BAh, 1, 2, 0B9h, 2 dup(1), 0BBh, 0Fh, 0 | |
| F000:6000 db 0FAh, 0EEh, 0ECh, 24h, 0Fh, 3Ah, 0C3h, 0E1h, 0F9h, 0E3h | |
| F000:6000 db 0Bh, 32h, 0C3h, 8Ah, 0E1h, 50h, 0FEh, 0C7h, 32h, 0D8h | |
| F000:6000 db 0EBh, 0ECh, 0Ah, 0FFh, 74h, 1Ah, 8Ah, 0D7h, 0BBh, 41h | |
| F000:6000 db 0, 0B9h, 4, 0, 58h, 0F6h, 0D4h, 2, 0E2h, 0D0h, 0E8h | |
| F000:6000 db 73h, 2, 88h, 27h, 43h, 0E2h, 0F7h, 0FEh, 0CAh, 75h | |
| F000:6000 db 0E8h, 0FBh, 5Bh, 0A0h, 41h, 0, 0E9h, 0E1h, 0F4h, 0E9h | |
| F000:6000 db 5Fh, 0B9h, 0E8h, 20h, 0B8h, 3Ch, 95h, 74h, 8, 0E8h | |
| F000:6000 db 0F0h, 0D6h, 0DDh, 32h, 0C0h, 0EBh, 5, 0E8h, 11h, 0B8h | |
| F000:6000 db 0B0h, 0FFh, 0A2h, 45h, 0, 0C3h, 0A0h, 45h, 0, 0Ah, 0C0h | |
| F000:6000 db 74h, 0DEh, 0E8h, 3, 0C8h, 3Ch, 4, 73h, 0D7h, 0A8h, 1 | |
| F000:6000 db 74h, 0Eh, 0B4h, 10h, 0FEh, 0C8h, 74h, 2, 0B4h, 40h | |
| F000:6000 db 0E8h, 0D0h, 0, 0E9h, 0ACh, 0F4h, 53h, 0BBh, 46h, 0 | |
| F000:6000 db 0Ah, 0C0h, 74h, 1, 43h, 8Ah, 7, 0C6h, 7, 0, 5Bh, 0E9h | |
| F000:6000 db 9Ah, 0F4h, 9Ch, 50h, 55h, 56h, 57h, 1Eh, 0BAh, 2 dup(0) | |
| F000:6000 db 8Eh, 0DAh, 8Eh, 1Eh, 10h, 5, 0A1h, 66h, 0, 0Ah, 0C4h | |
| F000:6000 db 74h, 9, 0FFh, 0Eh, 66h, 0, 75h, 3, 0E8h, 27h, 0, 0A0h | |
| F000:6000 db 34h, 0, 0Ah, 0C0h, 74h, 3, 0E8h, 36h, 0, 0A0h, 45h | |
| F000:6000 db 0, 0Ah, 0C0h, 74h, 3, 0E8h, 69h, 0, 1Fh, 5Fh, 5Eh, 5Dh | |
| F000:6000 db 58h, 9Dh, 0CFh, 0C6h, 6, 65h, 2 dup(0), 0A1h, 66h, 0 | |
| F000:6000 db 0Bh, 0C0h, 74h, 18h, 52h, 0FAh, 0F6h, 6, 65h, 0, 0FFh | |
| F000:6000 db 75h, 7, 0BAh, 61h, 0, 0ECh, 24h, 0FCh, 0EEh, 0C7h, 6 | |
| F000:6000 db 66h, 3 dup(0), 0FBh, 5Ah, 0C3h, 53h, 51h, 52h, 0B4h | |
| F000:6000 db 4, 0CDh, 10h, 50h, 0Ah, 0E4h, 74h, 0Ch, 89h, 1Eh, 3Ah | |
| F000:6000 db 0, 88h, 2Eh, 3Ch, 0, 89h, 16h, 3Fh, 0, 58h, 0A0h, 36h | |
| F000:6000 db 0, 32h, 0C4h, 74h, 19h, 0Ah, 0E4h, 88h, 26h, 36h, 0 | |
| F000:6000 db 74h, 11h, 89h, 1Eh, 37h, 0, 88h, 2Eh, 39h, 0, 89h, 16h | |
| F000:6000 db 3Dh, 0, 0B0h, 0FFh, 0A2h, 35h, 0, 5Ah, 59h, 5Bh, 0C3h | |
| F000:6000 db 53h, 0BBh, 46h, 0, 80h, 3Fh, 0, 75h, 7, 0B4h, 10h, 0E8h | |
| F000:6000 db 11h, 0, 88h, 7, 43h, 80h, 3Fh, 0, 75h, 7, 0B4h, 40h | |
| F000:6000 db 0E8h, 4, 0, 88h, 7, 5Bh, 0C3h, 52h, 0BAh, 1, 2, 0ECh | |
| F000:6000 db 22h, 0C4h, 0FEh, 0C8h, 98h, 8Ah, 0C4h, 5Ah, 0C3h, 0E8h | |
| F000:6000 db 9, 0, 0B8h, 0D3h, 5, 0BAh, 4, 0, 52h, 0EBh, 38h, 8Bh | |
| F000:6000 db 16h, 66h, 0, 0Ah, 0F2h, 74h, 7, 0C6h, 6, 65h, 0, 0FFh | |
| F000:6000 db 0EBh, 0F1h, 0C3h, 0E8h, 0DEh, 0C6h, 83h, 0FAh, 25h | |
| F000:6000 db 72h, 12h, 52h, 0E8h, 0BFh, 0D5h, 2Ch, 0E8h, 71h, 0CAh | |
| F000:6000 db 59h, 52h, 0Bh, 0D2h, 75h, 7, 5Ah, 0E9h, 3Bh, 0FFh, 0E9h | |
| F000:6000 db 13h, 0B8h, 0E8h, 0D0h, 0FFh, 0BAh, 12h, 0, 0B8h, 0DCh | |
| F000:6000 db 34h, 0F7h, 0F1h, 0F6h, 6, 65h, 0, 0FFh, 75h, 8, 50h | |
| F000:6000 db 0BAh, 43h, 0, 0B0h, 0B6h, 0EEh, 58h, 0BAh, 42h, 0, 0EEh | |
| F000:6000 db 8Ah, 0C4h, 0EEh, 75h, 7, 0BAh, 61h, 0, 0ECh, 0Ch, 3 | |
| F000:6000 db 0EEh, 5Ah, 89h, 16h, 66h, 0, 0C6h, 6, 65h, 2 dup(0) | |
| F000:6000 db 0C3h, 0Ah, 5Ah, 4Dh, 41h, 59h, 10h, 59h, 10h, 19h, 5Ah | |
| F000:6000 db 59h, 10h, 59h, 10h, 59h, 10h, 59h, 10h, 2Dh, 5Ah, 59h | |
| F000:6000 db 10h, 34h, 5Ah, 4Dh, 41h, 59h, 10h, 45h, 5Ah, 59h, 10h | |
| F000:6000 db 59h, 10h, 59h, 10h, 59h, 10h, 59h, 10h, 59h, 10h, 5Dh | |
| F000:6000 db 5Ah, 63h, 5Ah, 4Dh, 41h, 59h, 10h, 7Ch, 5Ah, 59h, 10h | |
| F000:6000 db 59h, 10h, 59h, 10h, 59h, 10h, 59h, 10h, 59h, 10h, 0AAh | |
| F000:6000 db 5Ah, 0B1h, 5Ah, 6Eh, 5Bh, 59h, 10h, 0ABh, 5Bh, 0F0h | |
| F000:6000 db 5Bh, 59h, 10h, 59h, 10h, 6Ch, 5Ch, 59h, 10h, 76h, 5Ch | |
| F000:6000 db 59h, 10h, 22h, 0C2h, 75h, 22h, 9Ch, 50h, 53h, 89h, 1Eh | |
| F000:6000 db 0E9h, 4, 88h, 17h, 83h, 0C3h, 2Dh, 0C6h, 7, 0, 2 dup(43h) | |
| F000:6000 db 88h, 2Fh, 43h, 0C6h, 7, 0, 43h, 88h, 0Fh, 43h, 0C6h | |
| F000:6000 db 7, 0, 5Bh, 58h, 9Dh, 0C3h, 0E9h, 98h, 0AEh, 58h, 5Bh | |
| F000:6000 db 0C3h, 80h, 0FAh, 80h, 75h, 2, 0B2h, 2, 0C3h, 58h, 86h | |
| F000:6000 db 0C4h, 9Eh, 59h, 5Ah, 5Bh, 0C3h, 5Ah, 5Bh, 59h, 0C3h | |
| F000:6000 db 83h, 0C3h, 2Eh, 8Ah, 7, 0F6h, 0D0h, 0C3h, 8Bh, 1Eh | |
| F000:6000 db 0E9h, 4, 83h, 0C3h, 2Bh, 0C3h, 8Bh, 1Eh, 0E9h, 4, 83h | |
| F000:6000 db 0C3h, 32h, 0C3h, 8Bh, 1Eh, 0E9h, 4, 8Ah, 87h, 2Fh, 0 | |
| F000:6000 db 0C3h, 56h, 57h, 51h, 0C6h, 6, 3Fh, 5, 0A5h, 0BEh, 0F0h | |
| F000:6000 db 4, 0BFh, 40h, 5, 0B9h, 8, 0, 0FCh, 0A4h, 0E2h, 0FDh | |
| F000:6000 db 59h, 5Fh, 5Eh, 0C3h, 53h, 51h, 0BBh, 40h, 5, 0B1h, 8 | |
| F000:6000 db 80h, 3Fh, 20h, 75h, 0Dh, 43h, 0FEh, 0C9h, 75h, 0F6h | |
| F000:6000 db 0BEh, 5Ch, 5, 0BFh, 48h, 5, 0EBh, 10h, 0BEh, 54h, 5 | |
| F000:6000 db 0BFh, 40h, 5, 0B1h, 8, 0FCh, 0A6h, 75h, 27h, 0FEh, 0C9h | |
| F000:6000 db 75h, 0F9h, 8Ah, 5, 3Ah, 4, 74h, 9, 0Ah, 0C0h, 75h, 19h | |
| F000:6000 db 0F6h, 4, 1, 75h, 14h, 8Ah, 4, 8Bh, 1Eh, 0E9h, 4, 88h | |
| F000:6000 db 87h, 31h, 0, 0BBh, 0F4h, 59h, 0E8h, 0Eh, 0, 32h, 0C0h | |
| F000:6000 db 0EBh, 7, 0BBh, 0FEh, 59h, 0E8h, 4, 0, 0F9h, 59h, 5Bh | |
| F000:6000 db 0C3h, 53h, 8Bh, 1Eh, 2Eh, 0, 43h, 0Bh, 0DBh, 74h, 2 | |
| F000:6000 db 5Bh, 0C3h, 0BBh, 53h, 5, 53h, 43h, 0B1h, 8, 8Ah, 7 | |
| F000:6000 db 0E8h, 0D5h, 0F4h, 43h, 0FEh, 0C9h, 75h, 0F6h, 0B0h | |
| F000:6000 db 2Eh, 0E8h, 0CBh, 0F4h, 5Bh, 83h, 0C3h, 9, 0B0h, 44h | |
| F000:6000 db 0F6h, 7, 0E1h, 74h, 17h, 0B0h, 50h, 0F6h, 7, 20h, 75h | |
| F000:6000 db 10h, 0B0h, 42h, 0F6h, 7, 80h, 75h, 9, 0B0h, 41h, 0F6h | |
| F000:6000 db 7, 40h, 75h, 2, 0B0h, 4Dh, 5Bh, 0E8h, 0A5h, 0F4h, 2Eh | |
| F000:6000 db 8Ah, 7, 43h, 0Ah, 0C0h, 75h, 0F5h, 0C3h, 20h, 46h, 6Fh | |
| F000:6000 db 75h, 6Eh, 64h, 2Eh, 0FFh, 0Dh, 0, 20h, 53h, 6Bh, 69h | |
| F000:6000 db 2 dup(70h), 65h, 64h, 2Eh, 0FFh, 0Dh, 0, 0B9h, 2 dup(0) | |
| F000:6000 db 88h, 0Eh, 52h, 5, 0B0h, 0EAh, 0E8h, 0BDh, 0FEh, 0E9h | |
| F000:6000 db 0E3h, 0FEh, 0BBh, 52h, 5, 8Ah, 7, 0C6h, 7, 0, 0Ah, 0C0h | |
| F000:6000 db 75h, 5, 0E8h, 46h, 0F3h, 0Ah, 0C0h, 0E9h, 0E2h, 0FEh | |
| F000:6000 db 88h, 0Eh, 52h, 5, 0E9h, 0A3h, 0EBh, 0E8h, 0C8h, 0FEh | |
| F000:6000 db 8Ah, 2Eh, 29h, 0, 0B1h, 0, 0B0h, 0EDh, 0E8h, 91h, 0FEh | |
| F000:6000 db 0E9h, 0B7h, 0FEh, 58h, 50h, 86h, 0C4h, 0E8h, 44h, 0F4h | |
| F000:6000 db 8Ah, 0Eh, 57h, 0, 0FEh, 0C9h, 8Bh, 1Eh, 0E9h, 4, 88h | |
| F000:6000 db 8Fh, 32h, 0, 0E9h, 0AAh, 0FEh, 58h, 86h, 0C4h, 0E9h | |
| F000:6000 db 49h, 0F8h, 8Ah, 2Eh, 62h, 0, 0B1h, 0, 0E8h, 93h, 0FEh | |
| F000:6000 db 0B0h, 6Dh, 0E8h, 62h, 0FEh, 0E8h, 0AFh, 0FEh, 0A0h | |
| F000:6000 db 63h, 0, 88h, 7, 0E9h, 80h, 0FEh, 58h, 50h, 86h, 0C4h | |
| F000:6000 db 0E8h, 3, 0, 0E9h, 81h, 0FEh, 0E8h, 6Ah, 0F5h, 0BBh | |
| F000:6000 db 63h, 0, 3Ch, 0Dh, 75h, 3, 0E9h, 0E4h, 4, 3Ch, 20h, 73h | |
| F000:6000 db 1, 0C3h, 0FEh, 7, 53h, 0E8h, 8Dh, 0FEh, 5Bh, 0FEh, 0C0h | |
| F000:6000 db 74h, 0F4h, 0FEh, 0C8h, 38h, 7, 0E9h, 0C5h, 4, 58h, 86h | |
| F000:6000 db 0C4h, 0A2h, 62h, 0, 0C3h, 0A0h, 61h, 0, 0Ah, 0C0h, 74h | |
| F000:6000 db 3, 0E9h, 0E8h, 0ACh, 80h, 0E2h, 0FBh, 75h, 2, 0B2h | |
| F000:6000 db 1, 0A2h, 51h, 5, 0FEh, 0C0h, 0A2h, 50h, 5, 8Ah, 0CAh | |
| F000:6000 db 80h, 0E1h, 2 dup(80h), 0E9h, 1, 0F5h, 1Ah, 0C9h, 80h | |
| F000:6000 db 0E1h, 80h, 0F6h, 0C2h, 10h, 74h, 3, 80h, 0C9h, 20h | |
| F000:6000 db 0A0h, 60h, 0, 0Ah, 0C0h, 74h, 2, 0B1h, 1, 0Ah, 0C9h | |
| F000:6000 db 75h, 9, 0F6h, 6, 5Fh, 0, 0FFh, 74h, 2, 0B1h, 40h, 88h | |
| F000:6000 db 0Eh, 48h, 5, 0B5h, 0FFh, 0B0h, 68h, 0E8h, 0D2h, 0FDh | |
| F000:6000 db 8Ah, 27h, 0E8h, 2Eh, 0FEh, 0F6h, 0C4h, 1, 75h, 0Ch | |
| F000:6000 db 0F6h, 0C1h, 81h, 75h, 3, 0E8h, 2Fh, 0, 0B0h, 0FFh, 0EBh | |
| F000:6000 db 1Fh, 0E8h, 33h, 0, 0E8h, 30h, 0FEh, 72h, 0F8h, 8Bh | |
| F000:6000 db 1Eh, 0E9h, 4, 0F6h, 87h, 31h, 0, 81h, 75h, 0Ah, 0E8h | |
| F000:6000 db 11h, 1, 73h, 5, 0C6h, 6, 50h, 5, 0, 0B0h, 1, 0A2h, 61h | |
| F000:6000 db 0, 0E8h, 0E7h, 0FDh, 0C6h, 7, 1, 0E9h, 0BAh, 0FDh, 0BBh | |
| F000:6000 db 3Fh, 5, 0B9h, 11h, 0, 0B4h, 3, 0CDh, 15h, 0C3h, 0BBh | |
| F000:6000 db 53h, 5, 0B9h, 11h, 0, 53h, 0B4h, 2, 0CDh, 15h, 73h | |
| F000:6000 db 3, 0E9h, 2, 1, 5Bh, 0A0h, 5Eh, 0, 0Ah, 0C0h, 75h, 6 | |
| F000:6000 db 80h, 3Fh, 0A5h, 75h, 0E6h, 0C3h, 0E9h, 29h, 0ACh, 0A0h | |
| F000:6000 db 61h, 0, 0FEh, 0C0h, 74h, 0Bh, 32h, 0C0h, 0A2h, 61h | |
| F000:6000 db 0, 0A2h, 60h, 0, 0E9h, 0CDh, 0E5h, 8Bh, 1Eh, 0E9h, 4 | |
| F000:6000 db 0F6h, 87h, 31h, 0, 81h, 75h, 0EAh, 0E8h, 3Bh, 0, 0E8h | |
| F000:6000 db 1Fh, 1, 0EBh, 0E2h, 53h, 0BBh, 61h, 0, 38h, 27h, 75h | |
| F000:6000 db 0Dh, 8Bh, 1Eh, 0E9h, 4, 0F6h, 87h, 31h, 0, 81h, 5Bh | |
| F000:6000 db 75h, 1, 0C3h, 2 dup(0E9h), 0ABh, 0B4h, 0FFh, 0E8h, 0E3h | |
| F000:6000 db 0FFh, 58h, 50h, 86h, 0C4h, 0E8h, 3, 0, 0E9h, 4Dh, 0FDh | |
| F000:6000 db 0E8h, 26h, 0, 88h, 7, 0FEh, 0C1h, 74h, 0Bh, 0E8h, 5Dh | |
| F000:6000 db 0FDh, 88h, 0Fh, 0C3h, 0E8h, 57h, 0FDh, 8Ah, 0Fh, 0BBh | |
| F000:6000 db 53h, 5, 0B5h, 0, 0FEh, 0C9h, 41h, 88h, 0Fh, 0B4h, 3 | |
| F000:6000 db 0CDh, 15h, 0E8h, 44h, 0FDh, 0C6h, 7, 1, 0C3h, 0E8h | |
| F000:6000 db 3Dh, 0FDh, 8Ah, 0Fh, 0B5h, 0, 0BBh, 53h, 5, 3, 0D9h | |
| F000:6000 db 0C3h, 0B4h, 1, 0E8h, 9Eh, 0FFh, 0E8h, 3, 0, 0E9h, 14h | |
| F000:6000 db 0FDh, 0A0h, 50h, 5, 2Ch, 1, 73h, 1, 0C3h, 0BBh, 51h | |
| F000:6000 db 5, 8Ah, 7, 0C6h, 7, 0, 0Ah, 0C0h, 74h, 1, 0C3h, 0E8h | |
| F000:6000 db 0Ah, 0, 73h, 7, 0C6h, 6, 50h, 5, 0, 0Ah, 0C0h, 0C3h | |
| F000:6000 db 0E8h, 0C3h, 0FFh, 8Ah, 7, 0FEh, 0C1h, 0E8h, 2 dup(0FCh) | |
| F000:6000 db 88h, 0Fh, 0E8h, 0EFh, 0FCh, 3Ah, 0Fh, 74h, 3, 0Ah, 0C0h | |
| F000:6000 db 0C3h, 80h, 3Fh, 0, 75h, 0DDh, 50h, 0E8h, 2, 0, 58h | |
| F000:6000 db 0C3h, 0BBh, 53h, 5, 0B9h, 0, 1, 0B4h, 2, 0CDh, 15h | |
| F000:6000 db 72h, 15h, 0A0h, 53h, 5, 0E8h, 0CBh, 0FCh, 88h, 7, 0E8h | |
| F000:6000 db 0CEh, 0FCh, 0C6h, 7, 1, 0FEh, 0C8h, 0F9h, 74h, 1, 0F8h | |
| F000:6000 db 0C3h, 80h, 0FCh, 4, 75h, 5, 0B2h, 18h, 0E9h, 6Fh, 0ABh | |
| F000:6000 db 0E9h, 25h, 0ABh, 0A0h, 50h, 5, 2Ch, 1, 1Ah, 0C0h, 0E9h | |
| F000:6000 db 93h, 8, 88h, 0Eh, 51h, 5, 0E9h, 5Ah, 0E9h, 0C6h, 6 | |
| F000:6000 db 5Fh, 2 dup(0), 53h, 89h, 1Eh, 4Dh, 5, 8Bh, 16h, 50h | |
| F000:6000 db 3, 89h, 16h, 4Bh, 5, 8Bh, 0Eh, 4, 7, 2Bh, 0CBh, 89h | |
| F000:6000 db 0Eh, 49h, 5, 51h, 52h, 0E8h, 0A4h, 0FEh, 5Ah, 59h, 5Bh | |
| F000:6000 db 0A0h, 60h, 0, 0Ah, 0C0h, 6, 74h, 2, 8Eh, 0C2h, 0B4h | |
| F000:6000 db 3, 0CDh, 15h, 7, 0E8h, 89h, 0, 0BAh, 5, 0, 0B9h, 2 dup(0) | |
| F000:6000 db 49h, 75h, 0FDh, 4Ah, 75h, 0FAh, 0E8h, 76h, 0, 0C3h | |
| F000:6000 db 0BEh, 53h, 5, 8Bh, 8Ch, 0Ah, 0, 0A0h, 60h, 0, 0Ah, 0C0h | |
| F000:6000 db 9Ch, 51h, 75h, 0Dh, 50h, 53h, 51h, 56h, 3, 0D9h, 0E8h | |
| F000:6000 db 16h, 0E6h, 5Eh, 59h, 5Bh, 58h, 3Ch, 1, 75h, 4, 8Bh | |
| F000:6000 db 9Ch, 0Eh, 0, 6, 0Ah, 0C0h, 74h, 0Eh, 8Bh, 94h, 0Ch | |
| F000:6000 db 0, 0FEh, 0C8h, 74h, 4, 8Bh, 16h, 50h, 3, 8Eh, 0C2h | |
| F000:6000 db 0B4h, 2, 0CDh, 15h, 7, 72h, 12h, 59h, 9Dh, 75h, 0Bh | |
| F000:6000 db 8Bh, 1Eh, 30h, 0, 3, 0D9h, 43h, 89h, 1Eh, 58h, 3, 0E9h | |
| F000:6000 db 80h, 0E5h, 50h, 0E8h, 5, 0D0h, 58h, 80h, 0FCh, 4, 75h | |
| F000:6000 db 5, 0B2h, 18h, 0E9h, 0B5h, 0AAh, 0E9h, 6Bh, 0AAh, 4Bh | |
| F000:6000 db 0E8h, 0F3h, 0B1h, 75h, 5, 0A0h, 64h, 0, 0EBh, 3, 2 dup(0E8h) | |
| F000:6000 db 0C1h, 0Ah, 0C0h, 75h, 4, 0B0h, 1, 0EBh, 2, 0B0h, 0 | |
| F000:6000 db 0A2h, 64h, 0, 8Ah, 0E0h, 0CDh, 15h, 0C3h, 0CDh, 0DBh | |
| F000:6000 db 0F9h, 0EBh, 1, 0F8h, 8Bh, 0F3h, 9Ch, 8Bh, 0Eh, 0A5h | |
| F000:6000 db 4, 8Ah, 0C3h, 32h, 0C1h, 0A2h, 0A7h, 4, 8Ah, 0C7h, 32h | |
| F000:6000 db 0E4h, 8Ah, 0DDh, 32h, 0FFh, 9Dh, 73h, 7, 3, 0C3h, 2Dh | |
| F000:6000 db 2 dup(1), 0EBh, 2, 2Bh, 0C3h, 0Ah, 0E4h, 78h, 0Dh, 3Dh | |
| F000:6000 db 80h, 0, 72h, 15h, 8Bh, 0DEh, 83h, 0C4h, 2, 0E9h, 5Dh | |
| F000:6000 db 17h, 5, 80h, 0, 79h, 0Bh, 8Bh, 0DEh, 83h, 0C4h, 2, 0E9h | |
| F000:6000 db 0DFh, 1Dh, 5, 80h, 0, 0A2h, 0A6h, 4, 0BBh, 0A5h, 4 | |
| F000:6000 db 80h, 0Fh, 80h, 8Bh, 0DEh, 32h, 0FFh, 80h, 0CBh, 80h | |
| F000:6000 db 0C3h, 0C6h, 6, 39h, 3, 80h, 0E8h, 0C6h, 0D9h, 53h, 8Bh | |
| F000:6000 db 0DAh, 0E8h, 0EAh, 6, 0E8h, 4, 0C5h, 89h, 1Eh, 5Eh, 4 | |
| F000:6000 db 0B1h, 20h, 0E8h, 1Bh, 0CFh, 5Bh, 0E8h, 60h, 0B1h, 74h | |
| F000:6000 db 17h, 0E8h, 31h, 0D0h, 28h, 0E8h, 0A7h, 0D9h, 52h, 8Ah | |
| F000:6000 db 7, 3Ch, 2Ch, 75h, 5, 0E8h, 4Ch, 0B1h, 0EBh, 0F1h, 0E8h | |
| F000:6000 db 1Eh, 0D0h, 29h, 89h, 1Eh, 3Bh, 3, 0Eh, 0B8h, 0E9h, 5Dh | |
| F000:6000 db 50h, 0FFh, 36h, 50h, 3, 0FFh, 36h, 5Eh, 4, 0CBh, 8Bh | |
| F000:6000 db 1Eh, 3Bh, 3, 0C3h, 53h, 0E8h, 0Eh, 5, 3Ch, 6Ch, 74h | |
| F000:6000 db 0Ah, 3Ch, 4Ch, 74h, 6, 3Ch, 71h, 74h, 2, 3Ch, 51h, 5Bh | |
| F000:6000 db 0C3h, 19h dup(26h), 3 dup(25h), 3 dup(24h), 3 dup(23h) | |
| F000:6000 db 4 dup(22h), 3 dup(21h), 3 dup(20h), 4 dup(1Fh), 3 dup(1Eh) | |
| F000:6000 db 4 dup(1Dh), 3 dup(1Ch), 3 dup(1Bh), 3 dup(1Ah), 4 dup(19h) | |
| F000:6000 db 3 dup(18h), 4 dup(17h), 4 dup(16h), 3 dup(15h), 3 dup(14h) | |
| F000:6000 db 4 dup(13h), 3 dup(12h), 3 dup(11h), 4 dup(10h), 3 dup(0Fh) | |
| F000:6000 db 3 dup(0Eh), 4 dup(0Dh), 3 dup(0Ch), 3 dup(0Bh), 4 dup(0Ah) | |
| F000:6000 db 3 dup(9), 3 dup(8), 3 dup(7), 4 dup(6), 3 dup(5), 3 dup(4) | |
| F000:6000 db 4 dup(3), 3 dup(2), 3 dup(1), 4 dup(0), 3 dup(0FFh) | |
| F000:6000 db 3 dup(0FEh), 4 dup(0FDh), 3 dup(0FCh), 3 dup(0FBh) | |
| F000:6000 db 4 dup(0FAh), 3 dup(0F9h), 3 dup(0F8h), 4 dup(0F7h) | |
| F000:6000 db 3 dup(0F6h), 3 dup(0F5h), 4 dup(0F4h), 3 dup(0F3h) | |
| F000:6000 db 3 dup(0F2h), 4 dup(0F1h), 3 dup(0F0h), 3 dup(0EFh) | |
| F000:6000 db 4 dup(0EEh), 3 dup(0EDh), 3 dup(0ECh), 4 dup(0EBh) | |
| F000:6000 db 3 dup(0EAh), 3 dup(0E9h), 3 dup(0E8h), 4 dup(0E7h) | |
| F000:6000 db 3 dup(0E6h), 3 dup(0E5h), 4 dup(0E4h), 3 dup(0E3h) | |
| F000:6000 db 3 dup(0E2h), 4 dup(0E1h), 0E0h, 0Bh, 0F6h, 79h, 2, 0F7h | |
| F000:6000 db 0DAh, 2Bh, 0D7h, 70h, 3Dh, 74h, 3Ah, 53h, 0E8h, 90h | |
| F000:6000 db 1Ch, 9Ch, 73h, 3, 0E8h, 6Ah, 0Ch, 0Bh, 0D2h, 78h, 0Fh | |
| F000:6000 db 83h, 0FAh, 27h, 72h, 1Dh, 9Dh, 73h, 3, 0E8h, 3Dh, 0Ch | |
| F000:6000 db 5Bh, 0E9h, 0B1h, 15h, 83h, 0FAh, 0DAh, 7Dh, 0Eh, 83h | |
| F000:6000 db 0C2h, 26h, 83h, 0FAh, 0DAh, 7Ch, 11h, 0E8h, 13h, 0 | |
| F000:6000 db 0BAh, 0DAh, 0FFh, 0E8h, 0Dh, 0, 9Dh, 73h, 3, 0E8h, 1Dh | |
| F000:6000 db 0Ch, 5Bh, 0C3h, 0E8h, 1Fh, 1Ch, 0EBh, 0F3h, 0Bh, 0D2h | |
| F000:6000 db 9Ch, 79h, 2, 0F7h, 0DAh, 0B9h, 3, 0, 0D3h, 0E2h, 81h | |
| F000:6000 db 0C2h, 32h, 60h, 87h, 0DAh, 0E8h, 25h, 1Dh, 9Dh, 78h | |
| F000:6000 db 3, 0E9h, 0ECh, 0Ch, 0E8h, 0ECh, 1Ch, 0E9h, 0D4h, 8 | |
| F000:6000 db 72h, 9, 0B0h, 0Dh, 90h, 0E9h, 0Fh, 0FBh, 0C6h, 7, 0 | |
| F000:6000 db 8Ah, 7, 0E8h, 0A4h, 0F9h, 88h, 7, 0C3h, 75h, 6, 0B0h | |
| F000:6000 db 0Ah, 90h, 0E8h, 69h, 0F0h, 58h, 5Ah, 5Bh, 9Dh, 0C3h | |
| F000:6000 db 80h, 3Eh, 6Ah, 2 dup(0), 74h, 12h, 1Eh, 53h, 0C5h, 1Eh | |
| F000:6000 db 6Bh, 0, 80h, 3Fh, 0, 5Bh, 1Fh, 75h, 5, 0C6h, 6, 6Ah | |
| F000:6000 db 2 dup(0), 0E9h, 72h, 0AFh, 5Fh, 5Eh, 0E9h, 0BEh, 0EDh | |
| F000:6000 db 75h, 10h, 5Bh, 88h, 36h, 0A7h, 4, 0BBh, 0, 10h, 0C6h | |
| F000:6000 db 6, 0FBh, 2, 4, 0E9h, 28h, 15h, 0C7h, 6, 0A5h, 4, 2 dup(0) | |
| F000:6000 db 0C3h, 1Eh, 0B8h, 2 dup(0FFh), 8Eh, 0D8h, 0BBh, 0Eh | |
| F000:6000 db 0, 80h, 3Fh, 0FDh, 75h, 13h, 0B8h, 0, 0E8h, 8Eh, 0C0h | |
| F000:6000 db 0BFh, 1Ah, 0, 0BEh, 0E4h, 4Ch, 0B9h, 9, 0, 0F3h, 2Eh | |
| F000:6000 db 0A6h, 75h, 4, 1Fh, 1Eh, 7, 0C3h, 1Fh, 1Eh, 7, 0C6h | |
| F000:6000 db 6, 71h, 2 dup(0), 0E8h, 0EEh, 0F2h, 0BEh, 64h, 4Ch | |
| F000:6000 db 0FBh, 2Eh, 0ACh, 0Ah, 0C0h, 74h, 0FEh, 56h, 0B4h, 0Eh | |
| F000:6000 db 0CDh, 10h, 5Eh, 0EBh, 0F1h, 0Ch, 80h, 88h, 47h, 1, 0C6h | |
| F000:6000 db 47h, 2, 0B8h, 0C3h, 8Bh, 1Eh, 0A5h, 4, 0FEh, 0C7h, 0FEh | |
| F000:6000 db 0CFh, 75h, 5, 5Ah, 32h, 0DBh, 33h, 0D2h, 0C3h, 3Dh | |
| F000:6000 db 0Ah, 0D7h, 23h, 7Ah, 0CDh, 5 dup(0CCh), 4Ch, 7Dh, 7 dup(0) | |
| F000:6000 db 81h, 6 dup(0), 20h, 84h, 6 dup(0), 48h, 87h, 6 dup(0) | |
| F000:6000 db 7Ah, 8Ah, 5 dup(0), 40h, 1Ch, 8Eh, 5 dup(0), 50h, 43h | |
| F000:6000 db 91h, 5 dup(0), 24h, 74h, 94h, 4 dup(0), 80h, 96h, 18h | |
| F000:6000 db 98h, 4 dup(0), 20h, 0BCh, 3Eh, 9Bh, 4 dup(0), 28h, 6Bh | |
| F000:6000 db 6Eh, 9Eh, 4 dup(0), 0F9h, 2, 15h, 0A2h, 3 dup(0), 40h | |
| F000:6000 db 0B7h, 43h, 3Ah, 0A5h, 3 dup(0), 10h, 0A5h, 0D4h, 68h | |
| F000:6000 db 0A8h, 3 dup(0), 2Ah, 0E7h, 84h, 11h, 0ACh, 2 dup(0) | |
| F000:6000 db 80h, 0F4h, 20h, 0E6h, 35h, 0AFh, 2 dup(0), 0A0h, 31h | |
| F000:6000 db 0A9h, 5Fh, 63h, 0B2h, 2 dup(0), 4, 0BFh, 0C9h, 1Bh | |
| F000:6000 db 0Eh, 0B6h, 2 dup(0), 0C5h, 2Eh, 0BCh, 0A2h, 31h, 0B9h | |
| F000:6000 db 0, 40h, 76h, 3Ah, 6Bh, 0Bh, 5Eh, 0BCh, 0, 0E8h, 89h | |
| F000:6000 db 4, 23h, 0C7h, 0Ah, 0C0h, 0, 62h, 0ACh, 0C5h, 0EBh, 78h | |
| F000:6000 db 2Dh, 0C3h, 80h, 7Ah, 17h, 0B7h, 26h, 0D7h, 58h, 0C6h | |
| F000:6000 db 90h, 0ACh, 6Eh, 32h, 78h, 86h, 7, 0CAh, 0B5h, 57h, 0Ah | |
| F000:6000 db 3Fh, 16h, 68h, 29h, 0CDh, 0A2h, 0EDh, 0CCh, 0CEh, 1Bh | |
| F000:6000 db 0C2h, 53h, 0D0h, 85h, 14h, 40h, 61h, 51h, 59h, 4, 0D4h | |
| F000:6000 db 0A6h, 19h, 90h, 0B9h, 0A5h, 6Fh, 25h, 0D7h, 10h, 20h | |
| F000:6000 db 0F4h, 27h, 8Fh, 0CBh, 4Eh, 0DAh, 0Ah, 94h, 0F8h, 78h | |
| F000:6000 db 39h, 3Fh, 1, 0DEh, 0Ch, 0B9h, 36h, 0D7h, 7, 8Fh, 21h | |
| F000:6000 db 0E1h, 4Fh, 67h, 4, 0CDh, 0C9h, 0F2h, 49h, 0E4h, 23h | |
| F000:6000 db 81h, 45h, 40h, 7Ch, 6Fh, 7Ch, 0E7h, 0B6h, 70h, 2Bh | |
| F000:6000 db 0A8h, 0ADh, 0C5h, 1Dh, 0EBh, 0E4h, 4Ch, 36h, 12h, 19h | |
| F000:6000 db 37h, 45h, 0EEh, 1Ch, 0E0h, 0C3h, 56h, 0DFh, 84h, 76h | |
| F000:6000 db 0F1h, 12h, 6Ch, 3Ah, 96h, 0Bh, 13h, 1Ah, 0F5h, 16h | |
| F000:6000 db 7, 0C9h, 7Bh, 0CEh, 97h, 40h, 0F8h, 0DCh, 48h, 0BBh | |
| F000:6000 db 1Ah, 0C2h, 0BDh, 70h, 0FBh, 89h, 0Dh, 0B5h, 50h, 99h | |
| F000:6000 db 76h, 16h, 0FFh, 7 dup(0), 80h, 0F1h, 4, 35h, 80h, 4 | |
| F000:6000 db 9Ah, 0F7h, 19h, 83h, 24h, 63h, 43h, 83h, 75h, 0CDh | |
| F000:6000 db 8Dh, 84h, 0A9h, 7Fh, 83h, 82h, 4, 3 dup(0), 81h, 0E2h | |
| F000:6000 db 0B0h, 4Dh, 83h, 0Ah, 72h, 11h, 83h, 0F4h, 4, 35h, 7Fh | |
| F000:6000 db 18h, 72h, 31h, 80h, 2Eh, 65h, 45h, 25h, 23h, 21h, 44h | |
| F000:6000 db 64h, 2Ch, 30h, 0, 80h, 0C6h, 0A4h, 7Eh, 8Dh, 3, 0, 40h | |
| F000:6000 db 7Ah, 10h, 0F3h, 5Ah, 2 dup(0), 0A0h, 72h, 4Eh, 18h | |
| F000:6000 db 9, 2 dup(0), 10h, 0A5h, 0D4h, 0E8h, 3 dup(0), 0E8h | |
| F000:6000 db 76h, 48h, 17h, 3 dup(0), 0E4h, 0Bh, 54h, 2, 3 dup(0) | |
| F000:6000 db 0CAh, 9Ah, 3Bh, 4 dup(0), 0E1h, 0F5h, 5, 3 dup(0), 80h | |
| F000:6000 db 96h, 98h, 4 dup(0), 40h, 42h, 0Fh, 4 dup(0), 40h, 42h | |
| F000:6000 db 0Fh, 0A0h, 86h, 1, 10h, 27h, 0, 10h, 27h, 0E8h, 3, 64h | |
| F000:6000 db 0, 0Ah, 0, 1, 3 dup(0), 80h, 90h, 6 dup(0FFh), 7Fh | |
| F000:6000 db 9 dup(0FFh), 3Bh, 0AAh, 38h, 81h, 7, 7Ch, 88h, 59h | |
| F000:6000 db 74h, 0E0h, 97h, 26h, 77h, 0C4h, 1Dh, 1Eh, 7Ah, 5Eh | |
| F000:6000 db 50h, 63h, 7Ch, 1Ah, 0FEh, 75h, 7Eh, 18h, 72h, 31h, 80h | |
| F000:6000 db 3 dup(0), 81h, 5, 0FBh, 0D7h, 1Eh, 86h, 65h, 26h, 99h | |
| F000:6000 db 87h, 58h, 34h, 23h, 87h, 0E1h, 5Dh, 0A5h, 86h, 0DBh | |
| F000:6000 db 0Fh, 49h, 83h, 2, 0D7h, 0B3h, 5Dh, 81h, 2 dup(0), 80h | |
| F000:6000 db 81h, 4, 62h, 35h, 83h, 7Eh, 50h, 24h, 4Ch, 7Eh, 79h | |
| F000:6000 db 0A9h, 0AAh, 7Fh, 3 dup(0), 81h, 0Bh, 44h, 4Eh, 6Eh | |
| F000:6000 db 83h, 0F9h, 22h, 7Eh, 0FDh, 43h, 3, 0C3h, 9Eh, 26h, 1 | |
| F000:6000 db 2 dup(0), 30h, 31h, 32h, 33h, 34h, 35h, 36h, 37h, 38h | |
| F000:6000 db 39h, 41h, 42h, 43h, 44h, 45h, 46h, 0BAh, 3Bh, 0AAh | |
| F000:6000 db 0BBh, 38h, 81h, 0E8h, 72h, 0Ah, 0A0h, 0A6h, 4, 3Ch | |
| F000:6000 db 88h, 73h, 2 dup(3Ch), 68h, 72h, 4Bh, 0FFh, 36h, 0A3h | |
| F000:6000 db 4, 0FFh, 36h, 0A5h, 4, 0E8h, 60h, 10h, 8Ah, 0E2h, 80h | |
| F000:6000 db 0C4h, 81h, 74h, 23h, 50h, 0F6h, 6, 0A7h, 4, 80h, 0E8h | |
| F000:6000 db 43h, 10h, 32h, 0E4h, 0E8h, 0E6h, 11h, 58h, 5Bh, 5Ah | |
| F000:6000 db 50h, 0E8h, 0A8h, 4, 0BBh, 17h, 62h, 0E8h, 8Dh, 12h | |
| F000:6000 db 5Bh, 33h, 0D2h, 8Ah, 0DAh, 0E9h, 32h, 0Ah, 83h, 0C4h | |
| F000:6000 db 4, 80h, 26h, 0A5h, 4, 80h, 74h, 3, 0E9h, 91h, 18h, 32h | |
| F000:6000 db 0E4h, 88h, 26h, 0A7h, 4, 0E9h, 0F9h, 11h, 0BFh, 0A3h | |
| F000:6000 db 4, 90h, 33h, 0C0h, 0FCh, 0ABh, 0C7h, 5, 0, 81h, 0C3h | |
| F000:6000 db 0E8h, 0AFh, 18h, 75h, 3, 0E9h, 0DEh, 0A4h, 0C3h, 0FCh | |
| F000:6000 db 0ABh, 0C7h, 5, 0, 81h, 0C3h, 0E9h, 1Ah, 0ACh, 0CDh | |
| F000:6000 db 0B9h, 80h, 36h, 0A5h, 4, 2 dup(80h), 36h, 0B1h, 4, 80h | |
| F000:6000 db 0E9h, 8Ah, 3, 0CDh, 0BAh, 87h, 0D9h, 0E9h, 5Ah, 4, 0CDh | |
| F000:6000 db 0BBh, 87h, 0D9h, 0E9h, 47h, 4, 0CDh, 0BCh, 0E8h, 33h | |
| F000:6000 db 19h, 0E9h, 1Bh, 5, 87h, 0D9h, 0E9h, 0B1h, 5, 0CDh, 0BDh | |
| F000:6000 db 89h, 1Eh, 0A3h, 4, 0E9h, 6Bh, 8, 0CDh, 0BEh, 52h, 98h | |
| F000:6000 db 8Bh, 0D0h, 0E8h, 0EEh, 8, 5Ah, 0C3h, 0CDh, 0BFh, 87h | |
| F000:6000 db 0D9h, 0E9h, 0B7h, 9, 0CDh, 0C0h, 87h, 0D9h, 0E9h, 0EDh | |
| F000:6000 db 0Dh, 81h, 0FBh, 0, 80h, 75h, 13h, 0CDh, 0C1h, 0E8h | |
| F000:6000 db 0D3h, 8, 33h, 0D2h, 0BBh, 80h, 90h, 0E8h, 5, 4, 0E8h | |
| F000:6000 db 4Bh, 1Ah, 0E9h, 45h, 8, 0F7h, 0DBh, 53h, 3, 0DAh, 70h | |
| F000:6000 db 4, 58h, 0E9h, 99h, 1, 0CDh, 0C2h, 0E8h, 0B5h, 8, 5Ah | |
| F000:6000 db 0FFh, 36h, 0A3h, 4, 0FFh, 36h, 0A5h, 4, 0E8h, 0A9h | |
| F000:6000 db 8, 5Bh, 5Ah, 0E9h, 0EAh, 3, 8Bh, 0C3h, 52h, 0F7h, 0EAh | |
| F000:6000 db 5Ah, 72h, 5, 8Bh, 0D8h, 0E9h, 76h, 1, 0CDh, 0C3h, 53h | |
| F000:6000 db 0E8h, 91h, 8, 5Ah, 0FFh, 36h, 0A3h, 4, 0FFh, 36h, 0A5h | |
| F000:6000 db 4, 0E8h, 85h, 8, 5Bh, 5Ah, 0E9h, 52h, 9, 0Bh, 0DBh | |
| F000:6000 db 75h, 0Ch, 88h, 36h, 0A7h, 4, 0C6h, 6, 0FBh, 2, 4, 0E9h | |
| F000:6000 db 2Dh, 11h, 89h, 1Eh, 0A3h, 4, 0B8h, 2 dup(0), 0A3h, 0A5h | |
| F000:6000 db 4, 92h, 0Bh, 0C0h, 79h, 3, 0BAh, 2 dup(0FFh), 0Bh, 0DBh | |
| F000:6000 db 79h, 6, 0C7h, 6, 0A5h, 4, 2 dup(0FFh), 0F7h, 3Eh, 0A3h | |
| F000:6000 db 4, 8Bh, 0D8h, 0E9h, 2Ah, 1, 87h, 0D9h, 0E8h, 0D7h, 18h | |
| F000:6000 db 87h, 0D9h, 0C3h, 53h, 0E8h, 45h, 1Ah, 5Bh, 83h, 0C3h | |
| F000:6000 db 4, 0C3h, 8Bh, 16h, 0A3h, 4, 8Bh, 0Eh, 0A5h, 4, 0C3h | |
| F000:6000 db 9Ch, 53h, 0E8h, 19h, 1Ah, 5Bh, 83h, 0C3h, 4, 9Dh, 0C3h | |
| F000:6000 db 0E8h, 0ABh, 0BEh, 89h, 1Eh, 0A3h, 4, 0E9h, 67h, 0Ah | |
| F000:6000 db 0E8h, 0A1h, 0BEh, 89h, 1Eh, 0A3h, 4, 0E9h, 65h, 0Ah | |
| F000:6000 db 0CDh, 0C4h, 8Bh, 17h, 8Bh, 9Fh, 2, 0, 0E9h, 4Dh, 3 | |
| F000:6000 db 5Eh, 0FFh, 36h, 0A3h, 4, 0FFh, 36h, 0A5h, 4, 0FFh, 0E6h | |
| F000:6000 db 0CDh, 0C5h, 87h, 0D9h, 0E8h, 0A0h, 18h, 87h, 0D9h, 0C3h | |
| F000:6000 db 0E8h, 64h, 17h, 74h, 3, 0E9h, 93h, 0A3h, 0C3h, 87h | |
| F000:6000 db 0DAh, 0E8h, 0CDh, 0, 32h, 0C0h, 0B5h, 98h, 0CDh, 0C6h | |
| F000:6000 db 0BBh, 0A6h, 4, 8Ah, 0C8h, 88h, 2Fh, 0B5h, 0, 43h, 88h | |
| F000:6000 db 2Fh, 2 dup(0D0h), 0CDh, 0C7h, 73h, 3, 0E8h, 20h, 1 | |
| F000:6000 db 8Ah, 0E5h, 8Ah, 0D9h, 0E9h, 33h, 10h, 0E8h, 92h, 0FEh | |
| F000:6000 db 53h, 33h, 0DBh, 89h, 1Eh, 0A3h, 4, 0B7h, 81h, 89h, 1Eh | |
| F000:6000 db 0A5h, 4, 0C6h, 6, 0FBh, 2, 4, 0E8h, 4, 14h, 5Bh, 0C6h | |
| F000:6000 db 6, 0FBh, 2, 4, 0C3h, 8Bh, 0C1h, 0F7h, 0E2h, 92h, 73h | |
| F000:6000 db 3, 0E9h, 25h, 0D5h, 0C3h, 0BBh, 0ABh, 4, 0BAh, 0B7h | |
| F000:6000 db 64h, 0E9h, 6, 0, 0BBh, 0ABh, 4, 0BAh, 0B9h, 64h, 52h | |
| F000:6000 db 0BAh, 0A3h, 4, 0E8h, 0F7h, 16h, 72h, 3, 0BAh, 9Fh, 4 | |
| F000:6000 db 0C3h, 8Ah, 0CDh, 32h, 0EDh, 0EBh, 8, 87h, 0DAh, 0A0h | |
| F000:6000 db 0FBh, 2, 98h, 8Bh, 0C8h, 0FCh, 8Bh, 0F2h, 8Bh, 0FBh | |
| F000:6000 db 0F3h, 0A4h, 8Bh, 0D6h, 8Bh, 0DFh, 0C3h, 0E8h, 36h, 0C8h | |
| F000:6000 db 8Bh, 0F1h, 8Bh, 0FBh, 0FDh, 2Bh, 0CAh, 41h, 0F3h, 0A4h | |
| F000:6000 db 8Bh, 0DAh, 8Bh, 0CFh, 41h, 0FCh, 0C3h, 9Ch, 49h, 9Dh | |
| F000:6000 db 0C3h, 0E8h, 0BCh, 16h, 75h, 3, 0E9h, 0EBh, 0A2h, 0CDh | |
| F000:6000 db 0C8h, 78h, 3, 0E9h, 83h, 16h, 0A1h, 0A3h, 4, 0Bh, 0C0h | |
| F000:6000 db 74h, 6, 0B0h, 1, 79h, 2, 0B0h, 0FFh, 0C3h, 33h, 0C0h | |
| F000:6000 db 0Bh, 0DBh, 75h, 0F3h, 0C3h, 5Bh, 0C3h, 98h, 8Bh, 0D8h | |
| F000:6000 db 0C6h, 6, 0FBh, 2 dup(2), 89h, 1Eh, 0A3h, 4, 0C3h, 0C6h | |
| F000:6000 db 6, 0FBh, 2, 4, 0C3h, 0E8h, 0C4h, 0FFh, 0E9h, 0E7h, 0FFh | |
| F000:6000 db 0CDh, 0C9h, 5Bh, 5Ah, 0E9h, 0B5h, 3, 0E8h, 25h, 6, 5Bh | |
| F000:6000 db 5Ah, 0E9h, 0Bh, 0Ch, 0B9h, 4, 0, 0E9h, 88h, 0FFh, 9Ch | |
| F000:6000 db 8Ah, 17h, 43h, 9Dh, 9Ch, 8Ah, 37h, 43h, 8Bh, 0Fh, 43h | |
| F000:6000 db 9Dh, 9Ch, 43h, 9Dh, 0C3h, 53h, 0BBh, 28h, 7, 0E8h, 6 | |
| F000:6000 db 16h, 5Bh, 0B9h, 0B6h, 26h, 51h, 0E8h, 0B5h, 0FFh, 32h | |
| F000:6000 db 0C0h, 0CDh, 0CAh, 0A2h, 31h, 3, 0BBh, 0B4h, 4, 0C6h | |
| F000:6000 db 7, 20h, 0Ah, 7, 43h, 0C6h, 7, 30h, 0E9h, 6Ah, 0Bh, 0CDh | |
| F000:6000 db 0CBh, 0A0h, 0A5h, 4, 0EBh, 9, 0CDh, 0CCh, 0E8h, 0E5h | |
| F000:6000 db 17h, 74h, 8, 0F6h, 2 dup(0D0h), 0E0h, 1Ah, 0C0h, 74h | |
| F000:6000 db 3Dh, 0C3h, 2 dup(0CDh), 80h, 36h, 0A7h, 4, 80h, 33h | |
| F000:6000 db 0DBh, 0F6h, 0DDh, 8Bh, 0C3h, 1Bh, 0C2h, 8Bh, 0D0h, 8Ah | |
| F000:6000 db 0C3h, 1Ah, 0C1h, 8Ah, 0C8h, 0C3h, 0E8h, 3, 16h, 78h | |
| F000:6000 db 0FAh, 0CDh, 0CEh, 0E8h, 0CFh, 15h, 78h, 3, 0E9h, 0D5h | |
| F000:6000 db 18h, 0E8h, 2, 18h, 0E8h, 0CFh, 18h, 0E9h, 0FCh, 17h | |
| F000:6000 db 8Bh, 0C3h, 2Bh, 0C2h, 74h, 0Eh, 70h, 7, 78h, 7, 32h | |
| F000:6000 db 0C0h, 0FEh, 0C0h, 0C3h, 78h, 2 dup(0F9h), 1Ah, 0C0h | |
| F000:6000 db 0C3h, 3Bh, 0DAh, 75h, 5, 33h, 0DBh, 0E9h, 26h, 0, 8Bh | |
| F000:6000 db 0C2h, 89h, 1Eh, 0A3h, 4, 0Bh, 0DBh, 0E8h, 0D3h, 0F9h | |
| F000:6000 db 3 dup(90h), 79h, 6, 0C7h, 6, 0A5h, 4, 2 dup(0FFh), 0Bh | |
| F000:6000 db 0C0h, 0BAh, 2 dup(0), 79h, 3, 0BAh, 2 dup(0FFh), 0F7h | |
| F000:6000 db 3Eh, 0A3h, 4, 8Bh, 0DAh, 89h, 1Eh, 0A3h, 4, 0C3h, 0ADh | |
| F000:6000 db 3Ah, 0E1h, 74h, 11h, 46h, 2, 4, 0FEh, 0C0h, 98h, 3 | |
| F000:6000 db 0F0h, 3Bh, 0F5h, 75h, 0EFh, 8Bh, 0D6h, 0E9h, 39h, 0D2h | |
| F000:6000 db 3Ah, 6, 0FBh, 2, 75h, 0E9h, 3Ah, 2Ch, 75h, 0E5h, 46h | |
| F000:6000 db 8Ah, 0D0h, 0ACh, 3Ah, 6, 8Eh, 0, 74h, 4, 2, 0C2h, 0EBh | |
| F000:6000 db 0DCh, 0Ah, 0C0h, 74h, 10h, 98h, 91h, 0BFh, 8Fh, 0, 0F3h | |
| F000:6000 db 0A6h, 91h, 74h, 6, 3, 0F0h, 8Ah, 0C2h, 0EBh, 0C8h, 8Bh | |
| F000:6000 db 0D6h, 5Bh, 0C3h, 8Bh, 0F3h, 8Bh, 2Eh, 4Bh, 4, 0FCh | |
| F000:6000 db 0EBh, 0BEh, 8Bh, 0F3h, 8Bh, 2Eh, 5Ch, 3, 0FCh, 0E9h | |
| F000:6000 db 0Dh, 0, 0ADh, 3Ah, 0E1h, 74h, 11h, 46h, 0ACh, 98h, 3 | |
| F000:6000 db 0F0h, 0ADh, 3, 0F0h, 3Bh, 0EEh, 75h, 0EFh, 8Bh, 0DEh | |
| F000:6000 db 0E9h, 53h, 0D3h, 3Ah, 6, 0FBh, 2, 75h, 0E9h, 3Ah, 2Ch | |
| F000:6000 db 75h, 0E5h, 46h, 0ACh, 3Ah, 6, 8Eh, 0, 75h, 0DFh, 0Ah | |
| F000:6000 db 0C0h, 74h, 0Eh, 98h, 91h, 0BFh, 8Fh, 0, 0F3h, 0A6h | |
| F000:6000 db 91h, 74h, 4, 3, 0F0h, 0EBh, 0D0h, 0ADh, 8Bh, 0D0h, 8Bh | |
| F000:6000 db 0DEh, 0E9h, 5, 0D3h, 0E8h, 18h, 16h, 0C3h, 0A1h, 0A5h | |
| F000:6000 db 4, 0Ah, 0E4h, 74h, 0F5h, 80h, 36h, 0A5h, 4, 80h, 0CDh | |
| F000:6000 db 0D7h, 0B0h, 0, 0A2h, 9Eh, 4, 0A2h, 0AAh, 4, 0A0h, 0B2h | |
| F000:6000 db 4, 0Ah, 0C0h, 74h, 0E2h, 0A1h, 0A5h, 4, 0Ah, 0E4h, 74h | |
| F000:6000 db 0D8h, 8Bh, 1Eh, 0B1h, 4, 80h, 0Eh, 0A5h, 4, 2 dup(80h) | |
| F000:6000 db 0Eh, 0B1h, 4, 80h, 8Ah, 0CCh, 2Ah, 0CFh, 0A2h, 0A7h | |
| F000:6000 db 4, 74h, 22h, 73h, 12h, 86h, 0C3h, 0F6h, 0D9h, 0A2h | |
| F000:6000 db 0A7h, 4, 88h, 3Eh, 0A6h, 4, 50h, 51h, 0E8h, 6Fh, 15h | |
| F000:6000 db 59h, 58h, 80h, 0F9h, 39h, 73h, 5Fh, 53h, 0F8h, 0E8h | |
| F000:6000 db 21h, 15h, 0A0h, 0A7h, 4, 5Bh, 32h, 0C3h, 0BBh, 9Eh | |
| F000:6000 db 4, 0BEh, 0AAh, 4, 0B9h, 4, 0, 0F8h, 0FCh, 78h, 1Eh | |
| F000:6000 db 0ADh, 11h, 7, 2 dup(43h), 0E2h, 0F9h, 73h, 12h, 0BBh | |
| F000:6000 db 0A6h, 4, 0FEh, 7, 74h, 34h, 2 dup(4Bh), 0B9h, 4, 0 | |
| F000:6000 db 0D1h, 1Fh, 2 dup(4Bh), 0E2h, 0FAh, 2 dup(0E9h), 11h | |
| F000:6000 db 0ADh, 19h, 7, 2 dup(43h), 0E2h, 0F9h, 73h, 1Ah, 0F6h | |
| F000:6000 db 97h, 1, 0, 0B9h, 4, 0, 2 dup(4Bh), 0F7h, 17h, 0E2h | |
| F000:6000 db 0FAh, 0B9h, 4, 0, 0FFh, 7, 75h, 6, 2 dup(43h), 0E2h | |
| F000:6000 db 0F8h, 74h, 0C8h, 0E9h, 0F4h, 0Ch, 0E9h, 8Dh, 0Dh, 0A0h | |
| F000:6000 db 0A7h, 4, 24h, 2 dup(80h), 26h, 0A5h, 4, 7Fh, 8, 6, 0A5h | |
| F000:6000 db 4, 0C3h, 89h, 1Eh, 0A5h, 4, 89h, 16h, 0A3h, 4, 0C3h | |
| F000:6000 db 0A1h, 0A5h, 4, 0Ah, 0E4h, 74h, 0F0h, 80h, 36h, 0A5h | |
| F000:6000 db 4, 80h, 0Ah, 0FFh, 74h, 0EFh, 0A1h, 0A5h, 4, 0Ah, 0E4h | |
| F000:6000 db 74h, 0E0h, 33h, 0C9h, 8Bh, 36h, 0A3h, 4, 0A2h, 0A7h | |
| F000:6000 db 4, 8Ah, 0CCh, 2Ah, 0CFh, 73h, 0Dh, 0F6h, 0D9h, 86h | |
| F000:6000 db 0DFh, 89h, 1Eh, 0A6h, 4, 86h, 0DFh, 93h, 87h, 0D6h | |
| F000:6000 db 8Ah, 0E0h, 32h, 0E3h, 9Ch, 0B4h, 80h, 0Ah, 0C4h, 0Ah | |
| F000:6000 db 0DCh, 32h, 0E4h, 8Ah, 0FCh, 0Bh, 0C9h, 74h, 46h, 83h | |
| F000:6000 db 0F9h, 19h, 72h, 12h, 9Dh, 89h, 36h, 0A3h, 4, 8Ah, 26h | |
| F000:6000 db 0A7h, 4, 25h, 7Fh, 80h, 0Ah, 0C4h, 0A2h, 0A5h, 4, 0C3h | |
| F000:6000 db 80h, 0F9h, 8, 72h, 1Ch, 0E9h, 5, 3, 90h, 8Ah, 0F3h | |
| F000:6000 db 32h, 0DBh, 80h, 0E9h, 8, 0F6h, 0C4h, 1Fh, 74h, 0D0h | |
| F000:6000 db 80h, 0CCh, 20h, 0EBh, 0CBh, 80h, 0CCh, 20h, 0E2h, 3 | |
| F000:6000 db 0EBh, 0Eh, 0F8h, 0D0h, 0DBh, 0D1h, 0DAh, 0D0h, 0DCh | |
| F000:6000 db 0F6h, 0C4h, 10h, 75h, 0EDh, 0E2h, 0F3h, 9Dh, 79h, 25h | |
| F000:6000 db 2Ah, 0CCh, 8Ah, 0E1h, 1Bh, 0F2h, 8Bh, 0D6h, 1Ah, 0C3h | |
| F000:6000 db 8Ah, 0D8h, 73h, 2Fh, 0F6h, 16h, 0A7h, 4, 0F6h, 0D4h | |
| F000:6000 db 0F7h, 0D2h, 0F6h, 0D3h, 0FEh, 0C4h, 75h, 21h, 42h, 75h | |
| F000:6000 db 1Eh, 0FEh, 0C3h, 75h, 1Ah, 0EBh, 6, 3, 0D6h, 12h, 0D8h | |
| F000:6000 db 73h, 0Ch, 0FEh, 6, 0A6h, 4, 74h, 9, 0D0h, 0DBh, 0D1h | |
| F000:6000 db 0DAh, 0D0h, 0DCh, 0E9h, 24h, 11h, 0E9h, 0A9h, 0Ch, 0E9h | |
| F000:6000 db 68h, 0Ch, 0E8h, 25h, 13h, 0C3h, 0A0h, 0B1h, 4, 0A2h | |
| F000:6000 db 0A7h, 4, 0E9h, 0A7h, 0Ch, 0F6h, 6, 0A6h, 4, 0FFh, 74h | |
| F000:6000 db 0F0h, 0F6h, 6, 0B2h, 4, 0FFh, 74h, 0E5h, 8Bh, 1Eh, 0B1h | |
| F000:6000 db 4, 0E8h, 0F3h, 0F4h, 89h, 1Eh, 0B1h, 4, 0BBh, 0A4h | |
| F000:6000 db 4, 0F8h, 0E8h, 0A1h, 13h, 0BBh, 0B0h, 4, 0F8h, 0E8h | |
| F000:6000 db 9Ah, 13h, 0FFh, 36h, 0A6h, 4, 0E8h, 5Eh, 15h, 8Fh, 6 | |
| F000:6000 db 0A6h, 4, 0B9h, 40h, 0, 51h, 0EBh, 8, 51h, 0F8h, 0BBh | |
| F000:6000 db 0AAh, 4, 0E8h, 77h, 13h, 8Bh, 0FCh, 83h, 0ECh, 8, 83h | |
| F000:6000 db 0EFh, 2, 0BEh, 0B0h, 4, 0B9h, 4, 0, 0FDh, 0F3h, 0A5h | |
| F000:6000 db 0BEh, 78h, 4, 0B9h, 4, 0, 0BBh, 0AAh, 4, 0F8h, 0FCh | |
| F000:6000 db 0ADh, 19h, 7, 2 dup(43h), 0E2h, 0F9h, 73h, 10h, 0B9h | |
| F000:6000 db 4, 0, 8Bh, 0F4h, 0BFh, 0AAh, 4, 0FCh, 0F3h, 0A5h, 8Bh | |
| F000:6000 db 0E6h, 0F8h, 0EBh, 4, 83h, 0C4h, 8, 0F9h, 0BBh, 9Eh | |
| F000:6000 db 4, 0E8h, 38h, 13h, 59h, 0E2h, 0B6h, 0F6h, 6, 0A5h, 4 | |
| F000:6000 db 80h, 74h, 9, 0FFh, 6, 0A6h, 4, 75h, 9, 0E9h, 7, 0Ch | |
| F000:6000 db 0BBh, 9Eh, 4, 0E8h, 1Fh, 13h, 0E9h, 31h, 10h, 0E8h | |
| F000:6000 db 94h, 12h, 75h, 7, 88h, 1Eh, 0A7h, 4, 0E9h, 0, 0Ch, 0Ah | |
| F000:6000 db 0FFh, 75h, 3, 0E9h, 7Ah, 12h, 0E8h, 57h, 0F4h, 8Bh | |
| F000:6000 db 0FAh, 33h, 0D2h, 8Ah, 0FEh, 8Bh, 0F3h, 8Ah, 0DFh, 0B9h | |
| F000:6000 db 20h, 0, 55h, 8Bh, 2Eh, 0A3h, 4, 0A0h, 0A5h, 4, 8Ah | |
| F000:6000 db 0E7h, 0EBh, 5, 0F8h, 0D1h, 0D7h, 0D1h, 0D6h, 56h, 57h | |
| F000:6000 db 2Bh, 0FDh, 1Bh, 0F0h, 73h, 4, 5Fh, 5Eh, 0EBh, 4, 83h | |
| F000:6000 db 0C4h, 4, 0F8h, 0F5h, 0D1h, 0D2h, 0D1h, 0D3h, 0E2h, 0E4h | |
| F000:6000 db 0Bh, 0DBh, 79h, 0Ah, 0FEh, 6, 0A6h, 4, 75h, 8, 5Dh | |
| F000:6000 db 0E9h, 0A5h, 0Bh, 0D1h, 0D2h, 0D1h, 0D3h, 8Ah, 0E2h | |
| F000:6000 db 8Ah, 0D6h, 8Ah, 0F3h, 8Ah, 0DFh, 5Dh, 0E9h, 0Dh, 10h | |
| F000:6000 db 13h, 0F9h, 53h, 57h, 51h, 2Ch, 30h, 50h, 0E8h, 50h | |
| F000:6000 db 12h, 58h, 98h, 79h, 1Eh, 8Bh, 1Eh, 0A3h, 4, 81h, 0FBh | |
| F000:6000 db 0CDh, 0Ch, 73h, 19h, 8Bh, 0CBh, 0D1h, 0E3h, 0D1h, 0E3h | |
| F000:6000 db 3, 0D9h, 0D1h, 0E3h, 3, 0D8h, 78h, 0Bh, 89h, 1Eh, 0A3h | |
| F000:6000 db 4, 0EBh, 48h, 50h, 72h, 8, 0EBh, 33h, 50h, 0E8h, 24h | |
| F000:6000 db 2, 0EBh, 14h, 0C7h, 6, 7Ch, 4, 0, 24h, 0C7h, 6, 7Eh | |
| F000:6000 db 4, 74h, 94h, 0BBh, 7Eh, 4, 0E8h, 83h, 13h, 79h, 16h | |
| F000:6000 db 0E8h, 3Ch, 12h, 5Ah, 0FFh, 36h, 0A3h, 4, 0FFh, 36h | |
| F000:6000 db 0A5h, 4, 0E8h, 8Bh, 2, 5Bh, 5Ah, 0E8h, 0CCh, 0FDh, 0EBh | |
| F000:6000 db 13h, 0E8h, 0E7h, 1, 0E8h, 23h, 12h, 0E8h, 0EEh, 12h | |
| F000:6000 db 5Ah, 0E8h, 77h, 2, 0E8h, 0DAh, 1, 0E8h, 0EEh, 0FCh | |
| F000:6000 db 59h, 5Fh, 5Bh, 0C3h, 0CDh, 0D9h, 32h, 0C0h, 0E9h, 9 | |
| F000:6000 db 0, 0CDh, 0DAh, 0B0h, 1, 0C6h, 6, 0FBh, 2, 8, 0C6h, 6 | |
| F000:6000 db 0A8h, 4, 1, 0BEh, 0B4h, 25h, 56h, 33h, 0FFh, 8Bh, 0CFh | |
| F000:6000 db 8Bh, 2 dup(0F7h), 0D1h, 50h, 0E8h, 86h, 11h, 58h, 0Ah | |
| F000:6000 db 0C0h, 75h, 5, 0C6h, 6, 0FBh, 2 dup(2), 8Ah, 7, 3Ch | |
| F000:6000 db 26h, 75h, 3, 0E9h, 7, 0B0h, 3Ch, 2Dh, 9Ch, 74h, 5, 3Ch | |
| F000:6000 db 2Bh, 74h, 1, 4Bh, 0E8h, 0FBh, 0F8h, 73h, 6, 0E8h, 3Dh | |
| F000:6000 db 0FFh, 0E9h, 0F5h, 0FFh, 0BDh, 0A3h, 61h, 33h, 0D2h | |
| F000:6000 db 8Bh, 0F2h, 2Eh, 3Ah, 86h, 2 dup(0), 74h, 0Ah, 81h, 0FDh | |
| F000:6000 db 9Ch, 61h, 74h, 24h, 4Dh, 0E9h, 0EFh, 0FFh, 81h, 0EDh | |
| F000:6000 db 9Ch, 61h, 0D1h, 0E5h, 2Eh, 0FFh, 0A6h, 30h, 6Ah, 4Bh | |
| F000:6000 db 6Ah, 5Fh, 6Ah, 5Fh, 6Ah, 67h, 6Ah, 6Dh, 6Ah, 73h, 6Ah | |
| F000:6000 db 40h, 6Ah, 40h, 6Ah, 32h, 0C0h, 0E8h, 9Ch, 0, 0E8h, 41h | |
| F000:6000 db 0, 0E9h, 2Dh, 0, 41h, 75h, 0F7h, 0E8h, 51h, 11h, 79h | |
| F000:6000 db 0AFh, 51h, 53h, 57h, 0E8h, 48h, 1, 5Fh, 5Bh, 59h, 0E9h | |
| F000:6000 db 0A3h, 0FFh, 0E8h, 8Ch, 0F3h, 74h, 0E1h, 0E9h, 0DBh | |
| F000:6000 db 0FFh, 43h, 0EBh, 0DBh, 0E9h, 0Bh, 0, 0E8h, 0BCh, 0 | |
| F000:6000 db 0E9h, 5, 0, 32h, 0C0h, 0E8h, 0B6h, 0, 9Dh, 75h, 0Dh | |
| F000:6000 db 0E8h, 2Dh, 13h, 0E8h, 21h, 11h, 7Ah, 5, 53h, 0E8h, 0EDh | |
| F000:6000 db 12h, 5Bh, 0C3h, 0E9h, 76h, 0F4h, 0C6h, 6, 55h, 4, 0FFh | |
| F000:6000 db 0E8h, 89h, 0A4h, 8Bh, 0D4h, 0E9h, 0E3h, 8, 0Ah, 0FFh | |
| F000:6000 db 75h, 5, 2 dup(0E8h), 10h, 0F9h, 0C3h, 0A0h, 0A6h, 4 | |
| F000:6000 db 0Ah, 0C0h, 75h, 8, 8Ah, 0C3h, 0F6h, 0D0h, 0E8h, 0E4h | |
| F000:6000 db 10h, 0F9h, 0C3h, 0E8h, 0E4h, 0FFh, 5Dh, 72h, 14h, 0EBh | |
| F000:6000 db 10h, 53h, 8Bh, 1Fh, 0E8h, 0D9h, 0FFh, 5Bh, 5Dh, 72h | |
| F000:6000 db 8, 53h, 57h, 0BFh, 0A5h, 4, 90h, 55h, 0C3h, 0FEh, 0C0h | |
| F000:6000 db 2Ch, 1, 0C3h, 0F6h, 0C4h, 0FFh, 8Ah, 0E2h, 74h, 3, 80h | |
| F000:6000 db 0CCh, 20h, 8Ah, 0D6h, 0E9h, 0EDh, 0FCh, 10h, 9Fh, 80h | |
| F000:6000 db 3Eh, 0FBh, 2, 8, 75h, 4, 9Eh, 0E9h, 8, 0, 9Eh, 53h | |
| F000:6000 db 57h, 0E8h, 5Ch, 0, 5Fh, 5Bh, 33h, 0F6h, 8Bh, 0D6h, 0E8h | |
| F000:6000 db 4, 0F8h, 72h, 13h, 3Ch, 2Dh, 75h, 4, 0F7h, 0D6h, 0EBh | |
| F000:6000 db 5, 3Ch, 2Bh, 74h, 1, 0C3h, 0E8h, 0F2h, 0F7h, 72h, 1 | |
| F000:6000 db 0C3h, 81h, 0FAh, 0CCh, 0Ch, 72h, 5, 0BAh, 0FFh, 7Fh | |
| F000:6000 db 0EBh, 0EFh, 50h, 0B8h, 0Ah, 0, 0F7h, 0E2h, 5Ah, 80h | |
| F000:6000 db 0EAh, 30h, 32h, 0F6h, 3, 0D0h, 0EBh, 0DFh, 0Ch, 1, 53h | |
| F000:6000 db 57h, 75h, 7, 0E8h, 1Ch, 0, 0EBh, 5, 2 dup(90h), 0E8h | |
| F000:6000 db 46h, 0, 5Fh, 5Bh, 33h, 0F6h, 8Bh, 0D6h, 0E8h, 0BDh | |
| F000:6000 db 0F3h, 43h, 0C3h, 0E8h, 58h, 10h, 78h, 0F9h, 0E9h, 6Fh | |
| F000:6000 db 9Ch, 74h, 31h, 0E8h, 4Eh, 10h, 7Bh, 56h, 75h, 3, 0E9h | |
| F000:6000 db 7Bh, 9Ch, 0CDh, 0CFh, 79h, 5, 0E8h, 3Fh, 0, 0EBh, 48h | |
| F000:6000 db 0B0h, 4, 0A2h, 0FBh, 2, 8Ah, 1Eh, 0A5h, 4, 88h, 1Eh | |
| F000:6000 db 0A7h, 4, 8Bh, 16h, 0A3h, 4, 8Ah, 26h, 0A2h, 4, 80h | |
| F000:6000 db 0CCh, 40h, 80h, 0CBh, 80h, 0E9h, 0D5h, 0Dh, 0E8h, 1Dh | |
| F000:6000 db 10h, 73h, 25h, 75h, 3, 0E9h, 4Ah, 9Ch, 0CDh, 0D0h, 79h | |
| F000:6000 db 3, 0E8h, 0Eh, 0, 0B0h, 8, 0A2h, 0FBh, 2, 33h, 0C0h | |
| F000:6000 db 0A3h, 9Fh, 4, 0A3h, 0A1h, 4, 0C3h, 52h, 56h, 8Bh, 16h | |
| F000:6000 db 0A3h, 4, 0E8h, 83h, 0, 5Eh, 5Ah, 0C3h, 0E8h, 0F2h, 0Fh | |
| F000:6000 db 79h, 5, 8Bh, 1Eh, 0A3h, 4, 0C3h, 0CDh, 0D1h, 75h, 3 | |
| F000:6000 db 0E9h, 18h, 9Ch, 0A0h, 0A6h, 4, 3Ch, 90h, 72h, 31h, 74h | |
| F000:6000 db 3, 0E9h, 6, 9Ch, 0A0h, 0A5h, 4, 0Ah, 0C0h, 78h, 3, 0E9h | |
| F000:6000 db 0FCh, 9Bh, 0BAh, 2 dup(0), 0BBh, 0, 80h, 0E8h, 8Ah | |
| F000:6000 db 0FBh, 0E8h, 0CBh, 6, 0E8h, 0CDh, 11h, 0BAh, 2 dup(0) | |
| F000:6000 db 0BBh, 80h, 90h, 0E8h, 0ECh, 10h, 74h, 3, 0E9h, 0DFh | |
| F000:6000 db 9Bh, 0BBh, 0, 80h, 0EBh, 2Dh, 0A0h, 0A5h, 4, 0Ah, 0C0h | |
| F000:6000 db 9Ch, 79h, 5, 24h, 7Fh, 0A2h, 0A5h, 4, 0BAh, 2 dup(0) | |
| F000:6000 db 0BBh, 0, 80h, 0E8h, 67h, 0FBh, 0A0h, 0A6h, 4, 3Ch, 90h | |
| F000:6000 db 75h, 6, 9Dh, 78h, 0DBh, 0E9h, 0B7h, 9Bh, 0E8h, 0E7h | |
| F000:6000 db 6, 8Bh, 0DAh, 9Dh, 79h, 2, 0F7h, 0DBh, 89h, 1Eh, 0A3h | |
| F000:6000 db 4, 0C6h, 6, 0FBh, 2 dup(2), 0C3h, 33h, 0DBh, 32h, 0E4h | |
| F000:6000 db 0BEh, 0A7h, 4, 0C6h, 84h, 2 dup(0FFh), 90h, 0C6h, 4 | |
| F000:6000 db 0, 0Bh, 0D2h, 79h, 5, 0F7h, 0DAh, 0C6h, 4, 80h, 8Ah | |
| F000:6000 db 0DEh, 8Ah, 0F2h, 8Ah, 0D7h, 0C6h, 6, 0FBh, 2, 4, 0E9h | |
| F000:6000 db 4Bh, 8, 0CDh, 0D6h, 0A0h, 0A6h, 4, 0Ah, 0C0h, 74h, 0Ah | |
| F000:6000 db 0A0h, 0B2h, 4, 0Ah, 0C0h, 75h, 4, 0E9h, 0F8h, 0Eh, 0C3h | |
| F000:6000 db 8Bh, 1Eh, 0B1h, 4, 0E8h, 0DAh, 0F0h, 0FFh, 36h, 0A6h | |
| F000:6000 db 4, 89h, 1Eh, 0B1h, 4, 0E8h, 56h, 11h, 8Bh, 0F0h, 0A3h | |
| F000:6000 db 0A6h, 4, 0BBh, 78h, 4, 0A3h, 0B2h, 4, 0BDh, 0ABh, 4 | |
| F000:6000 db 8Bh, 0, 0Bh, 0C0h, 74h, 2Ch, 0BFh, 2 dup(0), 8Bh, 0CFh | |
| F000:6000 db 8Bh, 0, 0F7h, 23h, 53h, 8Bh, 0DEh, 3, 0DFh, 81h, 0C3h | |
| F000:6000 db 97h, 4, 3, 7, 73h, 1, 42h, 3, 0C1h, 73h, 1, 42h, 89h | |
| F000:6000 db 7, 8Bh, 0CAh, 5Bh, 83h, 0FFh, 6, 74h, 4, 2 dup(47h) | |
| F000:6000 db 0EBh, 0DBh, 8Bh, 0C1h, 53h, 0BBh, 9Fh, 4, 89h, 0, 5Bh | |
| F000:6000 db 83h, 0FEh, 6, 74h, 4, 2 dup(46h), 0EBh, 2 dup(0BEh) | |
| F000:6000 db 9Dh, 4, 0FDh, 0B9h, 7, 0, 0ACh, 0Ah, 0C0h, 0E1h, 0FBh | |
| F000:6000 db 74h, 5, 80h, 0Eh, 9Eh, 4, 20h, 0A0h, 0A5h, 4, 0Ah, 0C0h | |
| F000:6000 db 8Fh, 6, 0A6h, 4, 78h, 0Fh, 0BBh, 9Eh, 4, 0B9h, 4, 0 | |
| F000:6000 db 0D1h, 17h, 2 dup(43h), 0E2h, 0FAh, 0E9h, 19h, 0Ch, 0FEh | |
| F000:6000 db 6, 0A6h, 4, 75h, 0F7h, 0E9h, 0DDh, 7, 0E8h, 73h, 0Eh | |
| F000:6000 db 74h, 4, 0Ah, 0FFh, 75h, 3, 0E9h, 60h, 0Eh, 0E8h, 3Ah | |
| F000:6000 db 0F0h, 8Bh, 0Eh, 0A5h, 4, 32h, 0EDh, 0A1h, 0A3h, 4, 8Ah | |
| F000:6000 db 0FDh, 53h, 51h, 52h, 51h, 50h, 0F7h, 0E2h, 8Bh, 0CAh | |
| F000:6000 db 58h, 0F7h, 0E3h, 3, 0C8h, 73h, 1, 42h, 8Bh, 0DAh, 5Ah | |
| F000:6000 db 58h, 0F7h, 0E2h, 3, 0C8h, 73h, 1, 42h, 3, 0DAh, 5Ah | |
| F000:6000 db 58h, 0F6h, 0E2h, 3, 0D8h, 73h, 0Dh, 0D1h, 0DBh, 0D1h | |
| F000:6000 db 0D9h, 0FEh, 6, 0A6h, 4, 75h, 3, 0E9h, 90h, 7, 0Ah, 0FFh | |
| F000:6000 db 79h, 9, 0FEh, 6, 0A6h, 4, 75h, 7, 0E9h, 83h, 7, 3 dup(0D1h) | |
| F000:6000 db 0D3h, 8Ah, 0D5h, 8Ah, 0F3h, 8Ah, 0DFh, 8Ah, 0E1h, 0E9h | |
| F000:6000 db 0ECh, 0Bh, 0C3h, 53h, 0B0h, 8, 72h, 2, 0B0h, 11h, 8Ah | |
| F000:6000 db 0E8h, 8Ah, 0C8h, 51h, 9Ch, 0E8h, 48h, 2, 0Ah, 0C0h | |
| F000:6000 db 74h, 2, 79h, 0Ch, 9Dh, 59h, 50h, 7Bh, 0Bh, 4, 10h, 58h | |
| F000:6000 db 79h, 1Ah, 0EBh, 9, 9Dh, 59h, 0EBh, 26h, 4, 7, 58h, 79h | |
| F000:6000 db 0Fh, 50h, 0E8h, 0F6h, 0Bh, 58h, 8Ah, 0E0h, 2, 0E1h | |
| F000:6000 db 7Eh, 16h, 2, 0E8h, 0EBh, 0Ch, 2, 0C5h, 0FEh, 0C5h, 3Ah | |
| F000:6000 db 0E8h, 0B5h, 3, 72h, 0Ch, 8Ah, 0E8h, 0FEh, 0C5h, 0B0h | |
| F000:6000 db 2, 0EBh, 4, 2, 0C5h, 0B5h, 3, 0FEh, 0C8h, 0FEh, 0C8h | |
| F000:6000 db 5Bh, 50h, 9Ch, 32h, 0C9h, 0E8h, 4Dh, 0, 0C6h, 7, 30h | |
| F000:6000 db 75h, 1, 43h, 2 dup(0E8h), 0, 4Bh, 80h, 3Fh, 30h, 74h | |
| F000:6000 db 0FAh, 80h, 3Fh, 2Eh, 74h, 1, 43h, 9Dh, 58h, 74h, 2Bh | |
| F000:6000 db 9Ch, 50h, 0E8h, 0BFh, 0Dh, 0B4h, 45h, 7Bh, 2, 0B4h | |
| F000:6000 db 44h, 88h, 27h, 43h, 58h, 9Dh, 0C6h, 7, 2Bh, 79h, 5 | |
| F000:6000 db 0C6h, 7, 2Dh, 0F6h, 0D8h, 0B4h, 2Fh, 0FEh, 0C4h, 2Ch | |
| F000:6000 db 0Ah, 73h, 0FAh, 4, 3Ah, 43h, 86h, 0C4h, 89h, 7, 2 dup(43h) | |
| F000:6000 db 0C6h, 7, 0, 87h, 0D9h, 0BBh, 0B4h, 4, 0C3h, 0FEh, 0CDh | |
| F000:6000 db 79h, 16h, 89h, 1Eh, 52h, 3, 0C6h, 7, 2Eh, 43h, 0C6h | |
| F000:6000 db 7, 30h, 0FEh, 0C5h, 75h, 0F8h, 43h, 33h, 0C9h, 0EBh | |
| F000:6000 db 1Ah, 0FEh, 0CDh, 75h, 0Ch, 0C6h, 7, 2Eh, 89h, 1Eh, 52h | |
| F000:6000 db 3, 43h, 33h, 0C9h, 0EBh, 0Ah, 0FEh, 0C9h, 75h, 6, 0C6h | |
| F000:6000 db 7, 2Ch, 43h, 0B1h, 3, 89h, 0Eh, 81h, 4, 0C3h, 0B4h | |
| F000:6000 db 5, 0BDh, 0F5h, 61h, 0E8h, 0D9h, 0FFh, 2Eh, 8Bh, 96h | |
| F000:6000 db 2 dup(0), 2 dup(45h), 8Bh, 36h, 0A3h, 4, 0B0h, 2Fh | |
| F000:6000 db 0FEh, 0C0h, 2Bh, 0F2h, 73h, 0FAh, 3, 0F2h, 88h, 7, 43h | |
| F000:6000 db 89h, 36h, 0A3h, 4, 0FEh, 0CCh, 75h, 0DDh, 0E8h, 0B6h | |
| F000:6000 db 0FFh, 0C6h, 7, 0, 0C3h, 0B9h, 1, 3, 0BEh, 6, 0, 0EBh | |
| F000:6000 db 6, 0B9h, 2 dup(4), 0BEh, 4, 0, 0BFh, 0B3h, 4, 0FCh | |
| F000:6000 db 0BBh, 74h, 62h, 8Bh, 16h, 0A3h, 4, 56h, 8Ah, 0C6h, 32h | |
| F000:6000 db 0E4h, 0D3h, 0E0h, 86h, 0E0h, 2Eh, 0D7h, 0AAh, 0D3h | |
| F000:6000 db 0E2h, 8Ah, 0CDh, 4Eh, 75h, 0EEh, 0C6h, 5, 0, 0BBh, 0B3h | |
| F000:6000 db 4, 59h, 0FEh, 0C9h, 80h, 3Fh, 30h, 75h, 3, 43h, 0E2h | |
| F000:6000 db 0F8h, 0C3h, 0E8h, 0E9h, 0Ch, 7Bh, 77h, 51h, 53h, 0BEh | |
| F000:6000 db 9Fh, 4, 0BFh, 0ABh, 4, 0B9h, 4, 0, 0FCh, 0F3h, 0A5h | |
| F000:6000 db 0E8h, 75h, 3, 53h, 0BBh, 0B1h, 4, 0E8h, 0FDh, 0Dh, 5Bh | |
| F000:6000 db 0BEh, 0ABh, 4, 0BFh, 9Fh, 4, 0B9h, 4, 0, 0FCh, 0F3h | |
| F000:6000 db 0A5h, 74h, 3, 0E8h, 0CEh, 0Ch, 8Ah, 0Eh, 0A6h, 4, 80h | |
| F000:6000 db 0E9h, 0B8h, 0F6h, 0D9h, 0F8h, 0E8h, 5Ah, 3, 5Bh, 59h | |
| F000:6000 db 0BEh, 0A6h, 61h, 0B0h, 9, 0E8h, 2Eh, 0FFh, 50h, 0B0h | |
| F000:6000 db 2Fh, 50h, 58h, 0FEh, 0C0h, 50h, 0E8h, 94h, 0, 73h, 0F7h | |
| F000:6000 db 0E8h, 0A3h, 0, 58h, 0EBh, 0Bh, 75h, 9, 0C6h, 7, 31h | |
| F000:6000 db 43h, 0C6h, 7, 30h, 0EBh, 2, 88h, 7, 43h, 58h, 0FEh | |
| F000:6000 db 0C8h, 75h, 0D7h, 51h, 0BEh, 9Fh, 4, 0BFh, 0A3h, 4, 0B9h | |
| F000:6000 db 2, 0, 0FCh, 0F3h, 0A5h, 59h, 0EBh, 29h, 53h, 51h, 0E8h | |
| F000:6000 db 18h, 0Fh, 0E8h, 71h, 3, 5Ah, 5Bh, 0E8h, 99h, 0Dh, 74h | |
| F000:6000 db 0Bh, 89h, 1Eh, 0A5h, 4, 89h, 16h, 0A3h, 4, 0E8h, 73h | |
| F000:6000 db 0Ch, 0B0h, 1, 0E8h, 0B2h, 3, 89h, 1Eh, 0A5h, 4, 89h | |
| F000:6000 db 16h, 0A3h, 4, 59h, 5Bh, 0B0h, 3, 0BAh, 0ECh, 61h, 0E8h | |
| F000:6000 db 0C7h, 0FEh, 50h, 53h, 52h, 0E8h, 5Eh, 0Dh, 5Dh, 0B0h | |
| F000:6000 db 2Fh, 50h, 58h, 0FEh, 0C0h, 50h, 0E8h, 17h, 0Eh, 73h | |
| F000:6000 db 0F7h, 2Eh, 3, 96h, 2 dup(0), 2Eh, 12h, 9Eh, 2, 0, 3 dup(45h) | |
| F000:6000 db 0E8h, 38h, 0Dh, 58h, 87h, 0D5h, 5Bh, 88h, 7, 43h, 58h | |
| F000:6000 db 0FEh, 0C8h, 75h, 0CEh, 2 dup(42h), 8Bh, 0EAh, 0B4h | |
| F000:6000 db 4, 0E9h, 0B3h, 0FEh, 51h, 56h, 0B9h, 7, 0, 0BFh, 9Fh | |
| F000:6000 db 4, 0F8h, 0FCh, 2Eh, 0ACh, 18h, 5, 47h, 0E2h, 0F9h, 5Eh | |
| F000:6000 db 59h, 0C3h, 51h, 0B9h, 7, 0, 0BFh, 9Fh, 4, 0F8h, 0FCh | |
| F000:6000 db 2Eh, 0ACh, 10h, 5, 47h, 0E2h, 0F9h, 59h, 0C3h, 53h | |
| F000:6000 db 51h, 33h, 0FFh, 57h, 0BBh, 2, 5Eh, 0A0h, 0A6h, 4, 2Eh | |
| F000:6000 db 0D7h, 0Ah, 0C0h, 74h, 0Ch, 5Fh, 98h, 2Bh, 0F8h, 57h | |
| F000:6000 db 8Bh, 0D0h, 0E8h, 32h, 0EFh, 0EBh, 0E8h, 0BBh, 66h, 60h | |
| F000:6000 db 0E8h, 88h, 0Ch, 0E8h, 2Dh, 0Dh, 73h, 6, 0E8h, 0E6h | |
| F000:6000 db 0Bh, 5Fh, 4Fh, 57h, 0E8h, 0B0h, 0Bh, 72h, 1Fh, 0BBh | |
| F000:6000 db 7Ah, 60h, 0E8h, 8Eh, 0Ch, 0E8h, 58h, 0FCh, 58h, 2Ch | |
| F000:6000 db 9, 50h, 0BBh, 0F6h, 7Fh, 0E8h, 6Dh, 0Ch, 0E8h, 57h | |
| F000:6000 db 0Dh, 76h, 7, 0E8h, 0B9h, 0Bh, 58h, 0FEh, 0C0h, 50h | |
| F000:6000 db 58h, 59h, 5Bh, 0Ah, 0C0h, 0C3h, 58h, 59h, 5Bh, 0Ah | |
| F000:6000 db 0C0h, 0C3h, 0BBh, 0B4h, 4, 8Ah, 2Fh, 0B1h, 20h, 8Ah | |
| F000:6000 db 26h, 83h, 4, 0F6h, 0C4h, 20h, 74h, 0Dh, 3Ah, 0E9h, 0B1h | |
| F000:6000 db 2Ah, 75h, 7, 0F6h, 0C4h, 4, 75h, 2, 8Ah, 0E9h, 88h | |
| F000:6000 db 0Fh, 0E8h, 0BFh, 0F2h, 74h, 32h, 0BDh, 0A5h, 61h, 2Eh | |
| F000:6000 db 3Ah, 86h, 2 dup(0), 74h, 9, 81h, 0FDh, 9Ch, 61h, 74h | |
| F000:6000 db 26h, 4Dh, 0EBh, 0F0h, 81h, 0EDh, 9Ch, 61h, 0D1h, 0E5h | |
| F000:6000 db 2Eh, 0FFh, 0A6h, 61h, 70h, 75h, 70h, 75h, 70h, 79h | |
| F000:6000 db 70h, 79h, 70h, 79h, 70h, 79h, 70h, 75h, 70h, 79h, 70h | |
| F000:6000 db 3Ch, 70h, 3Ch, 70h, 4Bh, 0C6h, 7, 30h, 8Ah, 26h, 83h | |
| F000:6000 db 4, 0F6h, 0C4h, 10h, 74h, 4, 4Bh, 0C6h, 7, 24h, 0F6h | |
| F000:6000 db 0C4h, 4, 75h, 5, 4Bh, 88h, 2Fh, 32h, 0EDh, 0C3h, 0Ah | |
| F000:6000 db 0C0h, 0EBh, 6, 0C6h, 7, 30h, 43h, 0FEh, 0C8h, 75h, 0F8h | |
| F000:6000 db 0C3h, 0E8h, 89h, 0FDh, 0C6h, 7, 30h, 43h, 0FEh, 0C8h | |
| F000:6000 db 75h, 0F5h, 0C3h, 0BBh, 0B4h, 4, 0C6h, 7, 20h, 53h, 0E8h | |
| F000:6000 db 0C1h, 0Ah, 5Bh, 9Ch, 79h, 0Ah, 0C6h, 7, 2Dh, 53h, 0E8h | |
| F000:6000 db 0ECh, 0Ch, 5Bh, 0Ch, 1, 43h, 0C6h, 7, 30h, 9Dh, 0C3h | |
| F000:6000 db 0CDh, 0D8h, 0E8h, 0DDh, 0FFh, 75h, 8, 43h, 0C6h, 7 | |
| F000:6000 db 0, 0BBh, 0B4h, 4, 0C3h, 0E8h, 0C8h, 0Ah, 79h, 12h, 0B9h | |
| F000:6000 db 0, 7, 33h, 0C0h, 0A3h, 83h, 4, 89h, 0Eh, 81h, 4, 0E8h | |
| F000:6000 db 5Eh, 0FDh, 0E9h, 31h, 0FFh, 0E9h, 78h, 0FCh, 0E8h, 81h | |
| F000:6000 db 0Ah, 79h, 3, 0E9h, 60h, 9Fh, 75h, 1, 0C3h, 0A0h, 0A6h | |
| F000:6000 db 4, 0D0h, 0E8h, 50h, 0C6h, 6, 0A6h, 4, 40h, 0D0h, 16h | |
| F000:6000 db 0A6h, 4, 0BBh, 0ABh, 4, 0E8h, 9, 0Dh, 0B9h, 4, 0, 51h | |
| F000:6000 db 0E8h, 37h, 0Dh, 8Bh, 16h, 0ABh, 4, 8Bh, 1Eh, 0ADh, 4 | |
| F000:6000 db 0E8h, 0BBh, 0F7h, 5Ah, 5Bh, 0E8h, 4Bh, 0F6h, 0FEh, 0Eh | |
| F000:6000 db 0A6h, 4, 59h, 74h, 0Ah, 0E2h, 0E3h, 58h, 4, 0C0h, 0 | |
| F000:6000 db 6, 0A6h, 4, 0C3h, 0E9h, 2Fh, 0Ah, 0BFh, 0BEh, 25h, 57h | |
| F000:6000 db 0BFh, 0A8h, 4, 0C6h, 5, 1, 0E8h, 2Ch, 0Ah, 75h, 3, 0E9h | |
| F000:6000 db 36h, 0F1h, 79h, 7, 0Ah, 0FFh, 75h, 0Ah, 0E9h, 93h, 3 | |
| F000:6000 db 0Ah, 0FFh, 75h, 3, 0E9h, 0Dh, 2 dup(0Ah), 0DBh, 79h | |
| F000:6000 db 26h, 80h, 3Eh, 0A6h, 4, 99h, 72h, 3, 0E9h, 0EDh, 9Eh | |
| F000:6000 db 52h, 53h, 0FFh, 36h, 0A3h, 4, 0FFh, 36h, 0A5h, 4, 0E8h | |
| F000:6000 db 32h, 1, 5Bh, 5Ah, 0E8h, 5Ah, 0Bh, 0E8h, 3Dh, 0Bh, 5Bh | |
| F000:6000 db 5Ah, 74h, 3, 0E9h, 0D1h, 9Eh, 0A0h, 0A5h, 4, 0Ah, 0C0h | |
| F000:6000 db 79h, 9, 0BFh, 0C4h, 71h, 57h, 24h, 7Fh, 0A2h, 0A5h | |
| F000:6000 db 4, 53h, 52h, 80h, 0CBh, 7Fh, 9Ch, 0FFh, 36h, 0A5h, 4 | |
| F000:6000 db 0FFh, 36h, 0A3h, 4, 0E8h, 2, 1, 5Ah, 5Bh, 0E8h, 2Ah | |
| F000:6000 db 0Bh, 75h, 1Ch, 52h, 53h, 33h, 0D2h, 0BBh, 0, 90h, 0E8h | |
| F000:6000 db 1Eh, 0Bh, 5Bh, 5Ah, 79h, 0Eh, 9Dh, 5Ah, 5Bh, 0EBh, 3Ch | |
| F000:6000 db 90h, 33h, 0D2h, 0BBh, 0, 81h, 0E9h, 12h, 0F7h, 9Dh | |
| F000:6000 db 79h, 0Eh, 53h, 52h, 0E8h, 2Fh, 1, 8Ah, 0C2h, 0E8h, 0C5h | |
| F000:6000 db 2, 5Ah, 5Bh, 0D0h, 0D8h, 8Fh, 6, 0A3h, 4, 8Fh, 6, 0A5h | |
| F000:6000 db 4, 9Fh, 80h, 26h, 0A5h, 4, 7Fh, 9Eh, 73h, 4, 0BFh, 0B0h | |
| F000:6000 db 7Dh, 57h, 53h, 52h, 0E8h, 15h, 1, 5Ah, 5Bh, 0E8h, 3 | |
| F000:6000 db 0FBh, 0E9h, 85h, 0F0h, 53h, 52h, 0E8h, 0FFh, 0, 89h | |
| F000:6000 db 16h, 0B2h, 4, 0C7h, 6, 0A3h, 4, 2 dup(0), 0C7h, 6, 0A5h | |
| F000:6000 db 4, 0, 81h, 0D1h, 2Eh, 0B2h, 4, 73h, 7, 5Ah, 5Bh, 53h | |
| F000:6000 db 52h, 0E8h, 0DEh, 0FAh, 0F7h, 6, 0B2h, 4, 2 dup(0FFh) | |
| F000:6000 db 74h, 15h, 5Ah, 5Bh, 0E8h, 21h, 0Ch, 0E8h, 8Dh, 0Ah | |
| F000:6000 db 0E8h, 0CBh, 0FAh, 5Ah, 5Bh, 0E8h, 16h, 0Ch, 0E8h, 82h | |
| F000:6000 db 0Ah, 0EBh, 0D6h, 5Ah, 5Bh, 0C3h, 8Ah, 0Eh, 0A6h, 4 | |
| F000:6000 db 80h, 0E9h, 0B8h, 73h, 39h, 0F6h, 0D9h, 9Ch, 0F6h, 6 | |
| F000:6000 db 0A6h, 4, 0FFh, 75h, 2, 9Dh, 0C3h, 0BBh, 0A4h, 4, 8Ah | |
| F000:6000 db 47h, 1, 88h, 47h, 3, 0Ah, 0C0h, 9Ch, 0E8h, 0A6h, 0EDh | |
| F000:6000 db 9Dh, 9Ch, 79h, 4, 0E8h, 23h, 0, 90h, 32h, 0EDh, 0E8h | |
| F000:6000 db 12h, 0, 9Dh, 79h, 3, 0E8h, 26h, 0, 0C6h, 6, 9Eh, 4 | |
| F000:6000 db 0, 9Dh, 73h, 3, 0E9h, 0BDh, 1, 0C3h, 51h, 53h, 0F8h | |
| F000:6000 db 0E8h, 7Ah, 9, 5Bh, 59h, 0E2h, 0F6h, 0C3h, 53h, 0BBh | |
| F000:6000 db 9Fh, 4, 83h, 2Fh, 1, 73h, 4, 2 dup(43h), 0EBh, 0F7h | |
| F000:6000 db 5Bh, 0C3h, 53h, 0BBh, 9Fh, 4, 0FEh, 7, 75h, 3, 43h | |
| F000:6000 db 0EBh, 0F9h, 5Bh, 0C3h, 8Ah, 0Eh, 0A6h, 4, 80h, 0E9h | |
| F000:6000 db 98h, 73h, 41h, 0F6h, 0D9h, 8Bh, 16h, 0A3h, 4, 0E8h | |
| F000:6000 db 58h, 0EDh, 90h, 9Ch, 0Ah, 0DBh, 9Ch, 88h, 1Eh, 0A7h | |
| F000:6000 db 4, 0C6h, 6, 0A6h, 4, 98h, 80h, 0CBh, 80h, 9Dh, 9Ch | |
| F000:6000 db 79h, 6, 83h, 0EAh, 1, 80h, 0DBh, 0, 32h, 0EDh, 0Ah | |
| F000:6000 db 0C9h, 74h, 6, 0D0h, 0EBh, 0D1h, 0DAh, 0E2h, 0FAh, 9Dh | |
| F000:6000 db 9Fh, 79h, 5, 42h, 75h, 2, 0FEh, 0C3h, 9Dh, 73h, 5, 32h | |
| F000:6000 db 0E4h, 0E9h, 0A9h, 1, 9Eh, 79h, 0Ah, 0F7h, 0D2h, 0F6h | |
| F000:6000 db 0D3h, 83h, 0C2h, 1, 80h, 0D3h, 0, 0C3h, 0B1h, 98h, 2Ah | |
| F000:6000 db 0Eh, 0A6h, 4, 0F8h, 0EBh, 0AAh, 0E8h, 66h, 8, 7Eh, 51h | |
| F000:6000 db 0BAh, 2 dup(0), 0BBh, 0, 81h, 0E8h, 0BEh, 9, 75h, 9 | |
| F000:6000 db 89h, 16h, 0A3h, 4, 89h, 16h, 0A5h, 4, 0C3h, 0A0h, 0A6h | |
| F000:6000 db 4, 2Ch, 80h, 98h, 50h, 0C6h, 6, 0A6h, 4, 80h, 0E8h | |
| F000:6000 db 1Bh, 0Bh, 0BBh, 76h, 61h, 0E8h, 18h, 2, 5Ah, 5Bh, 0E8h | |
| F000:6000 db 10h, 0Bh, 0E8h, 7Ch, 9, 0BBh, 87h, 61h, 0E8h, 0Ah, 2 | |
| F000:6000 db 5Ah, 5Bh, 0E8h, 91h, 0F5h, 5Ah, 0E8h, 0FEh, 0Ah, 0E8h | |
| F000:6000 db 0D9h, 0F8h, 5Ah, 5Bh, 0E8h, 1Ah, 0F4h, 0BBh, 31h, 80h | |
| F000:6000 db 0BAh, 18h, 72h, 0E9h, 9Dh, 0F9h, 0E9h, 0F4h, 9Ch, 0E9h | |
| F000:6000 db 5Ch, 94h, 9Fh, 86h, 0E0h, 50h, 0B0h, 1, 0EBh, 2, 32h | |
| F000:6000 db 0C0h, 0A2h, 55h, 4, 58h, 86h, 0C4h, 9Eh, 0BAh, 2 dup(0) | |
| F000:6000 db 89h, 1Eh, 53h, 4, 74h, 3, 0E8h, 0E9h, 0C3h, 89h, 1Eh | |
| F000:6000 db 3Bh, 3, 0E8h, 0ACh, 93h, 75h, 0D7h, 8Bh, 0E3h, 8Bh | |
| F000:6000 db 36h, 53h, 4, 39h, 37h, 75h, 0CDh, 52h, 8Ah, 0A7h, 2 | |
| F000:6000 db 0, 50h, 52h, 83h, 0C3h, 4, 0F6h, 87h, 2 dup(0FFh), 80h | |
| F000:6000 db 78h, 41h, 0B9h, 2, 0, 0FCh, 8Bh, 0F3h, 0BFh, 0A3h, 4 | |
| F000:6000 db 0F3h, 0A5h, 5Bh, 56h, 53h, 0F6h, 6, 55h, 4, 0FFh, 75h | |
| F000:6000 db 0Fh, 0BEh, 56h, 4, 83h, 0EFh, 4, 0B9h, 2, 0, 0F3h, 0A5h | |
| F000:6000 db 32h, 0C0h, 74h, 3, 0E8h, 4Bh, 0F0h, 5Fh, 0BEh, 0A3h | |
| F000:6000 db 4, 0B9h, 2, 0, 0FCh, 0F3h, 0A5h, 5Eh, 8Bh, 14h, 8Bh | |
| F000:6000 db 8Ch, 2, 0, 83h, 0C6h, 4, 56h, 0E8h, 49h, 0F0h, 0EBh | |
| F000:6000 db 27h, 83h, 0C3h, 4, 8Bh, 0Fh, 2 dup(43h), 5Eh, 8Bh, 14h | |
| F000:6000 db 0F6h, 6, 55h, 4, 0FFh, 75h, 6, 8Bh, 16h, 56h, 4, 0EBh | |
| F000:6000 db 4, 3, 0D1h, 70h, 35h, 89h, 14h, 52h, 8Bh, 17h, 2 dup(43h) | |
| F000:6000 db 58h, 53h, 0E8h, 0A5h, 0F1h, 5Bh, 59h, 2Ah, 0C5h, 0E8h | |
| F000:6000 db 1Fh, 0F1h, 74h, 0Bh, 89h, 16h, 2Eh, 0, 8Bh, 0D1h, 87h | |
| F000:6000 db 0D3h, 0E9h, 7Ch, 9Ah, 8Bh, 0E3h, 89h, 1Eh, 45h, 3, 8Bh | |
| F000:6000 db 1Eh, 3Bh, 3, 80h, 3Fh, 2Ch, 75h, 9, 0E8h, 55h, 0F6h | |
| F000:6000 db 0E8h, 42h, 0FFh, 0E9h, 2 dup(93h), 0E9h, 0A8h, 9Ah | |
| F000:6000 db 51h, 53h, 56h, 57h, 52h, 0B2h, 39h, 0BBh, 9Eh, 4, 0BFh | |
| F000:6000 db 0A5h, 4, 0BEh, 0A6h, 4, 0EBh, 19h, 53h, 0B9h, 4, 0 | |
| F000:6000 db 0F8h, 0D1h, 17h, 2 dup(43h), 0E2h, 0FAh, 5Bh, 0F6h | |
| F000:6000 db 7, 40h, 75h, 29h, 0FEh, 0Ch, 74h, 2Ah, 0FEh, 0CAh, 74h | |
| F000:6000 db 26h, 0F6h, 5, 0FFh, 78h, 21h, 75h, 0E0h, 80h, 2Ch, 8 | |
| F000:6000 db 76h, 1Ah, 80h, 0EAh, 8, 76h, 15h, 0BEh, 0A4h, 4, 0B9h | |
| F000:6000 db 7, 0, 0FDh, 0F3h, 0A4h, 80h, 26h, 9Eh, 4, 20h, 0EBh | |
| F000:6000 db 0BEh, 80h, 0Fh, 20h, 0EBh, 0D2h, 5Ah, 5Fh, 5Eh, 5Bh | |
| F000:6000 db 59h, 76h, 3, 0E9h, 74h, 4, 0E9h, 0C0h, 6, 8Ah, 3Eh | |
| F000:6000 db 0A6h, 4, 0B9h, 4, 0, 0Ah, 0DBh, 78h, 21h, 75h, 11h | |
| F000:6000 db 80h, 0EFh, 8, 72h, 17h, 8Ah, 0DEh, 8Ah, 0F2h, 8Ah, 0D4h | |
| F000:6000 db 32h, 0E4h, 0E2h, 0EBh, 74h, 0Bh, 0F8h, 0D0h, 0D4h, 0D1h | |
| F000:6000 db 0D2h, 0D0h, 0D3h, 0FEh, 0CFh, 75h, 0DEh, 0E9h, 0A1h | |
| F000:6000 db 6, 88h, 3Eh, 0A6h, 4, 0E9h, 83h, 4, 0CCh, 20h, 0EBh | |
| F000:6000 db 0F4h, 88h, 3Eh, 0A6h, 4, 0E9h, 78h, 4, 53h, 0E8h, 2 | |
| F000:6000 db 0, 5Bh, 0C3h, 0E8h, 2Dh, 0, 0BBh, 0Ah, 4, 0EBh, 0Ch | |
| F000:6000 db 53h, 0E8h, 2, 0, 5Bh, 0C3h, 0E8h, 1Fh, 0, 0BBh, 63h | |
| F000:6000 db 4, 80h, 3Eh, 0A8h, 4, 1, 78h, 7, 75h, 12h, 0C6h, 6 | |
| F000:6000 db 0A8h, 4, 2, 0E8h, 81h, 0AFh, 0B0h, 0Dh, 0E8h, 89h, 0AFh | |
| F000:6000 db 0B0h, 0Ah, 0E8h, 84h, 0AFh, 0C3h, 0FCh, 0Ah, 0FFh, 0BEh | |
| F000:6000 db 3, 62h, 74h, 0Ah, 0F6h, 6, 0A7h, 4, 80h, 79h, 3, 0BEh | |
| F000:6000 db 0Bh, 62h, 0E8h, 7Bh, 6, 72h, 8, 0BFh, 9Fh, 4, 0B9h | |
| F000:6000 db 4, 0, 0EBh, 9, 83h, 0C6h, 4, 0BFh, 0A3h, 4, 0B9h, 2 | |
| F000:6000 db 0, 2Eh, 0A5h, 0E2h, 0FCh, 0C3h, 0E8h, 0Dh, 9, 53h, 0E8h | |
| F000:6000 db 81h, 7, 0E8h, 0B6h, 0F7h, 5Bh, 0E8h, 5, 0, 5Ah, 5Bh | |
| F000:6000 db 0E9h, 0ADh, 0F7h, 2Eh, 8Ah, 7, 98h, 0E8h, 0F6h, 8, 50h | |
| F000:6000 db 43h, 2Eh, 8Bh, 7, 2 dup(0A3h), 4, 83h, 0C3h, 2, 2Eh | |
| F000:6000 db 8Bh, 7, 0A3h, 0A5h, 4, 83h, 0C3h, 2, 58h, 5Ah, 59h | |
| F000:6000 db 48h, 74h, 1Ch, 51h, 52h, 50h, 53h, 87h, 0D9h, 0E8h | |
| F000:6000 db 83h, 0F7h, 5Bh, 53h, 2Eh, 8Bh, 17h, 2Eh, 8Bh, 9Fh, 2 | |
| F000:6000 db 0, 0E8h, 0EAh, 0F1h, 5Bh, 83h, 0C3h, 4, 0EBh, 0DEh | |
| F000:6000 db 0C3h, 53h, 0D0h, 0E8h, 73h, 3, 0E9h, 9, 1, 0BBh, 0B2h | |
| F000:6000 db 60h, 0E8h, 0D6h, 6, 0E8h, 2Fh, 7, 72h, 9, 5Bh, 0E8h | |
| F000:6000 db 23h, 0FBh, 4Bh, 0C6h, 7, 25h, 0C3h, 0E8h, 0F3h, 5, 0B5h | |
| F000:6000 db 10h, 73h, 2, 0B5h, 7, 0E8h, 0BDh, 5, 74h, 3, 0E8h, 4 | |
| F000:6000 db 0FAh, 5Bh, 78h, 3Fh, 8Ah, 0D0h, 2, 0C5h, 2Ah, 6, 82h | |
| F000:6000 db 4, 79h, 5, 0F6h, 0D8h, 0E8h, 0C2h, 0FAh, 32h, 0C9h | |
| F000:6000 db 0E8h, 0B1h, 0, 0FFh, 36h, 81h, 4, 52h, 0E8h, 0DAh, 0F8h | |
| F000:6000 db 5Ah, 8Fh, 6, 81h, 4, 0FFh, 36h, 81h, 4, 32h, 0C0h, 0Ah | |
| F000:6000 db 0C2h, 74h, 6, 0E8h, 0B3h, 0FAh, 0E8h, 39h, 0F8h, 8Fh | |
| F000:6000 db 6, 81h, 4, 0FFh, 36h, 81h, 4, 0A0h, 81h, 4, 0E9h, 72h | |
| F000:6000 db 2, 8Ah, 0D0h, 0A0h, 81h, 4, 0Ah, 0C0h, 74h, 2, 0FEh | |
| F000:6000 db 0C8h, 8Ah, 0F0h, 2, 0C2h, 8Ah, 0C8h, 78h, 4, 32h, 0C0h | |
| F000:6000 db 8Ah, 0C8h, 79h, 11h, 50h, 51h, 52h, 53h, 0E8h, 0A9h | |
| F000:6000 db 5, 5Bh, 5Ah, 59h, 58h, 0FEh, 0C0h, 78h, 0F1h, 8Ah, 0E1h | |
| F000:6000 db 8Ah, 0C2h, 2Ah, 0C1h, 2, 0C5h, 79h, 17h, 0A0h, 82h | |
| F000:6000 db 4, 0E8h, 5Ah, 0FAh, 0C6h, 7, 2Eh, 89h, 1Eh, 52h, 3 | |
| F000:6000 db 43h, 32h, 0C9h, 8Ah, 0C6h, 2Ah, 0C5h, 0E9h, 0A1h, 9 | |
| F000:6000 db 0A0h, 82h, 4, 52h, 0FFh, 36h, 81h, 4, 2Ah, 0C5h, 2Ah | |
| F000:6000 db 0C2h, 2, 0C1h, 78h, 3, 0E8h, 36h, 0FAh, 0E8h, 27h, 0 | |
| F000:6000 db 0FFh, 36h, 81h, 4, 0E8h, 51h, 0F8h, 0A0h, 82h, 4, 8Fh | |
| F000:6000 db 6, 81h, 4, 0Ah, 0C0h, 58h, 5Ah, 75h, 7, 8Bh, 1Eh, 52h | |
| F000:6000 db 3, 0E9h, 67h, 1, 2, 0C2h, 0FEh, 0C8h, 78h, 3, 0E8h | |
| F000:6000 db 0Fh, 0FAh, 0E9h, 5Bh, 1, 8Ah, 0C5h, 2, 0C2h, 2Ah, 0C1h | |
| F000:6000 db 0FEh, 0C0h, 8Ah, 0E8h, 2Ch, 3, 7Fh, 0FCh, 4, 3, 8Ah | |
| F000:6000 db 0C8h, 0A0h, 83h, 4, 24h, 40h, 75h, 2, 8Ah, 0C8h, 0C3h | |
| F000:6000 db 0E8h, 0FEh, 4, 0B4h, 7, 72h, 2, 0B4h, 10h, 0E8h, 0C8h | |
| F000:6000 db 4, 5Bh, 0F9h, 74h, 9, 53h, 50h, 0E8h, 0Bh, 0F9h, 5Ah | |
| F000:6000 db 5Bh, 8Ah, 0E6h, 9Ch, 50h, 8Bh, 16h, 81h, 4, 0Ah, 0F6h | |
| F000:6000 db 9Ch, 0Ah, 0D2h, 74h, 2, 0FEh, 0CAh, 2, 0F2h, 9Dh, 74h | |
| F000:6000 db 9, 0F6h, 6, 83h, 2 dup(4), 75h, 2, 0FEh, 0CEh, 2Ah | |
| F000:6000 db 0F4h, 8Ah, 0E6h, 50h, 78h, 3, 0E9h, 4Eh, 0, 53h, 2 dup(50h) | |
| F000:6000 db 0E8h, 0E1h, 4, 58h, 0FEh, 0C4h, 75h, 0F7h, 0E8h, 0BFh | |
| F000:6000 db 4, 0E8h, 8Eh, 7, 58h, 50h, 0B9h, 3, 0, 0D2h, 0E4h, 0E8h | |
| F000:6000 db 0A6h, 4, 72h, 10h, 8Ah, 0C4h, 98h, 0BBh, 0B2h, 60h | |
| F000:6000 db 3, 0D8h, 0E8h, 6Bh, 5, 0E8h, 55h, 6, 0EBh, 0Eh, 0BBh | |
| F000:6000 db 6Eh, 60h, 8Ah, 0C4h, 98h, 3, 0D8h, 0E8h, 53h, 5, 0E8h | |
| F000:6000 db 0F8h, 5, 58h, 5Bh, 78h, 11h, 58h, 59h, 0FEh, 0C1h, 51h | |
| F000:6000 db 50h, 53h, 50h, 0E8h, 9Dh, 4, 58h, 5Bh, 0EBh, 2, 32h | |
| F000:6000 db 0E4h, 0F6h, 0DCh, 0A0h, 82h, 4, 2, 0E0h, 0FEh, 0C4h | |
| F000:6000 db 0Ah, 0C0h, 74h, 9, 0F6h, 6, 83h, 2 dup(4), 75h, 2, 0FEh | |
| F000:6000 db 0CCh, 8Ah, 0ECh, 32h, 0C9h, 58h, 0FFh, 36h, 81h, 4 | |
| F000:6000 db 50h, 88h, 2Eh, 82h, 4, 0E8h, 5Eh, 0F7h, 58h, 0Ah, 0E4h | |
| F000:6000 db 7Eh, 5, 8Ah, 0C4h, 0E8h, 3Fh, 0F9h, 58h, 0A3h, 81h | |
| F000:6000 db 4, 0Ah, 0C0h, 75h, 0Ch, 4Bh, 8Ah, 7, 3Ch, 2Eh, 74h | |
| F000:6000 db 1, 43h, 89h, 1Eh, 52h, 3, 58h, 9Dh, 72h, 15h, 2, 0C4h | |
| F000:6000 db 8Ah, 26h, 82h, 4, 2Ah, 0C4h, 0Ah, 0E4h, 74h, 9, 0F6h | |
| F000:6000 db 6, 83h, 2 dup(4), 75h, 2, 0FEh, 0C0h, 0Ah, 0C0h, 0E8h | |
| F000:6000 db 4Ah, 0F6h, 8Bh, 0D9h, 0E9h, 47h, 0, 8Ah, 0E0h, 0F6h | |
| F000:6000 db 0C4h, 40h, 0B4h, 3, 75h, 2, 32h, 0E4h, 0A3h, 83h, 4 | |
| F000:6000 db 89h, 0Eh, 81h, 4, 8Ah, 0E0h, 0BBh, 0B4h, 4, 0C6h, 7 | |
| F000:6000 db 20h, 0F6h, 0C4h, 8, 74h, 3, 0C6h, 7, 2Bh, 53h, 0E8h | |
| F000:6000 db 0B6h, 3, 5Bh, 79h, 8, 0C6h, 7, 2Dh, 53h, 0E8h, 0E2h | |
| F000:6000 db 5, 5Bh, 43h, 0C6h, 7, 30h, 0E8h, 0D1h, 3, 0A1h, 83h | |
| F000:6000 db 4, 8Bh, 0Eh, 81h, 4, 78h, 3, 0E9h, 0B3h, 0FDh, 0E9h | |
| F000:6000 db 68h, 0, 53h, 0E8h, 3Bh, 0F8h, 5Bh, 74h, 3, 88h, 2Fh | |
| F000:6000 db 43h, 0C6h, 7, 0, 0BBh, 0B3h, 4, 43h, 8Bh, 3Eh, 52h | |
| F000:6000 db 3, 8Bh, 16h, 81h, 4, 0A0h, 82h, 4, 32h, 0E4h, 2Bh, 0FBh | |
| F000:6000 db 2Bh, 0F8h, 74h, 43h, 8Ah, 7, 3Ch, 20h, 74h, 0E6h, 3Ch | |
| F000:6000 db 2Ah, 74h, 0E2h, 0B4h, 1, 4Bh, 53h, 50h, 0E8h, 2 dup(0EAh) | |
| F000:6000 db 32h, 0E4h, 3Ch, 2Dh, 74h, 0F6h, 3Ch, 2Bh, 74h, 0F2h | |
| F000:6000 db 3Ch, 24h, 74h, 0EEh, 3Ch, 30h, 75h, 16h, 43h, 0E8h | |
| F000:6000 db 0D4h, 0EAh, 73h, 10h, 4Bh, 0EBh, 3, 4Bh, 88h, 7, 58h | |
| F000:6000 db 0Ah, 0E4h, 74h, 0F8h, 83h, 0C4h, 2, 0EBh, 0B3h, 58h | |
| F000:6000 db 0Ah, 0E4h, 74h, 0FBh, 5Bh, 0C6h, 7, 25h, 0C3h, 0A1h | |
| F000:6000 db 83h, 4, 8Ah, 0CCh, 0B5h, 6, 0D0h, 0E8h, 8Bh, 16h, 81h | |
| F000:6000 db 4, 73h, 0Bh, 53h, 52h, 0E8h, 45h, 0F3h, 32h, 0C0h, 5Ah | |
| F000:6000 db 0E9h, 3Fh, 0FEh, 8Ah, 0C6h, 2Ch, 5, 78h, 3, 0E8h, 26h | |
| F000:6000 db 0F8h, 52h, 0E8h, 0DAh, 0F5h, 58h, 50h, 0Ah, 0C0h, 75h | |
| F000:6000 db 1, 4Bh, 0FEh, 0C8h, 78h, 6, 0E8h, 14h, 0F8h, 0C6h, 7 | |
| F000:6000 db 0, 8Fh, 6, 81h, 4, 0E9h, 59h, 0FFh, 0E8h, 0EBh, 2, 74h | |
| F000:6000 db 6Dh, 79h, 0Ch, 0A1h, 0A3h, 4, 0A3h, 0Bh, 0, 0A0h, 0A5h | |
| F000:6000 db 4, 0A2h, 0Dh, 0, 0A1h, 0Bh, 0, 2Eh, 0F7h, 26h, 6Bh | |
| F000:6000 db 62h, 8Bh, 0F8h, 8Ah, 0CAh, 2Eh, 0A0h, 6Dh, 62h, 0F6h | |
| F000:6000 db 26h, 0Bh, 0, 2, 0C8h, 2Eh, 0A0h, 0Dh, 0, 2Eh, 0F6h | |
| F000:6000 db 26h, 6Bh, 62h, 2, 0C8h, 32h, 0C0h, 2Eh, 8Bh, 16h, 6Eh | |
| F000:6000 db 62h, 3, 0D7h, 2Eh, 8Ah, 1Eh, 70h, 62h, 12h, 0D9h, 0A2h | |
| F000:6000 db 0A7h, 4, 0B0h, 80h, 0A2h, 0A6h, 4, 89h, 16h, 0Bh, 0 | |
| F000:6000 db 88h, 1Eh, 0Dh, 0, 0B0h, 4, 0A2h, 0FBh, 2, 0E9h, 0BBh | |
| F000:6000 db 0FBh, 3 dup(0), 0BBh, 0B3h, 4, 0B9h, 20h, 0, 3, 7, 2 dup(43h) | |
| F000:6000 db 0E2h, 0FAh, 24h, 0FEh, 0A3h, 0Bh, 0, 0EBh, 0A1h, 8Bh | |
| F000:6000 db 16h, 0Bh, 0, 8Ah, 1Eh, 0Dh, 0, 33h, 0C0h, 0B0h, 80h | |
| F000:6000 db 0A2h, 0A6h, 4, 88h, 26h, 0A7h, 4, 0E9h, 8Fh, 0FBh, 53h | |
| F000:6000 db 51h, 0BBh, 9Eh, 4, 81h, 7, 80h, 0, 0B9h, 3, 0, 73h | |
| F000:6000 db 0Eh, 2 dup(43h), 0FFh, 7, 75h, 8, 0E2h, 0F8h, 0FEh | |
| F000:6000 db 6, 0A6h, 4, 0D1h, 1Fh, 59h, 74h, 20h, 0F6h, 6, 9Eh | |
| F000:6000 db 4, 0FFh, 75h, 5, 80h, 26h, 9Fh, 4, 0FEh, 0BBh, 0A5h | |
| F000:6000 db 4, 8Ah, 7, 8Ah, 0A7h, 2, 0, 24h, 7Fh, 80h, 0E4h, 80h | |
| F000:6000 db 0Ah, 0E0h, 88h, 27h, 5Bh, 0C3h, 3 dup(90h), 0E9h, 88h | |
| F000:6000 db 0FBh, 80h, 0E4h, 0E0h, 80h, 0C4h, 80h, 73h, 1Ch, 9Ch | |
| F000:6000 db 42h, 75h, 12h, 9Dh, 0FEh, 0C3h, 75h, 13h, 0F9h, 0D0h | |
| F000:6000 db 0DBh, 0FEh, 6, 0A6h, 4, 75h, 0Ah, 90h, 0E9h, 6Ah, 0FBh | |
| F000:6000 db 9Dh, 75h, 3, 80h, 0E2h, 0FEh, 56h, 0BEh, 0A3h, 4, 89h | |
| F000:6000 db 14h, 2 dup(46h), 8Ah, 3Eh, 0A7h, 4, 81h, 0E3h, 7Fh | |
| F000:6000 db 80h, 0Ah, 0DFh, 88h, 1Ch, 5Eh, 0C3h, 8Bh, 0F1h, 0E8h | |
| F000:6000 db 0B4h, 4, 8Bh, 0CEh, 51h, 0E8h, 9, 2, 72h, 9, 80h, 3Eh | |
| F000:6000 db 0A6h, 4, 0B8h, 79h, 0Fh, 0EBh, 7, 80h, 3Eh, 0A6h, 4 | |
| F000:6000 db 98h, 79h, 6, 0E8h, 0, 2, 0E8h, 0CFh, 4, 0BBh, 86h, 4 | |
| F000:6000 db 0E8h, 51h, 4, 59h, 51h, 0BFh, 8Eh, 4, 0BBh, 86h, 4 | |
| F000:6000 db 0E8h, 35h, 4, 0BBh, 86h, 4, 0E8h, 5Dh, 4, 0E8h, 0FDh | |
| F000:6000 db 1, 0E8h, 0B2h, 4, 0BBh, 86h, 4, 0E8h, 34h, 4, 0E8h | |
| F000:6000 db 0FBh, 1, 0BBh, 94h, 4, 0E8h, 0C5h, 1, 73h, 3, 83h, 0EBh | |
| F000:6000 db 4, 0E8h, 57h, 4, 59h, 75h, 4, 0FEh, 0C1h, 0EBh, 0CCh | |
| F000:6000 db 8Bh, 0E9h, 0E8h, 75h, 4, 8Bh, 0CDh, 0C3h, 80h, 26h | |
| F000:6000 db 0A5h, 4, 7Fh, 0E8h, 86h, 0, 0E8h, 0A5h, 0, 0C6h, 6 | |
| F000:6000 db 0B2h, 4, 7Fh, 0E8h, 0A3h, 0ECh, 0E8h, 84h, 0, 0EBh | |
| F000:6000 db 1Bh, 65h, 0EDh, 0A1h, 0A5h, 4, 80h, 0FCh, 77h, 73h | |
| F000:6000 db 1, 0C3h, 0Ah, 0C0h, 79h, 9, 24h, 7Fh, 0A2h, 0A5h, 4 | |
| F000:6000 db 0B8h, 0B0h, 7Dh, 50h, 0E8h, 5Bh, 0, 0A0h, 0A6h, 4, 0Ah | |
| F000:6000 db 0C0h, 74h, 5, 80h, 6, 0A6h, 4, 2, 0E8h, 61h, 0, 0A1h | |
| F000:6000 db 0B1h, 4, 80h, 0FCh, 82h, 9Ch, 0F6h, 0C4h, 1, 75h, 2 | |
| F000:6000 db 0A8h, 40h, 9Ch, 0E8h, 49h, 0, 9Dh, 74h, 9, 0BBh, 32h | |
| F000:6000 db 60h, 0E8h, 37h, 2, 0E8h, 48h, 0ECh, 80h, 2Eh, 0A6h | |
| F000:6000 db 4, 2, 73h, 3, 0E8h, 0, 1, 0E8h, 3, 0F1h, 0A0h, 0A6h | |
| F000:6000 db 4, 3Ch, 74h, 73h, 0Bh, 0BAh, 0DBh, 0Fh, 0BBh, 49h, 83h | |
| F000:6000 db 0E8h, 8Eh, 0F2h, 0EBh, 6, 0BBh, 34h, 62h, 0E8h, 0C6h | |
| F000:6000 db 0FAh, 9Dh, 75h, 5, 80h, 36h, 0A5h, 4, 80h, 0C3h, 0BBh | |
| F000:6000 db 63h, 62h, 0E8h, 0, 2, 0E8h, 8, 0F1h, 0E8h, 0C7h, 0F1h | |
| F000:6000 db 0E8h, 6, 0, 0E8h, 8, 0ECh, 0E9h, 19h, 3, 0E8h, 0ADh | |
| F000:6000 db 3, 0E8h, 0A4h, 0F7h, 0E8h, 0, 2, 0E8h, 0C3h, 3, 0C3h | |
| F000:6000 db 0BBh, 32h, 60h, 0E9h, 0DEh, 1, 0B8h, 0F0h, 0C3h, 0FFh | |
| F000:6000 db 36h, 0A5h, 4, 0FFh, 36h, 0A3h, 4, 0E8h, 56h, 0FFh, 5Ah | |
| F000:6000 db 5Bh, 0FFh, 36h, 0A3h, 4, 0FFh, 36h, 0A5h, 4, 0E8h, 0F9h | |
| F000:6000 db 1, 0E8h, 2Ch, 0FFh, 5Bh, 5Ah, 0E9h, 11h, 0EEh, 0A1h | |
| F000:6000 db 0A5h, 4, 0Ah, 0C0h, 79h, 9, 0BFh, 0B0h, 7Dh, 57h, 24h | |
| F000:6000 db 7Fh, 0A2h, 0A5h, 4, 80h, 0FCh, 81h, 72h, 0Ch, 0BFh | |
| F000:6000 db 39h, 7Bh, 57h, 33h, 0D2h, 0BBh, 0, 81h, 0E8h, 0F0h | |
| F000:6000 db 0EDh, 0BAh, 0A2h, 30h, 0BBh, 9, 7Fh, 0E8h, 0E1h, 1 | |
| F000:6000 db 78h, 3Ah, 0BFh, 42h, 7Bh, 57h, 0FFh, 36h, 0A3h, 4, 0FFh | |
| F000:6000 db 36h, 0A5h, 4, 0BAh, 0D7h, 0B3h, 0BBh, 5Dh, 81h, 0E8h | |
| F000:6000 db 65h, 0ECh, 5Bh, 5Ah, 0FFh, 36h, 0A3h, 4, 0FFh, 36h | |
| F000:6000 db 0A5h, 4, 0E8h, 0A3h, 1, 0BBh, 49h, 62h, 0E8h, 31h, 0FAh | |
| F000:6000 db 5Bh, 5Ah, 0FFh, 36h, 0A3h, 4, 0FFh, 36h, 0A5h, 4, 0E8h | |
| F000:6000 db 90h, 1, 5Bh, 5Ah, 0E8h, 0ABh, 0EDh, 0BBh, 52h, 62h | |
| F000:6000 db 0E9h, 6, 0FAh, 0BAh, 0DBh, 0Fh, 0BBh, 49h, 81h, 0E9h | |
| F000:6000 db 25h, 0ECh, 0BAh, 92h, 0Ah, 0BBh, 6, 80h, 0E9h, 28h | |
| F000:6000 db 0ECh, 0E8h, 57h, 0B0h, 3Ch, 0Dh, 75h, 3, 0E8h, 23h | |
| F000:6000 db 0B1h, 2Eh, 8Ah, 7, 43h, 0Ah, 0C0h, 75h, 0EEh, 0C3h | |
| F000:6000 db 0BFh, 9Fh, 4, 0B9h, 4, 0, 0B8h, 2 dup(0), 0FCh, 0F3h | |
| F000:6000 db 0ABh, 0C3h, 0B8h, 2 dup(0), 2 dup(0A3h), 4, 0A3h, 0A5h | |
| F000:6000 db 4, 0C3h, 0E8h, 78h, 0E7h, 79h, 0Eh, 0A1h, 0A3h, 4, 0Bh | |
| F000:6000 db 0C0h, 74h, 20h, 0B0h, 1, 79h, 1Ch, 0F6h, 0D8h, 0C3h | |
| F000:6000 db 0CDh, 0D4h, 0A0h, 0A6h, 4, 0Ah, 0C0h, 74h, 10h, 0A0h | |
| F000:6000 db 0A5h, 4, 0Ah, 0C0h, 74h, 7, 0B0h, 1, 79h, 5, 0F6h, 0D8h | |
| F000:6000 db 0C3h, 0Ch, 1, 0C3h, 0A0h, 0FBh, 2, 3Ch, 8, 0FEh, 0C8h | |
| F000:6000 db 0FEh, 0C8h, 0FEh, 0C8h, 0C3h, 0E8h, 0F1h, 0FFh, 72h | |
| F000:6000 db 0Ch, 53h, 0BBh, 6Ah, 61h, 0E8h, 0CEh, 0, 0E8h, 0EDh | |
| F000:6000 db 0EAh, 5Bh, 0C3h, 33h, 0D2h, 0BBh, 0, 80h, 0E8h, 0ACh | |
| F000:6000 db 0EBh, 0C3h, 0E8h, 0D7h, 0FFh, 0BBh, 2Ah, 60h, 72h, 11h | |
| F000:6000 db 0EBh, 8, 0E8h, 0CDh, 0FFh, 0BBh, 3Ah, 60h, 72h, 7, 0E8h | |
| F000:6000 db 0ABh, 0, 0E8h, 75h, 0F0h, 0C3h, 0FFh, 36h, 0A5h, 4 | |
| F000:6000 db 0FFh, 36h, 0A3h, 4, 0C6h, 6, 0FBh, 2, 8, 0E8h, 9Ch | |
| F000:6000 db 0, 0E8h, 70h, 0EFh, 5Ah, 5Bh, 0E8h, 6, 0F1h, 0C3h, 0B9h | |
| F000:6000 db 4, 0, 0D1h, 17h, 2 dup(43h), 0E2h, 0FAh, 0C3h, 0B9h | |
| F000:6000 db 4, 0, 0D1h, 1Fh, 2 dup(4Bh), 0E2h, 0FAh, 0C3h, 80h | |
| F000:6000 db 8Fh, 2, 0, 20h, 0E2h, 1, 0C3h, 0BBh, 0B0h, 4, 80h, 0F9h | |
| F000:6000 db 8, 72h, 26h, 51h, 0B9h, 7, 0, 0BBh, 0AAh, 4, 8Ah, 27h | |
| F000:6000 db 8Ah, 87h, 1, 0, 88h, 7, 43h, 0E2h, 0F7h, 32h, 0C0h | |
| F000:6000 db 88h, 7, 59h, 80h, 0E9h, 8, 80h, 0E4h, 20h, 74h, 0D9h | |
| F000:6000 db 8, 26h, 0AAh, 4, 0E9h, 0D2h, 0FFh, 0Ah, 0C9h, 74h, 0Fh | |
| F000:6000 db 51h, 0F8h, 0E8h, 0B7h, 0FFh, 59h, 0F6h, 87h, 2, 0, 10h | |
| F000:6000 db 75h, 0B9h, 0E2h, 0BFh, 0C3h, 0BEh, 9Fh, 4, 0BFh, 0ABh | |
| F000:6000 db 4, 0FCh, 0B9h, 4, 0, 8Bh, 5, 0A5h, 89h, 84h, 0FEh, 0FFh | |
| F000:6000 db 0E2h, 0F7h, 0C3h, 0BFh, 7Ch, 4, 0B9h, 2, 0, 0EBh, 6 | |
| F000:6000 db 0BFh, 78h, 4, 0B9h, 4, 0, 0FCh, 2Eh, 8Bh, 7, 0ABh, 2 dup(43h) | |
| F000:6000 db 0E2h, 0F8h, 8Bh, 0DFh, 2 dup(4Bh), 0C3h, 0BFh, 0ABh | |
| F000:6000 db 4, 0EBh, 0EAh, 0BFh, 9Fh, 4, 0EBh, 0E5h, 0BFh, 0ABh | |
| F000:6000 db 4, 0B9h, 4, 0, 87h, 0DEh, 0FCh, 0F3h, 0A5h, 87h, 0DEh | |
| F000:6000 db 0C3h, 51h, 53h, 57h, 0BBh, 9Fh, 4, 0BFh, 0ABh, 4, 0B9h | |
| F000:6000 db 4, 0, 0E8h, 0E9h, 0FFh, 5Fh, 5Bh, 59h, 0C3h, 51h, 53h | |
| F000:6000 db 57h, 0BBh, 0ABh, 4, 0BFh, 9Fh, 4, 2 dup(0EBh), 89h | |
| F000:6000 db 16h, 0A3h, 4, 89h, 1Eh, 0A5h, 4, 0C3h, 8Bh, 16h, 0A3h | |
| F000:6000 db 4, 8Bh, 1Eh, 0A5h, 4, 0C3h, 0E8h, 0CFh, 0FEh, 72h, 3Fh | |
| F000:6000 db 0E9h, 89h, 0, 0E8h, 0D7h, 0EDh, 53h, 57h, 8Ah, 0C3h | |
| F000:6000 db 32h, 6, 0A5h, 4, 78h, 3Ch, 0Ah, 0DBh, 78h, 10h, 0A1h | |
| F000:6000 db 0A5h, 4, 2Bh, 0C3h, 72h, 3Fh, 75h, 37h, 0A1h, 0A3h | |
| F000:6000 db 4, 2Bh, 0C2h, 0EBh, 10h, 8Bh, 0C3h, 2Bh, 6, 0A5h, 4 | |
| F000:6000 db 72h, 2Eh, 75h, 26h, 8Bh, 0C2h, 2Bh, 6, 0A3h, 4, 72h | |
| F000:6000 db 24h, 75h, 1Ch, 32h, 0C0h, 0EBh, 4Ah, 0C0h, 0EBh, 47h | |
| F000:6000 db 0E8h, 0A3h, 0EDh, 2 dup(90h), 8Bh, 7, 32h, 6, 0A5h | |
| F000:6000 db 4, 79h, 13h, 8Ah, 26h, 0A5h, 4, 0Ah, 0E4h, 78h, 6, 0B0h | |
| F000:6000 db 1, 0Ah, 0C0h, 0EBh, 2Ch, 0B0h, 0FFh, 0F9h, 0EBh, 27h | |
| F000:6000 db 51h, 0B9h, 2, 0, 87h, 0DEh, 0A0h, 0A5h, 4, 0Ah, 0C0h | |
| F000:6000 db 79h, 2, 87h, 0F7h, 0FDh, 0A7h, 75h, 6, 0E2h, 0FBh, 0B0h | |
| F000:6000 db 0, 0EBh, 0Dh, 73h, 6, 0B0h, 1, 0Ah, 0C0h, 0EBh, 5, 0B0h | |
| F000:6000 db 0FFh, 0Ah, 0C0h, 0F9h, 59h, 5Fh, 5Bh, 0C3h, 0BBh, 0B1h | |
| F000:6000 db 4, 0E8h, 56h, 0EDh, 2 dup(90h), 8Ah, 5, 32h, 7, 79h | |
| F000:6000 db 2, 0EBh, 0B3h, 51h, 0B9h, 4, 0, 0EBh, 0C4h, 0BBh, 0FFh | |
| F000:6000 db 61h, 0E8h, 0F2h, 0FEh, 0E8h, 97h, 0FFh, 75h, 0Bh, 0C6h | |
| F000:6000 db 6, 0FBh, 2 dup(2), 0C7h, 6, 0A3h, 4, 0, 80h, 0C3h, 2Eh | |
| F000:6000 db 2Bh, 96h, 2 dup(0), 2Eh, 1Ah, 9Eh, 2, 0, 0C3h, 0E8h | |
| F000:6000 db 9, 0FEh, 78h, 8, 0A0h, 0A5h, 4, 0Ah, 0C0h, 78h, 0Eh | |
| F000:6000 db 0C3h, 0A1h, 0A3h, 4, 0Bh, 0C0h, 78h, 11h, 0C3h, 0E8h | |
| F000:6000 db 0F4h, 0FDh, 78h, 8, 0CDh, 0D2h, 80h, 36h, 0A5h, 4, 80h | |
| F000:6000 db 0C3h, 0A1h, 0A3h, 4, 3Dh, 0, 80h, 75h, 0Ah, 0CDh, 0D3h | |
| F000:6000 db 53h, 0E8h, 0DBh, 0EDh, 5Bh, 0E9h, 0E6h, 0FFh, 0F7h | |
| F000:6000 db 1Eh, 0A3h, 4, 0C3h, 0BBh, 79h, 4, 0E8h, 33h, 0, 0BFh | |
| F000:6000 db 97h, 4, 0B9h, 8, 0, 0B8h, 2 dup(0), 0FCh, 0F3h, 0ABh | |
| F000:6000 db 0A2h, 78h, 4, 0A2h, 0AAh, 4, 0C3h, 0E8h, 0B7h, 0FDh | |
| F000:6000 db 72h, 3, 0E9h, 0A2h, 0FEh, 8Bh, 17h, 8Bh, 9Fh, 2, 0 | |
| F000:6000 db 0C3h, 0B9h, 4, 0, 0E8h, 0A5h, 0FDh, 72h, 3, 0E9h, 96h | |
| F000:6000 db 0FEh, 0B9h, 2, 0, 0E9h, 90h, 0FEh, 0B9h, 4, 0, 87h | |
| F000:6000 db 0FBh, 0BBh, 9Fh, 4, 0E8h, 8Fh, 0FDh, 72h, 3, 0E9h, 80h | |
| F000:6000 db 0FEh, 87h, 0DFh, 0B9h, 2, 0, 0BFh, 0A3h, 4, 87h, 0FBh | |
| F000:6000 db 0E9h, 73h, 0FEh, 0B9h, 4, 0, 0BFh, 9Fh, 4, 0E8h, 74h | |
| F000:6000 db 0FDh, 72h, 3, 0E9h, 65h, 0FEh, 0B9h, 2, 0, 0BFh, 0A3h | |
| F000:6000 db 4, 0E9h, 5Ch, 0FEh, 0E8h, 63h, 0FDh, 72h, 3, 0E9h, 1Dh | |
| F000:6000 db 0FFh, 0E9h, 0CDh, 0FEh, 0E8h, 58h, 0FDh, 0B9h, 4, 0 | |
| F000:6000 db 73h, 3, 0B9h, 2, 0, 5Dh, 0BFh, 0A5h, 4, 0FFh, 35h, 2 dup(4Fh) | |
| F000:6000 db 0E2h, 0FAh, 55h, 0C3h, 0BFh, 0ABh, 4, 0B9h, 4, 0, 0EBh | |
| F000:6000 db 11h, 0E8h, 39h, 0FDh, 0BFh, 9Fh, 4, 0B9h, 4, 0, 73h | |
| F000:6000 db 6, 0BFh, 0A3h, 4, 0B9h, 2, 0, 58h, 8Fh, 5, 2 dup(47h) | |
| F000:6000 db 0E2h, 0FAh, 50h, 0C3h, 0E8h, 1Fh, 0FDh, 79h, 1, 0C3h | |
| F000:6000 db 0CDh, 0D5h, 72h, 3, 0E9h, 0B4h, 0F3h, 0E9h, 1Bh, 0F4h | |
| F000:6000 db 2 dup(0), 0FAh, 0BAh, 60h, 0, 8Eh, 0DAh, 8Eh, 0C2h | |
| F000:6000 db 8Eh, 0D2h, 32h, 0C0h, 0A2h, 64h, 4, 0B5h, 91h, 0BBh | |
| F000:6000 db 2 dup(0), 0BAh, 9Ah, 6, 8Bh, 0F2h, 2Eh, 0ACh, 88h, 7 | |
| F000:6000 db 43h, 42h, 0FEh, 0CDh, 75h, 0F4h, 0BCh, 0Eh, 7, 0CDh | |
| F000:6000 db 12h, 0FAh, 0BBh, 40h, 0, 0F7h, 0E3h, 8Ch, 0DBh, 2Bh | |
| F000:6000 db 0C3h, 0BBh, 2 dup(0), 0F6h, 0C4h, 0F0h, 75h, 6, 0B1h | |
| F000:6000 db 4, 0D3h, 0E0h, 8Bh, 0D8h, 4Bh, 89h, 1Eh, 2Ch, 0, 8Bh | |
| F000:6000 db 0E3h, 0E9h, 22h, 0CDh, 0B0h, 2Ch, 0A2h, 0F6h, 1, 0BBh | |
| F000:6000 db 0B7h, 0, 0C6h, 7, 3Ah, 32h, 0C0h, 0A2h, 0F9h, 2, 0A2h | |
| F000:6000 db 6, 0, 0A2h, 6Bh, 4, 0A2h, 65h, 4, 0A2h, 28h, 0, 0BBh | |
| F000:6000 db 0Eh, 3, 89h, 1Eh, 0Ch, 3, 0BBh, 7Ah, 3, 89h, 1Eh, 0E2h | |
| F000:6000 db 3, 8Bh, 1Eh, 2Ch, 0, 4Bh, 89h, 1Eh, 0Ah, 3, 4Bh, 53h | |
| F000:6000 db 0BBh, 0Eh, 7, 0B0h, 4, 0A2h, 0DFh, 4, 53h, 89h, 1Eh | |
| F000:6000 db 0E0h, 4, 0A0h, 0DFh, 4, 0FEh, 0C0h, 2, 0C0h, 8Ah, 0D0h | |
| F000:6000 db 0B6h, 0, 3, 0DAh, 5Ah, 87h, 0DAh, 8Bh, 1Eh, 0E0h, 4 | |
| F000:6000 db 88h, 17h, 43h, 88h, 37h, 43h, 0A0h, 0DFh, 4, 0B9h, 34h | |
| F000:6000 db 0, 0Ah, 0C0h, 74h, 0Eh, 87h, 0DAh, 3, 0D9h, 87h, 0DAh | |
| F000:6000 db 89h, 17h, 2 dup(43h), 0FEh, 0C8h, 75h, 0F2h, 87h, 0DAh | |
| F000:6000 db 3, 0D9h, 43h, 53h, 0FEh, 0C8h, 0A2h, 36h, 5, 8Bh, 1Eh | |
| F000:6000 db 0E0h, 4, 8Bh, 17h, 0BBh, 33h, 0, 3, 0DAh, 89h, 1Eh | |
| F000:6000 db 0E4h, 4, 5Bh, 43h, 89h, 1Eh, 30h, 0, 89h, 1Eh, 45h | |
| F000:6000 db 3, 5Ah, 8Ah, 0C2h, 24h, 0FEh, 8Ah, 0D0h, 8Ah, 0C2h | |
| F000:6000 db 2Ah, 0C3h, 8Ah, 0D8h, 8Ah, 0C6h, 1Ah, 0C7h, 8Ah, 0F8h | |
| F000:6000 db 73h, 3, 0E9h, 68h, 0ADh, 0B1h, 3, 0D3h, 0EBh, 8Ah, 0C7h | |
| F000:6000 db 3Ch, 2, 72h, 3, 0BBh, 0, 2, 8Ah, 0C2h, 2Ah, 0C3h, 8Ah | |
| F000:6000 db 0D8h, 8Ah, 0C6h, 1Ah, 0C7h, 8Ah, 0F8h, 73h, 3, 0E9h | |
| F000:6000 db 4Ah, 0ADh, 89h, 1Eh, 0Ah, 3, 87h, 0DAh, 89h, 1Eh, 2Ch | |
| F000:6000 db 0, 89h, 1Eh, 2Fh, 3, 8Bh, 0E3h, 89h, 1Eh, 45h, 3, 8Bh | |
| F000:6000 db 1Eh, 30h, 0, 87h, 0DAh, 0E8h, 3Dh, 0ADh, 2Bh, 0DAh | |
| F000:6000 db 2 dup(4Bh), 53h, 5Bh, 0E8h, 80h, 0E5h, 0BBh, 0DCh, 7Fh | |
| F000:6000 db 0E8h, 7Fh, 0FBh, 0E8h, 98h, 0ACh, 0E9h, 8Fh, 0C3h, 20h | |
| F000:6000 db 42h, 79h, 74h, 65h, 73h, 20h, 66h, 72h, 2 dup(65h) | |
| F000:6000 db 0, 0D8h, 0E8h, 0A5h, 0F0h, 33h, 0C9h, 52h, 0FFh, 36h | |
| F000:6000 db 81h, 4, 0E9h, 68h, 0F6h, 0FDh, 0FFh, 3, 0BFh, 0C9h | |
| F000:6000 db 1Bh, 0Eh, 0B6h, 2 dup(0) | |
| F000:E000 a1504037Copr_Ibm19811 db '1504037 COPR. IBM 1981,1983' | |
| F000:E01B ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E01B real_vector_setup proc near ; CODE XREF: new_int_9+8p | |
| F000:E01B ; new_int_9+40p | |
| F000:E01B ; new_int_9:esc_onlyp | |
| F000:E01B push ax | |
| F000:E01C push bx | |
| F000:E01D push es | |
| F000:E01E xor ax, ax | |
| F000:E020 mov es, ax | |
| F000:E022 mov bx, 24h ; '$' ; 9 * 4 | |
| F000:E025 mov word ptr es:[bx], offset kb_int | |
| F000:E02A inc bx | |
| F000:E02B inc bx | |
| F000:E02C push cs | |
| F000:E02D pop ax | |
| F000:E02E mov es:[bx], ax | |
| F000:E031 pop es | |
| F000:E032 pop bx | |
| F000:E033 pop ax | |
| F000:E034 retn | |
| F000:E034 real_vector_setup endp | |
| F000:E035 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E035 ; ----------------------------------------------------- | |
| F000:E035 ; kb_noise | |
| F000:E035 ; this routine is called when general beeps are required from | |
| F000:E035 ; the system. | |
| F000:E035 ; input | |
| F000:E035 ; bx=lenght of the tone | |
| F000:E035 ; cx=contains the frequency | |
| F000:E035 ; output | |
| F000:E035 ; all registers are mantained. | |
| F000:E035 ; hits | |
| F000:E035 ; as cx gets larger the tone produced gets lower in pitch | |
| F000:E035 ; ----------------------------------------------------- | |
| F000:E035 kb_noise proc near ; CODE XREF: kdbnmi+A1p | |
| F000:E035 ; key62_int+5Cp kb_int+19p | |
| F000:E035 ; kb_int+2D1p kb_int+2F5p | |
| F000:E035 ; rw_opn+180p | |
| F000:E035 sti | |
| F000:E036 push ax | |
| F000:E037 push bx | |
| F000:E038 push cx | |
| F000:E039 in al, 61h ; get control info | |
| F000:E03B push ax ; save | |
| F000:E03C loop01: ; CODE XREF: kb_noise+18j | |
| F000:E03C and al, 0FCh ; turn off timer gate and speaker data | |
| F000:E03E out 61h, al ; output to control | |
| F000:E040 push cx ; half cycle time for tone | |
| F000:E041 loop02: ; CODE XREF: kb_noise:loop02j | |
| F000:E041 loop loop02 ; speaker off | |
| F000:E043 or al, 2 ; turn on speaker bit | |
| F000:E045 out 61h, al ; output to control | |
| F000:E047 pop cx | |
| F000:E048 push cx ; retreive frequency | |
| F000:E049 loop03: ; CODE XREF: kb_noise:loop03j | |
| F000:E049 loop loop03 ; another half cycle | |
| F000:E04B dec bx ; total time count | |
| F000:E04C pop cx ; retrieve freq. | |
| F000:E04D jnz short loop01 ; do another cycle | |
| F000:E04F pop ax ; recover control | |
| F000:E050 out 61h, al ; output the control | |
| F000:E052 pop cx | |
| F000:E053 pop bx | |
| F000:E054 pop ax | |
| F000:E055 retn | |
| F000:E055 kb_noise endp | |
| F000:E056 db 0 | |
| F000:E057 db 0 | |
| F000:E058 db 0 | |
| F000:E059 db 0 | |
| F000:E05A db 0 | |
| F000:E05B jmp reset | |
| F000:E05E crt_charh db 78h,0CCh,0C0h,0CCh, 78h, 18h, 0Ch, 78h ; DATA XREF: F000:FF21o | |
| F000:E05E db 0,0CCh, 0,0CCh,0CCh,0CCh, 7Eh, 0 | |
| F000:E05E db 1Ch, 0, 78h,0CCh,0FCh,0C0h, 78h, 0 | |
| F000:E05E db 7Eh,0C3h, 3Ch, 6, 3Eh, 66h, 3Fh, 0 | |
| F000:E05E db 0CCh, 0, 78h, 0Ch, 7Ch,0CCh, 7Eh, 0 | |
| F000:E05E db 0E0h, 0, 78h, 0Ch, 7Ch,0CCh, 7Eh, 0 | |
| F000:E05E db 30h, 30h, 78h, 0Ch, 7Ch,0CCh, 7Eh, 0 | |
| F000:E05E db 0, 0, 78h,0C0h,0C0h, 78h, 0Ch, 38h | |
| F000:E05E db 7Eh,0C3h, 3Ch, 66h, 7Eh, 60h, 3Ch, 0 | |
| F000:E05E db 0CCh, 0, 78h,0CCh,0FCh,0C0h, 78h, 0 | |
| F000:E05E db 0E0h, 0, 78h,0CCh,0FCh,0C0h, 78h, 0 | |
| F000:E05E db 0CCh, 0, 70h, 30h, 30h, 30h, 78h, 0 | |
| F000:E05E db 7Ch,0C6h, 38h, 18h, 18h, 18h, 3Ch, 0 | |
| F000:E05E db 0E0h, 0, 70h, 30h, 30h, 30h, 78h, 0 | |
| F000:E05E db 0C6h, 38h, 6Ch,0C6h,0FEh,0C6h,0C6h, 0 | |
| F000:E05E db 30h, 30h, 0, 78h,0CCh,0FCh,0CCh, 0 | |
| F000:E05E db 1Ch, 0,0FCh, 60h, 78h, 60h,0FCh, 0 | |
| F000:E05E db 0, 0, 7Fh, 0Ch, 7Fh,0CCh, 7Fh, 0 | |
| F000:E05E db 3Eh, 6Ch,0CCh,0FEh,0CCh,0CCh,0CEh, 0 | |
| F000:E05E db 78h,0CCh, 0, 78h,0CCh,0CCh, 78h, 0 | |
| F000:E05E db 0,0CCh, 0, 78h,0CCh,0CCh, 78h, 0 | |
| F000:E05E db 0,0E0h, 0, 78h,0CCh,0CCh, 78h, 0 | |
| F000:E05E db 78h,0CCh, 0,0CCh,0CCh,0CCh, 7Eh, 0 | |
| F000:E05E db 0,0E0h, 0,0CCh,0CCh,0CCh, 7Eh, 0 | |
| F000:E05E db 0,0CCh, 0,0CCh,0CCh, 7Ch, 0Ch,0F8h | |
| F000:E05E db 0C3h, 18h, 3Ch, 66h, 66h, 3Ch, 18h, 0 | |
| F000:E05E db 0CCh, 0,0CCh,0CCh,0CCh,0CCh, 78h, 0 | |
| F000:E05E db 18h, 18h, 7Eh,0C0h,0C0h, 7Eh, 18h, 18h | |
| F000:E05E db 38h, 6Ch, 64h,0F0h, 60h,0E6h,0FCh, 0 | |
| F000:E05E db 0CCh,0CCh, 78h,0FCh, 30h,0FCh, 30h, 30h | |
| F000:E05E db 0F8h,0CCh,0CCh,0FAh,0C6h,0CFh,0C6h,0C7h | |
| F000:E05E db 0Eh, 1Bh, 18h, 3Ch, 18h, 18h,0D8h, 70h | |
| F000:E05E db 1Ch, 0, 78h, 0Ch, 7Ch,0CCh, 7Eh, 0 | |
| F000:E05E db 38h, 0, 70h, 30h, 30h, 30h, 78h, 0 | |
| F000:E05E db 0, 1Ch, 0, 78h,0CCh,0CCh, 78h, 0 | |
| F000:E05E db 0, 1Ch, 0,0CCh,0CCh,0CCh, 7Eh, 0 | |
| F000:E05E db 0,0F8h, 0,0F8h,0CCh,0CCh,0CCh, 0 | |
| F000:E05E db 0FCh, 0,0CCh,0ECh,0FCh,0DCh,0CCh, 0 | |
| F000:E05E db 3Ch, 6Ch, 6Ch, 3Eh, 0, 7Eh, 0, 0 | |
| F000:E05E db 38h, 6Ch, 6Ch, 38h, 0, 7Ch, 0, 0 | |
| F000:E05E db 30h, 0, 30h, 60h,0C0h,0CCh, 78h, 0 | |
| F000:E05E db 0, 0, 0,0FCh,0C0h,0C0h, 0, 0 | |
| F000:E05E db 0, 0, 0,0FCh, 0Ch, 0Ch, 0, 0 | |
| F000:E05E db 0C3h,0C6h,0CCh,0DEh, 33h, 66h,0CCh, 0Fh | |
| F000:E05E db 0C3h,0C6h,0CCh,0DBh, 37h, 6Fh,0CFh, 3 | |
| F000:E05E db 18h, 18h, 0, 18h, 18h, 18h, 18h, 0 | |
| F000:E05E db 0, 33h, 66h,0CCh, 66h, 33h, 0, 0 | |
| F000:E05E db 0,0CCh, 66h, 33h, 66h,0CCh, 0, 0 | |
| F000:E05E db 22h, 88h, 22h, 88h, 22h, 88h, 22h, 88h | |
| F000:E05E db 55h,0AAh, 55h,0AAh, 55h,0AAh, 55h,0AAh | |
| F000:E05E db 0DBh, 77h,0DBh,0EEh,0DBh, 77h,0DBh,0EEh | |
| F000:E05E db 18h, 18h, 18h, 18h, 18h, 18h, 18h, 18h | |
| F000:E05E db 18h, 18h, 18h, 18h,0F8h, 18h, 18h, 18h | |
| F000:E05E db 18h, 18h,0F8h, 18h,0F8h, 18h, 18h, 18h | |
| F000:E05E db 36h, 36h, 36h, 36h,0F6h, 36h, 36h, 36h | |
| F000:E05E db 0, 0, 0, 0,0FEh, 36h, 36h, 36h | |
| F000:E05E db 0, 0,0F8h, 18h,0F8h, 18h, 18h, 18h | |
| F000:E05E db 36h, 36h,0F6h, 6,0F6h, 36h, 36h, 36h | |
| F000:E05E db 36h, 36h, 36h, 36h, 36h, 36h, 36h, 36h | |
| F000:E05E db 0, 0,0FEh, 6,0F6h, 36h, 36h, 36h | |
| F000:E05E db 36h, 36h,0F6h, 6,0FEh, 0, 0, 0 | |
| F000:E05E db 36h, 36h, 36h, 36h,0FEh, 0, 0, 0 | |
| F000:E05E db 18h, 18h,0F8h, 18h,0F8h, 0, 0, 0 | |
| F000:E05E db 0, 0, 0, 0,0F8h, 18h, 18h, 18h | |
| F000:E05E db 18h, 18h, 18h, 18h, 1Fh, 0, 0, 0 | |
| F000:E05E db 18h, 18h, 18h, 18h,0FFh, 0, 0, 0 | |
| F000:E05E db 0, 0, 0, 0,0FFh, 18h, 18h, 18h | |
| F000:E05E db 18h, 18h, 18h, 18h, 1Fh, 18h, 18h, 18h | |
| F000:E05E db 0, 0, 0, 0,0FFh, 0, 0, 0 | |
| F000:E05E db 18h, 18h, 18h, 18h,0FFh, 18h, 18h, 18h | |
| F000:E05E db 18h, 18h, 1Fh, 18h, 1Fh, 18h, 18h, 18h | |
| F000:E05E db 36h, 36h, 36h, 36h, 37h, 36h, 36h, 36h | |
| F000:E05E db 36h, 36h, 37h, 30h, 3Fh, 0, 0, 0 | |
| F000:E05E db 0, 0, 3Fh, 30h, 37h, 36h, 36h, 36h | |
| F000:E05E db 36h, 36h,0F7h, 0,0FFh, 0, 0, 0 | |
| F000:E05E db 0, 0,0FFh, 0,0F7h, 36h, 36h, 36h | |
| F000:E05E db 36h, 36h, 37h, 30h, 37h, 36h, 36h, 36h | |
| F000:E05E db 0, 0,0FFh, 0,0FFh, 0, 0, 0 | |
| F000:E05E db 36h, 36h,0F7h, 0,0F7h, 36h, 36h, 36h | |
| F000:E05E db 18h, 18h,0FFh, 0,0FFh, 0, 0, 0 | |
| F000:E05E db 36h, 36h, 36h, 36h,0FFh, 0, 0, 0 | |
| F000:E05E db 0, 0,0FFh, 0,0FFh, 18h, 18h, 18h | |
| F000:E05E db 0, 0, 0, 0,0FFh, 36h, 36h, 36h | |
| F000:E05E db 36h, 36h, 36h, 36h, 3Fh, 0, 0, 0 | |
| F000:E05E db 18h, 18h, 1Fh, 18h, 1Fh, 0, 0, 0 | |
| F000:E05E db 0, 0, 1Fh, 18h, 1Fh, 18h, 18h, 18h | |
| F000:E05E db 0, 0, 0, 0, 3Fh, 36h, 36h, 36h | |
| F000:E05E db 36h, 36h, 36h, 36h,0FFh, 36h, 36h, 36h | |
| F000:E05E db 18h, 18h,0FFh, 18h,0FFh, 18h, 18h, 18h | |
| F000:E05E db 18h, 18h, 18h, 18h,0F8h, 0, 0, 0 | |
| F000:E05E db 0, 0, 0, 0, 1Fh, 18h, 18h, 18h | |
| F000:E05E db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh | |
| F000:E05E db 0, 0, 0, 0,0FFh,0FFh,0FFh,0FFh | |
| F000:E05E db 0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h | |
| F000:E05E db 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh | |
| F000:E05E db 0FFh,0FFh,0FFh,0FFh, 0, 0, 0, 0 | |
| F000:E05E db 0, 0, 76h,0DCh,0C8h,0DCh, 76h, 0 | |
| F000:E05E db 0, 78h,0CCh,0F8h,0CCh,0F8h,0C0h,0C0h | |
| F000:E05E db 0,0FCh,0CCh,0C0h,0C0h,0C0h,0C0h, 0 | |
| F000:E05E db 0,0FEh, 6Ch, 6Ch, 6Ch, 6Ch, 6Ch, 0 | |
| F000:E05E db 0FCh,0CCh, 60h, 30h, 60h,0CCh,0FCh, 0 | |
| F000:E05E db 0, 0, 7Eh,0D8h,0D8h,0D8h, 70h, 0 | |
| F000:E05E db 0, 66h, 66h, 66h, 66h, 7Ch, 60h,0C0h | |
| F000:E05E db 0, 76h,0DCh, 18h, 18h, 18h, 18h, 0 | |
| F000:E05E db 0FCh, 30h, 78h,0CCh,0CCh, 78h, 30h,0FCh | |
| F000:E05E db 38h, 6Ch,0C6h,0FEh,0C6h, 6Ch, 38h, 0 | |
| F000:E05E db 38h, 6Ch,0C6h,0C6h, 6Ch, 6Ch,0EEh, 0 | |
| F000:E05E db 1Ch, 30h, 18h, 7Ch,0CCh,0CCh, 78h, 0 | |
| F000:E05E db 0, 0, 7Eh,0DBh,0DBh, 7Eh, 0, 0 | |
| F000:E05E db 6, 0Ch, 7Eh,0DBh,0DBh, 7Eh, 60h,0C0h | |
| F000:E05E db 38h, 60h,0C0h,0F8h,0C0h, 60h, 38h, 0 | |
| F000:E05E db 78h,0CCh,0CCh,0CCh,0CCh,0CCh,0CCh, 0 | |
| F000:E05E db 0,0FCh, 0,0FCh, 0,0FCh, 0, 0 | |
| F000:E05E db 30h, 30h,0FCh, 30h, 30h, 0,0FCh, 0 | |
| F000:E05E db 60h, 30h, 18h, 30h, 60h, 0,0FCh, 0 | |
| F000:E05E db 18h, 30h, 60h, 30h, 18h, 0,0FCh, 0 | |
| F000:E05E db 0Eh, 1Bh, 1Bh, 18h, 18h, 18h, 18h, 18h | |
| F000:E05E db 18h, 18h, 18h, 18h, 18h,0D8h,0D8h, 70h | |
| F000:E05E db 30h, 30h, 0,0FCh, 0, 30h, 30h, 0 | |
| F000:E05E db 0, 76h,0DCh, 0, 76h,0DCh, 0, 0 | |
| F000:E05E db 38h, 6Ch, 6Ch, 38h, 0, 0, 0, 0 | |
| F000:E05E db 0, 0, 0, 18h, 18h, 0, 0, 0 | |
| F000:E05E db 0, 0, 0, 0, 18h, 0, 0, 0 | |
| F000:E05E db 0Fh, 0Ch, 0Ch, 0Ch,0ECh, 6Ch, 3Ch, 1Ch | |
| F000:E05E db 78h, 6Ch, 6Ch, 6Ch, 6Ch, 0, 0, 0 | |
| F000:E05E db 70h, 18h, 30h, 60h, 78h, 0, 0, 0 | |
| F000:E05E db 0, 0, 3Ch, 3Ch, 3Ch, 3Ch, 0, 0 | |
| F000:E05E db 0, 0, 0, 0, 0, 0, 0, 0 | |
| F000:E45E ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E45E ; ----------------------------------------------------- | |
| F000:E45E ; set_ctype | |
| F000:E45E ; this routine sets the cursor value | |
| F000:E45E ; input | |
| F000:E45E ; (cx) has cursor value ch-start line, cl-stop line | |
| F000:E45E ; output | |
| F000:E45E ; none | |
| F000:E45E ; ------------------------------------------------------ | |
| F000:E45E set_ctype proc far ; CODE XREF: video_io+38j | |
| F000:E45E ; DATA XREF: F000:0CEBo | |
| F000:E45E cmp ah, 4 ; in graphics mode | |
| F000:E461 jb short c23x ; no, jump | |
| F000:E463 or ch, 20h ; yes, disable cursor | |
| F000:E466 c23x: ; CODE XREF: set_ctype+3j | |
| F000:E466 mov ah, crt6845_cursor_start ; 6845 register for cursor set | |
| F000:E468 mov ds:seg40.cursor_mode, cx ; save in data area | |
| F000:E46C call c23 ; output cx reg | |
| F000:E46F jmp video_return | |
| F000:E46F set_ctype endp | |
| F000:E472 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E472 ; this routine outputs the cx register to the 6845 regs named in ah | |
| F000:E472 c23 proc near ; CODE XREF: set_ctype+Ep | |
| F000:E472 ; c25+Dp act_disp_page+18p | |
| F000:E472 mov dx, ds:seg40.addr_6845 ; address register | |
| F000:E476 mov al, ah ; get value | |
| F000:E478 out dx, al ; register set | |
| F000:E479 inc dx ; data register | |
| F000:E47A mov al, ch ; data | |
| F000:E47C out dx, al | |
| F000:E47D dec dx | |
| F000:E47E mov al, ah | |
| F000:E480 inc al ; point to other data register | |
| F000:E482 out dx, al ; set for second register | |
| F000:E483 inc dx | |
| F000:E484 mov al, cl ; second data value | |
| F000:E486 out dx, al | |
| F000:E487 retn ; all done | |
| F000:E487 c23 endp | |
| F000:E488 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E488 set_cpos proc far ; CODE XREF: video_io+38j | |
| F000:E488 ; DATA XREF: F000:0CEDo | |
| F000:E488 mov cl, bh | |
| F000:E48A xor ch, ch | |
| F000:E48C shl cx, 1 | |
| F000:E48E mov si, cx | |
| F000:E490 mov [si+50h], dx | |
| F000:E494 cmp ds:62h, bh | |
| F000:E498 jnz short loc_FE49F | |
| F000:E49A mov ax, dx | |
| F000:E49C call c25 | |
| F000:E49F loc_FE49F: ; CODE XREF: set_cpos+10j | |
| F000:E49F jmp video_return | |
| F000:E49F set_cpos endp | |
| F000:E4A2 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E4A2 ; ----- set cursor position, ax has row/column for cursor | |
| F000:E4A2 c25 proc near ; CODE XREF: set_cpos+14p | |
| F000:E4A2 ; act_disp_page+22p | |
| F000:E4A2 call position ; determine location in regen buffer | |
| F000:E4A5 mov cx, ax | |
| F000:E4A7 add cx, ds:seg40.crt_start ; add in the start address for this page | |
| F000:E4AB sar cx, 1 ; divide by 2 for char only count | |
| F000:E4AD mov ah, 0Eh ; register number for cursor | |
| F000:E4AF call c23 ; output value to the 6845 | |
| F000:E4B2 retn | |
| F000:E4B2 c25 endp | |
| F000:E4B3 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E4B3 ; ----------------------------------------------------- | |
| F000:E4B3 ; act_disp_page | |
| F000:E4B3 ; this routine sets the active display page, allowing | |
| F000:E4B3 ; the full use of the ram set aside for the video attachment | |
| F000:E4B3 ; input | |
| F000:E4B3 ; al has the new active display | |
| F000:E4B3 ; output | |
| F000:E4B3 ; the 6845 is reset to display the page | |
| F000:E4B3 ; ----------------------------------------------------- | |
| F000:E4B3 act_disp_page proc far ; CODE XREF: video_io+38j | |
| F000:E4B3 ; DATA XREF: F000:0CF3o | |
| F000:E4B3 test al, 80h ; crt/cpu page reg function | |
| F000:E4B5 jnz short set_crtcpu ; yes, go handle it | |
| F000:E4B7 mov ds:seg40.active_page, al ; set active page value | |
| F000:E4BA mov cx, ds:seg40.crt_len ; get saved lenght of regen buffer | |
| F000:E4BE cbw ; convert al to word | |
| F000:E4BF push ax ; save page value | |
| F000:E4C0 mul cx ; display page times regen lenght | |
| F000:E4C2 mov ds:seg40.crt_start, ax ; save start address for later use | |
| F000:E4C5 mov cx, ax ; start address to cx | |
| F000:E4C7 sar cx, 1 ; divide by 2 for 6845 handling | |
| F000:E4C9 mov ah, crt6845_start_addr_hi ; 6845 register for start address | |
| F000:E4CB call c23 | |
| F000:E4CE pop bx ; recover page value | |
| F000:E4CF shl bx, 1 ; *2 for word offset | |
| F000:E4D1 mov ax, [bx+seg40.cursor_posn] ; get cursor for this page | |
| F000:E4D5 call c25 ; set cursor position | |
| F000:E4D8 jmp video_return | |
| F000:E4DB ; set_crtcpu | |
| F000:E4DB ; this routine reads or writes the crt/cpu page registers | |
| F000:E4DB ; input | |
| F000:E4DB ; al = 83h set both crt and cpu page regs | |
| F000:E4DB ; bh = value to set in crt page reg | |
| F000:E4DB ; bl = value to set in cpu page reg | |
| F000:E4DB ; al = 82h set crt page reg | |
| F000:E4DB ; bh = value to set in crt page reg | |
| F000:E4DB ; al = 81h set cpu page reg | |
| F000:E4DB ; bl = value to set in cpu page reg | |
| F000:E4DB ; al = 80h read current value of crt/cpu page regs | |
| F000:E4DB ; | |
| F000:E4DB ; output | |
| F000:E4DB ; all function returns | |
| F000:E4DB ; bh = current contents of page reg | |
| F000:E4DB ; bl = current contents of cpu reg | |
| F000:E4DB ;---------------------------------------------------- | |
| F000:E4DB set_crtcpu: ; CODE XREF: act_disp_page+2j | |
| F000:E4DB mov ah, al ; save request in ah | |
| F000:E4DD mov dx, 3DAh ; set address of gate array | |
| F000:E4E0 c26: ; CODE XREF: act_disp_page+30j | |
| F000:E4E0 in al, dx ; get status | |
| F000:E4E1 and al, 8 ; vertical retrace? | |
| F000:E4E3 jz short c26 ; no, wait for it | |
| F000:E4E5 mov dx, 3DFh ; set to address of page reg | |
| F000:E4E8 mov al, ds:seg40.pagdat ; get data last output to reg | |
| F000:E4EB cmp ah, 80h ; '' ; read function requested? | |
| F000:E4EE jz short c29 ; yes, don't set anything | |
| F000:E4F0 cmp ah, 84h ; '' ; valid request | |
| F000:E4F3 jnb short c29 ; no, pretend it was a read request | |
| F000:E4F5 test ah, 1 | |
| F000:E4F8 jz short c27 ; no, go see about crt reg | |
| F000:E4FA shl bl, 1 ; shift value to right shift position | |
| F000:E4FC shl bl, 1 | |
| F000:E4FE shl bl, 1 | |
| F000:E500 and al, 11000111b ; clear old cpu value | |
| F000:E502 and bl, 111000b ; be sure unrelated bits are zero | |
| F000:E505 or al, bl ; or in new value | |
| F000:E507 c27: ; CODE XREF: act_disp_page+45j | |
| F000:E507 test ah, 2 ; set crt reg? | |
| F000:E50A jz short c28 ; no, go return current settings | |
| F000:E50C and al, 11111000b ; clear old crt value | |
| F000:E50E and bh, 111b ; be sure unrelated bits are zero | |
| F000:E511 or al, bh ; or in new value | |
| F000:E513 c28: ; CODE XREF: act_disp_page+57j | |
| F000:E513 out dx, al ; set new values | |
| F000:E514 mov ds:seg40.pagdat, al ; save copy in ram | |
| F000:E517 c29: ; CODE XREF: act_disp_page+3Bj | |
| F000:E517 ; act_disp_page+40j | |
| F000:E517 mov bl, al ; get cpu reg value | |
| F000:E519 and bl, 111000b ; clear extra bits | |
| F000:E51C sar bl, 1 ; right justify in bl | |
| F000:E51E sar bl, 1 | |
| F000:E520 sar bl, 1 | |
| F000:E522 mov bh, al ; get crt reg value | |
| F000:E524 and bh, 111b ; clear extra bits | |
| F000:E527 pop di ; restore some regs | |
| F000:E528 pop si | |
| F000:E529 pop ax ; discard saved bx | |
| F000:E52A jmp c22 ; return | |
| F000:E52A act_disp_page endp | |
| F000:E52D ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E52D read_cursor proc far ; CODE XREF: video_io+38j | |
| F000:E52D ; DATA XREF: F000:0CEFo | |
| F000:E52D mov bl, bh | |
| F000:E52F xor bh, bh | |
| F000:E531 shl bx, 1 | |
| F000:E533 mov dx, [bx+50h] | |
| F000:E537 mov cx, ds:60h | |
| F000:E53B pop di | |
| F000:E53C pop si | |
| F000:E53D pop bx | |
| F000:E53E pop ax | |
| F000:E53F pop ax | |
| F000:E540 pop ds | |
| F000:E541 pop es | |
| F000:E542 iret | |
| F000:E542 read_cursor endp ; sp = 0Eh | |
| F000:E543 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E543 ; (int 0x10, ah=0x0b) | |
| F000:E543 ; This routine will establish the the background color, the | |
| F000:E543 ; overscan color, and the foregroud color set for graphics | |
| F000:E543 set_color proc far ; CODE XREF: video_io+38j | |
| F000:E543 ; DATA XREF: F000:0CFFo | |
| F000:E543 mov dx, 3DAh ; i/o port for palette | |
| F000:E546 c30: ; CODE XREF: set_color+6j | |
| F000:E546 in al, dx ; sync up vga for reg address | |
| F000:E547 test al, 8 ; is vertical retrace on? | |
| F000:E549 jz short c30 ; no, wait until it is | |
| F000:E54B or bh, bh ; is this color 0? | |
| F000:E54D jnz short c31 ; output color 1 | |
| F000:E54F ;----- handle color 0 by setting the background color and border color | |
| F000:E54F cmp byte ptr ds:seg40.crt_mode, 4 ; in alpha mode? | |
| F000:E554 jb short c305 ; yes, just set border reg | |
| F000:E556 mov al, 10h ; set palette reg 0 (black color) | |
| F000:E558 out dx, al ; select vga reg | |
| F000:E559 mov al, bl ; get color | |
| F000:E55B out dx, al ; set it | |
| F000:E55C c305: ; CODE XREF: set_color+11j | |
| F000:E55C mov al, 2 ; set border reg | |
| F000:E55E out dx, al ; select vga border reg | |
| F000:E55F mov al, bl ; get color | |
| F000:E561 out dx, al ; set it | |
| F000:E562 mov ds:seg40.crt_palette, al ; save the color value | |
| F000:E565 jmp video_return | |
| F000:E568 ;----- handle color 1 by changing palette registers | |
| F000:E568 c31: ; CODE XREF: set_color+Aj | |
| F000:E568 mov al, ds:seg40.crt_mode ; get current mode | |
| F000:E56B mov cx, offset moo72 ; point to 2 color table entry | |
| F000:E56E cmp al, 6 ; 2 color mode? | |
| F000:E570 jz short c33 ; yes, jump | |
| F000:E572 cmp al, 4 ; 4 color mode? | |
| F000:E574 jz short c32 ; yes, jump | |
| F000:E576 cmp al, 5 ; 4 color mode? | |
| F000:E578 jz short c32 ; yes, jump | |
| F000:E57A cmp al, 0Ah ; 4 color mode? | |
| F000:E57C jnz short c36 ; no, go to 16 color set up | |
| F000:E57E c32: ; CODE XREF: set_color+31j | |
| F000:E57E ; set_color+35j | |
| F000:E57E mov cx, offset moo74 ; point to 4 color table entry | |
| F000:E581 c33: ; CODE XREF: set_color+2Dj | |
| F000:E581 ror bl, 1 ; select alternate set? | |
| F000:E583 jnb short c34 ; no, jump | |
| F000:E585 add cx, 4 ; point to next entry | |
| F000:E588 c34: ; CODE XREF: set_color+40j | |
| F000:E588 mov bx, cx ; table address in bx | |
| F000:E58A inc bx ; skip over background color (background is set with bh=0) | |
| F000:E58B mov cx, 3 ; set number of regs to fill | |
| F000:E58E mov ah, 11h ; ah is register counter | |
| F000:E590 c35: ; CODE XREF: set_color+57j | |
| F000:E590 mov al, ah ; get reg number | |
| F000:E592 out dx, al ; select it | |
| F000:E593 mov al, cs:[bx] ; get data | |
| F000:E596 out dx, al ; set it | |
| F000:E597 inc ah ; next reg | |
| F000:E599 inc bx ; next table value | |
| F000:E59A loop c35 | |
| F000:E59C jmp short c38 | |
| F000:E59E c36: ; CODE XREF: set_color+39j | |
| F000:E59E mov ah, 11h ; ah is register counter (starting from blue) | |
| F000:E5A0 mov cx, 0Fh ; number of palettes | |
| F000:E5A3 c37: ; CODE XREF: set_color+66j | |
| F000:E5A3 mov al, ah ; get reg number (why using ah? just by using al should be fine) | |
| F000:E5A5 out dx, al ; select it | |
| F000:E5A6 out dx, al ; set palette value (sets default colors... assuming color 0x11 is same as color 0x01) | |
| F000:E5A7 inc ah ; next reg | |
| F000:E5A9 loop c37 | |
| F000:E5AB c38: ; CODE XREF: set_color+59j | |
| F000:E5AB xor al, al ; select log reg to enable video again | |
| F000:E5AD out dx, al ; Video: bits 0-1 control | |
| F000:E5AD ; Feature Control outputs FC0 and FC1 | |
| F000:E5AE jmp video_return | |
| F000:E5AE set_color endp | |
| F000:E5B1 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E5B1 video_state proc far ; CODE XREF: video_io+38j | |
| F000:E5B1 ; DATA XREF: F000:0D07o | |
| F000:E5B1 mov ah, ds:seg40.crt_cols | |
| F000:E5B5 mov al, ds:seg40.crt_mode | |
| F000:E5B8 mov bh, ds:seg40.active_page | |
| F000:E5BC pop di | |
| F000:E5BD pop si | |
| F000:E5BE pop cx | |
| F000:E5BF jmp c22 | |
| F000:E5BF video_state endp | |
| F000:E5C2 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E5C2 position proc near ; CODE XREF: c25p sub_FE609p | |
| F000:E5C2 ; find_position:loc_FF10Dp | |
| F000:E5C2 push bx | |
| F000:E5C3 mov bx, ax | |
| F000:E5C5 mov al, ah | |
| F000:E5C7 mul byte ptr ds:seg40.crt_cols | |
| F000:E5CB xor bh, bh | |
| F000:E5CD add ax, bx | |
| F000:E5CF shl ax, 1 | |
| F000:E5D1 pop bx | |
| F000:E5D2 retn | |
| F000:E5D2 position endp | |
| F000:E5D3 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E5D3 scroll_up proc far ; CODE XREF: video_io+38j | |
| F000:E5D3 ; DATA XREF: F000:0CF5o | |
| F000:E5D3 mov bl, al | |
| F000:E5D5 cmp ah, 4 | |
| F000:E5D8 jb short loc_FE5DD | |
| F000:E5DA jmp near ptr graphics_up | |
| F000:E5DD loc_FE5DD: ; CODE XREF: scroll_up+5j | |
| F000:E5DD push bx | |
| F000:E5DE mov ax, cx | |
| F000:E5E0 call sub_FE609 | |
| F000:E5E3 jz short loc_FE605 | |
| F000:E5E5 add si, ax | |
| F000:E5E7 mov ah, dh | |
| F000:E5E9 sub ah, bl | |
| F000:E5EB loc_FE5EB: ; CODE XREF: scroll_up+21j | |
| F000:E5EB call sub_FE62F | |
| F000:E5EE add si, bp | |
| F000:E5F0 add di, bp | |
| F000:E5F2 dec ah | |
| F000:E5F4 jnz short loc_FE5EB | |
| F000:E5F6 loc_FE5F6: ; CODE XREF: scroll_up+34j | |
| F000:E5F6 pop ax | |
| F000:E5F7 mov al, 20h ; ' ' | |
| F000:E5F9 loc_FE5F9: ; CODE XREF: scroll_up+2Dj | |
| F000:E5F9 call sub_FE638 | |
| F000:E5FC add di, bp | |
| F000:E5FE dec bl | |
| F000:E600 jnz short loc_FE5F9 | |
| F000:E602 loc_FE602: ; CODE XREF: scroll_down+30j | |
| F000:E602 jmp video_return | |
| F000:E605 loc_FE605: ; CODE XREF: scroll_up+10j | |
| F000:E605 mov bl, dh | |
| F000:E607 jmp short loc_FE5F6 | |
| F000:E607 scroll_up endp | |
| F000:E609 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E609 sub_FE609 proc near ; CODE XREF: scroll_up+Dp | |
| F000:E609 ; scroll_down+Ep | |
| F000:E609 call position | |
| F000:E60C add ax, ds:seg40.crt_start | |
| F000:E610 mov di, ax | |
| F000:E612 mov si, ax | |
| F000:E614 sub dx, cx | |
| F000:E616 inc dh | |
| F000:E618 inc dl | |
| F000:E61A xor ch, ch | |
| F000:E61C mov bp, ds:seg40.crt_cols | |
| F000:E620 add bp, bp | |
| F000:E622 mov al, bl | |
| F000:E624 mul byte ptr ds:seg40.crt_cols | |
| F000:E628 add ax, ax | |
| F000:E62A push es | |
| F000:E62B pop ds | |
| F000:E62C or bl, bl | |
| F000:E62E retn | |
| F000:E62E sub_FE609 endp | |
| F000:E62F ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E62F sub_FE62F proc near ; CODE XREF: scroll_up:loc_FE5EBp | |
| F000:E62F ; scroll_down:loc_FE658p | |
| F000:E62F mov cl, dl | |
| F000:E631 push si | |
| F000:E632 push di | |
| F000:E633 rep movsw | |
| F000:E635 pop di | |
| F000:E636 pop si | |
| F000:E637 retn | |
| F000:E637 sub_FE62F endp | |
| F000:E638 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E638 sub_FE638 proc near ; CODE XREF: scroll_up:loc_FE5F9p | |
| F000:E638 ; scroll_down:loc_FE666p | |
| F000:E638 mov cl, dl | |
| F000:E63A push di | |
| F000:E63B rep stosw | |
| F000:E63D pop di | |
| F000:E63E retn | |
| F000:E63E sub_FE638 endp | |
| F000:E63F ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E63F scroll_down proc far ; CODE XREF: video_io+38j | |
| F000:E63F ; DATA XREF: F000:0CF7o | |
| F000:E63F std | |
| F000:E640 mov bl, al | |
| F000:E642 cmp ah, 4 | |
| F000:E645 jb short loc_FE64A | |
| F000:E647 jmp near ptr graphics_down | |
| F000:E64A loc_FE64A: ; CODE XREF: scroll_down+6j | |
| F000:E64A push bx | |
| F000:E64B mov ax, dx | |
| F000:E64D call sub_FE609 | |
| F000:E650 jz short loc_FE671 | |
| F000:E652 sub si, ax | |
| F000:E654 mov ah, dh | |
| F000:E656 sub ah, bl | |
| F000:E658 loc_FE658: ; CODE XREF: scroll_down+22j | |
| F000:E658 call sub_FE62F | |
| F000:E65B sub si, bp | |
| F000:E65D sub di, bp | |
| F000:E65F dec ah | |
| F000:E661 jnz short loc_FE658 | |
| F000:E663 loc_FE663: ; CODE XREF: scroll_down+34j | |
| F000:E663 pop ax | |
| F000:E664 mov al, 20h ; ' ' | |
| F000:E666 loc_FE666: ; CODE XREF: scroll_down+2Ej | |
| F000:E666 call sub_FE638 | |
| F000:E669 sub di, bp | |
| F000:E66B dec bl | |
| F000:E66D jnz short loc_FE666 | |
| F000:E66F jmp short loc_FE602 | |
| F000:E671 loc_FE671: ; CODE XREF: scroll_down+11j | |
| F000:E671 mov bl, dh | |
| F000:E673 jmp short loc_FE663 | |
| F000:E673 scroll_down endp | |
| F000:E675 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E675 ; this routine reads 256 locations in memory as every other | |
| F000:E675 ; location in 512 locations. this is to insure the data | |
| F000:E675 ; integrity of memory during mode changes | |
| F000:E675 mode_alive proc near ; CODE XREF: set_mode+ABp | |
| F000:E675 ; set_mode+D0p | |
| F000:E675 push ax ; saved used regs | |
| F000:E676 push si | |
| F000:E677 push cx | |
| F000:E678 xor si, si | |
| F000:E67A mov cx, 100h | |
| F000:E67D c52: ; CODE XREF: mode_alive+Aj | |
| F000:E67D lodsb | |
| F000:E67E inc si | |
| F000:E67F loop c52 | |
| F000:E681 pop cx | |
| F000:E682 pop si | |
| F000:E683 pop ax | |
| F000:E684 retn | |
| F000:E684 mode_alive endp | |
| F000:E685 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E685 set_palette proc far ; CODE XREF: video_io+38j | |
| F000:E685 ; DATA XREF: F000:0D09o | |
| F000:E685 push ax | |
| F000:E686 mov si, sp | |
| F000:E688 mov ax, ss:[si+0Ch] | |
| F000:E68C mov es, ax | |
| F000:E68E mov si, dx | |
| F000:E690 mov dx, 3DAh | |
| F000:E693 c53: ; CODE XREF: set_palette+11j | |
| F000:E693 in al, dx | |
| F000:E694 and al, 8 ; in vertical retrace? | |
| F000:E696 jnz short c53 ; yes, wait for it to go away | |
| F000:E698 c54: ; CODE XREF: set_palette+16j | |
| F000:E698 in al, dx ; get vga status | |
| F000:E699 and al, 8 ; in vertical retrace? | |
| F000:E69B jz short c54 ; no, wait for it | |
| F000:E69D pop ax | |
| F000:E69E or al, al ; set palette reg? | |
| F000:E6A0 jz short c55 ; yes, go do it | |
| F000:E6A2 cmp al, 2 ; set all regs? | |
| F000:E6A4 jz short c57 | |
| F000:E6A6 cmp al, 1 ; set border color reg? | |
| F000:E6A8 jnz short c59 ; no, don't do anything | |
| F000:E6AA mov al, 2 | |
| F000:E6AC jmp short c56 | |
| F000:E6AE c55: ; CODE XREF: set_palette+1Bj | |
| F000:E6AE mov al, bl ; get desired reg number in al | |
| F000:E6B0 and al, 0Fh ; strip unused bits | |
| F000:E6B2 or al, 10h ; make it into real reg number | |
| F000:E6B4 c56: ; CODE XREF: set_palette+27j | |
| F000:E6B4 out dx, al ; select reg | |
| F000:E6B5 mov al, bh ; get data in al | |
| F000:E6B7 out dx, al ; set new data | |
| F000:E6B8 xor al, al ; set reg 0 so display works again | |
| F000:E6BA out dx, al | |
| F000:E6BB jmp short c59 | |
| F000:E6BD c57: ; CODE XREF: set_palette+1Fj | |
| F000:E6BD mov ah, 10h ; ah is reg counter | |
| F000:E6BF c58: ; CODE XREF: set_palette+47j | |
| F000:E6BF mov al, ah ; reg address in al | |
| F000:E6C1 out dx, al ; select it | |
| F000:E6C2 mov al, es:[si] ; get data | |
| F000:E6C5 out dx, al ; put in vga reg | |
| F000:E6C6 inc si ; next data byte | |
| F000:E6C7 inc ah ; next reg | |
| F000:E6C9 cmp ah, 20h ; ' ' ; last palette reg? | |
| F000:E6CC jb short c58 ; no, do next one | |
| F000:E6CE mov al, 2 ; set border reg | |
| F000:E6D0 out dx, al ; select it | |
| F000:E6D1 mov al, es:[si] ; get data | |
| F000:E6D4 out dx, al ; put in vga reg | |
| F000:E6D5 c59: ; CODE XREF: set_palette+23j | |
| F000:E6D5 ; set_palette+36j | |
| F000:E6D5 jmp video_return | |
| F000:E6D5 set_palette endp | |
| F000:E6D8 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E6D8 mfg_up proc near ; CODE XREF: F000:01F5p | |
| F000:E6D8 ; F000:0260p F000:02A0p | |
| F000:E6D8 ; F000:pod_13_endp | |
| F000:E6D8 ; F000:04CCp F000:0503p ... | |
| F000:E6D8 push ax | |
| F000:E6D9 push ds | |
| F000:E6DA mov ax, 50h ; 'P' | |
| F000:E6DD mov ds, ax | |
| F000:E6DF mov al, ds:seg50.mfg_tst ; get mfg checkpoint | |
| F000:E6E2 out 10h, al ; output it to tester | |
| F000:E6E4 dec al ; drop it by one for next test | |
| F000:E6E6 mov ds:seg50.mfg_tst, al | |
| F000:E6E9 pop ds | |
| F000:E6EA pop ax | |
| F000:E6EB retn | |
| F000:E6EB mfg_up endp | |
| F000:E6EC db 6 dup(0) | |
| F000:E6F2 jmp boot_strap | |
| F000:E6F5 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E6F5 svi proc near ; CODE XREF: uart:at2p | |
| F000:E6F5 ; uart:at3p uart:at7p | |
| F000:E6F5 ; uart:at9p | |
| F000:E6F5 push ax | |
| F000:E6F6 sti ; enable maskable external interrupts | |
| F000:E6F7 mov ah, cs:[di] ; get interrupt bit mask | |
| F000:E6FA and ds:seg40.intr_flag, ah ; clear 8259 interrupt rec'd flag bit | |
| F000:E6FE in al, 21h ; current interrupts | |
| F000:E700 and al, ah ; enable this interrupt, too | |
| F000:E702 out 21h, al ; write to 8259 (interrupt controller) | |
| F000:E704 pop ax | |
| F000:E705 retn | |
| F000:E705 svi endp | |
| F000:E706 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E706 c5059 proc near ; CODE XREF: uart+3Ep | |
| F000:E706 ; uart:at32p uart+9Ap | |
| F000:E706 ; uart+DBp | |
| F000:E706 push cx | |
| F000:E707 sub cx, cx | |
| F000:E709 mov al, cs:[di] | |
| F000:E70C xor al, 0FFh | |
| F000:E70E at25: ; CODE XREF: c5059+Ej | |
| F000:E70E test ds:seg40.intr_flag, al | |
| F000:E712 jnz short at27 | |
| F000:E714 loop at25 | |
| F000:E716 stc | |
| F000:E717 at27: ; CODE XREF: c5059+Cj | |
| F000:E717 pop cx | |
| F000:E718 retn | |
| F000:E718 c5059 endp | |
| F000:E719 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E719 w8250c proc near ; CODE XREF: uart+48p | |
| F000:E719 ; uart+6Cp uart+A2p | |
| F000:E719 ; uart+E3p | |
| F000:E719 push cx | |
| F000:E71A sub cx, cx | |
| F000:E71C at28: ; CODE XREF: w8250c+8j | |
| F000:E71C in al, dx | |
| F000:E71D cmp al, 1 | |
| F000:E71F jz short at29 | |
| F000:E721 loop at28 | |
| F000:E723 stc | |
| F000:E724 jmp short at30 | |
| F000:E726 at29: ; CODE XREF: w8250c+6j | |
| F000:E726 clc | |
| F000:E727 at30: ; CODE XREF: w8250c+Bj | |
| F000:E727 pop cx | |
| F000:E728 retn | |
| F000:E728 w8250c endp | |
| F000:E729 a1 dw 1017 ; DATA XREF: rs232_io+44o | |
| F000:E729 ; 110 baud - table of init value | |
| F000:E72B dw 746 ; 150 | |
| F000:E72D dw 373 ; 300 | |
| F000:E72F dw 186 ; 600 | |
| F000:E731 dw 93 ; 1200 | |
| F000:E733 dw 47 ; 2400 | |
| F000:E735 dw 23 ; 4800 | |
| F000:E737 dw 23 ; 4800 | |
| F000:E739 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E739 rs232_io proc far ; DATA XREF: F000:FF0Bo | |
| F000:E739 sti | |
| F000:E73A push ds | |
| F000:E73B push dx | |
| F000:E73C push si | |
| F000:E73D push di | |
| F000:E73E push cx | |
| F000:E73F push bx | |
| F000:E740 mov si, dx | |
| F000:E742 mov di, dx | |
| F000:E744 shl si, 1 | |
| F000:E746 call dss | |
| F000:E749 mov dx, [si+seg40.rs232_base] | |
| F000:E74D or dx, dx | |
| F000:E74F jz short a3 | |
| F000:E751 or ah, ah | |
| F000:E753 jz short a4 | |
| F000:E755 dec ah | |
| F000:E757 jz short a5 | |
| F000:E759 dec ah | |
| F000:E75B jz short a12 | |
| F000:E75D dec ah | |
| F000:E75F jnz short a3 | |
| F000:E761 jmp a18 | |
| F000:E764 a3: ; CODE XREF: rs232_io+16j | |
| F000:E764 ; rs232_io+26j rs232_io+7Dj | |
| F000:E764 ; rs232_io+8Ej rs232_io+B7j | |
| F000:E764 ; rs232_io+C6j | |
| F000:E764 pop bx | |
| F000:E765 pop cx | |
| F000:E766 pop di | |
| F000:E767 pop si | |
| F000:E768 pop dx | |
| F000:E769 pop ds | |
| F000:E76A iret | |
| F000:E76B a4: ; CODE XREF: rs232_io+1Aj | |
| F000:E76B mov ah, al | |
| F000:E76D add dx, 3 | |
| F000:E770 mov al, 80h ; '' | |
| F000:E772 out dx, al | |
| F000:E773 mov dl, ah | |
| F000:E775 mov cl, 4 | |
| F000:E777 rol dl, cl | |
| F000:E779 and dx, 0Eh | |
| F000:E77D mov di, offset a1 | |
| F000:E780 add di, dx | |
| F000:E782 mov dx, [si+seg40.rs232_base] | |
| F000:E786 inc dx | |
| F000:E787 mov al, cs:[di+1] | |
| F000:E78B out dx, al | |
| F000:E78C dec dx | |
| F000:E78D mov al, cs:[di] | |
| F000:E790 out dx, al | |
| F000:E791 add dx, 3 | |
| F000:E794 mov al, ah | |
| F000:E796 and al, 1Fh | |
| F000:E798 out dx, al | |
| F000:E799 dec dx | |
| F000:E79A dec dx | |
| F000:E79B mov al, 0 | |
| F000:E79D out dx, al | |
| F000:E79E jmp short a18 | |
| F000:E7A0 a5: ; CODE XREF: rs232_io+1Ej | |
| F000:E7A0 push ax | |
| F000:E7A1 add dx, 4 | |
| F000:E7A4 mov al, 3 | |
| F000:E7A6 out dx, al | |
| F000:E7A7 inc dx | |
| F000:E7A8 inc dx | |
| F000:E7A9 mov bh, 30h ; '0' | |
| F000:E7AB call wait_for_status | |
| F000:E7AE jz short a9 | |
| F000:E7B0 a7: ; CODE XREF: rs232_io+85j | |
| F000:E7B0 pop cx | |
| F000:E7B1 mov al, cl | |
| F000:E7B3 a8: ; CODE XREF: rs232_io+9Dj | |
| F000:E7B3 ; rs232_io+ACj | |
| F000:E7B3 or ah, 80h | |
| F000:E7B6 jmp short a3 | |
| F000:E7B8 a9: ; CODE XREF: rs232_io+75j | |
| F000:E7B8 dec dx | |
| F000:E7B9 mov bh, 20h ; ' ' | |
| F000:E7BB call wait_for_status | |
| F000:E7BE jnz short a7 | |
| F000:E7C0 sub dx, 5 | |
| F000:E7C3 pop cx | |
| F000:E7C4 mov al, cl | |
| F000:E7C6 out dx, al | |
| F000:E7C7 jmp short a3 | |
| F000:E7C9 a12: ; CODE XREF: rs232_io+22j | |
| F000:E7C9 add dx, 4 | |
| F000:E7CC mov al, 1 | |
| F000:E7CE out dx, al | |
| F000:E7CF inc dx | |
| F000:E7D0 inc dx | |
| F000:E7D1 mov bh, 20h ; ' ' | |
| F000:E7D3 call wait_for_status | |
| F000:E7D6 jnz short a8 | |
| F000:E7D8 dec dx | |
| F000:E7D9 a16: ; CODE XREF: rs232_io+AAj | |
| F000:E7D9 in al, dx | |
| F000:E7DA test al, 1 | |
| F000:E7DC jnz short a17 | |
| F000:E7DE test byte ptr ds:seg40.bios_break, 80h | |
| F000:E7E3 jz short a16 | |
| F000:E7E5 jmp short a8 | |
| F000:E7E7 a17: ; CODE XREF: rs232_io+A3j | |
| F000:E7E7 and al, 1Eh | |
| F000:E7E9 mov ah, al | |
| F000:E7EB mov dx, [si+seg40.rs232_base] | |
| F000:E7EF in al, dx | |
| F000:E7F0 jmp a3 | |
| F000:E7F3 a18: ; CODE XREF: rs232_io+28j | |
| F000:E7F3 ; rs232_io+65j | |
| F000:E7F3 mov dx, [si+seg40.rs232_base] | |
| F000:E7F7 add dx, 5 | |
| F000:E7FA in al, dx | |
| F000:E7FB mov ah, al | |
| F000:E7FD inc dx | |
| F000:E7FE in al, dx | |
| F000:E7FF jmp a3 | |
| F000:E7FF rs232_io endp | |
| F000:E802 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E802 wait_for_status proc near ; CODE XREF: rs232_io+72p | |
| F000:E802 ; rs232_io+82p rs232_io+9Ap | |
| F000:E802 mov bl, [di+seg40.rs232_tim_out] | |
| F000:E806 wfs0: ; CODE XREF: wait_for_status+13j | |
| F000:E806 sub cx, cx | |
| F000:E808 wfs1: ; CODE XREF: wait_for_status+Fj | |
| F000:E808 in al, dx | |
| F000:E809 mov ah, al | |
| F000:E80B and al, bh | |
| F000:E80D cmp al, bh | |
| F000:E80F jz short wfs_end | |
| F000:E811 loop wfs1 | |
| F000:E813 dec bl | |
| F000:E815 jnz short wfs0 | |
| F000:E817 or bh, bh | |
| F000:E819 wfs_end: ; CODE XREF: wait_for_status+Dj | |
| F000:E819 retn | |
| F000:E819 wait_for_status endp | |
| F000:E81A ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E81A ; ----------------------------------------------------- | |
| F000:E81A ; this routine will read timer1. the value read is returned in ax | |
| F000:E81A ; ----------------------------------------------------- | |
| F000:E81A read_time proc near ; CODE XREF: rw_opn+CAp | |
| F000:E81A ; rw_opn+131p | |
| F000:E81A mov al, 1000000b ; latch timer1 | |
| F000:E81C out 43h, al | |
| F000:E81E push ax ; wait for 8253 to init itself | |
| F000:E81F pop ax | |
| F000:E820 in al, 41h ; read lsb | |
| F000:E822 mov ah, al ; save it in high byte | |
| F000:E824 push ax ; wait for 8253 to init itself | |
| F000:E825 pop ax | |
| F000:E826 in al, 41h ; read msb | |
| F000:E828 xchg al, ah ; put bytes in proper order | |
| F000:E82A retn | |
| F000:E82A read_time endp | |
| F000:E82B db 0 | |
| F000:E82C db 0 | |
| F000:E82D db 0 | |
| F000:E82E jmp near ptr keyboard_io | |
| F000:E831 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E831 uart proc near ; CODE XREF: F000:078Bp | |
| F000:E831 ; F000:07A2p | |
| F000:E831 push ds | |
| F000:E832 in al, 21h ; current enabled interrupts | |
| F000:E834 push ax ; save for exit | |
| F000:E835 or al, 1 ; disable timer intr during this test | |
| F000:E837 out 21h, al | |
| F000:E839 pushf | |
| F000:E83A push dx | |
| F000:E83B call dss | |
| F000:E83E call i8250 | |
| F000:E841 jnb short at1 | |
| F000:E843 jmp at14 | |
| F000:E846 at1: ; CODE XREF: uart+10j | |
| F000:E846 mov di, offset imasks | |
| F000:E849 xor si, si | |
| F000:E84B cmp dh, 2 | |
| F000:E84E jnz short at2 | |
| F000:E850 inc si | |
| F000:E851 inc di | |
| F000:E852 at2: ; CODE XREF: uart+1Dj | |
| F000:E852 call svi | |
| F000:E855 inc bl | |
| F000:E857 inc dx | |
| F000:E858 mov al, 1 | |
| F000:E85A out dx, al | |
| F000:E85B push bx | |
| F000:E85C add dx, 4 | |
| F000:E85F mov ah, 1 | |
| F000:E861 mov bx, 400h | |
| F000:E864 mov cx, 3 | |
| F000:E867 call ict | |
| F000:E86A pop bx | |
| F000:E86B cmp al, 0FFh | |
| F000:E86D jz short at4 | |
| F000:E86F call c5059 | |
| F000:E872 jb short at5 | |
| F000:E874 dec dx | |
| F000:E875 dec dx | |
| F000:E876 in al, dx | |
| F000:E877 inc dx | |
| F000:E878 inc dx | |
| F000:E879 call w8250c | |
| F000:E87C jnb short at3 | |
| F000:E87E jmp at13 | |
| F000:E881 at3: ; CODE XREF: uart+4Bj | |
| F000:E881 call svi | |
| F000:E884 inc bl | |
| F000:E886 dec dx | |
| F000:E887 mov al, 2 | |
| F000:E889 out dx, al | |
| F000:E88A jmp short $+2 | |
| F000:E88C inc dx | |
| F000:E88D sub cx, cx | |
| F000:E88F at31: ; CODE XREF: uart+63j | |
| F000:E88F in al, dx | |
| F000:E890 cmp al, 2 | |
| F000:E892 jz short at32 | |
| F000:E894 loop at31 | |
| F000:E896 jmp short at6 | |
| F000:E898 at32: ; CODE XREF: uart+61j | |
| F000:E898 call c5059 | |
| F000:E89B jb short at5 | |
| F000:E89D call w8250c | |
| F000:E8A0 jnb short at6 | |
| F000:E8A2 jmp at13 | |
| F000:E8A5 at4: ; CODE XREF: uart+3Cj | |
| F000:E8A5 jmp short at11 | |
| F000:E8A7 at5: ; CODE XREF: uart+41j | |
| F000:E8A7 ; uart+6Aj | |
| F000:E8A7 jmp short at10 | |
| F000:E8A9 at6: ; CODE XREF: uart+65j | |
| F000:E8A9 ; uart+6Fj | |
| F000:E8A9 dec dx | |
| F000:E8AA mov al, 4 | |
| F000:E8AC out dx, al | |
| F000:E8AD add dx, 4 | |
| F000:E8B0 mov cx, 3 | |
| F000:E8B3 mov bp, 4 | |
| F000:E8B6 mov ah, 2 | |
| F000:E8B8 at7: ; CODE XREF: uart+AFj | |
| F000:E8B8 call svi | |
| F000:E8BB inc bl | |
| F000:E8BD push bx | |
| F000:E8BE mov bx, 601h | |
| F000:E8C1 call ict | |
| F000:E8C4 pop bx | |
| F000:E8C5 and al, 1Eh | |
| F000:E8C7 cmp al, ah | |
| F000:E8C9 jnz short at11 | |
| F000:E8CB call c5059 | |
| F000:E8CE jb short at10 | |
| F000:E8D0 sub dx, 3 | |
| F000:E8D3 call w8250c | |
| F000:E8D6 jb short at13 | |
| F000:E8D8 dec bp | |
| F000:E8D9 jz short at8 | |
| F000:E8DB shl ah, 1 | |
| F000:E8DD add dx, 3 | |
| F000:E8E0 jmp short at7 | |
| F000:E8E2 at8: ; CODE XREF: uart+A8j | |
| F000:E8E2 add dx, 4 | |
| F000:E8E5 in al, dx | |
| F000:E8E6 jmp short $+2 | |
| F000:E8E8 sub dx, 5 | |
| F000:E8EB mov al, 8 | |
| F000:E8ED out dx, al | |
| F000:E8EE add dx, 5 | |
| F000:E8F1 mov cx, 4 | |
| F000:E8F4 mov bp, 4 | |
| F000:E8F7 mov ah, 1 | |
| F000:E8F9 at9: ; CODE XREF: uart+F0j | |
| F000:E8F9 call svi | |
| F000:E8FC inc bl | |
| F000:E8FE push bx | |
| F000:E8FF mov bx, 1 | |
| F000:E902 call ict | |
| F000:E905 pop bx | |
| F000:E906 and al, 0Fh | |
| F000:E908 cmp al, ah | |
| F000:E90A jnz short at11 | |
| F000:E90C call c5059 | |
| F000:E90F jb short at10 | |
| F000:E911 sub dx, 4 | |
| F000:E914 call w8250c | |
| F000:E917 jb short at13 | |
| F000:E919 dec bp | |
| F000:E91A jz short at12 | |
| F000:E91C shl ah, 1 | |
| F000:E91E add dx, 4 | |
| F000:E921 jmp short at9 | |
| F000:E923 at10: ; CODE XREF: uart:at5j | |
| F000:E923 ; uart+9Dj uart+DEj | |
| F000:E923 mov bl, 10h | |
| F000:E925 at11: ; CODE XREF: uart:at4j | |
| F000:E925 ; uart+98j uart+D9j | |
| F000:E925 jmp short at14 | |
| F000:E927 at12: ; CODE XREF: uart+E9j | |
| F000:E927 inc dx | |
| F000:E928 call s8250 | |
| F000:E92B add dx, 4 | |
| F000:E92E in al, dx | |
| F000:E92F jmp short $+2 | |
| F000:E931 or al, 10h | |
| F000:E933 out dx, al | |
| F000:E934 jmp short $+2 | |
| F000:E936 inc dx | |
| F000:E937 inc dx | |
| F000:E938 in al, dx | |
| F000:E939 jmp short $+2 | |
| F000:E93B sub dx, 6 | |
| F000:E93E in al, dx | |
| F000:E93F inc dx | |
| F000:E940 mov al, 0 | |
| F000:E942 int 84h ; do loop back transmisison test (int wrap) | |
| F000:E944 mov cl, 0 | |
| F000:E946 jnb short at15 | |
| F000:E948 at13: ; CODE XREF: uart+4Dj | |
| F000:E948 ; uart+71j uart+A5j | |
| F000:E948 ; uart+E6j | |
| F000:E948 add bl, 10h | |
| F000:E94B at14: ; CODE XREF: uart+12j | |
| F000:E94B ; uart:at11j | |
| F000:E94B mov cl, 1 | |
| F000:E94D at15: ; CODE XREF: uart+115j | |
| F000:E94D pop dx | |
| F000:E94E push bx | |
| F000:E94F call i8250 | |
| F000:E952 pop bx | |
| F000:E953 mov ah, cs:[di] ; get device interrupt mask | |
| F000:E956 and ds:seg40.intr_flag, ah ; clear device's interrupt list | |
| F000:E95A xor ah, 0FFh ; flip bits | |
| F000:E95D in al, 21h ; get current interrupt port | |
| F000:E95F or al, ah ; disable this device interrupt | |
| F000:E961 out 21h, al | |
| F000:E963 popf | |
| F000:E964 or cl, cl | |
| F000:E966 jz short at17 | |
| F000:E968 mov bh, 24h ; '$' | |
| F000:E96A cmp dh, 2 | |
| F000:E96D jnz short at16 | |
| F000:E96F mov bh, 23h ; '#' | |
| F000:E971 at16: ; CODE XREF: uart+13Cj | |
| F000:E971 stc | |
| F000:E972 jmp short at18 | |
| F000:E974 at17: ; CODE XREF: uart+135j | |
| F000:E974 clc | |
| F000:E975 at18: ; CODE XREF: uart+141j | |
| F000:E975 pop ax ; restore entry enabled interrupts | |
| F000:E976 out 21h, al ; device intrs re-estrablished | |
| F000:E978 pop ds | |
| F000:E979 retn | |
| F000:E979 uart endp | |
| F000:E97A db 0Dh dup(0) | |
| F000:E987 jmp near ptr kb_int | |
| F000:E98A ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E98A nec_output proc near ; CODE XREF: get_parm+2Aj | |
| F000:E98A ; seek+28p seek+2Dp | |
| F000:E98A ; seek+40p seek+45p | |
| F000:E98A ; seek+4Ap ... | |
| F000:E98A push dx | |
| F000:E98B push cx | |
| F000:E98C mov dx, 0F4h ; 'ô' | |
| F000:E98F xor cx, cx | |
| F000:E991 j23: ; CODE XREF: nec_output+Cj | |
| F000:E991 in al, dx | |
| F000:E992 test al, 40h | |
| F000:E994 jz short j25 | |
| F000:E996 loop j23 | |
| F000:E998 j24: ; CODE XREF: nec_output+21j | |
| F000:E998 or byte ptr ds:41h, 80h | |
| F000:E99D pop cx | |
| F000:E99E pop dx | |
| F000:E99F pop ax | |
| F000:E9A0 stc | |
| F000:E9A1 retn | |
| F000:E9A2 j25: ; CODE XREF: nec_output+Aj | |
| F000:E9A2 xor cx, cx | |
| F000:E9A4 j26: ; CODE XREF: nec_output+1Fj | |
| F000:E9A4 in al, dx | |
| F000:E9A5 test al, 80h | |
| F000:E9A7 jnz short j27 | |
| F000:E9A9 loop j26 | |
| F000:E9AB jmp short j24 | |
| F000:E9AD j27: ; CODE XREF: nec_output+1Dj | |
| F000:E9AD mov al, ah | |
| F000:E9AF inc dx | |
| F000:E9B0 out dx, al | |
| F000:E9B1 pop cx | |
| F000:E9B2 pop dx | |
| F000:E9B3 retn | |
| F000:E9B3 nec_output endp | |
| F000:E9B4 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E9B4 get_parm proc near ; CODE XREF: seek+54p | |
| F000:E9B4 ; num_trans+Dp | |
| F000:E9B4 ; diskette_io+16p | |
| F000:E9B4 ; disk_reset+48p | |
| F000:E9B4 ; disk_reset+4Dp rw_opn-1Bp ... | |
| F000:E9B4 push ds | |
| F000:E9B5 push si | |
| F000:E9B6 sub ax, ax | |
| F000:E9B8 xor bh, bh | |
| F000:E9BA mov ds, ax | |
| F000:E9BC lds si, ds:78h ; int 1e address | |
| F000:E9C0 shr bx, 1 | |
| F000:E9C2 pushf | |
| F000:E9C3 mov ah, [bx+si] | |
| F000:E9C5 cmp bx, 1 | |
| F000:E9C8 jnz short j27_1 | |
| F000:E9CA or ah, 1 | |
| F000:E9CD jmp short j27_2 | |
| F000:E9CF j27_1: ; CODE XREF: get_parm+14j | |
| F000:E9CF cmp bx, 0Ah | |
| F000:E9D2 jnz short j27_2 | |
| F000:E9D4 cmp ah, 4 | |
| F000:E9D7 jge short j27_2 | |
| F000:E9D9 mov ah, 4 | |
| F000:E9DB j27_2: ; CODE XREF: get_parm+19j | |
| F000:E9DB ; get_parm+1Ej get_parm+23j | |
| F000:E9DB popf | |
| F000:E9DC pop si | |
| F000:E9DD pop ds | |
| F000:E9DE jb short nec_output | |
| F000:E9E0 retn | |
| F000:E9E0 get_parm endp | |
| F000:E9E1 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E9E1 bound_setup proc near ; CODE XREF: disable+Ap | |
| F000:E9E1 push cx | |
| F000:E9E2 mov bx, [bp+0Ch] | |
| F000:E9E5 push bx | |
| F000:E9E6 mov cl, 4 | |
| F000:E9E8 shr bx, cl | |
| F000:E9EA mov cx, es | |
| F000:E9EC add cx, bx | |
| F000:E9EE mov es, cx | |
| F000:E9F0 pop bx | |
| F000:E9F1 and bx, 0Fh | |
| F000:E9F5 mov si, bx | |
| F000:E9F7 mov di, bx | |
| F000:E9F9 pop cx | |
| F000:E9FA retn | |
| F000:E9FA bound_setup endp | |
| F000:E9FB ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:E9FB seek proc near ; CODE XREF: F000:085Dp | |
| F000:E9FB ; F000:0866p rw_opn+32p | |
| F000:E9FB push si | |
| F000:E9FC push bx | |
| F000:E9FD push cx | |
| F000:E9FE mov si, seg40.track_0 | |
| F000:EA01 mov al, 1 | |
| F000:EA03 mov cl, dl | |
| F000:EA05 and cx, 0FFh | |
| F000:EA09 add si, cx | |
| F000:EA0B rol al, cl | |
| F000:EA0D pop cx | |
| F000:EA0E mov bx, offset j32 | |
| F000:EA11 push bx | |
| F000:EA12 test ds:seg40.seek_status, al | |
| F000:EA16 jnz short j28 | |
| F000:EA18 or ds:seg40.seek_status, al | |
| F000:EA1C cmp byte ptr [si], 0 | |
| F000:EA1F jz short j28 | |
| F000:EA21 mov ah, 7 | |
| F000:EA23 call nec_output | |
| F000:EA26 mov ah, dl | |
| F000:EA28 call nec_output | |
| F000:EA2B call chk_stat_2 | |
| F000:EA2E jb short j32_2 | |
| F000:EA30 mov byte ptr [si], 0 | |
| F000:EA33 j28: ; CODE XREF: seek+1Bj | |
| F000:EA33 ; seek+24j | |
| F000:EA33 mov al, [si] | |
| F000:EA35 sub al, ch | |
| F000:EA37 jz short j31_1 | |
| F000:EA39 mov ah, 0Fh | |
| F000:EA3B call nec_output | |
| F000:EA3E mov ah, dl | |
| F000:EA40 call nec_output | |
| F000:EA43 mov ah, ch | |
| F000:EA45 call nec_output | |
| F000:EA48 call chk_stat_2 | |
| F000:EA4B pushf | |
| F000:EA4C push cx | |
| F000:EA4D mov bl, 12h | |
| F000:EA4F call get_parm | |
| F000:EA52 j29: ; CODE XREF: seek+62j | |
| F000:EA52 mov cx, 550 ; 1 ms loop | |
| F000:EA55 or ah, ah ; test for time expired | |
| F000:EA57 jz short j31 | |
| F000:EA59 j30: ; CODE XREF: seek:j30j | |
| F000:EA59 loop j30 ; delay for 1 ms | |
| F000:EA5B dec ah | |
| F000:EA5D jmp short j29 | |
| F000:EA5F j31: ; CODE XREF: seek+5Cj | |
| F000:EA5F pop cx | |
| F000:EA60 popf | |
| F000:EA61 jb short j32_2 | |
| F000:EA63 mov [si], ch | |
| F000:EA65 j31_1: ; CODE XREF: seek+3Cj | |
| F000:EA65 pop bx | |
| F000:EA66 j32: ; CODE XREF: seek+72j | |
| F000:EA66 ; DATA XREF: seek+13o | |
| F000:EA66 pop bx | |
| F000:EA67 pop si | |
| F000:EA68 retn | |
| F000:EA69 j32_2: ; CODE XREF: seek+33j | |
| F000:EA69 ; seek+66j | |
| F000:EA69 mov byte ptr [si], 0FFh | |
| F000:EA6C pop bx | |
| F000:EA6D jmp short j32 | |
| F000:EA6D seek endp | |
| F000:EA6F ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:EA6F chk_stat_2 proc near ; CODE XREF: seek+30p | |
| F000:EA6F ; seek+4Dp | |
| F000:EA6F push bx | |
| F000:EA70 push si | |
| F000:EA71 xor bx, bx | |
| F000:EA73 mov si, offset j33_3 | |
| F000:EA76 push si | |
| F000:EA77 j33_2: ; CODE XREF: chk_stat_2+1Aj | |
| F000:EA77 mov ah, 8 | |
| F000:EA79 call nec_output | |
| F000:EA7C call results | |
| F000:EA7F jb short j35 | |
| F000:EA81 mov al, ds:seg40.nec_status | |
| F000:EA84 test al, 20h | |
| F000:EA86 jnz short j35_1 | |
| F000:EA88 j33_3: ; DATA XREF: chk_stat_2+4o | |
| F000:EA88 dec bx | |
| F000:EA89 jnz short j33_2 | |
| F000:EA8B or byte ptr ds:seg40.diskette_status, 80h | |
| F000:EA90 j34: ; CODE XREF: chk_stat_2+2Fj | |
| F000:EA90 stc | |
| F000:EA91 j35: ; CODE XREF: chk_stat_2+10j | |
| F000:EA91 ; chk_stat_2+28j | |
| F000:EA91 pop si | |
| F000:EA92 pop si | |
| F000:EA93 pop bx | |
| F000:EA94 retn | |
| F000:EA95 j35_1: ; CODE XREF: chk_stat_2+17j | |
| F000:EA95 and al, 0C0h | |
| F000:EA97 jz short j35 | |
| F000:EA99 or byte ptr ds:seg40.diskette_status, 40h | |
| F000:EA9E jmp short j34 | |
| F000:EA9E chk_stat_2 endp | |
| F000:EAA0 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:EAA0 results proc near ; CODE XREF: chk_stat_2+Dp | |
| F000:EAA0 ; disk_reset+24p rw_opn+195p | |
| F000:EAA0 ; disk_int+31p | |
| F000:EAA0 cld | |
| F000:EAA1 mov di, 42h ; 'B' | |
| F000:EAA4 push cx | |
| F000:EAA5 push dx | |
| F000:EAA6 push bx | |
| F000:EAA7 mov bl, 7 | |
| F000:EAA9 j38: ; CODE XREF: results+3Dj | |
| F000:EAA9 xor cx, cx | |
| F000:EAAB mov dx, 0F4h ; 'ô' | |
| F000:EAAE j39: ; CODE XREF: results+13j | |
| F000:EAAE in al, dx | |
| F000:EAAF test al, 80h | |
| F000:EAB1 jnz short j40a | |
| F000:EAB3 loop j39 | |
| F000:EAB5 or byte ptr ds:41h, 80h | |
| F000:EABA j40: ; CODE XREF: results+29j | |
| F000:EABA stc | |
| F000:EABB j44: ; CODE XREF: results+39j | |
| F000:EABB pop bx | |
| F000:EABC pop dx | |
| F000:EABD pop cx | |
| F000:EABE retn | |
| F000:EABF j40a: ; CODE XREF: results+11j | |
| F000:EABF in al, dx | |
| F000:EAC0 test al, 40h | |
| F000:EAC2 jnz short j42 | |
| F000:EAC4 j41: ; CODE XREF: results+3Fj | |
| F000:EAC4 or byte ptr ds:41h, 20h | |
| F000:EAC9 jmp short j40 | |
| F000:EACB j42: ; CODE XREF: results+22j | |
| F000:EACB inc dx | |
| F000:EACC in al, dx | |
| F000:EACD mov [di], al | |
| F000:EACF inc di | |
| F000:EAD0 mov cx, 0Ah | |
| F000:EAD3 j43: ; CODE XREF: results:j43j | |
| F000:EAD3 loop j43 | |
| F000:EAD5 dec dx | |
| F000:EAD6 in al, dx | |
| F000:EAD7 test al, 10h | |
| F000:EAD9 jz short j44 | |
| F000:EADB dec bl | |
| F000:EADD jnz short j38 | |
| F000:EADF jmp short j41 | |
| F000:EADF results endp | |
| F000:EAE1 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:EAE1 num_trans proc near ; CODE XREF: rw_opn+1D2p | |
| F000:EAE1 ; rw_opn+1D9p rw_opn:j22p | |
| F000:EAE1 mov al, ds:seg40.nec_status+3 | |
| F000:EAE4 cmp al, [bp+0Bh] | |
| F000:EAE7 mov al, ds:seg40.nec_status+5 | |
| F000:EAEA jz short j45 | |
| F000:EAEC mov bl, 8 | |
| F000:EAEE call get_parm | |
| F000:EAF1 mov al, ah | |
| F000:EAF3 j45: ; CODE XREF: num_trans+9j | |
| F000:EAF3 inc al | |
| F000:EAF5 sub al, [bp+0Ah] | |
| F000:EAF8 mov [bp+0Eh], al | |
| F000:EAFB retn | |
| F000:EAFB num_trans endp | |
| F000:EAFC ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:EAFC ; ----------------------------------------------------- | |
| F000:EAFC ; disable | |
| F000:EAFC ; this routine will disable all interrupts except for | |
| F000:EAFC ; interrupt 6 so watch dog time out can occur in error | |
| F000:EAFC ; conditions. | |
| F000:EAFC ; input | |
| F000:EAFC ; none | |
| F000:EAFC ; output | |
| F000:EAFC ; none | |
| F000:EAFC ; all registers remain intact | |
| F000:EAFC ; ----------------------------------------------------- | |
| F000:EAFC disable proc near ; CODE XREF: rw_opn+D0p | |
| F000:EAFC push ax | |
| F000:EAFD ;----- disable all interrupts at 8259 level except diskette | |
| F000:EAFD in al, 21h ; read current mask | |
| F000:EAFF mov [bp+10h], ax ; save mask on space allocated on the stack | |
| F000:EB02 mov al, 10111111b ; mask off all interrupts except diskette | |
| F000:EB04 out 21h, al ; output mask to 8259 | |
| F000:EB06 call bound_setup ; setup registers to access buffer | |
| F000:EB09 pop ax | |
| F000:EB0A retn | |
| F000:EB0A disable endp | |
| F000:EB0B ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:EB0B ; ----------------------------------------------------- | |
| F000:EB0B ; enable | |
| F000:EB0B ; this proc enables all interrupts. it also sets the 8253 to | |
| F000:EB0B ; the mode required for keyboard data deserialization. | |
| F000:EB0B ; before the latch for keyboarda data is reset, bit 0 of the | |
| F000:EB0B ; 8255 is read to determine whether any keystrokes occured | |
| F000:EB0B ; while the system was masked off. | |
| F000:EB0B ; input | |
| F000:EB0B ; none | |
| F000:EB0B ; ouput | |
| F000:EB0B ; al=1 means a key was struck during diskette i/o. (or noise | |
| F000:EB0B ; on line) | |
| F000:EB0B ; al=0 means that no key was pressed | |
| F000:EB0B ; ax is destroyed. all other registers remain intact. | |
| F000:EB0B ; ----------------------------------------------------- | |
| F000:EB0B enable proc near ; CODE XREF: rw_opn:j16_5p | |
| F000:EB0B push dx ; save dx | |
| F000:EB0C ;----- return timer1 to state needed for keyboard i/o | |
| F000:EB0C mov al, 1110110b ; (tim 1, lsb/msb, square wave, binary) | |
| F000:EB0E out 43h, al | |
| F000:EB10 push ax | |
| F000:EB11 pop ax ; wait for 8253 to initialize itself | |
| F000:EB12 mov al, 0FFh ; initial value for 8253 | |
| F000:EB14 out 41h, al ; lsb | |
| F000:EB16 push ax | |
| F000:EB17 pop ax ; wait | |
| F000:EB18 out 41h, al ; msb | |
| F000:EB1A ;----- check if any keystrokes occured during diskette transfer | |
| F000:EB1A mov es, word ptr [bp+10h] ; get original es value from the stack | |
| F000:EB1D in al, 62h ; read port c of 8255 | |
| F000:EB1F and al, 1 ; bit=1 means keystroke has occured | |
| F000:EB21 push ax ; save it on the stack | |
| F000:EB22 ;----- enable nmi interrupts | |
| F000:EB22 in al, 0A0h ; reset latch | |
| F000:EB24 mov al, 80h ; '' ; mask to enable nmi | |
| F000:EB26 out 0A0h, al ; enable nmi | |
| F000:EB28 ;----- enable all interrupts which were enabled before transfer | |
| F000:EB28 mov ax, [bp+10h] ; get mask from the stack | |
| F000:EB2B out 21h, al | |
| F000:EB2D pop ax ; pass back key strock flag | |
| F000:EB2E pop dx | |
| F000:EB2F sti | |
| F000:EB30 retn | |
| F000:EB30 enable endp | |
| F000:EB31 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:EB31 ; ----------------------------------------------------- | |
| F000:EB31 ; clock_wait | |
| F000:EB31 ; this procedure is called when the time of day | |
| F000:EB31 ; is being updated. it waits if timer0 is almost | |
| F000:EB31 ; ready to wrap until it is safe to read an accurate | |
| F000:EB31 ; timer1 | |
| F000:EB31 ; input | |
| F000:EB31 ; none. | |
| F000:EB31 ; output | |
| F000:EB31 ; none. ax is destroyed | |
| F000:EB31 ; ----------------------------------------------------- | |
| F000:EB31 clock_wait proc near ; CODE XREF: clock_wait+11j | |
| F000:EB31 ; rw_opn+B4p rw_opn+12Ep | |
| F000:EB31 xor al, al ; read mode timer0 for 8253 | |
| F000:EB31 ; (tim 0, latching, interrupt on terminal count, binary) | |
| F000:EB33 out 43h, al ; output to the 8253 | |
| F000:EB35 push ax | |
| F000:EB36 pop ax ; wait for 8253 to initialize itself | |
| F000:EB37 in al, 40h ; read least significant byte | |
| F000:EB39 xchg al, ah ; save it | |
| F000:EB3B in al, 40h ; read most significant byte | |
| F000:EB3D xchg al, ah ; rearrange for proper order | |
| F000:EB3F cmp ax, 12Ch ; is timer 0 close to wrapping? | |
| F000:EB42 jb short clock_wait ; jump if clock is within threshold | |
| F000:EB44 retn ; ok to read timer1 | |
| F000:EB44 clock_wait endp | |
| F000:EB45 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:EB45 get_drive proc near ; CODE XREF: rw_opn+8p | |
| F000:EB45 ; rw_opn+B7p rw_opn+122p | |
| F000:EB45 ; disk_int+53p | |
| F000:EB45 push cx | |
| F000:EB46 mov cl, [bp+0] | |
| F000:EB49 mov al, 1 | |
| F000:EB4B shl al, cl | |
| F000:EB4D and al, 7 | |
| F000:EB4F pop cx | |
| F000:EB50 retn | |
| F000:EB50 get_drive endp | |
| F000:EB51 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:EB51 rom_check proc near ; CODE XREF: F000:07F7p | |
| F000:EB51 sub si, si | |
| F000:EB53 sub al, al | |
| F000:EB55 mov ah, [bx+2] | |
| F000:EB58 shl ax, 1 | |
| F000:EB5A push ax | |
| F000:EB5B cmp dx, 0D000h | |
| F000:EB5F pushf | |
| F000:EB60 mov cl, 4 | |
| F000:EB62 shr ax, cl | |
| F000:EB64 add dx, ax | |
| F000:EB66 popf | |
| F000:EB67 pop cx | |
| F000:EB68 push dx | |
| F000:EB69 jl short rom_1 | |
| F000:EB6B call crc_check | |
| F000:EB6E jz short rom_check_1 | |
| F000:EB70 jmp short rom_2 | |
| F000:EB72 rom_1: ; CODE XREF: rom_check+18j | |
| F000:EB72 call ros_checksum | |
| F000:EB75 jz short rom_check_1 | |
| F000:EB77 rom_2: ; CODE XREF: rom_check+1Fj | |
| F000:EB77 mov dx, 1626h | |
| F000:EB7A mov ah, 2 | |
| F000:EB7C mov bh, 7 | |
| F000:EB7E int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:EB7E ; DH,DL = row, column (0,0 = upper left) | |
| F000:EB7E ; BH = page number | |
| F000:EB80 mov dx, ds | |
| F000:EB82 mov al, dh | |
| F000:EB84 call xpc_byte | |
| F000:EB87 mov bl, dh | |
| F000:EB89 mov bh, 25h ; '%' | |
| F000:EB8B cmp dh, 0D0h ; 'Ð' | |
| F000:EB8E mov si, 3Bh ; ';' | |
| F000:EB91 jge short rom_check_0 | |
| F000:EB93 mov si, 3Ah ; ':' | |
| F000:EB96 rom_check_0: ; CODE XREF: rom_check+40j | |
| F000:EB96 call e_msg | |
| F000:EB99 jmp short rom_check_end | |
| F000:EB9B rom_check_1: ; CODE XREF: rom_check+1Dj | |
| F000:EB9B ; rom_check+24j | |
| F000:EB9B mov ax, 50h ; 'P' | |
| F000:EB9E mov es, ax | |
| F000:EBA0 mov word ptr es:114h, 3 | |
| F000:EBA7 mov word ptr es:116h, ds | |
| F000:EBAC call dword ptr es:114h | |
| F000:EBB1 rom_check_end: ; CODE XREF: rom_check+48j | |
| F000:EBB1 pop dx | |
| F000:EBB2 retn | |
| F000:EBB2 rom_check endp | |
| F000:EBB3 db 0A6h dup(0) | |
| F000:EC59 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:EC59 ; Attributes: bp-based frame | |
| F000:EC59 diskette_io proc far ; DATA XREF: F000:FF09o | |
| F000:EC59 arg_B = byte ptr 0Fh | |
| F000:EC59 sti | |
| F000:EC5A push es | |
| F000:EC5B push ax | |
| F000:EC5C push ax | |
| F000:EC5D push ax | |
| F000:EC5E push bx | |
| F000:EC5F push cx | |
| F000:EC60 push ds | |
| F000:EC61 push si | |
| F000:EC62 push di | |
| F000:EC63 push bp | |
| F000:EC64 push dx | |
| F000:EC65 mov bp, sp | |
| F000:EC67 call dss | |
| F000:EC6A call j1 | |
| F000:EC6D mov bl, 4 | |
| F000:EC6F call get_parm | |
| F000:EC72 mov ds:seg40.motor_count, ah | |
| F000:EC76 mov ah, ds:seg40.diskette_status | |
| F000:EC7A mov [bp+arg_B], ah | |
| F000:EC7D pop dx | |
| F000:EC7E pop bp | |
| F000:EC7F pop di | |
| F000:EC80 pop si | |
| F000:EC81 pop ds | |
| F000:EC82 pop cx | |
| F000:EC83 pop bx | |
| F000:EC84 pop ax | |
| F000:EC85 add sp, 4 | |
| F000:EC88 pop es | |
| F000:EC89 cmp ah, 1 | |
| F000:EC8C cmc | |
| F000:EC8D retf 2 | |
| F000:EC8D diskette_io endp | |
| F000:EC90 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:EC90 j1 proc near ; CODE XREF: diskette_io+11p | |
| F000:EC90 mov dh, al ; save sectors in dh | |
| F000:EC92 and byte ptr ds:seg40.motor_status, 7Fh ; indicate read operation | |
| F000:EC97 or ah, ah ; ah = 0 | |
| F000:EC99 jz short disk_reset | |
| F000:EC9B dec ah ; ah = 1 | |
| F000:EC9D jz short disk_status | |
| F000:EC9F mov byte ptr ds:seg40.diskette_status, 0 ; reset the status indicator | |
| F000:ECA4 cmp dl, 2 ; test for drive in rage 0-2 | |
| F000:ECA7 ja short j3 ; error if above | |
| F000:ECA9 dec ah ; ah = 2 | |
| F000:ECAB jz short disk_read ; test_disk_verf | |
| F000:ECAD dec ah ; ah = 3 | |
| F000:ECAF jnz short j2 | |
| F000:ECB1 jmp disk_write | |
| F000:ECB4 j2: ; CODE XREF: j1+1Fj | |
| F000:ECB4 dec ah ; ah = 4 | |
| F000:ECB6 jz short disk_read | |
| F000:ECB8 dec ah ; ah = 5 | |
| F000:ECBA jz short disk_format | |
| F000:ECBC j3: ; CODE XREF: j1+17j | |
| F000:ECBC mov byte ptr ds:seg40.diskette_status, 1 ; error code, no sectors transferred | |
| F000:ECBC ; undefined operation | |
| F000:ECC1 retn | |
| F000:ECC1 j1 endp | |
| F000:ECC2 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:ECC2 disk_reset proc near ; CODE XREF: j1+9j | |
| F000:ECC2 mov dx, 0F2h ; 'ò' | |
| F000:ECC5 cli | |
| F000:ECC6 mov al, ds:seg40.motor_status ; find out if motor is running | |
| F000:ECC9 and al, 7 ; drive bits | |
| F000:ECCB out dx, al ; reset the adapter | |
| F000:ECCC mov byte ptr ds:seg40.seek_status, 0 | |
| F000:ECD1 mov byte ptr ds:seg40.diskette_status, 0 | |
| F000:ECD6 or al, 80h ; turn off reset | |
| F000:ECD8 out dx, al | |
| F000:ECD9 sti | |
| F000:ECDA mov si, offset j4_2 ; dummy return for | |
| F000:ECDD push si | |
| F000:ECDE mov cx, 10h | |
| F000:ECE1 j4_0: ; CODE XREF: disk_reset+2Ej | |
| F000:ECE1 ; disk_reset+3Cj | |
| F000:ECE1 mov ah, 8 | |
| F000:ECE3 call nec_output | |
| F000:ECE6 call results | |
| F000:ECE9 mov al, ds:seg40.nec_status | |
| F000:ECEC cmp al, 0C0h ; 'À' | |
| F000:ECEE jz short j7 | |
| F000:ECF0 loop j4_0 | |
| F000:ECF2 j4_1: ; CODE XREF: disk_reset+3Ej | |
| F000:ECF2 or byte ptr ds:seg40.diskette_status, 20h | |
| F000:ECF7 pop si | |
| F000:ECF8 jmp short j8 | |
| F000:ECFA j4_2: ; DATA XREF: disk_reset+18o | |
| F000:ECFA ; disk_reset:j4_2o | |
| F000:ECFA mov si, offset j4_2 | |
| F000:ECFD push si | |
| F000:ECFE loop j4_0 | |
| F000:ED00 jmp short j4_1 | |
| F000:ED02 ;------ send specify command to nec | |
| F000:ED02 j7: ; CODE XREF: disk_reset+2Cj | |
| F000:ED02 pop si ; get rid of dummy argument | |
| F000:ED03 mov ah, 3 ; specify command | |
| F000:ED05 call nec_output ; output the command | |
| F000:ED08 mov bl, 1 ; step rate time and head unload | |
| F000:ED0A call get_parm ; output to the nec controller | |
| F000:ED0D mov bl, 3 ; parm1 head load and no dma | |
| F000:ED0F call get_parm ; to the nec controller | |
| F000:ED12 j8: ; CODE XREF: disk_reset+36j | |
| F000:ED12 retn ; return to caller | |
| F000:ED12 disk_reset endp | |
| F000:ED13 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:ED13 disk_status proc near ; CODE XREF: j1+Dj | |
| F000:ED13 mov al, ds:seg40.diskette_status | |
| F000:ED16 mov [bp+0Eh], al ; put status in stack, it will pop in al | |
| F000:ED19 retn | |
| F000:ED19 disk_status endp | |
| F000:ED1A ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:ED1A disk_read proc near ; CODE XREF: j1+1Bj j1+26j | |
| F000:ED1A mov ah, 46h ; 'F' ; set up read command for nec controller | |
| F000:ED1C jmp short rw_opn ; go do the operation | |
| F000:ED1C disk_read endp | |
| F000:ED1E ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:ED1E disk_format proc near ; CODE XREF: j1+2Aj | |
| F000:ED1E or byte ptr ds:seg40.motor_status, 80h ; indicate a write operation | |
| F000:ED23 mov ah, 4Dh ; 'M' ; establish the format command | |
| F000:ED25 jmp short rw_opn ; go do the operation | |
| F000:ED25 disk_format endp | |
| F000:ED27 ; START OF FUNCTION CHUNK FOR rw_opn | |
| F000:ED27 j10: ; CODE XREF: rw_opn+5Aj | |
| F000:ED27 mov bl, 7 | |
| F000:ED29 call get_parm | |
| F000:ED2C mov bl, 9 | |
| F000:ED2E call get_parm | |
| F000:ED31 mov bl, 0Fh | |
| F000:ED33 call get_parm | |
| F000:ED36 mov bx, 11h | |
| F000:ED39 push bx | |
| F000:ED3A jmp j16 | |
| F000:ED3A ; END OF FUNCTION CHUNK FOR rw_opn | |
| F000:ED3D ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:ED3D disk_write proc near ; CODE XREF: j1+21j | |
| F000:ED3D or byte ptr ds:seg40.motor_status, 80h | |
| F000:ED42 mov ah, 45h ; 'E' | |
| F000:ED42 disk_write endp | |
| F000:ED44 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:ED44 ; ------------------------------------------------------ | |
| F000:ED44 ; rw_opn | |
| F000:ED44 ; this routine performs read/write/verify operation | |
| F000:ED44 ; ------------------------------------------------------ | |
| F000:ED44 rw_opn proc near ; CODE XREF: disk_read+2j | |
| F000:ED44 ; disk_format+7j | |
| F000:ED44 ; FUNCTION CHUNK AT F000:ED27 SIZE 00000016 BYTES | |
| F000:ED44 push ax ; save the command | |
| F000:ED45 ;------ turn on the motor and select drive | |
| F000:ED45 push cx ; save t/s params | |
| F000:ED46 cli ; no interrupts while determine motor status | |
| F000:ED47 mov byte ptr ds:seg40.motor_count, 0FFh ; set large count during operation | |
| F000:ED4C call get_drive ; get the drive parameter from the stack | |
| F000:ED4F test ds:seg40.motor_status, al ; test motor for operating | |
| F000:ED53 jnz short j14 ; if running, skip the wait | |
| F000:ED55 and byte ptr ds:seg40.motor_status, 0F0h ; turn off running drive | |
| F000:ED5A or ds:seg40.motor_status, al ; turn on the current motor | |
| F000:ED5E sti ; interrupts back on | |
| F000:ED5F or al, 80h ; no reset, turn on motor | |
| F000:ED61 out 0F2h, al | |
| F000:ED63 ;------ wait for motor both read and write | |
| F000:ED63 mov bl, 14h ; get motor start time | |
| F000:ED65 call get_parm | |
| F000:ED68 or ah, ah ; test for no wait | |
| F000:ED6A j12_test_wait_time: ; CODE XREF: rw_opn+2Ej | |
| F000:ED6A jz short j14 ; exit with time expired | |
| F000:ED6C sub cx, cx ; set up 1/8 second loop time | |
| F000:ED6E j13: ; CODE XREF: rw_opn:j13j | |
| F000:ED6E loop j13 ; wait for the required time | |
| F000:ED70 dec ah ; decrement time value | |
| F000:ED72 jmp short j12_test_wait_time ; are we done yet ? | |
| F000:ED74 j14: ; CODE XREF: rw_opn+Fj | |
| F000:ED74 ; rw_opn:j12_test_wait_timej | |
| F000:ED74 sti ; interrupts back on for bypass wait | |
| F000:ED75 pop cx | |
| F000:ED76 ;------ do the seek operation | |
| F000:ED76 call seek ; move to correct track | |
| F000:ED79 pop ax ; recover command | |
| F000:ED7A mov bh, ah ; save command in bh | |
| F000:ED7C mov dh, 0 ; set no sectors read in case of error | |
| F000:ED7E jnb short j14_1 ; if no error continue, jump around jmp | |
| F000:ED80 jmp j17 ; carry set jump to motor wait | |
| F000:ED83 j14_1: ; CODE XREF: rw_opn+3Aj | |
| F000:ED83 mov si, offset j17 ; dummy return on stack for nec_output | |
| F000:ED86 push si ; so it will return to motor off location | |
| F000:ED87 ;------ send out the parameters to the controller | |
| F000:ED87 call nec_output ; output the operation command | |
| F000:ED8A mov ah, [bp+1] ; get the current head number | |
| F000:ED8D shl ah, 1 ; move it to bit 2 | |
| F000:ED8F shl ah, 1 | |
| F000:ED91 and ah, 4 ; isolate that bit | |
| F000:ED94 or ah, dl ; or in drive number | |
| F000:ED96 call nec_output | |
| F000:ED99 ;------ test for format command | |
| F000:ED99 cmp bh, 4Dh ; 'M' ; is this a format operation? | |
| F000:ED9C jnz short j15 ; no. continue with r/w/v | |
| F000:ED9E jmp short j10 ; if so, handle special | |
| F000:EDA0 j15: ; CODE XREF: rw_opn+58j | |
| F000:EDA0 mov ah, ch ; cylinder number | |
| F000:EDA2 call nec_output | |
| F000:EDA5 mov ah, [bp+1] ; head number from stack | |
| F000:EDA8 call nec_output | |
| F000:EDAB mov ah, cl ; sector number | |
| F000:EDAD call nec_output | |
| F000:EDB0 mov bl, 7 ; bytes/sector parm from block | |
| F000:EDB2 call get_parm ; to the nec | |
| F000:EDB5 mov bl, 8 ; eot parm from block | |
| F000:EDB7 call get_parm ; returned in ah | |
| F000:EDBA add cl, [bp+0Eh] ; add current sector to number in transfer | |
| F000:EDBD dec cl ; current sector + n_sectors - 1 | |
| F000:EDBF mov ah, cl ; eot parameter is the calculated one | |
| F000:EDC1 call nec_output | |
| F000:EDC4 mov bl, 0Bh ; gap length parm from block | |
| F000:EDC6 call get_parm ; to the nec | |
| F000:EDC9 mov bx, 0Dh ; dtl parm from block | |
| F000:EDCC push bx ; save index to disk parameter on stack | |
| F000:EDCD j16: ; CODE XREF: rw_opn-Aj | |
| F000:EDCD cld ; forward direction | |
| F000:EDCE ;----- start timer1 with initial value of ffff | |
| F000:EDCE mov al, 1110000b ; select timer1, lsb-msb, mode 0, binary counter | |
| F000:EDCE ; (tim1, lsb/msb, interrupt on terminal count, binary) | |
| F000:EDD0 out 43h, al ; initialize the counter | |
| F000:EDD2 push ax | |
| F000:EDD3 pop ax ; allow enough time for the 8253 to initialize itself | |
| F000:EDD4 mov al, 0FFh ; initial count value for the 8253 | |
| F000:EDD6 out 41h, al ; output least significant byte | |
| F000:EDD8 push ax | |
| F000:EDD9 pop ax ; wait | |
| F000:EDDA out 41h, al ; output most significant byte | |
| F000:EDDC ;----- initialize cx for jump after last parameter is passed to nec | |
| F000:EDDC mov al, [bp+0Fh] ; retreive command parameter | |
| F000:EDDF test al, 1 ; is this and odd numbered function | |
| F000:EDE1 jz short j16_1 ; jump if not odd numbered | |
| F000:EDE3 mov cx, offset write_loop | |
| F000:EDE6 jmp short j16_3 | |
| F000:EDE8 j16_1: ; CODE XREF: rw_opn+9Dj | |
| F000:EDE8 cmp al, 2 ; is this a read? | |
| F000:EDEA jnz short j16_2 ; jump if verify | |
| F000:EDEC mov cx, offset read_loop | |
| F000:EDEF jmp short j16_3 | |
| F000:EDF1 j16_2: ; CODE XREF: rw_opn+A6j | |
| F000:EDF1 mov cx, offset verify_loop | |
| F000:EDF4 ;----- finish initialization | |
| F000:EDF4 | |
| F000:EDF4 ;---------------------------------------------------------------- | |
| F000:EDF4 ;***note*** | |
| F000:EDF4 ; all interrupts are about to be disabled. there is a potential | |
| F000:EDF4 ; that this time period will be long enough to miss time of | |
| F000:EDF4 ; day interrupts. for this reason, timer1 will be used to | |
| F000:EDF4 ; keep track of the number of time of day interrupts which | |
| F000:EDF4 ; will be missed. this information is used after the diskette | |
| F000:EDF4 ; operation to update the time of day. | |
| F000:EDF4 ;---------------------------------------------------------------- | |
| F000:EDF4 | |
| F000:EDF4 j16_3: ; CODE XREF: rw_opn+A2j | |
| F000:EDF4 ; rw_opn+ABj | |
| F000:EDF4 mov al, 10h ; disable nmi | |
| F000:EDF6 out 0A0h, al ; no keyboad interrupt | |
| F000:EDF8 call clock_wait ; wait if timer0 is about to interrupt | |
| F000:EDFB ;----- enable watchdog timer | |
| F000:EDFB | |
| F000:EDFB ;---------------------------------------------------------------- | |
| F000:EDFB ;***note*** | |
| F000:EDFB ; given the current system configuration a method is needed | |
| F000:EDFB ; to pull the nec out of "fatal error" situations. a timer | |
| F000:EDFB ; on the adapter card is provided which will perform this | |
| F000:EDFB ; function. the watchdog timer on the adapter card is enabled | |
| F000:EDFB ; and strobed before the 8259 interrupt 6 line is enabled. | |
| F000:EDFB ; this is because of a glitch on the line large enough to | |
| F000:EDFB ; trigger and interrupt. | |
| F000:EDFB ;---------------------------------------------------------------- | |
| F000:EDFB | |
| F000:EDFB call get_drive ; get bit mask for drive | |
| F000:EDFE mov dx, 0F2h ; 'ò' ; control port to nec | |
| F000:EE01 or al, 11100000b ; fdc_reset + wd_enable + wd_strobe | |
| F000:EE03 out dx, al ; output control info for watchdog (wd) enable | |
| F000:EE04 and al, 10100111b ; fdc_reset + wd_enable + 0x07 | |
| F000:EE06 out dx, al ; output control info to strobe watchdog | |
| F000:EE07 mov dx, 0F4h ; 'ô' ; port to nec status | |
| F000:EE0A mov al, 100000b ; select timer1 input from timer0 output | |
| F000:EE0C out 0A0h, al | |
| F000:EE0E ;------ read timer1 now and save the initial value | |
| F000:EE0E call read_time ; get timer1 value | |
| F000:EE11 mov [bp+12h], ax ; save initial value for clock | |
| F000:EE11 ; update in temporary storage | |
| F000:EE14 call disable ; disable all interrupts | |
| F000:EE17 ;------ nec begins operation when when nec receives last parameter | |
| F000:EE17 pop bx ; get parameter from stack | |
| F000:EE18 call get_parm ; output last parameter to the nec | |
| F000:EE1B pop ax ; can now discard that dummy return address | |
| F000:EE1C push es | |
| F000:EE1D pop ds ; initialize ds for write | |
| F000:EE1E jmp cx ; jump to appropriate r/w/v loop | |
| F000:EE20 ;---------------------------------------------------------------- | |
| F000:EE20 ;***note*** | |
| F000:EE20 ; data is transferred using polling algorithms. these loops | |
| F000:EE20 ; transfer a data byte at a time while polling nec for | |
| F000:EE20 ; next data byte and completitios status | |
| F000:EE20 ;---------------------------------------------------------------- | |
| F000:EE20 verify_loop: ; CODE XREF: rw_opn+DFj | |
| F000:EE20 ; DATA XREF: rw_opn:j16_2o | |
| F000:EE20 in al, dx ; read status | |
| F000:EE21 test al, 20h ; has nec entered execution phase yet? (busy_bit) | |
| F000:EE23 jz short verify_loop ; no, continue sampling | |
| F000:EE25 j22_2: ; CODE XREF: rw_opn+E8j | |
| F000:EE25 ; rw_opn+F2j | |
| F000:EE25 test al, 80h ; is data ready? (rqm) | |
| F000:EE27 jnz short j22_4 ; jump if data transfer is ready | |
| F000:EE29 in al, dx ; read status port | |
| F000:EE2A test al, 20h ; are we done ? (busy_bit) | |
| F000:EE2C jnz short j22_2 ; jump if more transfers | |
| F000:EE2E jmp short op_end ; transfer done | |
| F000:EE30 j22_4: ; CODE XREF: rw_opn+E3j | |
| F000:EE30 inc dx ; point at nec data register | |
| F000:EE31 in al, dx ; read data | |
| F000:EE32 dec dx ; point at nec status register | |
| F000:EE33 in al, dx ; read status port | |
| F000:EE34 test al, 20h ; are we done ? (busy_bit) | |
| F000:EE36 jnz short j22_2 ; continue | |
| F000:EE38 jmp short op_end ; we are done | |
| F000:EE3A ;------ read operation | |
| F000:EE3A read_loop: ; CODE XREF: rw_opn+F9j | |
| F000:EE3A ; DATA XREF: rw_opn+A8o | |
| F000:EE3A in al, dx ; read status register | |
| F000:EE3B test al, 20h ; has next started the execution phase? (busy_bit) | |
| F000:EE3D jz short read_loop ; has not started yet | |
| F000:EE3F j22_5: ; CODE XREF: rw_opn+102j | |
| F000:EE3F ; rw_opn+108j | |
| F000:EE3F in al, dx ; read status port | |
| F000:EE40 test al, 20h ; has nec completed execution phase? (busy_bit) | |
| F000:EE42 jz short op_end ; jump if execution phase is over | |
| F000:EE44 test al, 80h ; is data ready? (rqm) | |
| F000:EE46 jz short j22_5 ; read the data | |
| F000:EE48 inc dx ; point at nec_data | |
| F000:EE49 in al, dx ; read data | |
| F000:EE4A stosb ; transfer data | |
| F000:EE4B dec dx ; point at nec_status | |
| F000:EE4C jmp short j22_5 ; continue with read operation | |
| F000:EE4E ;------ write and format operation | |
| F000:EE4E write_loop: ; CODE XREF: rw_opn+10Dj | |
| F000:EE4E ; DATA XREF: rw_opn+9Fo | |
| F000:EE4E in al, dx ; read nec status port | |
| F000:EE4F test al, 20h ; has nec entered execution phase yet? (busy_bit) | |
| F000:EE51 jz short write_loop ; no, continue looping | |
| F000:EE53 mov cx, 2080h ; busy_bit * 256 + rqm | |
| F000:EE56 j22_7: ; CODE XREF: rw_opn+119j | |
| F000:EE56 ; rw_opn+11Fj | |
| F000:EE56 in al, dx ; read status port | |
| F000:EE57 test al, ch ; is the fec still in execution phase? | |
| F000:EE59 jz short op_end ; jump if execution phase is done | |
| F000:EE5B test al, cl ; is the data port ready for the transfer? | |
| F000:EE5D jz short j22_7 ; jump to write data | |
| F000:EE5F inc dx ; point at data register | |
| F000:EE60 lodsb ; transfer byte | |
| F000:EE61 out dx, al ; write the byte on the diskette | |
| F000:EE62 dec dx ; point at the status register | |
| F000:EE63 jmp short j22_7 ; continue with write or format | |
| F000:EE65 ;------ transfer process is over | |
| F000:EE65 op_end: ; CODE XREF: rw_opn+EAj | |
| F000:EE65 ; rw_opn+F4j rw_opn+FEj | |
| F000:EE65 ; rw_opn+115j | |
| F000:EE65 ; DATA XREF: disk_int+1Do | |
| F000:EE65 pushf | |
| F000:EE66 call get_drive | |
| F000:EE69 or al, 80h | |
| F000:EE6B mov dx, 0F2h ; 'ò' | |
| F000:EE6E out dx, al | |
| F000:EE6F ;------ update time of day | |
| F000:EE6F call dss | |
| F000:EE72 call clock_wait | |
| F000:EE75 call read_time | |
| F000:EE78 mov bx, [bp+12h] | |
| F000:EE7B sub ax, bx | |
| F000:EE7D neg ax | |
| F000:EE7F push ax | |
| F000:EE80 add ds:seg40.timer_low, ax | |
| F000:EE84 jnb short j16_4 | |
| F000:EE86 inc word ptr ds:seg40.timer_high | |
| F000:EE8A j16_4: ; CODE XREF: rw_opn+140j | |
| F000:EE8A cmp word ptr ds:seg40.timer_high, 18h | |
| F000:EE8F jnz short j16_5 | |
| F000:EE91 cmp word ptr ds:seg40.timer_low, 0B0h ; '°' | |
| F000:EE97 jl short j16_5 | |
| F000:EE99 ;------ timer has gone 24 hours | |
| F000:EE99 mov word ptr ds:seg40.timer_high, 0 | |
| F000:EE9F sub word ptr ds:seg40.timer_low, 0B0h ; '°' | |
| F000:EEA5 mov byte ptr ds:seg40.timer_ofl, 1 | |
| F000:EEAA j16_5: ; CODE XREF: rw_opn+14Bj | |
| F000:EEAA ; rw_opn+153j | |
| F000:EEAA call enable | |
| F000:EEAD pop cx | |
| F000:EEAE jcxz short j16_7 | |
| F000:EEB0 push ds | |
| F000:EEB1 push ax | |
| F000:EEB2 push dx | |
| F000:EEB3 j16_6: ; CODE XREF: rw_opn+171j | |
| F000:EEB3 int 1Ch ; CLOCK TICK | |
| F000:EEB5 loop j16_6 | |
| F000:EEB7 pop dx | |
| F000:EEB8 pop ax | |
| F000:EEB9 pop ds | |
| F000:EEBA ;------ clock is updated and user interrupt 0x1c have been issued | |
| F000:EEBA or al, al | |
| F000:EEBC jz short j16_7 | |
| F000:EEBE mov bx, 80h ; '' | |
| F000:EEC1 mov cx, 48h ; 'H' | |
| F000:EEC4 call kb_noise | |
| F000:EEC7 ;------ clear shift states. don't leave possibility of dangling states | |
| F000:EEC7 ; of missed breaks | |
| F000:EEC7 and byte ptr ds:seg40.kb_flag, 0F0h | |
| F000:EECC and byte ptr ds:seg40.kb_flag_1, 0Fh | |
| F000:EED1 and byte ptr ds:seg40.kb_flag_2, 1Fh | |
| F000:EED6 j16_7: ; CODE XREF: rw_opn+16Aj | |
| F000:EED6 ; rw_opn+178j | |
| F000:EED6 popf | |
| F000:EED7 j17: ; CODE XREF: rw_opn+3Cj | |
| F000:EED7 ; DATA XREF: rw_opn:j14_1o | |
| F000:EED7 jb short j20_rw_err | |
| F000:EED9 call results | |
| F000:EEDC jb short j20_rw_err | |
| F000:EEDE ;------ check the results returned by the controller | |
| F000:EEDE cld | |
| F000:EEDF mov si, 42h ; 'B' | |
| F000:EEE2 lodsb | |
| F000:EEE3 and al, 0C0h | |
| F000:EEE5 jz short j22 | |
| F000:EEE7 cmp al, 40h ; '@' | |
| F000:EEE9 jnz short j18_rw_nec_fail | |
| F000:EEEB ---------------------------------------------------------------- | |
| F000:EEEB ***note*** | |
| F000:EEEB the current system configuration has no dma. in order to | |
| F000:EEEB stop the nec an eot must be passed to force the nec to halt. | |
| F000:EEEB therefore, the status returned by the nec will always show | |
| F000:EEEB an eot error. if this is the only error returned and the | |
| F000:EEEB number of sectors transferred equals the number sectors | |
| F000:EEEB requested in this interrupt call then the operatlon has | |
| F000:EEEB completed successfully. if an eot error is returned and the | |
| F000:EEEB requested number of sectors is not the number of sectors | |
| F000:EEEB transferred then the error is legitimate. when the eot error | |
| F000:EEEB is invalid the status bytes returned are updated to | |
| F000:EEEB reflect the status of the operation if dma had been present | |
| F000:EEEB ---------------------------------------------------------------- | |
| F000:EEEB | |
| F000:EEEB lodsb ; get st 1 | |
| F000:EEEC cmp al, 80h ; '' ; is this the only error? | |
| F000:EEEE jz short j21_1 ; normal termination, no error | |
| F000:EEF0 shl al, 1 ; not eot error, bypass error bits | |
| F000:EEF2 shl al, 1 | |
| F000:EEF4 shl al, 1 ; test for crc error | |
| F000:EEF6 mov ah, 10h | |
| F000:EEF8 jb short j19_rw_fail ; rw_fail | |
| F000:EEFA shl al, 1 ; test for dma overrun | |
| F000:EEFC mov ah, 8 | |
| F000:EEFE jb short j19_rw_fail ; rw_fail | |
| F000:EF00 shl al, 1 | |
| F000:EF02 shl al, 1 ; test for record not found | |
| F000:EF04 mov ah, 4 | |
| F000:EF06 jb short j19_rw_fail ; rw_fail | |
| F000:EF08 shl al, 1 | |
| F000:EF0A shl al, 1 ; test missing address mark | |
| F000:EF0C mov ah, 2 | |
| F000:EF0E jb short j19_rw_fail ; rw_fail | |
| F000:EF10 ;------ nec must have failed | |
| F000:EF10 j18_rw_nec_fail: ; CODE XREF: rw_opn+1A5j | |
| F000:EF10 mov ah, 20h ; ' ' ; rw-nec-fail | |
| F000:EF12 j19_rw_fail: ; CODE XREF: rw_opn+1B4j | |
| F000:EF12 ; rw_opn+1BAj rw_opn+1C2j | |
| F000:EF12 ; rw_opn+1CAj | |
| F000:EF12 or ds:seg40.diskette_status, ah | |
| F000:EF16 call num_trans ; how many were really transferred | |
| F000:EF19 j20_rw_err: ; CODE XREF: rw_opn:j17j | |
| F000:EF19 ; rw_opn+198j | |
| F000:EF19 retn ; return to caller | |
| F000:EF1A ;------ operation was successful | |
| F000:EF1A j21_1: ; CODE XREF: rw_opn+1AAj | |
| F000:EF1A mov bl, [bp+0Eh] ; get number of sectors pass from stack | |
| F000:EF1D call num_trans ; how many got moved, al contains number of sectors | |
| F000:EF20 cmp bl, al ; number requested == number of actually transferred ? | |
| F000:EF22 jz short j21_2 ; transfer successful | |
| F000:EF24 ;------ operation attempted to access data past eot. this is | |
| F000:EF24 ; a real error | |
| F000:EF24 or byte ptr ds:seg40.diskette_status, 4 ; record not found | |
| F000:EF29 mov byte ptr ds:seg40.nec_status+1, 80h ; '' ; st1 gets correct value | |
| F000:EF2E stc | |
| F000:EF2F retn | |
| F000:EF30 j21_2: ; CODE XREF: rw_opn+1DEj | |
| F000:EF30 xor ax, ax ; clear ax for nec_status update | |
| F000:EF32 xor si, si ; index to nec_status array | |
| F000:EF34 mov [si+seg40.nec_status], al ; zero out byte, st0 | |
| F000:EF38 inc si ; point index at second byte | |
| F000:EF39 mov [si+seg40.nec_status], al ; zero out byte, st1 | |
| F000:EF3D jmp short j21_3_opn_ok | |
| F000:EF3F j22: ; CODE XREF: rw_opn+1A1j | |
| F000:EF3F call num_trans | |
| F000:EF42 j21_3_opn_ok: ; CODE XREF: rw_opn+1F9j | |
| F000:EF42 xor ah, ah ; no errors | |
| F000:EF44 retn | |
| F000:EF44 rw_opn endp ; sp = -6 | |
| F000:EF45 db 12h dup(0) | |
| F000:EF57 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:EF57 ; ---------------------------------------------------- | |
| F000:EF57 ; disk_int | |
| F000:EF57 ; this routine handles the diskette interrupt. an interrupt | |
| F000:EF57 ; will occur only when the one-shot timer is fired. this | |
| F000:EF57 ; occurs in an error situation. this routine sets errors in | |
| F000:EF57 ; the diskette status byte and disables the one-shot tiner. | |
| F000:EF57 ; then the return address on the stack is changed to return | |
| F000:EF57 ; to the op_end label. | |
| F000:EF57 ; | |
| F000:EF57 ; input | |
| F000:EF57 ; none. | |
| F000:EF57 ; output | |
| F000:EF57 ; none. os points at 9ios data area. carry flag is set so | |
| F000:EF57 ; that error will be caught in the envirotu,emt returned to. | |
| F000:EF57 ; ---------------------------------------------------- | |
| F000:EF57 ; Attributes: bp-based frame | |
| F000:EF57 disk_int proc far ; DATA XREF: F000:FEFFo | |
| F000:EF57 arg_0 = word ptr 0Ch | |
| F000:EF57 push ds | |
| F000:EF58 push ax | |
| F000:EF59 push dx | |
| F000:EF5A push bp | |
| F000:EF5B call dss | |
| F000:EF5E mov bp, sp | |
| F000:EF60 push cs | |
| F000:EF61 pop ax | |
| F000:EF62 cmp ax, [bp+0Ah] | |
| F000:EF65 jnz short di3 | |
| F000:EF67 mov ax, [bp+8] | |
| F000:EF6A cmp ax, 0EE20h | |
| F000:EF6D jl short di3 | |
| F000:EF6F cmp ax, 0EE66h | |
| F000:EF72 jge short di3 | |
| F000:EF74 mov word ptr [bp+8], offset op_end | |
| F000:EF79 or [bp+arg_0], 1 | |
| F000:EF7E mov dx, 0F4h ; 'ô' | |
| F000:EF81 in al, dx | |
| F000:EF82 and al, 0F0h | |
| F000:EF84 cmp al, 0D0h ; 'Ð' | |
| F000:EF86 jnz short di1 | |
| F000:EF88 call results | |
| F000:EF8B mov si, 42h ; 'B' | |
| F000:EF8E mov al, [si+1] | |
| F000:EF91 test al, 2 | |
| F000:EF93 jz short di1 | |
| F000:EF95 or byte ptr ds:seg40.diskette_status, 3 | |
| F000:EF9A jmp short di3 | |
| F000:EF9C di1: ; CODE XREF: disk_int+2Fj | |
| F000:EF9C ; disk_int+3Cj | |
| F000:EF9C or byte ptr ds:seg40.diskette_status, 80h | |
| F000:EFA1 mov byte ptr ds:seg40.seek_status, 0 | |
| F000:EFA6 mov dx, 0F2h ; 'ò' | |
| F000:EFA9 pop bp | |
| F000:EFAA call get_drive | |
| F000:EFAD push bp | |
| F000:EFAE out dx, al | |
| F000:EFAF di3: ; CODE XREF: disk_int+Ej | |
| F000:EFAF ; disk_int+16j disk_int+1Bj | |
| F000:EFAF ; disk_int+43j | |
| F000:EFAF mov al, 20h ; ' ' | |
| F000:EFB1 out 20h, al ; Interrupt controller, 8259A. | |
| F000:EFB3 pop bp | |
| F000:EFB4 pop dx | |
| F000:EFB5 pop ax | |
| F000:EFB6 pop ds | |
| F000:EFB7 iret | |
| F000:EFB7 disk_int endp | |
| F000:EFB8 db 0Fh dup(0) | |
| F000:EFC7 ;---------------------------------------------------- | |
| F000:EFC7 ; disk base | |
| F000:EFC7 ; this is the set of parameters required for | |
| F000:EFC7 ; diskette operation. they are pointed at by the | |
| F000:EFC7 ; data variable disk_pointer. to modify the parameters | |
| F000:EFC7 ; build another parameter block and point at it | |
| F000:EFC7 ;---------------------------------------------------- | |
| F000:EFC7 disk_parms db 11001111b ; DATA XREF: boot_strap+Fo | |
| F000:EFC7 ; F000:FF1Fo | |
| F000:EFC7 ; srt=c, hd unload=of - 1st specify byte | |
| F000:EFC8 db 3 ; hd load=1, mode=no dma - 2nd specify byte | |
| F000:EFC9 db 25h ; % ; wait after opn til motor off | |
| F000:EFCA db 2 ; 512 bytes/sector | |
| F000:EFCB db 8 ; eot ( last sector on track ) | |
| F000:EFCC db 2Ah ; * ; gap length | |
| F000:EFCD db 0FFh ; dtl | |
| F000:EFCE db 50h ; P ; gap length for format | |
| F000:EFCF db 0F6h ; ö ; fill byte for format | |
| F000:EFD0 db 25 ; head settle time (milliseconds) | |
| F000:EFD1 db 4 ; motor start time (1/8 seconds) | |
| F000:EFD2 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:EFD2 ; --- int 17 ----------------------------------------- | |
| F000:EFD2 ; printer_io | |
| F000:EFD2 ; this routine provides communication with the printer | |
| F000:EFD2 ; (ah)=0 print the character in (al) | |
| F000:EFD2 ; on return, ah=1 if character could not be printed | |
| F000:EFD2 ; (time out), other bits set as on normal status call | |
| F000:EFD2 ; (ah)=1 initialize the printer port | |
| F000:EFD2 ; returns with (ah) set with printer status | |
| F000:EFD2 ; (ah)=2 read the printer status into (ah) | |
| F000:EFD2 ; | |
| F000:EFD2 ; (finish me) | |
| F000:EFD2 printer_io proc far ; DATA XREF: F000:FF11o | |
| F000:EFD2 ; FUNCTION CHUNK AT F000:18C3 SIZE 00000062 BYTES | |
| F000:EFD2 sti | |
| F000:EFD3 push ds | |
| F000:EFD4 push dx | |
| F000:EFD5 push si | |
| F000:EFD6 push cx | |
| F000:EFD7 push bx | |
| F000:EFD8 call dss | |
| F000:EFDB mov cx, ds:seg40.equip_flag | |
| F000:EFDF test ch, 20h | |
| F000:EFE2 jz short loc_FEFF1 | |
| F000:EFE4 mov bx, ds:seg40.printer_base | |
| F000:EFE8 cmp bx, 2F8h | |
| F000:EFEC jnz short loc_FEFF1 | |
| F000:EFEE jmp reprint | |
| F000:EFF1 loc_FEFF1: ; CODE XREF: printer_io+10j | |
| F000:EFF1 ; printer_io+1Aj | |
| F000:EFF1 mov si, dx | |
| F000:EFF3 mov bl, [si+seg40.print_tim_out] | |
| F000:EFF7 shl si, 1 | |
| F000:EFF9 mov dx, [si+seg40.printer_base] | |
| F000:EFFD or dx, dx | |
| F000:EFFF jz short loc_FF00D | |
| F000:F001 or ah, ah | |
| F000:F003 jz short loc_FF013 | |
| F000:F005 dec ah | |
| F000:F007 jz short loc_FF049 | |
| F000:F009 dec ah | |
| F000:F00B jz short loc_FF035 | |
| F000:F00D loc_FF00D: ; CODE XREF: printer_io:loc_F18EDj | |
| F000:F00D ; printer_io+2Dj | |
| F000:F00D ; printer_io+75j | |
| F000:F00D pop bx | |
| F000:F00E pop cx | |
| F000:F00F pop si | |
| F000:F010 pop dx | |
| F000:F011 pop ds | |
| F000:F012 iret | |
| F000:F013 loc_FF013: ; CODE XREF: printer_io+31j | |
| F000:F013 push ax | |
| F000:F014 out dx, al | |
| F000:F015 inc dx | |
| F000:F016 loc_FF016: ; CODE XREF: printer_io+51j | |
| F000:F016 sub cx, cx | |
| F000:F018 loc_FF018: ; CODE XREF: printer_io+4Dj | |
| F000:F018 in al, dx | |
| F000:F019 mov ah, al | |
| F000:F01B test al, 80h | |
| F000:F01D jnz short loc_FF02D | |
| F000:F01F loop loc_FF018 | |
| F000:F021 dec bl | |
| F000:F023 jnz short loc_FF016 | |
| F000:F025 or ah, 1 | |
| F000:F028 and ah, 0F9h | |
| F000:F02B jmp short loc_FF041 | |
| F000:F02D loc_FF02D: ; CODE XREF: printer_io+4Bj | |
| F000:F02D mov al, 0Dh | |
| F000:F02F inc dx | |
| F000:F030 out dx, al | |
| F000:F031 mov al, 0Ch | |
| F000:F033 out dx, al | |
| F000:F034 pop ax | |
| F000:F035 loc_FF035: ; CODE XREF: printer_io+39j | |
| F000:F035 push ax | |
| F000:F036 loc_FF036: ; CODE XREF: printer_io+86j | |
| F000:F036 mov dx, [si+seg40.printer_base] | |
| F000:F03A inc dx | |
| F000:F03B in al, dx | |
| F000:F03C mov ah, al | |
| F000:F03E and ah, 0F8h | |
| F000:F041 loc_FF041: ; CODE XREF: printer_io+59j | |
| F000:F041 pop dx | |
| F000:F042 mov al, dl | |
| F000:F044 xor ah, 48h | |
| F000:F047 jmp short loc_FF00D | |
| F000:F049 loc_FF049: ; CODE XREF: printer_io+35j | |
| F000:F049 push ax | |
| F000:F04A inc dx | |
| F000:F04B inc dx | |
| F000:F04C mov al, 8 | |
| F000:F04E out dx, al | |
| F000:F04F mov ax, 3E8h | |
| F000:F052 loc_FF052: ; CODE XREF: printer_io+81j | |
| F000:F052 dec ax | |
| F000:F053 jnz short loc_FF052 | |
| F000:F055 mov al, 0Ch | |
| F000:F057 out dx, al | |
| F000:F058 jmp short loc_FF036 | |
| F000:F058 printer_io endp | |
| F000:F05A db 0Bh dup(0) | |
| F000:F065 jmp near ptr video_io | |
| F000:F068 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F068 ; subroutine to save any scan code received | |
| F000:F068 ; by the nmi routine (passed in al) | |
| F000:F068 ; during post in the keyboard buffer | |
| F000:F068 ; called through int 48h | |
| F000:F068 ; (int 0x48 handler) | |
| F000:F068 key_scan_save proc far ; DATA XREF: F000:04D9o | |
| F000:F068 call dss ; point ds to data area | |
| F000:F06B mov si, 1Eh ; point to first location in buffer | |
| F000:F06E mov [si], al ; save scan code | |
| F000:F070 mov ax, sp ; check for stack underflow | |
| F000:F072 and ah, 11100000b ; (these bits will be 111 if underflow happened) | |
| F000:F075 jz short ks_1 | |
| F000:F077 xor al, al | |
| F000:F079 out 0A0h, al ; shut off nmi | |
| F000:F07B mov bx, 2000h ; error code 2000h | |
| F000:F07E mov si, offset key_err ; post message | |
| F000:F081 call e_msg ; and halt system | |
| F000:F084 ks_1: ; CODE XREF: key_scan_save+Dj | |
| F000:F084 iret ; return to caller | |
| F000:F084 key_scan_save endp | |
| F000:F085 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F085 s8250 proc near ; CODE XREF: e_msg+C5j | |
| F000:F085 ; uart+F7p | |
| F000:F085 mov al, 80h ; '' | |
| F000:F087 out dx, al | |
| F000:F088 jmp short $+2 | |
| F000:F08A sub dx, 3 | |
| F000:F08D mov al, 0Ch | |
| F000:F08F out dx, al | |
| F000:F090 jmp short $+2 | |
| F000:F092 inc dx | |
| F000:F093 loc_FF093: | |
| F000:F093 mov al, 0 | |
| F000:F095 out dx, al | |
| F000:F096 jmp short $+2 | |
| F000:F098 inc dx | |
| F000:F099 inc dx | |
| F000:F09A mov al, 0Fh | |
| F000:F09C out dx, al | |
| F000:F09D jmp short $+2 | |
| F000:F09F sub dx, 3 | |
| F000:F0A2 in al, dx | |
| F000:F0A3 retn | |
| F000:F0A3 s8250 endp | |
| F000:F0A4 video_parms db 38h, 28h, 2Ch, 6, 1Fh, 6, 19h ; DATA XREF: kb_int-1457o | |
| F000:F0A4 ; F000:FF1Do | |
| F000:F0A4 ; setup for 40x25 | |
| F000:F0AB db 1Ch, 2, 7, 6, 7 | |
| F000:F0B0 db 4 dup(0) | |
| F000:F0B4 db 71h, 50h, 5Ah, 0Ch, 1Fh, 6, 19h ; setup for 80x25 | |
| F000:F0BB db 1Ch, 2, 7, 6, 7 | |
| F000:F0C0 db 4 dup(0) | |
| F000:F0C4 db 38h, 28h, 2Bh, 6, 7Fh, 6, 64h ; set up for graphics | |
| F000:F0CB db 70h, 2, 1, 26h, 7 | |
| F000:F0D0 db 4 dup(0) | |
| F000:F0D4 db 71h, 50h, 56h, 0Ch, 3Fh, 6, 32h ; set up for graphics | |
| F000:F0DB db 38h, 2, 3, 26h, 7 ; using 32k of memory | |
| F000:F0E0 db 4 dup(0) ; (modes 9 & a) | |
| F000:F0E4 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F0E4 read_ac_current proc far ; CODE XREF: video_io+38j | |
| F000:F0E4 ; DATA XREF: F000:0CF9o | |
| F000:F0E4 cmp ah, 4 | |
| F000:F0E7 jb short loc_FF0EC | |
| F000:F0E9 jmp near ptr graphics_read | |
| F000:F0EC loc_FF0EC: ; CODE XREF: read_ac_current+3j | |
| F000:F0EC call find_position | |
| F000:F0EF mov si, bx | |
| F000:F0F1 push es | |
| F000:F0F2 pop ds | |
| F000:F0F3 lodsw | |
| F000:F0F4 jmp video_return | |
| F000:F0F4 read_ac_current endp | |
| F000:F0F7 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F0F7 find_position proc near ; CODE XREF: read_ac_current:loc_FF0ECp | |
| F000:F0F7 ; write_ac_current+Cp | |
| F000:F0F7 ; write_c_current+Ap | |
| F000:F0F7 mov cl, bh | |
| F000:F0F9 xor ch, ch | |
| F000:F0FB mov si, cx | |
| F000:F0FD shl si, 1 | |
| F000:F0FF mov ax, [si+50h] | |
| F000:F103 xor bx, bx | |
| F000:F105 jcxz short loc_FF10D | |
| F000:F107 loc_FF107: ; CODE XREF: find_position+14j | |
| F000:F107 add bx, ds:4Ch | |
| F000:F10B loop loc_FF107 | |
| F000:F10D loc_FF10D: ; CODE XREF: find_position+Ej | |
| F000:F10D call position | |
| F000:F110 add bx, ax | |
| F000:F112 retn | |
| F000:F112 find_position endp | |
| F000:F113 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F113 write_ac_current proc far ; CODE XREF: video_io+38j | |
| F000:F113 ; DATA XREF: F000:0CFBo | |
| F000:F113 cmp ah, 4 | |
| F000:F116 jb short loc_FF11B | |
| F000:F118 jmp near ptr graphics_write | |
| F000:F11B loc_FF11B: ; CODE XREF: write_ac_current+3j | |
| F000:F11B mov ah, bl | |
| F000:F11D push ax | |
| F000:F11E push cx | |
| F000:F11F call find_position | |
| F000:F122 mov di, bx | |
| F000:F124 pop cx | |
| F000:F125 pop ax | |
| F000:F126 loc_FF126: ; CODE XREF: write_ac_current+14j | |
| F000:F126 stosw | |
| F000:F127 loop loc_FF126 | |
| F000:F129 jmp video_return | |
| F000:F129 write_ac_current endp | |
| F000:F12C ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F12C write_c_current proc far ; CODE XREF: video_io+38j | |
| F000:F12C ; DATA XREF: F000:0CFDo | |
| F000:F12C cmp ah, 4 ; is this graphics? | |
| F000:F12F jb short c65 | |
| F000:F131 jmp near ptr graphics_write | |
| F000:F134 c65: ; CODE XREF: write_c_current+3j | |
| F000:F134 push ax ; save on stack | |
| F000:F135 push cx ; save write count | |
| F000:F136 call find_position | |
| F000:F139 mov di, bx ; address to di | |
| F000:F13B pop cx ; write count | |
| F000:F13C pop bx ; bl has char to write | |
| F000:F13D c66: ; CODE XREF: write_c_current+15j | |
| F000:F13D mov al, bl ; recover char | |
| F000:F13F stosb ; put the char/attr | |
| F000:F140 inc di ; bump pointer past attribute | |
| F000:F141 loop c66 ; as many times as requested | |
| F000:F143 jmp video_return | |
| F000:F143 write_c_current endp | |
| F000:F146 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F146 read_dot proc far ; CODE XREF: video_io+38j | |
| F000:F146 ; DATA XREF: F000:0D03o | |
| F000:F146 cmp byte ptr ds:seg40.crt_mode, 0Ah | |
| F000:F14B jz short loc_FF15E | |
| F000:F14D call c72 | |
| F000:F150 mov al, es:[si] | |
| F000:F153 and al, ah | |
| F000:F155 shl al, cl | |
| F000:F157 mov cl, dh | |
| F000:F159 rol al, cl | |
| F000:F15B jmp video_return | |
| F000:F15E loc_FF15E: ; CODE XREF: read_dot+5j | |
| F000:F15E call c72 | |
| F000:F161 push dx | |
| F000:F162 push cx | |
| F000:F163 push ax | |
| F000:F164 mov al, es:[si+1] | |
| F000:F168 and al, ah | |
| F000:F16A shl al, cl | |
| F000:F16C mov cl, dh | |
| F000:F16E inc cl | |
| F000:F170 rol al, cl | |
| F000:F172 mov bx, ax | |
| F000:F174 pop ax | |
| F000:F175 pop cx | |
| F000:F176 pop dx | |
| F000:F177 mov al, es:[si] | |
| F000:F17A and al, ah | |
| F000:F17C shl al, cl | |
| F000:F17E mov cl, dh | |
| F000:F180 rol al, cl | |
| F000:F182 or al, bl | |
| F000:F184 jmp video_return | |
| F000:F184 read_dot endp | |
| F000:F187 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F187 write_dot proc far ; CODE XREF: video_io+38j | |
| F000:F187 ; DATA XREF: F000:0D01o | |
| F000:F187 push cx | |
| F000:F188 push dx | |
| F000:F189 push ax | |
| F000:F18A push ax | |
| F000:F18B call c72 | |
| F000:F18E shr al, cl | |
| F000:F190 and al, ah | |
| F000:F192 mov cl, es:[si] | |
| F000:F195 pop bx | |
| F000:F196 test bl, 80h | |
| F000:F199 jnz short loc_FF1D1 | |
| F000:F19B not ah | |
| F000:F19D and cl, ah | |
| F000:F19F or al, cl | |
| F000:F1A1 loc_FF1A1: ; CODE XREF: write_dot+4Cj | |
| F000:F1A1 mov es:[si], al | |
| F000:F1A4 pop ax | |
| F000:F1A5 pop dx | |
| F000:F1A6 pop cx | |
| F000:F1A7 cmp byte ptr ds:seg40.crt_mode, 0Ah | |
| F000:F1AC jnz short loc_FF1CE | |
| F000:F1AE push ax | |
| F000:F1AF push ax | |
| F000:F1B0 shr al, 1 | |
| F000:F1B2 call c72 | |
| F000:F1B5 shr al, cl | |
| F000:F1B7 and al, ah | |
| F000:F1B9 mov cl, es:[si+1] | |
| F000:F1BD pop bx | |
| F000:F1BE test bl, 80h | |
| F000:F1C1 jnz short loc_FF1D5 | |
| F000:F1C3 not ah | |
| F000:F1C5 and cl, ah | |
| F000:F1C7 or al, cl | |
| F000:F1C9 loc_FF1C9: ; CODE XREF: write_dot+50j | |
| F000:F1C9 mov es:[si+1], al | |
| F000:F1CD pop ax | |
| F000:F1CE loc_FF1CE: ; CODE XREF: write_dot+25j | |
| F000:F1CE jmp video_return | |
| F000:F1D1 loc_FF1D1: ; CODE XREF: write_dot+12j | |
| F000:F1D1 xor al, cl | |
| F000:F1D3 jmp short loc_FF1A1 | |
| F000:F1D5 loc_FF1D5: ; CODE XREF: write_dot+3Aj | |
| F000:F1D5 xor al, cl | |
| F000:F1D7 jmp short loc_FF1C9 | |
| F000:F1D7 write_dot endp | |
| F000:F1D9 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F1D9 c72 proc near ; CODE XREF: read_dot+7p | |
| F000:F1D9 ; read_dot:loc_FF15Ep | |
| F000:F1D9 ; write_dot+4p write_dot+2Bp | |
| F000:F1D9 push bx | |
| F000:F1DA push ax | |
| F000:F1DB mov al, 28h ; '(' | |
| F000:F1DD push dx | |
| F000:F1DE and dl, 0FEh | |
| F000:F1E1 cmp byte ptr ds:seg40.crt_mode, 9 | |
| F000:F1E6 jb short loc_FF1EB | |
| F000:F1E8 and dl, 0FCh | |
| F000:F1EB loc_FF1EB: ; CODE XREF: c72+Dj | |
| F000:F1EB mul dl | |
| F000:F1ED pop dx | |
| F000:F1EE test dl, 1 | |
| F000:F1F1 jz short loc_FF1F6 | |
| F000:F1F3 add ax, 2000h | |
| F000:F1F6 loc_FF1F6: ; CODE XREF: c72+18j | |
| F000:F1F6 cmp byte ptr ds:seg40.crt_mode, 9 | |
| F000:F1FB jb short loc_FF205 | |
| F000:F1FD test dl, 2 | |
| F000:F200 jz short loc_FF205 | |
| F000:F202 add ax, 4000h | |
| F000:F205 loc_FF205: ; CODE XREF: c72+22j c72+27j | |
| F000:F205 mov si, ax | |
| F000:F207 pop ax | |
| F000:F208 mov dx, cx | |
| F000:F20A mov bx, 2C0h | |
| F000:F20D mov cx, 302h | |
| F000:F210 cmp byte ptr ds:seg40.crt_mode, 4 | |
| F000:F215 jz short loc_FF238 | |
| F000:F217 cmp byte ptr ds:seg40.crt_mode, 5 | |
| F000:F21C jz short loc_FF238 | |
| F000:F21E mov bx, 4F0h | |
| F000:F221 mov cx, 101h | |
| F000:F224 cmp byte ptr ds:seg40.crt_mode, 0Ah | |
| F000:F229 jz short loc_FF232 | |
| F000:F22B cmp byte ptr ds:seg40.crt_mode, 6 | |
| F000:F230 jnz short loc_FF238 | |
| F000:F232 loc_FF232: ; CODE XREF: c72+50j | |
| F000:F232 mov bx, 180h | |
| F000:F235 mov cx, 703h | |
| F000:F238 loc_FF238: ; CODE XREF: c72+3Cj c72+43j | |
| F000:F238 ; c72+57j | |
| F000:F238 and ch, dl | |
| F000:F23A shr dx, cl | |
| F000:F23C add si, dx | |
| F000:F23E cmp byte ptr ds:seg40.crt_mode, 0Ah | |
| F000:F243 jnz short loc_FF247 | |
| F000:F245 add si, dx | |
| F000:F247 loc_FF247: ; CODE XREF: c72+6Aj | |
| F000:F247 mov dh, bh | |
| F000:F249 sub cl, cl | |
| F000:F24B loc_FF24B: ; CODE XREF: c72+78j | |
| F000:F24B ror al, 1 | |
| F000:F24D add cl, ch | |
| F000:F24F dec bh | |
| F000:F251 jnz short loc_FF24B | |
| F000:F253 mov ah, bl | |
| F000:F255 shr ah, cl | |
| F000:F257 pop bx | |
| F000:F258 retn | |
| F000:F258 c72 endp | |
| F000:F259 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F259 graphics_up proc far ; CODE XREF: scroll_up+7j | |
| F000:F259 mov bl, al | |
| F000:F25B mov ax, cx | |
| F000:F25D call graph_posn | |
| F000:F260 mov di, ax | |
| F000:F262 sub dx, cx | |
| F000:F264 add dx, 101h | |
| F000:F268 shl dh, 1 | |
| F000:F26A shl dh, 1 | |
| F000:F26C cmp byte ptr ds:seg40.crt_mode, 6 | |
| F000:F271 jz short loc_FF290 | |
| F000:F273 shl dl, 1 | |
| F000:F275 shl di, 1 | |
| F000:F277 cmp byte ptr ds:seg40.crt_mode, 4 | |
| F000:F27C jz short loc_FF290 | |
| F000:F27E cmp byte ptr ds:seg40.crt_mode, 5 | |
| F000:F283 jz short loc_FF290 | |
| F000:F285 cmp byte ptr ds:seg40.crt_mode, 0Ah | |
| F000:F28A jz short loc_FF290 | |
| F000:F28C shl dl, 1 | |
| F000:F28E shl di, 1 | |
| F000:F290 loc_FF290: ; CODE XREF: graphics_up+18j | |
| F000:F290 ; graphics_up+23j | |
| F000:F290 ; graphics_up+2Aj | |
| F000:F290 ; graphics_up+31j | |
| F000:F290 push es | |
| F000:F291 pop ds | |
| F000:F292 sub ch, ch | |
| F000:F294 shl bl, 1 | |
| F000:F296 shl bl, 1 | |
| F000:F298 jz short loc_FF301 | |
| F000:F29A mov al, bl | |
| F000:F29C mov ah, 50h ; 'P' | |
| F000:F29E mul ah | |
| F000:F2A0 mov si, di | |
| F000:F2A2 add si, ax | |
| F000:F2A4 mov ah, dh | |
| F000:F2A6 sub ah, bl | |
| F000:F2A8 loc_FF2A8: ; CODE XREF: graphics_up+7Dj | |
| F000:F2A8 call c95 | |
| F000:F2AB push ds | |
| F000:F2AC call dss | |
| F000:F2AF cmp byte ptr ds:seg40.crt_mode, 9 | |
| F000:F2B4 pop ds | |
| F000:F2B5 jb short loc_FF2CC | |
| F000:F2B7 add si, 2000h | |
| F000:F2BB add di, 2000h | |
| F000:F2BF call c95 | |
| F000:F2C2 sub si, 3FB0h | |
| F000:F2C6 sub di, 3FB0h | |
| F000:F2CA dec ah | |
| F000:F2CC loc_FF2CC: ; CODE XREF: graphics_up+5Cj | |
| F000:F2CC sub si, 1FB0h | |
| F000:F2D0 sub di, 1FB0h | |
| F000:F2D4 dec ah | |
| F000:F2D6 jnz short loc_FF2A8 | |
| F000:F2D8 loc_FF2D8: ; CODE XREF: graphics_up+AAj | |
| F000:F2D8 mov al, bh | |
| F000:F2DA loc_FF2DA: ; CODE XREF: graphics_up+A3j | |
| F000:F2DA call c96 | |
| F000:F2DD push ds | |
| F000:F2DE call dss | |
| F000:F2E1 cmp byte ptr ds:seg40.crt_mode, 9 | |
| F000:F2E6 pop ds | |
| F000:F2E7 jb short loc_FF2F6 | |
| F000:F2E9 add di, 2000h | |
| F000:F2ED call c96 | |
| F000:F2F0 sub di, 3FB0h | |
| F000:F2F4 dec bl | |
| F000:F2F6 loc_FF2F6: ; CODE XREF: graphics_up+8Ej | |
| F000:F2F6 sub di, 1FB0h | |
| F000:F2FA dec bl | |
| F000:F2FC jnz short loc_FF2DA | |
| F000:F2FE jmp video_return | |
| F000:F301 loc_FF301: ; CODE XREF: graphics_up+3Fj | |
| F000:F301 mov bl, dh | |
| F000:F303 jmp short loc_FF2D8 | |
| F000:F303 graphics_up endp | |
| F000:F305 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F305 graphics_down proc far ; CODE XREF: scroll_down+8j | |
| F000:F305 std | |
| F000:F306 mov bl, al | |
| F000:F308 mov ax, dx | |
| F000:F30A call graph_posn | |
| F000:F30D mov di, ax | |
| F000:F30F sub dx, cx | |
| F000:F311 add dx, 101h | |
| F000:F315 shl dh, 1 | |
| F000:F317 shl dh, 1 | |
| F000:F319 cmp byte ptr ds:seg40.crt_mode, 6 | |
| F000:F31E jz short loc_FF342 | |
| F000:F320 shl dl, 1 | |
| F000:F322 shl di, 1 | |
| F000:F324 inc di | |
| F000:F325 cmp byte ptr ds:seg40.crt_mode, 4 | |
| F000:F32A jz short loc_FF342 | |
| F000:F32C cmp byte ptr ds:seg40.crt_mode, 5 | |
| F000:F331 jz short loc_FF342 | |
| F000:F333 cmp byte ptr ds:seg40.crt_mode, 0Ah | |
| F000:F338 jz short loc_FF342 | |
| F000:F33A dec di | |
| F000:F33B shl dl, 1 | |
| F000:F33D shl di, 1 | |
| F000:F33F add di, 3 | |
| F000:F342 loc_FF342: ; CODE XREF: graphics_down+19j | |
| F000:F342 ; graphics_down+25j | |
| F000:F342 ; graphics_down+2Cj | |
| F000:F342 ; graphics_down+33j | |
| F000:F342 sub ch, ch | |
| F000:F344 mov ax, 0F0h ; 'ð' | |
| F000:F347 cmp byte ptr ds:seg40.crt_mode, 9 | |
| F000:F34C jb short loc_FF351 | |
| F000:F34E mov ax, 0A0h ; ' ' | |
| F000:F351 loc_FF351: ; CODE XREF: graphics_down+47j | |
| F000:F351 add di, ax | |
| F000:F353 shl bl, 1 | |
| F000:F355 shl bl, 1 | |
| F000:F357 jz short loc_FF3C3 | |
| F000:F359 mov al, bl | |
| F000:F35B mov ah, 50h ; 'P' | |
| F000:F35D mul ah | |
| F000:F35F mov si, di | |
| F000:F361 sub si, ax | |
| F000:F363 mov ah, dh | |
| F000:F365 sub ah, bl | |
| F000:F367 push es | |
| F000:F368 pop ds | |
| F000:F369 loc_FF369: ; CODE XREF: graphics_down+92j | |
| F000:F369 call c95 | |
| F000:F36C push ds | |
| F000:F36D call dss | |
| F000:F370 cmp byte ptr ds:seg40.crt_mode, 9 | |
| F000:F375 pop ds | |
| F000:F376 jb short loc_FF38D | |
| F000:F378 add si, 2000h | |
| F000:F37C add di, 2000h | |
| F000:F380 call c95 | |
| F000:F383 sub si, 4050h | |
| F000:F387 sub di, 4050h | |
| F000:F38B dec ah | |
| F000:F38D loc_FF38D: ; CODE XREF: graphics_down+71j | |
| F000:F38D sub si, 2050h | |
| F000:F391 sub di, 2050h | |
| F000:F395 dec ah | |
| F000:F397 jnz short loc_FF369 | |
| F000:F399 loc_FF399: ; CODE XREF: graphics_down+C0j | |
| F000:F399 mov al, bh | |
| F000:F39B loc_FF39B: ; CODE XREF: graphics_down+B8j | |
| F000:F39B call c96 | |
| F000:F39E push ds | |
| F000:F39F call dss | |
| F000:F3A2 cmp byte ptr ds:seg40.crt_mode, 9 | |
| F000:F3A7 pop ds | |
| F000:F3A8 jb short loc_FF3B7 | |
| F000:F3AA add di, 2000h | |
| F000:F3AE call c96 | |
| F000:F3B1 sub di, 4050h | |
| F000:F3B5 dec bl | |
| F000:F3B7 loc_FF3B7: ; CODE XREF: graphics_down+A3j | |
| F000:F3B7 sub di, 2050h | |
| F000:F3BB dec bl | |
| F000:F3BD jnz short loc_FF39B | |
| F000:F3BF cld | |
| F000:F3C0 jmp video_return | |
| F000:F3C3 loc_FF3C3: ; CODE XREF: graphics_down+52j | |
| F000:F3C3 mov bl, dh | |
| F000:F3C5 jmp short loc_FF399 | |
| F000:F3C5 graphics_down endp | |
| F000:F3C7 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F3C7 c95 proc near ; CODE XREF: graphics_up:loc_FF2A8p | |
| F000:F3C7 ; graphics_up+66p | |
| F000:F3C7 ; graphics_down:loc_FF369p | |
| F000:F3C7 ; graphics_down+7Bp | |
| F000:F3C7 mov cl, dl | |
| F000:F3C9 push si | |
| F000:F3CA push di | |
| F000:F3CB rep movsb | |
| F000:F3CD pop di | |
| F000:F3CE pop si | |
| F000:F3CF add si, 2000h | |
| F000:F3D3 add di, 2000h | |
| F000:F3D7 push si | |
| F000:F3D8 push di | |
| F000:F3D9 mov cl, dl | |
| F000:F3DB rep movsb | |
| F000:F3DD pop di | |
| F000:F3DE pop si | |
| F000:F3DF retn | |
| F000:F3DF c95 endp | |
| F000:F3E0 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F3E0 c96 proc near ; CODE XREF: graphics_up:loc_FF2DAp | |
| F000:F3E0 ; graphics_up+94p | |
| F000:F3E0 ; graphics_down:loc_FF39Bp | |
| F000:F3E0 ; graphics_down+A9p | |
| F000:F3E0 mov cl, dl | |
| F000:F3E2 push di | |
| F000:F3E3 rep stosb | |
| F000:F3E5 pop di | |
| F000:F3E6 add di, 2000h | |
| F000:F3EA push di | |
| F000:F3EB mov cl, dl | |
| F000:F3ED rep stosb | |
| F000:F3EF pop di | |
| F000:F3F0 retn | |
| F000:F3F0 c96 endp | |
| F000:F3F1 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F3F1 graphics_write proc far ; CODE XREF: write_ac_current+5j | |
| F000:F3F1 ; write_c_current+5j | |
| F000:F3F1 xor ah, ah ; zero to high of code point | |
| F000:F3F3 push ax ; save code point value | |
| F000:F3F4 call r59 ; find location in regen buffer | |
| F000:F3F7 mov di, ax ; regen pointer in di | |
| F000:F3F9 pop ax ; recover code point | |
| F000:F3FA mov si, 110h ; assume first half (int 0x44) | |
| F000:F3FD cmp al, 80h ; '' ; is it in first half? | |
| F000:F3FF jb short r1 ; jump if it is | |
| F000:F401 mov si, 7Ch ; '|' ; set pointer for second half (int 0x1f) | |
| F000:F404 sub al, 80h ; '' ; zero origin for second half extended_char | |
| F000:F406 r1: ; CODE XREF: graphics_write+Ej | |
| F000:F406 push ds | |
| F000:F407 xor dx, dx | |
| F000:F409 mov ds, dx ; establish vector addressing | |
| F000:F40B lds si, [si] ; get the offset of the table | |
| F000:F40D mov dx, ds | |
| F000:F40F pop ds ; recover data segment | |
| F000:F410 push dx ; save table segment on stack | |
| F000:F411 shl ax, 1 ; multiply code point | |
| F000:F413 shl ax, 1 ; value by 8 | |
| F000:F415 shl ax, 1 | |
| F000:F417 add si, ax ; si has offset of desired codes | |
| F000:F419 cmp byte ptr ds:seg40.crt_mode, 4 | |
| F000:F41E jz short r9_ ; test for medium resolution mode | |
| F000:F420 cmp byte ptr ds:seg40.crt_mode, 5 | |
| F000:F425 jz short r9_ ; test for medium resolution mode | |
| F000:F427 cmp byte ptr ds:seg40.crt_mode, 0Ah | |
| F000:F42C jnz short r3 ; test for medium resolution mode | |
| F000:F42E jmp r16 | |
| F000:F431 r3: ; CODE XREF: graphics_write+3Bj | |
| F000:F431 cmp byte ptr ds:seg40.crt_mode, 6 ; test for high resolution mode | |
| F000:F436 jnz short r12_ ; goto low resolution if not | |
| F000:F438 pop ds ; recover data segment | |
| F000:F439 r5: ; CODE XREF: graphics_write+63j | |
| F000:F439 push di ; save regen pointer | |
| F000:F43A push si ; save code pointer | |
| F000:F43B mov dh, 4 ; number of times through loop | |
| F000:F43D r6: ; CODE XREF: graphics_write+5Ej | |
| F000:F43D lodsb ; get bytes from code points | |
| F000:F43E test bl, 80h ; should we use the function | |
| F000:F441 jnz short r8_ ; to put char in? | |
| F000:F443 stosb ; store in regen buffer | |
| F000:F444 lodsb | |
| F000:F445 r7: ; CODE XREF: graphics_write+72j | |
| F000:F445 mov es:[di+1FFFh], al ; store in second half | |
| F000:F44A add di, 79 ; move to next row in regen | |
| F000:F44D dec dh ; done with loop | |
| F000:F44F jnz short r6 | |
| F000:F451 pop si | |
| F000:F452 pop di ; recover regen pointer | |
| F000:F453 inc di ; point to next char position | |
| F000:F454 loop r5 ; more chars to write | |
| F000:F456 r705: ; CODE XREF: graphics_write+98j | |
| F000:F456 ; graphics_write+E1j | |
| F000:F456 jmp video_return | |
| F000:F459 r8_: ; CODE XREF: graphics_write+50j | |
| F000:F459 xor al, es:[di] | |
| F000:F45C stosb | |
| F000:F45D lodsb | |
| F000:F45E xor al, es:[di+1FFFh] | |
| F000:F463 jmp short r7 | |
| F000:F465 r9_: ; CODE XREF: graphics_write+2Dj | |
| F000:F465 ; graphics_write+34j | |
| F000:F465 pop ds | |
| F000:F466 mov dl, bl | |
| F000:F468 shl di, 1 | |
| F000:F46A call r40 | |
| F000:F46D loc_FF46D: ; CODE XREF: graphics_write+96j | |
| F000:F46D push di | |
| F000:F46E push si | |
| F000:F46F mov dh, 4 | |
| F000:F471 loc_FF471: ; CODE XREF: graphics_write+90j | |
| F000:F471 call r35 | |
| F000:F474 add di, 2000h | |
| F000:F478 call r35 | |
| F000:F47B sub di, 1FB0h | |
| F000:F47F dec dh | |
| F000:F481 jnz short loc_FF471 | |
| F000:F483 pop si | |
| F000:F484 pop di | |
| F000:F485 inc di | |
| F000:F486 inc di | |
| F000:F487 loop loc_FF46D | |
| F000:F489 jmp short r705 | |
| F000:F48B r12_: ; CODE XREF: graphics_write+45j | |
| F000:F48B pop ds | |
| F000:F48C mov dl, bl | |
| F000:F48E shl di, 1 | |
| F000:F490 shl di, 1 | |
| F000:F492 call r42 | |
| F000:F495 loc_FF495: ; CODE XREF: graphics_write+DFj | |
| F000:F495 push di | |
| F000:F496 push si | |
| F000:F497 mov dh, 4 | |
| F000:F499 loc_FF499: ; CODE XREF: graphics_write+D8j | |
| F000:F499 call r39 | |
| F000:F49C add di, 2000h | |
| F000:F4A0 call r39 | |
| F000:F4A3 push ds | |
| F000:F4A4 call dss | |
| F000:F4A7 cmp byte ptr ds:seg40.crt_mode, 9 | |
| F000:F4AC pop ds | |
| F000:F4AD jnz short loc_FF4C3 | |
| F000:F4AF add di, 2000h | |
| F000:F4B3 call r39 | |
| F000:F4B6 add di, 2000h | |
| F000:F4BA call r39 | |
| F000:F4BD sub di, 3FB0h | |
| F000:F4C1 dec dh | |
| F000:F4C3 loc_FF4C3: ; CODE XREF: graphics_write+BCj | |
| F000:F4C3 sub di, 1FB0h | |
| F000:F4C7 dec dh | |
| F000:F4C9 jnz short loc_FF499 | |
| F000:F4CB pop si | |
| F000:F4CC pop di | |
| F000:F4CD add di, 4 | |
| F000:F4D0 loop loc_FF495 | |
| F000:F4D2 jmp short r705 | |
| F000:F4D4 r16: ; CODE XREF: graphics_write+3Dj | |
| F000:F4D4 pop ds ; recover table segment pointer | |
| F000:F4D5 mov dl, bl ; save high color bit | |
| F000:F4D7 shl di, 1 ; offset*2 since 2 bytes/char | |
| F000:F4D9 xor ax, ax | |
| F000:F4DB test bl, 1 ; c0 color bit on? | |
| F000:F4DE jz short r17 ; no, jump | |
| F000:F4E0 mov ah, 0FFh ; yes, set all c0 bits on | |
| F000:F4E2 r17: ; CODE XREF: graphics_write+EDj | |
| F000:F4E2 test bl, 2 ; c1 color bit on? | |
| F000:F4E5 jz short r18 ; no, jump | |
| F000:F4E7 mov al, 0FFh ; yes, set all c1 bits on | |
| F000:F4E9 r18: ; CODE XREF: graphics_write+F4j | |
| F000:F4E9 mov bx, ax ; color mask in bx | |
| F000:F4EB r19: ; CODE XREF: graphics_write+122j | |
| F000:F4EB push di | |
| F000:F4EC push si | |
| F000:F4ED mov dh, 2 | |
| F000:F4EF r20: ; CODE XREF: graphics_write+11Cj | |
| F000:F4EF call r21 | |
| F000:F4F2 add di, 2000h | |
| F000:F4F6 call r21 | |
| F000:F4F9 add di, 2000h | |
| F000:F4FD call r21 | |
| F000:F500 add di, 2000h | |
| F000:F504 call r21 | |
| F000:F507 sub di, 5F60h | |
| F000:F50B dec dh | |
| F000:F50D jnz short r20 | |
| F000:F50F pop si | |
| F000:F510 pop di | |
| F000:F511 inc di | |
| F000:F512 inc di | |
| F000:F513 loop r19 | |
| F000:F515 jmp video_return | |
| F000:F515 graphics_write endp | |
| F000:F518 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F518 r21 proc near ; CODE XREF: graphics_write:r20p | |
| F000:F518 ; graphics_write+105p | |
| F000:F518 ; graphics_write+10Cp | |
| F000:F518 ; graphics_write+113p | |
| F000:F518 lodsb | |
| F000:F519 mov ah, al | |
| F000:F51B and ax, bx | |
| F000:F51D test dl, 80h | |
| F000:F520 jz short loc_FF529 | |
| F000:F522 xor ah, es:[di] | |
| F000:F525 xor al, es:[di+1] | |
| F000:F529 loc_FF529: ; CODE XREF: r21+8j | |
| F000:F529 mov es:[di], ah | |
| F000:F52C mov es:[di+1], al | |
| F000:F530 retn | |
| F000:F530 r21 endp | |
| F000:F531 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F531 graphics_read proc far ; CODE XREF: read_ac_current+5j | |
| F000:F531 call r59 | |
| F000:F534 mov si, ax | |
| F000:F536 sub sp, 8 | |
| F000:F539 mov bp, sp | |
| F000:F53B push es | |
| F000:F53C mov dh, 4 | |
| F000:F53E cmp byte ptr ds:seg40.crt_mode, 6 | |
| F000:F543 jz short loc_FF55C | |
| F000:F545 cmp byte ptr ds:seg40.crt_mode, 4 | |
| F000:F54A jz short loc_FF5AD | |
| F000:F54C cmp byte ptr ds:seg40.crt_mode, 5 | |
| F000:F551 jz short loc_FF5AD | |
| F000:F553 cmp byte ptr ds:seg40.crt_mode, 0Ah | |
| F000:F558 jz short loc_FF5AD | |
| F000:F55A jmp short loc_FF574 | |
| F000:F55C loc_FF55C: ; CODE XREF: graphics_read+12j | |
| F000:F55C pop ds | |
| F000:F55D loc_FF55D: ; CODE XREF: graphics_read+3Fj | |
| F000:F55D mov al, [si] | |
| F000:F55F mov [bp+0], al | |
| F000:F562 inc bp | |
| F000:F563 mov al, [si+2000h] | |
| F000:F567 mov [bp+0], al | |
| F000:F56A inc bp | |
| F000:F56B add si, 50h ; 'P' | |
| F000:F56E dec dh | |
| F000:F570 jnz short loc_FF55D | |
| F000:F572 jmp short loc_FF5E2 | |
| F000:F574 loc_FF574: ; CODE XREF: graphics_read+29j | |
| F000:F574 pop ds | |
| F000:F575 shl si, 1 | |
| F000:F577 shl si, 1 | |
| F000:F579 loc_FF579: ; CODE XREF: graphics_read+78j | |
| F000:F579 call r55 | |
| F000:F57C add si, 2000h | |
| F000:F580 call r55 | |
| F000:F583 push ds | |
| F000:F584 call dss | |
| F000:F587 cmp byte ptr ds:seg40.crt_mode, 9 | |
| F000:F58C pop ds | |
| F000:F58D jnz short loc_FF5A3 | |
| F000:F58F add si, 2000h | |
| F000:F593 call r55 | |
| F000:F596 add si, 2000h | |
| F000:F59A call r55 | |
| F000:F59D sub si, 3FB0h | |
| F000:F5A1 dec dh | |
| F000:F5A3 loc_FF5A3: ; CODE XREF: graphics_read+5Cj | |
| F000:F5A3 sub si, 1FB0h | |
| F000:F5A7 dec dh | |
| F000:F5A9 jnz short loc_FF579 | |
| F000:F5AB jmp short loc_FF5E2 | |
| F000:F5AD loc_FF5AD: ; CODE XREF: graphics_read+19j | |
| F000:F5AD ; graphics_read+20j | |
| F000:F5AD ; graphics_read+27j | |
| F000:F5AD pop ds | |
| F000:F5AE shl si, 1 | |
| F000:F5B0 loc_FF5B0: ; CODE XREF: graphics_read+AFj | |
| F000:F5B0 call r50 | |
| F000:F5B3 add si, 2000h | |
| F000:F5B7 call r50 | |
| F000:F5BA push ds | |
| F000:F5BB call dss | |
| F000:F5BE cmp byte ptr ds:seg40.crt_mode, 0Ah | |
| F000:F5C3 pop ds | |
| F000:F5C4 jnz short loc_FF5DA | |
| F000:F5C6 add si, 2000h | |
| F000:F5CA call r50 | |
| F000:F5CD add si, 2000h | |
| F000:F5D1 call r50 | |
| F000:F5D4 sub si, 3FB0h | |
| F000:F5D8 dec dh | |
| F000:F5DA loc_FF5DA: ; CODE XREF: graphics_read+93j | |
| F000:F5DA sub si, 1FB0h | |
| F000:F5DE dec dh | |
| F000:F5E0 jnz short loc_FF5B0 | |
| F000:F5E2 loc_FF5E2: ; CODE XREF: graphics_read+41j | |
| F000:F5E2 ; graphics_read+7Aj | |
| F000:F5E2 xor ax, ax | |
| F000:F5E4 mov ds, ax | |
| F000:F5E6 les di, ds:110h ; (int 0x44) | |
| F000:F5EA sub bp, 8 | |
| F000:F5ED mov si, bp | |
| F000:F5EF cld | |
| F000:F5F0 xor al, al | |
| F000:F5F2 loc_FF5F2: ; CODE XREF: graphics_read+EDj | |
| F000:F5F2 push ss | |
| F000:F5F3 pop ds | |
| F000:F5F4 mov dx, 80h ; '' | |
| F000:F5F7 loc_FF5F7: ; CODE XREF: graphics_read+D7j | |
| F000:F5F7 push si | |
| F000:F5F8 push di | |
| F000:F5F9 mov cx, 8 | |
| F000:F5FC repe cmpsb | |
| F000:F5FE pop di | |
| F000:F5FF pop si | |
| F000:F600 jz short loc_FF620 | |
| F000:F602 inc al | |
| F000:F604 add di, 8 | |
| F000:F607 dec dx | |
| F000:F608 jnz short loc_FF5F7 | |
| F000:F60A or al, al | |
| F000:F60C jz short loc_FF620 | |
| F000:F60E sub ax, ax | |
| F000:F610 mov ds, ax | |
| F000:F612 les di, ds:7Ch | |
| F000:F616 mov ax, es | |
| F000:F618 or ax, di | |
| F000:F61A jz short loc_FF620 | |
| F000:F61C mov al, 80h ; '' | |
| F000:F61E jmp short loc_FF5F2 | |
| F000:F620 loc_FF620: ; CODE XREF: graphics_read+CFj | |
| F000:F620 ; graphics_read+DBj | |
| F000:F620 ; graphics_read+E9j | |
| F000:F620 add sp, 8 | |
| F000:F623 jmp video_return | |
| F000:F623 graphics_read endp | |
| F000:F626 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F626 r35 proc near ; CODE XREF: graphics_write:loc_FF471p | |
| F000:F626 ; graphics_write+87p | |
| F000:F626 lodsb | |
| F000:F627 call r43 | |
| F000:F62A r36: ; CODE XREF: r38+3j | |
| F000:F62A and ax, bx | |
| F000:F62C test dl, 80h | |
| F000:F62F jz short r37 | |
| F000:F631 xor ah, es:[di] | |
| F000:F634 xor al, es:[di+1] | |
| F000:F638 r37: ; CODE XREF: r35+9j | |
| F000:F638 mov es:[di], ah | |
| F000:F63B mov es:[di+1], al | |
| F000:F63F retn | |
| F000:F63F r35 endp | |
| F000:F640 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F640 r38 proc near ; CODE XREF: r39+8p r39+Ep | |
| F000:F640 call r45 | |
| F000:F643 jmp short r36 | |
| F000:F643 r38 endp | |
| F000:F645 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F645 r39 proc near ; CODE XREF: graphics_write:loc_FF499p | |
| F000:F645 ; graphics_write+AFp | |
| F000:F645 ; graphics_write+C2p | |
| F000:F645 ; graphics_write+C9p | |
| F000:F645 lodsb | |
| F000:F646 push ax | |
| F000:F647 push cx | |
| F000:F648 mov cl, 4 | |
| F000:F64A shr al, cl | |
| F000:F64C pop cx | |
| F000:F64D call r38 | |
| F000:F650 pop ax | |
| F000:F651 inc di | |
| F000:F652 inc di | |
| F000:F653 call r38 | |
| F000:F656 dec di | |
| F000:F657 dec di | |
| F000:F658 retn | |
| F000:F658 r39 endp | |
| F000:F659 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F659 r40 proc near ; CODE XREF: graphics_write+79p | |
| F000:F659 and bl, 3 | |
| F000:F65C mov al, bl | |
| F000:F65E push cx | |
| F000:F65F mov cx, 3 | |
| F000:F662 loc_FF662: ; CODE XREF: r40+Fj | |
| F000:F662 shl al, 1 | |
| F000:F664 shl al, 1 | |
| F000:F666 or bl, al | |
| F000:F668 loop loc_FF662 | |
| F000:F66A mov bh, bl | |
| F000:F66C pop cx | |
| F000:F66D retn | |
| F000:F66D r40 endp | |
| F000:F66E ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F66E r42 proc near ; CODE XREF: graphics_write+A1p | |
| F000:F66E push cx | |
| F000:F66F and bl, 0Fh | |
| F000:F672 mov bh, bl | |
| F000:F674 mov cl, 4 | |
| F000:F676 shl bh, cl | |
| F000:F678 or bh, bl | |
| F000:F67A mov bl, bh | |
| F000:F67C pop cx | |
| F000:F67D retn | |
| F000:F67D r42 endp | |
| F000:F67E ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F67E r43 proc near ; CODE XREF: r35+1p | |
| F000:F67E push dx | |
| F000:F67F push cx | |
| F000:F680 push bx | |
| F000:F681 sub dx, dx | |
| F000:F683 mov cx, 1 | |
| F000:F686 loc_FF686: ; CODE XREF: r43+1Aj | |
| F000:F686 mov bx, ax | |
| F000:F688 and bx, cx | |
| F000:F68A or dx, bx | |
| F000:F68C shl ax, 1 | |
| F000:F68E shl cx, 1 | |
| F000:F690 mov bx, ax | |
| F000:F692 and bx, cx | |
| F000:F694 or dx, bx | |
| F000:F696 shl cx, 1 | |
| F000:F698 jnb short loc_FF686 | |
| F000:F69A mov ax, dx | |
| F000:F69C pop bx | |
| F000:F69D pop cx | |
| F000:F69E pop dx | |
| F000:F69F retn | |
| F000:F69F r43 endp | |
| F000:F6A0 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F6A0 r45 proc near ; CODE XREF: r38p | |
| F000:F6A0 push dx | |
| F000:F6A1 xor dx, dx | |
| F000:F6A3 test al, 8 | |
| F000:F6A5 jz short loc_FF6AA | |
| F000:F6A7 or dh, 0F0h | |
| F000:F6AA loc_FF6AA: ; CODE XREF: r45+5j | |
| F000:F6AA test al, 4 | |
| F000:F6AC jz short loc_FF6B1 | |
| F000:F6AE or dh, 0Fh | |
| F000:F6B1 loc_FF6B1: ; CODE XREF: r45+Cj | |
| F000:F6B1 test al, 2 | |
| F000:F6B3 jz short loc_FF6B8 | |
| F000:F6B5 or dl, 0F0h | |
| F000:F6B8 loc_FF6B8: ; CODE XREF: r45+13j | |
| F000:F6B8 test al, 1 | |
| F000:F6BA jz short loc_FF6BF | |
| F000:F6BC or dl, 0Fh | |
| F000:F6BF loc_FF6BF: ; CODE XREF: r45+1Aj | |
| F000:F6BF mov ax, dx | |
| F000:F6C1 pop dx | |
| F000:F6C2 retn | |
| F000:F6C2 r45 endp | |
| F000:F6C3 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F6C3 r50 proc near ; CODE XREF: graphics_read:loc_FF5B0p | |
| F000:F6C3 ; graphics_read+86p | |
| F000:F6C3 ; graphics_read+99p | |
| F000:F6C3 ; graphics_read+A0p | |
| F000:F6C3 mov ah, [si] | |
| F000:F6C5 mov al, [si+1] | |
| F000:F6C8 push ds | |
| F000:F6C9 call dss | |
| F000:F6CC cmp byte ptr ds:seg40.crt_mode, 0Ah | |
| F000:F6D1 pop ds | |
| F000:F6D2 jnz short loc_FF6E5 | |
| F000:F6D4 push bx | |
| F000:F6D5 mov cx, 8 | |
| F000:F6D8 loc_FF6D8: ; CODE XREF: r50+1Dj | |
| F000:F6D8 sar ah, 1 | |
| F000:F6DA rcr bx, 1 | |
| F000:F6DC sar al, 1 | |
| F000:F6DE rcr bx, 1 | |
| F000:F6E0 loop loc_FF6D8 | |
| F000:F6E2 mov ax, bx | |
| F000:F6E4 pop bx | |
| F000:F6E5 loc_FF6E5: ; CODE XREF: r50+Fj | |
| F000:F6E5 mov cx, 0C000h | |
| F000:F6E8 xor dl, dl | |
| F000:F6EA loc_FF6EA: ; CODE XREF: r50+32j | |
| F000:F6EA test ax, cx | |
| F000:F6EC jz short loc_FF6EF | |
| F000:F6EE stc | |
| F000:F6EF loc_FF6EF: ; CODE XREF: r50+29j | |
| F000:F6EF rcl dl, 1 | |
| F000:F6F1 shr cx, 1 | |
| F000:F6F3 shr cx, 1 | |
| F000:F6F5 jnb short loc_FF6EA | |
| F000:F6F7 mov [bp+0], dl | |
| F000:F6FA inc bp | |
| F000:F6FB retn | |
| F000:F6FB r50 endp | |
| F000:F6FC ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F6FC r55 proc near ; CODE XREF: graphics_read:loc_FF579p | |
| F000:F6FC ; graphics_read+4Fp | |
| F000:F6FC ; graphics_read+62p | |
| F000:F6FC ; graphics_read+69p | |
| F000:F6FC mov ah, [si] | |
| F000:F6FE loc_FF6FE: | |
| F000:F6FE mov al, [si+1] | |
| F000:F701 xor dl, dl | |
| F000:F703 call r56 | |
| F000:F706 mov ah, [si+2] | |
| F000:F709 mov al, [si+3] | |
| F000:F70C call r56 | |
| F000:F70F mov [bp+0], dl | |
| F000:F712 inc bp | |
| F000:F713 retn | |
| F000:F713 r55 endp | |
| F000:F714 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F714 r56 proc near ; CODE XREF: r55+7p r55+10p | |
| F000:F714 mov cx, 0F000h | |
| F000:F717 loc_FF717: ; CODE XREF: r56+12j | |
| F000:F717 test ax, cx | |
| F000:F719 jz short loc_FF71C | |
| F000:F71B stc | |
| F000:F71C loc_FF71C: ; CODE XREF: r56+5j | |
| F000:F71C rcl dl, 1 | |
| F000:F71E shr cx, 1 | |
| F000:F720 shr cx, 1 | |
| F000:F722 shr cx, 1 | |
| F000:F724 shr cx, 1 | |
| F000:F726 jnb short loc_FF717 | |
| F000:F728 retn | |
| F000:F728 r56 endp | |
| F000:F729 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F729 ; exit -- | |
| F000:F729 ; ax contains offset into regen buffer | |
| F000:F729 r59 proc near ; CODE XREF: graphics_write+3p | |
| F000:F729 ; graphics_readp | |
| F000:F729 mov ax, ds:seg40.cursor_posn ; get current cursor | |
| F000:F72C graph_posn: ; CODE XREF: graphics_up+4p | |
| F000:F72C ; graphics_down+5p | |
| F000:F72C push bx ; save register | |
| F000:F72D mov bx, ax ; save a copy of current cursor | |
| F000:F72F mov al, ah ; get rows to al | |
| F000:F731 mul byte ptr ds:seg40.crt_cols ; multiply by bytes/column | |
| F000:F735 cmp byte ptr ds:seg40.crt_mode, 9 ; mode using 32k regen | |
| F000:F73A jnb short r60 ; yes, jump | |
| F000:F73C shl ax, 1 ; multiply by 4 since 4 rows/byte | |
| F000:F73E r60: ; CODE XREF: r59+11j | |
| F000:F73E shl ax, 1 | |
| F000:F740 sub bh, bh ; isolate column value | |
| F000:F742 add ax, bx ; determine offset | |
| F000:F744 pop bx ; recover pointer | |
| F000:F745 retn ; all done | |
| F000:F745 r59 endp | |
| F000:F746 v1 db 2 dup(3), 2 dup(5), 3 dup(3), 0, 2, 3, 4 | |
| F000:F746 ; DATA XREF: read_lpen+31r | |
| F000:F751 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F751 read_lpen proc far ; CODE XREF: video_io+38j | |
| F000:F751 ; DATA XREF: F000:0CF1o | |
| F000:F751 xor ah, ah | |
| F000:F753 mov dx, 3DAh | |
| F000:F756 in al, dx ; Video status bits: | |
| F000:F756 ; 0: retrace. 1=display is in vert or horiz retrace. | |
| F000:F756 ; 1: 1=light pen is triggered; 0=armed | |
| F000:F756 ; 2: 1=light pen switch is open; 0=closed | |
| F000:F756 ; 3: 1=vertical sync pulse is occurring. | |
| F000:F757 test al, 4 | |
| F000:F759 jz short loc_FF75E | |
| F000:F75B jmp loc_FF803 | |
| F000:F75E loc_FF75E: ; CODE XREF: read_lpen+8j | |
| F000:F75E test al, 2 | |
| F000:F760 jnz short loc_FF765 | |
| F000:F762 jmp loc_FF80D | |
| F000:F765 loc_FF765: ; CODE XREF: read_lpen+Fj | |
| F000:F765 mov ah, 10h | |
| F000:F767 mov dx, ds:seg40.addr_6845 | |
| F000:F76B mov al, ah | |
| F000:F76D out dx, al | |
| F000:F76E inc dx | |
| F000:F76F in al, dx | |
| F000:F770 mov ch, al | |
| F000:F772 dec dx | |
| F000:F773 inc ah | |
| F000:F775 mov al, ah | |
| F000:F777 out dx, al | |
| F000:F778 inc dx | |
| F000:F779 in al, dx | |
| F000:F77A mov ah, ch | |
| F000:F77C mov bl, ds:seg40.crt_mode | |
| F000:F780 sub bh, bh | |
| F000:F782 mov bl, cs:v1[bx] ; determine amount to substract | |
| F000:F787 sub ax, bx | |
| F000:F789 cmp ax, 0FA0h | |
| F000:F78C jb short loc_FF790 | |
| F000:F78E xor ax, ax | |
| F000:F790 loc_FF790: ; CODE XREF: read_lpen+3Bj | |
| F000:F790 mov bx, ds:seg40.crt_start | |
| F000:F794 shr bx, 1 | |
| F000:F796 sub ax, bx | |
| F000:F798 jns short loc_FF79C | |
| F000:F79A sub ax, ax | |
| F000:F79C loc_FF79C: ; CODE XREF: read_lpen+47j | |
| F000:F79C mov cl, 3 | |
| F000:F79E cmp byte ptr ds:seg40.crt_mode, 4 | |
| F000:F7A3 jb short loc_FF7EF | |
| F000:F7A5 mov dl, 28h ; '(' | |
| F000:F7A7 cmp byte ptr ds:seg40.crt_mode, 9 | |
| F000:F7AC jb short loc_FF7B0 | |
| F000:F7AE mov dl, 50h ; 'P' | |
| F000:F7B0 loc_FF7B0: ; CODE XREF: read_lpen+5Bj | |
| F000:F7B0 div dl | |
| F000:F7B2 mov ch, al | |
| F000:F7B4 add ch, ch | |
| F000:F7B6 cmp byte ptr ds:seg40.crt_mode, 9 | |
| F000:F7BB jb short loc_FF7C3 | |
| F000:F7BD shr ah, 1 | |
| F000:F7BF shl al, 1 | |
| F000:F7C1 add ch, ch | |
| F000:F7C3 loc_FF7C3: ; CODE XREF: read_lpen+6Aj | |
| F000:F7C3 mov bl, ah | |
| F000:F7C5 sub bh, bh | |
| F000:F7C7 cmp byte ptr ds:seg40.crt_mode, 6 | |
| F000:F7CC jb short loc_FF7E3 | |
| F000:F7CE ja short loc_FF7D6 | |
| F000:F7D0 loc_FF7D0: ; CODE XREF: read_lpen+8Aj | |
| F000:F7D0 mov cl, 4 | |
| F000:F7D2 shl ah, 1 | |
| F000:F7D4 jmp short loc_FF7E3 | |
| F000:F7D6 loc_FF7D6: ; CODE XREF: read_lpen+7Dj | |
| F000:F7D6 cmp byte ptr ds:seg40.crt_mode, 9 | |
| F000:F7DB ja short loc_FF7D0 | |
| F000:F7DD jz short loc_FF7E3 | |
| F000:F7DF mov cl, 2 | |
| F000:F7E1 shr ah, 1 | |
| F000:F7E3 loc_FF7E3: ; CODE XREF: read_lpen+7Bj | |
| F000:F7E3 ; read_lpen+83j | |
| F000:F7E3 ; read_lpen+8Cj | |
| F000:F7E3 shl bx, cl | |
| F000:F7E5 mov dl, ah | |
| F000:F7E7 mov dh, al | |
| F000:F7E9 shr dh, 1 | |
| F000:F7EB shr dh, 1 | |
| F000:F7ED jmp short loc_FF801 | |
| F000:F7EF loc_FF7EF: ; CODE XREF: read_lpen+52j | |
| F000:F7EF div byte ptr ds:seg40.crt_cols | |
| F000:F7F3 mov dh, al | |
| F000:F7F5 mov dl, ah | |
| F000:F7F7 shl al, cl | |
| F000:F7F9 mov ch, al | |
| F000:F7FB mov bl, ah | |
| F000:F7FD xor bh, bh | |
| F000:F7FF shl bx, cl | |
| F000:F801 loc_FF801: ; CODE XREF: read_lpen+9Cj | |
| F000:F801 mov ah, 1 | |
| F000:F803 loc_FF803: ; CODE XREF: read_lpen+Aj | |
| F000:F803 push dx | |
| F000:F804 mov dx, ds:seg40.addr_6845 | |
| F000:F808 add dx, 7 | |
| F000:F80B out dx, al | |
| F000:F80C pop dx | |
| F000:F80D loc_FF80D: ; CODE XREF: read_lpen+11j | |
| F000:F80D pop di | |
| F000:F80E pop si | |
| F000:F80F pop ds | |
| F000:F810 pop ds | |
| F000:F811 pop ds | |
| F000:F812 pop ds | |
| F000:F813 pop es | |
| F000:F814 iret | |
| F000:F814 read_lpen endp ; sp = 0Eh | |
| F000:F815 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F815 ; temporary interrupt service routine | |
| F000:F815 d11 proc far ; DATA XREF: F000:d3o | |
| F000:F815 ; F000:06B6o F000:FEF7o | |
| F000:F815 ; F000:FEF9o F000:FEFBo | |
| F000:F815 ; F000:FEFDo ... | |
| F000:F815 push ds | |
| F000:F816 push ax ; save reg ax contents | |
| F000:F817 call dss | |
| F000:F81A mov al, 0Bh ; read in-service reg | |
| F000:F81C out 20h, al ; (find out what level being serviced) | |
| F000:F81E nop | |
| F000:F81F in al, 20h ; get level | |
| F000:F821 mov ah, al ; save it | |
| F000:F823 or al, ah ; do? (no hardware isr active) | |
| F000:F825 jnz short hw_int | |
| F000:F827 mov ah, 0FFh ; set flag to ff if non-hardware | |
| F000:F829 jmp short set_intr_flag | |
| F000:F82B hw_int: ; CODE XREF: d11+10j | |
| F000:F82B in al, 21h ; get mask value | |
| F000:F82D or al, ah ; mask off lvl being serviced | |
| F000:F82F out 21h, al | |
| F000:F831 mov al, 20h ; ' ' | |
| F000:F833 out 20h, al | |
| F000:F835 set_intr_flag: ; CODE XREF: d11+14j | |
| F000:F835 mov ds:seg40.intr_flag, ah | |
| F000:F839 pop ax | |
| F000:F83A pop ds | |
| F000:F83B sti | |
| F000:F83C dummy_return: ; DATA XREF: F000:FF19o | |
| F000:F83C ; F000:FF1Bo | |
| F000:F83C iret | |
| F000:F83C d11 endp | |
| F000:F83D db 4 dup(0) | |
| F000:F841 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F841 memory_size_determine proc far ; DATA XREF: F000:FF07o | |
| F000:F841 sti | |
| F000:F842 push ds | |
| F000:F843 mov ax, 40h ; '@' | |
| F000:F846 mov ds, ax | |
| F000:F848 mov ax, ds:seg40.memory_size | |
| F000:F84B pop ds | |
| F000:F84C iret | |
| F000:F84C memory_size_determine endp | |
| F000:F84D ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F84D equipment proc far ; DATA XREF: F000:FF05o | |
| F000:F84D sti | |
| F000:F84E push ds | |
| F000:F84F mov ax, 40h ; '@' | |
| F000:F852 mov ds, ax | |
| F000:F854 mov ax, ds:seg40.equip_flag | |
| F000:F857 pop ds | |
| F000:F858 iret | |
| F000:F858 equipment endp | |
| F000:F859 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F859 casette_io proc far ; DATA XREF: F000:FF0Do | |
| F000:F859 sti | |
| F000:F85A push ds | |
| F000:F85B call dss | |
| F000:F85E and byte ptr ds:seg40.bios_break, 7Fh | |
| F000:F863 call w1 | |
| F000:F866 pop ds | |
| F000:F867 retf 2 | |
| F000:F867 casette_io endp | |
| F000:F86A ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F86A w1 proc near ; CODE XREF: casette_io+Ap | |
| F000:F86A or ah, ah | |
| F000:F86C jz short motor_on | |
| F000:F86E dec ah | |
| F000:F870 jz short motor_off | |
| F000:F872 dec ah | |
| F000:F874 jz short read_block | |
| F000:F876 dec ah | |
| F000:F878 jnz short loc_FF87D | |
| F000:F87A jmp write_block | |
| F000:F87D loc_FF87D: ; CODE XREF: w1+Ej | |
| F000:F87D mov ah, 80h ; '' | |
| F000:F87F stc | |
| F000:F880 retn | |
| F000:F880 w1 endp | |
| F000:F881 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F881 motor_on proc near ; CODE XREF: w1+2j begin_opp | |
| F000:F881 in al, 61h ; PC/XT PPI port B bits: | |
| F000:F881 ; 0: Tmr 2 gate ÍËÍ OR 03H=spkr ON | |
| F000:F881 ; 1: Tmr 2 data ͼ AND 0fcH=spkr OFF | |
| F000:F881 ; 3: 1=read high switches | |
| F000:F881 ; 4: 0=enable RAM parity checking | |
| F000:F881 ; 5: 0=enable I/O channel check | |
| F000:F881 ; 6: 0=hold keyboard clock low | |
| F000:F881 ; 7: 0=enable kbrd | |
| F000:F883 and al, 0F7h | |
| F000:F885 w3: ; CODE XREF: motor_off+4j | |
| F000:F885 out 61h, al ; PC/XT PPI port B bits: | |
| F000:F885 ; 0: Tmr 2 gate ÍËÍ OR 03H=spkr ON | |
| F000:F885 ; 1: Tmr 2 data ͼ AND 0fcH=spkr OFF | |
| F000:F885 ; 3: 1=read high switches | |
| F000:F885 ; 4: 0=enable RAM parity checking | |
| F000:F885 ; 5: 0=enable I/O channel check | |
| F000:F885 ; 6: 0=hold keyboard clock low | |
| F000:F885 ; 7: 0=enable kbrd | |
| F000:F887 sub ah, ah | |
| F000:F889 retn | |
| F000:F889 motor_on endp | |
| F000:F88A ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F88A motor_off proc near ; CODE XREF: w1+6j | |
| F000:F88A ; read_block+A8p | |
| F000:F88A ; write_block+6Bp | |
| F000:F88A in al, 61h ; PC/XT PPI port B bits: | |
| F000:F88A ; 0: Tmr 2 gate ÍËÍ OR 03H=spkr ON | |
| F000:F88A ; 1: Tmr 2 data ͼ AND 0fcH=spkr OFF | |
| F000:F88A ; 3: 1=read high switches | |
| F000:F88A ; 4: 0=enable RAM parity checking | |
| F000:F88A ; 5: 0=enable I/O channel check | |
| F000:F88A ; 6: 0=hold keyboard clock low | |
| F000:F88A ; 7: 0=enable kbrd | |
| F000:F88C or al, 8 | |
| F000:F88E jmp short w3 | |
| F000:F88E motor_off endp | |
| F000:F890 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F890 read_block proc near ; CODE XREF: w1+Aj | |
| F000:F890 push bx | |
| F000:F891 push cx | |
| F000:F892 push si | |
| F000:F893 mov si, 7 | |
| F000:F896 call begin_op | |
| F000:F899 loc_FF899: ; CODE XREF: read_block+3Aj | |
| F000:F899 ; read_block+40j | |
| F000:F899 ; read_block+9Cj | |
| F000:F899 in al, 62h ; PC/XT PPI port C. Bits: | |
| F000:F899 ; 0-3: values of DIP switches | |
| F000:F899 ; 5: 1=Timer 2 channel out | |
| F000:F899 ; 6: 1=I/O channel check | |
| F000:F899 ; 7: 1=RAM parity check error occurred. | |
| F000:F89B and al, 10h | |
| F000:F89D mov ds:6Bh, al | |
| F000:F8A0 mov dx, 3F7Ah | |
| F000:F8A3 loc_FF8A3: ; CODE XREF: read_block+23j | |
| F000:F8A3 test byte ptr ds:71h, 80h | |
| F000:F8A8 jnz short loc_FF8AD | |
| F000:F8AA dec dx | |
| F000:F8AB jnz short loc_FF8B0 | |
| F000:F8AD loc_FF8AD: ; CODE XREF: read_block+18j | |
| F000:F8AD jmp loc_FF92F | |
| F000:F8B0 loc_FF8B0: ; CODE XREF: read_block+1Bj | |
| F000:F8B0 call read_half_bit | |
| F000:F8B3 jcxz short loc_FF8A3 | |
| F000:F8B5 mov dx, 378h | |
| F000:F8B8 mov cx, 200h | |
| F000:F8BB cli | |
| F000:F8BC loc_FF8BC: ; CODE XREF: read_block+42j | |
| F000:F8BC ; read_block:loc_FF8D4j | |
| F000:F8BC test byte ptr ds:71h, 80h | |
| F000:F8C1 jnz short loc_FF92F | |
| F000:F8C3 push cx | |
| F000:F8C4 call read_half_bit | |
| F000:F8C7 or cx, cx | |
| F000:F8C9 pop cx | |
| F000:F8CA jz short loc_FF899 | |
| F000:F8CC cmp dx, bx | |
| F000:F8CE jcxz short loc_FF8D4 | |
| F000:F8D0 jnb short loc_FF899 | |
| F000:F8D2 loop loc_FF8BC | |
| F000:F8D4 loc_FF8D4: ; CODE XREF: read_block+3Ej | |
| F000:F8D4 jb short loc_FF8BC | |
| F000:F8D6 call read_half_bit | |
| F000:F8D9 call read_byte | |
| F000:F8DC cmp al, 16h | |
| F000:F8DE jnz short loc_FF929 | |
| F000:F8E0 pop si | |
| F000:F8E1 pop cx | |
| F000:F8E2 pop bx | |
| F000:F8E3 push cx | |
| F000:F8E4 loc_FF8E4: ; CODE XREF: read_block+85j | |
| F000:F8E4 mov word ptr ds:69h, 0FFFFh | |
| F000:F8EA mov dx, 100h | |
| F000:F8ED loc_FF8ED: ; CODE XREF: read_block+71j | |
| F000:F8ED test byte ptr ds:71h, 80h | |
| F000:F8F2 jnz short loc_FF917 | |
| F000:F8F4 call read_byte | |
| F000:F8F7 jb short loc_FF917 | |
| F000:F8F9 jcxz short loc_FF900 | |
| F000:F8FB mov es:[bx], al | |
| F000:F8FE inc bx | |
| F000:F8FF dec cx | |
| F000:F900 loc_FF900: ; CODE XREF: read_block+69j | |
| F000:F900 dec dx | |
| F000:F901 jg short loc_FF8ED | |
| F000:F903 call read_byte | |
| F000:F906 call read_byte | |
| F000:F909 sub ah, ah | |
| F000:F90B cmp word ptr ds:69h, 1D0Fh | |
| F000:F911 jnz short loc_FF919 | |
| F000:F913 jcxz short loc_FF91B | |
| F000:F915 jmp short loc_FF8E4 | |
| F000:F917 loc_FF917: ; CODE XREF: read_block+62j | |
| F000:F917 ; read_block+67j | |
| F000:F917 mov ah, 1 | |
| F000:F919 loc_FF919: ; CODE XREF: read_block+81j | |
| F000:F919 inc ah | |
| F000:F91B loc_FF91B: ; CODE XREF: read_block+83j | |
| F000:F91B pop dx | |
| F000:F91C sub dx, cx | |
| F000:F91E push ax | |
| F000:F91F test ah, 90h | |
| F000:F922 jnz short loc_FF937 | |
| F000:F924 call read_byte | |
| F000:F927 jmp short loc_FF937 | |
| F000:F929 loc_FF929: ; CODE XREF: read_block+4Ej | |
| F000:F929 dec si | |
| F000:F92A jz short loc_FF92F | |
| F000:F92C jmp loc_FF899 | |
| F000:F92F loc_FF92F: ; CODE XREF: read_block:loc_FF8ADj | |
| F000:F92F ; read_block+31j | |
| F000:F92F ; read_block+9Aj | |
| F000:F92F pop si | |
| F000:F930 pop cx | |
| F000:F931 pop bx | |
| F000:F932 sub dx, dx | |
| F000:F934 mov ah, 4 | |
| F000:F936 push ax | |
| F000:F937 loc_FF937: ; CODE XREF: read_block+92j | |
| F000:F937 ; read_block+97j | |
| F000:F937 sti | |
| F000:F938 call motor_off | |
| F000:F93B pop ax | |
| F000:F93C cmp ah, 1 | |
| F000:F93F cmc | |
| F000:F940 retn | |
| F000:F940 read_block endp | |
| F000:F941 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F941 read_byte proc near ; CODE XREF: read_block+49p | |
| F000:F941 ; read_block+64p | |
| F000:F941 ; read_block+73p | |
| F000:F941 ; read_block+76p | |
| F000:F941 ; read_block+94p | |
| F000:F941 push bx | |
| F000:F942 push cx | |
| F000:F943 mov cl, 8 | |
| F000:F945 w19: ; CODE XREF: read_byte+22j | |
| F000:F945 push cx | |
| F000:F946 call read_half_bit | |
| F000:F949 jcxz short w21 | |
| F000:F94B push bx | |
| F000:F94C call read_half_bit | |
| F000:F94F pop ax | |
| F000:F950 jcxz short w21 | |
| F000:F952 add bx, ax | |
| F000:F954 cmp bx, 6F0h | |
| F000:F958 cmc | |
| F000:F959 lahf | |
| F000:F95A pop cx | |
| F000:F95B rcl ch, 1 | |
| F000:F95D sahf | |
| F000:F95E call crc_gen | |
| F000:F961 dec cl | |
| F000:F963 jnz short w19 | |
| F000:F965 mov al, ch | |
| F000:F967 clc | |
| F000:F968 w20: ; CODE XREF: read_byte+2Cj | |
| F000:F968 pop cx | |
| F000:F969 pop bx | |
| F000:F96A retn | |
| F000:F96B w21: ; CODE XREF: read_byte+8j | |
| F000:F96B ; read_byte+Fj | |
| F000:F96B pop cx | |
| F000:F96C stc | |
| F000:F96D jmp short w20 | |
| F000:F96D read_byte endp | |
| F000:F96F ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F96F read_half_bit proc near ; CODE XREF: F000:072Ap | |
| F000:F96F ; F000:072Dp F000:0733p | |
| F000:F96F ; F000:075Fp F000:0762p | |
| F000:F96F ; read_block:loc_FF8B0p ... | |
| F000:F96F mov cx, 64h ; 'd' | |
| F000:F972 mov ah, ds:seg40.last_val | |
| F000:F976 w22: ; CODE XREF: read_half_bit+Dj | |
| F000:F976 in al, 62h ; PC/XT PPI port C. Bits: | |
| F000:F976 ; 0-3: values of DIP switches | |
| F000:F976 ; 5: 1=Timer 2 channel out | |
| F000:F976 ; 6: 1=I/O channel check | |
| F000:F976 ; 7: 1=RAM parity check error occurred. | |
| F000:F978 and al, 10h | |
| F000:F97A cmp al, ah | |
| F000:F97C loope w22 | |
| F000:F97E mov ds:seg40.last_val, al | |
| F000:F981 mov al, 1000000b ; read timer's counter command | |
| F000:F981 ; (timer1, latching, interrupt on terminal count, binary) | |
| F000:F983 out 43h, al ; latch counter | |
| F000:F985 mov bx, ds:seg40.edge_cnt ; bx gets last edge count | |
| F000:F989 in al, 41h ; get ls byte | |
| F000:F98B mov ah, al ; save in ah | |
| F000:F98D in al, 41h ; get ms byte | |
| F000:F98F xchg al, ah ; xchg al,ah | |
| F000:F991 sub bx, ax ; set bx equal to halft bit period | |
| F000:F993 mov ds:seg40.edge_cnt, ax ; update edge count; | |
| F000:F996 retn | |
| F000:F996 read_half_bit endp | |
| F000:F997 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:F997 write_block proc near ; CODE XREF: w1+10j | |
| F000:F997 push bx | |
| F000:F998 push cx | |
| F000:F999 in al, 61h | |
| F000:F99B and al, 0FDh | |
| F000:F99D or al, 1 | |
| F000:F99F out 61h, al | |
| F000:F9A1 mov al, 10110110b ; set up timer - mode 3 square wave | |
| F000:F9A1 ; (tim 2, lsb/msb, square wave, binary) | |
| F000:F9A3 out 43h, al | |
| F000:F9A5 call begin_op ; start motor and delay | |
| F000:F9A8 mov ax, 1184 ; set normal bit size | |
| F000:F9AB call w31 ; set timer | |
| F000:F9AE mov cx, 800h | |
| F000:F9B1 w23: ; CODE XREF: write_block+1Ej | |
| F000:F9B1 stc | |
| F000:F9B2 call write_bit | |
| F000:F9B5 loop w23 | |
| F000:F9B7 cli | |
| F000:F9B8 clc | |
| F000:F9B9 call write_bit | |
| F000:F9BC pop cx | |
| F000:F9BD pop bx | |
| F000:F9BE mov al, 16h | |
| F000:F9C0 call write_byte | |
| F000:F9C3 loc_FF9C3: ; CODE XREF: write_block+53j | |
| F000:F9C3 mov word ptr ds:seg40.crc_reg, 0FFFFh | |
| F000:F9C9 mov dx, 100h | |
| F000:F9CC loc_FF9CC: ; CODE XREF: write_block+40j | |
| F000:F9CC mov al, es:[bx] | |
| F000:F9CF call write_byte | |
| F000:F9D2 jcxz short loc_FF9D6 | |
| F000:F9D4 inc bx | |
| F000:F9D5 dec cx | |
| F000:F9D6 loc_FF9D6: ; CODE XREF: write_block+3Bj | |
| F000:F9D6 dec dx | |
| F000:F9D7 jg short loc_FF9CC | |
| F000:F9D9 mov ax, ds:seg40.crc_reg | |
| F000:F9DC not ax | |
| F000:F9DE push ax | |
| F000:F9DF xchg ah, al | |
| F000:F9E1 call write_byte | |
| F000:F9E4 pop ax | |
| F000:F9E5 call write_byte | |
| F000:F9E8 or cx, cx | |
| F000:F9EA jnz short loc_FF9C3 | |
| F000:F9EC push cx | |
| F000:F9ED sti | |
| F000:F9EE mov cx, 20h ; ' ' | |
| F000:F9F1 loc_FF9F1: ; CODE XREF: write_block+5Ej | |
| F000:F9F1 stc | |
| F000:F9F2 call write_bit | |
| F000:F9F5 loop loc_FF9F1 | |
| F000:F9F7 pop cx | |
| F000:F9F8 mov al, 10110000b ; turn timer2 off | |
| F000:F9F8 ; (tim 2, lsb/msb, interrupt on terminal count, binary) | |
| F000:F9FA out 43h, al | |
| F000:F9FC mov ax, 1 | |
| F000:F9FF call w31 ; set_timer | |
| F000:FA02 call motor_off ; turn motor off | |
| F000:FA05 sub ax, ax ; no errors reported on write op | |
| F000:FA07 retn ; finished | |
| F000:FA07 write_block endp | |
| F000:FA08 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:FA08 ; write a byte to cassette | |
| F000:FA08 ; byte to write is in reg. al | |
| F000:FA08 write_byte proc near ; CODE XREF: write_block+29p | |
| F000:FA08 ; write_block+38p | |
| F000:FA08 ; write_block+4Ap | |
| F000:FA08 ; write_block+4Ep | |
| F000:FA08 push cx | |
| F000:FA09 push ax | |
| F000:FA0A mov ch, al | |
| F000:FA0C mov cl, 8 | |
| F000:FA0E w27: ; CODE XREF: write_byte+12j | |
| F000:FA0E rcl ch, 1 | |
| F000:FA10 pushf | |
| F000:FA11 call write_bit | |
| F000:FA14 popf | |
| F000:FA15 call crc_gen | |
| F000:FA18 dec cl | |
| F000:FA1A jnz short w27 | |
| F000:FA1C pop ax | |
| F000:FA1D pop cx | |
| F000:FA1E retn | |
| F000:FA1E write_byte endp | |
| F000:FA1F ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:FA1F write_bit proc near ; CODE XREF: write_block+1Bp | |
| F000:FA1F ; write_block+22p | |
| F000:FA1F ; write_block+5Bp | |
| F000:FA1F ; write_byte+9p | |
| F000:FA1F mov ax, 4A0h | |
| F000:FA22 jb short loc_FFA27 | |
| F000:FA24 mov ax, 250h | |
| F000:FA27 loc_FFA27: ; CODE XREF: write_bit+3j | |
| F000:FA27 push ax | |
| F000:FA28 loc_FFA28: ; CODE XREF: write_bit+Dj | |
| F000:FA28 in al, 62h ; PC/XT PPI port C. Bits: | |
| F000:FA28 ; 0-3: values of DIP switches | |
| F000:FA28 ; 5: 1=Timer 2 channel out | |
| F000:FA28 ; 6: 1=I/O channel check | |
| F000:FA28 ; 7: 1=RAM parity check error occurred. | |
| F000:FA2A and al, 20h | |
| F000:FA2C jz short loc_FFA28 | |
| F000:FA2E loc_FFA2E: ; CODE XREF: write_bit+13j | |
| F000:FA2E in al, 62h ; PC/XT PPI port C. Bits: | |
| F000:FA2E ; 0-3: values of DIP switches | |
| F000:FA2E ; 5: 1=Timer 2 channel out | |
| F000:FA2E ; 6: 1=I/O channel check | |
| F000:FA2E ; 7: 1=RAM parity check error occurred. | |
| F000:FA30 and al, 20h | |
| F000:FA32 jnz short loc_FFA2E | |
| F000:FA34 pop ax | |
| F000:FA35 w31: ; CODE XREF: write_block+14p | |
| F000:FA35 ; write_block+68p | |
| F000:FA35 out 42h, al ; set low byte of timer2 | |
| F000:FA37 mov al, ah | |
| F000:FA39 out 42h, al ; set high byte of timer2 | |
| F000:FA3B retn | |
| F000:FA3B write_bit endp | |
| F000:FA3C ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:FA3C crc_gen proc near ; CODE XREF: read_byte+1Dp | |
| F000:FA3C ; write_byte+Dp | |
| F000:FA3C mov ax, ds:69h | |
| F000:FA3F rcr ax, 1 | |
| F000:FA41 rcl ax, 1 | |
| F000:FA43 clc | |
| F000:FA44 jno short w32 | |
| F000:FA46 xor ax, 810h | |
| F000:FA49 stc | |
| F000:FA4A w32: ; CODE XREF: crc_gen+8j | |
| F000:FA4A rcl ax, 1 | |
| F000:FA4C mov ds:69h, ax | |
| F000:FA4F retn | |
| F000:FA4F crc_gen endp | |
| F000:FA50 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:FA50 begin_op proc near ; CODE XREF: read_block+6p | |
| F000:FA50 ; write_block+Ep | |
| F000:FA50 call motor_on | |
| F000:FA53 mov bl, 42h ; 'B' | |
| F000:FA55 w33: ; CODE XREF: begin_op+Cj | |
| F000:FA55 mov cx, 700h | |
| F000:FA58 w34: ; CODE XREF: begin_op:w34j | |
| F000:FA58 loop w34 | |
| F000:FA5A dec bl | |
| F000:FA5C jnz short w33 | |
| F000:FA5E retn | |
| F000:FA5E begin_op endp | |
| F000:FA5F ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:FA5F crlf proc near ; CODE XREF: print_screen+1Fp | |
| F000:FA5F ; print_screen+51p | |
| F000:FA5F xor dx, dx | |
| F000:FA61 xor ah, ah | |
| F000:FA63 mov al, 0Dh | |
| F000:FA65 int 17h ; PRINTER - OUTPUT CHARACTER | |
| F000:FA65 ; AL = character, DX = printer port (0-3) | |
| F000:FA65 ; Return: AH = status bits | |
| F000:FA67 xor ah, ah | |
| F000:FA69 mov al, 0Ah | |
| F000:FA6B int 17h ; PRINTER - OUTPUT CHARACTER | |
| F000:FA6B ; AL = character, DX = printer port (0-3) | |
| F000:FA6B ; Return: AH = status bits | |
| F000:FA6D retn | |
| F000:FA6D crlf endp | |
| F000:FA6E crt_char_gen db 0, 0, 0, 0, 0, 0, 0, 0 ; DATA XREF: F000:07CFo | |
| F000:FA6E db 7Eh, 81h,0A5h, 81h,0BDh, 99h, 81h, 7Eh | |
| F000:FA6E db 7Eh,0FFh,0DBh,0FFh,0C3h,0E7h,0FFh, 7Eh | |
| F000:FA6E db 6Ch,0FEh,0FEh,0FEh, 7Ch, 38h, 10h, 0 | |
| F000:FA6E db 10h, 38h, 7Ch,0FEh, 7Ch, 38h, 10h, 0 | |
| F000:FA6E db 38h, 7Ch, 38h,0FEh,0FEh, 7Ch, 38h, 7Ch | |
| F000:FA6E db 10h, 10h, 38h, 7Ch,0FEh, 7Ch, 38h, 7Ch | |
| F000:FA6E db 0, 0, 18h, 3Ch, 3Ch, 18h, 0, 0 | |
| F000:FA6E db 0FFh,0FFh,0E7h,0C3h,0C3h,0E7h,0FFh,0FFh | |
| F000:FA6E db 0, 3Ch, 66h, 42h, 42h, 66h, 3Ch, 0 | |
| F000:FA6E db 0FFh,0C3h, 99h,0BDh,0BDh, 99h,0C3h,0FFh | |
| F000:FA6E db 0Fh, 7, 0Fh, 7Dh,0CCh,0CCh,0CCh, 78h | |
| F000:FA6E db 3Ch, 66h, 66h, 66h, 3Ch, 18h, 7Eh, 18h | |
| F000:FA6E db 3Fh, 33h, 3Fh, 30h, 30h, 70h,0F0h,0E0h | |
| F000:FA6E db 7Fh, 63h, 7Fh, 63h, 63h, 67h,0E6h,0C0h | |
| F000:FA6E db 99h, 5Ah, 3Ch,0E7h,0E7h, 3Ch, 5Ah, 99h | |
| F000:FA6E db 80h,0E0h,0F8h,0FEh,0F8h,0E0h, 80h, 0 | |
| F000:FA6E db 2, 0Eh, 3Eh,0FEh, 3Eh, 0Eh, 2, 0 | |
| F000:FA6E db 18h, 3Ch, 7Eh, 18h, 18h, 7Eh, 3Ch, 18h | |
| F000:FA6E db 66h, 66h, 66h, 66h, 66h, 0, 66h, 0 | |
| F000:FA6E db 7Fh,0DBh,0DBh, 7Bh, 1Bh, 1Bh, 1Bh, 0 | |
| F000:FA6E db 3Eh, 63h, 38h, 6Ch, 6Ch, 38h,0CCh, 78h | |
| F000:FA6E db 0, 0, 0, 0, 7Eh, 7Eh, 7Eh, 0 | |
| F000:FA6E db 18h, 3Ch, 7Eh, 18h, 7Eh, 3Ch, 18h,0FFh | |
| F000:FA6E db 18h, 3Ch, 7Eh, 18h, 18h, 18h, 18h, 0 | |
| F000:FA6E db 18h, 18h, 18h, 18h, 7Eh, 3Ch, 18h, 0 | |
| F000:FA6E db 0, 18h, 0Ch,0FEh, 0Ch, 18h, 0, 0 | |
| F000:FA6E db 0, 30h, 60h,0FEh, 60h, 30h, 0, 0 | |
| F000:FA6E db 0, 0,0C0h,0C0h,0C0h,0FEh, 0, 0 | |
| F000:FA6E db 0, 24h, 66h,0FFh, 66h, 24h, 0, 0 | |
| F000:FA6E db 0, 18h, 3Ch, 7Eh,0FFh,0FFh, 0, 0 | |
| F000:FA6E db 0,0FFh,0FFh, 7Eh, 3Ch, 18h, 0, 0 | |
| F000:FA6E db 0, 0, 0, 0, 0, 0, 0, 0 | |
| F000:FA6E db 30h, 78h, 78h, 30h, 30h, 0, 30h, 0 | |
| F000:FA6E db 6Ch, 6Ch, 6Ch, 0, 0, 0, 0, 0 | |
| F000:FA6E db 6Ch, 6Ch,0FEh, 6Ch,0FEh, 6Ch, 6Ch, 0 | |
| F000:FA6E db 30h, 7Ch,0C0h, 78h, 0Ch,0F8h, 30h, 0 | |
| F000:FA6E db 0,0C6h,0CCh, 18h, 30h, 66h,0C6h, 0 | |
| F000:FA6E db 38h, 6Ch, 38h, 76h,0DCh,0CCh, 76h, 0 | |
| F000:FA6E db 60h, 60h,0C0h, 0, 0, 0, 0, 0 | |
| F000:FA6E db 18h, 30h, 60h, 60h, 60h, 30h, 18h, 0 | |
| F000:FA6E db 60h, 30h, 18h, 18h, 18h, 30h, 60h, 0 | |
| F000:FA6E db 0, 66h, 3Ch,0FFh, 3Ch, 66h, 0, 0 | |
| F000:FA6E db 0, 30h, 30h,0FCh, 30h, 30h, 0, 0 | |
| F000:FA6E db 0, 0, 0, 0, 0, 30h, 30h, 60h | |
| F000:FA6E db 0, 0, 0,0FCh, 0, 0, 0, 0 | |
| F000:FA6E db 0, 0, 0, 0, 0, 30h, 30h, 0 | |
| F000:FA6E db 6, 0Ch, 18h, 30h, 60h,0C0h, 80h, 0 | |
| F000:FA6E db 7Ch,0C6h,0CEh,0DEh,0F6h,0E6h, 7Ch, 0 | |
| F000:FA6E db 30h, 70h, 30h, 30h, 30h, 30h,0FCh, 0 | |
| F000:FA6E db 78h,0CCh, 0Ch, 38h, 60h,0CCh,0FCh, 0 | |
| F000:FA6E db 78h,0CCh, 0Ch, 38h, 0Ch,0CCh, 78h, 0 | |
| F000:FA6E db 1Ch, 3Ch, 6Ch,0CCh,0FEh, 0Ch, 1Eh, 0 | |
| F000:FA6E db 0FCh,0C0h,0F8h, 0Ch, 0Ch,0CCh, 78h, 0 | |
| F000:FA6E db 38h, 60h,0C0h,0F8h,0CCh,0CCh, 78h, 0 | |
| F000:FA6E db 0FCh,0CCh, 0Ch, 18h, 30h, 30h, 30h, 0 | |
| F000:FA6E db 78h,0CCh,0CCh, 78h,0CCh,0CCh, 78h, 0 | |
| F000:FA6E db 78h,0CCh,0CCh, 7Ch, 0Ch, 18h, 70h, 0 | |
| F000:FA6E db 0, 30h, 30h, 0, 0, 30h, 30h, 0 | |
| F000:FA6E db 0, 30h, 30h, 0, 0, 30h, 30h, 60h | |
| F000:FA6E db 18h, 30h, 60h,0C0h, 60h, 30h, 18h, 0 | |
| F000:FA6E db 0, 0,0FCh, 0, 0,0FCh, 0, 0 | |
| F000:FA6E db 60h, 30h, 18h, 0Ch, 18h, 30h, 60h, 0 | |
| F000:FA6E db 78h,0CCh, 0Ch, 18h, 30h, 0, 30h, 0 | |
| F000:FA6E db 7Ch,0C6h,0DEh,0DEh,0DEh,0C0h, 78h, 0 | |
| F000:FA6E db 30h, 78h,0CCh,0CCh,0FCh,0CCh,0CCh, 0 | |
| F000:FA6E db 0FCh, 66h, 66h, 7Ch, 66h, 66h,0FCh, 0 | |
| F000:FA6E db 3Ch, 66h,0C0h,0C0h,0C0h, 66h, 3Ch, 0 | |
| F000:FA6E db 0F8h, 6Ch, 66h, 66h, 66h, 6Ch,0F8h, 0 | |
| F000:FA6E db 0FEh, 62h, 68h, 78h, 68h, 62h,0FEh, 0 | |
| F000:FA6E db 0FEh, 62h, 68h, 78h, 68h, 60h,0F0h, 0 | |
| F000:FA6E db 3Ch, 66h,0C0h,0C0h,0CEh, 66h, 3Eh, 0 | |
| F000:FA6E db 0CCh,0CCh,0CCh,0FCh,0CCh,0CCh,0CCh, 0 | |
| F000:FA6E db 78h, 30h, 30h, 30h, 30h, 30h, 78h, 0 | |
| F000:FA6E db 1Eh, 0Ch, 0Ch, 0Ch,0CCh,0CCh, 78h, 0 | |
| F000:FA6E db 0E6h, 66h, 6Ch, 78h, 6Ch, 66h,0E6h, 0 | |
| F000:FA6E db 0F0h, 60h, 60h, 60h, 62h, 66h,0FEh, 0 | |
| F000:FA6E db 0C6h,0EEh,0FEh,0FEh,0D6h,0C6h,0C6h, 0 | |
| F000:FA6E db 0C6h,0E6h,0F6h,0DEh,0CEh,0C6h,0C6h, 0 | |
| F000:FA6E db 38h, 6Ch,0C6h,0C6h,0C6h, 6Ch, 38h, 0 | |
| F000:FA6E db 0FCh, 66h, 66h, 7Ch, 60h, 60h,0F0h, 0 | |
| F000:FA6E db 78h,0CCh,0CCh,0CCh,0DCh, 78h, 1Ch, 0 | |
| F000:FA6E db 0FCh, 66h, 66h, 7Ch, 6Ch, 66h,0E6h, 0 | |
| F000:FA6E db 78h,0CCh,0E0h, 70h, 1Ch,0CCh, 78h, 0 | |
| F000:FA6E db 0FCh,0B4h, 30h, 30h, 30h, 30h, 78h, 0 | |
| F000:FA6E db 0CCh,0CCh,0CCh,0CCh,0CCh,0CCh,0FCh, 0 | |
| F000:FA6E db 0CCh,0CCh,0CCh,0CCh,0CCh, 78h, 30h, 0 | |
| F000:FA6E db 0C6h,0C6h,0C6h,0D6h,0FEh,0EEh,0C6h, 0 | |
| F000:FA6E db 0C6h,0C6h, 6Ch, 38h, 38h, 6Ch,0C6h, 0 | |
| F000:FA6E db 0CCh,0CCh,0CCh, 78h, 30h, 30h, 78h, 0 | |
| F000:FA6E db 0FEh,0C6h, 8Ch, 18h, 32h, 66h,0FEh, 0 | |
| F000:FA6E db 78h, 60h, 60h, 60h, 60h, 60h, 78h, 0 | |
| F000:FA6E db 0C0h, 60h, 30h, 18h, 0Ch, 6, 2, 0 | |
| F000:FA6E db 78h, 18h, 18h, 18h, 18h, 18h, 78h, 0 | |
| F000:FA6E db 10h, 38h, 6Ch,0C6h, 0, 0, 0, 0 | |
| F000:FA6E db 0, 0, 0, 0, 0, 0, 0,0FFh | |
| F000:FA6E db 30h, 30h, 18h, 0, 0, 0, 0, 0 | |
| F000:FA6E db 0, 0, 78h, 0Ch, 7Ch,0CCh, 76h, 0 | |
| F000:FA6E db 0E0h, 60h, 60h, 7Ch, 66h, 66h,0DCh, 0 | |
| F000:FA6E db 0, 0, 78h,0CCh,0C0h,0CCh, 78h, 0 | |
| F000:FA6E db 1Ch, 0Ch, 0Ch, 7Ch,0CCh,0CCh, 76h, 0 | |
| F000:FA6E db 0, 0, 78h,0CCh,0FCh,0C0h, 78h, 0 | |
| F000:FA6E db 38h, 6Ch, 60h,0F0h, 60h, 60h,0F0h, 0 | |
| F000:FA6E db 0, 0, 76h,0CCh,0CCh, 7Ch, 0Ch,0F8h | |
| F000:FA6E db 0E0h, 60h, 6Ch, 76h, 66h, 66h,0E6h, 0 | |
| F000:FA6E db 30h, 0, 70h, 30h, 30h, 30h, 78h, 0 | |
| F000:FA6E db 0Ch, 0, 0Ch, 0Ch, 0Ch,0CCh,0CCh, 78h | |
| F000:FA6E db 0E0h, 60h, 66h, 6Ch, 78h, 6Ch,0E6h, 0 | |
| F000:FA6E db 70h, 30h, 30h, 30h, 30h, 30h, 78h, 0 | |
| F000:FA6E db 0, 0,0CCh,0FEh,0FEh,0D6h,0C6h, 0 | |
| F000:FA6E db 0, 0,0F8h,0CCh,0CCh,0CCh,0CCh, 0 | |
| F000:FA6E db 0, 0, 78h,0CCh,0CCh,0CCh, 78h, 0 | |
| F000:FA6E db 0, 0,0DCh, 66h, 66h, 7Ch, 60h,0F0h | |
| F000:FA6E db 0, 0, 76h,0CCh,0CCh, 7Ch, 0Ch, 1Eh | |
| F000:FA6E db 0, 0,0DCh, 76h, 66h, 60h,0F0h, 0 | |
| F000:FA6E db 0, 0, 7Ch,0C0h, 78h, 0Ch,0F8h, 0 | |
| F000:FA6E db 10h, 30h, 7Ch, 30h, 30h, 34h, 18h, 0 | |
| F000:FA6E db 0, 0,0CCh,0CCh,0CCh,0CCh, 76h, 0 | |
| F000:FA6E db 0, 0,0CCh,0CCh,0CCh, 78h, 30h, 0 | |
| F000:FA6E db 0, 0,0C6h,0D6h,0FEh,0FEh, 6Ch, 0 | |
| F000:FA6E db 0, 0,0C6h, 6Ch, 38h, 6Ch,0C6h, 0 | |
| F000:FA6E db 0, 0,0CCh,0CCh,0CCh, 7Ch, 0Ch,0F8h | |
| F000:FA6E db 0, 0,0FCh, 98h, 30h, 64h,0FCh, 0 | |
| F000:FA6E db 1Ch, 30h, 30h,0E0h, 30h, 30h, 1Ch, 0 | |
| F000:FA6E db 18h, 18h, 18h, 0, 18h, 18h, 18h, 0 | |
| F000:FA6E db 0E0h, 30h, 30h, 1Ch, 30h, 30h,0E0h, 0 | |
| F000:FA6E db 76h,0DCh, 0, 0, 0, 0, 0, 0 | |
| F000:FA6E db 0, 10h, 38h, 6Ch,0C6h,0C6h,0FEh, 0 | |
| F000:FE6E jmp near ptr time_of_day | |
| F000:FE71 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:FE71 crc_check proc near ; CODE XREF: rom_check+1Ap | |
| F000:FE71 mov bx, cx | |
| F000:FE73 mov dx, 0FFFFh | |
| F000:FE76 cld | |
| F000:FE77 xor ah, ah | |
| F000:FE79 mov cl, 4 | |
| F000:FE7B crc_1: ; CODE XREF: crc_check+24j | |
| F000:FE7B lodsb | |
| F000:FE7C xor dh, al | |
| F000:FE7E mov al, dh | |
| F000:FE80 rol ax, cl | |
| F000:FE82 xor dx, ax | |
| F000:FE84 rol ax, 1 | |
| F000:FE86 xchg dh, dl | |
| F000:FE88 xor dx, ax | |
| F000:FE8A ror ax, cl | |
| F000:FE8C and al, 0E0h | |
| F000:FE8E xor dx, ax | |
| F000:FE90 ror ax, 1 | |
| F000:FE92 xor dh, al | |
| F000:FE94 dec bx | |
| F000:FE95 jnz short crc_1 | |
| F000:FE97 or dx, dx | |
| F000:FE99 retn | |
| F000:FE99 crc_check endp | |
| F000:FE9A ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:FE9A rr1 proc near ; CODE XREF: i8250+Ap | |
| F000:FE9A ; i8250+12p i8250+19p | |
| F000:FE9A xor al, al | |
| F000:FE9C out dx, al | |
| F000:FE9D inc bl | |
| F000:FE9F rr2: ; CODE XREF: i8250+3p | |
| F000:FE9F inc dx | |
| F000:FEA0 rr3: ; CODE XREF: i8250+29p | |
| F000:FEA0 in al, dx | |
| F000:FEA1 retn | |
| F000:FEA1 rr1 endp | |
| F000:FEA2 db 0 | |
| F000:FEA3 db 0 | |
| F000:FEA4 db 0 | |
| F000:FEA5 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:FEA5 ; (int 0x08 handler) | |
| F000:FEA5 timer_int proc far ; DATA XREF: F000:09B4o | |
| F000:FEA5 ; F000:vector_tableo | |
| F000:FEA5 sti ; interrupts back on | |
| F000:FEA6 push ds | |
| F000:FEA7 push ax | |
| F000:FEA8 push dx ; save machine state | |
| F000:FEA9 call dss | |
| F000:FEAC inc word ptr ds:seg40.timer_low ; increment time | |
| F000:FEB0 jnz short t4 ; test day | |
| F000:FEB2 inc word ptr ds:seg40.timer_high ; increment high word of time | |
| F000:FEB6 t4: ; CODE XREF: timer_int+Bj | |
| F000:FEB6 cmp word ptr ds:seg40.timer_high, 18h ; test four count equalling 24 hours | |
| F000:FEBB jnz short t5 ; diskette ctl | |
| F000:FEBD cmp word ptr ds:seg40.timer_low, 0B0h ; '°' | |
| F000:FEC3 jnz short t5 ; diskette ctl | |
| F000:FEC5 sub ax, ax | |
| F000:FEC7 mov ds:seg40.timer_high, ax | |
| F000:FECA mov ds:seg40.timer_low, ax | |
| F000:FECD mov byte ptr ds:seg40.timer_ofl, 1 | |
| F000:FED2 t5: ; CODE XREF: timer_int+16j | |
| F000:FED2 ; timer_int+1Ej | |
| F000:FED2 dec byte ptr ds:seg40.motor_count ; loop till all overflows taken care of | |
| F000:FED6 jnz short t6 ; return if count not out | |
| F000:FED8 and byte ptr ds:seg40.motor_status, 0F0h ; turn off motor running bits | |
| F000:FEDD mov al, (offset loc_F007F+1) ; turn off motor, 00 not reset foc | |
| F000:FEDF out 0F2h, al ; turn off the motor | |
| F000:FEE1 t6: ; CODE XREF: timer_int+31j | |
| F000:FEE1 int 1Ch ; transfer countrol to a user routine | |
| F000:FEE3 mov al, 20h ; ' ' ; end of interrupt to 8259 | |
| F000:FEE5 out 20h, al | |
| F000:FEE7 pop dx | |
| F000:FEE8 pop ax | |
| F000:FEE9 pop ds | |
| F000:FEEA iret | |
| F000:FEEA timer_int endp | |
| F000:FEEB ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:FEEB ros_checksum proc near ; CODE XREF: kb_int-141Bj | |
| F000:FEEB ; F000:0154j | |
| F000:FEEB ; rom_check:rom_1p | |
| F000:FEEB ; ros_checksum+3j | |
| F000:FEEB add al, [si] | |
| F000:FEED inc si | |
| F000:FEEE loop ros_checksum | |
| F000:FEF0 or al, al | |
| F000:FEF2 retn | |
| F000:FEF2 ros_checksum endp | |
| F000:FEF3 vector_table dw offset timer_int ; DATA XREF: F000:07B6o | |
| F000:FEF3 ; int 8 | |
| F000:FEF5 dw offset kb_int ; int 9 | |
| F000:FEF7 dw offset d11 ; int a | |
| F000:FEF9 dw offset d11 ; int b | |
| F000:FEFB dw offset d11 ; int c | |
| F000:FEFD dw offset d11 ; int d | |
| F000:FEFF dw offset disk_int ; int e | |
| F000:FF01 dw offset d11 ; int f | |
| F000:FF03 vector_table_16 dw offset video_io ; DATA XREF: F000:0223o | |
| F000:FF03 ; int 0x10 | |
| F000:FF05 dw offset equipment ; int 0x11 | |
| F000:FF07 dw offset memory_size_determine ; int 0x12 | |
| F000:FF09 dw offset diskette_io ; int 0x13 | |
| F000:FF0B dw offset rs232_io ; int 0x14 | |
| F000:FF0D dw offset casette_io ; int 0x15 | |
| F000:FF0F dw offset keyboard_io ; int 0x16 | |
| F000:FF11 dw offset printer_io ; int 0x17 | |
| F000:FF13 dw 0 ; int 0x18 | |
| F000:FF15 dw offset boot_strap ; int 0x19 | |
| F000:FF17 dw offset time_of_day ; int 0x1a | |
| F000:FF19 dw offset dummy_return ; int 0x1b | |
| F000:FF1B dw offset dummy_return ; int 0x1c | |
| F000:FF1D dw offset video_parms ; int 0x1d | |
| F000:FF1F dw offset disk_parms ; int 0x1e | |
| F000:FF21 dw offset crt_charh ; int 0x1f | |
| F000:FF23 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:FF23 p_msg proc near ; CODE XREF: p_msg+Bj | |
| F000:FF23 mov al, cs:[si] | |
| F000:FF26 inc si | |
| F000:FF27 push ax | |
| F000:FF28 call prt_hex | |
| F000:FF2B pop ax | |
| F000:FF2C cmp al, 0Dh | |
| F000:FF2E jnz short p_msg | |
| F000:FF30 retn | |
| F000:FF30 p_msg endp | |
| F000:FF31 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:FF31 ; bl = beep duration | |
| F000:FF31 beep proc near ; CODE XREF: e_msg+88j | |
| F000:FF31 ; e_msg+A2j write_tty+75p | |
| F000:FF31 ; err_beep+5p | |
| F000:FF31 ; prtn3_int_82+116p | |
| F000:FF31 ; prtn3_int_82+11Dp | |
| F000:FF31 mov al, 10110110b ; sel tim 2,lsb,msb,binary | |
| F000:FF31 ; (tim 2, lsb/msb, square wave, binary) | |
| F000:FF33 out 43h, al ; write the timer mode reg | |
| F000:FF35 mov ax, 533h ; divisor for 1000hz | |
| F000:FF38 out 42h, al ; write timer 2 cnt - lsb | |
| F000:FF3A mov al, ah | |
| F000:FF3C out 42h, al ; write timer 2 cnt - msb | |
| F000:FF3E in al, 61h ; get current setting of port | |
| F000:FF40 mov ah, al ; save that setting | |
| F000:FF42 or al, 3 ; turn speaker on | |
| F000:FF44 out 61h, al | |
| F000:FF46 sub cx, cx ; set cnt to wait 500ms | |
| F000:FF48 delay: ; CODE XREF: beep:delayj | |
| F000:FF48 ; beep+1Bj | |
| F000:FF48 loop delay ; delay before turning off | |
| F000:FF4A dec bl ; delay cnt expired? | |
| F000:FF4C jnz short delay ; no - continue beeping spk | |
| F000:FF4E mov al, ah ; recover value of port | |
| F000:FF50 out 61h, al | |
| F000:FF52 retn ; return to caller | |
| F000:FF52 beep endp | |
| F000:FF53 iret | |
| F000:FF54 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:FF54 print_screen proc far ; DATA XREF: F000:07C3o | |
| F000:FF54 sti | |
| F000:FF55 push ds | |
| F000:FF56 push ax | |
| F000:FF57 push bx | |
| F000:FF58 push cx | |
| F000:FF59 push dx | |
| F000:FF5A mov ax, 50h ; 'P' | |
| F000:FF5D mov ds, ax | |
| F000:FF5F cmp byte ptr ds:0, 1 | |
| F000:FF64 jz short loc_FFFC5 | |
| F000:FF66 mov byte ptr ds:0, 1 | |
| F000:FF6B mov ah, 0Fh | |
| F000:FF6D int 10h ; - VIDEO - GET CURRENT VIDEO MODE | |
| F000:FF6D ; Return: AH = number of columns on screen | |
| F000:FF6D ; AL = current video mode | |
| F000:FF6D ; BH = current active display page | |
| F000:FF6F mov cl, ah | |
| F000:FF71 mov ch, 19h | |
| F000:FF73 call crlf | |
| F000:FF76 push cx | |
| F000:FF77 mov ah, 3 | |
| F000:FF79 int 10h ; - VIDEO - READ CURSOR POSITION | |
| F000:FF79 ; BH = page number | |
| F000:FF79 ; Return: DH,DL = row,column, CH = cursor start line, CL = cursor end line | |
| F000:FF7B pop cx | |
| F000:FF7C push dx | |
| F000:FF7D xor dx, dx | |
| F000:FF7F loc_FFF7F: ; CODE XREF: print_screen+4Aj | |
| F000:FF7F ; print_screen+59j | |
| F000:FF7F mov ah, 2 | |
| F000:FF81 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:FF81 ; DH,DL = row, column (0,0 = upper left) | |
| F000:FF81 ; BH = page number | |
| F000:FF83 mov ah, 8 | |
| F000:FF85 int 10h ; - VIDEO - READ ATTRIBUTES/CHARACTER AT CURSOR POSITION | |
| F000:FF85 ; BH = display page | |
| F000:FF85 ; Return: AL = character | |
| F000:FF85 ; AH = attribute of character (alpha modes) | |
| F000:FF87 or al, al | |
| F000:FF89 jnz short loc_FFF8D | |
| F000:FF8B mov al, 20h ; ' ' | |
| F000:FF8D loc_FFF8D: ; CODE XREF: print_screen+35j | |
| F000:FF8D push dx | |
| F000:FF8E xor dx, dx | |
| F000:FF90 xor ah, ah | |
| F000:FF92 int 17h ; PRINTER - OUTPUT CHARACTER | |
| F000:FF92 ; AL = character, DX = printer port (0-3) | |
| F000:FF92 ; Return: AH = status bits | |
| F000:FF94 pop dx | |
| F000:FF95 test ah, 29h | |
| F000:FF98 jnz short loc_FFFBB | |
| F000:FF9A inc dl | |
| F000:FF9C cmp cl, dl | |
| F000:FF9E jnz short loc_FFF7F | |
| F000:FFA0 xor dl, dl | |
| F000:FFA2 mov ah, dl | |
| F000:FFA4 push dx | |
| F000:FFA5 call crlf | |
| F000:FFA8 pop dx | |
| F000:FFA9 inc dh | |
| F000:FFAB cmp ch, dh | |
| F000:FFAD jnz short loc_FFF7F | |
| F000:FFAF pop dx | |
| F000:FFB0 mov ah, 2 | |
| F000:FFB2 int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:FFB2 ; DH,DL = row, column (0,0 = upper left) | |
| F000:FFB2 ; BH = page number | |
| F000:FFB4 mov byte ptr ds:0, 0 | |
| F000:FFB9 jmp short loc_FFFC5 | |
| F000:FFBB loc_FFFBB: ; CODE XREF: print_screen+44j | |
| F000:FFBB pop dx | |
| F000:FFBC mov ah, 2 | |
| F000:FFBE int 10h ; - VIDEO - SET CURSOR POSITION | |
| F000:FFBE ; DH,DL = row, column (0,0 = upper left) | |
| F000:FFBE ; BH = page number | |
| F000:FFC0 mov byte ptr ds:0, 0FFh | |
| F000:FFC5 loc_FFFC5: ; CODE XREF: print_screen+10j | |
| F000:FFC5 ; print_screen+65j | |
| F000:FFC5 pop dx | |
| F000:FFC6 pop cx | |
| F000:FFC7 pop bx | |
| F000:FFC8 pop ax | |
| F000:FFC9 pop ds | |
| F000:FFCA iret | |
| F000:FFCA print_screen endp | |
| F000:FFCB ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:FFCB bas_ent proc near ; DATA XREF: F000:07D5o | |
| F000:FFCB sub ax, ax | |
| F000:FFCD mov ds, ax | |
| F000:FFCF mov word ptr ds:24h, offset new_int_9 ; int 9 | |
| F000:FFD5 mov ds:60h, ax ; int 0x18: offset | |
| F000:FFD8 mov word ptr ds:62h, 0F600h ; int 0x18: segment (f000:6000) | |
| F000:FFDE int 18h ; TRANSFER TO ROM BASIC | |
| F000:FFDE bas_ent endp ; causes transfer to ROM-based BASIC (IBM-PC) | |
| F000:FFDE ; often reboots a compatible; often has no effect at all | |
| F000:FFE0 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ | |
| F000:FFE0 ; initialize timer subroutine - assumes both lsb and msb | |
| F000:FFE0 ; of timer will be used | |
| F000:FFE0 ; calling parameters: | |
| F000:FFE0 ; (ah) = timer # | |
| F000:FFE0 ; (al) = bit pattern of initialization word | |
| F000:FFE0 ; (bx) = initial count | |
| F000:FFE0 ; (bh) = msb count | |
| F000:FFE0 ; (bl) = lsb count | |
| F000:FFE0 init_timer proc near ; CODE XREF: F000:02A9p | |
| F000:FFE0 ; F000:02AFp F000:0322p | |
| F000:FFE0 ; F000:0342p | |
| F000:FFE0 out 43h, al ; output initial control word | |
| F000:FFE2 mov dx, 40h ; '@' ; base port addr for timers | |
| F000:FFE5 add dl, ah ; add in the timer # | |
| F000:FFE7 mov al, bl | |
| F000:FFE9 out dx, al | |
| F000:FFEA push dx ; pause | |
| F000:FFEB pop dx | |
| F000:FFEC mov al, bh ; load msb | |
| F000:FFEE out dx, al | |
| F000:FFEF retn | |
| F000:FFEF init_timer endp | |
| F000:FFF0 loc_FFFF0: | |
| F000:FFF0 jmp reset | |
| F000:FFF5 a060183 db '06/01/83' | |
| F000:FFFD db 0FFh | |
| F000:FFFE db 0FDh ; ý | |
| F000:FFFF db 7Ah ; z | |
| F000:FFFF F000 ends | |
| F000:FFFF end |