gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
gbdk-lib/libc/targets/mos6502/nes/delay.s
1 .include "global.s"
2
3 .title "Delay"
4 .module delay
5
6 .area _HOME
7 .bndry 0x20
8
9 ;
10 ; NTSC: Delay 1,789,773 / 1000 ~= 1790 cycles -> Y = #252 (24 cycles code cost)
11 ; Dendy: Delay 1,773,448 / 1000 ~= 1773 cycles -> Y = #250 (22 cycles code cost)
12 ; PAL: Delay 1,662,607 / 1000 ~= 1663 cycles -> Y = #234 (25 cycles code cost)
13 ;
14 __delay_1ms::
15 .delay_1ms::
16 bit *__SYSTEM
17 bmi .delay_1ms_dendy
18 bvs .delay_1ms_pal
19 .delay_1ms_ntsc:
20 ldy #252
21 bne .delay_1ms_loop
22 .delay_1ms_pal:
23 ldy #234
24 bne .delay_1ms_loop
25 .delay_1ms_dendy:
26 ldy #250
27 bne .delay_1ms_loop
28
29 .delay_1ms_loop:
30 nop
31 dey
32 bne .delay_1ms_loop
33 rts
34
35 ;
36 ; Delay AX milliseconds
37 ;
38 ; Entry conditions
39 ; AX = number of milliseconds to delay (1 to 65535)
40 ;
41 ; Registers used: A, X, Y
42 ;
43 ; Single iteration with X = 0 takes 6 + .delay_1ms + 2 + 2 + 2 + 2 + 3 + 6 = .delay_1ms + 23 cycles
44 ; = (((.delay_1ms + 7) * A - 1) + 9) * X + 12
45 ;
46 _delay::
47 .delay::
48 1$:
49 2$:
50 jsr .delay_1ms
51 sec
52 sbc #1
53 bcs 2$
54 cpx #0
55 beq 3$
56 dex
57 jmp 1$
58 3$:
59 rts
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.