mirror of
https://github.com/gbdk-2020/gbdk-2020.git
synced 2026-02-20 00:32:21 +01:00
NES: Add delay function for compatibility (#718)
This commit is contained in:
@@ -17,6 +17,7 @@ ASSRC = f_ibm_full.s f_ibm_sh.s f_italic.s f_min.s f_spect.s \
|
||||
set_attribute.s set_bk_attributes.s set_tile_submap_attributes.s flush_attributes.s \
|
||||
nes_palettes.s \
|
||||
pad.s pad_ex.s \
|
||||
delay.s \
|
||||
rle_decompress.s \
|
||||
far_ptr.s sdcc_bcall.s mapper.s \
|
||||
lcd.s \
|
||||
|
||||
59
gbdk-lib/libc/targets/mos6502/nes/delay.s
Normal file
59
gbdk-lib/libc/targets/mos6502/nes/delay.s
Normal file
@@ -0,0 +1,59 @@
|
||||
.include "global.s"
|
||||
|
||||
.title "Delay"
|
||||
.module delay
|
||||
|
||||
.area _HOME
|
||||
.bndry 0x20
|
||||
|
||||
;
|
||||
; NTSC: Delay 1,789,773 / 1000 ~= 1790 cycles -> Y = #252 (24 cycles code cost)
|
||||
; Dendy: Delay 1,773,448 / 1000 ~= 1773 cycles -> Y = #250 (22 cycles code cost)
|
||||
; PAL: Delay 1,662,607 / 1000 ~= 1663 cycles -> Y = #234 (25 cycles code cost)
|
||||
;
|
||||
__delay_1ms::
|
||||
.delay_1ms::
|
||||
bit *__SYSTEM
|
||||
bmi .delay_1ms_dendy
|
||||
bvs .delay_1ms_pal
|
||||
.delay_1ms_ntsc:
|
||||
ldy #252
|
||||
bne .delay_1ms_loop
|
||||
.delay_1ms_pal:
|
||||
ldy #234
|
||||
bne .delay_1ms_loop
|
||||
.delay_1ms_dendy:
|
||||
ldy #250
|
||||
bne .delay_1ms_loop
|
||||
|
||||
.delay_1ms_loop:
|
||||
nop
|
||||
dey
|
||||
bne .delay_1ms_loop
|
||||
rts
|
||||
|
||||
;
|
||||
; Delay AX milliseconds
|
||||
;
|
||||
; Entry conditions
|
||||
; AX = number of milliseconds to delay (1 to 65535)
|
||||
;
|
||||
; Registers used: A, X, Y
|
||||
;
|
||||
; Single iteration with X = 0 takes 6 + .delay_1ms + 2 + 2 + 2 + 2 + 3 + 6 = .delay_1ms + 23 cycles
|
||||
; = (((.delay_1ms + 7) * A - 1) + 9) * X + 12
|
||||
;
|
||||
_delay::
|
||||
.delay::
|
||||
1$:
|
||||
2$:
|
||||
jsr .delay_1ms
|
||||
sec
|
||||
sbc #1
|
||||
bcs 2$
|
||||
cpx #0
|
||||
beq 3$
|
||||
dex
|
||||
jmp 1$
|
||||
3$:
|
||||
rts
|
||||
Reference in New Issue
Block a user