--- nono/vm/mk48t02.cpp 2026/04/29 17:04:59 1.1.1.10 +++ nono/vm/mk48t02.cpp 2026/04/29 17:05:06 1.1.1.11 @@ -18,89 +18,6 @@ // 仕様は 0x45000000 から 2KB だが、 // 0x44000000 から 0x48000000 の手前まで 2KB 単位でミラーが見える。 -// 繰り上がりについてのメモ。 -// -// PROM で以下のようにすれば確認できる。 -// >450007f8;l,80595923 -// >450007fc;l,01DDMMYY -// >450007f8;,0 -// >450007f8 -// -// 2月の日数: -// 2/30 -> 03/01 -// 2/31 -> 03/01 -// -// 月ごとの日数: -// 01/00/30 -> 01/01/01 (00月は小) -// 01/0a/30 -> 01/0a/31 (0a月は大) -// 01/0b/30 -> 01/14/01 (0b月は小) -// 01/0c/30 -> 01/0c/31 (0c月は大) -// 01/0d/30 -> 01/14/01 (0d月は小) -// 01/0e/30 -> 01/0e/31 (0e月は大) -// 01/0f/30 -> 01/18/01 (0f月は小) -// 00/13/30 -> 01/00/01 (13月は小) -// 01/14/30 -> 01/14/31 (14月は大) -// 01/15/30 -> 01/16/01 (15月は小) -// 01/16/30 -> 01/16/31 (16月は大) -// 01/17/30 -> 02/08/01 (17月は小) -// 01/18/30 -> 01/18/31 (18月は大) -// 01/19/30 -> 01/10/01 (19月は小) -// 01/1a/30 -> 01/1a/31 (1a月は大) -// 01/1b/30 -> 01/10/01 (1b月は小) -// 01/1c/30 -> 01/1c/31 (1c月は大) -// 01/1d/30 -> 01/14/01 (1d月は小) -// 01/1e/30 -> 01/1e/31 (1e月は大) -// 01/1f/30 -> 01/18/01 (1f月は小) -// -// 月の繰り上がり後 -// 01/0a/31 -> 01/0b/01 -// 01/0b/31 -> 01/14/01 -// 01/0c/31 -> 01/0d/01 -// 01/0d/31 -> 01/14/01 -// 01/0e/31 -> 01/0f/01 -// 01/0f/31 -> 01/18/01 -// 00/13/30 -> 01/00/01 +Y -// 01/14/31 -> 01/15/01 -// 01/15/31 -> 01/16/01 -// 01/16/31 -> 02/01/01 +Y -// 01/17/31 -> 02/08/01 +Y -// 01/18/31 -> 01/19/01 -// 01/19/31 -> 01/10/01 -// 01/1a/31 -> 02/09/01 +Y -// 01/1b/31 -> 01/10/01 -// 01/1c/31 -> 01/1d/01 -// 01/1d/31 -> 01/14/01 -// 01/1e/31 -> 02/09/01 +Y -// 01/1f/31 -> 01/18/01 -// -// 日の繰り上がり(一部) -// 01/01/0f -> 01/01/18 -// 01/01/3e -> 01/02/1f -// 01/01/3f -> 01/01/2f -// -// 01/0a/28 -> 01/0b/01 -// 00/0a/28 -> 00/0a/29 (閏) -// 00/0a/29 -> 00/0b/01 -// 00/0a/30 -> 00/0a/31 -// 00/0a/31 -> 00/0b/01 -// 00/0a/32 -> 00/0a/33 -// 00/0a/33 -> 00/0b/03 -// 00/0a/34 -> 00/0a/35 -// 00/0a/35 -> 00/0b/05 -// 00/0a/36 -> 00/0a/37 -// 00/0a/37 -> 00/0b/0f -// 00/0a/38 -> 00/0b/19 -// 00/0a/39 -> 00/0a/21 -// 00/0b/34 -> 00/14/05 -// 00/0c/28 -> 00/0c/29 -// 00/0c/29 -> 00/0c/30 -// 00/0c/30 -> 00/0c/31 -// 00/0c/31 -> 00/0d/01 -// 00/0c/37 -> 00/0d/0f -// 01/1a/28 -> 01/1a/29 -// -// 0a 月は閏月として判定されるようだ。bit 0?010 でマッチかな - MK48T02Device::MK48T02Device() : inherited("MK48T02") { @@ -202,7 +119,9 @@ MK48T02Device::Read(uint32 offset) data = reg.ex.sec | reg.stop; break; case 2: // 分 - data = reg.ex.min; + // 最上位ビットはデータシートでは %0 だが現物は %1 固定らしい。 + // Issue#75 + data = reg.ex.min | 0x80; break; case 3: // 時 data = reg.ex.hour | reg.kickstart; @@ -290,7 +209,8 @@ MK48T02Device::Peek(uint32 offset) case 1: // 秒 | STOP return reg.ex.sec | reg.stop; case 2: // 分 - return reg.ex.min; + // 最上位ビットはデータシートでは %0 だが現物は %1 固定らしい。 + return reg.ex.min | 0x80; case 3: // 時 return reg.ex.hour | reg.kickstart; case 4: // 曜日