home *** CD-ROM | disk | FTP | other *** search
/ Antic Magazine 1985 November / Antic_Magazine_1985_11_Antic.atr / fastmove.m65 < prev    next >
Text File  |  2023-02-26  |  7KB  |  1 lines

  1. 10 ; FAST MOVES, LISTING 2¢20 ; BY PATRICK DELL'ERA¢30 ; (c) 1985, ANTIC PUBLISHING¢40 ;¢0100 ; EQUATES¢0110 ;¢0120 RUNAD = $02E0   ;Auto run addr¢0130 MEMLO = $02E7   ;Lower limit of¢0140 ;               ; free memory¢0150 DOSVEC = $0A    ;Addr jumped to¢0160 ;               ; when DOS called¢0170 DOSINI = $0C    ;Initialization¢0180 ;               ; addr for DOS¢0190 VVBLKD = $0224  ;dlyd vbi vctr¢0200 SETVBV = $E45C  ;set vbi¢0210 VKEYBD = $0208  ;Keyboard vctr¢0220 SKSTAT = $D20F  ;Keyboard status¢0230 KBCODE = $D209  ;Pokey rgstr¢0240 CH  =   $02FC   ;Current key--¢0250 ;               ; KBCODE shadow¢0260 CH1 =   $02F2   ;Previous key¢0270 ATTRACT = $4D   ;Atct mode flag¢0280 SRTIMR = $022B  ;Auto-Repeat tmr¢0290 UP  =   $8E     ;Hardware codes¢0300 DOWN =  $8F     ; for key¢0310 LEFT =  $86     ; pressed¢0320 RIGHT = $87     ;¢0330 DUMMY = $FF     ;Variable byte¢0340 ADDR =  $FFFF   ;Variable word¢0350 ;¢0380 ;¢0390     *=  $1D7C   ;End of resident¢0420 ;¢0430 ;¢0440 DBOUNCE .BYTE 1¢0450 FASTFLG .BYTE $FF¢0460 TABLE¢0470     .BYTE UP,DOWN,LEFT,RIGHT¢0480 FAST.MOVES¢0490     TXA         ;OS has already¢0500     PHA         ; saved reg A,¢0510 ;               ; we also save X¢0520     LDA KBCODE  ;Get key pressed¢0530     LDX #4      ;Then search¢0540 ;               ; TABLE for a¢0550 ;               ; match¢0560 SEARCH¢0570     DEX ¢0580     STX FASTFLG ;Save index into¢0590 ;               ; TABLE¢0600     BMI NONE    ;End of table...¢0610     CMP TABLE,X ;Found a match?¢0620     BNE SEARCH  ;No,keep looking¢0630     STA CH1     ;Key is a cursor¢0640     STA CH      ; control, so¢0650     LDA #$0F    ; update current¢0660     STA DBOUNCE ; and previous¢0670     STA ATTRACT ; key pressed,¢0680     PLA         ; set our delay¢0690     TAX         ; timer, reset¢0700     PLA         ; attract mode¢0710     RTI         ; and go back¢0720 NONE¢0730     PLA         ;No matches so¢0740     TAX         ; let OS have key¢0750 VKEYBD.SAVE = *+1¢0760     JMP ADDR    ;Addr is modi-¢0770 ;               ; fied by INIT¢0780 ;               ; to point to¢0790 ;               ; OS's handler¢0800 ;¢0810 ;¢0820 ;The addr for REINIT is stored¢0830 ;in DOSINI.  SYSTEM RESET will¢0840 ;come through here and then¢0850 ;through INIT2 to re-establish¢0860 ;Fast Moves.¢0870 ;¢0880 REINIT¢0890     JSR ADDR    ;Address is¢0900 ;               ; changed to¢0910 ;               ; DOSINI vector¢0920 ;               ; by INIT¢0930 ;¢0940 ;After returning from the¢0950 ;DOS initialization, we have to¢0960 ;re-establish the vectors in¢0970 ;DOSINI, and DOSVEC. In this way¢0980 ;we make Fast Moves "persistent".¢0990 ;¢1000 INIT2¢1010     LDA # <REINIT¢1020     STA DOSINI¢1030     LDA # >REINIT¢1040     STA DOSINI+1¢1050     LDA # <CALL.DOS¢1060     STA DOSVEC¢1070     LDA # >CALL.DOS¢1080     STA DOSVEC+1¢1090 ;¢1100 ;Move lo mem up to create safe¢1110 ;place for Fast Moves.¢1120 ;¢1130     LDA # <FINIS¢1140     STA MEMLO¢1150     LDA # >FINIS¢1160     STA MEMLO+1¢1170 ;¢1180 ;Insert Fast Moves into the¢1190 ;keyboard service routines.¢1200 ;¢1210     LDA # <FAST.MOVES¢1220     STA VKEYBD¢1230     LDA # >FAST.MOVES¢1240     STA VKEYBD+1¢1250 ;¢1260 ;Install our vertical blank¢1270 ;routine the safe way, through¢1280 ;the OS routine for setting¢1290 ;vertical blank routines!¢1300 ;¢1310     LDA #7¢1320     LDX # >VBLANK¢1330     LDY # <VBLANK¢1340     JMP SETVBV¢1350 ;¢1360 ;Any call to DOS will vector¢1370 ;through here.¢1380 ;¢1390 CALL.DOS¢1400 ;¢1410 ;Fisrt, replace the OS keyboard¢1420 ;routine.¢1430 ;¢1440     LDA #DUMMY  ;This value is¢1450 ;               ; is set by INIT¢1460 VKEYBD.L = *-1¢1470     STA VKEYBD¢1480     LDA #DUMMY  ;So is this one!¢1490 VKEYBD.H = *-1¢1500     STA VKEYBD+1¢1510 ;¢1520 ;Then, re-establish the original¢1530 ;vertical blank routine.¢1540 ;¢1550     LDA #7¢1560     LDX VBLANK.1+2¢1570     LDY VBLANK.1+1¢1580     JSR SETVBV¢1590 ;¢1600 ;Then DOS initialization and¢1601 ;start addresses.¢1610 ;¢1620 DOSREINI¢1630 DOS1 =  *+1¢1640     LDA #DUMMY  ;Dummy values¢1650     STA DOSINI  ; are changed by¢1660 DOS2 =  *+1¢1670     LDA #DUMMY  ; INIT to¢1680     STA DOSINI+1 ; restore¢1685 DOS3 =  *+1¢1690     LDA #DUMMY  ; DOSINI and¢1700     STA DOSVEC  ; DOSVEC¢1705 DOS4 =  *+1¢1710     LDA #DUMMY  ;¢1720     STA DOSVEC+1¢1730 ;¢1740 ;Now we can go safely to DOS.¢1750 ;¢1760 DO.DOS.V¢1770     JMP ADDR    ;Addr changed by¢1780 ;               ; INIT to show¢1790 ;               ; DOSVEC¢1800 ;¢1810 ;Vertical Blank Interrupts¢1820 ;vector through here.  We check¢1830 ;to see if a key is being held¢1840 ;down. If so, then we determine¢1850 ;if it is a cursor control key.¢1860 ;If so, then we make it repeat¢1870 ;more quickly than OS does.¢1880 ;¢1890 VBLANK¢1900     LDA DBOUNCE ;Debounce logic¢1910 ;               ; in use?¢1920     BEQ VBLANK.3 ;No, make next¢1930 ;                ; test¢1940     DEC DBOUNCE ;Yes, subtract 1¢1950 ;               ; from timer¢1960     BNE VBLANK.1 ;If DBOUNCE<>0,¢1970 ;                ; all done¢1980 VBLANK.3¢1990     LDA FASTFLG ;Equals $FF if¢2000     BMI VBLANK.1 ; not cursor ctl¢2010     LDA SKSTAT  ;Bit 3 is on if¢2020     AND #4      ; key is still¢2030     BNE VBLANK.1 ; held down¢2040     LDA #6      ;If timer has¢2050     CMP SRTIMR  ; already been¢2060 ;               ; set with 6¢2070 ;               ; (Fast Moves'¢2080     BCS VBLANK.2 ; speed),branch¢2090     STA SRTIMR  ;Else, set timer¢2100 VBLANK.2¢2110     DEC SRTIMR  ;Subtract 1¢2120 VBLANK.1¢2130     JMP ADDR    ;Addr is changed¢2140 ;               ; to OS's VBI¢2150 ;               ; routine by INIT¢2160 ;¢2170 ;FINIS marks the end of pro-¢2180 ;tected memory.¢2190 ;¢2200 FINIS¢2210 ;¢2220 ;DOS jumps here after auto load-¢2230 ;loading Fast Moves. Several¢2240 ;addresses within Fast Moves are¢2250 ;modified. This routine is not¢2260 ;protected as it is needed only¢2270 ;once.¢2280 ;¢2290 INIT¢2300     LDA DOSVEC  ;Save DOS vector¢2310     STA DO.DOS.V+1¢2320     STA DOS3¢2330     LDA DOSVEC+1¢2340     STA DO.DOS.V+2¢2350     STA DOS4¢2360 ;¢2370     LDA DOSINI  ;Save DOS initi-¢2380     STA REINIT+1 ; alization¢2390     STA DOS1    ; vector¢2400     LDA DOSINI+1¢2410     STA REINIT+2¢2420     STA DOS2¢2430 ;¢2440     LDA VKEYBD  ;Save keyboard¢2450     STA VKEYBD.SAVE ; handler¢2460     STA VKEYBD.L ;    vector¢2470     LDA VKEYBD+1¢2480     STA VKEYBD.SAVE+1¢2490     STA VKEYBD.H¢2500 ;¢2510     LDA VVBLKD  ;Save VBI¢2520     STA VBLANK.1+1 ; routine¢2530     LDA VVBLKD+1 ;   vector¢2540     STA VBLANK.1+2¢2550 ;¢2560     JMP INIT2   ;Continue initi-¢2570 ;               ; alization¢2580 ;Autorun¢2590 ;¢2600     *=  RUNAD¢2610     .WORD INIT¢2620 ;¢2630     .END ¢