.include Io.asm

  .org 2
  .db WriteChar
  .db ReadChar
  .db Beep
  .db ReadFile
  .db ClearScreen

WriteChar:
  ; R0 - written character
  PUSH R1
  LD   R1, TerminalData
  OUT  (R1), R0
  POP  R1
  RET

ReadChar:
  ; R0 - read character
  PUSH R1
  LD   R1, TerminalData
  IN  R0, (R1)
  POP  R1
  RET

Beep:
  PUSH R0
  PUSH R1
  LD   R0, 'C'
  LD   R1, Sound
  OUT  (R1), R1
  POP  R1
  POP  R0
  RET

ReadFile:
  ; R0 - file index on file system
  ; R1 - destination address
  PUSH R1
  PUSH R2
  PUSH R3
  PUSH R4
  ; Get file descriptor address
  LD   R2, R0
  SHL  R2
  INC  R2
  OUT  (StorageAddress), R2
  ; Get file base
  IN   R4, (StorageData)
  ; Get file size
  IN   R3, (StorageData)
  OUT  (StorageAddress), R4
ReadFileLoop:
  IN   R2, (StorageData)
  LD   (R1), R2
  INC  R1
  DEC  R3
  JR   NZ, ReadFileLoop
  POP  R4
  POP  R3
  POP  R2
  POP  R1
  RET

ClearScreen:
  PUSH R0
  PUSH R1
  PUSH R2
  PUSH R3
  LD   R1, 0
  OUT  (ScreenAddress), R1
  IN   R1, (ScreenWidth)
  IN   R2, (ScreenHeight)
  MUL  R2, R1
  LD   R1, 120
ClearScreenLoop:
  OUT  (ScreenData), R1
  DEC  R2
  JR   NZ, ClearScreenLoop
  POP  R3
  POP  R2
  POP  R1
  POP  R0
  RET
