old-trainOS/scripts/keyboard.cu.spark

324 lines
3.8 KiB
Text
Raw Permalink Normal View History

; =============================================
; compiled with Copper 1.0
; 2015-10-21 21:27:53
; =============================================
; USE /home/felix/projects/Electronics/libs/standard.cul
; native method: toInt8(…) → INT8
; native method: toInt16(…) → INT16
; native method: toInt32(…) → INT32
; native method: toUInt8(…) → UINT8
; native method: toUInt16(…) → UINT16
; native method: toUInt32(…) → UINT32
.asmtype DRIVER
.name KEYBOARDDRIVER
; native method: print(…)
; native method: outb(…)
; native method: inb(…) → UINT8
.type CpuState {
eax : UINT32;
ebx : UINT32;
ecx : UINT32;
}
.global e0Code BOOL
.global e1Code INT32
.global e1Prev UINT16
; 0, sendCommand
sendCommand:
pushnil ; return value
_private_0:
pushi 4 100
callnr inb 1
pushi 3 2
op2 12
pushi 3 0
op2 6
jmp_if_not _private_1
jmp _private_0
_private_1:
load -1
pushi 2 96
callnr toUInt16 1
calln outb 2
ret
; end of sendCommand
; 0, initKeyboard
initKeyboard:
pushnil ; return value
_private_2:
pushi 4 100
callnr inb 1
pushi 3 1
op2 12
pushi 3 0
op2 6
jmp_if_not _private_3
pushi 4 96
calln inb 1
jmp _private_2
_private_3:
ret
; end of initKeyboard
; 0, handleKeyPress
handleKeyPress:
pushnil ; return value
load -2
pushi 6 0
op2 5
jmp_if_not _private_4
pusht "]\n"
load -1
pusht "[keycode="
calln print 3
_private_4:
ret
; end of handleKeyPress
; 1, main
.export main
main:
pushnil ; return value
pushnil ; i:INT32
pusht "Initialize keyboard...\n"
calln print 1
call initKeyboard 0
ret
; end of main
; 0, translateKeyCode
translateKeyCode:
pushnil ; return value
pusht "]\n"
load -2
pusht ",scancode="
load -1
pusht "[extend="
calln print 5
pushi 2 0
store 0
load -1
pushi 2 0
op2 5
jmp_if_not _private_5
load -2
pushi 2 10
op2 5
jmp_if_not _private_6
pushi 2 1
store 0
load 0
retr
_private_6:
_private_5:
load 0
retr
; end of translateKeyCode
; 0, handleKeyboardIRQ
handleKeyboardIRQ:
pushnil ; return value
pushnil ; scancode:UINT8
pushnil ; keycode:INT32
pushnil ; breakcode:BOOL
pushi 2 0
store 2
pushi 6 0
store 3
pushi 4 96
callnr inb 1
store 1
load 1
pushi 3 128
op2 12
pushi 3 0
op2 6
loadg e1Code
pushi 2 0
op2 6
load 1
pushi 3 225
op2 6
op2 11
loadg e0Code
load 1
pushi 3 224
op2 6
op2 11
op2 12
op2 12
jmp_if_not _private_7
pushi 6 1
store 3
load 1
pushi 3 127
op2 12
store 1
_private_7:
loadg e0Code
jmp_if_not _private_8
load 1
pushi 3 42
op2 5
load 1
pushi 3 54
op2 5
op2 11
jmp_if_not _private_10
pushi 6 0
storeg e0Code
ret
_private_10:
load 1
callnr toInt32 1
pushi 2 1
callr translateKeyCode 2
store 2
pushi 6 0
storeg e0Code
jmp _private_9
_private_8:
loadg e1Code
pushi 2 2
op2 5
jmp_if_not _private_11
loadg e1Prev
load 1
pushi 3 256
op2 2
callnr toUInt16 1
op2 11
storeg e1Prev
loadg e1Prev
callnr toInt32 1
pushi 2 2
callr translateKeyCode 2
store 2
pushi 2 0
storeg e1Code
jmp _private_12
_private_11:
loadg e1Code
pushi 2 1
op2 5
jmp_if_not _private_13
load 1
callnr toUInt16 1
storeg e1Prev
pushi 2 2
storeg e1Code
jmp _private_14
_private_13:
load 1
pushi 3 224
op2 5
jmp_if_not _private_15
pushi 6 1
storeg e0Code
jmp _private_16
_private_15:
load 1
pushi 3 225
op2 5
jmp_if_not _private_17
pushi 2 1
storeg e1Code
jmp _private_18
_private_17:
load 1
callnr toInt32 1
pushi 2 0
callr translateKeyCode 2
store 2
_private_18:
_private_16:
_private_14:
_private_12:
_private_9:
load 2
pushi 2 0
op2 6
jmp_if_not _private_19
load 3
load 2
call handleKeyPress 2
_private_19:
ret
; end of handleKeyboardIRQ
; 1, irq
.export irq
irq:
pushnil ; return value
load -1
pushi 2 33
op2 5
jmp_if_not _private_20
call handleKeyboardIRQ 0
_private_20:
load -2
destruct
ret
; end of irq