https://124.117.235.200.8021年\REG

; reset fz1, check&erase SRAM and WRAM
mov dx,0xfff4 ; WMB to 0x11
mov al,0x11
mov dx,0xfff5 ; WCY1 to 0x44
mov al,0x44
mov dx,0xfff6 ; WCY2 to 0x01
mov al,0x1
mov dx,0xfff2 ; RFC to 0x8e
mov al,0x8e
; zero registers
; check ROM
mov ax,0xf000
mov cx,0x8000
mov cx,0x8000
repe cmpsw
test cx,cx
; test failed
; check SRAM
mov cx,0x8000
mov cx,0x8000
repe scasw
test cx,cx
; test failed
call 0xb8eb
; 161: lcdinit()
; checksum test
add ax,[cs:si]
test ax,ax
; test failed
call 0x6dd
; init V50 peripherals
call 0x8ae
; init FZ1 peripherals
call 0x7d4
; check WRAM, init SRAM
call 0x73d
; init IRQ table
call 0x70e
; init timer
call 0x7af
; 1: reset MIDI
call 0x2380
; 43: gabint()
call 0xee22
; memory test failed: cycle LEDs
mov al,0xfe
out 0x78,al ; set LEDs
loop 0x6d9
jmp short 0x6d5
; V50 peripheral init
mov dx,0xfffe ; OP connection to 6
mov al,0x6
mov dx,0xfffd ; OP selection to 14
mov al,0xe
mov dx,0xfffc ; OP high to 0
mov al,0x0
mov dx,0xfffb ; DMA low to 0xf0
mov al,0xf0
mov dx,0xfffa ; IUL to 0xe0
mov al,0xe0
mov dx,0xfff9 ; TUL to 0xc0
mov al,0xc0
mov dx,0xfff8 ; SUL to 0xd0
mov al,0xd0
mov dx,0xfff0 ; TCKS to 0
mov al,0x0
; timer init
in al,0xe2
; disable timer IRQ
out 0xe2,al
mov al,0x30
; timer0 mode 0x30
out 0xc6,al
mov al,0xd0
; timer0 = 0x7d0
out 0xc0,al
mov al,0x7
out 0xc0,al
mov al,0x76
; timer1 mode 0x76
out 0xc6,al
mov al,0x8
; timer1 = 0x08
out 0xc2,al
mov al,0x0
out 0xc2,al
mov al,0xb0
; timer2 mode 0xb0
out 0xc6,al
mov al,0xd0
; timer2 = 0x7d0
out 0xc4,al
mov al,0x7
out 0xc4,al
; restore IRQ
out 0xe2,al
; init IRQ table
mov cx,0x100
; set all IRQ to iret
mov bx,0x0
mov ax,0x78e
mov [bx],ax
mov [bx+0x2],cs
add bx,byte +0x4
loop 0x746
8D 06 F9 F7
lea ax,[0xf7f9] ; int3 to f000:f7f9
mov [0xc],ax
8C 0E 0E 00
mov [0xe],cs
mov ax,0xf000 ; DS to ROM
mov ax,0x0
; ES to RAM
mov si,0x78f
; transfer irq vectors
mov di,0x80
mov cx,0x10
mov al,0x1b
; irq0: LTIM=1, ADI=4, single
out 0xe0,al
mov al,0x20
; irq0 vec = 0x200d
out 0xe2,al
mov al,0xd
; irq0: buffered, normal EDI, 8086-mode
out 0xe2,al
mov al,0xc0
; irq6: LTIM=0, ADI=8, cascade
out 0xe0,al
mov al,0xb8
; irq6 vec = 0xb800
out 0xe2,al
; spurious interrupt
; IRQ vectors (PS:PC)
078F: dd 0xfxfxfxf000078e
079F: dd 0xfxfxfxf000078e
; reset MIDI
in al,0xe2
; disable MIDI irq
out 0xe2,al
; quiet serial device
out 0xd2,al
out 0xd2,al
out 0xd2,al
mov al,0x40
; reset serial device
out 0xd2,al
mov al,0x4e
; async, 16x, 8N1.5
out 0xd4,al
mov al,0x15
; reset error, enable rx/tx
out 0xd2,al
mov al,0x2
; enable rxrdy interrupt
out 0xd6,al
; restore IRQ mask
out 0xe2,al
; check wave RAM, init data structures
mov ax,0x1000 ; ES to wave RAM
mov cx,0x10
; wave bank #0
and cl,0x3f
; selec wave bank
in al,0x22
and al,0xc0
out 0x22,al
26 C7 06 00 00 A5 A5
mov word [es:0x0],0xa5a5 ; pattern #1
26 81 3E 00 00 A5 A5
cmp word [es:0x0],0xa5a5
; test failed
26 C7 06 00 00 5A 5A
mov word [es:0x0],0x5a5a ; pattern #2
26 81 3E 00 00 5A 5A
cmp word [es:0x0],0x5a5a
; test failed
; next wave bank
cmp cx,byte +0x40
; process all banks
89 0E D4 08
mov [0x8d4],cx
; store pages
; ES to RAM
mov ax,0xe0e0
; max[] to 0xe0
mov cx,0x4
8D 3E 4E 04
lea di,[0x44e]
mov ax,0x2020
; min[] to 0x20
mov cx,0x4
8D 3E 56 04
lea di,[0x456]
C6 06 5F 04 70
mov byte [0x45f],0x70 ; bender center limit
C6 06 5E 04 8F
mov byte [0x45e],0x8f ;
C7 06 68 04 80 00
mov word [0x468],0x80 ; genbit = 0x80
mov ax,0xffff
mov [0x42c],al
; key = 0xff
mov [0x42d],al
; kkk = 0xff
mov [0x42e],al
; kls = 0xff
mov [0x430],ax
; ki0 = 0xffffffff
mov [0x432],ax
mov [0x434],ax
; ki1 = 0xffffffff
mov [0x436],ax
mov al,0x7f
mov [0x50e],al
; s1mix = 0x7f
mov [0x50f],al
; s2mix = 0x7f
call 0x87f
C6 06 88 52 18
mov byte [0x ; init nowe[]
mov al,0x40
mov [0x528b],al
mov [0x5296],al
C7 06 DA 04 14 00
mov word [0x4da],0x14 ; rec. 200ms
in al,0x24
; DISPLAY pressed?
and al,0x40
80 0E 2F 04 80
or byte [0x42f],0x80
; mark SLS
; init bank[] and voic[]
push byte +0x0
; init bank[]
push word 0x4480
8D 1E 08 0E
lea bx,[0xe08]
call 0xe392
add sp,byte +0x8
; init voic[]
mov cx,0x40
; voice counter
8D 1E 88 22
lea bx,[0x2288]
push byte +0x0
push byte +0x0
call 0x7f10
; init voic[cx]
add sp,byte +0x8
81 C3 C0 00
add bx,0xc0
loop 0x897
; reset peripherals
mov al,0xdf ; all LEDs on
out 0x78,al
mov al,0xc2 ; OBF=ACKE=ACKO=1
out 0x1e,al
mov al,0x89 ; STx = input lines
out 0x26,al
mov al,0xc2 ; inuse/moon=1, scan cursor
out 0x20,al
mov al,0x0 ; bank 0, norm=gain=0
out 0x22,al
mov al,0xfd ; play/mod/scratch LEDs on
out 0x78,al
mov [0x46d],al ; store LED pattern
mov cx,0x4ce ; wait for kbd reset
loop 0x8cc
in al,0x28 ; clear kdb int
mov al,0x0 ; reset DCF/DCA/DCQ
mov dx,0x80
add dx,byte +0x2
81 FA C0 00
cmp dx,0xc0
; serial interrupt
mov ax,0x0
; DS to RAM
; ES to RAM
in al,0xd2
and al,0x2
in al,0xd0
; get rxdata
8B 36 D8 09
mov si,[0x9d8] ; get in buffer pos.
88 84 D6 08
mov [si+0x8d6],al ; write data into buffer
in al,0xd2
; clear rx/tx irq
and al,0x38
FE 06 D8 09
inc byte [0x9d8] ; inc buffer pointer
mov ax,[0x9d8] ; ring buffer overflow?
3B 06 D6 09
cmp ax,[0x9d6]
; no -> proceed
push byte +0x1
call 0x1828
; all_noteoff()
mov al,0x15
; reset & enable serial
out 0xd2,al
8B 1E DA 0A
mov bx,[0xada] ; get out buffer pos.
39 1E DC 0A
cmp [0xadc],bx ; ring buffer overflow?
in al,0xd2
; skip transmission
and al,0x1
if not txrdy
8A 87 DA 09
mov al,[bx+0x9da] ; transmit data
out 0xd0,al
FE 06 DA 0A
inc byte [0xada] ; adjust buffer ptr
; out buffer overflow
in al,0xd6
; enable rxirq
out 0xd6,al
; end of MIDI interrupt
mov al,0x20
; enable serial IRQ
out 0xe0,al
; keyboard interrupt
mov ax,0x0
; DS to RAM
; ES to RAM
in al,0x1a
; skip IRQ if
and al,0x10
in al,0x1a
; wait for SYNC49
and al,0x20
in al,0x28
; get keybard data
8D 3E 02 04
lea di,[0x402] ; DI to keymap
mov cx,0x8
; max keys
test al,0x80
; key off?
xor al,0x80
; search for key
repne scasb
C6 45 FF 00
mov byte [di-0x1],0x0; release key
FE 0E 00 04
dec byte [0x400] ; dec keycount
mov cl,0x80
; note off
; search for free key
repne scasb
mov [di-0x1],ah ; set key
FE 06 00 04
inc byte [0x400] ; inc keycount
mov cl,0x90
; get command body
and al,0x7f
mov dx,0x71
; adjust body
in al,0x1a
; wait for SYNC49
and al,0x20
jmp short 0x94f ; don't wait forever...
; get velocity
in al,0x28
; get velocity
and al,0x3f
; limit to 0-63
cmp al,0x3d
; in range -> proceed
80 3E 00 04 06
cmp byte [0x400],0x6 ; too many fingers?
mov al,[0x401] ; yes, reuse velocity
mov [0x401],al ; store velocity
; weight velocity
2E 8A 9F DB 09
mov bl,[cs:bx+0x9db]
cmp cl,0x90
; clear velocity on
; return velocity
; return key
push word 0x90 ; note on
call 0x2807
add sp,byte +0x6 ; clear params
mov al,0x20
out 0xe0,al
; velocity scaling (0-63 -> 0-127)
09DB: db 0x03,0x08,0x0c,0x10,0x14,0x16,0x18,0x1a
09E3: db 0x1c,0x1d,0x1e,0x1f,0x21,0x23,0x25,0x27
09EB: db 0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30
09F3: db 0x31,0x32,0x33,0x34,0x35,0x36,0x38,0x3a
09FB: db 0x3c,0x3e,0x40,0x42,0x44,0x46,0x48,0x4a
0A03: db 0x4c,0x4e,0x50,0x52,0x54,0x56,0x58,0x5a
0A0B: db 0x5c,0x5e,0x60,0x62,0x64,0x66,0x68,0x6a
0A13: db 0x6c,0x73,0x7b,0x7c,0x7d,0x7e,0x7f,0x7f
; timer interrupt
mov al,0x30
; little endian, mode 0
out 0xc6,al
mov al,0xe8
; timer0 = 0x3e8
out 0xc0,al
mov al,0x3
out 0xc0,al
80 06 0A 04 20
add byte [0x40a],0x20 ; inc big counter by 0x20
80 16 0B 04 00
adc byte [0x40b],0x0
call 0xa96
call 0xbec
call 0xe46
call 0x1cd8
mov dx,0x90
; DX to DCF
mov cx,0x8
8B 9C 0C 04
mov bx,[si+0x40c] ; olddca
3B 9C 1C 04
cmp bx,[si+0x41c] ; newdca
; same -> 0x0a77
; new>old -> 0xa60
; dec olddca
jmp short 0xa61
; inc olddca
89 9C 0C 04
mov [si+0x40c],bx
; MSB to DCF
sub dx,byte +0x10 ; LSB to DCF
add dx,byte +0x10
81 FB DF 00
cmp bx,0xdf
; critical value!?
; process all voices
add dx,byte +0x2 ; address next voice
add si,byte +0x2
loop 0xa51
mov al,0x20
out 0xe0,al
; filter keytrack/transpose
; pointer*2
call 0x22ee
; 42: gene_off()
jmp short 0xa77
; scan buttons
C8 08 00 01
enter 0x8,0x1
36 8A 0E 0B 04
mov cl,[ss:0x40b] ; address keymap
shr bx,0x2
81 E3 03 00
and bx,0x3
mov [bp-0x6],bx
81 E1 03 00
and cx,0x3
cmp cx,byte +0x0
in al,0x20
; set scan lines
and al,0xfc
out 0x20,al
cmp cx,byte +0x2
in al,0x24
; get button code
8A 97 30 04
mov dl,[bx+0x430]
88 87 34 04
mov [bx+0x434],al
in al,0x24
; get button code
88 87 30 04
mov [bx+0x430],al
cmp bx,byte +0x1
mov al,[0x435]
test al,0x80
F6 06 2F 04 01
test byte [0x42f],0x1
80 0E 2F 04 01
or byte [0x42f],0x1
mov ax,0x7f
test al,0x80
F6 06 2F 04 01
test byte [0x42f],0x1
80 26 2F 04 FE
and byte [0x42f],0xfe
F6 06 EC 0D 01
test byte [0xdec],0x1
mov ax,0x40
F6 06 EC 0D 80
test byte [0xdec],0x80
or al,0x80
push word 0xb0
call 0x2807
add sp,byte +0x6
mov dl,0x7
mov dl,0x8
mov ax,0x100
mov bx,[bp-0x6]
8A 8F 34 04
mov cl,[bx+0x434]
test ah,cl
shl bx,0x3
mov [0x42d],al
jmp short 0xb3a
mov al,[0x40b]
and ax,0xf
cmp ax,0xf
mov al,[0x42d]
cmp al,0xff
C6 06 2E 04 FF
mov byte [0x42e],0xff
C7 06 38 04 1F 00
mov word [0x438],0x1f
8A 0E 2C 04
mov cl,[0x42c]
cmp cl,0xff
38 06 2E 04
cmp [0x42e],al
C7 06 38 04 1F 00
mov word [0x438],0x1f
83 3E 38 04 00
cmp word [0x438],byte +0x0
C7 06 38 04 04 00
mov word [0x438],0x4
mov [0x42e],al
mov [0x42c],al
FF 0E 38 04
dec word [0x438]
C6 06 2D 04 FF
mov byte [0x42d],0xff
; function 6: c=mgetc()
; returns character code
mov al,[0x42c]
cmp al,0xff
mov bx,0xffff
8A 1E 2C 04
mov bl,[0x42c]
C6 06 2C 04 FF
mov byte [0x42c],0xff
mov bh,0x0
; function 7: unmgetc(c)
; write character to keycode buffer
C8 00 00 01
enter 0x0,0x1
mov al,[bp+0x4]
mov [0x42c],al
; function 8: push=contsw(c)
; check button c whether pushed (00) or not (0xff)
C8 00 00 01
enter 0x0,0x1
mov bx,0xffff
mov al,[bp+0x4]
3A 06 2E 04
cmp al,[0x42e]
80 3E 38 04 04
cmp byte [0x438],0x4
; function 9
; sample analog voltages
8A 1E 0B 04
mov bl,[0x40b]
F6 06 EC 0D 01
test byte [0xdec],0x1
81 E6 1E 00
and si,0x1e
2E 8B B4 90 0D
mov si,[cs:si+0xd90]
and bl,0x1
in al,0x20
; set ADC source
and al,0xe3
shl bl,0x2
out 0x20,al
; wait for ADC routed
in al,0x60
; force conversion
; delayed return
in al,0x68
; get ADC result
8A 9C 46 04
mov bl,[si+0x446]
88 9C 46 04
mov [si+0x446],bl
test si,si
mov [0x444],al
80 3E D7 04 02
cmp byte [0x4d7],0x2
3A 06 D6 04
cmp al,[0x4d6]
call 0x2656
; rec_trig()
C6 06 D7 04 03
mov byte [0x4d7],0x3
cmp si,byte +0x4
8A 2E 5E 04
mov ch,[0x45e]
8A 0E 5F 04
mov cl,[0x45f]
mov ax,0x81
8A B4 4E 04
mov dh,[si+0x44e]
mov al,0x81
add ax,0x80
8A 94 56 04
mov dl,[si+0x456]
mov al,0x81
88 9C 4E 04
mov [si+0x44e],bl
mov ax,0x101
88 9C 56 04
mov [si+0x456],bl
mov ax,0x0
8B 1E 42 04
mov bx,[0x442]
cmp bx,byte -0x1
cmp ax,0x81
mov [0x442],ax
rcr al,0x2
and al,0x40
F6 06 EC 0D 10
test byte [0xdec],0x10
or al,0x80
push word 0xe0
call 0x2807
add sp,byte +0x6
8A 8C 4E 04
mov cl,[si+0x44e]
8A 94 56 04
mov dl,[si+0x456]
mov al,0x81
jmp short 0xd35
88 9C 4E 04
mov [si+0x44e],bl
mov al,0x81
cmp si,byte +0x2
C6 06 3A 04 06
mov byte [0x43a],0x6
88 9C 56 04
mov [si+0x456],bl
mov al,0x0
cmp si,byte +0x2
8A AC 3A 04
mov ch,[si+0x43a]
cmp ch,0xff
88 8C 3A 04
mov [si+0x43a],cl
sub cl,0x2
88 8C 3A 04
mov [si+0x43a],cl
2E FF A4 80 0D
jmp near [cs:si+0xd80]
8A 26 3A 04
mov ah,[0x43a]
88 26 3A 04
mov [0x43a],ah
mov ax,0x4
F6 06 EC 0D 02
test byte [0xdec],0x2
or al,0x80
push word 0xb0
call 0x2807
add sp,byte +0x6
push word 0xff
mov ax,0x7f
F6 06 EC 0D 04
test byte [0xdec],0x4
or al,0x80
push word 0xd0
call 0x2807
add sp,byte +0x6
mov ax,0x1
F6 06 EC 0D 08
test byte [0xdec],0x8
or al,0x80
push word 0xb0
call 0x2807
add sp,byte +0x6
mov ch,0x0
mov ax,0x7
F6 06 EC 0D 40
test byte [0xdec],0x40
or al,0x80
push word 0xb0
call 0x2807
add sp,byte +0x6
88 0E 45 04
mov [0x445],cl
; function 10: v=mvol()
; read data entry slider (0xff=no change)
mov al,[0x445]
cmp al,0xff
mov bx,0xffff
jmp short 0xe3e
8A 1E 45 04
mov bl,[0x445]
C6 06 45 04 FF
mov byte [0x445],0xff
; function 11: v=evol()
; read line/mic signal
8A 1E 44 04
mov bl,[0x444]
mov bh,0x0
; function 12
C8 0A 00 01
enter 0xa,0x1
C7 46 FC 00 00
mov word [bp-0x4],0x0
83 7E FC 03
cmp word [bp-0x4],byte +0x3
mov bx,[bp-0x4]
8A 87 63 04
mov al,[bx+0x463]
mov [bp-0xa],ax
8A 87 60 04
mov al,[bx+0x460]
mov [bp-0x8],ax
; function 12.2/6/7/8
push word [bp-0x4]
call 0x28e3
cmp bx,byte -0x1
cmp al,0xf8
80 3E EF 0D 01
cmp byte [0xdef],0x1
sub al,0xf8
2E FF A7 94 0E
jmp near [cs:bx+0xe94]
0E94: dw 0x0ea4, 0x0e6b, 0x0eb9, 0x0ebf
0E9C: dw 0x0ec7, 0x0e6b, 0x0e6b, 0x0e6b
; function 12.1
80 3E EE 0D 00
cmp byte [0xdee],0x0
83 06 F0 0D 01
add word [0xdf0],byte +0x1
83 16 F2 0D 00
adc word [0xdf2],byte +0x0
jmp short 0xe6b
; function 12.3
C7 06 F0 0D 00 00
mov word [0xdf0],0x0
; function 12.4
C7 06 EE 0D 00 01
mov word [0xdee],0x100
jmp short 0xe6b
; function 12.5
C7 06 EE 0D FF 01
mov word [0xdee],0x1ff
jmp short 0xe6b
cmp al,0x80
mov [bp-0x8],ax
C7 46 F6 FF FF
mov word [bp-0xa],0xffff
jmp short 0xe6b
mov bx,[bp-0x8]
81 E1 0F 00
and cx,0xf
shr bx,0x4
sub bx,byte +0x8
cmp bx,byte +0x8
2E FF A7 FB 0E
jmp near [cs:bx+0xefb]
movq [bx],mm1
btr [bx],cx
les cx,[bx]
or cx,[bx]
push word [bp-0xa]
push word [bp-0x4]
call 0x178c
add sp,byte +0x8
mov [bp-0xa],bx
80 7E F6 FF
cmp byte [bp-0xa],0xff
mov [bp-0xa],ax
push word [bp-0xa]
push word [bp-0x4]
call 0x14cd
add sp,byte +0x8
mov [bp-0xa],bx
80 7E F6 FF
cmp byte [bp-0xa],0xff
mov [bp-0xa],ax
cmp ax,0x0
mov [0x467],al
mov ax,[bp-0xa]
mov [0x466],al
push word [bp-0x4]
call 0xffd
add sp,byte +0x8
mov [bp-0xa],bx
push word [bp-0xa]
push word [bp-0x4]
call 0x14cd
add sp,byte +0x8
mov [bp-0xa],bx
80 7E F6 FF
cmp byte [bp-0xa],0xff
mov [bp-0xa],ax
push word [bp-0xa]
push word [bp-0x4]
call 0x1544
add sp,byte +0x8
mov [bp-0xa],bx
push word [bp-0x4]
call 0x16c7
add sp,byte +0x6
mov [bp-0xa],bx
push word [bp-0x4]
call 0x16e5
add sp,byte +0x6
mov [bp-0xa],bx
80 7E F6 FF
cmp byte [bp-0xa],0xff
mov [bp-0xa],ax
push word [bp-0xa]
push word [bp-0x4]
call 0x175d
add sp,byte +0x8
mov [bp-0xa],bx
mov al,[bp-0x8]
mov bx,[bp-0x4]
88 87 60 04
mov [bx+0x460],al
mov al,[bp-0xa]
88 87 63 04
mov [bx+0x463],al
inc word [bp-0x4]
; function 13
C8 1E 00 01
enter 0x1e,0x1
mov [bp-0x12],ax
mov [bp-0xa],ax
83 7E F6 08
cmp word [bp-0xa],byte +0x8
jnl 0x1030
8B 36 FE 0D
mov si,[0xdfe] ; get address of bank
test si,si
jns 0x1033
cmp si,byte -0x1
push byte +0x0
call 0x22ee
; 42: gene_off()
push byte +0x1
call 0x22ee
; 42: gene_off()
mov bx,0xffff
call 0x1a95
jmp 0x14a8
mov bx,[bp-0x12]
cmp [si],bx
jna 0x1030
mov al,[0xdea] ; MIDI rec. channel
cmp al,0xff
jnz 0x1045
8A 80 42 01
mov al,[bx+si+0x142] ; mchn
cmp [bp+0x6],al
jnz 0x107c
mov al,[bp+0x8]
cmp al,[bx+si+0x2] ; bhwid
cmp al,[bx+si+0x42] ; blwid
mov al,[bp+0xa]
3A 80 82 00
cmp al,[bx+si+0x82] ; bhtch
3A 80 C2 00
cmp al,[bx+si+0xc2] ; bltch
8A B0 82 01
mov dh,[bx+si+0x182] ; gchn
8A 80 C2 01
mov al,[bx+si+0x1c2] ; bvol
mov [bp-0x4],al
8B B0 02 02
mov si,[bx+si+0x202] ; vp
jmp 0x10a5
jmp 0x14a2
C7 46 F6 08 00
mov word [bp-0xa],0x8
8B 36 04 0E
mov si,[0xe04] ; get address of voice
mov al,[0xdeb] ; MIDI send chn
cmp [bp+0x6],al
jnz 0x107c
mov al,[bp+0x8]
3A 84 AE 00
cmp al,[si+0xae] ; vhwid
3A 84 AF 00
cmp al,[si+0xaf] ; vlwid
mov bl,0xff
C6 46 FC 00
mov byte [bp-0x4],0x0
83 7C 10 00
cmp word [si+0x10],byte +0x0 ; loop
8B 3E 6A 04
mov di,[0x46a] ; lastiy
mov cx,0x8
8B 16 68 04
mov dx,[0x468] ; genbit
add di,byte +0x3a
jnc 0x10c5
8D 3E 20 54
lea di,[0x5420] ; tranv
mov al,[di]
cmp al,0xff
jnz 0x10d6
test dl,bl
89 16 68 04
mov [0x468],dx ; set genbit
jmp 0x1138
loop 0x10b6
8B 3E 6A 04
mov di,[0x46a] ; lastiy
mov cx,0x8
8B 16 68 04
mov dx,[0x468] ; genbit
add di,byte +0x3a
jnc 0x10f2
8D 3E 20 54
lea di,[0x5420] ; tranv
F6 45 0F 40
test byte [di+0xf],0x40
jnz 0x1103
test dl,bl
89 16 68 04
mov [0x468],dx ; set genbit
jmp 0x112f
loop 0x10e3
8B 3E 6A 04
mov di,[0x46a] ; lastiy
mov cx,0x8
8B 16 68 04
mov dx,[0x468] ; genbit
add di,byte +0x3a
jnc 0x111f
8D 3E 20 54
lea di,[0x5420] ; tranv
test dl,bl
89 16 68 04
mov [0x468],dx ; set genbit
jmp 0x112f
loop 0x1110
jmp 0x14a2
call 0x22ee
; 42: gene_off()
8A 16 69 04
mov dl,[0x469] ; genbit/num
81 C2 B0 00
add dx,0xb0
2E 8A 87 AD 14
mov al,[cs:bx+0x14ad]
; DCF settings
2E 8A 87 BD 14
mov al,[cs:bx+0x14bd]
sub dx,byte +0x10
; DCF settings
add dx,byte +0x10
cmp bx,byte +0x10
jnz 0x1146
inc word [bp-0xa]
89 3E 6A 04
mov [0x46a],di ; set lastiy
mov bx,[si+0x10] ; loop
81 E3 00 F0
and bx,0xf000
81 FB 00 20
cmp bx,0x2000
mov dx,[bp+0x8]
8B 1E FE 0D
mov bx,[0xdfe]
cmp bx,byte -0x1
add bx,[bp-0x12]
8A 87 02 01
mov al,[bx+0x102]
jmp short 0x118d
8A 84 B0 00
mov al,[si+0xb0] ; vlcent
mov [bp-0x10],al
add dx,byte +0x24
cmp dx,byte +0x48
jng 0x119e
mov dl,0x48
mov [di+0x8],dx
8A 94 9E 00
mov dl,[si+0x9e] ; lfo_name
and dl,0x7
cmp dl,0x4
mov dx,0x7fff
80 BC 9E 00 05
cmp byte [si+0x9e],0x5 ; lfo_wave=5?
jna 0x11f5
8A BC A0 00
mov bh,[si+0xa0] ; lfo_rate
mov cx,0x8
8D 3E 20 54
lea di,[0x5420] ; tranv
cmp byte [di],0xff
mov si,[di+0xa]
3A BC A0 00
cmp bh,[si+0xa0] ; lfo_rate
jnz 0x11e3
80 BC 9E 00 05
cmp byte [si+0x9e],0x5 ; lfo_wave=5?
add di,byte +0x3a
loop 0x11ce
jmp short 0x11f3
mov ax,[di+0x2]
mov bl,[di+0x4]
mov dx,[di+0xc]
mov [di+0x2],ax
mov [di+0x4],bl
mov [di+0xc],dx
mov al,[bp+0x8]
mov [di],al
mov al,[bp+0x4]
shl al,0x4
or al,[bp+0x6]
mov [di+0x1],al
mov [di+0xa],si
C7 45 10 FF FF
mov word [di+0x10],0xffff
mov [di+0x6],ax
mov [di+0xe],al
mov [di+0x12],ax
mov [di+0x15],al
mov [di+0x26],ax
mov [di+0x29],al
mov al,[si+0x12] ; loop_sus
cmp al,[si+0x13] ; loop_end
jna 0x1236
mov al,[si+0x13] ; loop_end
or al,0x40
mov [di+0xf],al
mov al,[si+0x78] ; dca_sus
cmp al,[si+0x79] ; dca_end
jna 0x1246
mov al,[si+0x79] ; dca_end
mov [di+0x14],al
8A 84 8A 00
mov al,[si+0x8a] ; dcf_sus
3A 84 8B 00
cmp al,[si+0x8b] ; dcf_end
jna 0x1257
8A 84 8B 00
mov al,[si+0x8b] ; dcf_end
mov [di+0x28],al
mov al,[bp+0xa]
add al,0x10
jno 0x1263
mov al,0x7f
mov [bp-0x16],al
F6 AC A5 00
imul byte [si+0xa5] ; vel_dcq_kf
mov [di+0x5],ah
mov [bp-0x6],ax
mov [bp-0x8],ax
mov [bp-0xe],ax
80 7E F2 08
cmp byte [bp-0xe],0x8
jmp 0x1416
83 7E F8 03
cmp word [bp-0x8],byte +0x3
jnl 0x1296
mov bx,[bp-0x8]
8B 16 68 04
mov dx,[0x468]
call 0x195c
mov [bp-0x8],bx
83 7E FA 02
cmp word [bp-0x6],byte +0x2
jnl 0x12a9
mov bx,[bp-0x6]
8B 16 68 04
mov dx,[0x468]
call 0x19da
mov [bp-0x6],bx
mov bx,[bp-0xe]
cmp bl,[si+0x79]
jna 0x12b4
jmp 0x135f
mov cl,[bx+si+0x7a]
and cl,0x7f
mov al,[bp+0x8]
sub al,[bp-0x10]
F6 AC A7 00
imul byte [si+0xa7] ; dca_rs
sar ax,0x7
mov al,[bp-0x16]
F6 AC AB 00
imul byte [si+0xab] ; vel_dca_rs
8A A4 AB 00
mov ah,[si+0xab] ; vel_dca_rs
test ah,ah
cmp ax,0x7f
jng 0x12f2
mov al,0x7f
jmp short 0x12f9
cmp ax,0x1
jnl 0x12f9
mov al,0x1
and bl,0x80
mov bx,[bp-0xe]
mov [bx+di+0x16],al
mov bx,[bp-0xe]
8A 88 82 00
mov cl,[bx+si+0x82] ; dca_stop
mov al,[bp+0x8]
sub al,[bp-0x10]
F6 AC A6 00
imul byte [si+0xa6] ; dca_kf
sar ax,0x4
mov al,[bp-0x16]
F6 AC AA 00
imul byte [si+0xaa] ; vel_dca_kf
8A A4 AA 00
mov ah,[si+0xaa] ; vel_dca_kf
test ah,ah
mov cl,[bp-0x4]
cmp ax,0xff
jng 0x1347
mov al,0xff
jmp short 0x134e
cmp ax,0x0
jnl 0x134e
mov al,0x0
mov bx,[bp-0xe]
cmp bl,[si+0x79]
jnz 0x135c
80 49 16 80
or byte [bx+di+0x16],0x80
mov [bx+di+0x1e],al
mov bx,[bp-0xe]
3A 9C 8B 00
cmp bl,[si+0x8b]
jna 0x136b
jmp 0x1410
8A 88 8C 00
mov cl,[bx+si+0x8c] ; dcf_rate
and cl,0x7f
mov al,[bp+0x8]
sub al,[bp-0x10]
F6 AC A9 00
imul byte [si+0xa9] ; dcf_rs
sar ax,0x7
mov al,[bp-0x16]
F6 AC AD 00
imul byte [si+0xad] ; vel_dcf_rs
8A A4 AD 00
mov ah,[si+0xad] ; vel_dcf_rs
test ah,ah
cmp ax,0x7f
jng 0x13a8
mov al,0x7f
jmp short 0x13af
cmp ax,0x1
jnl 0x13af
mov al,0x1
and bl,0x80
mov bx,[bp-0xe]
mov [bx+di+0x2a],al
mov bx,[bp-0xe]
8A 88 94 00
mov cl,[bx+si+0x94] ; dcf_stop
mov al,[bp+0x8]
sub al,[bp-0x10]
F6 AC A8 00
imul byte [si+0xa8] ; dcf_kf
sar ax,0x4
mov al,[bp-0x16]
F6 AC AC 00
imul byte [si+0xac] ; vel_dcf_kf
8A A4 AC 00
mov ah,[si+0xac] ; vel_dcf_kf
test ah,ah
cmp ax,0xff
jng 0x13f7
mov al,0xff
jmp 0x13fe
cmp ax,0x0
jnl 0x13fe
mov al,0x0
mov bx,[bp-0xe]
3A 9C 8B 00
cmp bl,[si+0x8b] ; dcf_end
jnz 0x140d
80 49 2A 80
or byte [bx+di+0x2a],0x80
mov [bx+di+0x32],al
inc word [bp-0xe]
jmp 0x127a
8D 0E A0 52
lea cx,[0x52a0]
6B 46 06 18
imul ax,[bp+0x6],byte +0x18
mov [bp-0x14],cx
36 8B 16 68 04
mov dx,[ss:0x468]
call 0x225b
80 7D 2A 7F
cmp byte [di+0x2a],0x7f
jnz 0x1435
C6 45 27 FF
mov byte [di+0x27],0xff
36 8B 16 68 04
mov dx,[ss:0x468]
mov cx,[bp-0x14]
call 0x2173
36 8B 16 68 04
mov dx,[ss:0x468]
mov cx,[bp-0x14]
call 0x1e88
80 7D 16 7F
cmp byte [di+0x16],0x7f
jnz 0x1455
C6 45 13 FF
mov byte [di+0x13],0xff
36 8B 16 68 04
mov dx,[ss:0x468]
mov cx,[bp-0x14]
call 0x2039
89 87 0C 04
mov [bx+0x40c],ax
83 7E F8 03
cmp word [bp-0x8],byte +0x3
jnl 0x148d
mov bx,[bp-0x8]
8B 16 68 04
mov dx,[0x468]
call 0x195c
mov [bp-0x8],bx
83 7E FA 02
cmp word [bp-0x6],byte +0x2
jnl 0x1465
mov bx,[bp-0x6]
8B 16 68 04
mov dx,[0x468]
call 0x19da
mov [bp-0x6],bx
jmp short 0x1465
83 7E FA 02
cmp word [bp-0x6],byte +0x2
mov bx,0x2
8B 16 68 04
mov dx,[0x468]
call 0x19da
cmp bx,byte +0x3
jnz 0x1493
inc word [bp-0x12]
jmp 0x1009
mov bx,0xffff
; DCF settings (LSB)
14AD: db 0x3f,0x3f,0x3f,0x3f
db 0x5f,0x5f,0x5f,0x5f
db 0x7f,0x7f,0x7f,0x7f
db 0x9f,0x9f,0x9f,0x9f
; DCF settings (MSB)
14BD: db 0x0f,0x0d,0x0b,0x00
db 0x0f,0x0d,0x0b,0x00
db 0x0f,0x0d,0x0b,0x00
db 0x0f,0x0d,0x0b,0x00
; function 14
C8 0C 00 01
enter 0xc,0x1
8D 3E 20 54
lea di,[0x5420]
mov cx,0x8
mov al,[di]
cmp [bp+0x8],al
jnz 0x1508
mov al,[bp+0x4]
shl al,0x4
or al,[bp+0x6]
cmp al,[di+0x1]
jnz 0x1508
6B 46 06 18
imul ax,[bp+0x6],byte +0x18
80 BF A2 52 40
cmp byte [bx+0x52a2],0x40
jnl 0x1500
call 0x1512
jmp 0x1504
80 4D 0F 80
or byte [di+0xf],0x80
80 65 0F BF
and byte [di+0xf],0xbf
add di,byte +0x3a
loop 0x14d8
mov bx,0xffff
; function 14.1
mov si,[di+0xa]
mov al,[si+0x13]
80 65 0F C0
and byte [di+0xf],0xc0
or [di+0xf],al
mov bl,[si+0x79]
mov al,[di+0x15]
cmp al,[si+0x78]
mov [di+0x15],bl
mov [di+0x14],bl
8A 9C 8B 00
mov bl,[si+0x8b]
mov al,[di+0x29]
3A 84 8A 00
cmp al,[si+0x8a]
mov [di+0x29],bl
mov [di+0x28],bl
; function 15
C8 0C 00 01
enter 0xc,0x1
6B 76 06 18
imul si,[bp+0x6],byte +0x18
mov al,[bp+0x8]
mov bl,[bp+0xa]
8A 26 EC 0D
mov ah,[0xdec]
80 7E 04 01
cmp byte [bp+0x4],0x1
mov ah,0xff
cmp al,0x1
jnz 0x15c6
test ah,0x8
jnz 0x156a
jmp 0x16c2
mov al,[0x528b]
88 A4 A3 52
mov [si+0x52a3],ah
mov al,[0x528c]
88 A4 A4 52
mov [si+0x52a4],ah
mov al,[0x528d]
88 A4 A5 52
mov [si+0x52a5],ah
mov al,[0x528e]
88 A4 A6 52
mov [si+0x52a6],ah
mov al,[0x528f]
2A 26 8F 52
sub ah,[0x528f]
88 A4 A7 52
mov [si+0x52a7],ah
mov al,[0x5290]
2A 26 90 52
sub ah,[0x5290]
88 A4 A8 52
mov [si+0x52a8],ah
mov al,[0x5291]
2A 26 91 52
sub ah,[0x5291]
88 A4 A9 52
mov [si+0x52a9],ah
jmp 0x16c2
cmp al,0x4
jnz 0x162e
test ah,0x2
jnz 0x15d2
jmp 0x16c2
mov al,[0x5292]
88 A4 AA 52
mov [si+0x52aa],ah
mov al,[0x5293]
88 A4 AB 52
mov [si+0x52ab],ah
mov al,[0x5294]
88 A4 AC 52
mov [si+0x52ac],ah
mov al,[0x5295]
88 A4 AD 52
mov [si+0x52ad],ah
mov al,[0x5296]
2A 26 96 52
sub ah,[0x5296]
88 A4 AE 52
mov [si+0x52ae],ah
mov al,[0x5297]
2A 26 97 52
sub ah,[0x5297]
88 A4 AF 52
mov [si+0x52af],ah
mov al,[0x5298]
2A 26 98 52
sub ah,[0x5298]
88 A4 B0 52
mov [si+0x52b0],ah
jmp 0x16c2
cmp al,0x40
jnz 0x1672
test ah,0x80
jnz 0x163a
jmp 0x16c2
88 9C A2 52
mov [si+0x52a2],bl
cmp bl,0x40
jnl 0x166f
8D 3E 20 54
lea di,[0x5420]
mov cx,0x8
cmp byte [di],0xff
3E 8A 46 06
mov al,[ds:bp+0x6]
mov ah,[di+0x1]
and ah,0xf
jnz 0x166a
F6 45 0F 80
test byte [di+0xf],0x80
call 0x1512
80 65 0F 7F
and byte [di+0xf],0x7f
add di,byte +0x3a
loop 0x164a
jmp 0x16c2
cmp al,0x7
jnz 0x1699
test ah,0x20
jnz 0x167d
jmp short 0x16c2
80 7E 04 00
cmp byte [bp+0x4],0x0
jnz 0x1693
mov cx,0x10
88 9C A1 52
mov [si+0x52a1],bl
add si,byte +0x18
loop 0x1688
jmp short 0x16c2
88 9C A1 52
mov [si+0x52a1],bl
jmp short 0x16c2
cmp al,0x7a
jnz 0x16c2
mov al,[bp+0x6]
3A 06 EB 0D
cmp al,[0xdeb]
jnz 0x16c2
cmp bl,0x7f
cmp bl,0x0
jnz 0x16c2
80 0E 2F 04 02
or byte [0x42f],0x2
push byte +0x0
call 0x1828
; all_noteoff()
jmp short 0x16c2
80 26 2F 04 FD
and byte [0x42f],0xfd
mov bx,0xffff
; function 16
C8 02 00 01
enter 0x2,0x1
80 3E ED 0D FF
cmp byte [0xded],0xff
mov al,[0xdeb]
cmp [bp+0x6],al
jnz 0x16e0
mov al,[bp+0x8]
mov [0xded],al
mov bx,0xffff
; function 17
C8 02 00 01
enter 0x2,0x1
F6 06 EC 0D 04
test byte [0xdec],0x4
jnz 0x16f6
80 7E 04 01
cmp byte [bp+0x4],0x1
6B 46 06 18
imul ax,[bp+0x6],byte +0x18
mov bl,[bp+0x8]
mov al,[0x5299]
88 A4 B1 52
mov [si+0x52b1],ah
mov al,[0x529a]
88 A4 B2 52
mov [si+0x52b2],ah
mov al,[0x529b]
88 A4 B3 52
mov [si+0x52b3],ah
mov al,[0x529c]
88 A4 B4 52
mov [si+0x52b4],ah
mov al,[0x529d]
2A 26 9D 52
sub ah,[0x529d]
88 A4 B5 52
mov [si+0x52b5],ah
mov al,[0x529e]
2A 26 9E 52
sub ah,[0x529e]
88 A4 B6 52
mov [si+0x52b6],ah
mov al,[0x529f]
2A 26 9F 52
sub ah,[0x529f]
88 A4 B7 52
mov [si+0x52b7],ah
mov bx,0xffff
; function 18
C8 02 00 01
enter 0x2,0x1
F6 06 EC 0D 10
test byte [0xdec],0x10
jnz 0x176e
80 7E 04 01
cmp byte [bp+0x4],0x1
6B 46 06 18
imul ax,[bp+0x6],byte +0x18
mov ah,[bp+0xa]
mov al,[bp+0x8]
shl al,0x2
sub al,0x80
88 84 A0 52
mov [si+0x52a0],al
mov bx,0xffff
; function 19: check MIDI mask status
F6 06 EC 0D 80
test byte [0xdec],0x80
jnz 0x1794
; function 19.0:
C8 02 00 01
enter 0x2,0x1
80 7E 06 00
cmp byte [bp+0x6],0x0
jnz 0x17fa
mov al,[bp+0x8]
mov al,[bp+0xa]
cmp cx,byte -0x2
cmp cx,byte +0xa
2E FF A7 BB 17
jmp near [cs:bx+0x17bb]
; jump vectors
; function 19.1/2/3/5
2E 3A 87 01 18
cmp al,[cs:bx+0x1801]
jnz 0x1806
jmp short 0x17fd
; function 19.4
8A 26 EB 0D
mov ah,[0xdeb] ; MIDI send chn
or ah,0x70
jnz 0x17fa
jmp short 0x17fd
; function 19.6
cmp al,0x18
jnc 0x17fa
mov [0x46c],al ; set SysEx counter
jmp short 0x17fd
; function 19.7
8A 1E 6C 04
mov bl,[0x46c] ; get SysEx counter
88 87 88 52
mov [bx+0x5288],al
mov cx,0xfffe
db 0x44,0x02,0x00,0x70,0x78
add al,0x75
cmp al,0x7f
jnz 0x17fa
mov cx,0x6
jmp short 0x17fd
; function 19.8
mov [0x522],al
jmp short 0x17fd
; function 19.9
mov [0x523],al
jmp short 0x17fd
; function 19.10
mov [0x520],al
jmp short 0x17fd
mov [0x521],al
jmp short 0x17fa
; function 20: all_noteoff(i)
; i: 0=key, 1=MIDI, 2=seq
C8 02 00 01
enter 0x2,0x1
8D 36 20 54
lea si,[0x5420]
C7 46 FC 00 00
mov word [bp-0x4],0x0
83 7E FC 08
cmp word [bp-0x4],byte +0x8
jnl 0x1855
mov al,[si+0x1]
shr al,0x4
cmp [bp+0x4],al
jnz 0x184d
push word [bp-0x4]
call 0x22ee
; 42: gene_off()
inc word [bp-0x4]
add si,byte +0x3a
jmp short 0x1835
; function 21: all_midichan(chan)
; change MIDI channel
C8 02 00 01
enter 0x2,0x1
in al,0xe2
; disable kbd & timer irq
or al,0x41
out 0xe2,al
8A A7 02 04
mov ah,[bx+0x402]
test ah,0x80
and ah,0x7f
mov al,0x71
push byte +0x0
push word 0x90
call 0x2807
add sp,byte +0x6
cmp bx,byte +0x8
jnz 0x1864
call 0x18f7
; control_off()
mov al,[bp+0x4]
3A 06 EB 0D
cmp al,[0xdeb]
mov [0xdeb],al
8A A7 02 04
mov ah,[bx+0x402]
test ah,0x80
and ah,0x7f
mov al,0x71
push byte +0x40
push word 0x90
call 0x2807
add sp,byte +0x6
cmp bx,byte +0x8
jnz 0x189b
call 0x18c9
; control_on()
; restore IRQ mask
out 0xe2,al
; function 22: control_on()
; send controllers (bender, AT, mod. wheel, foot volume & sus. switch)
in al,0xe2
; disable kbd & timer IRQ
or al,0x41
out 0xe2,al
F6 06 2F 04 01
test byte [0x42f],0x1
push byte +0x7f
push byte +0x40
push word 0xb0
call 0x2807
add sp,byte +0x6
mov ax,0xffff
mov [0x43a],ax
mov [0x43c],ax
mov [0x43e],ax
mov [0x442],ax
; restore IRQ mask
out 0xe2,al
; function 23: control_off()
; send default values for controllers (64,0,0,127,0)
in al,0xe2
; disable kbd & timer IRQ
or al,0x41
out 0xe2,al
8D 1E 3C 19
lea bx,[0x193c]
F6 06 2F 04 01
test byte [0x42f],0x1
push word [cs:bx]
2E FF 77 02
push word [cs:bx+0x2]
2E FF 77 04
push word [cs:bx+0x4]
call 0x2807
add sp,byte +0x6
add bx,byte +0x6
2E 83 3F FF
cmp word [cs:bx],byte -0x1
jnz 0x1909
8D 3E A0 52
lea di,[0x52a0]
mov cx,0x180
C6 06 3F 04 FF
mov byte [0x43f],0xff
; restore IRQ mask
out 0xe2,al
; controller defaults
dw 0x0,0x00b0
; sustain to off
dw 0x1,0x00b0
; mod wheel to 0
dw 0x007f,0xb0
; volume to 127
dw 0x0,0x00e0
; pitch bend to 64
dw 0x00ff,0xd0
; program to 0
; jump to 1968+bx*2
81 E3 03 00
and bx,0x3
2E FF A7 68 19
jmp near [cs:bx+0x1968]
; jump vectors
mov dh,0x40
81 7C 10 1D 10
cmp word [si+0x10],0x101d
jnz 0x1981
mov cx,[si+0xe]
mov bx,[si+0xc]
jmp short 0x1987
mov cx,[si+0xa]
mov bx,[si+0x8]
jmp 0x19d0
mov dh,0x41
mov bx,[si+0x16]
81 E3 1F 00
and bx,0x1f
mov ax,[si+0x14]
jmp 0x19d0
mov dh,0x43
mov bx,[si+0x36]
81 E3 1F 00
and bx,0x1f
mov ax,[si+0x34]
mov cx,[si+0x16]
81 E1 1F 00
and cx,0x1f
sub ax,[si+0x14]
mov cx,[si+0x10]
F7 C1 08 00
test cx,0x8
jmp 0x19d0
mov dh,0x45
mov ax,[si+0x54]
call 0x1a30
; 24: gaa_write()
; jump to 19e6+bx*2
81 E3 03 00
and bx,0x3
2E FF A7 E6 19
jmp near [cs:bx+0x19e6]
; jump vectors
mov dh,0x40
81 7C 10 1D 10
cmp word [si+0x10],0x101d
mov cx,[si+0xe]
mov bx,[si+0xc]
jmp short 0x1a05
mov cx,[si+0xa]
mov bx,[si+0x8]
jmp 0x1a26
mov dh,0x41
mov cx,[si+0x36]
81 E1 1F 00
and cx,0x1f
mov bx,[si+0x34]
jmp 0x1a26
mov dh,0x42
mov bx,[si+0x10]
83 7C 54 00
cmp word [si+0x54],byte +0x0
jnz 0x1a26
81 E3 BF 00
and bx,0xbf
call 0x1a5b
; 25: gab_write()
; function 24: gaa_write(si,bx,cx,dx)
; write GAA parameters
in al,0xe2
; disable PCM & timer IRQ
out 0xe2,al
in al,0x1a
; check for GAA ready
and al,0x1
; feed GAA
out 0x0,ax
out 0x2,ax
out 0x4,ax
out 0x6,ax
jmp short 0x1a55
; restore IRQ mask
out 0xe2,al
; function 25: gab_write(bx,cx,dx)
; write GAB parameters
in al,0xe2
; disable PCM & timer IRQ
out 0xe2,al
in al,0x1a
; check for GAB ready
and al,0x2
; feed GAB
out 0x8,ax
out 0xa,ax
out 0xe,ax
jmp short 0x1a79
; restore IRQ mask
out 0xe2,al
; function 26: v=ngetc()
; get last MIDI note & velocity
mov ax,[0x466] ; get note/velocity
cmp ax,0xffff
jnz 0x1a8c
mov bx,0xffff ; no change
jmp 0x1a94
; return value &
C7 06 66 04 FF FF
mov word [0x466],0xffff ; set no change
; function 27
mov dx,0x1
mov al,[0x50c] ; get source1 voice
69 C0 C0 00
imul ax,ax,0xc0 ; get pointer to
8D 36 88 22
lea si,[0x2288] ;
voice data of
8D 3E 20 54
lea di,[0x5420]
83 3E FE 0D FC
cmp word [0xdfe],byte -0x4
mov al,[0x510] ; get source 1 detune
add ax,0x2400
mov [di+0x8],ax
test bx,bx
mov al,[bp+0x8]
mov [di],al
mov al,[bp+0x4]
shl al,0x4
or al,[bp+0x6]
mov [di+0x1],al
C6 45 14 FF
mov byte [di+0x14],0xff
mov [di+0xa],si
mov [di+0x6],ax
mov al,0x0
out 0xa0,al
out 0xa2,al
mov al,0x9f
out 0xb0,al
out 0xb2,al
80 7D 14 FF
cmp byte [di+0x14],0xff
C7 06 1C 04 DF 00
mov word [0x41c],0xdf
C7 06 1E 04 DF 00
mov word [0x41e],0xdf
mov ax,[di+0x8]
call 0x1ef8
83 3E FE 0D FD
cmp word [0xdfe],byte -0x3
83 3E FE 0D FE
cmp word [0xdfe],byte -0x2
mov al,0xff
mov bl,0x0
jmp 0x1b93
mov al,[0x50e]
8A 1E 0F 05
mov bl,[0x50f]
jmp 0x1b93
mov ax,[0x516]
sub ax,[si]
8B 16 18 05
mov dx,[0x518]
sbb dx,[si+0x2]
mov bx,0x5d
8A 8C B1 00
mov cl,[si+0xb1]
cmp ax,[di+0x6]
mov al,[0x50e]
mov bl,0x0
jmp 0x1b93
mov ax,[0x51a]
sub ax,[si]
8B 16 1C 05
mov dx,[0x51c]
sbb dx,[si+0x2]
mov bx,0x5d
8A 8C B1 00
mov cl,[si+0xb1]
cmp bx,[di+0x6]
jnc 0x1b72
mov al,0x0
8A 1E 0F 05
mov bl,[0x50f]
jmp 0x1b93
mov dx,[di+0x6]
mov al,[0x50f]
mov al,[0x50e]
8D 0E A0 52
lea cx,[0x52a0]
mov dx,0x1
call 0x1c8c
8D 0E A0 52
lea cx,[0x52a0]
mov dx,0x102
call 0x1c8c
83 7D 06 00
cmp word [di+0x6],byte +0x0
jnz 0x1bb4
mov dl,0x1
call 0x1c37
inc word [di+0x6]
jnz 0x1bbc
dec word [di+0x6]
83 3E FE 0D FC
cmp word [0xdfe],byte -0x4
jnz 0x1bc4
mov ax,[0x512]
sub ax,[si]
8B 16 14 05
mov dx,[0x514]
sbb dx,[si+0x2]
mov bx,0x5d
8A 8C B1 00
mov cl,[si+0xb1]
cmp ax,[di+0x6]
mov dx,0x102
mov al,[0x50d]
69 C0 C0 00
imul ax,ax,0xc0
8D 36 88 22
lea si,[0x2288]
8D 3E 20 54
lea di,[0x5420]
add di,byte +0x3a
mov al,[0x511]
add ax,0x2400
mov [di+0x8],ax
test bx,bx
mov al,[bx]
mov [di],al
mov al,[bx+0x1]
mov [di+0x1],al
mov [di+0xa],si
mov [di+0x6],ax
mov ax,[di+0x8]
call 0x1ef8
mov dx,0x102
call 0x1c37
mov ax,[di+0x8]
call 0x1ef8
83 7C 10 13
cmp word [si+0x10],byte +0x13
mov dh,0x40
83 3E FE 0D FC
cmp word [0xdfe],byte -0x4
jnz 0x1c4e
mov cx,[si+0x6]
mov bx,[si+0x4]
jmp short 0x1c53
mov cx,[si+0x2]
mov bx,[si]
call 0x1a30
; 24: gaa_write()
mov dh,0x40
83 3E FE 0D FC
cmp word [0xdfe],byte -0x4
mov cx,[si+0x6]
mov bx,[si+0x4]
jmp short 0x1c70
mov cx,[si+0x2]
mov bx,[si]
call 0x1a5b
; 25: gab_write()
mov dh,0x42
mov bx,0x15
83 3E FE 0D FC
cmp word [0xdfe],byte -0x4
jnz 0x1c86
mov bx,0x1d
call 0x1a5b
; 25: gab_write()
mov bl,0xff
81 E3 FE 00
and bx,0xfe
mov ax,0x7fff
2E 2B 87 90 04
sub ax,[cs:bx+0x490]
call 0x2135
83 7D 06 00
cmp word [di+0x6],byte +0x0
83 3E FE 0D FD
cmp word [0xdfe],byte -0x3
jnz 0x1cd7
8B 0E 1A 05
mov cx,[0x51a]
2B 0E 16 05
sub cx,[0x516]
8B 16 1C 05
mov dx,[0x51c]
1B 16 18 05
sbb dx,[0x518]
jnz 0x1cd7
81 F9 00 04
cmp cx,0x400
89 87 0C 04
mov [bx+0x40c],ax
81 C2 90 00
add dx,0x90
xchg al,ah
out dx,al ; DCF MSB
sub dx,byte +0x10
xchg al,ah
out dx,al ; DCF LSB
C8 22 00 01
enter 0x22,0x1
83 3E FE 0D FF
cmp word [0xdfe],byte -0x1
jnl 0x1ceb
call 0x1a95
jmp 0x1dc6
C7 46 E0 00 00
mov word [bp-0x20],0x0
8D 3E 20 54
lea di,[0x5420]
C7 46 EA 7F 00
mov word [bp-0x16],0x7f
mov cx,0x8
mov dx,0x1
mov al,[di]
cmp al,0xff
mov ax,[di+0x6]
jnz 0x1d0e
mov ax,0xfff0
mov [di+0x6],ax
and al,0x7
jnz 0x1d49
mov al,[di+0xf]
and al,0x3f
cmp al,[di+0xe]
jng 0x1d49
mov ax,[di+0x10]
test ax,ax
mov [di+0x10],ax
mov si,[di+0xa]
mov bl,[di+0xe]
cmp ax,[bx+si+0x64]
C7 46 EA 00 00
mov word [bp-0x16],0x0
C7 45 10 FE FF
mov word [di+0x10],0xfffe
inc byte [di+0xe]
or [bp-0x20],dx
add di,byte +0x3a
loop 0x1cff
8D 3E 20 54
lea di,[0x5420]
C7 46 E4 01 00
mov word [bp-0x1c],0x1
80 7E E5 08
cmp byte [bp-0x1b],0x8
jnl 0x1db2
mov al,[di]
cmp al,0xff
mov si,[di+0xa]
8D 1E A0 52
lea bx,[0x52a0]
mov al,0x18
mov ah,[di+0x1]
and ah,0xf
mov [bp-0xc],bx
83 7E EA 02
cmp word [bp-0x16],byte +0x2
jnl 0x1d93
in al,0x1a ; check GAB ready
and al,0x2
mov bx,[bp-0x16]
mov dx,[bp-0x20]
call 0x22d1
mov [bp-0x16],bx
mov bx,[di+0x6]
81 E3 07 00
and bx,0x7
mov dx,[bp-0x1c]
mov cx,[bp-0xc]
2E FF 97 C8 1D
call near [cs:bx+0x1dc8]
shl byte [bp-0x1c],1
inc byte [bp-0x1b]
add di,byte +0x3a
jmp short 0x1d59
83 7E EA 02
cmp word [bp-0x16],byte +0x2
jnl 0x1dc6
mov bx,[bp-0x16]
mov dx,[bp-0x20]
call 0x22d1
mov [bp-0x16],bx
jmp short 0x1db2
; from jumptable 1dc8
8A 9C A0 00
mov bl,[si+0xa0]
2E 8B 87 90 04
mov ax,[cs:bx+0x490]
add [di+0x2],ax
jnc 0x1e02
mov ax,0x17
F7 2E 6E 04
imul word [0x46e]
add ax,0x929
mov bx,0x11d7
89 16 6E 04
mov [0x46e],dx
mov ah,[di+0x3]
8A 9C 9E 00
mov bl,[si+0x9e]
and bl,0x7
2E FF A7 17 1E
jmp near [cs:bx+0x1e17]
xor ax,0x381e
cmp ax,0x501e
2E 8B 87 92 02
mov ax,[cs:bx+0x292]
jmp 0x1e64
jmp 0x1e64
jmp 0x1e64
jns 0x1e46
jmp 0x1e64
jmp 0x1e64
cmp ah,0x0
jnl 0x1e5b
mov ax,0x8000
jmp 0x1e64
mov ax,0x7fff
jmp 0x1e64
mov ax,[0x46e]
mov [di+0xc],ax
mov ax,[di+0x6]
80 7D 04 00
cmp byte [di+0x4],0x0
jnz 0x1e76
3B 84 9C 00
cmp ax,[si+0x9c]
jna 0x1e88
and al,0xf
jnz 0x1e88
mov al,[di+0x4]
02 84 9F 00
add al,[si+0x9f]
jno 0x1e85
mov al,0x7f
mov [di+0x4],al
mov ax,[si+0x10]
and ax,0xf000
cmp ax,0x2000
jnz 0x1e96
jmp 0x1f80
mov ah,[di+0x4]
8A 84 A1 00
mov al,[si+0xa1]
add ax,0x80
mov al,[bx+0x3]
mov al,[bx+0xa]
mov al,[bx+0x11]
cmp dx,byte +0x7f
jng 0x1ec4
mov dl,0x7f
mov ax,[di+0xc]
sar dx,0x3
03 16 FA 0D
add dx,[0xdfa]
add dx,[di+0x8]
add dx,[si+0x74]
mov al,[bx]
cmp al,0x80
jnz 0x1ee3
8A 3E 88 52
mov bh,[0x5288]
mov bx,0x7f
sar ax,0x3
83 7C 10 13
cmp word [si+0x10],byte +0x13
jnz 0x1f01
add ax,0x5d9
test ax,ax
jns 0x1f09
jmp short 0x1f11
cmp ax,0x47ff
mov ax,0x47ff
2E 8B 87 00 00
mov ax,[cs:bx+0x0]
2E 8B 97 92 00
mov dx,[cs:bx+0x92]
add ax,0x4000
adc dx,byte +0x0
8A 8C B1 00
mov cl,[si+0xb1]
mov dh,0x42
call 0x1a30
; 24: gaa_write()
mov bl,[di+0xe]
83 7D 10 FE
cmp word [di+0x10],byte -0x2
jnz 0x1f56
mov dx,[bx+si+0x54]
cmp ax,0xfff
mov ax,0xfff
mov dh,0x45
call 0x1a30
; 24: gaa_write()
mov al,[bx]
cmp al,[di+0x8]
add al,0x80
shl ax,0x4
mov cx,[si+0xa]
mov bx,[si+0x8]
adc cx,byte +0x0
mov dh,0x40
call 0x1a5b
; 25: gab_write()
mov ax,0x8080
add ah,[bx]
add al,[di+0x8]
jnc 0x1fb2
shl ax,0x8
mov dh,0x42
call 0x1a30
; 24: gaa_write()
mov al,[bx]
cmp al,[di+0x8]
mov [di+0x8],al
mov bx,0x1d
mov bx,0x8
mov dh,0x43
call 0x1a5b
; 25: gab_write()
mov bx,0x15
mov dh,0x42
call 0x1a5b
; 25: gab_write()
; from jumptable 1dc8
83 7D 10 FF
cmp word [di+0x10],byte -0x1
in al,0xe2
; enable PCM loop IRQ
out 0xe2,al
mov dh,0x80
call 0x1a30
; 24: gaa_write()
in al,0x1a
; wait for GAA ready
and al,0x1
; get GAA value
81 E2 1F 00
and dx,0x1f
; get GAA value
; restore IRQ mask
out 0xe2,al
mov bl,[di+0xe]
shl bx,0x2
mov ax,[bx+si+0x16]
and ax,0x1f
cmp cx,[bx+si+0x14]
F6 44 10 08
test byte [si+0x10],0x8
jnz 0x2033
jmp short 0x2038
F6 44 10 08
test byte [si+0x10],0x8
jnz 0x2038
C7 45 10 00 00
mov word [di+0x10],0x0
; from jumptable 1dc8
mov bl,[di+0x15]
cmp [di+0x14],bl
mov al,[bx+di+0x16]
test al,0x80
jnz 0x2064
2E 8B 87 90 04
mov ax,[cs:bx+0x490]
add ax,[di+0x12]
cmp [bx+di+0x1e],ah
jna 0x207d
jmp 0x2085
and al,0x7f
2E 8B 87 90 04
mov ax,[cs:bx+0x490]
add ax,[di+0x12]
jnc 0x207d
cmp [bx+di+0x1e],ah
inc byte [di+0x15]
mov ah,[bx+di+0x1e]
mov [di+0x12],ax
mov al,[bx+di+0x16]
and al,0x7f
cmp al,0x7f
jnz 0x20a8
call 0x20bd
89 87 0C 04
mov [bx+0x40c],ax
81 C2 90 00
add dx,0x90
xchg al,ah
out dx,al ; DCF lsb
sub dx,byte +0x10
xchg al,ah
out dx,al ; DCF msb
mov bl,[di+0x15]
cmp [si+0x79],bl
jnl 0x20bd
C7 87 1C 04 DF 00
mov word [bx+0x41c],0xdf
mov ah,[di+0x4]
8A 84 A2 00
mov al,[si+0xa2]
add ax,0x80
mov al,[bx+0x4]
mov al,[bx+0xb]
mov al,[bx+0x12]
cmp dx,byte +0x7f
jng 0x20ec
mov dx,0x7f
mov ax,[di+0xc]
mov ah,[bx+0x7]
sar ax,0x2
mov ah,[bx+0xe]
sar ax,0x2
mov ah,[bx+0x15]
sar ax,0x2
jno 0x2120
mov dx,0x7fff
mov ax,[di+0x12]
jno 0x2130
mov ax,0x7fff
jmp short 0x2132
jns 0x2134
mov bl,[bx+0x1]
add bl,0x7f
2E 2B 87 90 04
sub ax,[cs:bx+0x490]
jnc 0x214c
cmp bl,0x9f
jna 0x2163
sub bl,0xa0
2E 8B 87 90 05
mov ax,[cs:bx+0x590]
jmp short 0x2168
add ax,0xe0
89 87 1C 04
mov [bx+0x41c],ax
; from jumptable 1dc8
mov bl,[di+0x29]
cmp [di+0x28],bl
mov al,[bx+di+0x2a]
test al,0x80
jnz 0x219e
2E 8B 87 90 04
mov ax,[cs:bx+0x490]
add ax,[di+0x26]
cmp [bx+di+0x32],ah
jna 0x21b7
jmp 0x21bf
and al,0x7f
2E 8B 87 90 04
mov ax,[cs:bx+0x490]
add ax,[di+0x26]
jnc 0x21b7
cmp [bx+di+0x32],ah
inc byte [di+0x29]
mov ah,[bx+di+0x32]
mov [di+0x26],ax
mov ah,[di+0x4]
8A 84 A3 00
mov al,[si+0xa3]
add ax,0x80
mov al,[bx+0x5]
mov al,[bx+0xc]
mov al,[bx+0x13]
cmp dx,byte +0x7f
jng 0x21f1
mov dx,0x7f
mov ax,[di+0xc]
mov ah,[bx+0x8]
sar ax,0x2
mov ah,[bx+0xf]
sar ax,0x2
mov ah,[bx+0x16]
sar ax,0x2
jno 0x2225
mov dx,0x7fff
mov ah,[si+0x76]
jno 0x2236
mov dx,0x7fff
mov dx,0x8001
mov ax,[di+0x26]
jno 0x2246
mov ax,0x7fff
jmp short 0x2248
jns 0x224a
add al,0x20
81 C2 B0 00
add dx,0xb0 ; DCQ?
; from jumptable 1dc8
mov ah,[di+0x4]
8A 84 A4 00
mov al,[si+0xa4]
add ax,0x80
mov al,[bx+0x6]
mov al,[bx+0xd]
mov al,[bx+0x14]
cmp cx,byte +0x7f
jng 0x2288
mov cl,0x7f
mov al,[di+0xd]
mov al,[bx+0x9]
mov al,[bx+0x10]
mov al,[bx+0x17]
mov al,[si+0x77]
mov al,[di+0x5]
test ax,ax
jns 0x22ba
jmp short 0x22c2
cmp ax,0x7f
mov ax,0x7f
shr al,0x3
81 C2 A0 00
add dx,0xa0 ; DCA?
cmp bx,byte +0x1
mov dh,0x44
mov bx,0x1
jmp 0x22e4
mov dh,0x42
mov bx,0x220
call 0x1a5b
; 25: gab_write()
; function 42: gene_off(g)
; initialize generator g
C8 02 00 01
enter 0x2,0x1
6B 46 04 3A
imul ax,[bp+0x4],byte +0x3a ; ptr to data
8D 1E 20 54
lea bx,[0x5420]
cmp byte [bx],0xff ; skip if generator
already off
mov byte [bx],0xff ; mark generator off
mov cl,[bp+0x4] ; create gene bits
mov dl,0x1
mov dh,0x42
mov bx,0x200
call 0x1a5b
; 25: gab_write()
mov bx,[bp+0x4] ; create DCF bits
81 C2 90 00
add dx,0x90
8B 8F 0C 04
mov cx,[bx+0x40c] ; olddca
sub dx,byte +0x10
add dx,byte +0x10
sub cx,byte +0x4
81 F9 7C 01
cmp cx,0x17c
jnl 0x2324
89 87 0C 04
mov [bx+0x40c],ax
89 87 1C 04
mov [bx+0x41c],ax
sub dx,byte +0x10
mov cl,[bp+0x4] ; create gene bits
mov dl,0x1
mov dh,0x41
call 0x1a5b
; 25: gab_write()
mov dh,0x43
mov bx,0xffff
call 0x1a5b
; 25: gab_write()
mov dh,0x44
call 0x1a30
; 24: gaa_write()
mov dh,0x46
mov dl,0xff
call 0x1a5b
; 25: gab_write()
20 1E 70 04
and [0x470],bl ; jump0
; function 43: gabint()
; initialize all generator channels (silence everything)
mov [0xdfe],ax ; &bnk[pbn]
mov [0xe00],ax ;
mov al,0x0
mov dx,0x80
; reset DCF/DCA/DCQ
add dx,byte +0x2
81 FA C0 00
cmp dx,0xc0
jnz 0x238d
mov dx,0x3801 ; stop recording
call 0x1a5b
; 25: gab_write()
mov dx,0x43ff
mov bx,0xffff
call 0x1a5b
; 25: gab_write()
8D 1E 20 54
lea bx,[0x5420] ; clear data
mov al,0xff
mov cx,0x8
mov [bx],al
add bx,byte +0x3a
loop 0x23b3
C6 06 70 04 00
mov byte [0x470],0x0 ; jump0
mov dx,0x46ff
mov bx,0x0
call 0x1a5b
; 25: gab_write()
mov dx,0x45ff
mov bx,0xffff
call 0x1a5b
; 25: gab_write()
in al,0x22
; disable NORM
and al,0x7f
out 0x22,al
mov dx,0x2001 ; set rate
mov bx,0x8
call 0x1a5b
; 25: gab_write()
; PCM interrupt
mov ax,0x0
C8 24 00 01
enter 0x24,0x1
mov dx,0x46ff
; read ISR
mov [bp-0x1c],ax ; store IRQ source
; clear IRQ flags
call 0x1a5b
; 25: gab_write()
8D 3E 20 54
lea di,[0x5420]
mov [bp-0x1a],ax ; init osc counter
mov [bp-0x1e],ax
mov dl,0x1
; init bit test
83 7E E6 08
cmp word [bp-0x1a],byte +0x8
jmp 0x24a0
test [bp-0x1c],dl ; check IRQ source
jnz 0x2423
jmp 0x2489
; IRQ source processing
mov si,[di+0xa]
mov bl,[di+0xe]
cmp bl,0x8
jnc 0x2494
shl bx,0x2
mov [bp-0x18],bx
mov ax,[bx+si+0x32]
test ah,0x80
or [bp-0x1e],dl
30 16 70 04
xor [0x470],dl ; jump0
test [bp-0x1e],dl
84 16 70 04
test [0x470],dl ; jump0
jmp 0x2463
mov dh,0x41
mov bx,[bp-0x18]
mov cx,[bx+si+0x36]
mov bx,[bx+si+0x34]
call 0x1a5b
; 25: gab_write()
test [bp-0x1e],dl
84 16 70 04
test [0x470],dl
jnz 0x2471
jmp 0x2489
mov dh,0x41
mov bx,[bp-0x18]
mov cx,[bx+si+0x16]
mov ax,[bx+si+0x14]
call 0x1a30
; 24: gaa_write()
inc word [bp-0x1a]
add di,byte +0x3a
jmp 0x2412
mov dh,0x43
mov bx,0x2
call 0x1a5b
; 25: gab_write()
jmp short 0x2489
8A 16 70 04
mov dl,[0x470]
and dl,[bp-0x1c]
mov dh,0x43
mov bx,0x20
call 0x1a5b
; 25: gab_write()
8D 3E 20 54
lea di,[0x5420]
C7 46 E6 00 00
mov word [bp-0x1a],0x0
mov dl,0x1
83 7E E6 08
cmp word [bp-0x1a],byte +0x8
jmp 0x255e
test [bp-0x1c],dl
jnz 0x24cf
jmp 0x2553
mov si,[di+0xa]
test [bp-0x1e],dl
84 16 70 04
test [0x470],dl
jnz 0x24e0
jmp 0x2511
mov dh,0x43
mov bl,[di+0xe]
shl bx,0x2
mov [bp-0x18],bx
mov ax,[bx+si+0x36]
and ax,0x1f
mov cx,[bx+si+0x34]
mov dx,[bx+si+0x16]
81 E2 1F 00
and dx,0x1f
sub cx,[bx+si+0x14]
call 0x1a30
; 24: gaa_write()
test [bp-0x1e],dl
84 16 70 04
test [0x470],dl
jmp 0x2549
C7 45 10 FF FF
mov word [di+0x10],0xffff
mov bx,[bp-0x18]
83 78 54 00
cmp word [bx+si+0x54],byte +0x0
mov dh,0x42
mov bx,0x1c0
call 0x1a5b
; 25: gab_write()
jmp 0x2553
mov dh,0x43
mov bx,0x40
call 0x1a5b
; 25: gab_write()
jmp 0x2553
mov dh,0x44
mov bx,0x0
call 0x1a5b
; 25: gab_write()
inc word [bp-0x1a]
add di,byte +0x3a
jmp 0x24be
mov al,0x20
out 0xe0,al
; function 45: rec_start(vn,pre)
; struct voicedata *vn, unsigned int pre
C8 10 00 01
enter 0x10,0x1 ; reserve 16 bytes
call 0x2380
; gabint()
call 0xde46
80 0E EC 0D 01
or byte [0xdec],0x1 ; MIDI mask |= 0x01
mov al,0xfe
; enable all IRQ but timer
out 0xe2,al
mov bx,[bp+0x8] ; unsigned int pre
mov si,[bp+0x4] ; *struct voicedata vn
add bx,[si]
adc cx,[si+0x2]
mov [bp-0x6],bx ; wavst offset
mov [bp-0x4],cx ;
mov dx,0x40ff ; gaa[6]=0x40ff
mov cx,0x1f
; gaa[4]=0x001f
; gaa[2]=0x0000
; gaa[0]=0x0000
call 0x1a30
; 24: gaa_write()
mov dx,0x4001 ; gaa[6]=0x4001
mov cx,[si+0x2] ; gaa[4]=wavst/l
mov bx,[si]
; gaa[2]=wavst/h
mov ax,0x0
; gaa[0]=0x0000
call 0x1a30
; 24: gaa_write()
mov dx,0x4002 ; gaa[6]=0x4002
mov cx,[bp-0x4] ; gaa[4]=wavstoff/l
mov bx,[bp-0x6] ; gaa[2]=wavstoff/h
mov ax,0x0
; gaa[0]=0x0000
call 0x1a30
; 24: gaa_write()
mov dx,0x4003 ; gab[6]=0x4003
mov cx,[si+0x6] ; gab[2]=waved/l
mov bx,[si+0x4] ; gab[0]=waved/h
call 0x1a5b
; 25: gab_write()
mov dx,0x4101 ; gaa[6]=0x4101
mov cx,0x0
mov bx,[si+0x2] ; gaa[2]=wavst/l
mov ax,[si]
; gaa[0]=wavst/h
call 0x1a30
; 24: gaa_write()
mov dx,0x4101 ; gab[6]=0x4101
mov cx,[bp-0x4] ; gab[2]
mov bx,[bp-0x6] ; gab[0]
call 0x1a5b
; 25: gab_write()
mov dx,0x4201 ; gab[6]=0x4201
mov bx,0x2
; gab[4]=0x0002
call 0x1a5b
; 25: gab_write()
mov dx,0x4202 ; gab[6]=0x4202
mov bx,0x4
; gab[4]=0x0004
call 0x1a5b
; 25: gab_write()
mov dx,0x4203 ; gaa[6]=0x4203
mov ax,0x2000 ; gaa[0]=rate
8A 0E D9 04
mov cl,[0x4d9] ;
call 0x1a30
; 24: gaa_write()
mov dx,0x2001 ; gab[6]=0x2001
mov bx,0x4
; gab[0]=rate+4
03 1E D9 04
add bx,[0x4d9]
call 0x1a5b
; 25: gab_write()
8A 26 D9 04
mov ah,[0x4d9] ; set input filter
cmp ah,0x0
according to
jnz 0x262f
sample rate
in al,0x22
; clear NORM
and al,0x7f
out 0x22,al
jmp short 0x264c
; 18kHz/9kHz sampling
in al,0x22
; set NORM
or al,0x80
out 0x22,al
mov al,0x7c
cmp ah,0x2
jnz 0x263e
mov al,0x6c
; DCQ stuff
out 0xbe,al
mov al,0x0
; DCA stuff
out 0xae,al
mov al,0x3
; DCF stuff
out 0x9e,al
mov al,0x1c
out 0x8e,al
; 36kHz sampling
; bx=rate+4, cx=crap
mov dx,0x2801 ; gab[6]=0x2801
call 0x1a5b
; 25: gab_write()
; function 46: reg_trig()
; terminate pre-recording & start main recording
mov dx,0x3001 ; gab[6]=0x3001
call 0x1a5b
; 25: gab_write()
; function 47: rec_stop()
; terminate main recording & arrange wave memory
C8 14 02 01
enter 0x214,0x1
mov dx,0x3801 ; gab[6]=0x3801
call 0x1a5b
; 25: gab_write()
mov dx,0x8001 ; gaa[6]=0x8001
call 0x1a30
; 24: gaa_write()
in al,0x1a
; wait for GAA ready
and al,0x1
; GAA reg #3
and ax,0x1f
mov [bp-0x4],ax
; GAA reg #2
mov [bp-0x6],ax
C7 86 F2 FD 00 00
mov word [bp+0xfdf2],0x0
mov ax,[bp+0x8] ; pre
89 86 F4 FD
mov [bp+0xfdf4],ax
mov bx,[bp-0x4]
mov cx,[bp-0x6]
mov si,[bp+0x4] ; struct voicedata *vn
sub cx,[si]
sbb bx,[si+0x2]
89 8E F6 FD
mov [bp+0xfdf6],cx
8B 86 F6 FD
mov ax,[bp+0xfdf6]
39 86 F4 FD
cmp [bp+0xfdf4],ax
jmp 0x27b0
8B 8E F4 FD
mov cx,[bp+0xfdf4]
81 F9 00 01
cmp cx,0x100
jnc 0x26cb
89 8E EE FD
mov [bp+0xfdee],cx
jmp 0x26d1
C7 86 EE FD 00 01
mov word [bp+0xfdee],0x100
FF B6 EE FD
push word [bp+0xfdee]
8D 9E FA FD
lea bx,[bp+0xfdfa]
8B 86 F6 FD
mov ax,[bp+0xfdf6]
mov si,[bp+0x4]
add ax,[si]
adc bx,[si+0x2]
call 0xe3a8
; wpoke(ad,data,len)
add sp,byte +0xa
8B 86 F6 FD
mov ax,[bp+0xfdf6]
89 86 F8 FD
mov [bp+0xfdf8],ax
8B 8E EE FD
mov cx,[bp+0xfdee]
89 8E F0 FD
mov [bp+0xfdf0],cx
8B 86 F8 FD
mov ax,[bp+0xfdf8]
39 86 F2 FD
cmp [bp+0xfdf2],ax
jnc 0x277f
8B 8E F2 FD
mov cx,[bp+0xfdf2]
03 8E EE FD
add cx,[bp+0xfdee]
jnc 0x272d
2B 86 F2 FD
sub ax,[bp+0xfdf2]
89 86 F0 FD
mov [bp+0xfdf0],ax
8B 8E F2 FD
mov cx,[bp+0xfdf2]
03 8E EE FD
add cx,[bp+0xfdee]
89 8E F8 FD
mov [bp+0xfdf8],cx
FF B6 F0 FD
push word [bp+0xfdf0]
8D 9E FA FE
lea bx,[bp+0xfefa]
8B 86 F8 FD
mov ax,[bp+0xfdf8]
2B 86 EE FD
sub ax,[bp+0xfdee]
mov si,[bp+0x4]
add ax,[si]
adc bx,[si+0x2]
call 0xe3a8
; wpoke(ad,data,len)
add sp,byte +0xa
FF B6 F0 FD
push word [bp+0xfdf0]
8D 9E FA FE
lea bx,[bp+0xfefa]
8B 86 F8 FD
mov ax,[bp+0xfdf8]
mov si,[bp+0x4]
add ax,[si]
adc bx,[si+0x2]
call 0xe3fa
; wput(ad,data)
add sp,byte +0xa
8B 86 EE FD
mov ax,[bp+0xfdee]
29 86 F8 FD
sub [bp+0xfdf8],ax
jmp short 0x2703
FF B6 EE FD
push word [bp+0xfdee]
8D 9E FA FD
lea bx,[bp+0xfdfa]
8B 86 F2 FD
mov ax,[bp+0xfdf2]
mov si,[bp+0x4]
add ax,[si]
adc bx,[si+0x2]
call 0xe3fa
; wput(ad,data)
add sp,byte +0xa
8B 86 EE FD
mov ax,[bp+0xfdee]
01 86 F2 FD
add [bp+0xfdf2],ax
01 86 F6 FD
add [bp+0xfdf6],ax
jmp 0x26ab
call 0x2380
; gabint()
mov ax,0xffff
mov [0xdfe],ax
mov [0xe00],ax
80 26 EC 0D FE
and byte [0xdec],0xfe
call 0xde7e
; cread(pcl,data)
; function 48: set_gain(g)
; set record gain for PCM recording
C8 00 00 01
enter 0x0,0x1
in al,0x22
; get GAIN mode
mov ah,[bp+0x4]
cmp ah,0x0
jnz 0x27d8
and al,0xbf
; clear GAIN (0db)
jmp short 0x27da
or al,0x40
; set GAIN (-20dB)
out 0x22,al
; function 49: gstat=now_stat(i)
; read generator status
C8 00 00 01
enter 0x0,0x1
in al,0xe2
; enable PCM & timer IRQ
out 0xe2,al
mov dh,0x82
mov cl,[bp+0x4] ; dl=generator#
mov dl,0x1
call 0x1a5b
; 25: gab_write()
in al,0x1a
; wait for GAB ready
and al,0x2
; get GAB status
; restore IRQ mask
out 0xe2,al
; function 50: dummy PCM function - never used
; function 51: mpx(d1,d2,d3)
: write key, midi and seq buffer
C8 02 00 01
enter 0x2,0x1
mov dh,[bp+0x4]
0A 36 EB 0D
or dh,[0xdeb]
mov dl,[bp+0x6]
and dl,0x7f
mov ch,[bp+0x8]
in al,0xe2 ; enable seq,kbd,midi,timer
or al,0xc3
out 0xe2,al
test bl,0x80
jnz 0x284e
8B 1E DC 0A
mov bx,[0xadc]
88 B7 DA 09
mov [bx+0x9da],dh
88 97 DA 09
mov [bx+0x9da],dl
cmp ch,0xff
88 AF DA 09
mov [bx+0x9da],ch
89 1E DC 0A
mov [0xadc],bx
in al,0xd6 ; disable TxRDY IRQ
and al,0x1
out 0xd6,al
; restore IRQ mask
or al,0xc1 ; enable seq,kbd,timer
out 0xe2,al
F6 06 2F 04 02
test byte [0x42f],0x2
jnz 0x28d1
8B 1E E0 0B
mov bx,[0xbe0]
88 B7 DE 0A
mov [bx+0xade],dh
88 97 DE 0A
mov [bx+0xade],dl
cmp ch,0xff
88 AF DE 0A
mov [bx+0xade],ch
89 1E E0 0B
mov [0xbe0],bx
80 3E EF 0D FF
cmp byte [0xdef],0xff
8B 1E E4 0C
mov bx,[0xce4]
mov ax,[0xdf0]
8B 36 F2 0D
mov si,[0xdf2]
2B 06 F4 0D
sub ax,[0xdf4]
1B 36 F6 0D
sbb si,[0xdf6]
jnz 0x289a
test ah,ah
89 87 E2 0B
mov [bx+0xbe2],ax
add bl,0x2
89 B7 E2 0B
mov [bx+0xbe2],si
add bl,0x2
89 87 E2 0B
mov [bx+0xbe2],ax
add bl,0x2
89 97 E2 0B
mov [bx+0xbe2],dx
add bl,0x2
89 1E E4 0C
mov [0xce4],bx
mov ax,[0xdf0]
mov [0xdf4],ax
mov ax,[0xdf2]
mov [0xdf6],ax
; restore IRQ mask
out 0xe2,al
cmp dl,0x7
jnz 0x287a
and bl,0xf0
cmp bl,0xb0
jnz 0x287a
jmp 0x285b
; function 52: data=keyin(kn)
; read data from ringbuffer
C8 04 00 01
enter 0x4,0x1
mov bx,[bp+0x4]
81 E3 03 00
and bx,0x3
2E FF A7 F5 28
jmp near [cs:bx+0x28f5]
sub [si],bl
sub [bp+di],di
sub [bp+si+0x29],bx
8B 1E DE 0B
mov bx,[0xbde]
39 1E E0 0B
cmp [0xbe0],bx
jnz 0x290d
mov bx,0xffff
jmp 0x295d
8A 87 DE 0A
mov al,[bx+0xade]
mov ah,0x0
FE 06 DE 0B
inc byte [0xbde]
jmp 0x295d
8B 1E D6 09
mov bx,[0x9d6]
39 1E D8 09
cmp [0x9d8],bx
jnz 0x292c
mov bx,0xffff
jmp 0x295d
8A 87 D6 08
mov al,[bx+0x8d6]
mov ah,0x0
FE 06 D6 09
inc byte [0x9d6]
jmp 0x295d
8B 1E E6 0D
mov bx,[0xde6]
39 1E E8 0D
cmp [0xde8],bx
jnz 0x294b
mov bx,0xffff
jmp 0x295d
8A 87 E6 0C
mov al,[bx+0xce6]
mov ah,0x0
FE 06 E6 0D
inc byte [0xde6]
jmp 0x295d
mov bx,0xffff
; function 53
C8 04 00 01
enter 0x4,0x1
call 0xbae
mov [bp-0x4],bx
cmp bx,byte -0x1
jnz 0x2970
jmp short 0x2963
call 0x1a7e
call 0xe27
mov bx,[bp-0x4]
jmp 0x2a1b
call 0x2af2
jmp 0x2a46
call 0x2b1e
jmp 0x2a46
call 0x2b51
jmp 0x2a46
call 0x2bb1
jmp 0x2a46
mov ax,0x44
mov [bp-0x6],ax
jmp 0x2a4c
push byte +0x18
push byte +0x0
push byte +0x1
push byte +0xa
push byte +0x2
call 0x2a51
add sp,byte +0xa
jmp 0x2a46
C6 06 7A 04 00
mov byte [0x47a],0x0
C6 06 76 04 00
mov byte [0x476],0x0
push byte +0x19
push byte +0x0
push byte +0x0
push byte +0x0
push byte +0x0
call 0x2a51
add sp,byte +0xa
jmp short 0x2a46
80 3E 73 04 0A
cmp byte [0x473],0xa
jnz 0x29f8
push byte +0x1a
mov al,[0x481]
mov ah,0x0
8A 0E 80 04
mov cl,[0x480]
mov ch,0x0
8A 16 7F 04
mov dl,[0x47f]
mov dh,0x0
8A 1E 7E 04
mov bl,[0x47e]
mov bh,0x0
call 0x2a51
add sp,byte +0xa
jmp short 0x29fb
call 0x2ac8
jmp short 0x2a46
push byte +0x1b
call 0xe4ee
mov ax,0x43
mov [bp-0x6],ax
jmp short 0x2a4c
push byte +0x1c
call 0xe4ee
mov ax,0x42
mov [bp-0x6],ax
jmp short 0x2a4c
jmp short 0x2a46
cmp bx,byte +0x1c ; value key?
; no -> fct 60
sub bx,byte +0x10 ; ten key?
; no -> fct 60
2E FF A7 2C 2A
jmp near [cs:bx+0x2a2c]
dw 0x297c ; call 57
dw 0x2982 ; call 58
dw 0x2a19 ; jmp 2a46
dw 0x2a19 ; jmp 2a46
dw 0x2988 ; call 59
dw 0x298e ; call 60
dw 0x2a19 ; jmp 2a46
call 0x2d80
mov [bp-0x6],bx
mov bx,[bp-0x6]
; function 54
C8 00 00 01
enter 0x0,0x1
mov al,[bp+0x4]
mov [0x472],al
mov ah,[bp+0x6]
88 26 73 04
mov [0x473],ah
mov cl,[bp+0x8]
88 0E 74 04
mov [0x474],cl
mov ch,[bp+0xa]
88 2E 75 04
mov [0x475],ch
mov dx,[bp+0x6]
88 16 7B 04
mov [0x47b],dl
mov bx,[bp+0x8]
88 1E 7C 04
mov [0x47c],bl
mov si,[bp+0xa]
mov [0x47d],al
C6 06 79 04 00
mov byte [0x479],0x0
C6 06 78 04 00
mov byte [0x478],0x0
8A 26 78 04
mov ah,[0x478]
88 26 77 04
mov [0x477],ah
cmp al,0x6
jna 0x2aa4
C6 06 79 04 01
mov byte [0x479],0x1
C7 06 8E 04 00 00
mov word [0x48e],0x0
C7 06 84 04 00 00
mov word [0x484],0x0
mov ax,[0x484]
mov [0x482],ax
mov [0x48a],ax
mov [0x490],ax
push word [bp+0xc]
call 0xe4ee
call 0x2beb
; function 55
C8 00 00 01
enter 0x0,0x1
mov al,[0x472]
mov [0x47e],al
8A 26 73 04
mov ah,[0x473]
88 26 7F 04
mov [0x47f],ah
8A 0E 74 04
mov cl,[0x474]
88 0E 80 04
mov [0x480],cl
8A 2E 75 04
mov ch,[0x475]
88 2E 81 04
mov [0x481],ch
push byte +0x1a
call 0xe4ee
; function 56
C8 00 00 01
enter 0x0,0x1
80 3E 7A 04 00
cmp byte [0x47a],0x0
FE 0E 7A 04
dec byte [0x47a]
push byte +0x0
mov al,[0x47a]
mov ah,0x0
call 0x2c8a
push byte +0x0
mov al,[0x47a]
mov ah,0x0
call 0x2c8a
; function 57
C8 00 00 01
enter 0x0,0x1
FE 06 7A 04
inc byte [0x47a]
call 0x2e10
cmp bx,byte -0x2
push byte +0x0
mov al,[0x47a]
mov ah,0x0
call 0x2c8a
push byte +0x0
mov al,[0x47a]
mov ah,0x0
call 0x2c8a
jmp short 0x2b4f
FE 0E 7A 04
dec byte [0x47a]
; function 58
C8 00 00 01
enter 0x0,0x1
80 3E 72 04 02
cmp byte [0x472],0x2
jna 0x2b5e
jmp short 0x2baf
mov al,[0x47a]
8A 1E 72 04
mov bl,[0x472]
mov bh,0x0
88 87 73 04
mov [bx+0x473],al
mov al,[0x476]
88 84 77 04
mov [si+0x477],al
8A 26 7A 04
mov ah,[0x47a]
88 A5 7B 04
mov [di+0x47b],ah
FE 06 72 04
inc byte [0x472]
C6 06 76 04 00
mov byte [0x476],0x0
C6 06 7A 04 00
mov byte [0x47a],0x0
C7 06 8E 04 00 00
mov word [0x48e],0x0
C7 06 84 04 00 00
mov word [0x484],0x0
mov ax,[0x484]
mov [0x482],ax
mov [0x48a],ax
mov [0x490],ax
call 0x2beb
push byte +0x19
call 0xe4ee
; function 59
C8 00 00 01
enter 0x0,0x1
80 3E 72 04 00
cmp byte [0x472],0x0
jnz 0x2bbe
jmp short 0x2be9
FE 0E 72 04
dec byte [0x472]
8A 1E 72 04
mov bl,[0x472]
mov bh,0x0
C6 87 73 04 00
mov byte [bx+0x473],0x0
8A 84 77 04
mov al,[si+0x477]
mov [0x476],al
8A A5 7B 04
mov ah,[di+0x47b]
88 26 7A 04
mov [0x47a],ah
call 0x2beb
push byte +0x19
call 0xe4ee
; function 60
C8 18 00 01
enter 0x18,0x1
C6 46 EA 00
mov byte [bp-0x16],0x0
C6 46 E9 00
mov byte [bp-0x17],0x0
mov al,[bp-0x17]
mov [bp-0x18],al
80 3E 72 04 00
cmp byte [0x472],0x0 ; lev
jna 0x2c0b
8A 26 73 04
mov ah,[0x473] : lv0[0]
mov [bp-0x18],ah
80 3E 72 04 01
cmp byte [0x472],0x1 ; lev
jna 0x2c18
mov al,[0x474]
mov [bp-0x17],al
80 3E 72 04 02
cmp byte [0x472],0x2 ; lev/lv[0]
jna 0x2c25
mov al,[0x475] ; lv0[2]
mov [bp-0x16],al
lea bx,[bp-0x1a]
call 0xd381
; print menu
C6 46 FB 00
mov byte [bp-0x5],0x0
C6 46 EC 20
mov byte [bp-0x14],0x20
C6 46 FA 20
mov byte [bp-0x6],0x20
lea bx,[bp-0x15]
push byte +0x1
push byte +0x0
push byte +0x0
call 0xb9bc
add sp,byte +0xa
83 7E E6 FF
cmp word [bp-0x1a],byte -0x1
jnz 0x2c78
mov al,[0x476] ; dm
mov ah,0x0
mov [bp-0x4],ax
mov al,[0x476] ; dm
mov ah,0x0
add ax,0x7
cmp ax,[bp-0x4]
jna 0x2c76
push byte +0x1
push word [bp-0x4]
call 0x2c8a
inc word [bp-0x4]
jmp short 0x2c5a
jmp short 0x2c88
push byte +0x0
push byte +0x3f
push byte +0x5f
push byte +0x8
push byte +0x0
call 0xba93
add sp,byte +0xa
; function 61
C8 16 00 01
enter 0x16,0x1
mov al,[0x476] ; dm
mov ah,0x0
cmp [bp+0x4],ax
jnc 0x2ca5
mov cl,[bp+0x4]
88 0E 76 04
mov [0x476],cl ; dm
call 0x2beb
jmp 0x2d7e
mov al,[0x476] ; dm
mov ah,0x0
add ax,0x6
cmp ax,[bp+0x4]
jnc 0x2cc1
mov ax,[bp+0x4]
sub ax,0x6
mov [0x476],al ; dm
call 0x2beb
jmp 0x2d7e
83 7E 06 01
cmp word [bp+0x6],byte +0x1
jnz 0x2d36
inc word [bp+0x4]
mov al,[bp+0x4]
mov [bp-0x16],al
C6 46 EC 00
mov byte [bp-0x14],0x0
C6 46 EB 00
mov byte [bp-0x15],0x0
80 3E 72 04 00
cmp byte [0x472],0x0 ; lev
jna 0x2ce9
8A 26 73 04
mov ah,[0x473] ; lv0[0]
mov [bp-0x16],ah
mov [bp-0x15],al
80 3E 72 04 01
cmp byte [0x472],0x1 ; lev
jna 0x2cfc
mov al,[0x474] ; lv0[1]
mov [bp-0x15],al
mov ah,[bp+0x4]
mov [bp-0x14],ah
lea bx,[bp-0x18]
call 0xd381
; print menu
C6 46 FD 00
mov byte [bp-0x3],0x0
mov al,[0x47a] ; sm
mov ah,0x0
cmp ax,[bp+0x4]
jnz 0x2d19
C6 46 ED EE
mov byte [bp-0x13],0xee
lea bx,[bp-0x13]
push byte +0x0
mov ax,[bp+0x4]
8A 0E 76 04
mov cl,[0x476] ; dm
mov ch,0x0
push byte +0x0
call 0xb9bc
add sp,byte +0xa
jmp short 0x2d7e
inc word [bp+0x4]
mov al,[0x47a] ; sm
mov ah,0x0
cmp ax,[bp+0x4]
jnz 0x2d62
8D 1E C9 4D
lea bx,[0x4dc9]
push byte +0x0
mov ax,[bp+0x4]
8A 0E 76 04
mov cl,[0x476] ; dm
mov ch,0x0
push byte +0x0
call 0xb9bc
add sp,byte +0xa
jmp short 0x2d7e
8D 1E CB 4D
lea bx,[0x4dcb]
push byte +0x0
mov ax,[bp+0x4]
8A 0E 76 04
mov cl,[0x476] ; dm
mov ch,0x0
push byte +0x0
call 0xb9bc
add sp,byte +0xa
; function 62
C8 22 00 01
enter 0x22,0x1
FF 36 00 0E
push word [0xe00] ; &bank/msb
FF 36 FE 0D
push word [0xdfe] ; &bank/lsb
pop word [bp-0xa]
pop word [bp-0x8]
mov al,[0x473] ; lv0[0]
mov [bp-0x1e],al
8A 26 74 04
mov ah,[0x474] ; lv0[1]
mov [bp-0x1d],ah
8A 0E 75 04
mov cl,[0x475] ; lv0[2]
mov [bp-0x1c],cl
lea bx,[bp-0x20]
call 0xd381
; print menu
80 7E F5 01
cmp byte [bp-0xb],0x1
jnz 0x2dca
69 06 FC 0D 90 02
imul ax,[0xdfc],0x290; bank# * sizeof(bank)
8D 9F 08 0E
lea bx,[bx+0xe08] ; bank data base
mov [bp-0x6],bx
mov [bp-0x4],ds
jmp short 0x2de3
mov al,[bp-0xb]
pop word [bp-0x24]
pop word [bp-0x22]
push word [bp-0x22]
push word [bp-0x24]
pop word [bp-0x6]
pop word [bp-0x4]
push word [bp-0x4]
push word [bp-0x6]
push word [bp-0x8]
push word [bp-0xa]
call 0xfb51
call 0x2380
; gabint()
push word [bp-0x4]
push word [bp-0x6]
8F 06 FE 0D
pop word [0xdfe] ; &bank/lsb
8F 06 00 0E
pop word [0xe00] ; &bank/msb
mov ax,[bp-0x20]
mov [bp-0x24],ax
mov bx,[bp-0x24]
; function 63
C8 18 00 01
enter 0x18,0x1
mov al,[0x473] ; lv0[0]
mov [bp-0x16],al
8A 26 74 04
mov ah,[0x474] ; lv0[1]
mov [bp-0x15],ah
8A 0E 75 04
mov cl,[0x475] ; lv0[2]
mov [bp-0x14],cl
8A 2E 7A 04
mov ch,[0x47a] ; sm
8A 16 72 04
mov dl,[0x472] ; lev
mov dh,0x0
mov [bp+si-0x16],ch
lea bx,[bp-0x18]
call 0xd381
; print menu
mov ax,[bp-0x18]
mov [bp-0x1a],ax
mov bx,[bp-0x1a]
; function 64
C8 0C 00 01
enter 0xc,0x1
C7 46 FC 00 00
mov word [bp-0x4],0x0
mov ax,[bp-0x4]
39 06 86 04
cmp [0x486],ax ; lmax
jng 0x2e89
imul ax,ax,byte +0x6
les si,[bp+0x4]
mov [bp-0xc],es
mov [bp-0xe],bx
26 C4 77 02
les si,[es:bx+0x2]
26 8A 44 04
mov al,[es:si+0x4]
mov ah,0x0
and ax,0x7
cmp ax,0x7
jnz 0x2e84
jmp short 0x2e89
inc word [bp-0x4]
jmp short 0x2e57
mov ax,[0x48e] ; vpos
mov [bp-0x6],ax
mov ax,[bp-0x6]
cmp ax,[bp-0x4]
jnl 0x2ec5
mov ax,[bp-0x6]
les bx,[bp+0x4]
imul ax,ax,byte +0x6
mov [bp-0xc],es
mov [bp-0xe],bx
26 C4 77 02
les si,[es:bx+0x2]
26 8A 44 04
mov al,[es:si+0x4]
mov ah,0x0
and ax,0x80
cmp ax,0x0
jnz 0x2ec0
jmp short 0x2ec5
inc word [bp-0x6]
jmp short 0x2e8f
C7 46 F8 00 00
mov word [bp-0x8],0x0
mov ax,[0x48e] ; vpos
mov [bp-0xa],ax
mov ax,[bp-0xa]
cmp [bp-0x6],ax
imul ax,ax,byte +0x6
les si,[bp+0x4]
26 81 3F 00 80
cmp word [es:bx],0x8000
jnz 0x2eee
C7 46 F8 FF FF
mov word [bp-0x8],0xffff
inc word [bp-0xa]
jmp short 0x2ed0
call 0xbae
mov [bp-0xa],bx
jmp 0x3096
C7 46 F6 11 00
mov word [bp-0xa],0x11
83 7E F8 00
cmp word [bp-0x8],byte +0x0
jnz 0x2f12
mov ax,[0x482] ; lpos
cmp ax,[bp-0x4]
jmp short 0x2f14
jmp short 0x2f1a
C7 06 82 04 FF FF
mov word [0x482],0xffff
83 7E F8 00
cmp word [bp-0x8],byte +0x0
jnz 0x2f5f
FF 06 82 04
inc word [0x482] ; lpos
mov ax,[0x482] ; lpos
cmp [bp-0x4],ax
mov ax,[bp-0x4]
mov [0x482],ax ; lpos
jmp short 0x2f59
6B 06 82 04 06
imul ax,[0x482],byte +0x6 ; lpos
les si,[bp+0x4]
mov [bp-0xc],es
mov [bp-0xe],bx
26 C4 77 02
les si,[es:bx+0x2]
26 8A 44 04
mov al,[es:si+0x4]
mov ah,0x0
and ax,0x80
cmp ax,0x0
jnz 0x2f20
mov ax,[0x482] ; lpos
mov [0x48e],ax
jmp 0x30c5
83 7E F8 00
cmp word [bp-0x8],byte +0x0
jnz 0x2fc1
FF 0E 82 04
dec word [0x482] ; lpos
83 3E 82 04 00
cmp word [0x482],byte +0x0 ; lpos
jnl 0x2f97
C7 06 82 04 00 00
mov word [0x482],0x0 ; lpos
mov ax,[0x486] ; lmax
cmp [bp-0x4],ax
C7 06 8A 04 00 00
mov word [0x48a],0x0 ; loff
push word [bp+0x6]
push word [bp+0x4]
push byte +0x0
call 0x3c8c
add sp,byte +0x6
jmp short 0x2fbb
6B 06 82 04 06
imul ax,[0x482],byte +0x6 ; lpos
les si,[bp+0x4]
mov [bp-0xc],es
mov [bp-0xe],bx
26 C4 77 02
les si,[es:bx+0x2]
26 8A 44 04
mov al,[es:si+0x4]
mov ah,0x0
and ax,0x80
cmp ax,0x0
jnz 0x2f68
mov ax,[0x482] ; lpos
mov [0x48e],ax ; vpos
jmp 0x30c5
6B 06 82 04 06
imul ax,[0x482],byte +0x6 ; lpos
les si,[bp+0x4]
mov [bp-0xc],es
mov [bp-0xe],bx
26 C4 77 02
les si,[es:bx+0x2]
26 8A 44 04
mov al,[es:si+0x4]
mov ah,0x0
and ax,0x7
cmp ax,0x3
FF 0E 84 04
dec word [0x484] ; cpos
83 3E 84 04 00
cmp word [0x484],byte +0x0 ; cpos
jnl 0x2ff9
C7 06 84 04 00 00
mov word [0x484],0x0 ; cpos
FF 0E 82 04
dec word [0x482] ; lpos
mov ax,[0x482] ; lpos
39 06 8E 04
cmp [0x48e],ax ; vpos
jng 0x300e
8B 0E 8E 04
mov cx,[0x48e] ; vpos
89 0E 82 04
mov [0x482],cx ; lpos
jmp 0x30c5
6B 06 82 04 06
imul ax,[0x482],byte +0x6 ; lpos
les si,[bp+0x4]
mov [bp-0xc],es
mov [bp-0xe],bx
26 C4 77 02
les si,[es:bx+0x2]
26 8A 44 04
mov al,[es:si+0x4]
mov ah,0x0
and ax,0x7
cmp ax,0x3
FF 06 84 04
inc word [0x484] ; cpos
mov ax,[0x484] ; cpos
39 06 88 04
cmp [0x488],ax ; cmax
mov ax,[0x488] ; cmax
mov [0x484],ax ; cpos
FF 06 82 04
inc word [0x482] ; lpos
mov ax,[0x482] ; lpos
cmp [bp-0x6],ax
jnl 0x305c
mov cx,[bp-0x6]
89 0E 82 04
mov [0x482],cx ; lpos
jmp short 0x30c5
80 3E 73 04 0A
cmp byte [0x473],0xa ; lv0[0]
mov al,[0x46d] ; nowled
mov ah,0x0
and ax,0x18
cmp ax,0x18
jnz 0x3075
call 0x2ac8
jmp short 0x30c5
83 7E F6 18
cmp word [bp-0xa],byte +0x18
jnl 0x3085
83 7E F6 15
cmp word [bp-0xa],byte +0x15
jmp short 0x3094
push word [bp-0xa]
call 0xbc5
; unmgetc()
mov ax,0xfffe
mov [bp-0xe],ax
jmp short 0x30cb
jmp short 0x30c5
cmp bx,byte +0xc
jnz 0x309e
jmp 0x2efc
cmp bx,byte +0x10
jnz 0x30a6
jmp 0x2f62
cmp bx,byte +0x11
jnz 0x30ae
jmp 0x2f1a
cmp bx,byte +0x12
jnz 0x30b6
jmp 0x3011
cmp bx,byte +0x13
jnz 0x30be
jmp 0x2fc4
cmp bx,byte +0x1a
jmp short 0x3077
mov ax,[bp-0xa]
mov [bp-0xe],ax
mov bx,[bp-0xe]
; function 65: vl=para_change(ppp)
; all parameter change
C8 08 00 01
enter 0x8,0x1
83 3E 8C 04 00
cmp word [0x48c],byte +0x0
jnl 0x30f4
F7 1E 8C 04
neg word [0x48c]
push word [bp+0x6]
push word [bp+0x4]
push byte +0x0
call 0x3c8c
; d_change_all()
add sp,byte +0x6
C7 46 FC FF FF
mov word [bp-0x4],0xffff
jmp short 0x316a
6B 06 82 04 06
imul ax,[0x482],byte +0x6
les si,[bp+0x4]
26 FF 77 04
push word [es:bx+0x4]
26 FF 77 02
push word [es:bx+0x2]
6B 06 82 04 06
imul ax,[0x482],byte +0x6
les si,[bp+0x4]
push word [es:bx]
call 0x33fc
; tenkey()
6B 06 82 04 06
imul ax,[0x482],byte +0x6
les di,[bp+0x4]
mov [es:si],bx
add sp,byte +0x6
8D 1E CB 4D
lea bx,[0x4dcb] ; keypad text
push byte +0x0
6B 06 82 04 06
imul ax,[0x482],byte +0x6
les di,[bp+0x4]
mov [bp-0x8],es
mov [bp-0xa],si
26 C4 7C 02
les di,[es:si+0x2]
26 8A 45 06
mov al,[es:di+0x6]
2B 06 8A 04
sub ax,[0x48a]
push byte +0x0
call 0xb9bc
add sp,byte +0xa
push word [bp+0x6]
push word [bp+0x4]
call 0x2e4e
mov [bp-0x4],bx
6B 06 82 04 06
imul ax,[0x482],byte +0x6
les si,[bp+0x4]
mov [bp-0x8],es
mov [bp-0xa],bx
26 C4 77 02
les si,[es:bx+0x2]
26 8A 44 06
mov al,[es:si+0x6]
2B 06 8A 04
sub ax,[0x48a]
mov [bp-0x6],ax
3B 06 8C 04
cmp ax,[0x48c]
jnl 0x31c9
8B 0E 8C 04
mov cx,[0x48c]
mov [bp-0x6],cx
6B 06 82 04 06
imul ax,[0x482],byte +0x6
les si,[bp+0x4]
mov [bp-0x8],es
mov [bp-0xa],bx
26 C4 77 02
les si,[es:bx+0x2]
26 8A 44 06
mov al,[es:si+0x6]
mov [0x48a],ax
push word [bp+0x6]
push word [bp+0x4]
push byte +0x0
call 0x3c8c
; d_change_all()
add sp,byte +0x6
jmp short 0x3203
83 7E FA 07
cmp word [bp-0x6],byte +0x7
jng 0x3203
C7 46 FA 07 00
mov word [bp-0x6],0x7
6B 06 82 04 06
imul ax,[0x482],byte +0x6
les si,[bp+0x4]
mov [bp-0x8],es
mov [bp-0xa],bx
26 C4 77 02
les si,[es:bx+0x2]
26 8A 44 06
mov al,[es:si+0x6]
sub ax,0x7
mov [0x48a],ax
push word [bp+0x6]
push word [bp+0x4]
push byte +0x0
call 0x3c8c
; d_change_all()
add sp,byte +0x6
8D 1E C9 4D
lea bx,[0x4dc9] ; 0xee
push byte +0x0
push word [bp-0x6]
push byte +0x0
call 0xb9bc
add sp,byte +0xa
mov ax,[bp-0x4]
mov [bp-0xa],ax
mov bx,[bp-0xa]
; function 66: meter(v)
; print audio level meter
C8 02 00 01
enter 0x2,0x1
83 7E 04 FF
cmp word [bp+0x4],byte -0x1
jnz 0x3292
C7 06 C8 04 00 00
mov word [0x4c8],0x0
C7 06 C6 04 00 00
mov word [0x4c6],0x0
mov ax,[0x4c6]
mov [0x4c4],ax
mov [0x4c2],ax
push byte +0x1
push byte +0x3f
push byte +0x5f
push byte +0x30
push byte +0x0
call 0xba93
add sp,byte +0xa
push byte +0x0
push byte +0x35
push byte +0x5e
push byte +0x32
push byte +0x1
call 0xba93
add sp,byte +0xa
push byte +0x0
push byte +0x3e
push byte +0x46
push byte +0x38
push byte +0x1
call 0xba93
add sp,byte +0xa
C7 46 04 40 00
mov word [bp+0x4],0x40
83 7E 04 7E
cmp word [bp+0x4],byte +0x7e
jnl 0x328f
push byte +0x0
push word [bp+0x4]
call 0x33cb
call 0x3363
inc word [bp+0x4]
jmp short 0x3275
jmp 0x3361
FF 06 C2 04
inc word [0x4c2]
push word [bp+0x4]
call 0x33cb
mov [bp+0x4],bx
3B 1E C6 04
cmp bx,[0x4c6]
mov ax,[0x4c2]
and ax,0x3ff
cmp ax,0x0
jmp short 0x32d5
mov ax,[0x4c4]
39 06 C6 04
cmp [0x4c6],ax
jng 0x32c7
push byte +0x0
FF 36 C6 04
push word [0x4c6]
call 0x3363
mov ax,[bp+0x4]
mov [0x4c6],ax
push byte -0x1
call 0x3363
mov ax,[0x4c2]
and ax,0x7f
cmp ax,0xf
jnz 0x330f
mov ax,[0x4c4]
cmp [bp+0x4],ax
jng 0x32f9
push byte -0x1
FF 06 C4 04
inc word [0x4c4]
FF 36 C4 04
push word [0x4c4]
call 0x3363
jmp short 0x330f
83 3E C4 04 00
cmp word [0x4c4],byte +0x0
jng 0x330f
push byte +0x0
FF 36 C4 04
push word [0x4c4]
FF 0E C4 04
dec word [0x4c4]
call 0x3363
mov al,[0x4d6]
39 06 C8 04
cmp [0x4c8],ax
FF 36 C8 04
push word [0x4c8]
call 0x33cb
mov [bp-0x4],bx
push byte +0x0
push byte +0x35
add bx,byte +0x2
push byte +0x32
push word [bp-0x4]
call 0xba93
add sp,byte +0xa
mov al,[0x4d6]
call 0x33cb
mov [bp-0x4],bx
push byte +0x1
push byte +0x35
add bx,byte +0x2
push byte +0x32
push word [bp-0x4]
call 0xba93
add sp,byte +0xa
mov al,[0x4d6]
mov [0x4c8],ax
; function 67
C8 0C 00 01
enter 0xc,0x1
mov ax,[bp+0x4]
shl ax,0x2
mov [bp-0xe],ax
cmp ax,0x60
83 46 F2 20
add word [bp-0xe],byte +0x20
C6 46 F4 02
mov byte [bp-0xc],0x2
C6 46 F5 09
mov byte [bp-0xb],0x9
mov ax,[bp-0xe]
and ax,0xf
mov [bp-0xa],al
mov cx,[bp-0xe]
shr cx,0x4
81 E1 0F 00
and cx,0xf
mov [bp-0x9],cl
C6 46 F8 03
mov byte [bp-0x8],0x3
C6 46 F9 00
mov byte [bp-0x7],0x0
C6 46 FA 10
mov byte [bp-0x6],0x10
83 7E 06 FF
cmp word [bp+0x6],byte -0x1
jnz 0x33b3
C6 46 FB 07
mov byte [bp-0x5],0x7
C6 46 FC 0D
mov byte [bp-0x4],0xd
jmp short 0x33bb
C6 46 FB 00
mov byte [bp-0x5],0x0
C6 46 FC 01
mov byte [bp-0x4],0x1
C6 46 FD FF
mov byte [bp-0x3],0xff
lea bx,[bp-0xc]
call 0xdde5
; function 68
C8 02 00 01
enter 0x2,0x1
mov ax,[bp+0x4]
sub ax

我要回帖

更多关于 ad8021 的文章

 

随机推荐