mirror of
https://github.com/V2RetroComputing/analog.git
synced 2024-11-22 11:33:26 +00:00
55 lines
1.3 KiB
C
55 lines
1.3 KiB
C
#include "parallel/parallelbuffer.h"
|
|
|
|
volatile uint8_t parallel_status = ~PARALLEL_SELECT;
|
|
volatile uint8_t *parallel_tx_fifo = private_memory;
|
|
volatile uint16_t parallel_tx_wrptr = 0;
|
|
volatile uint16_t parallel_tx_rdptr = 0;
|
|
|
|
|
|
int parallel_tx_empty() {
|
|
return (parallel_tx_wrptr == parallel_tx_rdptr);
|
|
}
|
|
|
|
|
|
uint8_t parallel_tx_pop() {
|
|
uint8_t retval;
|
|
if(parallel_tx_rdptr != parallel_tx_wrptr) {
|
|
retval = parallel_tx_fifo[parallel_tx_rdptr];
|
|
parallel_tx_rdptr++;
|
|
}
|
|
|
|
// Assert BUSY LOW when buffer is full
|
|
if((parallel_tx_wrptr+1) == parallel_tx_rdptr) {
|
|
parallel_status &= ~PARALLEL_BUSY;
|
|
} else {
|
|
parallel_status |= PARALLEL_BUSY;
|
|
}
|
|
|
|
return retval;
|
|
}
|
|
|
|
|
|
void parallel_tx_push(uint8_t value) {
|
|
if((parallel_tx_wrptr+1) != parallel_tx_rdptr) {
|
|
parallel_tx_fifo[parallel_tx_wrptr] = value;
|
|
parallel_tx_wrptr++;
|
|
}
|
|
|
|
// Deassert BUSY LOW when buffer is not full
|
|
if((parallel_tx_wrptr+1) == parallel_tx_rdptr) {
|
|
parallel_status &= ~PARALLEL_BUSY;
|
|
} else {
|
|
parallel_status |= PARALLEL_BUSY;
|
|
}
|
|
|
|
// Assert ACK
|
|
parallel_status &= ~PARALLEL_ACK;
|
|
}
|
|
|
|
|
|
void parallel_fifo_init() {
|
|
parallel_tx_wrptr = 0;
|
|
parallel_tx_rdptr = 0;
|
|
parallel_status = ~PARALLEL_SELECT;
|
|
}
|