WonderWitch/FreyaBIOS/Timer
From WSdev Wiki
Jump to navigationJump to search
The Timer interrupt provides an abstraction layer for the WonderSwan's timers, as well as the on-cartridge RTC.
Types
RTC fields
The RTC field indexes match the order of fields returned by the S-3511A chip. Note that the values returned by FreyaBIOS are binary numbers rather than BCD numbers - they are transparently converted when communicating with the on-cartridge RTC.
Index | Data | Format |
---|---|---|
0 | Year | 0 - 99; 0 is assumed to be the year 2000. |
1 | Month | 1 - 12 |
2 | Date (day of month) | 1 - 31 |
3 | Day of week | 0 - 6; 0 = Sunday, 1 = Monday, ..., 6 = Saturday |
4 | Hour | 0 - 23 |
5 | Minute | 0 - 59 |
6 | Second | 0 - 59 |
RTC struct
The RTC struct is a seven-byte memory structure, containing all RTC fields consecutively, taking up one unsinged byte each.
Interrupts
INT $16/AH=$00 - rtc_reset
- AH = $00
Initializes the RTC status register (all interrupts disabled, 24-hour mode enabled).
INT $16/AH=$01 - rtc_set_datetime
- AH = $01
- BX = Field
- CX = Value of field
INT $16/AH=$02 - rtc_get_datetime
- AH = $02
- BX = Field
Return:
- AX = Value of field
INT $16/AH=$03 - rtc_set_datetime_struct
- AH = $03
- DS:DX = Pointer to RTC struct
INT $16/AH=$04 - rtc_get_datetime_struct
- AH = $04
- DS:DX = Pointer to RTC struct
INT $16/AH=$05 - rtc_enable_alarm
- AH = $05
- BL = Hour
- BH = Minute
INT $16/AH=$06 - rtc_disable_alarm
- AH = $06
INT $16/AH=$07 - timer_enable
- AH = $07
- AL = Type (0 = HBlank, 1 = VBlank)
- BL = Reload mode (0 = one-shot, 1 = repeating)
- CX = Time, in lines or frames, to wait.
INT $16/AH=$08 - timer_disable
- AH = $08
- AL = Type (0 = HBlank, 1 = VBlank)
INT $16/AH=$09 - timer_get_count
- AH = $09
- AL = Type (0 = HBlank, 1 = VBlank)
Return:
- AX = The current counter value, from the time set in
timer_enable
down.