using "./x86_64-kvm.repl"

virtio_disk: Storage.VirtIOBlockDevice @ sysbus 0x40001000
    IRQ -> cpu@5

cmos: Python.PythonPeripheral @ sysbus 0xE0000070
    size: 0x2
    initable: true
    script: '''
if request.IsInit:
    RAM_SIZE = 0x20000000
    HIGH_MEM_SIZE = (RAM_SIZE - (16 << 20)) # Size of memory above 16MB
    cmos_index = 0
    cmos_fields = {
        0x34: (HIGH_MEM_SIZE >> 16) & 0xff,
        0x35: (HIGH_MEM_SIZE >> 24) & 0xff,
    }

elif request.IsRead:
    if request.Offset == 1: # Port 71
        request.Value = cmos_fields.get(cmos_index, 0)
        
elif request.IsWrite:
    if request.Offset == 0: # Port 70
        cmos_index = request.Value & 0x7f

self.NoisyLog("%s on CMOS at port 0x%x, value 0x%x" % (str(request.Type), request.Offset + 0x70, request.Value))
'''

sysbus:
    init:
        Tag <0xE0000064 1> "PS2" 0xff
