1
0
mirror of https://github.com/irmen/ksim65.git synced 2024-06-13 06:29:38 +00:00
ksim65/src/main/kotlin/razorvine/ksim65/components/ParallelPort.kt

39 lines
1.1 KiB
Kotlin
Raw Normal View History

2019-09-11 00:39:58 +00:00
package razorvine.ksim65.components
2019-09-11 00:17:59 +00:00
/**
* A simple parallel output device (basically, prints bytes as characters to the console)
*
2019-09-15 03:04:57 +00:00
* reg. value
* ---- ---------
* 00 data (the 8 parallel bits)
* 01 control latch (set bit 0 to write the data byte)
2019-09-11 00:17:59 +00:00
*/
class ParallelPort(startAddress: Address, endAddress: Address) : MemMappedComponent(startAddress, endAddress) {
2019-09-14 16:58:45 +00:00
private var dataByte: UByte = 0
2019-09-11 00:17:59 +00:00
init {
require(endAddress - startAddress + 1 == 2) { "parallel needs exactly 2 memory bytes (data + control)" }
}
override fun clock() {}
override fun reset() {}
override operator fun get(address: Address): UByte {
return if (address == startAddress)
dataByte
else
2019-09-15 03:04:57 +00:00
0xff
2019-09-11 00:17:59 +00:00
}
override operator fun set(address: Address, data: UByte) {
if (address == startAddress)
dataByte = data
else if (address == endAddress) {
if ((data.toInt() and 1) == 1) {
2019-09-14 16:58:45 +00:00
val char = dataByte.toChar()
2019-09-11 00:17:59 +00:00
println("PARALLEL WRITE: '$char'")
}
}
}
}