Same idea. but I added a positional mouse driverby PeteDECLARE SUB BOARDMAP (X%, Y%) DECLARE SUB KEYBOARD (B$) DECLARE SUB MDRIVER (EX%, B$) TYPE RegType AX AS INTEGER BX AS INTEGER CX AS INTEGER DX AS INTEGER BP AS INTEGER SI AS INTEGER DI AS INTEGER FLAGS AS INTEGER DS AS INTEGER ES AS INTEGER END TYPE DIM SHARED MOUSE$ DIM SHARED Registers AS RegType DIM SHARED LB%, RB%, MB%, DX%, CY% DIM SHARED LM%, TM% COLOR 7, 1: CLS LM% = 3: TM% = 3: LEVEL% = 1 LOCATE TM%, LM% FOR H = 1 TO 8 FOR J = 1 TO 2 FOR I = 1 TO 8 IF H / 2 = H \ 2 THEN IF I / 2 = I \ 2 THEN COLOR 0, 7 ELSE COLOR 7, 0 ELSE IF I / 2 = I \ 2 THEN COLOR 7, 0 ELSE COLOR 0, 7 END IF PRINT " "; NEXT I IF H = 8 AND J = 2 THEN ELSE PRINT : LOCATE , LM% NEXT J NEXT H FOR J = 1 TO 2 IF J = 1 THEN COLOR 7, 1 ELSE COLOR 0, 6: LEVEL% = 15 RESTORE SETUP X = 1 FOR I = 1 TO 8 READ A$ LOCATE TM% + LEVEL%, X + LM%: PRINT " " + A$ + " "; X = X + 5 NEXT I X = 1 FOR I = 1 TO 8 IF J = 1 THEN LOCATE TM% + LEVEL% + 2, X + LM% ELSE LOCATE TM% + LEVEL% - 2, X + LM% PRINT " P "; X = X + 5 NEXT I NEXT J REM OPTIONAL BORDER 'COLOR 7, 4: REM RED (A BIT TOO MUCH?) COLOR 7, 0 LOCATE TM% - 1, LM% - 1 PRINT CHR$(218); STRING$(40, 196); CHR$(191) LOCATE , LM% - 1 FOR I = 1 TO 17 PRINT CHR$(179) LOCATE , LM% - 1 NEXT I LOCATE TM%, LM% - 1 FOR I = 1 TO 17 LOCATE , 40 + LM% PRINT CHR$(179) NEXT I LOCATE TM% - 2 + 18, LM% - 1 PRINT CHR$(192); STRING$(40, 196); CHR$(217) REM NUMBERING LOCATE TM% + 17: COLOR 7, 1 LOCATE , LM% + 2 FOR I = 1 TO 8 PRINT LCASE$(CHR$(64 + I)) + SPACE$(4); NEXT I LOCATE TM% + 1, 40 + LM% + 2 FOR I = 1 TO 8 PRINT CHR$(57 - I); LOCATE CSRLIN + 2, 40 + LM% + 2 NEXT I LOCATE 25, 1: PRINT "Press Esc to end"; DO CALL KEYBOARD(B$) IF B$ = CHR$(27) THEN EXIT DO LOOP SYSTEM SETUP: DATA R,N,B,K,Q,B,N,R SUB BOARDMAP (X%, Y%) XX = CSRLIN: YY = POS(1) LOCATE 25, 55: PRINT "Mouse Position: "; : PRINT SPACE$(80 - POS(1)); REM MAP FORMULA IF (X% - TM%) >= 0 AND (X% - TM%) < 16 AND Y% >= LM% AND Y% - LM% < 40 THEN NUMBERY$ = LTRIM$(STR$(8 - INT((X% - TM% + 1) / 2.1))) ALPHAX$ = LCASE$(CHR$(65 + INT((Y% - LM% + 1) / 5.1))) END IF LOCATE 25, 72: PRINT ALPHAX$; " "; NUMBERY$; LOCATE XX, YY END SUB SUB KEYBOARD (B$) EX% = 1: CALL MDRIVER(EX%, B$) DO B$ = INKEY$ EX% = 2: CALL MDRIVER(EX%, B$) LOOP UNTIL B$ <> "" EX% = -1: CALL MDRIVER(EX%, B$) END SUB SUB MDRIVER (EX%, B$) STATIC MOUSEACT%, X%, Y% OLDX% = X%: OLDY% = Y% REM INITIATE MOUSE IF MOUSEACT% = 0 THEN Registers.AX = 0: GOSUB CALLI MOUSEACT% = 1 END IF IF EX% = -1 THEN REM HIDES MOUSE IF A KEY WAS PRESSED FOR NEXT MOUSE LOOP LB1 = 0 Registers.AX = 2: GOSUB CALLI EX% = 2 EXIT SUB END IF IF EX% = 1 THEN Registers.AX = 1: GOSUB CALLI Registers.AX = 3: GOSUB CALLI REM MOUSE LOCATION (USES X% AND Y% TO CONVERT TO 25 * 80 SCREEN SIZE) DX% = Registers.DX% CX% = Registers.CX% X% = DX% \ 8 + 1: Y% = CX% \ 8 + 1 IF X% <> OLDX% OR Y% <> OLDY% THEN CALL BOARDMAP(X%, Y%) REM MOUSE BUTTONS LB% = Registers.BX% AND 1 RB% = (Registers.BX% AND 2) \ 2 MB% = (Registers.BX% AND 4) \ 4 IF LB% <> 0 THEN SOUND 1000, 1: REM LEFT MOUSE CLICK REM PLACE OTHER MOUSE FEATURES HERE SUCH AS... REM END PROGRAM IF TEXT AREA IS TOUCHED. IF SCREEN(X%, Y%, 0) <> 32 THEN B$ = CHR$(27) END IF REM DELAY TO SMOOTH THINGS OUT. IF LB1 <> -1 AND LB% <> 0 THEN DO REGISTER.AX% = 3: GOSUB CALLI LB% = Registers.BX% AND 1 RB% = (Registers.BX% AND 2) \ 2 MB% = (Registers.BX% AND 4) \ 4 IF LB% = 0 THEN EXIT DO LOOP END IF EXIT SUB CALLI: CALL INTERRUPT(&H33, Registers, Registers) RETURN END SUB from IP address 68.6.85.9 |
| Response Title | Author and Date |
| Pawns do legal moves - Mouse driver. Includes En Passant. | Pete on Dec 19 |
| Needed to exchange white/black pieces. I posted a finished phase 1 here URL: | Pete on Dec 20 |