ZinggJM has already answered that. But maybe to add to that, I have created a fork of MCUFRIEND that has a fallback to standard Arduino I/O if the MCU is not found.
It is slow but works an the UNO R4 Minima with a parallel interface. Only one file is different from the master mcufriend_shield.h. It has the code
#define RD_PORT 0
#define RD_PIN A0
#define WR_PORT 0
#define WR_PIN A1
#define CD_PORT 0
#define CD_PIN A2
#define CS_PORT 0
#define CS_PIN A3
#define RESET_PORT 0
#define RESET_PIN A4
#define write_8(x) { digitalWrite(8, (x&0b00000001)); \
digitalWrite(9, (x&0b00000010)>>1); \
digitalWrite(2, (x&0b00000100)>>2); \
digitalWrite(3, (x&0b00001000)>>3); \
digitalWrite(4, (x&0b00010000)>>4); \
digitalWrite(5, (x&0b00100000)>>5); \
digitalWrite(6, (x&0b01000000)>>6); \
digitalWrite(7, (x&0b10000000)>>7); \
}
#define read_8() ( digitalRead(8)|(digitalRead(9)<<1)|(digitalRead(2)<<2)|(digitalRead(3)<<3)|(digitalRead(4)<<4)| \
(digitalRead(5)<<5)|(digitalRead(6)<<6)|(digitalRead(7)<<7) )
#define setWriteDir() { pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); \
pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); }
#define setReadDir() { pinMode(8, INPUT); pinMode(9, INPUT); pinMode(2, INPUT); pinMode(3, INPUT); \
pinMode(4, INPUT); pinMode(5, INPUT); pinMode(6, INPUT); pinMode(7, INPUT); }
#define write8(x) { write_8(x); WR_STROBE; }
#define write16(x) { uint8_t h = (x)>>8, l = x; write8(h); write8(l); }
#define READ_8(dst) { RD_STROBE; dst = read_8(); RD_IDLE; }
#define READ_16(dst) { uint8_t hi; READ_8(hi); READ_8(dst); dst |= (hi << 8); }
#define PIN_LOW(p, b) digitalWrite(b, 0)
#define PIN_HIGH(p, b) digitalWrite(b, 1)
#define PIN_OUTPUT(p, b) pinMode(b, OUTPUT)
where MCUFRIEND normally throws an error that the MCU is not known.