* *``````````````````````````````* * DELAYMS :: DELAY X MILLISECS * *- -* * DELAYS FOR X NUMBER OF * * MILLISECONDS BY LOOPING * * THROUGH PRECISELY CALCULATED * * NUMBER OF CYCLES. * *- -* * CLOBBERS: * * * * FLAGS: ????---- REG: -XY- * *- -* * CYCLES: ??? * * SIZE: * *- -* * USAGE: * * * * LDY #250 ;1/4 SEC * * JSR DELAYMS * *- -* * ENTRY * * * * Y = NUMBER OF MILLISECONDS * *- -* * EXIT * * * * Y = COUNTER; TRASH * * X = COUNTER; TRASH * * A = UNCHANGED * *- -* * ADAPTED FROM LEVANTHAL AND * * WINTHROP'S /6502 ASSEMBLY * * LANGUAGE ROUTINES/. * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * DELAYMS * MSCNT EQU $0CA ; 202 TIMES THROUGH DELAY1 ; SPECIFIC TO 1.23 MHZ ; SPEED OF APPLE II :DELAY CPY #0 ; 2 CYCLES BEQ :EXIT ; 2C (EXIT IF DEL=0) NOP ; 2 CYCLES (MAKE OVERHEAD=25C) * ** IF DELAY IS 1MS THEN GOTO LAST1 ** THIS LOGIC IS DESIGNED TO BE ** 5 CYCLES THROUGH EITHER ATH * CPY #1 ; 2 CYCLES BNE :DELAYA ; 3C IF TAKEN, ELSE 2C JMP :LAST1 ; 3C * ** DELAY 1 MILLISENCOND TIMES (Y-1) * :DELAYA DEY ; 2C (PREDEC Y) :DELAY0 LDX #MSCNT ; 2C :DELAY1 DEX ; 2C BNE :DELAY1 ; 3C NOP ; 2C NOP ; 2C DEY ; 2C BNE :DELAY0 ; 3C :LAST1 * ** DELAY THE LAST TIME 25 CYCLES ** LESS TO TAKE THE CALL, RETURN, ** AND ROUTINE OVERHEAD INTO ** ACCOUNT. * LDX #MSCNT-3 ; 2C :DELAY2 DEX ; 2C BNE :DELAY2 ; 3C :EXIT RTS ; 6C *