; Џроверка работоспособности минимальной конфигурации
; ‚ывод в порт строки, ожидание символа и отправка символа "X" в терминал.
; по клавише "s" включаетсЯ звук, по клавише "x" отключаетсЯ.

.org (0000h)

  xor a			; обнулить аккумулятор
  out0 (36h),a		; откл. регенерацию памЯти
  
  ld a,10000000b	; бит 7 в 1, установить рабочую частоту 1:1 длЯ кварца 18,432 мѓц
  out0 (1fh),a		; CPU Control Register 

  ld a,01110100b	; RTS=1,8,N,1
  out0 (00h),a		; Init CNTLA0 (COM1)

  ld a,10111000b	; PS=30, DR=64, SS=1, 9600BPS длЯ PHI=18,432 мѓц
  out0 (02h),a		; Init CNTLB0 (COM1)
  
  ld hl, WelcomeString	; ‚ывод строки приветствиЯ
out_sym:  
  in0 a,(04h)		; читать статус порта COM1 (STAT0)
  rra
  rra			; проверЯем бит 1
  jp nc,out_sym		; если буфер не пустой - байт не передан (флаг C=0), опять проверить
  ld a,(hl)
  cp 0ah		; пока не встретитсЯ символ "0AH"
  out0 (06h),a		; отправить в COM1
  jp z,PortTest  
  inc hl
  jp out_sym

; ввод и вывод символа
;
PortTest:
  in0 a,(04h)		; читать статус порта COM1 (STAT0)
  rla			; проверЯем бит 7
  jp nc,PortTest	; если ничего не пришло (флаг C=0), опЯть проверить
  IN0 a,(08h)		; принЯть из COM1
  cp 's'
  jp z,REG_ON
  cp 'x'
  jp z,REG_OFF
  ld a,'X'		; присвоим X
  OUT0 (06h),a		; и отправить назад в COM1
  JP PortTest		; ждать очередного приЮма

REG_ON:  
  ld a,10000000b		; если нажата s
  out0 (36h),a		; вкл. регенерацию памЯти
  JP PortTest		; ждать очередного приЮма

REG_OFF:
  xor a			; обнулить аккумулятор
  out0 (36h),a		; откл. регенерацию памЯти
  JP PortTest		; ждать очередного приЮма

WelcomeString:
.db "Orion-XT first program starting. s - sound on, x - sound off.", 0dh, 0ah
.end


