📄 kernel.asm
字号:
call delay_ms
mov eax,ebx
inc edx
out dx,al
ret
sb16l2:
cmp eax,2 ; set volume - cd
jnz sb16l3
mov dx,word [sb16]
add dx,4
mov al,0x28
out dx,al
mov esi,1
call delay_ms
mov eax,ebx
add edx,1
out dx,al
ret
sb16l3:
mov [esp+36],dword 2
ret
align 4
sys_sb16II:
cmp word [sb16],word 0
jnz IIsb16l1
mov [esp+36],dword 1
ret
IIsb16l1:
cmp eax,1 ; set volume - main
jnz IIsb16l2
; L
mov dx,word [sb16]
add dx,4
mov al,0x30
out dx,al
mov eax,ebx
inc edx
out dx,al
; R
mov dx,word [sb16]
add dx,4
mov al,0x31
out dx,al
mov eax,ebx
inc edx
out dx,al
mov [esp+36],dword 0
ret
IIsb16l2:
cmp eax,2 ; set volume - cd
jnz IIsb16l3
; L
mov dx,word [sb16]
add dx,4
mov al,0x36
out dx,al
mov eax,ebx
inc edx
out dx,al
; R
mov dx,word [sb16]
add dx,4
mov al,0x37
out dx,al
mov eax,ebx
inc edx
out dx,al
mov [esp+36],dword 0
ret
IIsb16l3:
mov [esp+36],dword 2
ret
align 4
sys_wss:
cmp word [wss],word 0
jnz wssl1
mov [esp+36],dword 1
ret
wssl1:
cmp eax,1 ; set volume - main
jnz wssl2
mov [esp+36],dword 0
ret
wssl2:
cmp eax,2 ; set volume - cd
jnz wssl3
; L
mov dx,word [wss]
add dx,4
mov al,0x2
out dx,al
mov esi,1
call delay_ms
mov eax,ebx
inc edx
out dx,al
; R
mov dx,word [wss]
add dx,4
mov al,0x3
out dx,al
mov esi,1
call delay_ms
mov eax,ebx
inc edx
out dx,al
mov [esp+36],dword 0
ret
wssl3:
mov [esp+36],dword 2
ret
display_number:
; eax = print type, al=0 -> ebx is number
; al=1 -> ebx is pointer
; ah=0 -> display decimal
; ah=1 -> display hexadecimal
; ah=2 -> display binary
; eax bits 16-21 = number of digits to display (0-32)
; eax bits 22-31 = reserved
;
; ebx = number or pointer
; ecx = x shl 16 + y
; edx = color
cmp eax,0xffff ; length > 0 ?
jge cont_displ
ret
cont_displ:
cmp eax,60*0x10000 ; length <= 60 ?
jbe cont_displ2
ret
cont_displ2:
pusha
cmp al,1 ; ecx is a pointer ?
jne displnl1
mov edi,[0x3010]
mov edi,[edi+0x10]
mov ebx,[edi+ebx]
displnl1:
sub esp,64
cmp ah,0 ; DESIMAL
jne no_display_desnum
shr eax,16
and eax,0x2f
push eax
;mov edi,[0x3010]
;mov edi,[edi+0x10]
mov edi,esp
add edi,4+64
mov ecx,eax
mov eax,ebx
mov ebx,10
d_desnum:
xor edx,edx
div ebx
add dl,48
mov [edi],dl
dec edi
loop d_desnum
pop eax
call draw_num_text
add esp,64
popa
ret
no_display_desnum:
cmp ah,0x01 ; HEXADECIMAL
jne no_display_hexnum
shr eax,16
and eax,0x2f
push eax
;mov edi,[0x3010]
;mov edi,[edi+0x10]
mov edi,esp
add edi,4+64
mov ecx,eax
mov eax,ebx
mov ebx,16
d_hexnum:
xor edx,edx
div ebx
add edx,hexletters
mov dl,[edx]
mov [edi],dl
dec edi
loop d_hexnum
pop eax
call draw_num_text
add esp,64
popa
ret
no_display_hexnum:
cmp ah,0x02 ; BINARY
jne no_display_binnum
shr eax,16
and eax,0x2f
push eax
;mov edi,[0x3010]
;mov edi,[edi+0x10]
mov edi,esp
add edi,4+64
mov ecx,eax
mov eax,ebx
mov ebx,2
d_binnum:
xor edx,edx
div ebx
add dl,48
mov [edi],dl
dec edi
loop d_binnum
pop eax
call draw_num_text
add esp,64
popa
ret
no_display_binnum:
add esp,64
popa
ret
draw_num_text:
; dtext
;
; eax x & y
; ebx color
; ecx start of text
; edx length
; edi 1 force
mov edx,eax
mov ecx,65
sub ecx,eax
add ecx,esp
add ecx,4
mov eax,[esp+64+32-8+4]
mov ebx,[esp+64+32-12+4]
push edx ; add window start x & y
push ebx
mov edx,[0x3010]
mov ebx,[edx-twdw]
shl ebx,16
add ebx,[edx-twdw+4]
add eax,ebx
pop ebx
pop edx
mov edi,0
call dtext
ret
display_settings:
; eax = 0 ; DISPLAY redraw
; ebx = 0 ; all
;
; eax = 1 ; BUTTON type
; ebx = 0 ; flat
; ebx = 1 ; 3D
; eax = 2 ; set WINDOW colours
; ebx = pointer to table
; ecx = number of bytes define
; eax = 3 ; get WINDOW colours
; ebx = pointer to table
; ecx = number of bytes wanted
; eax = 4 ; get skin height
; input : nothing
; output : eax = skin height in pixel
pusha
cmp eax,0 ; redraw display
jne dspl0
cmp ebx,0
jne dspl0
cmp [windowtypechanged],dword 1
jne dspl00
mov [windowtypechanged],dword 0
mov [dlx],dword 0
mov [dly],dword 0
mov eax,[0xfe00]
mov [dlxe],eax
mov eax,[0xfe04]
mov [dlye],eax
mov eax,window_data
call redrawscreen
dspl00:
popa
ret
dspl0:
cmp eax,1 ; button type
jne dspl1
and ebx,1
cmp ebx,[buttontype]
je dspl9
mov [buttontype],ebx
mov [windowtypechanged],dword 1
dspl9:
popa
ret
dspl1:
cmp eax,2 ; set common window colours
jne no_com_colours
mov [windowtypechanged],dword 1
mov esi,[0x3010]
add esi,0x10
add ebx,[esi]
mov esi,ebx
mov edi,common_colours
and ecx,127
cld
rep movsb
popa
ret
no_com_colours:
cmp eax,3 ; get common window colours
jne no_get_com
mov esi,[0x3010]
add esi,0x10
add ebx,[esi]
mov edi,ebx
mov esi,common_colours
and ecx,127
cld
rep movsb
popa
ret
no_get_com:
cmp eax,4 ; get skin height
jne no_skin_height
popa
mov eax,[_skinh]
mov [esp+36],eax
ret
no_skin_height:
popa
ret
common_colours:
times 128 db 0x0
read_string:
; eax read_area
; ebx color of letter
; ecx color of background
; edx number of letters to read
; esi [x start]*65536 + [y_start]
ret
align 4
sys_setup:
; 1=roland mpu midi base , base io address
; 2=keyboard 1, base kaybap 2, shift keymap, 9 country 1eng 2fi 3ger 4rus
; 3=cd base 1, pri.master 2, pri slave 3 sec master, 4 sec slave
; 4=sb16 base , base io address
; 5=system language, 1eng 2fi 3ger 4rus
; 6=wss base , base io address
; 7=hd base 1, pri.master 2, pri slave 3 sec master, 4 sec slave
; 8=fat32 partition in hd
; 9
; 10 = sound dma channel
; 11 = enable lba read
; 12 = enable pci access
mov [esp+36],dword 0
cmp eax,1 ; MIDI
jnz nsyse1
cmp ebx,0x100
jb nsyse1
mov edx,65535
cmp edx,ebx
jb nsyse1
mov word [mididp],bx
inc bx
mov word [midisp],bx
ret
nsyse1:
cmp eax,2 ; KEYBOARD
jnz nsyse2
cmp ebx,1
jnz kbnobase
mov edi,[0x3010]
add ecx,[edi+0x10]
mov eax,ecx
mov ebx,keymap
mov ecx,128
call memmove
ret
kbnobase:
cmp ebx,2
jnz kbnoshift
mov edi,[0x3010]
add ecx,[edi+0x10]
mov eax,ecx
mov ebx,keymap_shift
mov ecx,128
call memmove
ret
kbnoshift:
cmp ebx,3
jne kbnoalt
mov edi,[0x3010]
add ecx,[edi+0x10]
mov eax,ecx
mov ebx,keymap_alt
mov ecx,128
call memmove
ret
kbnoalt:
cmp ebx,9
jnz kbnocountry
mov word [keyboard],cx
ret
kbnocountry:
mov [esp+36],dword 1
ret
nsyse2:
cmp eax,3 ; CD
jnz nsyse3
cmp ebx,1
jnz noprma
mov [cdbase],0x1f0
mov [cdid],0xa0
noprma:
cmp ebx,2
jnz noprsl
mov [cdbase],0x1f0
mov [cdid],0xb0
noprsl:
cmp ebx,3
jnz nosema
mov [cdbase],0x170
mov [cdid],0xa0
nosema:
cmp ebx,4
jnz nosesl
mov [cdbase],0x170
mov [cdid],0xb0
nosesl:
ret
nsyse3:
cmp eax,4 ; SB
jnz nsyse4
cmp ebx,0x100
jb nsyse4
mov edx,65535
cmp edx,ebx
jb nsyse4
mov word [sb16],bx
ret
nsyse4:
cmp eax,5 ; SYSTEM LANGUAGE
jnz nsyse5
mov [syslang],ebx
ret
nsyse5:
cmp eax,6 ; WSS
jnz nsyse6
cmp ebx,0x100
jb nsyse6
mov [wss],ebx
ret
nsyse6:
cmp eax,7 ; HD BASE
jne nsyse7
cmp ebx,1
jnz noprmahd
mov [hdbase],0x1f0
mov [hdid],0x0
mov [hdpos],1
call set_FAT32_variables
noprmahd:
cmp ebx,2
jnz noprslhd
mov [hdbase],0x1f0
mov [hdid],0x10
mov [hdpos],2
call set_FAT32_variables
noprslhd:
cmp ebx,3
jnz nosemahd
mov [hdbase],0x170
mov [hdid],0x0
mov [hdpos],3
call set_FAT32_variables
nosemahd:
cmp ebx,4
jnz noseslhd
mov [hdbase],0x170
mov [hdid],0x10
mov [hdpos],4
call set_FAT32_variables
noseslhd:
ret
nsyse7:
cmp eax,8 ; HD PARTITION
jne nsyse8
mov [fat32part],ebx
call set_FAT32_variables
ret
nsyse8:
cmp eax,10 ; SOUND DMA CHANNEL
jne no_set_sound_dma
mov [sound_dma],ebx
ret
no_set_sound_dma:
cmp eax,11 ; ENABLE LBA READ
jne no_set_lba_read
and ebx,1
mov [lba_read_enabled],ebx
ret
no_set_lba_read:
cmp eax,12 ; ENABLE PCI ACCESS
jne no_set_pci_access
and ebx,1
mov [pci_access_enabled],ebx
ret
no_set_pci_access:
mov [esp+36],dword -1
ret
align 4
sys_getsetup:
; 1=roland mpu midi base , base io address
; 2=keyboard 1, base kaybap 2, shift keymap, 9 country 1eng 2fi 3ger 4rus
; 3=cd base 1, pri.master 2, pri slave 3 sec master, 4 sec slave
; 4=sb16 base , base io address
; 5=system language, 1eng 2fi 3ger 4rus
; 6=wss base
; 7=hd base 1, pri.master 2, pri slave 3 sec master, 4 sec slave
; 8=fat32 partition in hd
; 9=get hs timer tic
cmp eax,1
jne ngsyse1
mov [esp+36],dword 0
ret
ngsyse1:
cmp eax,2
jne ngsyse2
cmp ebx,1
jnz kbnobaseret
mov edi,[0x3010]
add ecx,[edi+0x10]
mov ebx,ecx
mov eax,keymap
mov ecx,128
call memmove
ret
kbnobaseret:
cmp ebx,2
jnz kbnoshiftret
mov edi,[0x3010]
add ecx,[edi+0x10]
mov ebx,ecx
mov eax,keymap_shift
mov ecx,128
call memmove
ret
kbnoshiftret:
cmp ebx,3
jne kbnoaltret
mov edi,[0x3010]
add ecx,[edi+0x10]
mov ebx,ecx
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -