Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- org 0
- incbin dune2.bin
- org $d54
- nop
- nop
- nop
- org $28DDE
- move.w #$D8,-(sp)
- move.w #$138,-(sp)
- moveq #$10,d0
- org $28708
- move.w #$D8,(sp)
- move.w #$138,-(sp)
- moveq #$10,d0
- org $2867C
- move.w #$D8,(sp)
- move.w #$138,-(sp)
- moveq #$10,d0
- org $1615E
- move.w #$D8,(sp)
- move.w #$138,-(sp)
- moveq #$10,d0
- org $28DD6
- bra.s $28DDE
- org $28620
- nop
- nop
- nop
- org $6522
- subi.w #$48,d4
- org $652C
- addi.w #$80,d4
- org $660A
- subi.w #$42,d5
- org $6614
- addi.w #$4C,d5
- org $6FFC
- nop
- nop
- nop
- org $6e36
- nop
- org $6ec6
- bra.w $6EE4
- org $6e3c
- bra.s $6E46
- org $6e4a
- nop
- org $6eec
- nop
- nop
- org $6F90
- nop
- nop
- org $706A
- ; bra.w $71F6
- org $7088
- bra.w $7128
- org $713C
- bra.w $71F6
- org $707A
- cmpi.w #$18,d0
- blt.s $708C
- cmpi.w #$128,d0
- org $708C
- subi.w #$18,d0
- blt.s $7096
- subi.w #$128,d0
- org $712E
- cmpi.w #$18,d0
- blt.s $7140
- cmpi.w #$c8,d0
- org $7140
- subi.w #$18,d0
- bra.s $714A
- subi.w #$c8,d0
- org $7098
- asr.l #1,d0
- org $714c
- asr.l #1,d0
- org $EC4
- bne.w joy_drv_sub
- org $ED4
- bra.w $EE2
- org $F36
- or.b ($FFFFE41C).w,d0
- move.b d0,1(a1)
- and.b d2,d0
- move.b d0,(a1)
- move.l (sp)+,d2
- rts
- joy_drv_sub:
- move.l ($FFFFE422).w,d0
- beq.s locret_F52
- movea.l d0,a0
- jsr (a0)
- move.l d0,($FFFFE41A).w
- locret_F52:
- rts
- org $1856
- clr.l ($FFFFF800).w
- jsr mouse_read.w
- movem.l (sp)+,d0-a6
- rte
- ; ---------------------------------------------------------------------------
- org $2460
- mouse_read:
- ; halt z80
- move.w #$100,($A11100).l
- move.w #$100,($A11200).l
- wait_z80:
- btst #0,($A11100).l
- bne.s wait_z80
- movea.l #$A10005,a0
- move.b #$60,6(a0) ; set port direction for TLH
- nop
- nop
- move.b #$60,(a0) ; set port for TLH
- nop
- nop
- wait_hs0:
- btst #4,(a0)
- beq.s wait_hs0
- move.w #254,d1 ; # retries
- ; get header
- moveq #1,d2 ; two bytes (four nibbles) in header
- bsr.w do_tlh
- ; check header
- cmpi.w #$0BFF,d0 ; check for mouse
- bne.w mouse_err
- ; get mouse packet
- moveq #2,d2 ; three bytes (six nibbles) in packet
- bsr.w do_tlh
- move.b #$60,(a0) ; TLH done
- move.w #0,($A11100).l ; release z80
- ; process mouse packet
- ; d0 = YO XO YS XS S M R L X7 X6 X5 X4 X3 X2 X1 X0 Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0
- btst #23,d0 ; YO
- beq.s chkys ; no overflow
- move.w #$0100,d2
- btst #21,d0 ; YS
- beq.s calcy ; positive
- neg.w d2
- bra.s calcy
- chkys:
- moveq #0,d2
- move.b d0,d2
- btst #21,d0 ; YS
- beq.s calcy ; positive
- or.w #$FF00,d2 ; sign-extend Y
- tst.b d2
- bne.s calcy
- seq d2 ; handle -0 case
- calcy:
- asr.w #1,d2
- move.w ($FFFFBF14).w,d1 ; screen Y coord
- sub.w d2,d1
- cmpi.w #$D0,d1
- ble.s chkymin
- move.w #$D0,d1
- chkymin:
- cmpi.w #$10,d1
- bge.s updsy
- move.w #$10,d1
- updsy:
- move.w d1,($FFFFBF14).w ; update Y coord
- btst #22,d0 ; XO
- beq.s chkxs ; no overflow
- move.w #$0100,d0
- btst #20,d0 ; XS
- beq.s calcx ; positive
- neg.w d0
- bra.s calcx
- chkxs:
- lsr.w #8,d0
- btst #20,d0 ; XS
- beq.s calcx ; positive
- or.w #$FF00,d0 ; sign-extend X
- tst.b d0
- bne.s calcx
- seq d0 ; handle -0 case
- calcx:
- asr.w #1,d0
- move.w ($FFFFBF12).w,d1 ; screen X coord
- add.w d0,d1
- cmpi.w #$130,d1
- ble.s chkxmin
- move.w #$130,d1
- chkxmin:
- cmpi.w #$10,d1
- bge.s updsx
- move.w #$10,d1
- updsx:
- move.w d1,($FFFFBF12).w ; update X coord
- clr.b d1
- btst #16,d0 ; LMB
- beq.s chkrmb
- bset #6,d1
- chkrmb:
- btst #17,d0 ; RMB
- beq.s do_btns
- bset #4,d1
- do_btns:
- move.b d1,d0
- move.b ($FFFFE41C).w,d1 ; save current button state
- move.b d0,($FFFFE41C).w ; set current button state
- eor.b d0,d1
- move.b d1,($FFFFE41D).w ; change in button state
- rts
- do_tlh:
- move.b (a0),d0
- move.b #$20,(a0) ; next phase
- lsl.b #4,d0
- lsl.l #4,d0 ; save nibble
- wait_hs1:
- btst #4,(a0)
- bne.s pkt_phase2
- dbra d1,wait_hs1
- addq.l #4,sp ; pop return address
- bra.s mouse_err
- pkt_phase2:
- move.b (a0),d0
- move.b #0,(a0) ; next phase
- lsl.b #4,d0
- lsl.l #4,d0 ; save nibble
- wait_hs2:
- btst #4,(a0)
- beq.s pkt_chklp
- dbra d1,wait_hs2
- addq.l #4,sp ; pop return address
- bra.s mouse_err
- pkt_chklp:
- dbra d2,do_tlh
- lsr.l #8,d0
- rts
- ; ---------------------------------------------------------------------------
- mouse_err:
- move.b #$60,(a0) ; TLH done
- move.w #0,($A11100).l ; release z80
- moveq #-1,d0
- rts
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement