Skip to content
Permalink
master
Switch branches/tags
Go to file
 
 
Cannot retrieve contributors at this time
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