From eb71154cb32e3a567d825f36d63266cae60b0099 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Sun, 16 Apr 2023 23:14:45 +0300 Subject: WIP ppu --- asm/bootstrap.atk16 | 2 +- digital/atk16_ppu.dig | 373 ++-- digital/atk16_ppu_sprite_eval.dig | 4325 +++++++++++++++++++++++++++++++++++++ 3 files changed, 4543 insertions(+), 157 deletions(-) create mode 100644 digital/atk16_ppu_sprite_eval.dig diff --git a/asm/bootstrap.atk16 b/asm/bootstrap.atk16 index 4ef8b15..813ebb5 100644 --- a/asm/bootstrap.atk16 +++ b/asm/bootstrap.atk16 @@ -11,7 +11,7 @@ hlt_isr ; 0x12 ISR2 hlt_isr ; 0x13 ISR3 stack_segment ; 0x14 Stack address - 0x0 ; 0x15 Interrupt PC address (IPCA) + 0x0 ; 0x15 terminal_addr ; 0x16 Terminal peripheral address keyboard_addr ; 0x17 Keyboard peripheral address diff --git a/digital/atk16_ppu.dig b/digital/atk16_ppu.dig index 8f373a3..d9064dd 100644 --- a/digital/atk16_ppu.dig +++ b/digital/atk16_ppu.dig @@ -200,7 +200,7 @@ AddrBits - 11 + 7 Label @@ -218,19 +218,26 @@ Description - (8 pixels wide x 8 pixels tall + 12 bit X + 12 bit Y + 8 bit priority) -x 21 sprites -< 2**11 = 2048 words + 8 bits tile pattern index +10 bits Y position +10 bits X position +1 bit H flip +1 bit V flip +1 bit behind background? (priority) +1 bit palette select += total 4 bytes per sprite +x 64 sprites += 128 words - + Text Description - 2**11 selector addresses for + 2**7 selector addresses for sprite mem, starting from 0x0800 @@ -370,40 +377,6 @@ sprite mem, starting from 0x0800 - - Tunnel - - - NetName - SMEMBUS - - - - - - Multiplexer - - - Bits - 11 - - - - - - Tunnel - - - rotation - - - - NetName - SM_QUERY - - - - Tunnel @@ -711,21 +684,11 @@ sprite mem, starting from 0x0800 Output Splitting - 9,1 + 1,9 - - Tunnel - - - NetName - Y - - - - Splitter @@ -735,21 +698,11 @@ sprite mem, starting from 0x0800 Output Splitting - 9,1 + 1,9 - - Tunnel - - - NetName - X - - - - Text @@ -802,31 +755,6 @@ sprite mem, starting from 0x0800 - - Ground - - - Bits - 4 - - - - - - Ground - - - - - Ground - - - - - Ground - - - Splitter @@ -922,6 +850,147 @@ sprite mem, starting from 0x0800 + + Ground + + + rotation + + + + Bits + 4 + + + + + + Ground + + + rotation + + + + + + + Counter + + + + + Tunnel + + + rotation + + + + NetName + PCLK + + + + + + VDD + + + + + Ground + + + + + Text + + + Description + TODO + + + + + + Tunnel + + + rotation + + + + NetName + SMEMBUS + + + + + + Ground + + + rotation + + + + Bits + 7 + + + + + + Tunnel + + + NetName + X + + + + + + Tunnel + + + NetName + Y + + + + + + Text + + + Description + TODO: 8x8x4 tile pattern memory + + + + + + VDD + + + rotation + + + + + + + Probe + + + Label + SCAN BUF + + + + @@ -976,25 +1045,25 @@ sprite mem, starting from 0x0800 - - - - - + - - + + - - + + + + + + @@ -1008,10 +1077,6 @@ sprite mem, starting from 0x0800 - - - - @@ -1021,12 +1086,12 @@ sprite mem, starting from 0x0800 - - + + - - + + @@ -1052,10 +1117,6 @@ sprite mem, starting from 0x0800 - - - - @@ -1076,10 +1137,6 @@ sprite mem, starting from 0x0800 - - - - @@ -1088,14 +1145,26 @@ sprite mem, starting from 0x0800 + + + + + + + + + + + + @@ -1104,6 +1173,10 @@ sprite mem, starting from 0x0800 + + + + @@ -1136,14 +1209,6 @@ sprite mem, starting from 0x0800 - - - - - - - - @@ -1200,18 +1265,22 @@ sprite mem, starting from 0x0800 - - - - + + + + + + + + @@ -1241,8 +1310,8 @@ sprite mem, starting from 0x0800 - - + + @@ -1257,8 +1326,8 @@ sprite mem, starting from 0x0800 - - + + @@ -1285,8 +1354,8 @@ sprite mem, starting from 0x0800 - - + + @@ -1297,8 +1366,20 @@ sprite mem, starting from 0x0800 - - + + + + + + + + + + + + + + @@ -1317,37 +1398,17 @@ sprite mem, starting from 0x0800 - - + + - - - - - - - - - - - - - - - - - - + + - - - - \ No newline at end of file diff --git a/digital/atk16_ppu_sprite_eval.dig b/digital/atk16_ppu_sprite_eval.dig new file mode 100644 index 0000000..c765847 --- /dev/null +++ b/digital/atk16_ppu_sprite_eval.dig @@ -0,0 +1,4325 @@ + + + 2 + + + + Tunnel + + + NetName + PCLK + + + + + + Clock + + + Frequency + 20 + + + runRealTime + true + + + + + + In + + + Label + PCLK + + + + + + Rectangle + + + Label + Stage 1 Secondary Clear + + + RectHeight + 15 + + + RectWidth + 35 + + + + + + Tunnel + + + NetName + NPCLK + + + + + + Not + + + + + Break + + + + + Break + + + + + Text + + + Description + State machine & sequencer: +SQ0 transition current state if conditions match +SQ1 read from memory A +SQ2 read from memory B +SQ3 write to memory +SQ4 counter inc + +Sequencer clocked by falling edge (NPCLK) +Everything else clocked by rising edge (PCLK) + + + + + + And + + + + + Tunnel + + + rotation + + + + NetName + ST_SECCLR + + + + + + Tunnel + + + rotation + + + + NetName + OVF_SECCLR + + + + + + And + + + + + Tunnel + + + rotation + + + + NetName + ST_EVAL + + + + + + Or + + + Inputs + 3 + + + + + + And + + + Inputs + 3 + + + + + + Tunnel + + + NetName + CLK_STAGE + + + + + + Tunnel + + + rotation + + + + NetName + PCLK + + + + + + Tunnel + + + rotation + + + + NetName + SQ_TRANS + + + + + + Counter + + + Label + STAGE + + + Bits + 2 + + + + + + Decoder + + + Selector Bits + 2 + + + flipSelPos + true + + + + + + Tunnel + + + NetName + ST_SECCLR + + + + + + VDD + + + + + Tunnel + + + NetName + ST_EVAL + + + + + + Tunnel + + + NetName + ST_RENDER + + + + + + Or + + + + + Tunnel + + + rotation + + + + NetName + CLK_STAGE + + + + + + Tunnel + + + rotation + + + + NetName + RST + + + + + + Or + + + + + Tunnel + + + rotation + + + + NetName + OVF_EVAL + + + + + + Tunnel + + + rotation + + + + NetName + OVF_SMN + + + + + + Tunnel + + + NetName + STAGE + + + + + + Multiplexer + + + Selector Bits + 2 + + + + + + Tunnel + + + NetName + SEC_C + + + + + + Ground + + + rotation + + + + + + + Tunnel + + + rotation + + + + NetName + STAGE + + + + + + Tunnel + + + rotation + + + + NetName + CLK_WRITE + + + + + + Tunnel + + + rotation + + + + NetName + CLK_READA + + + + + + Multiplexer + + + Selector Bits + 2 + + + + + + Tunnel + + + NetName + SEC_str + + + + + + VDD + + + rotation + + + + + + + Ground + + + rotation + + + + + + + Multiplexer + + + Selector Bits + 2 + + + + + + Tunnel + + + NetName + SEC_ld + + + + + + VDD + + + rotation + + + + + + + Multiplexer + + + Selector Bits + 2 + + + + + + Tunnel + + + NetName + SB_C + + + + + + Ground + + + rotation + + + + + + + Ground + + + rotation + + + + + + + Tunnel + + + rotation + + + + NetName + STAGE + + + + + + Multiplexer + + + Selector Bits + 2 + + + + + + Tunnel + + + NetName + SB_str + + + + + + Multiplexer + + + Selector Bits + 2 + + + + + + Tunnel + + + NetName + SB_ld + + + + + + VDD + + + rotation + + + + + + + Counter + + + Label + SEC CLR ADDR + + + Bits + 4 + + + + + + Or + + + + + Tunnel + + + rotation + + + + NetName + RST + + + + + + Tunnel + + + rotation + + + + NetName + CLK_WRITE + + + + + + Driver + + + Bits + 3 + + + + + + Tunnel + + + NetName + SEC_A + + + + + + Tunnel + + + NetName + ST_SECCLR + + + + + + Driver + + + Bits + 32 + + + + + + Tunnel + + + NetName + ST_SECCLR + + + + + + Tunnel + + + NetName + SEC_Din + + + + + + Ground + + + Bits + 32 + + + + + + Probe + + + + + Tunnel + + + rotation + + + + NetName + ST_SECCLR + + + + + + VDD + + + rotation + + + + + + + Ground + + + rotation + + + + + + + Ground + + + rotation + + + + + + + RAMDualPort + + + AddrBits + 3 + + + Label + SECONDARY + + + Bits + 32 + + + + + + Probe + + + Label + SEC_D + + + + + + Tunnel + + + rotation + + + + NetName + SEC_ld + + + + + + Tunnel + + + rotation + + + + NetName + SEC_str + + + + + + Tunnel + + + rotation + + + + NetName + SEC_A + + + + + + Tunnel + + + rotation + + + + NetName + SEC_Din + + + + + + Tunnel + + + rotation + + + + NetName + SEC_C + + + + + + RAMDualPort + + + AddrBits + 7 + + + Label + SCAN BUFFER + + + Bits + 16 + + + + + + Probe + + + Label + SB_D + + + + + + Tunnel + + + rotation + + + + NetName + SB_A + + + + + + Tunnel + + + rotation + + + + NetName + SB_Din + + + + + + Tunnel + + + rotation + + + + NetName + SB_str + + + + + + Tunnel + + + rotation + + + + NetName + SB_C + + + + + + Tunnel + + + rotation + + + + NetName + SB_ld + + + + + + Tunnel + + + rotation + + + + NetName + SB_A + + + + + + Tunnel + + + rotation + + + + NetName + SB_Din + + + + + + Ground + + + rotation + + + + Bits + 7 + + + + + + Ground + + + rotation + + + + Bits + 16 + + + + + + Out + + + Description + Scanline buffer data + + + Label + SB_D + + + Bits + 9 + + + + + + Ground + + + Bits + 9 + + + + + + Multiplexer + + + Selector Bits + 2 + + + + + + Tunnel + + + NetName + SM_C + + + + + + Ground + + + rotation + + + + + + + Tunnel + + + rotation + + + + NetName + STAGE + + + + + + Multiplexer + + + Selector Bits + 2 + + + + + + Tunnel + + + NetName + SM_str + + + + + + Multiplexer + + + Selector Bits + 2 + + + + + + Tunnel + + + NetName + SM_ld + + + + + + VDD + + + rotation + + + + + + + Tunnel + + + NetName + ST_IDLE + + + + + + Ground + + + rotation + + + + + + + Ground + + + rotation + + + + + + + Tunnel + + + rotation + + + + NetName + CLK_READA + + + + + + Rectangle + + + RectHeight + 40 + + + Label + Stage 2 Evaluate sprites + + + RectWidth + 35 + + + + + + Counter + + + Label + SMN + + + Bits + 7 + + + + + + Probe + + + + + Or + + + + + Tunnel + + + rotation + + + + NetName + RST + + + + + + Tunnel + + + rotation + + + + NetName + CLK_WRITE + + + + + + Tunnel + + + rotation + + + + NetName + SM_D + + + + + + Splitter + + + Input Splitting + 32 + + + Output Splitting + 8,10,10,1,1,1,1 + + + + + + Sub + + + Bits + 10 + + + + + + Ground + + + + + Tunnel + + + rotation + + + + NetName + SCY + + + + + + Comparator + + + Bits + 10 + + + + + + Const + + + Value + 8 + + + Bits + 10 + + + + + + Tunnel + + + NetName + YMATCH + + + + + + Tunnel + + + NetName + OVF_SMN + + + + + + Tunnel + + + rotation + + + + NetName + ST_EVAL + + + + + + Splitter + + + Input Splitting + 7 + + + Output Splitting + 6,1 + + + + + + Tunnel + + + NetName + SM_A + + + + + + Tunnel + + + NetName + ST_SECCLR + + + + + + LED + + + rotation + + + + + + + Tunnel + + + NetName + ST_EVAL + + + + + + LED + + + rotation + + + + + + + Multiplexer + + + Selector Bits + 2 + + + + + + Tunnel + + + NetName + TM_C + + + + + + Ground + + + rotation + + + + + + + Ground + + + rotation + + + + + + + Tunnel + + + rotation + + + + NetName + STAGE + + + + + + Multiplexer + + + Selector Bits + 2 + + + + + + Tunnel + + + NetName + TM_str + + + + + + Multiplexer + + + Selector Bits + 2 + + + + + + Tunnel + + + NetName + TM_ld + + + + + + VDD + + + rotation + + + + + + + Ground + + + rotation + + + + + + + RAMDualPort + + + AddrBits + 11 + + + Label + TILE MEM + + + Bits + 32 + + + + + + Tunnel + + + rotation + + + + NetName + TM_C + + + + + + Tunnel + + + rotation + + + + NetName + TM_str + + + + + + Tunnel + + + rotation + + + + NetName + TM_ld + + + + + + Text + + + Description + Tile mem addr: +8 bits select tile +3 bits select row in tile += 11 bits total + + + + + + Tunnel + + + rotation + + + + NetName + TM_Din + + + + + + Ground + + + rotation + + + + Bits + 32 + + + + + + Probe + + + Label + TM_D + + + + + + Tunnel + + + rotation + + + + NetName + TM_A + + + + + + Tunnel + + + rotation + + + + NetName + TM_Din + + + + + + Text + + + Description + 8 bits tile pattern index +10 bits Y position +10 bits X position +1 bit H flip +1 bit V flip +1 bit behind background? (priority) +1 bit palette select += total 4 bytes per sprite +x 64 sprites += 128 words + + + + + + RAMDualPort + + + AddrBits + 6 + + + Label + SPRITE MEM H + + + Bits + 16 + + + + + + Tunnel + + + NetName + SM_D + + + + + + Tunnel + + + rotation + + + + NetName + DBUS + + + + + + Tunnel + + + rotation + + + + NetName + SM_A + + + + + + Tunnel + + + rotation + + + + NetName + SM_C + + + + + + Tunnel + + + rotation + + + + NetName + SM_ld + + + + + + Tunnel + + + rotation + + + + NetName + SM_str + + + + + + RAMDualPort + + + AddrBits + 6 + + + Label + SPRITE MEM L + + + Bits + 16 + + + + + + Tunnel + + + rotation + + + + NetName + DBUS + + + + + + Tunnel + + + rotation + + + + NetName + SM_A + + + + + + Tunnel + + + rotation + + + + NetName + SM_C + + + + + + Tunnel + + + rotation + + + + NetName + SM_ld + + + + + + Tunnel + + + rotation + + + + NetName + SM_str + + + + + + Splitter + + + Input Splitting + 16,16 + + + Output Splitting + 32 + + + + + + Probe + + + + + Counter + + + Label + Sequencer + + + Bits + 3 + + + + + + Decoder + + + Selector Bits + 3 + + + flipSelPos + true + + + + + + Tunnel + + + NetName + SQ_TRANS + + + + + + Tunnel + + + NetName + SQ_READA + + + + + + Tunnel + + + NetName + SQ_READB + + + + + + VDD + + + rotation + + + + + + + Tunnel + + + NetName + SQ_WRITE + + + + + + Or + + + + + Tunnel + + + rotation + + + + NetName + NPCLK + + + + + + Tunnel + + + rotation + + + + NetName + RST + + + + + + And + + + + + Tunnel + + + rotation + + + + NetName + SQ_READA + + + + + + Tunnel + + + rotation + + + + NetName + PCLK + + + + + + Tunnel + + + NetName + CLK_READA + + + + + + And + + + + + Tunnel + + + rotation + + + + NetName + ST_RENDER + + + + + + Tunnel + + + rotation + + + + NetName + OVF_RENDER + + + + + + Tunnel + + + NetName + SEC_D + + + + + + Splitter + + + Input Splitting + 4 + + + Output Splitting + 3,1 + + + + + + Tunnel + + + NetName + OVF_SECCLR + + + + + + Tunnel + + + NetName + SQ_CLR + + + + + + Or + + + + + Tunnel + + + rotation + + + + NetName + SQ_CLR + + + + + + And + + + + + Tunnel + + + rotation + + + + NetName + SQ_READB + + + + + + Tunnel + + + rotation + + + + NetName + PCLK + + + + + + Tunnel + + + NetName + CLK_READB + + + + + + And + + + + + Tunnel + + + rotation + + + + NetName + SQ_WRITE + + + + + + Tunnel + + + rotation + + + + NetName + PCLK + + + + + + Tunnel + + + NetName + CLK_WRITE + + + + + + Splitter + + + Input Splitting + 8,10,10,1,1,1,1 + + + Output Splitting + 32 + + + + + + Driver + + + Bits + 32 + + + + + + Tunnel + + + NetName + ST_EVAL + + + + + + Tunnel + + + NetName + SEC_Din + + + + + + In + + + Description + Scanline Y (0..524) + + + Label + SCY + + + Bits + 10 + + + + + + Tunnel + + + NetName + SCY + + + + + + In + + + Label + DBUS + + + Bits + 16 + + + + + + Tunnel + + + NetName + DBUS + + + + + + In + + + Description + Reset sprite evaluator + + + Label + RST + + + + + + Tunnel + + + NetName + RST + + + + + + And + + + Inputs + 3 + + + + + + Tunnel + + + rotation + + + + NetName + YMATCH + + + + + + Tunnel + + + rotation + + + + NetName + SQ_WRITE + + + + + + Tunnel + + + rotation + + + + NetName + PCLK + + + + + + Counter + + + Label + SEC ADDR + + + Bits + 4 + + + + + + Or + + + + + Tunnel + + + rotation + + + + NetName + RST + + + + + + Probe + + + + + Tunnel + + + NetName + OVF_EVAL + + + + + + Tunnel + + + rotation + + + + NetName + ST_EVAL + + + + + + Splitter + + + Input Splitting + 4 + + + Output Splitting + 3,1 + + + + + + Driver + + + Bits + 3 + + + + + + Tunnel + + + NetName + SEC_A + + + + + + Tunnel + + + NetName + ST_EVAL + + + + + + Rectangle + + + RectHeight + 30 + + + Label + Stage 3 Render line to scanbuf + + + RectWidth + 35 + + + + + + Tunnel + + + NetName + ST_RENDER + + + + + + LED + + + rotation + + + + + + + Counter + + + Label + SEC ADDR + + + Bits + 4 + + + + + + Probe + + + + + Tunnel + + + NetName + OVF_RENDER + + + + + + Tunnel + + + rotation + + + + NetName + ST_RENDER + + + + + + Or + + + + + Tunnel + + + rotation + + + + NetName + RST + + + + + + And + + + + + Tunnel + + + rotation + + + + NetName + SQ_READA + + + + + + Tunnel + + + rotation + + + + NetName + PCLK + + + + + + Splitter + + + Input Splitting + 4 + + + Output Splitting + 3,1 + + + + + + Driver + + + Bits + 3 + + + + + + Tunnel + + + NetName + SEC_A + + + + + + Tunnel + + + NetName + ST_RENDER + + + + + + Tunnel + + + rotation + + + + NetName + SEC_D + + + + + + Splitter + + + Input Splitting + 32 + + + Output Splitting + 8,10,10,1,1,1,1 + + + + + + Tunnel + + + NetName + ST_IDLE + + + + + + LED + + + rotation + + + + + + + Text + + + Description + Stage 4 Idle + + + + + + Tunnel + + + NetName + TM_A + + + + + + Driver + + + Bits + 11 + + + + + + Tunnel + + + NetName + ST_RENDER + + + + + + Splitter + + + Input Splitting + 3,8 + + + Output Splitting + 11 + + + + + + Splitter + + + Input Splitting + 10 + + + Output Splitting + 3,7 + + + + + + Tunnel + + + NetName + TM_D + + + + + + Tunnel + + + rotation + + + + NetName + CLK_READB + + + + + + Or + + + + + Tunnel + + + rotation + + + + NetName + CLK_WRITE + + + + + + Tunnel + + + rotation + + + + NetName + CLK_READB + + + + + + Tunnel + + + rotation + + + + NetName + SM_A + + + + + + Probe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file -- cgit v1.3