109 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| //
 | |
| // Copyright (c) 2010 - 2019 Antmicro
 | |
| //
 | |
| // This file is licensed under the MIT License.
 | |
| // Full license text is available in 'licenses/MIT.txt'.
 | |
| //
 | |
| 
 | |
| using System;
 | |
| using System.Linq;
 | |
| using Antmicro.Renode.Backends.Display;
 | |
| using Antmicro.Renode.Core;
 | |
| using Antmicro.Renode.Core.Structure.Registers;
 | |
| using Antmicro.Renode.Logging;
 | |
| using Antmicro.Renode.Peripherals.Bus;
 | |
| using Antmicro.Renode.Peripherals.Memory;
 | |
| using Antmicro.Renode.Utilities;
 | |
| 
 | |
| namespace Antmicro.Renode.Peripherals.Input
 | |
| {
 | |
|     public class betrusted_kbd : IKeyboard, IDoubleWordPeripheral, IProvidesRegisterCollection<DoubleWordRegisterCollection>, IKnownSize
 | |
|     {
 | |
|         public betrusted_kbd(Machine machine) : base(machine)
 | |
|         {
 | |
|             this.machine = machine;
 | |
| 
 | |
|             RegistersCollection = new DoubleWordRegisterCollection(this);
 | |
|             for (int i = 0; i < buffer.Length; i++) buffer[i] = 0;
 | |
|             // DefineRegisters();
 | |
|             Reset();
 | |
|         }
 | |
| 
 | |
|         public void WriteDoubleWord(long address, uint value)
 | |
|         {
 | |
|             RegistersCollection.Write(address, value);
 | |
|         }
 | |
| 
 | |
|         public uint ReadDoubleWord(long offset)
 | |
|         {
 | |
|             return RegistersCollection.Read(offset);
 | |
|         }
 | |
| 
 | |
|         public override void Reset()
 | |
|         {
 | |
|             RegistersCollection.Reset();
 | |
|         }
 | |
| 
 | |
|         public long Size { get{ return  0x800; }}
 | |
|         public DoubleWordRegisterCollection RegistersCollection { get; private set; }
 | |
| 
 | |
|         // protected override void Repaint()
 | |
|         // {
 | |
|         //     var newbuf = new Byte[44*Height];
 | |
|         //     machine.SystemBus.ReadBytes(bufferAddress, newbuf.Length, newbuf, 0);
 | |
|         //     for (int y = 0; y < Height; y++) {
 | |
|         //         if (!updateDirty || updateAll || ((newbuf[y*44+0x2a] & 0x1) == 0x1)) for (int x = 0; x < Width; x++) {
 | |
|         //             if (((newbuf[((x+y*44*8))/8] >> (x%8))&1) > 0) {
 | |
|         //                 buffer[2*(x+y*Width)] = 0xFF;
 | |
|         //                 buffer[2*(x+y*Width)+1] = 0xFF;
 | |
|         //             } else {
 | |
|         //                 buffer[2*(x+y*Width)] = 0x0;
 | |
|         //                 buffer[2*(x+y*Width)+1] = 0x0;
 | |
|         //             }
 | |
|         //         }
 | |
|         //     }
 | |
|         // }
 | |
| 
 | |
|         // private void DefineRegisters()
 | |
|         // {
 | |
|         //     Registers.COMMAND.Define(this)
 | |
|         //         .WithValueField(0, 32, writeCallback: (_, val) =>
 | |
|         //                 {
 | |
|         //                 updateDirty = (val & 0x1) == 0x1;
 | |
|         //                 updateAll = (val & 0x10) == 0x10;
 | |
|         //                 DoRepaint();
 | |
|         //                 })
 | |
|         //     ;
 | |
|         // }
 | |
|         private readonly Machine machine;
 | |
| 
 | |
|         private enum Registers
 | |
|         {
 | |
|             ROW0DAT1 = 0x0,
 | |
|             ROW0DAT0 = 0x4,
 | |
|             ROW1DAT1 = 0x8,
 | |
|             ROW1DAT0 = 0xc,
 | |
|             ROW2DAT1 = 0x10,
 | |
|             ROW2DAT0 = 0x14,
 | |
|             ROW3DAT1 = 0x18,
 | |
|             ROW3DAT0 = 0x1c,
 | |
|             ROW4DAT1 = 0x20,
 | |
|             ROW4DAT0 = 0x24,
 | |
|             ROW5DAT1 = 0x28,
 | |
|             ROW5DAT0 = 0x2c,
 | |
|             ROW6DAT1 = 0x30,
 | |
|             ROW6DAT0 = 0x34,
 | |
|             ROW7DAT1 = 0x38,
 | |
|             ROW7DAT0 = 0x3c,
 | |
|             ROW8DAT1 = 0x40,
 | |
|             ROW8DAT0 = 0x44,
 | |
|             EV_STATUS = 0x48,
 | |
|             EV_PENDING = 0x4c,
 | |
|             EV_ENABLE = 0x50,
 | |
|             ROWCHANGE1 = 0x54,
 | |
|             ROWCHANGE0 = 0x58,
 | |
|             BUSY = 0x04
 | |
|         }
 | |
|     }
 | |
| }
 |