git.y1.nz

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.