Files
RomWBW/Source/HDIAG/acia.asm
Wayne Warthen f8e0fb3a6f HDIAG Early Development
- Initial framework.  Just boots up and displays startup messages.
2021-09-20 19:51:19 -07:00

71 lines
1.5 KiB
NASM

;
;=======================================================================
; HDIAG ACIA Driver
;=======================================================================
;
acia_cmd .equ $80
acia_dat .equ $81
;
;
;
acia_jptbl:
jp acia_cinit ; Initialize serial port
jp acia_cin ; Read byte
jp acia_cout ; Write byte
jp acia_cist ; Input status
jp acia_cost ; Output Status
;
;
;
acia_cinit:
; Detect ACIA
ld a,$03 ; master reset
out (acia_cmd),a ; apply it
in a,(acia_cmd) ; get status
or a ; check for zero (expected)
ret nz ; abort if not
ld a,$02 ; clear master reset
out (acia_cmd),a ; apply it
in a,(acia_cmd) ; get status again
and %00001110 ; isolate reliable bits
cp %00000010 ; check for expected value
ret nz ; abort if not
; Initialize ACIA
ld a,%00010110 ; default config
out (acia_cmd),a ; apply it
xor a ; signal success
ret
;
;
;
acia_cin:
call acia_cist ; check for char ready
jr z,acia_cin ; if not, loop
in a,(acia_dat) ; read byte
ret ; done
;
;
;
acia_cout:
push af ; save incoming
acia_cout1:
call acia_cost ; ready for char?
jr z,acia_cout1 ; loop if not
pop af ; restore incoming
out (acia_dat),a ; write byte
ret ; and done
;
;
;
acia_cist:
in a,(acia_cmd) ; get status
and $01 ; isolate rx ready
ret ; done
;
;
;
acia_cost:
in a,(acia_cmd) ; get status
and $02 ; isolate tx empty
ret ; done