main.CPUClock=2500KHz
main.CPUClock[0]=2500KHz
main.CPUClock[1]=3125KHz
main.Caption="ΟΚ8002 έλότ"
main.ff.speed=10
main.ff.keymask[A]=40
main.scale.y=200%

CPU : K580wm80a {
  debug=cas
  mem=mm
  rst[7]=vid.irq
  port[80-83]=port80.data
  port[84-87]=port84.data
  port[88-8B]=vid.color
  port[8C-8D]=regs.data
  port[90]=vid.sprites
  port[91]=vid.text
  port[92]=vid.attr
  port[93]=vid.font
  port[94]=vid.palette
  port[9B]=regs.data[2]
  port[9C-9F]=tim.data
  adjust=4
}

mem1 : Memory {
  size=10000
}

bios : Memory {
  rom="PK8002\pk8002.rom"
  romselect="Change ROM BIOS"
  romfiles="BIOS files (*.rom;*.bin)|*.rom;*.bin"
}

win1 : MemMap {
  map[0][0000-3FFF].ro=bios[0000]
  map[0][0000-3FFF].wo=mem1[0000]
  map[1][0000-3FFF]=ext1
  map[2][0000-3FFF]=ext2
  map[3][0000-3FFF]=mem1[0000]
}

win2 : MemMap {
  map[0][0000-3FFF].ro=bios[4000]
  map[0][0000-3FFF].wo=mem1[4000]
  map[1][0000-3FFF]=ext1
  map[2][0000-3FFF]=ext2
  map[3][0000-3FFF]=mem1[4000]
}

win3 : MemMap {
  map[0][0000-3FFF].ro=bios[8000]
  map[0][0000-3FFF].wo=mem1[8000]
  map[1][0000-3FFF]=ext1
  map[2][0000-3FFF]=ext2
  map[3][0000-3FFF]=mem1[8000]
}

win4 : MemMap {
  map[0][0000-3FFF].ro=bios[C000]
  map[0][0000-3FFF].wo=mem1[C000]
  map[1][0000-3FFF]=ext1
  map[2][0000-3FFF]=ext2
  map[3][0000-3FFF]=mem1[C000]
}

mm : MemMap {
  map[0][0000-3FFF]=win1
  map[0][4000-7FFF]=win2
  map[0][8000-BFFF]=win3
  map[0][C000-FFFF]=win4
}

port80 : K580ww55 {
  portA[0-1]=win1.page
  portA[2-3]=win2.page
  portA[4-5]=win3.page
  portA[6-7]=win4.page
  portB=kbd.~idata
  portC[0-3]=kbd.mask
  portC[4]=main.CPUClock.index
  portC[6]=cas.record
  portC[7]=beep.input
}

port84 : K580ww55 {
  portA=vid.mode
  portB=prn.data
  portC[6]=vid.m212
  portC[4]=vid.enable
  portC[3]=vid.m512
  portC[1]=prn.strobe
  portC[0]=prn.~busy
}

regs : K580ww55 {
  portA[0-5]=kbd.~matrix[B]
  portA[7]=vid.collision
  portB[0-5]=kbd.~matrix[A]
  portB[7]=cas.playback
  portC[0-4]=beep.volume
  portC[5]=beep.input[2].noiseon
}

tim : K580wi53 {
  clock[0].rate=1/10
  clock[1].rate=1/10
  clock[2].rate=1/10
  gate[0].value=1
  gate[1].value=1
  gate[2].value=1
}

kbd : Keyboard {
  layout="PK8000\pk8000.kbd"
}

vid : pk8002-video {
  mem=mem1[0000]
}

beep : beep {
  input[0]=tim.out[0]
  input[1]=tim.out[1]
  input[2]=tim.out[2]
  maxvol=20
}

cas : tape-recorder {
  ; monitor
  tproc[2143-215C]=sp
  tproc[2143-215C].check="C5F50100000B78B1"
  tproc[2150-215C]=sp
  tproc[2150-215C].check="F53A2AFFD3823A2B"
  tiproc[078B-07D9]="1FA6DEBACC137D74"
  tiproc[078B-07D9].check="CD5E2121570451E5"
  biproc[07DB-07D9]=sp
  biproc[07DB-07D9].check="E5D5C5CD2720DAF0"
  toproc[20DB-20FD]="1FA6DEBACC137D74"
  toproc[20DB-20FD].check="F50100000B78B1C2"
  boproc[20FE-211F]=sp
  boproc[20FE-211F].check="F5212D337DD60A6F"
  ; basic
  tproc[13C7-13E0]=sp
  tproc[13C7-13E0].check="C5F50100000B78B1"
  tproc[13D4-13E0]=sp
  tproc[13D4-13E0].check="F53AC513D3823AC6"
  tiproc[1468-14B6]="1FA6DEBACC137D74"
  tiproc[1468-14B6].check="CD4B1421570451E5"
  biproc[14B8-14B6]=sp
  biproc[14B8-14B6].check="3A5E7E57CD6114D8"
  toproc[13E2-1404]="1FA6DEBACC137D74"
  toproc[13E2-1404].check="F50100000B78B1C2"
  boproc[1405-13C3]=sp
  boproc[1405-13C3].check="F5212D337DD60A6F"
  filter="PK8000 & fMSX files (*.cas)|*.cas"
}
