;[BEGIN] CMOUSE EQU #1B DMOUSE EQU #1A VSIZEX EQU 320 VSIZEY EQU 256 X EQU #EE W EQU #EF N EQU #FF ; MOUSE SOFTWARE SPECIFICATION ;--------------------------------------------- ; COMMAND 00h (INITIALIZATION) ; ; RETURN: NC - MOUSE PRESENT ; C - MOUSE ABSENT ;--------------------------------------------- ; COMMAND 01h (SHOW MOUSE CURSOR) ; ; RETURN: NC - DONE ; C - MOUSE ON SCREEN ;--------------------------------------------- ; COMMAND 02h (HIDE MOUSE CURSOR) ; ; RETURN: NC - DONE ; C - NONE MOUSE ;--------------------------------------------- ; COMMAND 03h (READ MOUSE STATE) ; ; RETURN: HL - X COORD ; DE - Y COORD ; A - BUTTONS D2-D0 (MIDDLE,RIGHT,LEFT) ;--------------------------------------------- ; COMMAND 04h (GOTO MOUSE CURSOR) ; ; INPUT: HL - X COORD ; DE - Y COORD ;--------------------------------------------- ; COMMAND 05h (GET CLICK FROM BUFFER) ; ; RETURN: NC - BUFFER EMPTY ; C - CLICK ; HL - X COORD ; DE - Y COORD ; A - BUTTONS ;--------------------------------------------- ; COMMAND 06h (SELECT CURSOR) ; ; INPUT: A - CURSOR NUMBER ;--------------------------------------------- ; ERRORS: 0 - NO ERROR ; 1 - COMMAND NOT PRESENT ; 2 - DEVICE ABSENT ; 3 - CURSOR ON (UZHE) ; 4 - CURSOR OFF (UZHE) INTMOUS INC C DEC C JP Z,MS_INIT DEC C JP Z,MS_SHOW DEC C JP Z,MS_HIDD DEC C JP Z,MS_READ DEC C JP Z,MS_GOTO DEC C JP Z,MS_CLIK DEC C JP Z,MS_CURS LD A,1 SCF RET MS_INIT DI LD A,85 OUT (#10),A LD A,45 OUT (#10),A LD A,0 OUT (CMOUSE),A LD A,1 OUT (CMOUSE),A LD A,0 OUT (CMOUSE),A LD A,3 OUT (CMOUSE),A LD A,#41 OUT (CMOUSE),A LD A,4 OUT (CMOUSE),A LD A,#47 OUT (CMOUSE),A LD A,5 OUT (CMOUSE),A LD A,#60 OUT (CMOUSE),A EI XOR A RET MS_SHOW PUSH IX PUSH HL PUSH DE EX AF,AF' PUSH AF LD HL,(PIX_X) LD DE,(PIX_Y) DI CALL MOUSE XOR A LD (REFRESH+1),A EI POP AF EX AF,AF' POP DE POP HL POP IX XOR A RET MS_HIDD PUSH IX PUSH HL PUSH DE EX AF,AF' PUSH AF DI LD A,1 LD (REFRESH+1),A CALL RESTORE EI POP AF EX AF,AF' POP DE POP HL POP IX XOR A RET MS_READ LD HL,(PIX_X) LD DE,(PIX_Y) LD A,(MB) AND A RET MS_GOTO PUSH IX PUSH HL PUSH DE LD (PIX_X),HL LD (PIX_Y),DE EX AF,AF' PUSH AF DI CALL REFRESH EI POP AF EX AF,AF' POP DE POP HL POP IX XOR A RET MS_CLIK CALL GCLICK LD H,B LD L,C RET MS_CURS LD HL,MS_BMP INC A LD D,H LD E,L LD BC,140 MS_CUR2 ADD HL,BC DEC A JP NZ,MS_CUR2 DI LDIR EI XOR A RET RESTORE IN A,(PAGE1) LD B,A IN A,(Y_PORT) LD C,A PUSH BC LD A,#50 OUT (PAGE1),A REST_X LD HL,0 REST_Y LD DE,0 REST_H LD BC,0 LD A,E EX AF,AF' LD DE,#4040 ADD HL,DE LD XH,14 EX AF,AF' RS002 LD BC,10 OUT (Y_PORT),A EX AF,AF' PUSH HL LD D,H LD E,L LDIR POP HL DEC XH JR Z,RS003 EX AF,AF' INC A JP NZ,RS002 RS003 POP BC LD A,B OUT (PAGE1),A LD A,C OUT (Y_PORT),A XOR A RET ;HL/DE - X/Y ; B - WIDTH ; C - HEIGHT MOUSE LD (REST_X+1),HL LD (REST_Y+1),DE LD (REST_H+1),BC PUSH HL IN A,(PAGE1) LD H,A IN A,(Y_PORT) LD L,A EX (SP),HL LD A,#5C OUT (PAGE1),A LD A,E EX AF,AF' LD DE,#4040 ADD HL,DE LD DE,MS_BMP EX DE,HL LD XH,14 EX AF,AF' MS002 LD BC,10 OUT (Y_PORT),A EX AF,AF' MS001 PUSH DE LDIR POP DE MS004 DEC XH JR Z,MS003 EX AF,AF' INC A JP NZ,MS002 MS003 POP BC LD A,B OUT (PAGE1),A LD A,C OUT (Y_PORT),A XOR A RET READ_M IN A,(CMOUSE) RRCA RET NC IN A,(DMOUSE) LD L,A BIT 6,A CCF RET Z TST_01 IN A,(CMOUSE) RRCA JP NC,TST_01 IN A,(DMOUSE) LD E,A BIT 6,A CCF RET NZ TST_02 IN A,(CMOUSE) RRCA JP NC,TST_02 IN A,(DMOUSE) LD D,A BIT 6,A CCF RET NZ LD A,E AND #3F LD E,A LD A,L AND #03 RRCA RRCA OR E LD E,A LD A,D AND #3F LD D,A LD A,L AND #0C RRCA RRCA RRCA RRCA OR D LD D,A LD A,L RLCA RLCA RLCA RES 6,A JR NC,STBU SET 6,A STBU RLCA RLCA AND #03 LD (MB),A LD A,E LD (MX),A LD A,D LD (MY),A SCF RET MCORECT LD HL,(PIX_X) LD DE,(MX) LD D,0 BIT 7,E JP NZ,DECX ADD HL,DE LD (PIX_X),HL EX DE,HL LD HL,VSIZEX-1 AND A SBC HL,DE JP NC,YCOO LD HL,VSIZEX-1 LD (PIX_X),HL JP YCOO DECX LD A,E NEG LD E,A AND A SBC HL,DE LD (PIX_X),HL JP NC,YCOO LD HL,0 LD (PIX_X),HL YCOO LD HL,(PIX_Y) LD DE,(MY) LD D,0 BIT 7,E JP NZ,DECY ADD HL,DE LD (PIX_Y),HL EX DE,HL LD HL,VSIZEY-1 AND A SBC HL,DE RET NC LD HL,VSIZEY-1 LD (PIX_Y),HL RET DECY LD A,E NEG LD E,A AND A SBC HL,DE LD (PIX_Y),HL RET NC LD HL,0 LD (PIX_Y),HL RET INTON DI LD HL,INT_ LD (INTA*256+#FF),HL LD A,INTA LD I,A IM 2 EI RET INTOFF DI LD A,#3F LD I,A IM 1 EI RET ;Main Interrupt INT_ PUSH IY PUSH IX PUSH HL PUSH DE PUSH BC PUSH AF EX AF,AF' EXX PUSH HL PUSH DE PUSH BC PUSH AF IN A,(PAGE1) LD B,A IN A,(Y_PORT) LD C,A PUSH BC CALL REFRESH ;Refresh mouse CALL CONTROL LD A,5 ;SPECTRUM OUT (PAGE1),A ; LD A,#C0 ;INTERRUPT OUT (Y_PORT),A ; LD IY,#5C3A ;!!!!!!!!! CALL #0038 ; DI POP BC LD A,B OUT (PAGE1),A LD A,C OUT (Y_PORT),A POP AF POP BC POP DE POP HL EXX EX AF,AF' POP AF POP BC POP DE POP HL POP IX POP IY EI RETI CONTROL CALL READ_M RET NC CALL MCORECT LD A,#00 LD (REDY+1),A LD HL,MB_OLD LD A,(MB) CP (HL) RET Z LD (MB_OLD),A EX AF,AF' LD A,(CLICKS) CP 50 RET Z LD E,A ADD A,A ADD A,A ADD A,E LD E,A LD D,0 LD HL,CLICK_B ADD HL,DE LD BC,(PIX_X) LD DE,(PIX_Y) EX AF,AF' LD (HL),A INC HL LD (HL),C INC HL LD (HL),B INC HL LD (HL),E INC HL LD (HL),D LD A,(CLICKS) INC A LD (CLICKS),A RET GCLICK LD A,(CLICKS) OR A RET Z DEC A LD (CLICKS),A LD HL,CLICK_B LD A,(HL) INC HL LD C,(HL) INC HL LD B,(HL) INC HL LD E,(HL) INC HL LD D,(HL) EXX LD HL,CLICK_B-5 LD DE,CLICK_B LD BC,245 LDIR EXX SCF RET REFRESH LD A,#01 OR A RET NZ REDY LD A,#00 ; OR A ; RET NZ CALL RESTORE LD HL,(PIX_X) LD DE,(PIX_Y) CALL MOUSE LD A,#FF LD (REDY+1),A RET PIX_X DW 160 PIX_Y DW 128 MX DB #00 MY DB #00 MB DB #00 MB_OLD DB #00 CLICKS DB #00 CLICK_B DS 250 MS_BMP DS 140 CURSOR1 DB X,X,N,N,N,N,N,N,N,N DB X,W,X,N,N,N,N,N,N,N DB X,W,W,X,N,N,N,N,N,N DB X,W,W,W,X,N,N,N,N,N DB X,W,W,W,W,X,N,N,N,N DB X,W,W,W,W,W,X,N,N,N DB X,W,W,W,W,W,W,X,N,N DB X,W,W,W,W,X,X,X,X,N DB X,W,W,X,W,X,N,N,N,N DB X,W,X,X,W,W,X,N,N,N DB X,X,N,N,X,W,X,N,N,N DB X,N,N,N,X,W,W,X,N,N DB N,N,N,N,N,X,X,N,N,N DB N,N,N,N,N,N,N,N,N,N CURSOR2 DB N,N,X,X,X,X,N,N,N,N DB N,X,W,W,W,W,X,N,N,N DB X,W,N,X,X,N,N,X,N,N DB X,W,X,N,N,N,N,X,N,N DB X,W,X,N,N,N,N,X,N,N DB X,W,N,N,N,N,N,X,N,N DB N,X,N,N,N,N,X,X,N,N DB N,N,X,X,X,X,X,W,X,N DB N,N,N,N,N,N,N,X,W,X DB N,N,N,N,N,N,N,N,X,X DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N CURSOR3 DB X,N,N,N,N,N,N,N,N,N DB N,X,X,N,N,N,N,N,N,N DB N,X,W,X,X,N,N,N,N,N DB N,N,X,X,W,X,N,N,N,N DB N,N,X,W,X,W,X,N,N,N DB N,N,N,X,W,X,W,X,N,N DB N,N,N,N,X,W,X,W,X,N DB N,N,N,N,N,X,W,X,W,X DB N,N,N,N,N,N,X,W,X,N DB N,N,N,N,N,N,N,X,N,N DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N CURSOR4 DB X,N,N,N,N,N,N,N,N,N DB N,X,X,N,N,N,N,N,N,N DB N,X,W,X,X,N,N,N,N,N DB N,N,X,X,W,X,N,N,N,N DB N,N,X,W,X,W,X,N,N,N DB N,N,N,X,W,X,W,X,N,N DB N,N,N,N,X,W,X,W,X,N DB N,N,N,N,N,X,W,X,W,X DB N,N,N,N,N,N,X,W,X,N DB N,N,N,N,N,N,N,X,N,N DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N CURSOR5 DB X,X,N,N,N,N,N,N,N,N DB X,W,X,N,N,N,N,N,N,N DB X,W,W,X,N,N,N,N,N,N DB X,W,W,W,X,N,N,N,N,N DB X,W,W,W,W,X,N,N,N,N DB X,W,W,X,X,X,X,N,N,N DB X,W,X,W,X,N,N,N,N,N DB X,X,N,X,W,X,N,N,N,N DB X,N,N,N,X,X,N,N,N,N DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N CURSOR6 DB X,X,N,N,N,N,N,N,N,N DB X,W,X,N,N,N,N,N,N,N DB X,W,W,X,N,N,N,N,N,N DB X,W,W,W,X,N,N,N,N,N DB X,W,W,W,W,X,N,N,N,N DB X,W,W,X,X,X,X,N,N,N DB X,W,X,W,X,N,N,N,N,N DB X,X,N,X,W,X,N,N,N,N DB X,N,N,N,X,X,N,N,N,N DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N CURSOR7 DB X,X,N,N,N,N,N,N,N,N DB X,W,X,N,N,N,N,N,N,N DB X,W,W,X,N,N,N,N,N,N DB X,W,W,W,X,N,N,N,N,N DB X,W,W,W,W,X,N,N,N,N DB X,W,W,X,X,X,X,N,N,N DB X,W,X,W,X,N,N,N,N,N DB X,X,N,X,W,X,N,N,N,N DB X,N,N,N,X,X,N,N,N,N DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N DB N,N,N,N,N,N,N,N,N,N CURSOR8 DB X,X,N,N,N,N,N,N,N,N DB X,W,X,N,N,N,N,N,N,N DB X,W,W,X,N,N,N,N,N,N DB X,W,W,W,X,N,N,N,N,N DB X,W,W,W,W,X,N,N,N,N DB X,W,W,W,W,W,X,N,N,N DB X,W,W,W,W,W,W,X,N,N DB X,W,W,W,W,X,X,X,X,N DB X,W,W,X,W,X,N,N,N,N DB X,W,X,X,W,W,X,N,N,N DB X,X,N,N,X,W,X,N,N,N DB X,N,N,N,X,W,W,X,N,N DB N,N,N,N,N,X,X,N,N,N DB N,N,N,N,N,N,N,N,N,N CURSOR9 DB X,X,X,X,X,X,X,X,X,N DB N,X,X,X,X,X,X,X,N,N DB N,X,W,W,W,W,W,X,N,N DB N,X,W,X,W,X,W,X,N,N DB N,X,W,W,X,W,W,X,N,N DB N,N,X,W,W,W,X,N,N,N DB N,N,N,X,W,X,N,N,N,N DB N,N,N,X,W,X,N,N,N,N DB N,N,X,W,W,W,X,N,N,N DB N,X,W,W,W,W,W,X,N,N DB N,X,W,W,X,W,W,X,N,N DB N,X,W,X,W,X,W,X,N,N DB N,X,X,X,X,X,X,X,N,N DB X,X,X,X,X,X,X,X,X,N