Raw File
; _____________________________________________
; | |
; | Project: APPLER |
; | File: KBDSETUP.ASM |
; | Compiler: 16-bit TASM (2.5) |
; | |
; | Subject: Keyboard Setup Utility |
; | |
; | Author: Emil Dotchevski |
; |_____________________________________________|
include GLOBALS.INC
include INTERFAC.INC
include CONIO.INC
KBDsetup segment public
assume cs:KBDsetup,ds:KBDsetup,es:Keyboard
GetLineParams GL_ParamStruc <?,0,1,1,5,0,0,20h,40h,2*80,?,?,0Bh,1,0,GetLineUser>
ScreenIOParams SIO_ParamStruc <1,KBDsetup,0,0,offset Screen,seg Screen,1,0,1,1>
GetKeyParams RK_ParamStruc <1,Fkey,0,0,0,?,ShowAll,0>
KBDSetupInInit proc far
cli
push ax ds es
mov ax,Emulate
mov es,ax
assume es:Emulate
mov al,es:[C000]
mov cs:KeyPressed,al
mov es:[C000],0
assume ds:CONio
mov ax,CONio
mov ds,ax
mov GL_ParamsOfs, offset GetLineParams
mov GL_ParamsSeg, seg GetLineParams
mov SIO_ParamsOfs, offset ScreenIOParams
mov SIO_ParamsSeg, seg ScreenIOParams
mov RK_ParamsOfs, offset GetKeyParams
mov RK_ParamsSeg, seg GetKeyParams
push cs
pop ds
assume ds:KBDsetup
mov ax,Keyboard
mov es,ax
assume es:Keyboard
mov ax,OldKeys
mov es:k_Table,ax
pop es ds ax
call UnSetBreaks
sti
ret
KBDSetupInInit endp
KeyPressed db 0
OldKeys dw offset Keyboard:k_KbdSetupTable
KBDSetupOutInit proc far
cli
push ax ds es
push cs
pop ds
mov ax,Keyboard
mov es,ax
assume es:Keyboard
mov ax,es:k_Table
mov OldKeys,ax
mov ax,Emulate
mov es,ax
assume es:Emulate
mov al,KeyPressed
mov es:[C000],al
mov ax,seg T_Iflags
mov es,ax
assume es:seg T_Iflags
mov byte ptr es:T_Iflags,00000010b
pop es ds ax
call AppleKeysOn
call SetBreaks
ret
KBDSetupOutInit endp
assume cs:KBDsetup,ds:KBDsetup,es:Keyboard
KBD_Keys db 05h,06h,07h,08h,01h,02h,0Ah,18h,0Ch
KBD_Procs dw KBD_Left,KBD_Right,KBD_Up,KBD_Down,KBD_Home,KBD_End,KBD_Clear,KBD_Enter,KBD_Esc
KBDsetupRET: push cs
pop ds
mov ax,Keyboard
mov es,ax
KBDloop: mov cs:ActiveFlags,0000000000001000b
mov FkeysFlags,0000111111b
mov SA_Active,0
mov ShowASCII?,0
mov es:k_Table,offset k_KbdSetupTable
mov ScreenIOparams.CursorFlag,0
mov SA_MesFlag,1
call ReadKey
mov SA_MesFlag,0
mov es:k_Table,offset k_DebugTable
mov ShowASCII?,1
xor bx,bx
mov bl,ah
mov SA_Active,bx
mov si,es:k_Shifts
mov ST_Shifts,si
mov cs:ActiveFlags,0000000000010000b
call KBD_Home
xchg si,bx
call get_table_ofs
mov bx,es:k_AppleTable[bx]
mov bl,es:[si][bx]
cmp bl,85h
ja KBDloop1
KBDloop0: mov al,ST_Pos
cmp al,bl
je KBDloop1
call KBD_Down
jmp KBDloop0
KBDloop1: mov cx,100h
call ReadKey
mov di,offset KBD_Keys
mov cx,offset KBD_Procs- offset KBD_Keys
call CalcCommand
jc KBDloop1
shl di,1
call KBD_Procs[di]
jnc KBDloop1
jmp KBDloop
KBD_Left: cmp ST_Pos,16
jb KBD_LeftRet
sub ST_Pos,16
mov al,ST_Pos
cmp al,ST_BegPrint
jae KBD_LeftRet
sub ST_BegPrint,16
KBD_LeftRet: clc
ret
KBD_Right: cmp ST_Pos,86h-16
jnb KBD_RightRet
add ST_Pos,16
mov al,ST_Pos
sub al,ST_BegPrint
cmp al,16*4
jb KBD_RightRet
add ST_BegPrint,16
KBD_RightRet: clc
ret
KBD_Up: cmp ST_Pos,0
jz KBD_UpRet
dec ST_Pos
mov al,ST_Pos
cmp al,ST_BegPrint
jae KBD_UpRet
sub ST_BegPrint,16
KBD_UpRet: clc
ret
KBD_Down: cmp ST_Pos,85h
jae KBD_DownRet
inc ST_Pos
mov al,ST_Pos
sub al,ST_BegPrint
cmp al,16*4
jb KBD_DownRet
add ST_BegPrint,16
KBD_DownRet: clc
ret
KBD_Home: mov ST_Pos,0
mov ST_BegPrint,0
clc
ret
KBD_End: mov ST_Pos,07Fh
mov ST_BegPrint,4*16
clc
ret
KBD_Clear: mov dl,ST_Pos
mov ST_Pos,86h
call KBD_Enter
mov ST_Pos,dl
ret
KBD_Enter: mov bx,ST_Shifts
call get_table_ofs
mov si,es:k_AppleTable[bx]
mov al,ST_Pos
mov bx,SA_Active
cmp si,offset Keyboard:a_AltTable
jne KBD_Enter1
mov es:a_CtrlTable[bx],al
KBD_Enter1: cmp si,offset Keyboard:a_CtrlTable
jne KBD_Enter2
mov es:a_AltTable[bx],al
KBD_Enter2: mov es:[si][bx],al
KBD_Esc: stc
ret
FkeyProcs dw Fkey_F1,Fkey_F2,Fkey_F3,Fkey_F4,Fkey_F5
dw Fkey_F6,Fkey_F7,Fkey_F8,Fkey_F9,Fkey_F0
FkeysMasks dw 1b,10b,100b,1000b,10000b,100000b,1000000b,10000000b,100000000b,1000000000b
Fkey proc far
push ax bx cx dx si di bp ds es
push cs
pop ds
mov bx,Keyboard
mov es,bx
push [ActiveFlags]
push word ptr [ScreenIOparams.CursorFlag]
push word ptr [ScreenIOparams.CursorLen]
push word ptr [ScreenIOparams.CursorColor]
push [FkeysFlags]
push word ptr [SA_MesFlag]
mov SA_MesFlag,0
push es:k_Table
mov es:k_Table,offset k_DebugTable
xor bx,bx
mov bl,al
shl bx,1
mov ax,FkeysMasks[bx]
mov ScreenIOparams.CursorLen,1
mov ScreenIOparams.CursorFlag,1
test FkeysFlags,ax
jz Fkey_Ret
mov FkeysFlags,0000001000b
call FkeyProcs[bx]
Fkey_Ret: push cs
pop ds
mov bx,Keyboard
mov es,bx
pop es:k_Table
pop word ptr [SA_MesFlag]
pop [FkeysFlags]
pop word ptr [ScreenIOparams.CursorColor]
pop word ptr [ScreenIOparams.CursorLen]
pop word ptr [ScreenIOparams.CursorFlag]
pop [ActiveFlags]
pop es ds bp di si dx cx bx ax
ret
Fkey endp
Fkey_F1: mov ax,CONio
mov es,ax
assume es:CONio
xor es:DKO_OldBuffFlag,1
cmp es:DKO_OldBuffFlag,0
jnz Fkey_F1_Ret
call ClearBuffer
Fkey_F1_Ret: ret
assume es:Keyboard
Fkey_F2: call Prepare4DOS
mov dx,offset Filespec
xor cx,cx
mov ax,3C01h
int 21h
jc Fkey_F2errorNC
mov bx,ax
mov dx,offset RecognizeBytes
mov cx,5
mov ah,40h
int 21h
jc Fkey_F2error
cmp ax,cx
jne Fkey_F2error
mov dx,offset SR_KbdParam
mov cx,1
mov ah,40h
int 21h
jc Fkey_F2error
mov cx,CONio
mov ds,cx
mov dx,offset CONio:DKO_OldBuffFlag
mov cx,1
mov ah,40h
int 21h
jc Fkey_F2error
mov cx,Keyboard
mov ds,cx
mov dx,offset Keyboard:a_NormalTable
mov cx,6 * 54h
mov ah,40h
int 21h
jc Fkey_F2error
cmp ax,cx
jne Fkey_F2error
mov ah,3Eh
int 21h
mov cs:GetKeyParams.RK_ErrPtr,offset SMS_Saved
Fkey_F2ret: call SOD4eraperP
ret
Fkey_F2error: mov ah,3Eh
int 21h
Fkey_F2errorNC: mov cs:GetKeyParams.RK_ErrPtr,offset SMS_ErrorSave
jmp Fkey_F2ret
RecognizeBytes db 0,0FFh,55h,0AAh,0
RecognizeBuffer db 5 dup (0)
Fkey_F3: call Prepare4DOS
mov dx,offset Filespec
mov ax,3D00h
int 21h
jc Fkey_F3errorNC
mov bx,ax
mov dx,offset RecognizeBuffer
mov cx,5
mov ah,3Fh
int 21h
jc Fkey_F3error
cmp ax,cx
jne Fkey_F3error
push cs
pop es
mov si,offset RecognizeBytes
mov di,offset RecognizeBuffer
cld
rep cmpsb
jne Fkey_F3errorT
mov dx,offset SR_KbdParam
mov cx,1
mov ah,3Fh
int 21h
jc Fkey_F3error
mov cx,CONio
mov ds,cx
mov dx,offset CONio:DKO_OldBuffFlag
mov cx,1
mov ah,3Fh
int 21h
jc Fkey_F3error
mov cx,Keyboard
mov ds,cx
mov dx,offset Keyboard:a_NormalTable
mov cx,6 * 54h
mov ah,3Fh
int 21h
jc Fkey_F3error
cmp ax,cx
jne Fkey_F3error
mov ah,3Eh
int 21h
call UpdateKeyboard
mov cs:GetKeyParams.RK_ErrPtr,offset SMS_Restored
Fkey_F3ret: call SOD4eraperP
ret
Fkey_F3error: mov ah,3Eh
int 21h
Fkey_F3errorNC: mov cs:GetKeyParams.RK_ErrPtr,offset SMS_ErrorLoad
jmp Fkey_F3ret
Fkey_F3errorT: mov ah,3Eh
int 21h
mov cs:GetKeyParams.RK_ErrPtr,offset SMS_Type
jmp Fkey_F3ret
Fkey_F4: call GoAppleII
ret
FkeyF5_Keys db 7,8,5,6,18h,0Ch
FkeyF5_Procs dw FkeyF5_Up,FkeyF5_Down,FkeyF5_Left,FkeyF5_Right,FkeyF5_Enter,FkeyF5_Esc
Fkey_F5: mov ActiveFlags,1
FkeyF5Loop: call ReadKey
mov di,offset FkeyF5_Keys
mov cx,offset FkeyF5_Procs- offset FkeyF5_Keys
call CalcCommand
jc FkeyF5Loop
shl di,1
mov al,SR_KbdParam
mov ah,al
call FkeyF5_Procs[di]
mov SR_KbdParam,al
call UpdateKeyboard
jnc FkeyF5Loop
ret
FkeyF5_Up: and ah,01100000b
add ah,00100000b
and ah,01100000b
and al,10011111b
or al,ah
clc
ret
FkeyF5_Down: and ah,01100000b
sub ah,00100000b
and ah,01100000b
and al,10011111b
or al,ah
clc
ret
FkeyF5_Left: inc ah
and ah,00011111b
and al,11100000b
or al,ah
mov di,offset SR_speeds_v
mov cx,10
xchg al,ah
call CalcCommand
xchg al,ah
jc FkeyF5_Left
ret
FkeyF5_Right: dec ah
and ah,00011111b
and al,11100000b
or al,ah
mov di,offset SR_speeds_v
mov cx,10
xchg al,ah
call CalcCommand
xchg al,ah
jc FkeyF5_Right
ret
FkeyF5_Enter:
FkeyF5_Esc: stc
ret
UpdateKeyboard proc far
pushf
push ax
mov al,0ADh ; Disable Keyboard
call K_SendCommand
jc UK_Exit
mov al,0F3h
call K_SendData
mov al,cs:SR_KbdParam
call K_SendData
UK_Exit: mov al,0AEh ; Enable Keyboard
out 64h,al
pop ax
popf
ret
UpdateKeyboard endp
KBD_EXT db '.KBD',0
Fkey_F6: mov ActiveFlags,0000000000000100b
mov FkeysFlags,0000001000b
mov GetLineParams.GL_Buffer,offset Filespec
mov GetLineParams.GL_Pos,0
mov GetLineParams.GL_BegPrint,0
mov GetLineParams.GL_MaxLength,99
mov GetLineParams.GL_MaxPrint,27
xor bx,bx
Seek0_Loop: cmp FileSpec[bx],0
jz Seek0_Done
inc bl
jmp Seek0_Loop
Seek0_Done: mov GetLineParams.GL_Length,bl
gotoxy 5,51
GetLineService _GETLINE
push si di
mov si,offset KBD_EXT
mov di,offset Filespec
call AddExt
pop di si
gotoxy 2,0
mov GetLineParams.GL_CX,cx
ret
Fkey_F7:
Fkey_F8:
Fkey_F9:
Fkey_F0: ret
; *******************************************************************
; ** **
; ** **
; ** S H O W A L L **
; ** **
; ** **
; *******************************************************************
ActiveFlags dw 0
ShowAll proc far
cli
push ax ds bp
push word ptr [ScreenIOparams.CursorColor]
push word ptr [ScreenIOparams.CursorLen]
push word ptr [ScreenIOparams.CursorFlag]
push cs
pop ds
mov ax,Keyboard
mov es,ax
mov ScreenIOparams.CursorLen,10
mov ScreenIOparams.CursorColor,10h
mov ScreenIOparams.CursorFlag,1
call ShowRepeat
call ShowBuffer
call ShowFilespec
call ShowAssignment
call ShowASCII
call ShowFuncKeys
ScreenIOservice _SHOWLINE
call ShowTitle
call ShowMessage
pop word ptr [ScreenIOparams.CursorFlag]
pop word ptr [ScreenIOparams.CursorLen]
pop word ptr [ScreenIOparams.CursorColor]
pop bp ds ax
sti
ret
ShowAll endp
; -- Draw box --------------------------
; Entry:
; AH = Active Flag Bit
; CX = HTAB & VTAB
; BX = Offset of the strings
; DL = Hi-light color
; DH = Number of lines - 1
; Destroy:
; AX,BX,CX,DX
DB_CX dw ?
DrawBox: push ax
mov ax,cx
add ax,80 * 2
mov cs:DB_CX,ax
pop ax
test ActiveFlags,ax
mov ah,7
jz DB_ok1
mov ah,dl
DB_ok1: ScreenIOservice _STRINGPRINT
mov bx,ScreenIOparams.SP_bx
dec dh
mov al,dh
mov dx,cs:DB_CX
DB_Loop1: mov cx,dx
add dx,80 * 2
ScreenIOservice _STRINGPRINT
dec al
jnz DB_Loop1
mov cx,dx
mov bx,ScreenIOparams.SP_bx
ScreenIOservice _STRINGPRINT
ret
ST_StrX db ' APPLER KEYBOARD SETUP ',0
ShowTitle: push ax bx cx
gotoxy 1,0
mov ah,5Fh
mov bx,offset ST_StrX
ScreenIOservice _STRINGPRINT
gotoxy 2,0
xor ah,ah
ScreenIOservice _STRINGPRINT
pop cx bx ax
ret
SR_Str db 'ÚRepeat SettingsÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ',0
db '³ ³ ',0
db 'ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ',0
SR_str1 db 1,7,'Delay:',0
SR_str2 db 1,7,' ms Speed: ',0
SR_str3 db 1,7,' ch/s',0
SR_delays dw d250,d500,d750,d1000
SR_speeds_v db 0,1,2,4,8,0Ah,0Dh,10h,14h,1Fh
SR_speeds dw s300,s267,s240,s200,s150,s100,s092,s075,s050,s020
d250 db 1,0Bh,' 250',0
d500 db 1,0Bh,' 500',0
d750 db 1,0Bh,' 750',0
d1000 db 1,0Bh,'1000',0
s300 db 1,0Bh,'30.0',0
s267 db 1,0Bh,'26.7',0
s240 db 1,0Bh,'24.0',0
s200 db 1,0Bh,'20.0',0
s150 db 1,0Bh,'15.0',0
s100 db 1,0Bh,'10.0',0
s092 db 1,0Bh,' 9.2',0
s075 db 1,0Bh,' 7.5',0
s050 db 1,0Bh,' 5.0',0
s020 db 1,0Bh,' 2.0',0
SR_KbdParam db 0
ShowRepeat: push ax bx cx dx di
gotoxy 3,0
mov bx,offset SR_Str
mov dx,30Eh
mov ax,0000000000000001b
call DrawBox
gotoxy 5,2
mov bx,offset SR_Str1
ScreenIOservice _STRINGPRINT
xor bx,bx
mov bl,SR_KbdParam
shr bl,5
shl bx,1
mov bx,SR_delays[bx]
ScreenIOservice _STRINGPRINT
mov bx,offset SR_str2
ScreenIOservice _STRINGPRINT
xor bx,bx
mov al,SR_KbdParam
and al,00011111b
push cx
mov di,offset SR_Speeds_v
mov cx,10
call CalcCommand
pop cx
shl di,1
mov bx,SR_speeds[di]
ScreenIOservice _STRINGPRINT
mov bx,offset SR_str3
ScreenIOservice _STRINGPRINT
pop di dx cx bx ax
ret
SB_Str db 'ÚBufferÄÄÄÄ¿ ',0
db '³ ³ ',0
db 'ÀÄÄÄÄÄÄÄÄÄÄÙ ',0
SB_Enabled db 1,0Bh,'Enabled',0
SB_Disabled db 1,0Bh,'Disabled',0
ShowBuffer: push ax bx cx dx es
gotoxy 3,36
mov bx,offset SB_Str
mov dx,30Eh
mov ax,0000000000000010b
call DrawBox
gotoxy 5,38
mov ax,CONio
mov es,ax
assume es:CONio
test es:DKO_OldBuffFlag,1
mov bx,offset SB_Disabled
jz SB_1
mov bx,offset SB_Enabled
SB_1: ScreenIOservice _STRINGPRINT
pop es dx cx bx ax
ret
assume es:Keyboard
SF_Str db 'ÚFilenameÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿',0
db '³ ³',0
db 'ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ',0
Filespec db 'APPLER.KBD',100 dup (0)
ShowFilespec: push ax bx cx dx
gotoxy 3,49
mov bx,offset SF_Str
mov dx,30Eh
mov ax,0000000000000100b
call DrawBox
xor dl,dl
xchg Filespec[27],dl
mov bx,offset Filespec
gotoxy 5,51
mov ah,0Bh
ScreenIOservice _STRINGPRINT
xchg Filespec[27],dl
pop dx cx bx ax
ret
SA_Str db 'ÚKeyboard MapÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿',0
db '³ ³',0
db 'ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ',0
SA_Message db 1,0Fh,'Press a key to remap',0
SA_Keyboard db 'ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿',0
db '³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³ ³ ³³ ³³ ³³ ³',0
db 'ÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙ ÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙ',0
db 'ÚÄÄÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄÄÄ¿ ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿',0
db '³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³ ³ ³³ ³³ ³³ ³',0
db 'ÀÄÄÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀ¿ ³ ÀÄÄÙÀÄÄÙÀÄÄÙ³ ³',0
db 'ÚÄÄÄÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿³ ³ ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿³ ³',0
db '³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³ ³ ³³ ³³ ³³ ³',0
db 'ÀÄÄÄÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÄÙ ÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙ',0
db 'ÚÄÄÄÄÄÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄÄÄÄÄÄÄÄ¿ ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿',0
db '³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³³ ³ ³ ³³ ³³ ³³ ³',0
db 'ÀÄÄÄÄÄÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÄÄÄÄÄÄÄÙ ÀÄÄÙÀÄÄÙÀÄÄÙ³ ³',0
db 'ÚÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄ¿ ÚÄÄÄÄÄÄ¿ÚÄÄ¿³ ³',0
db '³ ³ ³ ³ ³ ³ ³ ³³ ³³ ³',0
db 'ÀÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÙ ÀÄÄÄÄÄÄÙÀÄÄÙÀÄÄÙ',0
SA_SpcProcs dw SAS_Enter,SAS_Ctrl,SAS_Lshift,SAS_Div,SAS_Rshift,SAS_Caps,SAS_Num
SA_TblPtr dw ?
SA_Active dw 0
SA_MesFlag db 1
ShowAssignment: push ax bx cx dx si di
mov bx,es:k_Shifts
call get_table_ofs
mov bx,es:k_AppleTable[bx]
mov SA_TblPtr,bx
gotoxy 7,0
mov bx,offset SA_Str
mov dx,110Eh
mov ax,0000000000001000b
call DrawBox
mov bx,offset SA_Keyboard
gotoxy 9,1
mov dx,15
mov ah,7
SA_Loop1: ScreenIOservice _STRINGPRINT
add cx,2*2
add bx,79
dec dx
jnz SA_Loop1
mov bx,offset SA_Message
gotoxy 8,58
cmp SA_MesFlag,0
jz SA_Dont1
ScreenIOservice _STRINGPRINT
SA_Dont1: mov si,53h
SA_Loop2: mov al,SA_Y[si]
or al,al
jz SA_Next
dec al
jz SA_Special
mov ah,80 * 2
mul ah
mov cx,ax
xor ax,ax
mov al,SA_X[si]
add cx,ax
add cx,ax
SA_SpecialRet: mov bx,SA_TblPtr
mov bl,es:[bx][si]
cmp bl,85h
ja SA_Next
xor bh,bh
add cx,81*2
cmp bl,20h
mov ax,0B00h+' '
jae SA_NoCtrl
mov al,'^'
SA_NoCtrl: ScreenIOservice _SYMBPRINT
mov al,SA_Table[bx]
ScreenIOservice _SYMBPRINT
SA_Next: dec si
jnz SA_Loop2
jmp SA_Ret
SA_Special: xor bx,bx
mov bl,SA_X[si]
shl bx,1
mov ah,7
call SA_SpcProcs[bx]
jmp SA_SpecialRet
SA_Ret: pop di si dx cx bx ax
ret
SAS_Enter: mov bx,SA_TblPtr
mov bl,es:[bx][si]
xor bh,bh
gotoxy 21,76
cmp bl,20h
mov ax,0B00h+' '
jae SASE_NoCtrl
mov al,'^'
SASE_NoCtrl: ScreenIOservice _SYMBPRINT
mov al,SA_Table[bx]
ScreenIOservice _SYMBPRINT
gotoxy 12,56
ret
SAS_CtrlStr db 'Ctrl',0
SAS_Ctrl: gotoxy 22,2
mov bx,offset SAS_CtrlStr
test es:k_Shifts,1
mov ah,7
jz SAS_Ctrl1
mov ah,0Fh
SAS_Ctrl1: ScreenIOservice _STRINGPRINT
gotoxy 22,56
ScreenIOservice _STRINGPRINT
ret
SAS_ShiftStr db 'Shift',0
SAS_Lshift: gotoxy 19,3
mov bx,offset SAS_ShiftStr
test es:k_Shifts,M_LEFT_SHIFT or M_RIGHT_SHIFT
mov ah,7
jz SAS_LS1
mov ah,0Fh
SAS_LS1: ScreenIOservice _STRINGPRINT
ret
SAS_Rshift: gotoxy 19,53
mov bx,offset SAS_ShiftStr
test es:k_Shifts,M_LEFT_SHIFT or M_RIGHT_SHIFT
mov ah,7
jz SAS_RS1
mov ah,0Fh
SAS_RS1: ScreenIOservice _STRINGPRINT
ret
SAS_CapsStr db 'Caps',0
SAS_Caps: gotoxy 16,2
mov bx,offset SAS_CapsStr
test es:k_Shifts,M_CAPS_LOCK
mov ah,7
jz SAS_Caps1
mov ah,0Fh
SAS_Caps1: ScreenIOservice _STRINGPRINT
ret
SAS_NumStr db 'NL',0
SAS_Num: gotoxy 10,64
mov bx,offset SAS_NumStr
test es:k_Shifts,M_NUM_LOCK
mov ah,7
jz SAS_Num1
mov ah,0Fh
SAS_Num1: ScreenIOservice _STRINGPRINT
ret
SAS_Div: mov bx,SA_TblPtr
mov bl,es:[bx][si]
xor bh,bh
gotoxy 10,68
cmp bl,20h
mov ax,0B00h+' '
jae SASD_NoCtrl
mov al,'^'
SASD_NoCtrl: ScreenIOservice _SYMBPRINT
mov al,SA_Table[bx]
ScreenIOservice _SYMBPRINT
gotoxy 18,46
ret
; 0 1 2 3 4 5 6 7 8 9 A B C D E F
SA_X db 0,01,05,09,13,17,21,25,29,33,37,41,45,49,57, 2 ; 00
db 07,11,15,19,23,27,31,35,39,43,47,51, 0, 1,08,12 ; 10
db 16,20,24,28,32,36,40,44,48,52, 2,53,10,14,18,22 ; 20
db 26,30,34,38,42, 3, 4,71, 0,28, 5, 0, 0, 0, 0, 0 ; 30
db 0, 0, 0, 0, 0, 6, 0,63,67,71,75,63,67,71,75,63 ; 40
db 67,71,65,71 ; 50
; 0 1 2 3 4 5 6 7 8 9 A B C D E F
SA_Y db 0,09,09,09,09,09,09,09,09,09,09,09,09,09,09,12 ; 00
db 12,12,12,12,12,12,12,12,12,12,12,12, 1, 1,15,15 ; 10
db 15,15,15,15,15,15,15,15,15,15, 1,09,18,18,18,18 ; 20
db 18,18,18,18,18, 1, 1,09, 0,21, 1, 0, 0, 0, 0, 0 ; 30
db 0, 0, 0, 0, 0, 1, 0,12,12,12,09,15,15,15,14,18 ; 40
db 18,18,21,21 ; 50
; 0123456789ABCDEF0123456789ABCDEF
SA_Table db '@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_' ; 00
db 'ú!"#$%&''()*+,-./0123456789:;<=>?'; 20
db '@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_' ; 40
db '`abcdefghijklmnopqrstuvwxyz{|}~±' ; 60
db 1,2,1Bh,1Ah,18h,19h ; 80
ST_Str db 'ÚÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄ¿',0
db '³ ³ ³ ³ ³',0
db 'ÀÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÙ',0
ST_Str1 db 1,0Eh,'³',1,7,' ASCII Char ',1,0Eh,'³',1,7,' ASCII Char ',1,0Eh,'³',1,7,' ASCII Char ',1,0Eh,'³',1,7,' ASCII Char ',1,0Eh,'³',0
ST_Str2 db 1,0Eh,'³',1,7,' ÄÄÄÄÄ ÄÄÄÄ ',1,0Eh,'³',1,7,' ÄÄÄÄÄ ÄÄÄÄ ',1,0Eh,'³',1,7,' ÄÄÄÄÄ ÄÄÄÄ ',1,0Eh,'³',1,7,' ÄÄÄÄÄ ÄÄÄÄ ',1,0Eh,'³',0
ST_Mes0 db 1,2Fh,' ',0
ST_Mes1 db 1,2Fh,'Select new char to assign to <',0
ST_Mes2 db 1,2Fh,'>',0
ST_ShiftTable dw ST_None
dw ST_Ctrl
dw ST_Ctrl
dw ST_Caps
dw ST_CapsShift
dw ST_Shift
dw ST_Num
ST_None db 0
ST_Ctrl db 'Ctrl+',0
ST_Shift db 'Shift+',0
ST_Caps db 'Caps+',0
ST_CapsShift db 'Caps+Shift+',0
ST_Num db 'Num+',0
ShowASCII? db 0
ST_Shifts dw 0
ST_BegPrint db 0
ST_Pos db 0
ShowASCII: push ax bx cx dx si di
cmp ShowASCII?,0
jnz ST_Go
jmp ST_Ret1
ST_Go: mov FkeysFlags,0000001000b
gotoxy 4,14
mov bx,offset ST_Str
mov dx,130Eh
mov ax,0000000000010000b
call DrawBox
gotoxy 5,14
mov bx,offset ST_Str1
ScreenIOservice _STRINGPRINT
gotoxy 6,14
mov bx,offset ST_Str2
ScreenIOservice _STRINGPRINT
gotoxy 7,18
mov si,cx
mov di,cx
xor bx,bx
mov bl,ST_BegPrint
mov dl,4
ST_Loop0: mov dh,16
ST_Loop: mov al,bl
cmp al,85h
ja ST_Ret
mov ah,7
ScreenIOservice _BYTEPRINT
add cx,6
cmp bl,20h
mov al,' '
jae ST_NoCtrl
mov al,'^'
ST_NoCtrl: mov ah,0Fh
ScreenIOservice _SYMBPRINT
mov al,SA_Table[bx]
ScreenIOservice _SYMBPRINT
cmp bl,ST_Pos
je ST_ShowCursor
ST_ShowCursorR: inc bx
add si,80*2
mov cx,si
dec dh
jnz ST_Loop
add di,26
mov si,di
mov cx,di
dec dl
jnz ST_Loop0
ST_Ret: gotoxy 23,15
mov bx,offset ST_Mes0
ScreenIOservice _STRINGPRINT
gotoxy 23,15
mov bx,offset ST_Mes1
ScreenIOservice _STRINGPRINT
mov bx,ST_Shifts
call get_table_ofs
mov bx,ST_ShiftTable[bx]
mov ah,2Eh
ScreenIOservice _STRINGPRINT
mov bx,SA_Active
mov al,ST_Table[bx]
cmp al,20h
jbe ST_Special
ScreenIOservice _SYMBPRINT
ST_SpecRet: mov bx,offset ST_Mes2
ScreenIOservice _STRINGPRINT
ST_Ret1: pop di si dx cx bx ax
ret
ST_ShowCursor: push cx
sub cx,9*2
ScreenIOservice _CALCXY
mov cs:ScreenIOparams.CursorColor,40h
ScreenIOservice _SHOWCURSOR
pop cx
jmp ST_ShowCursorR
ST_Special: xor bx,bx
mov bl,al
shl bx,1
mov bx,ST_Specials[bx]
ScreenIOservice _STRINGPRINT
jmp ST_SpecRet
ST_Specials dw STS_Esc,STS_BS,STS_Tab,STS_Enter,STS_Space,STS_Num
dw STS_Home,STS_Up,STS_PgUp,STS_Left,STS_Cntr,STS_Right
dw STS_End,STS_Down,STS_PgDn,STS_Ins,STS_Del
STS_Esc db 'Esc',0
STS_BS db 'BackSpace',0
STS_Tab db 'Tab',0
STS_Enter db 'Enter',0
STS_Space db 'Space',0
STS_Num db 'Num',0
STS_Home db 'Home',0
STS_Up db 'Up',0
STS_PgUp db 'PgUp',0
STS_Left db 'Left',0
STS_Cntr db 'Center',0
STS_Right db 'Right',0
STS_End db 'End',0
STS_Down db 'Down',0
STS_PgDn db 'PgDn',0
STS_Ins db 'Ins',0
STS_Del db 'Del',0
ST_Table db 0,0,'1234567890-=',1
db 2,'QWERTYUIOP[]',3
db 0,'ASDFGHJKL;''`'
db 0,'\ZXCVBNM,./',0,'*'
db 0,4,0,0,0,0,0,0,0,0,0,0,0
db 5,0,6,7,8,'-',9,10,11,'+',12,13,14,15,16
SFK_Str db '1 2 3 4 5 '
db '6 7 8 9 10 ',0
FkeysFlags dw 0000111111b
SFK_FkeysMain dw SFK_Buffer, SFK_Save, SFK_Load, SFK_Cont, SFK_Repeat
dw SFK_Name , SFK_None , SFK_None , SFK_None, SFK_None
SFK_None db ' ',0
SFK_Cont db 'Apple ',0
SFK_Load db 'Load ',0
SFK_Save db 'Save ',0
SFK_Repeat db 'Repeat',0
SFK_Buffer db 'Buffer',0
SFK_Assign db 'Assign',0
SFK_Name db 'Name ',0
ShowFuncKeys: push ax bx cx dx si
gotoxy 19h,0
mov bx,offset SFK_Str
mov ah,7
ScreenIOservice _STRINGPRINT
gotoxy 19h,1
xor si,si
mov dx,cs:FkeysFlags
SFK_Loop0: shr dx,1
mov ah,58h
jnc SFK_Next0
mov ah,5Fh
SFK_Next0: mov bx,cs:SFK_FkeysMain[si]
ScreenIOservice _STRINGPRINT
add cx,4
add si,2
cmp si,20
jb SFK_Loop0
pop si dx cx bx ax
ret
SMS_Restored db ' Keyboard setup successfully restored',0
SMS_Saved db ' Keyboard setup successfully saved',0
SMS_ErrorLoad db 1,0Ch,' Error restoring keyboard setup',0
SMS_ErrorSave db 1,0Ch,' Error saving keyboard setup',0
SMS_Type db 1,0Ch,'This file isn''t a keyboard setup file',0
ShowMessage: cmp GetKeyParams.RK_ErrPtr,0
jz SMS_Ret
push ax bx cx dx
mov bx,GetKeyParams.RK_ErrPtr
mov ah,0Ah
gotoxy 8,41
ScreenIOservice _STRINGPRINT
pop dx cx bx ax
SMS_Ret: ret
assume es:Emulate
Upcase: cmp al,'A'
jb UPCSret
cmp al,'Z'
ja UPCSret
or al,20h
UPCSret: ret
CalcCommand: push ax bx cx es ; Returns number of a command
push cs ; Input:
pop es ; di -> offset Commands
call Upcase ; al -> search command
cld ; cx -> commands count
mov bx,di
repne scasb ; Output:
stc ; di <- Number of the command
jne CC_end ; cf <- 1 if not found
sub di,bx
dec di
clc
CC_end: pop es cx bx ax
ret
; -- Hook INT 24h ----------------------
OldFlags dw ?
OldFkeys dw ?
Prepare4DOS: saveall
xor ax,ax
xchg ax,cs:ActiveFlags
mov cs:OldFlags,ax
xor ax,ax
xchg ax,cs:FkeysFlags
mov cs:OldFkeys,ax
call ShowAll
ScreenIOservice _SHOWSCREEN
call far ptr SystemTINI
restoreall
ret
; -- Unhook INT 24h --------------------
SOD4eraperP: saveall
mov ax,cs:OldFlags
mov cs:ActiveFlags,ax
mov ax,cs:OldFkeys
mov cs:FkeysFlags,ax
mov ax,Emulate
mov es,ax
mov byte ptr [C000],0
call far ptr SystemINIT
restoreall
ret
GetLineUser proc far
ret
GetLineUser endp
GoAppleII: push ax bx es
call ShowAll
ScreenIOservice _SHOWSCREEN
mov ax,Emulate
mov es,ax
mov al,C050
ScreenIOservice _SetScreen
xor bx,bx
xchg bx,ActiveFlags
SwitchToProcess PID_EMULATOR
mov ActiveFlags,bx
pop es bx ax
ret
KBDsetup ends
END
Generated by GNU Enscript 1.6.6, and GophHub 1.3.