[Fixed] WEEKDAY in MENU is wrong when starting using x16emu -rtc

This is the starting place for reporting bugs to the team. We will pass bug reports on to the developers after validating the reports.

You can report bugs in hardware, operating system (KERNAL or BASIC ROMs), the emulator, or the Demo library. For bugs specific to downloaded programs, use the download forum.
Post Reply
mobluse
Posts: 175
Joined: Tue Aug 04, 2020 2:16 pm
Location: Lund, Sweden
Contact:

[Fixed] WEEKDAY in MENU is wrong when starting using x16emu -rtc

Post by mobluse »

I use a recent ROM (GIT FF7F09C1) with R42 of the emulator on Raspberry Pi 4 (x16emu_linux-aarch64-r42).
I started the emulator using:
./x16emu -rom ../rom.bin -rtc -echo
I use the command MENU and navigate to TIME AND DATE and then everything is right except WEEKDAY which is Monday even though it is Saturday.
2023-05-13-193356_640x480_scrot.png
2023-05-13-193356_640x480_scrot.png (9.3 KiB) Viewed 5856 times
This is a separate issue:
I saved the settings from MENU (I only changed KEYMAP "EN-GB") and then did LOAD AUTOBOOT.X16 and LIST. It contains POKE for the same address twice with different values and that I don't understand the point of since the latter overwrites the first:

Code: Select all

0 COLOR$01,$06
1 SCREEN$00
2 POKE$9F29,$21
3 POKE$9F2A,$80
4 POKE$9F2B,$80
5 POKE$9F2C,$00
6 POKE$9F25,$02
7 POKE$9F29,$00
8 POKE$9F2A,$A0
9 POKE$9F2B,$00
10 POKE$9F2C,$F0
11 POKE$9F25,$00
12 KEYMAP"EN-GB"::::
13 NEW
This is perhaps a bug.
X16&C64 Quiz: Try It Now! Huge Char Demo: Try It Now! DECPS: Try It Now! Aritm: Try It Now!
DragWx
Posts: 345
Joined: Tue Mar 07, 2023 9:07 pm

Re: WEEKDAY in MENU is wrong when starting using x16emu -rtc

Post by DragWx »

I can't comment on the RTC, but I can comment on this:
mobluse wrote: Sat May 13, 2023 5:32 pm This is a separate issue:
I saved the settings from MENU (I only changed KEYMAP "EN-GB") and then did LOAD AUTOBOOT.X16 and LIST. It contains POKE for the same address twice with different values and that I don't understand the point of since the latter overwrites the first:

Code: Select all

0 COLOR$01,$06
1 SCREEN$00
2 POKE$9F29,$21
3 POKE$9F2A,$80
4 POKE$9F2B,$80
5 POKE$9F2C,$00
6 POKE$9F25,$02
7 POKE$9F29,$00
8 POKE$9F2A,$A0
9 POKE$9F2B,$00
10 POKE$9F2C,$F0
11 POKE$9F25,$00
12 KEYMAP"EN-GB"::::
13 NEW
This is perhaps a bug.
Addresses $9F29..$9F2C on the VERA are special because they're kinda like "bankswitched" registers: you use bits 1..5 of $9F25 (a.k.a. "DCSEL") to select which "page" of 4 registers show up at those addresses. (For reference, you also use bit 0 of $9F25 (a.k.a. "ADDRSEL") to select which of the two address registers you're modifying with $9F20..$9F22.)

The code above first assumes DCSEL is set to 0, so $9F29..$9F2C refers to video control, h-scale, v-scale, and border color. It sets those settings, then it sets DCSEL to 1 by writing $02 to $9F25, so now $9F29..$9F2C refers to h-start, h-stop, v-start, and v-stop. After setting those settings, it then sets DCSEL back to 0, sets the keyboard mapping, and starts a new BASIC program.
TomXP411
Posts: 1785
Joined: Tue May 19, 2020 8:49 pm

Re: WEEKDAY in MENU is wrong when starting using x16emu -rtc

Post by TomXP411 »

Yup.
$9f20-$9f22 are the address vectors for VERA. 20 and 21 are the lower 16 bits, and the low bit of 22 is bit 17. This allows for 128KB of RAM.

The next 6 bits of $9F22 are "DCSEL", which selects alternate modes for $9F29-9F2C. So when you see a write to $9f25, that is switching the context of those four registers.

It's all documented in the VERA PRG, here:

https://github.com/X16Community/x16-doc ... ference.md
TomXP411
Posts: 1785
Joined: Tue May 19, 2020 8:49 pm

Re: WEEKDAY in MENU is wrong when starting using x16emu -rtc

Post by TomXP411 »

And yes - the day of the week is incorrect in the MENU program on the emulator. I'm not sure if the RTC on the X16 dev board actually tracks the day of the week; I'll ask someone that has hardware about that.
mobluse
Posts: 175
Joined: Tue Aug 04, 2020 2:16 pm
Location: Lund, Sweden
Contact:

Re: WEEKDAY in MENU is wrong when starting using x16emu -rtc

Post by mobluse »

It says on https://github.com/X16Community/x16-doc ... time-clock that the RTC is Microchip MCP7940N and on https://www.microchip.com/en-us/product/MCP7940N it says it supports "Day of Week".

I didn't know VERA was controlled by ordinary POKE, I believed it only used VPOKE, because so far I only used VPOKE to control VERA: e.g. in my program DECPS Player that uses PSG.
X16&C64 Quiz: Try It Now! Huge Char Demo: Try It Now! DECPS: Try It Now! Aritm: Try It Now!
DragWx
Posts: 345
Joined: Tue Mar 07, 2023 9:07 pm

Re: WEEKDAY in MENU is wrong when starting using x16emu -rtc

Post by DragWx »

mobluse wrote: Sun May 14, 2023 11:02 am I didn't know VERA was controlled by ordinary POKE, I believed it only used VPOKE, because so far I only used VPOKE to control VERA: e.g. in my program DECPS Player that uses PSG.
VPOKE is how you access the VERA's internal VRAM, which is where all of the tiles, tilemaps, bitmaps, sprites, palette, and the memory-mapped registers for the PSG are. The VERA also has several control registers (such as scrolling, base addresses for tiles, video mode, and everything related to the PCM channel) that aren't part of its internal VRAM, which you'd need to use POKE for (if there aren't already BASIC commands for those settings, that is).
TomXP411
Posts: 1785
Joined: Tue May 19, 2020 8:49 pm

Re: WEEKDAY in MENU is wrong when starting using x16emu -rtc

Post by TomXP411 »

mobluse wrote: Sun May 14, 2023 11:02 am It says on https://github.com/X16Community/x16-doc ... time-clock that the RTC is Microchip MCP7940N and on https://www.microchip.com/en-us/product/MCP7940N it says it supports "Day of Week".

I didn't know VERA was controlled by ordinary POKE, I believed it only used VPOKE, because so far I only used VPOKE to control VERA: e.g. in my program DECPS Player that uses PSG.
VPOKE is just a special case of the POKE command.

The POKE command writes an address + data to the system bus.

VPOKE actually does 4 separate POKEs, in order: it writes the 3 bytes of the VERA address vector, then writes the VERA data value.

You can actually do the same thing VPOKE does by writing directly to $9F20-$9F22.
$9F20-$9F21 is the base address, low byte first, and $9f22 is the bank number. And as an added bonus, you can write an offset value to the high nibble and actually write repeated values to VRAM using the regular poke command.

So consider this:
100 POKE $9F20,$00
110 POKE $9F21,$B0
120 POKE $9F22,$01
130 POKE $9F23,$D3

This is the same thing as writing
100 VPOKE $1, $9F20, $D3

While that doesn't seem particularly useful, you can do stuff like this:

10 VPOKE $11,$B000,0
20 POKE $9F23,$01
30 FOR I=2 TO 128*59
40 POKE $9F23,$0
50 POKE $9F23,$01
60 NEXT

Since the auto-increment registers is actually the top nibble of the same address as the bank register, you can use bank $11 to cause the system to always advance the read/write address when the data port is accessed. So repeating $9F23 over and over again will fill the screen with data.
TomXP411
Posts: 1785
Joined: Tue May 19, 2020 8:49 pm

Re: WEEKDAY in MENU is wrong when starting using x16emu -rtc

Post by TomXP411 »

This is fixed in R43
Post Reply