yeps that's normal...
you can't access fc02 directly in your mainloop ...the ikbd sends message bundles...means it hat some special codes >$f8 or so to receive mouse x and y and buttons...and keycodes..means something like codes you have to receive...and if you receive that special code it means you have to save the following bytes that will be received to the mouse or button info...
when you access fc02 directly not in your 118 irq you will mixup the messages...maybe you even will miss some bytes from the ikbd...
that will not work...ok normally it works becuase you disable the mouse in your demo...
here isn an example how to do it...
setup a #118 irq to this routine and all will work fine when you access the variables...not fc02 directly of course ;) *i hope ;))
greets ultra ;)
ACIA_ROUT: PART
***********************************************************************
* KEYBOARD-ROUTINE *
* VERSION 3.00+ *
*---------------------------------------------------------------------*
* X- UND Y-KOORDINATEN --> 'X_MAUS'.w und 'Y_MAUS'.w *
* BORDERS --> 'X_MIN' , 'X_MAX', 'Y_MIN','Y_MAX'.w *
* BUTTON --> 'BUTTON'.b *
* ACCELERATION_TAB --> 'M_OFFSET'.w (16 w”rter lang !) *
* KEY --> BSR'GET_KEY' --> D0.L (SCAN/ASCII) *
* KEY REPEAT --> 'REPEAT'.w und 'REPEAT2'.w *
* *
* (C) cream 1991
ACIA_IRQ:
ACIA: MOVE #$2500,SR
MOVEM.L D0-D2/A0-A1,-(SP)
MOVEQ #0,D0
LEA ACIA_REG(PC),A1
ACIA_LOP:
MOVE.B $FFFFFC02,D0
TST.W 6(A1)
BNE.S GET_X_Y
CMP.B #$F8,D0
BLT.S GET_X_Y
CMP.B #$FB,D0
BGT.S GET_X_Y
MOVE.B D0,8(A1)
ADDQ.W #1,6(A1)
CLR.W 4(A1)
ACIA_OVR:
BTST #4,$FFFFFA01.w
BEQ.S ACIA_LOP
MOVEM.L (SP)+,D0-D2/A0-A1
BCLR #6,$FFFFFA11
RTE
ACIA_VR2: MOVE.B D0,$0A(A1)
BTST #4,$FFFFFA01
BEQ.S ACIA_LOP
MOVEM.L (SP)+,D0-D2/A0-A1
BCLR #6,$FFFFFA11.w
RTE
GET_X_Y: TST.W 6(A1)
BEQ.S ACIA_VR2
ADDQ.W #1,4(A1)
CMPI.W #2,4(A1)
BNE.S GET_X
TST.B D0
BMI.S HOCH_Y
ASL.W #1,D0
MOVE.W 22(A1,D0.w),D2
ADD.W D2,2(A1)
DC.B $0C,$69
Y_MAX: DC.B $00,$C7,$00,$02
BLE.S B_DOWN
SUB.W D2,2(A1)
B_DOWN:
CLR.L 4(A1)
BRA.S ACIA_OVR
HOCH_Y: MOVEQ #0,D1
SUB.B D0,D1
ASL.W #1,D1
MOVE.W 22(A1,D1.w),D2
SUB.W D2,2(A1)
DC.B $0C,$69
Y_MIN: DC.B $00,$00,$00,$02
BGE.S B_UP
ADD.W D2,2(A1)
B_UP:
CLR.L 4(A1)
BRA ACIA_OVR
GET_X:
TST.B D0
BMI.S LEFT_X
ASL.W #1,D0
MOVE.W 22(A1,D0.w),D2
ADD.W D2,(A1)
DC.B $0C,$51
X_MAX: DC.B $01,$3F
BLE.S B_RIGHT
SUB.W D2,(A1)
B_RIGHT: BRA ACIA_OVR
LEFT_X: MOVEQ #$00,D1
SUB.B D0,D1
ASL.W #1,D1
MOVE.W 22(A1,D1.w),D2
SUB.W D2,(A1)
DC.B $0C,$51
X_MIN: DC.B $00,$00
BGE.S B_LEFT
ADD.W D2,(A1)
B_LEFT: BRA ACIA_OVR
GET_KEY:
MOVEM.L D1-D3/A0,-(SP)
MOVEQ #0,D0
LEA ACIA_REG+$0A(PC),A0
TST.W 2(A0)
BNE.S COUNT
AGAIN:
MOVE.B (A0),D0
NO_NEW:
CMP.B (A0),D0
BEQ.S NO_NEW
NEW_ONE: MOVE.B (A0),D0
MOVE.B D0,1(A0)
MOVE.W #1,2(A0)
MOVE.W 4(A0),D3
AND.L #$FFFF,D3
LSL.L #2,D3
MOVE.L D3,8(A0)
OUT_KEY:
BTST #7,D0
BNE.S AGAIN
MOVE.B 48(A0,D0.w),D1
SWAP D0
MOVE.B D1,D0
MOVEM.L (SP)+,D1-D3/A0
RTS
COUNT:
MOVE.L 8(A0),D2
C_LOOP:
MOVE.B 1(A0),D1
CMP.B (A0),D1
BEQ.S OK
BTST #7,(A0)
BEQ.S NEW_ONE
CLR.B (A0)
CLR.W 2(A0)
BRA.S AGAIN
OK:
SUBQ.L #1,D2
BNE.S C_LOOP
MOVE.W 6(A0),D3
AND.L #$FFFF,D3
MOVE.L D3,8(A0)
MOVE.B (A0),D0
BRA.S OUT_KEY
ACIA_REG:
X_MAUS: DC.W 0
Y_MAUS: DC.W 0
K_FLAG1: DC.W 0
K_FLAG2: DC.W 0
BUTTON: DC.W 0
ACIA_KEY: DC.B 0
KEY_BUFF: DC.B 0
REPT: DC.W 0
REPEAT: DC.W REP1
REAPEAT2: DC.W REP2
C_COUNT: DC.L 0
M_OFFSET: DC.W 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
SCAN_ASC:
DC.B $00
DC.B $1B,$31,$32,$33,$34,$35,$36,$37,$38,$39 ;$0A
DC.B $30,$9E,$27,$08,$09,$71,$77,$65,$72,$74 ;$14
DC.B $5A,$55,$49,$4F,$50,$9A,$2B,$0D,$00,$41 ;$1E
DC.B $53,$44,$46,$47,$48,$4A,$4B,$4C,$99,$8E ;$28
DC.B $00,$00,$00,$79,$78,$43,$56,$42,$4E,$4D ;$32
DC.B $00,$00,$00,$00,$00,$00,$20,$00,$00,$00 ;$3C
DC.B $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ;$46
DC.B $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ;$50
DC.B $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ;$5A
DC.B $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ;$64
DC.B $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ;$6E
EVEN
**************************************************************************
ENDPART
|